jaclang 0.6.1__py3-none-any.whl → 0.6.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jaclang might be problematic. Click here for more details.
- jaclang/__init__.py +1 -9
- jaclang/cli/.gitignore +3 -0
- jaclang/cli/cli.md +190 -0
- jaclang/cli/cli.py +25 -4
- jaclang/compiler/.gitignore +1 -0
- jaclang/compiler/__init__.py +1 -0
- jaclang/compiler/absyntree.py +7 -7
- jaclang/compiler/compile.py +4 -4
- jaclang/compiler/jac.lark +1 -0
- jaclang/compiler/parser.py +15 -2
- jaclang/compiler/passes/main/def_impl_match_pass.py +4 -0
- jaclang/compiler/passes/main/fuse_typeinfo_pass.py +10 -1
- jaclang/compiler/passes/main/import_pass.py +47 -33
- jaclang/compiler/passes/main/pyast_load_pass.py +33 -6
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl/getme.impl.jac +3 -0
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl.jac +3 -0
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.jac +9 -0
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.something.else.impl.jac +3 -0
- jaclang/compiler/passes/main/tests/fixtures/base.jac +13 -0
- jaclang/compiler/passes/main/tests/fixtures/base2.jac +14 -0
- jaclang/compiler/passes/main/tests/fixtures/blip.jac +2 -0
- jaclang/compiler/passes/main/tests/fixtures/codegentext.jac +31 -0
- jaclang/compiler/passes/main/tests/fixtures/decls.jac +10 -0
- jaclang/compiler/passes/main/tests/fixtures/defs_and_uses.jac +44 -0
- jaclang/compiler/passes/main/tests/fixtures/fstrings.jac +4 -0
- jaclang/compiler/passes/main/tests/fixtures/func.jac +18 -0
- jaclang/compiler/passes/main/tests/fixtures/func2.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/game1.jac +15 -0
- jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac +11 -0
- jaclang/compiler/passes/main/tests/fixtures/multi_def_err.jac +7 -0
- jaclang/compiler/passes/main/tests/fixtures/registry.jac +36 -0
- jaclang/compiler/passes/main/tests/fixtures/type_info.jac +31 -0
- jaclang/compiler/passes/main/tests/test_type_check_pass.py +15 -0
- jaclang/compiler/passes/tool/tests/fixtures/corelib.jac +480 -0
- jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +480 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/essay_review.jac +36 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/expert_answer.jac +17 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/joke_gen.jac +32 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/odd_word_out.jac +27 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/personality_finder.jac +35 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/text_to_type.jac +25 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/translator.jac +13 -0
- jaclang/compiler/passes/tool/tests/fixtures/genai/wikipedia.jac +63 -0
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot +39 -0
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.jac +7 -0
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.txt +20 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/ability_impl_long_comprehension.jac +15 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/call_with_many_parameters.jac +24 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/entry_main.jac +4 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/long_line_nested_dict_access.jac +10 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/multiline_fstrings.jac +16 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/nested_dict.jac +15 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/nested_loop_and_incrementer.jac +13 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/simple_walker.jac +25 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/try_block_and_walker_spawn_and_fstrings.jac +26 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/tuple_iteration_and_not_negation.jac +20 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/type_annotation.jac +3 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/walker_decl_only.jac +12 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/walker_with_default_values_types_and_docstrings.jac +18 -0
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/walker_with_inline_ability_impl.jac +8 -0
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac +47 -0
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac +47 -0
- jaclang/compiler/passes/utils/mypy_ast_build.py +8 -0
- jaclang/compiler/tests/fixtures/fam.jac +67 -0
- jaclang/compiler/tests/fixtures/hello_world.jac +5 -0
- jaclang/compiler/tests/fixtures/kwesc.jac +5 -0
- jaclang/compiler/tests/fixtures/mod_doc_test.jac +1 -0
- jaclang/compiler/tests/fixtures/staticcheck.jac +20 -0
- jaclang/compiler/tests/fixtures/stuff.jac +6 -0
- jaclang/langserve/__init__.py +1 -0
- jaclang/langserve/server.py +108 -0
- jaclang/langserve/tests/__init__.py +1 -0
- jaclang/langserve/tests/defaults.py +226 -0
- jaclang/langserve/tests/fixtures/hello.jac +1 -0
- jaclang/langserve/tests/pylsp_jsonrpc/__init__.py +2 -0
- jaclang/langserve/tests/pylsp_jsonrpc/dispatchers.py +37 -0
- jaclang/langserve/tests/pylsp_jsonrpc/endpoint.py +294 -0
- jaclang/langserve/tests/pylsp_jsonrpc/exceptions.py +114 -0
- jaclang/langserve/tests/pylsp_jsonrpc/streams.py +113 -0
- jaclang/langserve/tests/session.py +255 -0
- jaclang/langserve/tests/test_server.py +36 -0
- jaclang/langserve/utils.py +53 -0
- jaclang/plugin/tests/fixtures/impl_match.jac +9 -0
- jaclang/plugin/tests/fixtures/impl_match_impl.jac +3 -0
- jaclang/plugin/tests/fixtures/simple_node_connection.jac +55 -0
- jaclang/plugin/tests/fixtures/simple_persistent.jac +41 -0
- jaclang/settings.py +5 -0
- jaclang/tests/fixtures/abc.jac +73 -0
- jaclang/tests/fixtures/access_checker.jac +19 -0
- jaclang/tests/fixtures/access_modifier.jac +49 -0
- jaclang/tests/fixtures/aott_raise.jac +25 -0
- jaclang/tests/fixtures/arithmetic_bug.jac +13 -0
- jaclang/tests/fixtures/assign_compr.jac +15 -0
- jaclang/tests/fixtures/assign_compr_dup.jac +15 -0
- jaclang/tests/fixtures/builtin_dotgen.jac +41 -0
- jaclang/tests/fixtures/chandra_bugs.jac +11 -0
- jaclang/tests/fixtures/chandra_bugs2.jac +26 -0
- jaclang/tests/fixtures/circle_pysolo.py +91 -0
- jaclang/tests/fixtures/deep/deeper/deep_outer_import.jac +9 -0
- jaclang/tests/fixtures/deep/deeper/deep_outer_import2.jac +9 -0
- jaclang/tests/fixtures/deep/deeper/snd_lev.jac +6 -0
- jaclang/tests/fixtures/deep/mycode.jac +4 -0
- jaclang/tests/fixtures/deep/one_lev.jac +6 -0
- jaclang/tests/fixtures/deep/one_lev_dup.jac +6 -0
- jaclang/tests/fixtures/deep/one_lev_dup_py.py +6 -0
- jaclang/tests/fixtures/deep_convert.jac +5 -0
- jaclang/tests/fixtures/deep_convo.py +6 -0
- jaclang/tests/fixtures/deep_import.jac +7 -0
- jaclang/tests/fixtures/deferred_field.jac +13 -0
- jaclang/tests/fixtures/disconn.jac +29 -0
- jaclang/tests/fixtures/edge_node_walk.jac +46 -0
- jaclang/tests/fixtures/edge_ops.jac +45 -0
- jaclang/tests/fixtures/edges_walk.jac +38 -0
- jaclang/tests/fixtures/enum_inside_archtype.jac +20 -0
- jaclang/tests/fixtures/err.jac +5 -0
- jaclang/tests/fixtures/err2.jac +5 -0
- jaclang/tests/fixtures/game1.jac +15 -0
- jaclang/tests/fixtures/gendot_bubble_sort.jac +77 -0
- jaclang/tests/fixtures/guess_game.jac +47 -0
- jaclang/tests/fixtures/has_goodness.jac +15 -0
- jaclang/tests/fixtures/hashcheck.jac +12 -0
- jaclang/tests/fixtures/hashcheck_dup.jac +12 -0
- jaclang/tests/fixtures/hello.jac +5 -0
- jaclang/tests/fixtures/hello_nc.jac +5 -0
- jaclang/tests/fixtures/ignore.jac +43 -0
- jaclang/tests/fixtures/ignore_dup.jac +43 -0
- jaclang/tests/fixtures/impl_grab.impl.jac +4 -0
- jaclang/tests/fixtures/impl_grab.jac +2 -0
- jaclang/tests/fixtures/inherit_check.jac +33 -0
- jaclang/tests/fixtures/jacsamp.jac +6 -0
- jaclang/tests/fixtures/jp_importer.jac +17 -0
- jaclang/tests/fixtures/lambda.jac +6 -0
- jaclang/tests/fixtures/maxfail_run_test.jac +5 -0
- jaclang/tests/fixtures/mtest.impl.jac +6 -0
- jaclang/tests/fixtures/mtest.jac +6 -0
- jaclang/tests/fixtures/needs_import.jac +18 -0
- jaclang/tests/fixtures/needs_import_1.jac +6 -0
- jaclang/tests/fixtures/needs_import_2.jac +6 -0
- jaclang/tests/fixtures/needs_import_3.jac +6 -0
- jaclang/tests/fixtures/needs_import_dup.jac +18 -0
- jaclang/tests/fixtures/package_import.jac +6 -0
- jaclang/tests/fixtures/pyfunc.py +11 -0
- jaclang/tests/fixtures/pyfunc_1.py +311 -0
- jaclang/tests/fixtures/pyfunc_2.py +279 -0
- jaclang/tests/fixtures/pyfunc_3.py +310 -0
- jaclang/tests/fixtures/random_check.jac +62 -0
- jaclang/tests/fixtures/raw_byte_string.jac +18 -0
- jaclang/tests/fixtures/registry.jac +37 -0
- jaclang/tests/fixtures/run_test.jac +5 -0
- jaclang/tests/fixtures/semstr.jac +33 -0
- jaclang/tests/fixtures/simple_archs.jac +26 -0
- jaclang/tests/fixtures/slice_vals.jac +7 -0
- jaclang/tests/fixtures/sub_abil_sep.jac +15 -0
- jaclang/tests/fixtures/sub_abil_sep_multilev.jac +17 -0
- jaclang/tests/fixtures/try_finally.jac +34 -0
- jaclang/tests/fixtures/tupleunpack.jac +6 -0
- jaclang/tests/fixtures/tuplytuples.jac +8 -0
- jaclang/tests/fixtures/type_info.jac +15 -0
- jaclang/tests/fixtures/with_context.jac +30 -0
- jaclang/tests/fixtures/with_llm_function.jac +33 -0
- jaclang/tests/fixtures/with_llm_lower.jac +45 -0
- jaclang/tests/fixtures/with_llm_method.jac +51 -0
- jaclang/tests/fixtures/with_llm_type.jac +52 -0
- jaclang/tests/test_cli.py +239 -0
- jaclang/tests/test_language.py +831 -0
- jaclang/tests/test_man_code.py +148 -0
- jaclang/tests/test_reference.py +95 -0
- jaclang/tests/test_settings.py +46 -0
- jaclang/utils/helpers.py +11 -0
- jaclang/utils/tests/test_lang_tools.py +17 -0
- jaclang/utils/treeprinter.py +12 -4
- jaclang/vendor/__init__.py +12 -1
- jaclang/vendor/attr/__init__.py +134 -0
- jaclang/vendor/attr/__init__.pyi +555 -0
- jaclang/vendor/attr/_cmp.py +150 -0
- jaclang/vendor/attr/_cmp.pyi +13 -0
- jaclang/vendor/attr/_compat.py +87 -0
- jaclang/vendor/attr/_config.py +31 -0
- jaclang/vendor/attr/_funcs.py +483 -0
- jaclang/vendor/attr/_make.py +3119 -0
- jaclang/vendor/attr/_next_gen.py +229 -0
- jaclang/vendor/attr/_typing_compat.pyi +15 -0
- jaclang/vendor/attr/_version_info.py +86 -0
- jaclang/vendor/attr/_version_info.pyi +9 -0
- jaclang/vendor/attr/converters.py +144 -0
- jaclang/vendor/attr/converters.pyi +13 -0
- jaclang/vendor/attr/exceptions.py +95 -0
- jaclang/vendor/attr/exceptions.pyi +17 -0
- jaclang/vendor/attr/filters.py +66 -0
- jaclang/vendor/attr/filters.pyi +6 -0
- jaclang/vendor/attr/setters.py +73 -0
- jaclang/vendor/attr/setters.pyi +19 -0
- jaclang/vendor/attr/validators.py +681 -0
- jaclang/vendor/attr/validators.pyi +88 -0
- jaclang/vendor/attrs/__init__.py +65 -0
- jaclang/vendor/attrs/__init__.pyi +67 -0
- jaclang/vendor/attrs/converters.py +3 -0
- jaclang/vendor/attrs/exceptions.py +3 -0
- jaclang/vendor/attrs/filters.py +3 -0
- jaclang/vendor/attrs/py.typed +0 -0
- jaclang/vendor/attrs/setters.py +3 -0
- jaclang/vendor/attrs/validators.py +3 -0
- jaclang/vendor/attrs-23.2.0.dist-info/METADATA +202 -0
- jaclang/vendor/attrs-23.2.0.dist-info/RECORD +35 -0
- jaclang/vendor/attrs-23.2.0.dist-info/WHEEL +4 -0
- jaclang/vendor/attrs-23.2.0.dist-info/licenses/LICENSE +21 -0
- jaclang/vendor/cattr/__init__.py +25 -0
- jaclang/vendor/cattr/converters.py +8 -0
- jaclang/vendor/cattr/disambiguators.py +3 -0
- jaclang/vendor/cattr/dispatch.py +3 -0
- jaclang/vendor/cattr/errors.py +15 -0
- jaclang/vendor/cattr/gen.py +21 -0
- jaclang/vendor/cattr/preconf/__init__.py +3 -0
- jaclang/vendor/cattr/preconf/bson.py +4 -0
- jaclang/vendor/cattr/preconf/json.py +4 -0
- jaclang/vendor/cattr/preconf/msgpack.py +4 -0
- jaclang/vendor/cattr/preconf/orjson.py +4 -0
- jaclang/vendor/cattr/preconf/pyyaml.py +4 -0
- jaclang/vendor/cattr/preconf/tomlkit.py +4 -0
- jaclang/vendor/cattr/preconf/ujson.py +4 -0
- jaclang/vendor/cattr/py.typed +0 -0
- jaclang/vendor/cattrs/__init__.py +55 -0
- jaclang/vendor/cattrs/_compat.py +465 -0
- jaclang/vendor/cattrs/_generics.py +22 -0
- jaclang/vendor/cattrs/converters.py +1101 -0
- jaclang/vendor/cattrs/disambiguators.py +132 -0
- jaclang/vendor/cattrs/dispatch.py +164 -0
- jaclang/vendor/cattrs/errors.py +129 -0
- jaclang/vendor/cattrs/fns.py +17 -0
- jaclang/vendor/cattrs/gen/__init__.py +890 -0
- jaclang/vendor/cattrs/gen/_consts.py +19 -0
- jaclang/vendor/cattrs/gen/_generics.py +43 -0
- jaclang/vendor/cattrs/gen/_lc.py +28 -0
- jaclang/vendor/cattrs/gen/_shared.py +51 -0
- jaclang/vendor/cattrs/gen/typeddicts.py +624 -0
- jaclang/vendor/cattrs/preconf/__init__.py +7 -0
- jaclang/vendor/cattrs/preconf/bson.py +107 -0
- jaclang/vendor/cattrs/preconf/cbor2.py +47 -0
- jaclang/vendor/cattrs/preconf/json.py +52 -0
- jaclang/vendor/cattrs/preconf/msgpack.py +51 -0
- jaclang/vendor/cattrs/preconf/orjson.py +82 -0
- jaclang/vendor/cattrs/preconf/pyyaml.py +60 -0
- jaclang/vendor/cattrs/preconf/tomlkit.py +85 -0
- jaclang/vendor/cattrs/preconf/ujson.py +52 -0
- jaclang/vendor/cattrs/py.typed +0 -0
- jaclang/vendor/cattrs/strategies/__init__.py +11 -0
- jaclang/vendor/cattrs/strategies/_class_methods.py +64 -0
- jaclang/vendor/cattrs/strategies/_subclasses.py +224 -0
- jaclang/vendor/cattrs/strategies/_unions.py +235 -0
- jaclang/vendor/cattrs/v.py +111 -0
- jaclang/vendor/cattrs-23.2.3.dist-info/METADATA +221 -0
- jaclang/vendor/cattrs-23.2.3.dist-info/RECORD +48 -0
- jaclang/vendor/cattrs-23.2.3.dist-info/WHEEL +4 -0
- jaclang/vendor/cattrs-23.2.3.dist-info/licenses/LICENSE +11 -0
- jaclang/vendor/lark/__init__.py +38 -38
- jaclang/vendor/lark/__pyinstaller/__init__.py +6 -7
- jaclang/vendor/lark/__pyinstaller/hook-lark.py +14 -14
- jaclang/vendor/lark/ast_utils.py +59 -70
- jaclang/vendor/lark/common.py +89 -113
- jaclang/vendor/lark/exceptions.py +292 -352
- jaclang/vendor/lark/grammar.py +130 -158
- jaclang/vendor/lark/grammars/common.lark +59 -59
- jaclang/vendor/lark/grammars/lark.lark +62 -62
- jaclang/vendor/lark/grammars/python.lark +302 -302
- jaclang/vendor/lark/grammars/unicode.lark +7 -7
- jaclang/vendor/lark/indenter.py +112 -118
- jaclang/vendor/lark/lark.py +661 -800
- jaclang/vendor/lark/lexer.py +678 -829
- jaclang/vendor/lark/load_grammar.py +1428 -1673
- jaclang/vendor/lark/parse_tree_builder.py +391 -466
- jaclang/vendor/lark/parser_frontends.py +257 -305
- jaclang/vendor/lark/parsers/cyk.py +340 -391
- jaclang/vendor/lark/parsers/earley.py +308 -385
- jaclang/vendor/lark/parsers/earley_common.py +42 -59
- jaclang/vendor/lark/parsers/earley_forest.py +810 -923
- jaclang/vendor/lark/parsers/grammar_analysis.py +203 -239
- jaclang/vendor/lark/parsers/lalr_analysis.py +332 -378
- jaclang/vendor/lark/parsers/lalr_interactive_parser.py +157 -171
- jaclang/vendor/lark/parsers/lalr_parser.py +122 -145
- jaclang/vendor/lark/parsers/lalr_parser_state.py +110 -141
- jaclang/vendor/lark/parsers/xearley.py +165 -209
- jaclang/vendor/lark/reconstruct.py +107 -131
- jaclang/vendor/lark/tools/__init__.py +71 -93
- jaclang/vendor/lark/tools/nearley.py +202 -240
- jaclang/vendor/lark/tools/serialize.py +32 -35
- jaclang/vendor/lark/tools/standalone.py +196 -225
- jaclang/vendor/lark/tree.py +272 -302
- jaclang/vendor/lark/tree_matcher.py +186 -194
- jaclang/vendor/lark/tree_templates.py +18 -26
- jaclang/vendor/lark/utils.py +361 -393
- jaclang/vendor/lark/visitors.py +593 -645
- jaclang/vendor/lark-1.1.9.dist-info/LICENSE +18 -0
- jaclang/vendor/lark-1.1.9.dist-info/METADATA +47 -0
- jaclang/vendor/lark-1.1.9.dist-info/RECORD +46 -0
- jaclang/vendor/lark-1.1.9.dist-info/WHEEL +5 -0
- jaclang/vendor/lark-1.1.9.dist-info/entry_points.txt +2 -0
- jaclang/vendor/lark-1.1.9.dist-info/top_level.txt +1 -0
- jaclang/vendor/lsprotocol/__init__.py +2 -0
- jaclang/vendor/lsprotocol/_hooks.py +1237 -0
- jaclang/vendor/lsprotocol/converters.py +17 -0
- jaclang/vendor/lsprotocol/py.typed +0 -0
- jaclang/vendor/lsprotocol/types.py +12898 -0
- jaclang/vendor/lsprotocol/validators.py +47 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/LICENSE +21 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/METADATA +65 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/RECORD +10 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/WHEEL +4 -0
- jaclang/vendor/mypy/api.py +1 -3
- jaclang/vendor/mypy/applytype.py +24 -24
- jaclang/vendor/mypy/argmap.py +5 -9
- jaclang/vendor/mypy/binder.py +11 -42
- jaclang/vendor/mypy/build.py +78 -260
- jaclang/vendor/mypy/checker.py +394 -930
- jaclang/vendor/mypy/checkexpr.py +210 -640
- jaclang/vendor/mypy/checkmember.py +44 -94
- jaclang/vendor/mypy/checkpattern.py +32 -104
- jaclang/vendor/mypy/checkstrformat.py +38 -131
- jaclang/vendor/mypy/config_parser.py +8 -31
- jaclang/vendor/mypy/constant_fold.py +1 -3
- jaclang/vendor/mypy/constraints.py +94 -253
- jaclang/vendor/mypy/copytype.py +3 -13
- jaclang/vendor/mypy/defaults.py +2 -4
- jaclang/vendor/mypy/dmypy/client.py +30 -102
- jaclang/vendor/mypy/dmypy_server.py +31 -118
- jaclang/vendor/mypy/erasetype.py +6 -18
- jaclang/vendor/mypy/errorcodes.py +26 -64
- jaclang/vendor/mypy/errors.py +23 -117
- jaclang/vendor/mypy/evalexpr.py +1 -3
- jaclang/vendor/mypy/expandtype.py +37 -40
- jaclang/vendor/mypy/exprtotype.py +14 -27
- jaclang/vendor/mypy/fastparse.py +66 -215
- jaclang/vendor/mypy/find_sources.py +4 -14
- jaclang/vendor/mypy/fixup.py +5 -10
- jaclang/vendor/mypy/indirection.py +1 -3
- jaclang/vendor/mypy/infer.py +2 -6
- jaclang/vendor/mypy/inspections.py +3 -13
- jaclang/vendor/mypy/ipc.py +7 -28
- jaclang/vendor/mypy/join.py +20 -39
- jaclang/vendor/mypy/literals.py +2 -10
- jaclang/vendor/mypy/main.py +39 -138
- jaclang/vendor/mypy/maptype.py +2 -6
- jaclang/vendor/mypy/meet.py +23 -77
- jaclang/vendor/mypy/message_registry.py +33 -88
- jaclang/vendor/mypy/messages.py +146 -447
- jaclang/vendor/mypy/metastore.py +2 -6
- jaclang/vendor/mypy/modulefinder.py +29 -76
- jaclang/vendor/mypy/moduleinspect.py +5 -17
- jaclang/vendor/mypy/mro.py +1 -3
- jaclang/vendor/mypy/nodes.py +35 -119
- jaclang/vendor/mypy/operators.py +2 -11
- jaclang/vendor/mypy/options.py +3 -9
- jaclang/vendor/mypy/parse.py +1 -3
- jaclang/vendor/mypy/plugin.py +25 -75
- jaclang/vendor/mypy/plugins/attrs.py +53 -119
- jaclang/vendor/mypy/plugins/common.py +9 -29
- jaclang/vendor/mypy/plugins/ctypes.py +5 -15
- jaclang/vendor/mypy/plugins/dataclasses.py +42 -107
- jaclang/vendor/mypy/plugins/default.py +26 -45
- jaclang/vendor/mypy/plugins/enums.py +4 -17
- jaclang/vendor/mypy/plugins/functools.py +2 -11
- jaclang/vendor/mypy/plugins/proper_plugin.py +2 -6
- jaclang/vendor/mypy/plugins/singledispatch.py +7 -33
- jaclang/vendor/mypy/reachability.py +2 -8
- jaclang/vendor/mypy/refinfo.py +1 -3
- jaclang/vendor/mypy/report.py +23 -52
- jaclang/vendor/mypy/semanal.py +385 -693
- jaclang/vendor/mypy/semanal_classprop.py +9 -34
- jaclang/vendor/mypy/semanal_enum.py +7 -19
- jaclang/vendor/mypy/semanal_infer.py +1 -3
- jaclang/vendor/mypy/semanal_main.py +5 -25
- jaclang/vendor/mypy/semanal_namedtuple.py +17 -56
- jaclang/vendor/mypy/semanal_newtype.py +8 -27
- jaclang/vendor/mypy/semanal_pass1.py +2 -6
- jaclang/vendor/mypy/semanal_shared.py +9 -27
- jaclang/vendor/mypy/semanal_typeargs.py +12 -41
- jaclang/vendor/mypy/semanal_typeddict.py +18 -59
- jaclang/vendor/mypy/server/astdiff.py +9 -34
- jaclang/vendor/mypy/server/astmerge.py +2 -6
- jaclang/vendor/mypy/server/deps.py +22 -71
- jaclang/vendor/mypy/server/mergecheck.py +1 -3
- jaclang/vendor/mypy/server/objgraph.py +2 -8
- jaclang/vendor/mypy/server/update.py +18 -54
- jaclang/vendor/mypy/solve.py +4 -17
- jaclang/vendor/mypy/split_namespace.py +1 -3
- jaclang/vendor/mypy/stats.py +6 -24
- jaclang/vendor/mypy/strconv.py +8 -31
- jaclang/vendor/mypy/stubdoc.py +8 -38
- jaclang/vendor/mypy/stubgen.py +79 -144
- jaclang/vendor/mypy/stubgenc.py +22 -69
- jaclang/vendor/mypy/stubtest.py +62 -167
- jaclang/vendor/mypy/stubutil.py +45 -61
- jaclang/vendor/mypy/subtypes.py +57 -133
- jaclang/vendor/mypy/suggestions.py +19 -53
- jaclang/vendor/mypy/test/data.py +13 -40
- jaclang/vendor/mypy/test/helpers.py +18 -43
- jaclang/vendor/mypy/test/meta/_pytest.py +2 -13
- jaclang/vendor/mypy/test/meta/test_parse_data.py +5 -9
- jaclang/vendor/mypy/test/meta/test_update_data.py +1 -3
- jaclang/vendor/mypy/test/test_find_sources.py +14 -32
- jaclang/vendor/mypy/test/test_ref_info.py +3 -9
- jaclang/vendor/mypy/test/testargs.py +1 -4
- jaclang/vendor/mypy/test/testcheck.py +14 -47
- jaclang/vendor/mypy/test/testcmdline.py +3 -14
- jaclang/vendor/mypy/test/testconstraints.py +8 -26
- jaclang/vendor/mypy/test/testdaemon.py +2 -9
- jaclang/vendor/mypy/test/testdeps.py +4 -12
- jaclang/vendor/mypy/test/testdiff.py +2 -6
- jaclang/vendor/mypy/test/testerrorstream.py +1 -3
- jaclang/vendor/mypy/test/testfinegrained.py +18 -56
- jaclang/vendor/mypy/test/testgraph.py +3 -18
- jaclang/vendor/mypy/test/testinfer.py +13 -55
- jaclang/vendor/mypy/test/testipc.py +3 -9
- jaclang/vendor/mypy/test/testmerge.py +5 -17
- jaclang/vendor/mypy/test/testmodulefinder.py +8 -30
- jaclang/vendor/mypy/test/testmypyc.py +1 -3
- jaclang/vendor/mypy/test/testparse.py +1 -3
- jaclang/vendor/mypy/test/testpep561.py +4 -13
- jaclang/vendor/mypy/test/testpythoneval.py +2 -6
- jaclang/vendor/mypy/test/testreports.py +1 -2
- jaclang/vendor/mypy/test/testsemanal.py +3 -10
- jaclang/vendor/mypy/test/testsolve.py +5 -15
- jaclang/vendor/mypy/test/teststubgen.py +69 -210
- jaclang/vendor/mypy/test/teststubtest.py +123 -163
- jaclang/vendor/mypy/test/testsubtypes.py +14 -34
- jaclang/vendor/mypy/test/testtransform.py +2 -8
- jaclang/vendor/mypy/test/testtypegen.py +2 -8
- jaclang/vendor/mypy/test/testtypes.py +77 -253
- jaclang/vendor/mypy/test/testutil.py +1 -3
- jaclang/vendor/mypy/test/typefixture.py +11 -38
- jaclang/vendor/mypy/test/update_data.py +4 -15
- jaclang/vendor/mypy/test/visitors.py +1 -9
- jaclang/vendor/mypy/treetransform.py +8 -25
- jaclang/vendor/mypy/tvar_scope.py +23 -3
- jaclang/vendor/mypy/type_visitor.py +3 -10
- jaclang/vendor/mypy/typeanal.py +183 -309
- jaclang/vendor/mypy/typeops.py +27 -73
- jaclang/vendor/mypy/types.py +77 -185
- jaclang/vendor/mypy/types_utils.py +7 -20
- jaclang/vendor/mypy/typeshed/LICENSE +237 -0
- jaclang/vendor/mypy/typeshed/stdlib/VERSIONS +309 -0
- jaclang/vendor/mypy/typeshed/stdlib/__future__.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/__main__.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/_ast.pyi +591 -0
- jaclang/vendor/mypy/typeshed/stdlib/_bisect.pyi +84 -0
- jaclang/vendor/mypy/typeshed/stdlib/_bootlocale.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/_codecs.pyi +133 -0
- jaclang/vendor/mypy/typeshed/stdlib/_collections_abc.pyi +94 -0
- jaclang/vendor/mypy/typeshed/stdlib/_compat_pickle.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/_compression.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/_csv.pyi +90 -0
- jaclang/vendor/mypy/typeshed/stdlib/_ctypes.pyi +207 -0
- jaclang/vendor/mypy/typeshed/stdlib/_curses.pyi +566 -0
- jaclang/vendor/mypy/typeshed/stdlib/_decimal.pyi +281 -0
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_thread.pyi +33 -0
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_threading.pyi +164 -0
- jaclang/vendor/mypy/typeshed/stdlib/_heapq.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/_imp.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/_json.pyi +49 -0
- jaclang/vendor/mypy/typeshed/stdlib/_locale.pyi +100 -0
- jaclang/vendor/mypy/typeshed/stdlib/_lsprof.pyi +35 -0
- jaclang/vendor/mypy/typeshed/stdlib/_markupbase.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/_msi.pyi +92 -0
- jaclang/vendor/mypy/typeshed/stdlib/_operator.pyi +147 -0
- jaclang/vendor/mypy/typeshed/stdlib/_osx_support.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/_posixsubprocess.pyi +33 -0
- jaclang/vendor/mypy/typeshed/stdlib/_py_abc.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/_pydecimal.pyi +43 -0
- jaclang/vendor/mypy/typeshed/stdlib/_random.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/_sitebuiltins.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/_socket.pyi +803 -0
- jaclang/vendor/mypy/typeshed/stdlib/_stat.pyi +103 -0
- jaclang/vendor/mypy/typeshed/stdlib/_thread.pyi +59 -0
- jaclang/vendor/mypy/typeshed/stdlib/_threading_local.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/_tkinter.pyi +121 -0
- jaclang/vendor/mypy/typeshed/stdlib/_tracemalloc.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/__init__.pyi +347 -0
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/dbapi.pyi +37 -0
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/wsgi.pyi +44 -0
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/xml.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/_warnings.pyi +55 -0
- jaclang/vendor/mypy/typeshed/stdlib/_weakref.pyi +41 -0
- jaclang/vendor/mypy/typeshed/stdlib/_weakrefset.pyi +51 -0
- jaclang/vendor/mypy/typeshed/stdlib/_winapi.pyi +255 -0
- jaclang/vendor/mypy/typeshed/stdlib/abc.pyi +51 -0
- jaclang/vendor/mypy/typeshed/stdlib/aifc.pyi +91 -0
- jaclang/vendor/mypy/typeshed/stdlib/antigravity.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi +595 -0
- jaclang/vendor/mypy/typeshed/stdlib/array.pyi +92 -0
- jaclang/vendor/mypy/typeshed/stdlib/ast.pyi +277 -0
- jaclang/vendor/mypy/typeshed/stdlib/asynchat.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/__init__.pyi +41 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_events.pyi +440 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_futures.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +63 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_tasks.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/constants.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/coroutines.pyi +26 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/events.pyi +580 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/exceptions.pyi +43 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/format_helpers.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/futures.pyi +57 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/locks.pyi +121 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/log.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/mixins.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/proactor_events.pyi +64 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/protocols.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/queues.pyi +47 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/runners.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/selector_events.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/sslproto.pyi +165 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/staggered.pyi +10 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/streams.pyi +153 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/subprocess.pyi +229 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/taskgroups.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/tasks.pyi +497 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/threads.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/timeouts.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/transports.pyi +47 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/trsock.pyi +94 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/unix_events.pyi +196 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_events.pyi +85 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_utils.pyi +49 -0
- jaclang/vendor/mypy/typeshed/stdlib/asyncore.pyi +90 -0
- jaclang/vendor/mypy/typeshed/stdlib/atexit.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/audioop.pyi +43 -0
- jaclang/vendor/mypy/typeshed/stdlib/base64.pyi +59 -0
- jaclang/vendor/mypy/typeshed/stdlib/bdb.pyi +102 -0
- jaclang/vendor/mypy/typeshed/stdlib/binascii.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/binhex.pyi +45 -0
- jaclang/vendor/mypy/typeshed/stdlib/bisect.pyi +4 -0
- jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi +1936 -0
- jaclang/vendor/mypy/typeshed/stdlib/bz2.pyi +146 -0
- jaclang/vendor/mypy/typeshed/stdlib/cProfile.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/calendar.pyi +208 -0
- jaclang/vendor/mypy/typeshed/stdlib/cgi.pyi +118 -0
- jaclang/vendor/mypy/typeshed/stdlib/cgitb.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/chunk.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/cmath.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/cmd.pyi +45 -0
- jaclang/vendor/mypy/typeshed/stdlib/code.pyi +33 -0
- jaclang/vendor/mypy/typeshed/stdlib/codecs.pyi +285 -0
- jaclang/vendor/mypy/typeshed/stdlib/codeop.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/collections/__init__.pyi +485 -0
- jaclang/vendor/mypy/typeshed/stdlib/collections/abc.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/colorsys.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/compileall.pyi +111 -0
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/_base.pyi +126 -0
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/process.pyi +233 -0
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/thread.pyi +80 -0
- jaclang/vendor/mypy/typeshed/stdlib/configparser.pyi +313 -0
- jaclang/vendor/mypy/typeshed/stdlib/contextlib.pyi +208 -0
- jaclang/vendor/mypy/typeshed/stdlib/contextvars.pyi +63 -0
- jaclang/vendor/mypy/typeshed/stdlib/copy.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/copyreg.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/crypt.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/csv.pyi +147 -0
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/__init__.pyi +187 -0
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/_endian.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/util.pyi +6 -0
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/wintypes.pyi +298 -0
- jaclang/vendor/mypy/typeshed/stdlib/curses/__init__.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/curses/ascii.pyi +62 -0
- jaclang/vendor/mypy/typeshed/stdlib/curses/has_key.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/curses/panel.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/curses/textpad.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/dataclasses.pyi +315 -0
- jaclang/vendor/mypy/typeshed/stdlib/datetime.pyi +295 -0
- jaclang/vendor/mypy/typeshed/stdlib/dbm/__init__.pyi +95 -0
- jaclang/vendor/mypy/typeshed/stdlib/dbm/dumb.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/dbm/gnu.pyi +41 -0
- jaclang/vendor/mypy/typeshed/stdlib/dbm/ndbm.pyi +37 -0
- jaclang/vendor/mypy/typeshed/stdlib/decimal.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/difflib.pyi +140 -0
- jaclang/vendor/mypy/typeshed/stdlib/dis.pyi +144 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/__init__.pyi +5 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/archive_util.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/ccompiler.pyi +152 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cmd.pyi +66 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +45 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +52 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_clib.pyi +27 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_ext.pyi +50 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_py.pyi +44 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/check.pyi +39 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/clean.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/config.pyi +83 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install.pyi +63 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_data.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +18 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_headers.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_lib.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +18 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/register.pyi +18 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/sdist.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/upload.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/config.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/core.pyi +57 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/debug.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dep_util.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dir_util.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dist.pyi +146 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/errors.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/extension.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/file_util.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/filelist.pyi +50 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/log.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/msvccompiler.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/spawn.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/sysconfig.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/text_file.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/unixccompiler.pyi +3 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/util.pyi +46 -0
- jaclang/vendor/mypy/typeshed/stdlib/distutils/version.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/doctest.pyi +248 -0
- jaclang/vendor/mypy/typeshed/stdlib/dummy_threading.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/__init__.pyi +29 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/_header_value_parser.pyi +392 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/_policybase.pyi +51 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/base64mime.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/charset.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/contentmanager.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/encoders.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/errors.pyi +39 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/feedparser.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/generator.pyi +40 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/header.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/headerregistry.pyi +178 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/iterators.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/message.pyi +165 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/application.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/audio.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/base.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/image.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/message.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/multipart.pyi +18 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +5 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/text.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/parser.pyi +26 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/policy.pyi +38 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/quoprimime.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/email/utils.pyi +70 -0
- jaclang/vendor/mypy/typeshed/stdlib/encodings/__init__.pyi +10 -0
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/ensurepip/__init__.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/enum.pyi +320 -0
- jaclang/vendor/mypy/typeshed/stdlib/errno.pyi +222 -0
- jaclang/vendor/mypy/typeshed/stdlib/faulthandler.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/fcntl.pyi +127 -0
- jaclang/vendor/mypy/typeshed/stdlib/filecmp.pyi +57 -0
- jaclang/vendor/mypy/typeshed/stdlib/fileinput.pyi +213 -0
- jaclang/vendor/mypy/typeshed/stdlib/fnmatch.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/formatter.pyi +88 -0
- jaclang/vendor/mypy/typeshed/stdlib/fractions.pyi +150 -0
- jaclang/vendor/mypy/typeshed/stdlib/ftplib.pyi +178 -0
- jaclang/vendor/mypy/typeshed/stdlib/functools.pyi +213 -0
- jaclang/vendor/mypy/typeshed/stdlib/gc.pyi +37 -0
- jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi +52 -0
- jaclang/vendor/mypy/typeshed/stdlib/getopt.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/getpass.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/gettext.pyi +169 -0
- jaclang/vendor/mypy/typeshed/stdlib/glob.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/graphlib.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/grp.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/gzip.pyi +160 -0
- jaclang/vendor/mypy/typeshed/stdlib/hashlib.pyi +167 -0
- jaclang/vendor/mypy/typeshed/stdlib/heapq.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/hmac.pyi +38 -0
- jaclang/vendor/mypy/typeshed/stdlib/html/__init__.pyi +6 -0
- jaclang/vendor/mypy/typeshed/stdlib/html/entities.pyi +6 -0
- jaclang/vendor/mypy/typeshed/stdlib/html/parser.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/http/__init__.pyi +105 -0
- jaclang/vendor/mypy/typeshed/stdlib/http/client.pyi +259 -0
- jaclang/vendor/mypy/typeshed/stdlib/http/cookiejar.pyi +159 -0
- jaclang/vendor/mypy/typeshed/stdlib/http/cookies.pyi +60 -0
- jaclang/vendor/mypy/typeshed/stdlib/http/server.pyi +83 -0
- jaclang/vendor/mypy/typeshed/stdlib/imaplib.pyi +168 -0
- jaclang/vendor/mypy/typeshed/stdlib/imghdr.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/imp.pyi +62 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/__init__.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/_abc.pyi +15 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/abc.pyi +172 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/machinery.pyi +179 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +285 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +49 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/readers.pyi +68 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/__init__.pyi +46 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/abc.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/readers.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/simple.pyi +56 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/simple.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/importlib/util.pyi +43 -0
- jaclang/vendor/mypy/typeshed/stdlib/inspect.pyi +632 -0
- jaclang/vendor/mypy/typeshed/stdlib/io.pyi +238 -0
- jaclang/vendor/mypy/typeshed/stdlib/ipaddress.pyi +208 -0
- jaclang/vendor/mypy/typeshed/stdlib/itertools.pyi +273 -0
- jaclang/vendor/mypy/typeshed/stdlib/json/__init__.pyi +61 -0
- jaclang/vendor/mypy/typeshed/stdlib/json/decoder.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/json/encoder.pyi +40 -0
- jaclang/vendor/mypy/typeshed/stdlib/json/tool.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/keyword.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +10 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +15 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +6 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +7 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +7 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +10 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +7 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +17 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +15 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +12 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/main.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +27 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +7 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +30 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +50 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +67 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +96 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pygram.pyi +114 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pytree.pyi +117 -0
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/refactor.pyi +82 -0
- jaclang/vendor/mypy/typeshed/stdlib/linecache.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/locale.pyi +152 -0
- jaclang/vendor/mypy/typeshed/stdlib/logging/__init__.pyi +658 -0
- jaclang/vendor/mypy/typeshed/stdlib/logging/config.pyi +134 -0
- jaclang/vendor/mypy/typeshed/stdlib/logging/handlers.pyi +275 -0
- jaclang/vendor/mypy/typeshed/stdlib/lzma.pyi +197 -0
- jaclang/vendor/mypy/typeshed/stdlib/mailbox.pyi +256 -0
- jaclang/vendor/mypy/typeshed/stdlib/mailcap.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/marshal.pyi +33 -0
- jaclang/vendor/mypy/typeshed/stdlib/math.pyi +125 -0
- jaclang/vendor/mypy/typeshed/stdlib/mimetypes.pyi +46 -0
- jaclang/vendor/mypy/typeshed/stdlib/mmap.pyi +113 -0
- jaclang/vendor/mypy/typeshed/stdlib/modulefinder.pyi +66 -0
- jaclang/vendor/mypy/typeshed/stdlib/msilib/__init__.pyi +177 -0
- jaclang/vendor/mypy/typeshed/stdlib/msilib/schema.pyi +94 -0
- jaclang/vendor/mypy/typeshed/stdlib/msilib/sequence.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/msilib/text.pyi +7 -0
- jaclang/vendor/mypy/typeshed/stdlib/msvcrt.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/__init__.pyi +90 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/connection.pyi +75 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/context.pyi +189 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +77 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +39 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/heap.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/managers.pyi +212 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/pool.pyi +103 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +30 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/process.pyi +39 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/queues.pyi +41 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/reduction.pyi +90 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +18 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +40 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +107 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/spawn.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +54 -0
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/util.pyi +98 -0
- jaclang/vendor/mypy/typeshed/stdlib/netrc.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/nis.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/nntplib.pyi +125 -0
- jaclang/vendor/mypy/typeshed/stdlib/nt.pyi +111 -0
- jaclang/vendor/mypy/typeshed/stdlib/ntpath.pyi +119 -0
- jaclang/vendor/mypy/typeshed/stdlib/nturl2path.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/numbers.pyi +209 -0
- jaclang/vendor/mypy/typeshed/stdlib/opcode.pyi +59 -0
- jaclang/vendor/mypy/typeshed/stdlib/operator.pyi +110 -0
- jaclang/vendor/mypy/typeshed/stdlib/optparse.pyi +255 -0
- jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi +1157 -0
- jaclang/vendor/mypy/typeshed/stdlib/os/path.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/ossaudiodev.pyi +131 -0
- jaclang/vendor/mypy/typeshed/stdlib/parser.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/pathlib.pyi +232 -0
- jaclang/vendor/mypy/typeshed/stdlib/pdb.pyi +181 -0
- jaclang/vendor/mypy/typeshed/stdlib/pickle.pyi +271 -0
- jaclang/vendor/mypy/typeshed/stdlib/pickletools.pyi +167 -0
- jaclang/vendor/mypy/typeshed/stdlib/pipes.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/pkgutil.pyi +53 -0
- jaclang/vendor/mypy/typeshed/stdlib/platform.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/plistlib.pyi +113 -0
- jaclang/vendor/mypy/typeshed/stdlib/poplib.pyi +71 -0
- jaclang/vendor/mypy/typeshed/stdlib/posix.pyi +361 -0
- jaclang/vendor/mypy/typeshed/stdlib/posixpath.pyi +161 -0
- jaclang/vendor/mypy/typeshed/stdlib/pprint.pyi +112 -0
- jaclang/vendor/mypy/typeshed/stdlib/profile.pyi +31 -0
- jaclang/vendor/mypy/typeshed/stdlib/pstats.pyi +80 -0
- jaclang/vendor/mypy/typeshed/stdlib/pty.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/pwd.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/py_compile.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/pyclbr.pyi +74 -0
- jaclang/vendor/mypy/typeshed/stdlib/pydoc.pyi +261 -0
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/topics.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/__init__.pyi +85 -0
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/errors.pyi +49 -0
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/model.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/queue.pyi +66 -0
- jaclang/vendor/mypy/typeshed/stdlib/quopri.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/random.pyi +138 -0
- jaclang/vendor/mypy/typeshed/stdlib/re.pyi +290 -0
- jaclang/vendor/mypy/typeshed/stdlib/readline.pyi +36 -0
- jaclang/vendor/mypy/typeshed/stdlib/reprlib.pyi +65 -0
- jaclang/vendor/mypy/typeshed/stdlib/resource.pyi +94 -0
- jaclang/vendor/mypy/typeshed/stdlib/rlcompleter.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/runpy.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/sched.pyi +42 -0
- jaclang/vendor/mypy/typeshed/stdlib/secrets.pyi +15 -0
- jaclang/vendor/mypy/typeshed/stdlib/select.pyi +155 -0
- jaclang/vendor/mypy/typeshed/stdlib/selectors.pyi +67 -0
- jaclang/vendor/mypy/typeshed/stdlib/shelve.pyi +46 -0
- jaclang/vendor/mypy/typeshed/stdlib/shlex.pyi +63 -0
- jaclang/vendor/mypy/typeshed/stdlib/shutil.pyi +185 -0
- jaclang/vendor/mypy/typeshed/stdlib/signal.pyi +188 -0
- jaclang/vendor/mypy/typeshed/stdlib/site.pyi +27 -0
- jaclang/vendor/mypy/typeshed/stdlib/smtpd.pyi +91 -0
- jaclang/vendor/mypy/typeshed/stdlib/smtplib.pyi +204 -0
- jaclang/vendor/mypy/typeshed/stdlib/sndhdr.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/socket.pyi +825 -0
- jaclang/vendor/mypy/typeshed/stdlib/socketserver.pyi +168 -0
- jaclang/vendor/mypy/typeshed/stdlib/spwd.pyi +41 -0
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/__init__.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +551 -0
- jaclang/vendor/mypy/typeshed/stdlib/sre_compile.pyi +11 -0
- jaclang/vendor/mypy/typeshed/stdlib/sre_constants.pyi +130 -0
- jaclang/vendor/mypy/typeshed/stdlib/sre_parse.pyi +104 -0
- jaclang/vendor/mypy/typeshed/stdlib/ssl.pyi +537 -0
- jaclang/vendor/mypy/typeshed/stdlib/stat.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/statistics.pyi +132 -0
- jaclang/vendor/mypy/typeshed/stdlib/string.pyi +83 -0
- jaclang/vendor/mypy/typeshed/stdlib/stringprep.pyi +27 -0
- jaclang/vendor/mypy/typeshed/stdlib/struct.pyi +26 -0
- jaclang/vendor/mypy/typeshed/stdlib/subprocess.pyi +2615 -0
- jaclang/vendor/mypy/typeshed/stdlib/sunau.pyi +86 -0
- jaclang/vendor/mypy/typeshed/stdlib/symbol.pyi +93 -0
- jaclang/vendor/mypy/typeshed/stdlib/symtable.pyi +58 -0
- jaclang/vendor/mypy/typeshed/stdlib/sys/__init__.pyi +373 -0
- jaclang/vendor/mypy/typeshed/stdlib/sys/_monitoring.pyi +52 -0
- jaclang/vendor/mypy/typeshed/stdlib/sysconfig.pyi +48 -0
- jaclang/vendor/mypy/typeshed/stdlib/syslog.pyi +46 -0
- jaclang/vendor/mypy/typeshed/stdlib/tabnanny.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/tarfile.pyi +441 -0
- jaclang/vendor/mypy/typeshed/stdlib/telnetlib.pyi +122 -0
- jaclang/vendor/mypy/typeshed/stdlib/tempfile.pyi +477 -0
- jaclang/vendor/mypy/typeshed/stdlib/termios.pyi +267 -0
- jaclang/vendor/mypy/typeshed/stdlib/textwrap.pyi +103 -0
- jaclang/vendor/mypy/typeshed/stdlib/this.pyi +2 -0
- jaclang/vendor/mypy/typeshed/stdlib/threading.pyi +187 -0
- jaclang/vendor/mypy/typeshed/stdlib/time.pyi +108 -0
- jaclang/vendor/mypy/typeshed/stdlib/timeit.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/__init__.pyi +3654 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/colorchooser.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/commondialog.pyi +14 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/constants.pyi +80 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dialog.pyi +16 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dnd.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/filedialog.pyi +151 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/font.pyi +116 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/messagebox.pyi +44 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +9 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/simpledialog.pyi +54 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/tix.pyi +299 -0
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/ttk.pyi +1204 -0
- jaclang/vendor/mypy/typeshed/stdlib/token.pyi +159 -0
- jaclang/vendor/mypy/typeshed/stdlib/tokenize.pyi +177 -0
- jaclang/vendor/mypy/typeshed/stdlib/tomllib.pyi +10 -0
- jaclang/vendor/mypy/typeshed/stdlib/trace.pyi +79 -0
- jaclang/vendor/mypy/typeshed/stdlib/traceback.pyi +262 -0
- jaclang/vendor/mypy/typeshed/stdlib/tracemalloc.pyi +124 -0
- jaclang/vendor/mypy/typeshed/stdlib/tty.pyi +30 -0
- jaclang/vendor/mypy/typeshed/stdlib/turtle.pyi +713 -0
- jaclang/vendor/mypy/typeshed/stdlib/types.pyi +614 -0
- jaclang/vendor/mypy/typeshed/stdlib/typing.pyi +976 -0
- jaclang/vendor/mypy/typeshed/stdlib/typing_extensions.pyi +509 -0
- jaclang/vendor/mypy/typeshed/stdlib/unicodedata.pyi +73 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/__init__.pyi +67 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/_log.pyi +27 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/async_case.pyi +21 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/case.pyi +342 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/loader.pyi +51 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/main.pyi +69 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/mock.pyi +430 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/result.pyi +47 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/runner.pyi +72 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/signals.pyi +15 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/suite.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/unittest/util.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/error.pyi +23 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/parse.pyi +210 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/request.pyi +400 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/response.pyi +43 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/robotparser.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/uu.pyi +13 -0
- jaclang/vendor/mypy/typeshed/stdlib/uuid.pyi +100 -0
- jaclang/vendor/mypy/typeshed/stdlib/warnings.pyi +112 -0
- jaclang/vendor/mypy/typeshed/stdlib/wave.pyi +85 -0
- jaclang/vendor/mypy/typeshed/stdlib/weakref.pyi +149 -0
- jaclang/vendor/mypy/typeshed/stdlib/webbrowser.pyi +74 -0
- jaclang/vendor/mypy/typeshed/stdlib/winreg.pyi +132 -0
- jaclang/vendor/mypy/typeshed/stdlib/winsound.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/handlers.pyi +91 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/headers.pyi +26 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/simple_server.pyi +37 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/types.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/util.pyi +24 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/validate.pyi +50 -0
- jaclang/vendor/mypy/typeshed/stdlib/xdrlib.pyi +57 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/__init__.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/__init__.pyi +69 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/domreg.pyi +8 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +100 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minicompat.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minidom.pyi +404 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/pulldom.pyi +94 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +108 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +28 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +34 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +327 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/__init__.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +1 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/__init__.pyi +25 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +19 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/handler.pyi +55 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/saxutils.pyi +60 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +87 -0
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/client.pyi +296 -0
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/server.pyi +143 -0
- jaclang/vendor/mypy/typeshed/stdlib/xxlimited.pyi +22 -0
- jaclang/vendor/mypy/typeshed/stdlib/zipapp.pyi +20 -0
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/__init__.pyi +306 -0
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/_path.pyi +95 -0
- jaclang/vendor/mypy/typeshed/stdlib/zipimport.pyi +32 -0
- jaclang/vendor/mypy/typeshed/stdlib/zlib.pyi +56 -0
- jaclang/vendor/mypy/typeshed/stdlib/zoneinfo/__init__.pyi +38 -0
- jaclang/vendor/mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +218 -0
- jaclang/vendor/mypy/typestate.py +5 -15
- jaclang/vendor/mypy/typetraverser.py +9 -3
- jaclang/vendor/mypy/typevars.py +2 -8
- jaclang/vendor/mypy/util.py +14 -45
- jaclang/vendor/mypy/version.py +1 -19
- jaclang/vendor/mypy/visitor.py +3 -9
- jaclang/vendor/mypy/xml/mypy-html.css +104 -0
- jaclang/vendor/mypy/xml/mypy-html.xslt +81 -0
- jaclang/vendor/mypy/xml/mypy-txt.xslt +100 -0
- jaclang/vendor/mypy/xml/mypy.xsd +50 -0
- jaclang/vendor/mypy-1.10.0.dist-info/LICENSE +229 -0
- jaclang/vendor/mypy-1.10.0.dist-info/METADATA +48 -0
- jaclang/vendor/mypy-1.10.0.dist-info/RECORD +1241 -0
- jaclang/vendor/mypy-1.10.0.dist-info/WHEEL +6 -0
- jaclang/vendor/mypy-1.10.0.dist-info/entry_points.txt +6 -0
- jaclang/vendor/mypy-1.10.0.dist-info/top_level.txt +3 -0
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/LICENSE +27 -0
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/METADATA +29 -0
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/RECORD +6 -0
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/WHEEL +5 -0
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/top_level.txt +1 -0
- jaclang/vendor/mypy_extensions.py +21 -40
- jaclang/vendor/mypyc/README.md +133 -0
- jaclang/vendor/mypyc/__main__.py +1 -3
- jaclang/vendor/mypyc/analysis/attrdefined.py +6 -22
- jaclang/vendor/mypyc/analysis/dataflow.py +5 -3
- jaclang/vendor/mypyc/analysis/ircheck.py +13 -26
- jaclang/vendor/mypyc/analysis/selfleaks.py +4 -0
- jaclang/vendor/mypyc/build.py +6 -19
- jaclang/vendor/mypyc/codegen/emit.py +20 -73
- jaclang/vendor/mypyc/codegen/emitclass.py +22 -72
- jaclang/vendor/mypyc/codegen/emitfunc.py +20 -62
- jaclang/vendor/mypyc/codegen/emitmodule.py +50 -117
- jaclang/vendor/mypyc/codegen/emitwrapper.py +22 -78
- jaclang/vendor/mypyc/codegen/literals.py +1 -3
- jaclang/vendor/mypyc/common.py +1 -3
- jaclang/vendor/mypyc/doc/Makefile +20 -0
- jaclang/vendor/mypyc/doc/bool_operations.rst +27 -0
- jaclang/vendor/mypyc/doc/compilation_units.rst +20 -0
- jaclang/vendor/mypyc/doc/conf.py +59 -0
- jaclang/vendor/mypyc/doc/cpython-timings.md +25 -0
- jaclang/vendor/mypyc/doc/dev-intro.md +548 -0
- jaclang/vendor/mypyc/doc/dict_operations.rst +59 -0
- jaclang/vendor/mypyc/doc/differences_from_python.rst +332 -0
- jaclang/vendor/mypyc/doc/float_operations.rst +50 -0
- jaclang/vendor/mypyc/doc/future.md +42 -0
- jaclang/vendor/mypyc/doc/getting_started.rst +240 -0
- jaclang/vendor/mypyc/doc/index.rst +61 -0
- jaclang/vendor/mypyc/doc/int_operations.rst +162 -0
- jaclang/vendor/mypyc/doc/introduction.rst +150 -0
- jaclang/vendor/mypyc/doc/list_operations.rst +65 -0
- jaclang/vendor/mypyc/doc/make.bat +35 -0
- jaclang/vendor/mypyc/doc/native_classes.rst +206 -0
- jaclang/vendor/mypyc/doc/native_operations.rst +55 -0
- jaclang/vendor/mypyc/doc/performance_tips_and_tricks.rst +244 -0
- jaclang/vendor/mypyc/doc/set_operations.rst +47 -0
- jaclang/vendor/mypyc/doc/str_operations.rst +35 -0
- jaclang/vendor/mypyc/doc/tuple_operations.rst +33 -0
- jaclang/vendor/mypyc/doc/using_type_annotations.rst +398 -0
- jaclang/vendor/mypyc/external/googletest/LICENSE +28 -0
- jaclang/vendor/mypyc/external/googletest/README.md +280 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-death-test.h +294 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-message.h +250 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h +1444 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +510 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-printers.h +993 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-spi.h +232 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-test-part.h +179 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-typed-test.h +263 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest.h +2236 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_pred_impl.h +358 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_prod.h +58 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +69 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +42 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest.h +41 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +319 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +206 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-internal.h +1238 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +243 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +5146 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +286 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +731 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +93 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port.h +2560 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-string.h +167 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +1020 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +347 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +3331 -0
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +297 -0
- jaclang/vendor/mypyc/external/googletest/make/Makefile +61 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-all.cc +48 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-death-test.cc +1342 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-filepath.cc +387 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-internal-inl.h +1183 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-port.cc +1259 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-printers.cc +373 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-test-part.cc +110 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest-typed-test.cc +118 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest.cc +5388 -0
- jaclang/vendor/mypyc/external/googletest/src/gtest_main.cc +38 -0
- jaclang/vendor/mypyc/ir/class_ir.py +8 -24
- jaclang/vendor/mypyc/ir/func_ir.py +3 -16
- jaclang/vendor/mypyc/ir/module_ir.py +2 -6
- jaclang/vendor/mypyc/ir/ops.py +103 -66
- jaclang/vendor/mypyc/ir/pprint.py +35 -55
- jaclang/vendor/mypyc/ir/rtypes.py +16 -48
- jaclang/vendor/mypyc/irbuild/ast_helpers.py +4 -1
- jaclang/vendor/mypyc/irbuild/builder.py +46 -148
- jaclang/vendor/mypyc/irbuild/callable_class.py +5 -19
- jaclang/vendor/mypyc/irbuild/classdef.py +27 -83
- jaclang/vendor/mypyc/irbuild/env_class.py +3 -9
- jaclang/vendor/mypyc/irbuild/expression.py +42 -100
- jaclang/vendor/mypyc/irbuild/for_helpers.py +56 -105
- jaclang/vendor/mypyc/irbuild/format_str_tokenizer.py +1 -4
- jaclang/vendor/mypyc/irbuild/function.py +40 -132
- jaclang/vendor/mypyc/irbuild/generator.py +14 -49
- jaclang/vendor/mypyc/irbuild/ll_builder.py +197 -426
- jaclang/vendor/mypyc/irbuild/mapper.py +2 -13
- jaclang/vendor/mypyc/irbuild/match.py +11 -36
- jaclang/vendor/mypyc/irbuild/nonlocalcontrol.py +2 -7
- jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +1 -4
- jaclang/vendor/mypyc/irbuild/prepare.py +25 -83
- jaclang/vendor/mypyc/irbuild/specialize.py +22 -72
- jaclang/vendor/mypyc/irbuild/statement.py +30 -96
- jaclang/vendor/mypyc/irbuild/targets.py +1 -3
- jaclang/vendor/mypyc/irbuild/util.py +2 -8
- jaclang/vendor/mypyc/irbuild/vtable.py +1 -3
- jaclang/vendor/mypyc/lib-rt/CPy.h +638 -0
- jaclang/vendor/mypyc/lib-rt/bytes_ops.c +143 -0
- jaclang/vendor/mypyc/lib-rt/dict_ops.c +446 -0
- jaclang/vendor/mypyc/lib-rt/exc_ops.c +259 -0
- jaclang/vendor/mypyc/lib-rt/float_ops.c +192 -0
- jaclang/vendor/mypyc/lib-rt/generic_ops.c +64 -0
- jaclang/vendor/mypyc/lib-rt/getargs.c +450 -0
- jaclang/vendor/mypyc/lib-rt/getargsfast.c +569 -0
- jaclang/vendor/mypyc/lib-rt/init.c +13 -0
- jaclang/vendor/mypyc/lib-rt/int_ops.c +803 -0
- jaclang/vendor/mypyc/lib-rt/list_ops.c +335 -0
- jaclang/vendor/mypyc/lib-rt/misc_ops.c +942 -0
- jaclang/vendor/mypyc/lib-rt/module_shim.tmpl +18 -0
- jaclang/vendor/mypyc/lib-rt/mypyc_util.h +118 -0
- jaclang/vendor/mypyc/lib-rt/pythoncapi_compat.h +497 -0
- jaclang/vendor/mypyc/lib-rt/pythonsupport.h +533 -0
- jaclang/vendor/mypyc/lib-rt/set_ops.c +17 -0
- jaclang/vendor/mypyc/lib-rt/setup.py +70 -0
- jaclang/vendor/mypyc/lib-rt/str_ops.c +241 -0
- jaclang/vendor/mypyc/lib-rt/test_capi.cc +585 -0
- jaclang/vendor/mypyc/lib-rt/tuple_ops.c +61 -0
- jaclang/vendor/mypyc/lower/__init__.py +0 -0
- jaclang/vendor/mypyc/lower/int_ops.py +113 -0
- jaclang/vendor/mypyc/lower/list_ops.py +45 -0
- jaclang/vendor/mypyc/lower/misc_ops.py +12 -0
- jaclang/vendor/mypyc/lower/registry.py +26 -0
- jaclang/vendor/mypyc/options.py +1 -3
- jaclang/vendor/mypyc/primitives/dict_ops.py +1 -4
- jaclang/vendor/mypyc/primitives/exc_ops.py +3 -12
- jaclang/vendor/mypyc/primitives/int_ops.py +22 -32
- jaclang/vendor/mypyc/primitives/list_ops.py +10 -0
- jaclang/vendor/mypyc/primitives/misc_ops.py +28 -22
- jaclang/vendor/mypyc/primitives/registry.py +56 -19
- jaclang/vendor/mypyc/primitives/set_ops.py +1 -3
- jaclang/vendor/mypyc/rt_subtype.py +1 -2
- jaclang/vendor/mypyc/sametype.py +2 -5
- jaclang/vendor/mypyc/subtype.py +3 -12
- jaclang/vendor/mypyc/test/test_alwaysdefined.py +2 -6
- jaclang/vendor/mypyc/test/test_analysis.py +8 -24
- jaclang/vendor/mypyc/test/test_cheader.py +12 -4
- jaclang/vendor/mypyc/test/test_emit.py +4 -14
- jaclang/vendor/mypyc/test/test_emitclass.py +1 -8
- jaclang/vendor/mypyc/test/test_emitfunc.py +30 -77
- jaclang/vendor/mypyc/test/test_emitwrapper.py +1 -3
- jaclang/vendor/mypyc/test/test_exceptions.py +4 -12
- jaclang/vendor/mypyc/test/test_external.py +1 -5
- jaclang/vendor/mypyc/test/test_irbuild.py +2 -6
- jaclang/vendor/mypyc/test/test_ircheck.py +6 -17
- jaclang/vendor/mypyc/test/test_literals.py +1 -4
- jaclang/vendor/mypyc/test/test_lowering.py +56 -0
- jaclang/vendor/mypyc/test/test_namegen.py +1 -4
- jaclang/vendor/mypyc/test/test_optimizations.py +68 -0
- jaclang/vendor/mypyc/test/test_refcount.py +3 -9
- jaclang/vendor/mypyc/test/test_run.py +12 -38
- jaclang/vendor/mypyc/test/test_serialization.py +1 -3
- jaclang/vendor/mypyc/test/test_struct.py +3 -11
- jaclang/vendor/mypyc/test/test_tuplename.py +4 -13
- jaclang/vendor/mypyc/test/test_typeops.py +1 -4
- jaclang/vendor/mypyc/test/testutil.py +2 -6
- jaclang/vendor/mypyc/test-data/alwaysdefined.test +732 -0
- jaclang/vendor/mypyc/test-data/analysis.test +470 -0
- jaclang/vendor/mypyc/test-data/commandline.test +245 -0
- jaclang/vendor/mypyc/test-data/driver/driver.py +48 -0
- jaclang/vendor/mypyc/test-data/exceptions-freq.test +125 -0
- jaclang/vendor/mypyc/test-data/exceptions.test +699 -0
- jaclang/vendor/mypyc/test-data/fixtures/ir.py +373 -0
- jaclang/vendor/mypyc/test-data/fixtures/testutil.py +103 -0
- jaclang/vendor/mypyc/test-data/fixtures/typing-full.pyi +169 -0
- jaclang/vendor/mypyc/test-data/irbuild-any.test +236 -0
- jaclang/vendor/mypyc/test-data/irbuild-basic.test +3399 -0
- jaclang/vendor/mypyc/test-data/irbuild-bool.test +424 -0
- jaclang/vendor/mypyc/test-data/irbuild-bytes.test +181 -0
- jaclang/vendor/mypyc/test-data/irbuild-classes.test +1302 -0
- jaclang/vendor/mypyc/test-data/irbuild-constant-fold.test +480 -0
- jaclang/vendor/mypyc/test-data/irbuild-dict.test +584 -0
- jaclang/vendor/mypyc/test-data/irbuild-dunders.test +215 -0
- jaclang/vendor/mypyc/test-data/irbuild-float.test +497 -0
- jaclang/vendor/mypyc/test-data/irbuild-generics.test +150 -0
- jaclang/vendor/mypyc/test-data/irbuild-glue-methods.test +437 -0
- jaclang/vendor/mypyc/test-data/irbuild-i16.test +526 -0
- jaclang/vendor/mypyc/test-data/irbuild-i32.test +598 -0
- jaclang/vendor/mypyc/test-data/irbuild-i64.test +2144 -0
- jaclang/vendor/mypyc/test-data/irbuild-int.test +194 -0
- jaclang/vendor/mypyc/test-data/irbuild-isinstance.test +109 -0
- jaclang/vendor/mypyc/test-data/irbuild-lists.test +513 -0
- jaclang/vendor/mypyc/test-data/irbuild-match.test +1717 -0
- jaclang/vendor/mypyc/test-data/irbuild-math.test +64 -0
- jaclang/vendor/mypyc/test-data/irbuild-nested.test +807 -0
- jaclang/vendor/mypyc/test-data/irbuild-optional.test +536 -0
- jaclang/vendor/mypyc/test-data/irbuild-set.test +806 -0
- jaclang/vendor/mypyc/test-data/irbuild-singledispatch.test +257 -0
- jaclang/vendor/mypyc/test-data/irbuild-statements.test +1060 -0
- jaclang/vendor/mypyc/test-data/irbuild-str.test +312 -0
- jaclang/vendor/mypyc/test-data/irbuild-strip-asserts.test +12 -0
- jaclang/vendor/mypyc/test-data/irbuild-try.test +523 -0
- jaclang/vendor/mypyc/test-data/irbuild-tuple.test +386 -0
- jaclang/vendor/mypyc/test-data/irbuild-u8.test +543 -0
- jaclang/vendor/mypyc/test-data/irbuild-unreachable.test +241 -0
- jaclang/vendor/mypyc/test-data/irbuild-vectorcall.test +153 -0
- jaclang/vendor/mypyc/test-data/lowering-int.test +377 -0
- jaclang/vendor/mypyc/test-data/lowering-list.test +33 -0
- jaclang/vendor/mypyc/test-data/opt-copy-propagation.test +400 -0
- jaclang/vendor/mypyc/test-data/opt-flag-elimination.test +296 -0
- jaclang/vendor/mypyc/test-data/refcount.test +1482 -0
- jaclang/vendor/mypyc/test-data/run-async.test +173 -0
- jaclang/vendor/mypyc/test-data/run-attrs.test +318 -0
- jaclang/vendor/mypyc/test-data/run-bench.test +196 -0
- jaclang/vendor/mypyc/test-data/run-bools.test +229 -0
- jaclang/vendor/mypyc/test-data/run-bytes.test +302 -0
- jaclang/vendor/mypyc/test-data/run-classes.test +2505 -0
- jaclang/vendor/mypyc/test-data/run-dicts.test +334 -0
- jaclang/vendor/mypyc/test-data/run-dunders.test +945 -0
- jaclang/vendor/mypyc/test-data/run-exceptions.test +448 -0
- jaclang/vendor/mypyc/test-data/run-floats.test +516 -0
- jaclang/vendor/mypyc/test-data/run-functions.test +1310 -0
- jaclang/vendor/mypyc/test-data/run-generators.test +682 -0
- jaclang/vendor/mypyc/test-data/run-i16.test +338 -0
- jaclang/vendor/mypyc/test-data/run-i32.test +336 -0
- jaclang/vendor/mypyc/test-data/run-i64.test +1519 -0
- jaclang/vendor/mypyc/test-data/run-imports.test +265 -0
- jaclang/vendor/mypyc/test-data/run-integers.test +540 -0
- jaclang/vendor/mypyc/test-data/run-lists.test +411 -0
- jaclang/vendor/mypyc/test-data/run-loops.test +485 -0
- jaclang/vendor/mypyc/test-data/run-match.test +283 -0
- jaclang/vendor/mypyc/test-data/run-math.test +106 -0
- jaclang/vendor/mypyc/test-data/run-misc.test +1170 -0
- jaclang/vendor/mypyc/test-data/run-multimodule.test +887 -0
- jaclang/vendor/mypyc/test-data/run-mypy-sim.test +138 -0
- jaclang/vendor/mypyc/test-data/run-primitives.test +375 -0
- jaclang/vendor/mypyc/test-data/run-python37.test +159 -0
- jaclang/vendor/mypyc/test-data/run-python38.test +88 -0
- jaclang/vendor/mypyc/test-data/run-sets.test +150 -0
- jaclang/vendor/mypyc/test-data/run-singledispatch.test +698 -0
- jaclang/vendor/mypyc/test-data/run-strings.test +641 -0
- jaclang/vendor/mypyc/test-data/run-traits.test +411 -0
- jaclang/vendor/mypyc/test-data/run-tuples.test +258 -0
- jaclang/vendor/mypyc/test-data/run-u8.test +303 -0
- jaclang/vendor/mypyc/transform/copy_propagation.py +94 -0
- jaclang/vendor/mypyc/transform/exceptions.py +1 -5
- jaclang/vendor/mypyc/transform/flag_elimination.py +108 -0
- jaclang/vendor/mypyc/transform/ir_transform.py +368 -0
- jaclang/vendor/mypyc/transform/lower.py +33 -0
- jaclang/vendor/mypyc/transform/refcount.py +7 -30
- jaclang/vendor/mypyc/transform/uninit.py +4 -15
- jaclang/vendor/pluggy/__init__.py +15 -11
- jaclang/vendor/pluggy/_callers.py +34 -5
- jaclang/vendor/pluggy/_hooks.py +35 -7
- jaclang/vendor/pluggy/_manager.py +26 -3
- jaclang/vendor/pluggy/_result.py +0 -15
- jaclang/vendor/pluggy/_version.py +16 -0
- jaclang/vendor/pluggy/_warnings.py +27 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/LICENSE +21 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/METADATA +155 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/RECORD +14 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/top_level.txt +1 -0
- jaclang/vendor/pygls/__init__.py +25 -0
- jaclang/vendor/pygls/capabilities.py +460 -0
- jaclang/vendor/pygls/client.py +176 -0
- jaclang/vendor/pygls/constants.py +26 -0
- jaclang/vendor/pygls/exceptions.py +215 -0
- jaclang/vendor/pygls/feature_manager.py +244 -0
- jaclang/vendor/pygls/lsp/__init__.py +139 -0
- jaclang/vendor/pygls/lsp/client.py +1961 -0
- jaclang/vendor/pygls/progress.py +79 -0
- jaclang/vendor/pygls/protocol/__init__.py +78 -0
- jaclang/vendor/pygls/protocol/json_rpc.py +560 -0
- jaclang/vendor/pygls/protocol/language_server.py +569 -0
- jaclang/vendor/pygls/protocol/lsp_meta.py +51 -0
- jaclang/vendor/pygls/py.typed +2 -0
- jaclang/vendor/pygls/server.py +616 -0
- jaclang/vendor/pygls/uris.py +184 -0
- jaclang/vendor/pygls/workspace/__init__.py +97 -0
- jaclang/vendor/pygls/workspace/position_codec.py +206 -0
- jaclang/vendor/pygls/workspace/text_document.py +238 -0
- jaclang/vendor/pygls/workspace/workspace.py +323 -0
- jaclang/vendor/pygls-1.3.1.dist-info/LICENSE.txt +201 -0
- jaclang/vendor/pygls-1.3.1.dist-info/METADATA +105 -0
- jaclang/vendor/pygls-1.3.1.dist-info/RECORD +24 -0
- jaclang/vendor/pygls-1.3.1.dist-info/WHEEL +4 -0
- jaclang/vendor/typing_extensions-4.12.2.dist-info/LICENSE +279 -0
- jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA +67 -0
- jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD +5 -0
- jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL +4 -0
- jaclang/vendor/typing_extensions.py +1209 -641
- jaclang-0.6.5.dist-info/METADATA +106 -0
- jaclang-0.6.5.dist-info/RECORD +1476 -0
- jaclang-0.6.5.dist-info/WHEEL +4 -0
- jaclang-0.6.5.dist-info/entry_points.txt +3 -0
- jaclang/compiler/generated/jac_parser.py +0 -4069
- jaclang-0.6.1.dist-info/METADATA +0 -17
- jaclang-0.6.1.dist-info/RECORD +0 -430
- jaclang-0.6.1.dist-info/entry_points.txt +0 -2
- jaclang-0.6.1.dist-info/top_level.txt +0 -1
- /jaclang/{compiler/generated/__init__.py → vendor/attr/py.typed} +0 -0
- {jaclang-0.6.1.dist-info → jaclang/vendor/pluggy-1.5.0.dist-info}/WHEEL +0 -0
|
@@ -1,4069 +0,0 @@
|
|
|
1
|
-
# The file was automatically generated by Lark v1.1.9
|
|
2
|
-
__version__ = "1.1.9"
|
|
3
|
-
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# Lark Stand-alone Generator Tool
|
|
7
|
-
# ----------------------------------
|
|
8
|
-
# Generates a stand-alone LALR(1) parser
|
|
9
|
-
#
|
|
10
|
-
# Git: https://github.com/erezsh/lark
|
|
11
|
-
# Author: Erez Shinan (erezshin@gmail.com)
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
# >>> LICENSE
|
|
15
|
-
#
|
|
16
|
-
# This tool and its generated code use a separate license from Lark,
|
|
17
|
-
# and are subject to the terms of the Mozilla Public License, v. 2.0.
|
|
18
|
-
# If a copy of the MPL was not distributed with this
|
|
19
|
-
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
20
|
-
#
|
|
21
|
-
# If you wish to purchase a commercial license for this tool and its
|
|
22
|
-
# generated code, you may contact me via email or otherwise.
|
|
23
|
-
#
|
|
24
|
-
# If MPL2 is incompatible with your free or open-source project,
|
|
25
|
-
# contact me and we'll work it out.
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
from copy import deepcopy
|
|
30
|
-
from abc import ABC, abstractmethod
|
|
31
|
-
from types import ModuleType
|
|
32
|
-
from typing import (
|
|
33
|
-
TypeVar,
|
|
34
|
-
Generic,
|
|
35
|
-
Type,
|
|
36
|
-
Tuple,
|
|
37
|
-
List,
|
|
38
|
-
Dict,
|
|
39
|
-
Iterator,
|
|
40
|
-
Collection,
|
|
41
|
-
Callable,
|
|
42
|
-
Optional,
|
|
43
|
-
FrozenSet,
|
|
44
|
-
Any,
|
|
45
|
-
Union,
|
|
46
|
-
Iterable,
|
|
47
|
-
IO,
|
|
48
|
-
TYPE_CHECKING,
|
|
49
|
-
overload,
|
|
50
|
-
Sequence,
|
|
51
|
-
Pattern as REPattern,
|
|
52
|
-
ClassVar,
|
|
53
|
-
Set,
|
|
54
|
-
Mapping,
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
class LarkError(Exception):
|
|
61
|
-
pass
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
class ConfigurationError(LarkError, ValueError):
|
|
65
|
-
pass
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def assert_config(value, options: Collection, msg="Got %r, expected one of %s"):
|
|
69
|
-
if value not in options:
|
|
70
|
-
raise ConfigurationError(msg % (value, options))
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
class GrammarError(LarkError):
|
|
74
|
-
pass
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
class ParseError(LarkError):
|
|
78
|
-
pass
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class LexError(LarkError):
|
|
82
|
-
pass
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
T = TypeVar("T")
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class UnexpectedInput(LarkError):
|
|
89
|
-
#--
|
|
90
|
-
|
|
91
|
-
line: int
|
|
92
|
-
column: int
|
|
93
|
-
pos_in_stream = None
|
|
94
|
-
state: Any
|
|
95
|
-
_terminals_by_name = None
|
|
96
|
-
interactive_parser: "InteractiveParser"
|
|
97
|
-
|
|
98
|
-
def get_context(self, text: str, span: int = 40) -> str:
|
|
99
|
-
#--
|
|
100
|
-
assert self.pos_in_stream is not None, self
|
|
101
|
-
pos = self.pos_in_stream
|
|
102
|
-
start = max(pos - span, 0)
|
|
103
|
-
end = pos + span
|
|
104
|
-
if not isinstance(text, bytes):
|
|
105
|
-
before = text[start:pos].rsplit("\n", 1)[-1]
|
|
106
|
-
after = text[pos:end].split("\n", 1)[0]
|
|
107
|
-
return before + after + "\n" + " " * len(before.expandtabs()) + "^\n"
|
|
108
|
-
else:
|
|
109
|
-
before = text[start:pos].rsplit(b"\n", 1)[-1]
|
|
110
|
-
after = text[pos:end].split(b"\n", 1)[0]
|
|
111
|
-
return (
|
|
112
|
-
before + after + b"\n" + b" " * len(before.expandtabs()) + b"^\n"
|
|
113
|
-
).decode("ascii", "backslashreplace")
|
|
114
|
-
|
|
115
|
-
def match_examples(
|
|
116
|
-
self,
|
|
117
|
-
parse_fn: "Callable[[str], Tree]",
|
|
118
|
-
examples: Union[Mapping[T, Iterable[str]], Iterable[Tuple[T, Iterable[str]]]],
|
|
119
|
-
token_type_match_fallback: bool = False,
|
|
120
|
-
use_accepts: bool = True,
|
|
121
|
-
) -> Optional[T]:
|
|
122
|
-
#--
|
|
123
|
-
assert self.state is not None, "Not supported for this exception"
|
|
124
|
-
|
|
125
|
-
if isinstance(examples, Mapping):
|
|
126
|
-
examples = examples.items()
|
|
127
|
-
|
|
128
|
-
candidate = (None, False)
|
|
129
|
-
for i, (label, example) in enumerate(examples):
|
|
130
|
-
assert not isinstance(example, str), "Expecting a list"
|
|
131
|
-
|
|
132
|
-
for j, malformed in enumerate(example):
|
|
133
|
-
try:
|
|
134
|
-
parse_fn(malformed)
|
|
135
|
-
except UnexpectedInput as ut:
|
|
136
|
-
if ut.state == self.state:
|
|
137
|
-
if (
|
|
138
|
-
use_accepts
|
|
139
|
-
and isinstance(self, UnexpectedToken)
|
|
140
|
-
and isinstance(ut, UnexpectedToken)
|
|
141
|
-
and ut.accepts != self.accepts
|
|
142
|
-
):
|
|
143
|
-
logger.debug(
|
|
144
|
-
"Different accepts with same state[%d]: %s != %s at example [%s][%s]"
|
|
145
|
-
% (self.state, self.accepts, ut.accepts, i, j)
|
|
146
|
-
)
|
|
147
|
-
continue
|
|
148
|
-
if isinstance(
|
|
149
|
-
self, (UnexpectedToken, UnexpectedEOF)
|
|
150
|
-
) and isinstance(ut, (UnexpectedToken, UnexpectedEOF)):
|
|
151
|
-
if ut.token == self.token: ##
|
|
152
|
-
|
|
153
|
-
logger.debug("Exact Match at example [%s][%s]" % (i, j))
|
|
154
|
-
return label
|
|
155
|
-
|
|
156
|
-
if token_type_match_fallback:
|
|
157
|
-
##
|
|
158
|
-
|
|
159
|
-
if (ut.token.type == self.token.type) and not candidate[
|
|
160
|
-
-1
|
|
161
|
-
]:
|
|
162
|
-
logger.debug(
|
|
163
|
-
"Token Type Fallback at example [%s][%s]"
|
|
164
|
-
% (i, j)
|
|
165
|
-
)
|
|
166
|
-
candidate = label, True
|
|
167
|
-
|
|
168
|
-
if candidate[0] is None:
|
|
169
|
-
logger.debug(
|
|
170
|
-
"Same State match at example [%s][%s]" % (i, j)
|
|
171
|
-
)
|
|
172
|
-
candidate = label, False
|
|
173
|
-
|
|
174
|
-
return candidate[0]
|
|
175
|
-
|
|
176
|
-
def _format_expected(self, expected):
|
|
177
|
-
if self._terminals_by_name:
|
|
178
|
-
d = self._terminals_by_name
|
|
179
|
-
expected = [
|
|
180
|
-
d[t_name].user_repr() if t_name in d else t_name for t_name in expected
|
|
181
|
-
]
|
|
182
|
-
return "Expected one of: \n\t* %s\n" % "\n\t* ".join(expected)
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
class UnexpectedEOF(ParseError, UnexpectedInput):
|
|
186
|
-
#--
|
|
187
|
-
|
|
188
|
-
expected: "List[Token]"
|
|
189
|
-
|
|
190
|
-
def __init__(self, expected, state=None, terminals_by_name=None):
|
|
191
|
-
super(UnexpectedEOF, self).__init__()
|
|
192
|
-
|
|
193
|
-
self.expected = expected
|
|
194
|
-
self.state = state
|
|
195
|
-
from .lexer import Token
|
|
196
|
-
|
|
197
|
-
self.token = Token("<EOF>", "") ##
|
|
198
|
-
|
|
199
|
-
self.pos_in_stream = -1
|
|
200
|
-
self.line = -1
|
|
201
|
-
self.column = -1
|
|
202
|
-
self._terminals_by_name = terminals_by_name
|
|
203
|
-
|
|
204
|
-
def __str__(self):
|
|
205
|
-
message = "Unexpected end-of-input. "
|
|
206
|
-
message += self._format_expected(self.expected)
|
|
207
|
-
return message
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
class UnexpectedCharacters(LexError, UnexpectedInput):
|
|
211
|
-
#--
|
|
212
|
-
|
|
213
|
-
allowed: Set[str]
|
|
214
|
-
considered_tokens: Set[Any]
|
|
215
|
-
|
|
216
|
-
def __init__(
|
|
217
|
-
self,
|
|
218
|
-
seq,
|
|
219
|
-
lex_pos,
|
|
220
|
-
line,
|
|
221
|
-
column,
|
|
222
|
-
allowed=None,
|
|
223
|
-
considered_tokens=None,
|
|
224
|
-
state=None,
|
|
225
|
-
token_history=None,
|
|
226
|
-
terminals_by_name=None,
|
|
227
|
-
considered_rules=None,
|
|
228
|
-
):
|
|
229
|
-
super(UnexpectedCharacters, self).__init__()
|
|
230
|
-
|
|
231
|
-
##
|
|
232
|
-
|
|
233
|
-
self.line = line
|
|
234
|
-
self.column = column
|
|
235
|
-
self.pos_in_stream = lex_pos
|
|
236
|
-
self.state = state
|
|
237
|
-
self._terminals_by_name = terminals_by_name
|
|
238
|
-
|
|
239
|
-
self.allowed = allowed
|
|
240
|
-
self.considered_tokens = considered_tokens
|
|
241
|
-
self.considered_rules = considered_rules
|
|
242
|
-
self.token_history = token_history
|
|
243
|
-
|
|
244
|
-
if isinstance(seq, bytes):
|
|
245
|
-
self.char = seq[lex_pos : lex_pos + 1].decode("ascii", "backslashreplace")
|
|
246
|
-
else:
|
|
247
|
-
self.char = seq[lex_pos]
|
|
248
|
-
self._context = self.get_context(seq)
|
|
249
|
-
|
|
250
|
-
def __str__(self):
|
|
251
|
-
message = (
|
|
252
|
-
"No terminal matches '%s' in the current parser context, at line %d col %d"
|
|
253
|
-
% (self.char, self.line, self.column)
|
|
254
|
-
)
|
|
255
|
-
message += "\n\n" + self._context
|
|
256
|
-
if self.allowed:
|
|
257
|
-
message += self._format_expected(self.allowed)
|
|
258
|
-
if self.token_history:
|
|
259
|
-
message += "\nPrevious tokens: %s\n" % ", ".join(
|
|
260
|
-
repr(t) for t in self.token_history
|
|
261
|
-
)
|
|
262
|
-
return message
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
class UnexpectedToken(ParseError, UnexpectedInput):
|
|
266
|
-
#--
|
|
267
|
-
|
|
268
|
-
expected: Set[str]
|
|
269
|
-
considered_rules: Set[str]
|
|
270
|
-
|
|
271
|
-
def __init__(
|
|
272
|
-
self,
|
|
273
|
-
token,
|
|
274
|
-
expected,
|
|
275
|
-
considered_rules=None,
|
|
276
|
-
state=None,
|
|
277
|
-
interactive_parser=None,
|
|
278
|
-
terminals_by_name=None,
|
|
279
|
-
token_history=None,
|
|
280
|
-
):
|
|
281
|
-
super(UnexpectedToken, self).__init__()
|
|
282
|
-
|
|
283
|
-
##
|
|
284
|
-
|
|
285
|
-
self.line = getattr(token, "line", "?")
|
|
286
|
-
self.column = getattr(token, "column", "?")
|
|
287
|
-
self.pos_in_stream = getattr(token, "start_pos", None)
|
|
288
|
-
self.state = state
|
|
289
|
-
|
|
290
|
-
self.token = token
|
|
291
|
-
self.expected = expected ##
|
|
292
|
-
|
|
293
|
-
self._accepts = NO_VALUE
|
|
294
|
-
self.considered_rules = considered_rules
|
|
295
|
-
self.interactive_parser = interactive_parser
|
|
296
|
-
self._terminals_by_name = terminals_by_name
|
|
297
|
-
self.token_history = token_history
|
|
298
|
-
|
|
299
|
-
@property
|
|
300
|
-
def accepts(self) -> Set[str]:
|
|
301
|
-
if self._accepts is NO_VALUE:
|
|
302
|
-
self._accepts = (
|
|
303
|
-
self.interactive_parser and self.interactive_parser.accepts()
|
|
304
|
-
)
|
|
305
|
-
return self._accepts
|
|
306
|
-
|
|
307
|
-
def __str__(self):
|
|
308
|
-
message = "Unexpected token %r at line %s, column %s.\n%s" % (
|
|
309
|
-
self.token,
|
|
310
|
-
self.line,
|
|
311
|
-
self.column,
|
|
312
|
-
self._format_expected(self.accepts or self.expected),
|
|
313
|
-
)
|
|
314
|
-
if self.token_history:
|
|
315
|
-
message += "Previous tokens: %r\n" % self.token_history
|
|
316
|
-
|
|
317
|
-
return message
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
class VisitError(LarkError):
|
|
321
|
-
#--
|
|
322
|
-
|
|
323
|
-
obj: "Union[Tree, Token]"
|
|
324
|
-
orig_exc: Exception
|
|
325
|
-
|
|
326
|
-
def __init__(self, rule, obj, orig_exc):
|
|
327
|
-
message = 'Error trying to process rule "%s":\n\n%s' % (rule, orig_exc)
|
|
328
|
-
super(VisitError, self).__init__(message)
|
|
329
|
-
|
|
330
|
-
self.rule = rule
|
|
331
|
-
self.obj = obj
|
|
332
|
-
self.orig_exc = orig_exc
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
class MissingVariableError(LarkError):
|
|
336
|
-
pass
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
import sys, re
|
|
341
|
-
import logging
|
|
342
|
-
|
|
343
|
-
logger: logging.Logger = logging.getLogger("lark")
|
|
344
|
-
logger.addHandler(logging.StreamHandler())
|
|
345
|
-
##
|
|
346
|
-
|
|
347
|
-
##
|
|
348
|
-
|
|
349
|
-
logger.setLevel(logging.CRITICAL)
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
NO_VALUE = object()
|
|
353
|
-
|
|
354
|
-
T = TypeVar("T")
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
def classify(
|
|
358
|
-
seq: Iterable, key: Optional[Callable] = None, value: Optional[Callable] = None
|
|
359
|
-
) -> Dict:
|
|
360
|
-
d: Dict[Any, Any] = {}
|
|
361
|
-
for item in seq:
|
|
362
|
-
k = key(item) if (key is not None) else item
|
|
363
|
-
v = value(item) if (value is not None) else item
|
|
364
|
-
try:
|
|
365
|
-
d[k].append(v)
|
|
366
|
-
except KeyError:
|
|
367
|
-
d[k] = [v]
|
|
368
|
-
return d
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
def _deserialize(data: Any, namespace: Dict[str, Any], memo: Dict) -> Any:
|
|
372
|
-
if isinstance(data, dict):
|
|
373
|
-
if "__type__" in data: ##
|
|
374
|
-
|
|
375
|
-
class_ = namespace[data["__type__"]]
|
|
376
|
-
return class_.deserialize(data, memo)
|
|
377
|
-
elif "@" in data:
|
|
378
|
-
return memo[data["@"]]
|
|
379
|
-
return {
|
|
380
|
-
key: _deserialize(value, namespace, memo) for key, value in data.items()
|
|
381
|
-
}
|
|
382
|
-
elif isinstance(data, list):
|
|
383
|
-
return [_deserialize(value, namespace, memo) for value in data]
|
|
384
|
-
return data
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
_T = TypeVar("_T", bound="Serialize")
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
class Serialize:
|
|
391
|
-
#--
|
|
392
|
-
|
|
393
|
-
def memo_serialize(self, types_to_memoize: List) -> Any:
|
|
394
|
-
memo = SerializeMemoizer(types_to_memoize)
|
|
395
|
-
return self.serialize(memo), memo.serialize()
|
|
396
|
-
|
|
397
|
-
def serialize(self, memo=None) -> Dict[str, Any]:
|
|
398
|
-
if memo and memo.in_types(self):
|
|
399
|
-
return {"@": memo.memoized.get(self)}
|
|
400
|
-
|
|
401
|
-
fields = getattr(self, "__serialize_fields__")
|
|
402
|
-
res = {f: _serialize(getattr(self, f), memo) for f in fields}
|
|
403
|
-
res["__type__"] = type(self).__name__
|
|
404
|
-
if hasattr(self, "_serialize"):
|
|
405
|
-
self._serialize(res, memo) ##
|
|
406
|
-
|
|
407
|
-
return res
|
|
408
|
-
|
|
409
|
-
@classmethod
|
|
410
|
-
def deserialize(cls: Type[_T], data: Dict[str, Any], memo: Dict[int, Any]) -> _T:
|
|
411
|
-
namespace = getattr(cls, "__serialize_namespace__", [])
|
|
412
|
-
namespace = {c.__name__: c for c in namespace}
|
|
413
|
-
|
|
414
|
-
fields = getattr(cls, "__serialize_fields__")
|
|
415
|
-
|
|
416
|
-
if "@" in data:
|
|
417
|
-
return memo[data["@"]]
|
|
418
|
-
|
|
419
|
-
inst = cls.__new__(cls)
|
|
420
|
-
for f in fields:
|
|
421
|
-
try:
|
|
422
|
-
setattr(inst, f, _deserialize(data[f], namespace, memo))
|
|
423
|
-
except KeyError as e:
|
|
424
|
-
raise KeyError("Cannot find key for class", cls, e)
|
|
425
|
-
|
|
426
|
-
if hasattr(inst, "_deserialize"):
|
|
427
|
-
inst._deserialize() ##
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
return inst
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
class SerializeMemoizer(Serialize):
|
|
434
|
-
#--
|
|
435
|
-
|
|
436
|
-
__serialize_fields__ = ("memoized",)
|
|
437
|
-
|
|
438
|
-
def __init__(self, types_to_memoize: List) -> None:
|
|
439
|
-
self.types_to_memoize = tuple(types_to_memoize)
|
|
440
|
-
self.memoized = Enumerator()
|
|
441
|
-
|
|
442
|
-
def in_types(self, value: Serialize) -> bool:
|
|
443
|
-
return isinstance(value, self.types_to_memoize)
|
|
444
|
-
|
|
445
|
-
def serialize(self) -> Dict[int, Any]: ##
|
|
446
|
-
|
|
447
|
-
return _serialize(self.memoized.reversed(), None)
|
|
448
|
-
|
|
449
|
-
@classmethod
|
|
450
|
-
def deserialize(cls, data: Dict[int, Any], namespace: Dict[str, Any], memo: Dict[Any, Any]) -> Dict[int, Any]: ##
|
|
451
|
-
|
|
452
|
-
return _deserialize(data, namespace, memo)
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
try:
|
|
456
|
-
import regex
|
|
457
|
-
|
|
458
|
-
_has_regex = True
|
|
459
|
-
except ImportError:
|
|
460
|
-
_has_regex = False
|
|
461
|
-
|
|
462
|
-
if sys.version_info >= (3, 11):
|
|
463
|
-
import re._parser as sre_parse
|
|
464
|
-
import re._constants as sre_constants
|
|
465
|
-
else:
|
|
466
|
-
import sre_parse
|
|
467
|
-
import sre_constants
|
|
468
|
-
|
|
469
|
-
categ_pattern = re.compile(r"\\p{[A-Za-z_]+}")
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
def get_regexp_width(expr: str) -> Union[Tuple[int, int], List[int]]:
|
|
473
|
-
if _has_regex:
|
|
474
|
-
##
|
|
475
|
-
|
|
476
|
-
##
|
|
477
|
-
|
|
478
|
-
##
|
|
479
|
-
|
|
480
|
-
regexp_final = re.sub(categ_pattern, "A", expr)
|
|
481
|
-
else:
|
|
482
|
-
if re.search(categ_pattern, expr):
|
|
483
|
-
raise ImportError(
|
|
484
|
-
"`regex` module must be installed in order to use Unicode categories.",
|
|
485
|
-
expr,
|
|
486
|
-
)
|
|
487
|
-
regexp_final = expr
|
|
488
|
-
try:
|
|
489
|
-
##
|
|
490
|
-
|
|
491
|
-
return [int(x) for x in sre_parse.parse(regexp_final).getwidth()] ##
|
|
492
|
-
|
|
493
|
-
except sre_constants.error:
|
|
494
|
-
if not _has_regex:
|
|
495
|
-
raise ValueError(expr)
|
|
496
|
-
else:
|
|
497
|
-
##
|
|
498
|
-
|
|
499
|
-
##
|
|
500
|
-
|
|
501
|
-
c = regex.compile(regexp_final)
|
|
502
|
-
##
|
|
503
|
-
|
|
504
|
-
##
|
|
505
|
-
|
|
506
|
-
MAXWIDTH = getattr(sre_parse, "MAXWIDTH", sre_constants.MAXREPEAT)
|
|
507
|
-
if c.match("") is None:
|
|
508
|
-
##
|
|
509
|
-
|
|
510
|
-
return 1, int(MAXWIDTH)
|
|
511
|
-
else:
|
|
512
|
-
return 0, int(MAXWIDTH)
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
from collections import OrderedDict
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
class Meta:
|
|
520
|
-
|
|
521
|
-
empty: bool
|
|
522
|
-
line: int
|
|
523
|
-
column: int
|
|
524
|
-
start_pos: int
|
|
525
|
-
end_line: int
|
|
526
|
-
end_column: int
|
|
527
|
-
end_pos: int
|
|
528
|
-
orig_expansion: "List[TerminalDef]"
|
|
529
|
-
match_tree: bool
|
|
530
|
-
|
|
531
|
-
def __init__(self):
|
|
532
|
-
self.empty = True
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
_Leaf_T = TypeVar("_Leaf_T")
|
|
536
|
-
Branch = Union[_Leaf_T, "Tree[_Leaf_T]"]
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
class Tree(Generic[_Leaf_T]):
|
|
540
|
-
#--
|
|
541
|
-
|
|
542
|
-
data: str
|
|
543
|
-
children: "List[Branch[_Leaf_T]]"
|
|
544
|
-
|
|
545
|
-
def __init__(
|
|
546
|
-
self, data: str, children: "List[Branch[_Leaf_T]]", meta: Optional[Meta] = None
|
|
547
|
-
) -> None:
|
|
548
|
-
self.data = data
|
|
549
|
-
self.children = children
|
|
550
|
-
self._meta = meta
|
|
551
|
-
|
|
552
|
-
@property
|
|
553
|
-
def meta(self) -> Meta:
|
|
554
|
-
if self._meta is None:
|
|
555
|
-
self._meta = Meta()
|
|
556
|
-
return self._meta
|
|
557
|
-
|
|
558
|
-
def __repr__(self):
|
|
559
|
-
return "Tree(%r, %r)" % (self.data, self.children)
|
|
560
|
-
|
|
561
|
-
def _pretty_label(self):
|
|
562
|
-
return self.data
|
|
563
|
-
|
|
564
|
-
def _pretty(self, level, indent_str):
|
|
565
|
-
yield f"{indent_str*level}{self._pretty_label()}"
|
|
566
|
-
if len(self.children) == 1 and not isinstance(self.children[0], Tree):
|
|
567
|
-
yield f"\t{self.children[0]}\n"
|
|
568
|
-
else:
|
|
569
|
-
yield "\n"
|
|
570
|
-
for n in self.children:
|
|
571
|
-
if isinstance(n, Tree):
|
|
572
|
-
yield from n._pretty(level + 1, indent_str)
|
|
573
|
-
else:
|
|
574
|
-
yield f"{indent_str*(level+1)}{n}\n"
|
|
575
|
-
|
|
576
|
-
def pretty(self, indent_str: str = " ") -> str:
|
|
577
|
-
#--
|
|
578
|
-
return "".join(self._pretty(0, indent_str))
|
|
579
|
-
|
|
580
|
-
def __rich__(self, parent: Optional["rich.tree.Tree"] = None) -> "rich.tree.Tree":
|
|
581
|
-
#--
|
|
582
|
-
return self._rich(parent)
|
|
583
|
-
|
|
584
|
-
def _rich(self, parent):
|
|
585
|
-
if parent:
|
|
586
|
-
tree = parent.add(f"[bold]{self.data}[/bold]")
|
|
587
|
-
else:
|
|
588
|
-
import rich.tree
|
|
589
|
-
|
|
590
|
-
tree = rich.tree.Tree(self.data)
|
|
591
|
-
|
|
592
|
-
for c in self.children:
|
|
593
|
-
if isinstance(c, Tree):
|
|
594
|
-
c._rich(tree)
|
|
595
|
-
else:
|
|
596
|
-
tree.add(f"[green]{c}[/green]")
|
|
597
|
-
|
|
598
|
-
return tree
|
|
599
|
-
|
|
600
|
-
def __eq__(self, other):
|
|
601
|
-
try:
|
|
602
|
-
return self.data == other.data and self.children == other.children
|
|
603
|
-
except AttributeError:
|
|
604
|
-
return False
|
|
605
|
-
|
|
606
|
-
def __ne__(self, other):
|
|
607
|
-
return not (self == other)
|
|
608
|
-
|
|
609
|
-
def __hash__(self) -> int:
|
|
610
|
-
return hash((self.data, tuple(self.children)))
|
|
611
|
-
|
|
612
|
-
def iter_subtrees(self) -> "Iterator[Tree[_Leaf_T]]":
|
|
613
|
-
#--
|
|
614
|
-
queue = [self]
|
|
615
|
-
subtrees = OrderedDict()
|
|
616
|
-
for subtree in queue:
|
|
617
|
-
subtrees[id(subtree)] = subtree
|
|
618
|
-
##
|
|
619
|
-
|
|
620
|
-
queue += [
|
|
621
|
-
c
|
|
622
|
-
for c in reversed(subtree.children) ##
|
|
623
|
-
|
|
624
|
-
if isinstance(c, Tree) and id(c) not in subtrees
|
|
625
|
-
]
|
|
626
|
-
|
|
627
|
-
del queue
|
|
628
|
-
return reversed(list(subtrees.values()))
|
|
629
|
-
|
|
630
|
-
def iter_subtrees_topdown(self):
|
|
631
|
-
#--
|
|
632
|
-
stack = [self]
|
|
633
|
-
stack_append = stack.append
|
|
634
|
-
stack_pop = stack.pop
|
|
635
|
-
while stack:
|
|
636
|
-
node = stack_pop()
|
|
637
|
-
if not isinstance(node, Tree):
|
|
638
|
-
continue
|
|
639
|
-
yield node
|
|
640
|
-
for child in reversed(node.children):
|
|
641
|
-
stack_append(child)
|
|
642
|
-
|
|
643
|
-
def find_pred(
|
|
644
|
-
self, pred: "Callable[[Tree[_Leaf_T]], bool]"
|
|
645
|
-
) -> "Iterator[Tree[_Leaf_T]]":
|
|
646
|
-
#--
|
|
647
|
-
return filter(pred, self.iter_subtrees())
|
|
648
|
-
|
|
649
|
-
def find_data(self, data: str) -> "Iterator[Tree[_Leaf_T]]":
|
|
650
|
-
#--
|
|
651
|
-
return self.find_pred(lambda t: t.data == data)
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
from functools import wraps, update_wrapper
|
|
655
|
-
from inspect import getmembers, getmro
|
|
656
|
-
|
|
657
|
-
_Return_T = TypeVar("_Return_T")
|
|
658
|
-
_Return_V = TypeVar("_Return_V")
|
|
659
|
-
_Leaf_T = TypeVar("_Leaf_T")
|
|
660
|
-
_Leaf_U = TypeVar("_Leaf_U")
|
|
661
|
-
_R = TypeVar("_R")
|
|
662
|
-
_FUNC = Callable[..., _Return_T]
|
|
663
|
-
_DECORATED = Union[_FUNC, type]
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
class _DiscardType:
|
|
667
|
-
#--
|
|
668
|
-
|
|
669
|
-
def __repr__(self):
|
|
670
|
-
return "lark.visitors.Discard"
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
Discard = _DiscardType()
|
|
674
|
-
|
|
675
|
-
##
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
class _Decoratable:
|
|
680
|
-
#--
|
|
681
|
-
|
|
682
|
-
@classmethod
|
|
683
|
-
def _apply_v_args(cls, visit_wrapper):
|
|
684
|
-
mro = getmro(cls)
|
|
685
|
-
assert mro[0] is cls
|
|
686
|
-
libmembers = {name for _cls in mro[1:] for name, _ in getmembers(_cls)}
|
|
687
|
-
for name, value in getmembers(cls):
|
|
688
|
-
|
|
689
|
-
##
|
|
690
|
-
|
|
691
|
-
if name.startswith("_") or (
|
|
692
|
-
name in libmembers and name not in cls.__dict__
|
|
693
|
-
):
|
|
694
|
-
continue
|
|
695
|
-
if not callable(value):
|
|
696
|
-
continue
|
|
697
|
-
|
|
698
|
-
##
|
|
699
|
-
|
|
700
|
-
if isinstance(cls.__dict__[name], _VArgsWrapper):
|
|
701
|
-
continue
|
|
702
|
-
|
|
703
|
-
setattr(cls, name, _VArgsWrapper(cls.__dict__[name], visit_wrapper))
|
|
704
|
-
return cls
|
|
705
|
-
|
|
706
|
-
def __class_getitem__(cls, _):
|
|
707
|
-
return cls
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
class Transformer(_Decoratable, ABC, Generic[_Leaf_T, _Return_T]):
|
|
711
|
-
#--
|
|
712
|
-
|
|
713
|
-
__visit_tokens__ = True ##
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
def __init__(self, visit_tokens: bool = True) -> None:
|
|
717
|
-
self.__visit_tokens__ = visit_tokens
|
|
718
|
-
|
|
719
|
-
def _call_userfunc(self, tree, new_children=None):
|
|
720
|
-
##
|
|
721
|
-
|
|
722
|
-
children = new_children if new_children is not None else tree.children
|
|
723
|
-
try:
|
|
724
|
-
f = getattr(self, tree.data)
|
|
725
|
-
except AttributeError:
|
|
726
|
-
return self.__default__(tree.data, children, tree.meta)
|
|
727
|
-
else:
|
|
728
|
-
try:
|
|
729
|
-
wrapper = getattr(f, "visit_wrapper", None)
|
|
730
|
-
if wrapper is not None:
|
|
731
|
-
return f.visit_wrapper(f, tree.data, children, tree.meta)
|
|
732
|
-
else:
|
|
733
|
-
return f(children)
|
|
734
|
-
except GrammarError:
|
|
735
|
-
raise
|
|
736
|
-
except Exception as e:
|
|
737
|
-
raise VisitError(tree.data, tree, e)
|
|
738
|
-
|
|
739
|
-
def _call_userfunc_token(self, token):
|
|
740
|
-
try:
|
|
741
|
-
f = getattr(self, token.type)
|
|
742
|
-
except AttributeError:
|
|
743
|
-
return self.__default_token__(token)
|
|
744
|
-
else:
|
|
745
|
-
try:
|
|
746
|
-
return f(token)
|
|
747
|
-
except GrammarError:
|
|
748
|
-
raise
|
|
749
|
-
except Exception as e:
|
|
750
|
-
raise VisitError(token.type, token, e)
|
|
751
|
-
|
|
752
|
-
def _transform_children(self, children):
|
|
753
|
-
for c in children:
|
|
754
|
-
if isinstance(c, Tree):
|
|
755
|
-
res = self._transform_tree(c)
|
|
756
|
-
elif self.__visit_tokens__ and isinstance(c, Token):
|
|
757
|
-
res = self._call_userfunc_token(c)
|
|
758
|
-
else:
|
|
759
|
-
res = c
|
|
760
|
-
|
|
761
|
-
if res is not Discard:
|
|
762
|
-
yield res
|
|
763
|
-
|
|
764
|
-
def _transform_tree(self, tree):
|
|
765
|
-
children = list(self._transform_children(tree.children))
|
|
766
|
-
return self._call_userfunc(tree, children)
|
|
767
|
-
|
|
768
|
-
def transform(self, tree: Tree[_Leaf_T]) -> _Return_T:
|
|
769
|
-
#--
|
|
770
|
-
return self._transform_tree(tree)
|
|
771
|
-
|
|
772
|
-
def __mul__(
|
|
773
|
-
self: "Transformer[_Leaf_T, Tree[_Leaf_U]]",
|
|
774
|
-
other: "Union[Transformer[_Leaf_U, _Return_V], TransformerChain[_Leaf_U, _Return_V,]]",
|
|
775
|
-
) -> "TransformerChain[_Leaf_T, _Return_V]":
|
|
776
|
-
#--
|
|
777
|
-
return TransformerChain(self, other)
|
|
778
|
-
|
|
779
|
-
def __default__(self, data, children, meta):
|
|
780
|
-
#--
|
|
781
|
-
return Tree(data, children, meta)
|
|
782
|
-
|
|
783
|
-
def __default_token__(self, token):
|
|
784
|
-
#--
|
|
785
|
-
return token
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
def merge_transformers(base_transformer=None, **transformers_to_merge):
|
|
789
|
-
#--
|
|
790
|
-
if base_transformer is None:
|
|
791
|
-
base_transformer = Transformer()
|
|
792
|
-
for prefix, transformer in transformers_to_merge.items():
|
|
793
|
-
for method_name in dir(transformer):
|
|
794
|
-
method = getattr(transformer, method_name)
|
|
795
|
-
if not callable(method):
|
|
796
|
-
continue
|
|
797
|
-
if method_name.startswith("_") or method_name == "transform":
|
|
798
|
-
continue
|
|
799
|
-
prefixed_method = prefix + "__" + method_name
|
|
800
|
-
if hasattr(base_transformer, prefixed_method):
|
|
801
|
-
raise AttributeError(
|
|
802
|
-
"Cannot merge: method '%s' appears more than once" % prefixed_method
|
|
803
|
-
)
|
|
804
|
-
|
|
805
|
-
setattr(base_transformer, prefixed_method, method)
|
|
806
|
-
|
|
807
|
-
return base_transformer
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
class InlineTransformer(Transformer): ##
|
|
811
|
-
|
|
812
|
-
def _call_userfunc(self, tree, new_children=None):
|
|
813
|
-
##
|
|
814
|
-
|
|
815
|
-
children = new_children if new_children is not None else tree.children
|
|
816
|
-
try:
|
|
817
|
-
f = getattr(self, tree.data)
|
|
818
|
-
except AttributeError:
|
|
819
|
-
return self.__default__(tree.data, children, tree.meta)
|
|
820
|
-
else:
|
|
821
|
-
return f(*children)
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
class TransformerChain(Generic[_Leaf_T, _Return_T]):
|
|
825
|
-
|
|
826
|
-
transformers: "Tuple[Union[Transformer, TransformerChain], ...]"
|
|
827
|
-
|
|
828
|
-
def __init__(self, *transformers: "Union[Transformer, TransformerChain]") -> None:
|
|
829
|
-
self.transformers = transformers
|
|
830
|
-
|
|
831
|
-
def transform(self, tree: Tree[_Leaf_T]) -> _Return_T:
|
|
832
|
-
for t in self.transformers:
|
|
833
|
-
tree = t.transform(tree)
|
|
834
|
-
return cast(_Return_T, tree)
|
|
835
|
-
|
|
836
|
-
def __mul__(
|
|
837
|
-
self: "TransformerChain[_Leaf_T, Tree[_Leaf_U]]",
|
|
838
|
-
other: "Union[Transformer[_Leaf_U, _Return_V], TransformerChain[_Leaf_U, _Return_V]]",
|
|
839
|
-
) -> "TransformerChain[_Leaf_T, _Return_V]":
|
|
840
|
-
return TransformerChain(*self.transformers + (other,))
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
class Transformer_InPlace(Transformer[_Leaf_T, _Return_T]):
|
|
844
|
-
#--
|
|
845
|
-
|
|
846
|
-
def _transform_tree(self, tree): ##
|
|
847
|
-
|
|
848
|
-
return self._call_userfunc(tree)
|
|
849
|
-
|
|
850
|
-
def transform(self, tree: Tree[_Leaf_T]) -> _Return_T:
|
|
851
|
-
for subtree in tree.iter_subtrees():
|
|
852
|
-
subtree.children = list(self._transform_children(subtree.children))
|
|
853
|
-
|
|
854
|
-
return self._transform_tree(tree)
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
class Transformer_NonRecursive(Transformer[_Leaf_T, _Return_T]):
|
|
858
|
-
#--
|
|
859
|
-
|
|
860
|
-
def transform(self, tree: Tree[_Leaf_T]) -> _Return_T:
|
|
861
|
-
##
|
|
862
|
-
|
|
863
|
-
rev_postfix = []
|
|
864
|
-
q: List[Branch[_Leaf_T]] = [tree]
|
|
865
|
-
while q:
|
|
866
|
-
t = q.pop()
|
|
867
|
-
rev_postfix.append(t)
|
|
868
|
-
if isinstance(t, Tree):
|
|
869
|
-
q += t.children
|
|
870
|
-
|
|
871
|
-
##
|
|
872
|
-
|
|
873
|
-
stack: List = []
|
|
874
|
-
for x in reversed(rev_postfix):
|
|
875
|
-
if isinstance(x, Tree):
|
|
876
|
-
size = len(x.children)
|
|
877
|
-
if size:
|
|
878
|
-
args = stack[-size:]
|
|
879
|
-
del stack[-size:]
|
|
880
|
-
else:
|
|
881
|
-
args = []
|
|
882
|
-
|
|
883
|
-
res = self._call_userfunc(x, args)
|
|
884
|
-
if res is not Discard:
|
|
885
|
-
stack.append(res)
|
|
886
|
-
|
|
887
|
-
elif self.__visit_tokens__ and isinstance(x, Token):
|
|
888
|
-
res = self._call_userfunc_token(x)
|
|
889
|
-
if res is not Discard:
|
|
890
|
-
stack.append(res)
|
|
891
|
-
else:
|
|
892
|
-
stack.append(x)
|
|
893
|
-
|
|
894
|
-
(result,) = stack ##
|
|
895
|
-
|
|
896
|
-
##
|
|
897
|
-
|
|
898
|
-
##
|
|
899
|
-
|
|
900
|
-
##
|
|
901
|
-
|
|
902
|
-
return cast(_Return_T, result)
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
class Transformer_InPlaceRecursive(Transformer):
|
|
906
|
-
#--
|
|
907
|
-
|
|
908
|
-
def _transform_tree(self, tree):
|
|
909
|
-
tree.children = list(self._transform_children(tree.children))
|
|
910
|
-
return self._call_userfunc(tree)
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
##
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
class VisitorBase:
|
|
918
|
-
def _call_userfunc(self, tree):
|
|
919
|
-
return getattr(self, tree.data, self.__default__)(tree)
|
|
920
|
-
|
|
921
|
-
def __default__(self, tree):
|
|
922
|
-
#--
|
|
923
|
-
return tree
|
|
924
|
-
|
|
925
|
-
def __class_getitem__(cls, _):
|
|
926
|
-
return cls
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
class Visitor(VisitorBase, ABC, Generic[_Leaf_T]):
|
|
930
|
-
#--
|
|
931
|
-
|
|
932
|
-
def visit(self, tree: Tree[_Leaf_T]) -> Tree[_Leaf_T]:
|
|
933
|
-
#--
|
|
934
|
-
for subtree in tree.iter_subtrees():
|
|
935
|
-
self._call_userfunc(subtree)
|
|
936
|
-
return tree
|
|
937
|
-
|
|
938
|
-
def visit_topdown(self, tree: Tree[_Leaf_T]) -> Tree[_Leaf_T]:
|
|
939
|
-
#--
|
|
940
|
-
for subtree in tree.iter_subtrees_topdown():
|
|
941
|
-
self._call_userfunc(subtree)
|
|
942
|
-
return tree
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
class Visitor_Recursive(VisitorBase, Generic[_Leaf_T]):
|
|
946
|
-
#--
|
|
947
|
-
|
|
948
|
-
def visit(self, tree: Tree[_Leaf_T]) -> Tree[_Leaf_T]:
|
|
949
|
-
#--
|
|
950
|
-
for child in tree.children:
|
|
951
|
-
if isinstance(child, Tree):
|
|
952
|
-
self.visit(child)
|
|
953
|
-
|
|
954
|
-
self._call_userfunc(tree)
|
|
955
|
-
return tree
|
|
956
|
-
|
|
957
|
-
def visit_topdown(self, tree: Tree[_Leaf_T]) -> Tree[_Leaf_T]:
|
|
958
|
-
#--
|
|
959
|
-
self._call_userfunc(tree)
|
|
960
|
-
|
|
961
|
-
for child in tree.children:
|
|
962
|
-
if isinstance(child, Tree):
|
|
963
|
-
self.visit_topdown(child)
|
|
964
|
-
|
|
965
|
-
return tree
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
class Interpreter(_Decoratable, ABC, Generic[_Leaf_T, _Return_T]):
|
|
969
|
-
#--
|
|
970
|
-
|
|
971
|
-
def visit(self, tree: Tree[_Leaf_T]) -> _Return_T:
|
|
972
|
-
##
|
|
973
|
-
|
|
974
|
-
##
|
|
975
|
-
|
|
976
|
-
##
|
|
977
|
-
|
|
978
|
-
return self._visit_tree(tree)
|
|
979
|
-
|
|
980
|
-
def _visit_tree(self, tree: Tree[_Leaf_T]):
|
|
981
|
-
f = getattr(self, tree.data)
|
|
982
|
-
wrapper = getattr(f, "visit_wrapper", None)
|
|
983
|
-
if wrapper is not None:
|
|
984
|
-
return f.visit_wrapper(f, tree.data, tree.children, tree.meta)
|
|
985
|
-
else:
|
|
986
|
-
return f(tree)
|
|
987
|
-
|
|
988
|
-
def visit_children(self, tree: Tree[_Leaf_T]) -> List:
|
|
989
|
-
return [
|
|
990
|
-
self._visit_tree(child) if isinstance(child, Tree) else child
|
|
991
|
-
for child in tree.children
|
|
992
|
-
]
|
|
993
|
-
|
|
994
|
-
def __getattr__(self, name):
|
|
995
|
-
return self.__default__
|
|
996
|
-
|
|
997
|
-
def __default__(self, tree):
|
|
998
|
-
return self.visit_children(tree)
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
_InterMethod = Callable[[Type[Interpreter], _Return_T], _R]
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
def visit_children_decor(func: _InterMethod) -> _InterMethod:
|
|
1005
|
-
#--
|
|
1006
|
-
|
|
1007
|
-
@wraps(func)
|
|
1008
|
-
def inner(cls, tree):
|
|
1009
|
-
values = cls.visit_children(tree)
|
|
1010
|
-
return func(cls, values)
|
|
1011
|
-
|
|
1012
|
-
return inner
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
##
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
def _apply_v_args(obj, visit_wrapper):
|
|
1020
|
-
try:
|
|
1021
|
-
_apply = obj._apply_v_args
|
|
1022
|
-
except AttributeError:
|
|
1023
|
-
return _VArgsWrapper(obj, visit_wrapper)
|
|
1024
|
-
else:
|
|
1025
|
-
return _apply(visit_wrapper)
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
class _VArgsWrapper:
|
|
1029
|
-
#--
|
|
1030
|
-
|
|
1031
|
-
base_func: Callable
|
|
1032
|
-
|
|
1033
|
-
def __init__(
|
|
1034
|
-
self, func: Callable, visit_wrapper: Callable[[Callable, str, list, Any], Any]
|
|
1035
|
-
):
|
|
1036
|
-
if isinstance(func, _VArgsWrapper):
|
|
1037
|
-
func = func.base_func
|
|
1038
|
-
##
|
|
1039
|
-
|
|
1040
|
-
self.base_func = func ##
|
|
1041
|
-
|
|
1042
|
-
self.visit_wrapper = visit_wrapper
|
|
1043
|
-
update_wrapper(self, func)
|
|
1044
|
-
|
|
1045
|
-
def __call__(self, *args, **kwargs):
|
|
1046
|
-
return self.base_func(*args, **kwargs)
|
|
1047
|
-
|
|
1048
|
-
def __get__(self, instance, owner=None):
|
|
1049
|
-
try:
|
|
1050
|
-
##
|
|
1051
|
-
|
|
1052
|
-
##
|
|
1053
|
-
|
|
1054
|
-
g = type(self.base_func).__get__
|
|
1055
|
-
except AttributeError:
|
|
1056
|
-
return self
|
|
1057
|
-
else:
|
|
1058
|
-
return _VArgsWrapper(g(self.base_func, instance, owner), self.visit_wrapper)
|
|
1059
|
-
|
|
1060
|
-
def __set_name__(self, owner, name):
|
|
1061
|
-
try:
|
|
1062
|
-
f = type(self.base_func).__set_name__
|
|
1063
|
-
except AttributeError:
|
|
1064
|
-
return
|
|
1065
|
-
else:
|
|
1066
|
-
f(self.base_func, owner, name)
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
def _vargs_inline(f, _data, children, _meta):
|
|
1070
|
-
return f(*children)
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
def _vargs_meta_inline(f, _data, children, meta):
|
|
1074
|
-
return f(meta, *children)
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
def _vargs_meta(f, _data, children, meta):
|
|
1078
|
-
return f(meta, children)
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
def _vargs_tree(f, data, children, meta):
|
|
1082
|
-
return f(Tree(data, children, meta))
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
def v_args(
|
|
1086
|
-
inline: bool = False,
|
|
1087
|
-
meta: bool = False,
|
|
1088
|
-
tree: bool = False,
|
|
1089
|
-
wrapper: Optional[Callable] = None,
|
|
1090
|
-
) -> Callable[[_DECORATED], _DECORATED]:
|
|
1091
|
-
#--
|
|
1092
|
-
if tree and (meta or inline):
|
|
1093
|
-
raise ValueError(
|
|
1094
|
-
"Visitor functions cannot combine 'tree' with 'meta' or 'inline'."
|
|
1095
|
-
)
|
|
1096
|
-
|
|
1097
|
-
func = None
|
|
1098
|
-
if meta:
|
|
1099
|
-
if inline:
|
|
1100
|
-
func = _vargs_meta_inline
|
|
1101
|
-
else:
|
|
1102
|
-
func = _vargs_meta
|
|
1103
|
-
elif inline:
|
|
1104
|
-
func = _vargs_inline
|
|
1105
|
-
elif tree:
|
|
1106
|
-
func = _vargs_tree
|
|
1107
|
-
|
|
1108
|
-
if wrapper is not None:
|
|
1109
|
-
if func is not None:
|
|
1110
|
-
raise ValueError(
|
|
1111
|
-
"Cannot use 'wrapper' along with 'tree', 'meta' or 'inline'."
|
|
1112
|
-
)
|
|
1113
|
-
func = wrapper
|
|
1114
|
-
|
|
1115
|
-
def _visitor_args_dec(obj):
|
|
1116
|
-
return _apply_v_args(obj, func)
|
|
1117
|
-
|
|
1118
|
-
return _visitor_args_dec
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
TOKEN_DEFAULT_PRIORITY = 0
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
class Symbol(Serialize):
|
|
1126
|
-
__slots__ = ("name",)
|
|
1127
|
-
|
|
1128
|
-
name: str
|
|
1129
|
-
is_term: ClassVar[bool] = NotImplemented
|
|
1130
|
-
|
|
1131
|
-
def __init__(self, name: str) -> None:
|
|
1132
|
-
self.name = name
|
|
1133
|
-
|
|
1134
|
-
def __eq__(self, other):
|
|
1135
|
-
assert isinstance(other, Symbol), other
|
|
1136
|
-
return self.is_term == other.is_term and self.name == other.name
|
|
1137
|
-
|
|
1138
|
-
def __ne__(self, other):
|
|
1139
|
-
return not (self == other)
|
|
1140
|
-
|
|
1141
|
-
def __hash__(self):
|
|
1142
|
-
return hash(self.name)
|
|
1143
|
-
|
|
1144
|
-
def __repr__(self):
|
|
1145
|
-
return "%s(%r)" % (type(self).__name__, self.name)
|
|
1146
|
-
|
|
1147
|
-
fullrepr = property(__repr__)
|
|
1148
|
-
|
|
1149
|
-
def renamed(self, f):
|
|
1150
|
-
return type(self)(f(self.name))
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
class Terminal(Symbol):
|
|
1154
|
-
__serialize_fields__ = "name", "filter_out"
|
|
1155
|
-
|
|
1156
|
-
is_term: ClassVar[bool] = True
|
|
1157
|
-
|
|
1158
|
-
def __init__(self, name, filter_out=False):
|
|
1159
|
-
self.name = name
|
|
1160
|
-
self.filter_out = filter_out
|
|
1161
|
-
|
|
1162
|
-
@property
|
|
1163
|
-
def fullrepr(self):
|
|
1164
|
-
return "%s(%r, %r)" % (type(self).__name__, self.name, self.filter_out)
|
|
1165
|
-
|
|
1166
|
-
def renamed(self, f):
|
|
1167
|
-
return type(self)(f(self.name), self.filter_out)
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
class NonTerminal(Symbol):
|
|
1171
|
-
__serialize_fields__ = ("name",)
|
|
1172
|
-
|
|
1173
|
-
is_term: ClassVar[bool] = False
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
class RuleOptions(Serialize):
|
|
1177
|
-
__serialize_fields__ = (
|
|
1178
|
-
"keep_all_tokens",
|
|
1179
|
-
"expand1",
|
|
1180
|
-
"priority",
|
|
1181
|
-
"template_source",
|
|
1182
|
-
"empty_indices",
|
|
1183
|
-
)
|
|
1184
|
-
|
|
1185
|
-
keep_all_tokens: bool
|
|
1186
|
-
expand1: bool
|
|
1187
|
-
priority: Optional[int]
|
|
1188
|
-
template_source: Optional[str]
|
|
1189
|
-
empty_indices: Tuple[bool, ...]
|
|
1190
|
-
|
|
1191
|
-
def __init__(
|
|
1192
|
-
self,
|
|
1193
|
-
keep_all_tokens: bool = False,
|
|
1194
|
-
expand1: bool = False,
|
|
1195
|
-
priority: Optional[int] = None,
|
|
1196
|
-
template_source: Optional[str] = None,
|
|
1197
|
-
empty_indices: Tuple[bool, ...] = (),
|
|
1198
|
-
) -> None:
|
|
1199
|
-
self.keep_all_tokens = keep_all_tokens
|
|
1200
|
-
self.expand1 = expand1
|
|
1201
|
-
self.priority = priority
|
|
1202
|
-
self.template_source = template_source
|
|
1203
|
-
self.empty_indices = empty_indices
|
|
1204
|
-
|
|
1205
|
-
def __repr__(self):
|
|
1206
|
-
return "RuleOptions(%r, %r, %r, %r)" % (
|
|
1207
|
-
self.keep_all_tokens,
|
|
1208
|
-
self.expand1,
|
|
1209
|
-
self.priority,
|
|
1210
|
-
self.template_source,
|
|
1211
|
-
)
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
class Rule(Serialize):
|
|
1215
|
-
#--
|
|
1216
|
-
|
|
1217
|
-
__slots__ = ("origin", "expansion", "alias", "options", "order", "_hash")
|
|
1218
|
-
|
|
1219
|
-
__serialize_fields__ = "origin", "expansion", "order", "alias", "options"
|
|
1220
|
-
__serialize_namespace__ = Terminal, NonTerminal, RuleOptions
|
|
1221
|
-
|
|
1222
|
-
origin: NonTerminal
|
|
1223
|
-
expansion: Sequence[Symbol]
|
|
1224
|
-
order: int
|
|
1225
|
-
alias: Optional[str]
|
|
1226
|
-
options: RuleOptions
|
|
1227
|
-
_hash: int
|
|
1228
|
-
|
|
1229
|
-
def __init__(
|
|
1230
|
-
self,
|
|
1231
|
-
origin: NonTerminal,
|
|
1232
|
-
expansion: Sequence[Symbol],
|
|
1233
|
-
order: int = 0,
|
|
1234
|
-
alias: Optional[str] = None,
|
|
1235
|
-
options: Optional[RuleOptions] = None,
|
|
1236
|
-
):
|
|
1237
|
-
self.origin = origin
|
|
1238
|
-
self.expansion = expansion
|
|
1239
|
-
self.alias = alias
|
|
1240
|
-
self.order = order
|
|
1241
|
-
self.options = options or RuleOptions()
|
|
1242
|
-
self._hash = hash((self.origin, tuple(self.expansion)))
|
|
1243
|
-
|
|
1244
|
-
def _deserialize(self):
|
|
1245
|
-
self._hash = hash((self.origin, tuple(self.expansion)))
|
|
1246
|
-
|
|
1247
|
-
def __str__(self):
|
|
1248
|
-
return "<%s : %s>" % (
|
|
1249
|
-
self.origin.name,
|
|
1250
|
-
" ".join(x.name for x in self.expansion),
|
|
1251
|
-
)
|
|
1252
|
-
|
|
1253
|
-
def __repr__(self):
|
|
1254
|
-
return "Rule(%r, %r, %r, %r)" % (
|
|
1255
|
-
self.origin,
|
|
1256
|
-
self.expansion,
|
|
1257
|
-
self.alias,
|
|
1258
|
-
self.options,
|
|
1259
|
-
)
|
|
1260
|
-
|
|
1261
|
-
def __hash__(self):
|
|
1262
|
-
return self._hash
|
|
1263
|
-
|
|
1264
|
-
def __eq__(self, other):
|
|
1265
|
-
if not isinstance(other, Rule):
|
|
1266
|
-
return False
|
|
1267
|
-
return self.origin == other.origin and self.expansion == other.expansion
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
from copy import copy
|
|
1272
|
-
|
|
1273
|
-
try: ##
|
|
1274
|
-
|
|
1275
|
-
has_interegular = bool(interegular)
|
|
1276
|
-
except NameError:
|
|
1277
|
-
has_interegular = False
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
class Pattern(Serialize, ABC):
|
|
1281
|
-
#--
|
|
1282
|
-
|
|
1283
|
-
value: str
|
|
1284
|
-
flags: Collection[str]
|
|
1285
|
-
raw: Optional[str]
|
|
1286
|
-
type: ClassVar[str]
|
|
1287
|
-
|
|
1288
|
-
def __init__(
|
|
1289
|
-
self, value: str, flags: Collection[str] = (), raw: Optional[str] = None
|
|
1290
|
-
) -> None:
|
|
1291
|
-
self.value = value
|
|
1292
|
-
self.flags = frozenset(flags)
|
|
1293
|
-
self.raw = raw
|
|
1294
|
-
|
|
1295
|
-
def __repr__(self):
|
|
1296
|
-
return repr(self.to_regexp())
|
|
1297
|
-
|
|
1298
|
-
##
|
|
1299
|
-
|
|
1300
|
-
def __hash__(self):
|
|
1301
|
-
return hash((type(self), self.value, self.flags))
|
|
1302
|
-
|
|
1303
|
-
def __eq__(self, other):
|
|
1304
|
-
return (
|
|
1305
|
-
type(self) == type(other)
|
|
1306
|
-
and self.value == other.value
|
|
1307
|
-
and self.flags == other.flags
|
|
1308
|
-
)
|
|
1309
|
-
|
|
1310
|
-
@abstractmethod
|
|
1311
|
-
def to_regexp(self) -> str:
|
|
1312
|
-
raise NotImplementedError()
|
|
1313
|
-
|
|
1314
|
-
@property
|
|
1315
|
-
@abstractmethod
|
|
1316
|
-
def min_width(self) -> int:
|
|
1317
|
-
raise NotImplementedError()
|
|
1318
|
-
|
|
1319
|
-
@property
|
|
1320
|
-
@abstractmethod
|
|
1321
|
-
def max_width(self) -> int:
|
|
1322
|
-
raise NotImplementedError()
|
|
1323
|
-
|
|
1324
|
-
def _get_flags(self, value):
|
|
1325
|
-
for f in self.flags:
|
|
1326
|
-
value = "(?%s:%s)" % (f, value)
|
|
1327
|
-
return value
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
class PatternStr(Pattern):
|
|
1331
|
-
__serialize_fields__ = "value", "flags", "raw"
|
|
1332
|
-
|
|
1333
|
-
type: ClassVar[str] = "str"
|
|
1334
|
-
|
|
1335
|
-
def to_regexp(self) -> str:
|
|
1336
|
-
return self._get_flags(re.escape(self.value))
|
|
1337
|
-
|
|
1338
|
-
@property
|
|
1339
|
-
def min_width(self) -> int:
|
|
1340
|
-
return len(self.value)
|
|
1341
|
-
|
|
1342
|
-
@property
|
|
1343
|
-
def max_width(self) -> int:
|
|
1344
|
-
return len(self.value)
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
class PatternRE(Pattern):
|
|
1348
|
-
__serialize_fields__ = "value", "flags", "raw", "_width"
|
|
1349
|
-
|
|
1350
|
-
type: ClassVar[str] = "re"
|
|
1351
|
-
|
|
1352
|
-
def to_regexp(self) -> str:
|
|
1353
|
-
return self._get_flags(self.value)
|
|
1354
|
-
|
|
1355
|
-
_width = None
|
|
1356
|
-
|
|
1357
|
-
def _get_width(self):
|
|
1358
|
-
if self._width is None:
|
|
1359
|
-
self._width = get_regexp_width(self.to_regexp())
|
|
1360
|
-
return self._width
|
|
1361
|
-
|
|
1362
|
-
@property
|
|
1363
|
-
def min_width(self) -> int:
|
|
1364
|
-
return self._get_width()[0]
|
|
1365
|
-
|
|
1366
|
-
@property
|
|
1367
|
-
def max_width(self) -> int:
|
|
1368
|
-
return self._get_width()[1]
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
class TerminalDef(Serialize):
|
|
1372
|
-
#--
|
|
1373
|
-
__serialize_fields__ = "name", "pattern", "priority"
|
|
1374
|
-
__serialize_namespace__ = PatternStr, PatternRE
|
|
1375
|
-
|
|
1376
|
-
name: str
|
|
1377
|
-
pattern: Pattern
|
|
1378
|
-
priority: int
|
|
1379
|
-
|
|
1380
|
-
def __init__(
|
|
1381
|
-
self, name: str, pattern: Pattern, priority: int = TOKEN_DEFAULT_PRIORITY
|
|
1382
|
-
) -> None:
|
|
1383
|
-
assert isinstance(pattern, Pattern), pattern
|
|
1384
|
-
self.name = name
|
|
1385
|
-
self.pattern = pattern
|
|
1386
|
-
self.priority = priority
|
|
1387
|
-
|
|
1388
|
-
def __repr__(self):
|
|
1389
|
-
return "%s(%r, %r)" % (type(self).__name__, self.name, self.pattern)
|
|
1390
|
-
|
|
1391
|
-
def user_repr(self) -> str:
|
|
1392
|
-
if self.name.startswith("__"): ##
|
|
1393
|
-
|
|
1394
|
-
return self.pattern.raw or self.name
|
|
1395
|
-
else:
|
|
1396
|
-
return self.name
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
_T = TypeVar("_T", bound="Token")
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
class Token(str):
|
|
1403
|
-
#--
|
|
1404
|
-
|
|
1405
|
-
__slots__ = (
|
|
1406
|
-
"type",
|
|
1407
|
-
"start_pos",
|
|
1408
|
-
"value",
|
|
1409
|
-
"line",
|
|
1410
|
-
"column",
|
|
1411
|
-
"end_line",
|
|
1412
|
-
"end_column",
|
|
1413
|
-
"end_pos",
|
|
1414
|
-
)
|
|
1415
|
-
|
|
1416
|
-
__match_args__ = ("type", "value")
|
|
1417
|
-
|
|
1418
|
-
type: str
|
|
1419
|
-
start_pos: Optional[int]
|
|
1420
|
-
value: Any
|
|
1421
|
-
line: Optional[int]
|
|
1422
|
-
column: Optional[int]
|
|
1423
|
-
end_line: Optional[int]
|
|
1424
|
-
end_column: Optional[int]
|
|
1425
|
-
end_pos: Optional[int]
|
|
1426
|
-
|
|
1427
|
-
@overload
|
|
1428
|
-
def __new__(
|
|
1429
|
-
cls,
|
|
1430
|
-
type: str,
|
|
1431
|
-
value: Any,
|
|
1432
|
-
start_pos: Optional[int] = None,
|
|
1433
|
-
line: Optional[int] = None,
|
|
1434
|
-
column: Optional[int] = None,
|
|
1435
|
-
end_line: Optional[int] = None,
|
|
1436
|
-
end_column: Optional[int] = None,
|
|
1437
|
-
end_pos: Optional[int] = None,
|
|
1438
|
-
) -> "Token": ...
|
|
1439
|
-
|
|
1440
|
-
@overload
|
|
1441
|
-
def __new__(
|
|
1442
|
-
cls,
|
|
1443
|
-
type_: str,
|
|
1444
|
-
value: Any,
|
|
1445
|
-
start_pos: Optional[int] = None,
|
|
1446
|
-
line: Optional[int] = None,
|
|
1447
|
-
column: Optional[int] = None,
|
|
1448
|
-
end_line: Optional[int] = None,
|
|
1449
|
-
end_column: Optional[int] = None,
|
|
1450
|
-
end_pos: Optional[int] = None,
|
|
1451
|
-
) -> "Token": ...
|
|
1452
|
-
|
|
1453
|
-
def __new__(cls, *args, **kwargs):
|
|
1454
|
-
if "type_" in kwargs:
|
|
1455
|
-
warnings.warn(
|
|
1456
|
-
"`type_` is deprecated use `type` instead", DeprecationWarning
|
|
1457
|
-
)
|
|
1458
|
-
|
|
1459
|
-
if "type" in kwargs:
|
|
1460
|
-
raise TypeError(
|
|
1461
|
-
"Error: using both 'type' and the deprecated 'type_' as arguments."
|
|
1462
|
-
)
|
|
1463
|
-
kwargs["type"] = kwargs.pop("type_")
|
|
1464
|
-
|
|
1465
|
-
return cls._future_new(*args, **kwargs)
|
|
1466
|
-
|
|
1467
|
-
@classmethod
|
|
1468
|
-
def _future_new(
|
|
1469
|
-
cls,
|
|
1470
|
-
type,
|
|
1471
|
-
value,
|
|
1472
|
-
start_pos=None,
|
|
1473
|
-
line=None,
|
|
1474
|
-
column=None,
|
|
1475
|
-
end_line=None,
|
|
1476
|
-
end_column=None,
|
|
1477
|
-
end_pos=None,
|
|
1478
|
-
):
|
|
1479
|
-
inst = super(Token, cls).__new__(cls, value)
|
|
1480
|
-
|
|
1481
|
-
inst.type = type
|
|
1482
|
-
inst.start_pos = start_pos
|
|
1483
|
-
inst.value = value
|
|
1484
|
-
inst.line = line
|
|
1485
|
-
inst.column = column
|
|
1486
|
-
inst.end_line = end_line
|
|
1487
|
-
inst.end_column = end_column
|
|
1488
|
-
inst.end_pos = end_pos
|
|
1489
|
-
return inst
|
|
1490
|
-
|
|
1491
|
-
@overload
|
|
1492
|
-
def update(
|
|
1493
|
-
self, type: Optional[str] = None, value: Optional[Any] = None
|
|
1494
|
-
) -> "Token": ...
|
|
1495
|
-
|
|
1496
|
-
@overload
|
|
1497
|
-
def update(
|
|
1498
|
-
self, type_: Optional[str] = None, value: Optional[Any] = None
|
|
1499
|
-
) -> "Token": ...
|
|
1500
|
-
|
|
1501
|
-
def update(self, *args, **kwargs):
|
|
1502
|
-
if "type_" in kwargs:
|
|
1503
|
-
warnings.warn(
|
|
1504
|
-
"`type_` is deprecated use `type` instead", DeprecationWarning
|
|
1505
|
-
)
|
|
1506
|
-
|
|
1507
|
-
if "type" in kwargs:
|
|
1508
|
-
raise TypeError(
|
|
1509
|
-
"Error: using both 'type' and the deprecated 'type_' as arguments."
|
|
1510
|
-
)
|
|
1511
|
-
kwargs["type"] = kwargs.pop("type_")
|
|
1512
|
-
|
|
1513
|
-
return self._future_update(*args, **kwargs)
|
|
1514
|
-
|
|
1515
|
-
def _future_update(
|
|
1516
|
-
self, type: Optional[str] = None, value: Optional[Any] = None
|
|
1517
|
-
) -> "Token":
|
|
1518
|
-
return Token.new_borrow_pos(
|
|
1519
|
-
type if type is not None else self.type,
|
|
1520
|
-
value if value is not None else self.value,
|
|
1521
|
-
self,
|
|
1522
|
-
)
|
|
1523
|
-
|
|
1524
|
-
@classmethod
|
|
1525
|
-
def new_borrow_pos(cls: Type[_T], type_: str, value: Any, borrow_t: "Token") -> _T:
|
|
1526
|
-
return cls(
|
|
1527
|
-
type_,
|
|
1528
|
-
value,
|
|
1529
|
-
borrow_t.start_pos,
|
|
1530
|
-
borrow_t.line,
|
|
1531
|
-
borrow_t.column,
|
|
1532
|
-
borrow_t.end_line,
|
|
1533
|
-
borrow_t.end_column,
|
|
1534
|
-
borrow_t.end_pos,
|
|
1535
|
-
)
|
|
1536
|
-
|
|
1537
|
-
def __reduce__(self):
|
|
1538
|
-
return (
|
|
1539
|
-
self.__class__,
|
|
1540
|
-
(self.type, self.value, self.start_pos, self.line, self.column),
|
|
1541
|
-
)
|
|
1542
|
-
|
|
1543
|
-
def __repr__(self):
|
|
1544
|
-
return "Token(%r, %r)" % (self.type, self.value)
|
|
1545
|
-
|
|
1546
|
-
def __deepcopy__(self, memo):
|
|
1547
|
-
return Token(self.type, self.value, self.start_pos, self.line, self.column)
|
|
1548
|
-
|
|
1549
|
-
def __eq__(self, other):
|
|
1550
|
-
if isinstance(other, Token) and self.type != other.type:
|
|
1551
|
-
return False
|
|
1552
|
-
|
|
1553
|
-
return str.__eq__(self, other)
|
|
1554
|
-
|
|
1555
|
-
__hash__ = str.__hash__
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
class LineCounter:
|
|
1559
|
-
#--
|
|
1560
|
-
|
|
1561
|
-
__slots__ = "char_pos", "line", "column", "line_start_pos", "newline_char"
|
|
1562
|
-
|
|
1563
|
-
def __init__(self, newline_char):
|
|
1564
|
-
self.newline_char = newline_char
|
|
1565
|
-
self.char_pos = 0
|
|
1566
|
-
self.line = 1
|
|
1567
|
-
self.column = 1
|
|
1568
|
-
self.line_start_pos = 0
|
|
1569
|
-
|
|
1570
|
-
def __eq__(self, other):
|
|
1571
|
-
if not isinstance(other, LineCounter):
|
|
1572
|
-
return NotImplemented
|
|
1573
|
-
|
|
1574
|
-
return (
|
|
1575
|
-
self.char_pos == other.char_pos and self.newline_char == other.newline_char
|
|
1576
|
-
)
|
|
1577
|
-
|
|
1578
|
-
def feed(self, token: Token, test_newline=True):
|
|
1579
|
-
#--
|
|
1580
|
-
if test_newline:
|
|
1581
|
-
newlines = token.count(self.newline_char)
|
|
1582
|
-
if newlines:
|
|
1583
|
-
self.line += newlines
|
|
1584
|
-
self.line_start_pos = (
|
|
1585
|
-
self.char_pos + token.rindex(self.newline_char) + 1
|
|
1586
|
-
)
|
|
1587
|
-
|
|
1588
|
-
self.char_pos += len(token)
|
|
1589
|
-
self.column = self.char_pos - self.line_start_pos + 1
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
class UnlessCallback:
|
|
1593
|
-
def __init__(self, scanner):
|
|
1594
|
-
self.scanner = scanner
|
|
1595
|
-
|
|
1596
|
-
def __call__(self, t):
|
|
1597
|
-
res = self.scanner.match(t.value, 0)
|
|
1598
|
-
if res:
|
|
1599
|
-
_value, t.type = res
|
|
1600
|
-
return t
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
class CallChain:
|
|
1604
|
-
def __init__(self, callback1, callback2, cond):
|
|
1605
|
-
self.callback1 = callback1
|
|
1606
|
-
self.callback2 = callback2
|
|
1607
|
-
self.cond = cond
|
|
1608
|
-
|
|
1609
|
-
def __call__(self, t):
|
|
1610
|
-
t2 = self.callback1(t)
|
|
1611
|
-
return self.callback2(t) if self.cond(t2) else t2
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
def _get_match(re_, regexp, s, flags):
|
|
1615
|
-
m = re_.match(regexp, s, flags)
|
|
1616
|
-
if m:
|
|
1617
|
-
return m.group(0)
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
def _create_unless(terminals, g_regex_flags, re_, use_bytes):
|
|
1621
|
-
tokens_by_type = classify(terminals, lambda t: type(t.pattern))
|
|
1622
|
-
assert len(tokens_by_type) <= 2, tokens_by_type.keys()
|
|
1623
|
-
embedded_strs = set()
|
|
1624
|
-
callback = {}
|
|
1625
|
-
for retok in tokens_by_type.get(PatternRE, []):
|
|
1626
|
-
unless = []
|
|
1627
|
-
for strtok in tokens_by_type.get(PatternStr, []):
|
|
1628
|
-
if strtok.priority != retok.priority:
|
|
1629
|
-
continue
|
|
1630
|
-
s = strtok.pattern.value
|
|
1631
|
-
if s == _get_match(re_, retok.pattern.to_regexp(), s, g_regex_flags):
|
|
1632
|
-
unless.append(strtok)
|
|
1633
|
-
if strtok.pattern.flags <= retok.pattern.flags:
|
|
1634
|
-
embedded_strs.add(strtok)
|
|
1635
|
-
if unless:
|
|
1636
|
-
callback[retok.name] = UnlessCallback(
|
|
1637
|
-
Scanner(
|
|
1638
|
-
unless, g_regex_flags, re_, match_whole=True, use_bytes=use_bytes
|
|
1639
|
-
)
|
|
1640
|
-
)
|
|
1641
|
-
|
|
1642
|
-
new_terminals = [t for t in terminals if t not in embedded_strs]
|
|
1643
|
-
return new_terminals, callback
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
class Scanner:
|
|
1647
|
-
def __init__(self, terminals, g_regex_flags, re_, use_bytes, match_whole=False):
|
|
1648
|
-
self.terminals = terminals
|
|
1649
|
-
self.g_regex_flags = g_regex_flags
|
|
1650
|
-
self.re_ = re_
|
|
1651
|
-
self.use_bytes = use_bytes
|
|
1652
|
-
self.match_whole = match_whole
|
|
1653
|
-
|
|
1654
|
-
self.allowed_types = {t.name for t in self.terminals}
|
|
1655
|
-
|
|
1656
|
-
self._mres = self._build_mres(terminals, len(terminals))
|
|
1657
|
-
|
|
1658
|
-
def _build_mres(self, terminals, max_size):
|
|
1659
|
-
##
|
|
1660
|
-
|
|
1661
|
-
##
|
|
1662
|
-
|
|
1663
|
-
##
|
|
1664
|
-
|
|
1665
|
-
postfix = "$" if self.match_whole else ""
|
|
1666
|
-
mres = []
|
|
1667
|
-
while terminals:
|
|
1668
|
-
pattern = "|".join(
|
|
1669
|
-
"(?P<%s>%s)" % (t.name, t.pattern.to_regexp() + postfix)
|
|
1670
|
-
for t in terminals[:max_size]
|
|
1671
|
-
)
|
|
1672
|
-
if self.use_bytes:
|
|
1673
|
-
pattern = pattern.encode("latin-1")
|
|
1674
|
-
try:
|
|
1675
|
-
mre = self.re_.compile(pattern, self.g_regex_flags)
|
|
1676
|
-
except AssertionError: ##
|
|
1677
|
-
|
|
1678
|
-
return self._build_mres(terminals, max_size // 2)
|
|
1679
|
-
|
|
1680
|
-
mres.append(mre)
|
|
1681
|
-
terminals = terminals[max_size:]
|
|
1682
|
-
return mres
|
|
1683
|
-
|
|
1684
|
-
def match(self, text, pos):
|
|
1685
|
-
for mre in self._mres:
|
|
1686
|
-
m = mre.match(text, pos)
|
|
1687
|
-
if m:
|
|
1688
|
-
return m.group(0), m.lastgroup
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
def _regexp_has_newline(r: str):
|
|
1692
|
-
#--
|
|
1693
|
-
return (
|
|
1694
|
-
"\n" in r or "\\n" in r or "\\s" in r or "[^" in r or ("(?s" in r and "." in r)
|
|
1695
|
-
)
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
class LexerState:
|
|
1699
|
-
#--
|
|
1700
|
-
|
|
1701
|
-
__slots__ = "text", "line_ctr", "last_token"
|
|
1702
|
-
|
|
1703
|
-
text: str
|
|
1704
|
-
line_ctr: LineCounter
|
|
1705
|
-
last_token: Optional[Token]
|
|
1706
|
-
|
|
1707
|
-
def __init__(
|
|
1708
|
-
self,
|
|
1709
|
-
text: str,
|
|
1710
|
-
line_ctr: Optional[LineCounter] = None,
|
|
1711
|
-
last_token: Optional[Token] = None,
|
|
1712
|
-
):
|
|
1713
|
-
self.text = text
|
|
1714
|
-
self.line_ctr = line_ctr or LineCounter(
|
|
1715
|
-
b"\n" if isinstance(text, bytes) else "\n"
|
|
1716
|
-
)
|
|
1717
|
-
self.last_token = last_token
|
|
1718
|
-
|
|
1719
|
-
def __eq__(self, other):
|
|
1720
|
-
if not isinstance(other, LexerState):
|
|
1721
|
-
return NotImplemented
|
|
1722
|
-
|
|
1723
|
-
return (
|
|
1724
|
-
self.text is other.text
|
|
1725
|
-
and self.line_ctr == other.line_ctr
|
|
1726
|
-
and self.last_token == other.last_token
|
|
1727
|
-
)
|
|
1728
|
-
|
|
1729
|
-
def __copy__(self):
|
|
1730
|
-
return type(self)(self.text, copy(self.line_ctr), self.last_token)
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
class LexerThread:
|
|
1734
|
-
#--
|
|
1735
|
-
|
|
1736
|
-
def __init__(self, lexer: "Lexer", lexer_state: LexerState):
|
|
1737
|
-
self.lexer = lexer
|
|
1738
|
-
self.state = lexer_state
|
|
1739
|
-
|
|
1740
|
-
@classmethod
|
|
1741
|
-
def from_text(cls, lexer: "Lexer", text: str) -> "LexerThread":
|
|
1742
|
-
return cls(lexer, LexerState(text))
|
|
1743
|
-
|
|
1744
|
-
def lex(self, parser_state):
|
|
1745
|
-
return self.lexer.lex(self.state, parser_state)
|
|
1746
|
-
|
|
1747
|
-
def __copy__(self):
|
|
1748
|
-
return type(self)(self.lexer, copy(self.state))
|
|
1749
|
-
|
|
1750
|
-
_Token = Token
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
_Callback = Callable[[Token], Token]
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
class Lexer(ABC):
|
|
1757
|
-
#--
|
|
1758
|
-
|
|
1759
|
-
@abstractmethod
|
|
1760
|
-
def lex(self, lexer_state: LexerState, parser_state: Any) -> Iterator[Token]:
|
|
1761
|
-
return NotImplemented
|
|
1762
|
-
|
|
1763
|
-
def make_lexer_state(self, text):
|
|
1764
|
-
#--
|
|
1765
|
-
return LexerState(text)
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
def _check_regex_collisions(
|
|
1769
|
-
terminal_to_regexp: Dict[TerminalDef, str],
|
|
1770
|
-
comparator,
|
|
1771
|
-
strict_mode,
|
|
1772
|
-
max_collisions_to_show=8,
|
|
1773
|
-
):
|
|
1774
|
-
if not comparator:
|
|
1775
|
-
comparator = interegular.Comparator.from_regexes(terminal_to_regexp)
|
|
1776
|
-
|
|
1777
|
-
##
|
|
1778
|
-
|
|
1779
|
-
##
|
|
1780
|
-
|
|
1781
|
-
max_time = 2 if strict_mode else 0.2
|
|
1782
|
-
|
|
1783
|
-
##
|
|
1784
|
-
|
|
1785
|
-
if comparator.count_marked_pairs() >= max_collisions_to_show:
|
|
1786
|
-
return
|
|
1787
|
-
for group in classify(terminal_to_regexp, lambda t: t.priority).values():
|
|
1788
|
-
for a, b in comparator.check(group, skip_marked=True):
|
|
1789
|
-
assert a.priority == b.priority
|
|
1790
|
-
##
|
|
1791
|
-
|
|
1792
|
-
comparator.mark(a, b)
|
|
1793
|
-
|
|
1794
|
-
##
|
|
1795
|
-
|
|
1796
|
-
message = f"Collision between Terminals {a.name} and {b.name}. "
|
|
1797
|
-
try:
|
|
1798
|
-
example = comparator.get_example_overlap(
|
|
1799
|
-
a, b, max_time
|
|
1800
|
-
).format_multiline()
|
|
1801
|
-
except ValueError:
|
|
1802
|
-
##
|
|
1803
|
-
|
|
1804
|
-
example = "No example could be found fast enough. However, the collision does still exists"
|
|
1805
|
-
if strict_mode:
|
|
1806
|
-
raise LexError(f"{message}\n{example}")
|
|
1807
|
-
logger.warning(
|
|
1808
|
-
"%s The lexer will choose between them arbitrarily.\n%s",
|
|
1809
|
-
message,
|
|
1810
|
-
example,
|
|
1811
|
-
)
|
|
1812
|
-
if comparator.count_marked_pairs() >= max_collisions_to_show:
|
|
1813
|
-
logger.warning("Found 8 regex collisions, will not check for more.")
|
|
1814
|
-
return
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
class AbstractBasicLexer(Lexer):
|
|
1818
|
-
terminals_by_name: Dict[str, TerminalDef]
|
|
1819
|
-
|
|
1820
|
-
@abstractmethod
|
|
1821
|
-
def __init__(self, conf: "LexerConf", comparator=None) -> None: ...
|
|
1822
|
-
|
|
1823
|
-
@abstractmethod
|
|
1824
|
-
def next_token(self, lex_state: LexerState, parser_state: Any = None) -> Token: ...
|
|
1825
|
-
|
|
1826
|
-
def lex(self, state: LexerState, parser_state: Any) -> Iterator[Token]:
|
|
1827
|
-
with suppress(EOFError):
|
|
1828
|
-
while True:
|
|
1829
|
-
yield self.next_token(state, parser_state)
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
class BasicLexer(AbstractBasicLexer):
|
|
1833
|
-
terminals: Collection[TerminalDef]
|
|
1834
|
-
ignore_types: FrozenSet[str]
|
|
1835
|
-
newline_types: FrozenSet[str]
|
|
1836
|
-
user_callbacks: Dict[str, _Callback]
|
|
1837
|
-
callback: Dict[str, _Callback]
|
|
1838
|
-
re: ModuleType
|
|
1839
|
-
|
|
1840
|
-
def __init__(self, conf: "LexerConf", comparator=None) -> None:
|
|
1841
|
-
terminals = list(conf.terminals)
|
|
1842
|
-
assert all(isinstance(t, TerminalDef) for t in terminals), terminals
|
|
1843
|
-
|
|
1844
|
-
self.re = conf.re_module
|
|
1845
|
-
|
|
1846
|
-
if not conf.skip_validation:
|
|
1847
|
-
##
|
|
1848
|
-
|
|
1849
|
-
terminal_to_regexp = {}
|
|
1850
|
-
for t in terminals:
|
|
1851
|
-
regexp = t.pattern.to_regexp()
|
|
1852
|
-
try:
|
|
1853
|
-
self.re.compile(regexp, conf.g_regex_flags)
|
|
1854
|
-
except self.re.error:
|
|
1855
|
-
raise LexError("Cannot compile token %s: %s" % (t.name, t.pattern))
|
|
1856
|
-
|
|
1857
|
-
if t.pattern.min_width == 0:
|
|
1858
|
-
raise LexError(
|
|
1859
|
-
"Lexer does not allow zero-width terminals. (%s: %s)"
|
|
1860
|
-
% (t.name, t.pattern)
|
|
1861
|
-
)
|
|
1862
|
-
if t.pattern.type == "re":
|
|
1863
|
-
terminal_to_regexp[t] = regexp
|
|
1864
|
-
|
|
1865
|
-
if not (set(conf.ignore) <= {t.name for t in terminals}):
|
|
1866
|
-
raise LexError(
|
|
1867
|
-
"Ignore terminals are not defined: %s"
|
|
1868
|
-
% (set(conf.ignore) - {t.name for t in terminals})
|
|
1869
|
-
)
|
|
1870
|
-
|
|
1871
|
-
if has_interegular:
|
|
1872
|
-
_check_regex_collisions(terminal_to_regexp, comparator, conf.strict)
|
|
1873
|
-
elif conf.strict:
|
|
1874
|
-
raise LexError(
|
|
1875
|
-
"interegular must be installed for strict mode. Use `pip install 'lark[interegular]'`."
|
|
1876
|
-
)
|
|
1877
|
-
|
|
1878
|
-
##
|
|
1879
|
-
|
|
1880
|
-
self.newline_types = frozenset(
|
|
1881
|
-
t.name for t in terminals if _regexp_has_newline(t.pattern.to_regexp())
|
|
1882
|
-
)
|
|
1883
|
-
self.ignore_types = frozenset(conf.ignore)
|
|
1884
|
-
|
|
1885
|
-
terminals.sort(
|
|
1886
|
-
key=lambda x: (
|
|
1887
|
-
-x.priority,
|
|
1888
|
-
-x.pattern.max_width,
|
|
1889
|
-
-len(x.pattern.value),
|
|
1890
|
-
x.name,
|
|
1891
|
-
)
|
|
1892
|
-
)
|
|
1893
|
-
self.terminals = terminals
|
|
1894
|
-
self.user_callbacks = conf.callbacks
|
|
1895
|
-
self.g_regex_flags = conf.g_regex_flags
|
|
1896
|
-
self.use_bytes = conf.use_bytes
|
|
1897
|
-
self.terminals_by_name = conf.terminals_by_name
|
|
1898
|
-
|
|
1899
|
-
self._scanner = None
|
|
1900
|
-
|
|
1901
|
-
def _build_scanner(self):
|
|
1902
|
-
terminals, self.callback = _create_unless(
|
|
1903
|
-
self.terminals, self.g_regex_flags, self.re, self.use_bytes
|
|
1904
|
-
)
|
|
1905
|
-
assert all(self.callback.values())
|
|
1906
|
-
|
|
1907
|
-
for type_, f in self.user_callbacks.items():
|
|
1908
|
-
if type_ in self.callback:
|
|
1909
|
-
##
|
|
1910
|
-
|
|
1911
|
-
self.callback[type_] = CallChain(
|
|
1912
|
-
self.callback[type_], f, lambda t: t.type == type_
|
|
1913
|
-
)
|
|
1914
|
-
else:
|
|
1915
|
-
self.callback[type_] = f
|
|
1916
|
-
|
|
1917
|
-
self._scanner = Scanner(terminals, self.g_regex_flags, self.re, self.use_bytes)
|
|
1918
|
-
|
|
1919
|
-
@property
|
|
1920
|
-
def scanner(self):
|
|
1921
|
-
if self._scanner is None:
|
|
1922
|
-
self._build_scanner()
|
|
1923
|
-
return self._scanner
|
|
1924
|
-
|
|
1925
|
-
def match(self, text, pos):
|
|
1926
|
-
return self.scanner.match(text, pos)
|
|
1927
|
-
|
|
1928
|
-
def next_token(self, lex_state: LexerState, parser_state: Any = None) -> Token:
|
|
1929
|
-
line_ctr = lex_state.line_ctr
|
|
1930
|
-
while line_ctr.char_pos < len(lex_state.text):
|
|
1931
|
-
res = self.match(lex_state.text, line_ctr.char_pos)
|
|
1932
|
-
if not res:
|
|
1933
|
-
allowed = self.scanner.allowed_types - self.ignore_types
|
|
1934
|
-
if not allowed:
|
|
1935
|
-
allowed = {"<END-OF-FILE>"}
|
|
1936
|
-
raise UnexpectedCharacters(
|
|
1937
|
-
lex_state.text,
|
|
1938
|
-
line_ctr.char_pos,
|
|
1939
|
-
line_ctr.line,
|
|
1940
|
-
line_ctr.column,
|
|
1941
|
-
allowed=allowed,
|
|
1942
|
-
token_history=lex_state.last_token and [lex_state.last_token],
|
|
1943
|
-
state=parser_state,
|
|
1944
|
-
terminals_by_name=self.terminals_by_name,
|
|
1945
|
-
)
|
|
1946
|
-
|
|
1947
|
-
value, type_ = res
|
|
1948
|
-
|
|
1949
|
-
ignored = type_ in self.ignore_types
|
|
1950
|
-
t = None
|
|
1951
|
-
if not ignored or type_ in self.callback:
|
|
1952
|
-
t = Token(
|
|
1953
|
-
type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column
|
|
1954
|
-
)
|
|
1955
|
-
line_ctr.feed(value, type_ in self.newline_types)
|
|
1956
|
-
if t is not None:
|
|
1957
|
-
t.end_line = line_ctr.line
|
|
1958
|
-
t.end_column = line_ctr.column
|
|
1959
|
-
t.end_pos = line_ctr.char_pos
|
|
1960
|
-
if t.type in self.callback:
|
|
1961
|
-
t = self.callback[t.type](t)
|
|
1962
|
-
if not ignored:
|
|
1963
|
-
if not isinstance(t, Token):
|
|
1964
|
-
raise LexError(
|
|
1965
|
-
"Callbacks must return a token (returned %r)" % t
|
|
1966
|
-
)
|
|
1967
|
-
lex_state.last_token = t
|
|
1968
|
-
return t
|
|
1969
|
-
|
|
1970
|
-
##
|
|
1971
|
-
|
|
1972
|
-
raise EOFError(self)
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
class ContextualLexer(Lexer):
|
|
1976
|
-
lexers: Dict[int, AbstractBasicLexer]
|
|
1977
|
-
root_lexer: AbstractBasicLexer
|
|
1978
|
-
|
|
1979
|
-
BasicLexer: Type[AbstractBasicLexer] = BasicLexer
|
|
1980
|
-
|
|
1981
|
-
def __init__(
|
|
1982
|
-
self,
|
|
1983
|
-
conf: "LexerConf",
|
|
1984
|
-
states: Dict[int, Collection[str]],
|
|
1985
|
-
always_accept: Collection[str] = (),
|
|
1986
|
-
) -> None:
|
|
1987
|
-
terminals = list(conf.terminals)
|
|
1988
|
-
terminals_by_name = conf.terminals_by_name
|
|
1989
|
-
|
|
1990
|
-
trad_conf = copy(conf)
|
|
1991
|
-
trad_conf.terminals = terminals
|
|
1992
|
-
|
|
1993
|
-
if has_interegular and not conf.skip_validation:
|
|
1994
|
-
comparator = interegular.Comparator.from_regexes(
|
|
1995
|
-
{t: t.pattern.to_regexp() for t in terminals}
|
|
1996
|
-
)
|
|
1997
|
-
else:
|
|
1998
|
-
comparator = None
|
|
1999
|
-
lexer_by_tokens: Dict[FrozenSet[str], AbstractBasicLexer] = {}
|
|
2000
|
-
self.lexers = {}
|
|
2001
|
-
for state, accepts in states.items():
|
|
2002
|
-
key = frozenset(accepts)
|
|
2003
|
-
try:
|
|
2004
|
-
lexer = lexer_by_tokens[key]
|
|
2005
|
-
except KeyError:
|
|
2006
|
-
accepts = set(accepts) | set(conf.ignore) | set(always_accept)
|
|
2007
|
-
lexer_conf = copy(trad_conf)
|
|
2008
|
-
lexer_conf.terminals = [
|
|
2009
|
-
terminals_by_name[n] for n in accepts if n in terminals_by_name
|
|
2010
|
-
]
|
|
2011
|
-
lexer = self.BasicLexer(lexer_conf, comparator)
|
|
2012
|
-
lexer_by_tokens[key] = lexer
|
|
2013
|
-
|
|
2014
|
-
self.lexers[state] = lexer
|
|
2015
|
-
|
|
2016
|
-
assert trad_conf.terminals is terminals
|
|
2017
|
-
trad_conf.skip_validation = True ##
|
|
2018
|
-
|
|
2019
|
-
self.root_lexer = self.BasicLexer(trad_conf, comparator)
|
|
2020
|
-
|
|
2021
|
-
def lex(
|
|
2022
|
-
self, lexer_state: LexerState, parser_state: "ParserState"
|
|
2023
|
-
) -> Iterator[Token]:
|
|
2024
|
-
try:
|
|
2025
|
-
while True:
|
|
2026
|
-
lexer = self.lexers[parser_state.position]
|
|
2027
|
-
yield lexer.next_token(lexer_state, parser_state)
|
|
2028
|
-
except EOFError:
|
|
2029
|
-
pass
|
|
2030
|
-
except UnexpectedCharacters as e:
|
|
2031
|
-
##
|
|
2032
|
-
|
|
2033
|
-
##
|
|
2034
|
-
|
|
2035
|
-
try:
|
|
2036
|
-
last_token = (
|
|
2037
|
-
lexer_state.last_token
|
|
2038
|
-
) ##
|
|
2039
|
-
|
|
2040
|
-
token = self.root_lexer.next_token(lexer_state, parser_state)
|
|
2041
|
-
raise UnexpectedToken(
|
|
2042
|
-
token,
|
|
2043
|
-
e.allowed,
|
|
2044
|
-
state=parser_state,
|
|
2045
|
-
token_history=[last_token],
|
|
2046
|
-
terminals_by_name=self.root_lexer.terminals_by_name,
|
|
2047
|
-
)
|
|
2048
|
-
except UnexpectedCharacters:
|
|
2049
|
-
raise e ##
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
_ParserArgType: "TypeAlias" = 'Literal["earley", "lalr", "cyk", "auto"]'
|
|
2056
|
-
_LexerArgType: "TypeAlias" = (
|
|
2057
|
-
'Union[Literal["auto", "basic", "contextual", "dynamic", "dynamic_complete"], Type[Lexer]]'
|
|
2058
|
-
)
|
|
2059
|
-
_LexerCallback = Callable[[Token], Token]
|
|
2060
|
-
ParserCallbacks = Dict[str, Callable]
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
class LexerConf(Serialize):
|
|
2064
|
-
__serialize_fields__ = (
|
|
2065
|
-
"terminals",
|
|
2066
|
-
"ignore",
|
|
2067
|
-
"g_regex_flags",
|
|
2068
|
-
"use_bytes",
|
|
2069
|
-
"lexer_type",
|
|
2070
|
-
)
|
|
2071
|
-
__serialize_namespace__ = (TerminalDef,)
|
|
2072
|
-
|
|
2073
|
-
terminals: Collection[TerminalDef]
|
|
2074
|
-
re_module: ModuleType
|
|
2075
|
-
ignore: Collection[str]
|
|
2076
|
-
postlex: "Optional[PostLex]"
|
|
2077
|
-
callbacks: Dict[str, _LexerCallback]
|
|
2078
|
-
g_regex_flags: int
|
|
2079
|
-
skip_validation: bool
|
|
2080
|
-
use_bytes: bool
|
|
2081
|
-
lexer_type: Optional[_LexerArgType]
|
|
2082
|
-
strict: bool
|
|
2083
|
-
|
|
2084
|
-
def __init__(
|
|
2085
|
-
self,
|
|
2086
|
-
terminals: Collection[TerminalDef],
|
|
2087
|
-
re_module: ModuleType,
|
|
2088
|
-
ignore: Collection[str] = (),
|
|
2089
|
-
postlex: "Optional[PostLex]" = None,
|
|
2090
|
-
callbacks: Optional[Dict[str, _LexerCallback]] = None,
|
|
2091
|
-
g_regex_flags: int = 0,
|
|
2092
|
-
skip_validation: bool = False,
|
|
2093
|
-
use_bytes: bool = False,
|
|
2094
|
-
strict: bool = False,
|
|
2095
|
-
):
|
|
2096
|
-
self.terminals = terminals
|
|
2097
|
-
self.terminals_by_name = {t.name: t for t in self.terminals}
|
|
2098
|
-
assert len(self.terminals) == len(self.terminals_by_name)
|
|
2099
|
-
self.ignore = ignore
|
|
2100
|
-
self.postlex = postlex
|
|
2101
|
-
self.callbacks = callbacks or {}
|
|
2102
|
-
self.g_regex_flags = g_regex_flags
|
|
2103
|
-
self.re_module = re_module
|
|
2104
|
-
self.skip_validation = skip_validation
|
|
2105
|
-
self.use_bytes = use_bytes
|
|
2106
|
-
self.strict = strict
|
|
2107
|
-
self.lexer_type = None
|
|
2108
|
-
|
|
2109
|
-
def _deserialize(self):
|
|
2110
|
-
self.terminals_by_name = {t.name: t for t in self.terminals}
|
|
2111
|
-
|
|
2112
|
-
def __deepcopy__(self, memo=None):
|
|
2113
|
-
return type(self)(
|
|
2114
|
-
deepcopy(self.terminals, memo),
|
|
2115
|
-
self.re_module,
|
|
2116
|
-
deepcopy(self.ignore, memo),
|
|
2117
|
-
deepcopy(self.postlex, memo),
|
|
2118
|
-
deepcopy(self.callbacks, memo),
|
|
2119
|
-
deepcopy(self.g_regex_flags, memo),
|
|
2120
|
-
deepcopy(self.skip_validation, memo),
|
|
2121
|
-
deepcopy(self.use_bytes, memo),
|
|
2122
|
-
)
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
class ParserConf(Serialize):
|
|
2126
|
-
__serialize_fields__ = "rules", "start", "parser_type"
|
|
2127
|
-
|
|
2128
|
-
rules: List["Rule"]
|
|
2129
|
-
callbacks: ParserCallbacks
|
|
2130
|
-
start: List[str]
|
|
2131
|
-
parser_type: _ParserArgType
|
|
2132
|
-
|
|
2133
|
-
def __init__(
|
|
2134
|
-
self, rules: List["Rule"], callbacks: ParserCallbacks, start: List[str]
|
|
2135
|
-
):
|
|
2136
|
-
assert isinstance(start, list)
|
|
2137
|
-
self.rules = rules
|
|
2138
|
-
self.callbacks = callbacks
|
|
2139
|
-
self.start = start
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
from functools import partial, wraps
|
|
2144
|
-
from itertools import product
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
class ExpandSingleChild:
|
|
2148
|
-
def __init__(self, node_builder):
|
|
2149
|
-
self.node_builder = node_builder
|
|
2150
|
-
|
|
2151
|
-
def __call__(self, children):
|
|
2152
|
-
if len(children) == 1:
|
|
2153
|
-
return children[0]
|
|
2154
|
-
else:
|
|
2155
|
-
return self.node_builder(children)
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
class PropagatePositions:
|
|
2159
|
-
def __init__(self, node_builder, node_filter=None):
|
|
2160
|
-
self.node_builder = node_builder
|
|
2161
|
-
self.node_filter = node_filter
|
|
2162
|
-
|
|
2163
|
-
def __call__(self, children):
|
|
2164
|
-
res = self.node_builder(children)
|
|
2165
|
-
|
|
2166
|
-
if isinstance(res, Tree):
|
|
2167
|
-
##
|
|
2168
|
-
|
|
2169
|
-
##
|
|
2170
|
-
|
|
2171
|
-
##
|
|
2172
|
-
|
|
2173
|
-
##
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
res_meta = res.meta
|
|
2177
|
-
|
|
2178
|
-
first_meta = self._pp_get_meta(children)
|
|
2179
|
-
if first_meta is not None:
|
|
2180
|
-
if not hasattr(res_meta, "line"):
|
|
2181
|
-
##
|
|
2182
|
-
|
|
2183
|
-
res_meta.line = getattr(
|
|
2184
|
-
first_meta, "container_line", first_meta.line
|
|
2185
|
-
)
|
|
2186
|
-
res_meta.column = getattr(
|
|
2187
|
-
first_meta, "container_column", first_meta.column
|
|
2188
|
-
)
|
|
2189
|
-
res_meta.start_pos = getattr(
|
|
2190
|
-
first_meta, "container_start_pos", first_meta.start_pos
|
|
2191
|
-
)
|
|
2192
|
-
res_meta.empty = False
|
|
2193
|
-
|
|
2194
|
-
res_meta.container_line = getattr(
|
|
2195
|
-
first_meta, "container_line", first_meta.line
|
|
2196
|
-
)
|
|
2197
|
-
res_meta.container_column = getattr(
|
|
2198
|
-
first_meta, "container_column", first_meta.column
|
|
2199
|
-
)
|
|
2200
|
-
res_meta.container_start_pos = getattr(
|
|
2201
|
-
first_meta, "container_start_pos", first_meta.start_pos
|
|
2202
|
-
)
|
|
2203
|
-
|
|
2204
|
-
last_meta = self._pp_get_meta(reversed(children))
|
|
2205
|
-
if last_meta is not None:
|
|
2206
|
-
if not hasattr(res_meta, "end_line"):
|
|
2207
|
-
res_meta.end_line = getattr(
|
|
2208
|
-
last_meta, "container_end_line", last_meta.end_line
|
|
2209
|
-
)
|
|
2210
|
-
res_meta.end_column = getattr(
|
|
2211
|
-
last_meta, "container_end_column", last_meta.end_column
|
|
2212
|
-
)
|
|
2213
|
-
res_meta.end_pos = getattr(
|
|
2214
|
-
last_meta, "container_end_pos", last_meta.end_pos
|
|
2215
|
-
)
|
|
2216
|
-
res_meta.empty = False
|
|
2217
|
-
|
|
2218
|
-
res_meta.container_end_line = getattr(
|
|
2219
|
-
last_meta, "container_end_line", last_meta.end_line
|
|
2220
|
-
)
|
|
2221
|
-
res_meta.container_end_column = getattr(
|
|
2222
|
-
last_meta, "container_end_column", last_meta.end_column
|
|
2223
|
-
)
|
|
2224
|
-
res_meta.container_end_pos = getattr(
|
|
2225
|
-
last_meta, "container_end_pos", last_meta.end_pos
|
|
2226
|
-
)
|
|
2227
|
-
|
|
2228
|
-
return res
|
|
2229
|
-
|
|
2230
|
-
def _pp_get_meta(self, children):
|
|
2231
|
-
for c in children:
|
|
2232
|
-
if self.node_filter is not None and not self.node_filter(c):
|
|
2233
|
-
continue
|
|
2234
|
-
if isinstance(c, Tree):
|
|
2235
|
-
if not c.meta.empty:
|
|
2236
|
-
return c.meta
|
|
2237
|
-
elif isinstance(c, Token):
|
|
2238
|
-
return c
|
|
2239
|
-
elif hasattr(c, "__lark_meta__"):
|
|
2240
|
-
return c.__lark_meta__()
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
def make_propagate_positions(option):
|
|
2244
|
-
if callable(option):
|
|
2245
|
-
return partial(PropagatePositions, node_filter=option)
|
|
2246
|
-
elif option is True:
|
|
2247
|
-
return PropagatePositions
|
|
2248
|
-
elif option is False:
|
|
2249
|
-
return None
|
|
2250
|
-
|
|
2251
|
-
raise ConfigurationError("Invalid option for propagate_positions: %r" % option)
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
class ChildFilter:
|
|
2255
|
-
def __init__(self, to_include, append_none, node_builder):
|
|
2256
|
-
self.node_builder = node_builder
|
|
2257
|
-
self.to_include = to_include
|
|
2258
|
-
self.append_none = append_none
|
|
2259
|
-
|
|
2260
|
-
def __call__(self, children):
|
|
2261
|
-
filtered = []
|
|
2262
|
-
|
|
2263
|
-
for i, to_expand, add_none in self.to_include:
|
|
2264
|
-
if add_none:
|
|
2265
|
-
filtered += [None] * add_none
|
|
2266
|
-
if to_expand:
|
|
2267
|
-
filtered += children[i].children
|
|
2268
|
-
else:
|
|
2269
|
-
filtered.append(children[i])
|
|
2270
|
-
|
|
2271
|
-
if self.append_none:
|
|
2272
|
-
filtered += [None] * self.append_none
|
|
2273
|
-
|
|
2274
|
-
return self.node_builder(filtered)
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
class ChildFilterLALR(ChildFilter):
|
|
2278
|
-
#--
|
|
2279
|
-
|
|
2280
|
-
def __call__(self, children):
|
|
2281
|
-
filtered = []
|
|
2282
|
-
for i, to_expand, add_none in self.to_include:
|
|
2283
|
-
if add_none:
|
|
2284
|
-
filtered += [None] * add_none
|
|
2285
|
-
if to_expand:
|
|
2286
|
-
if filtered:
|
|
2287
|
-
filtered += children[i].children
|
|
2288
|
-
else: ##
|
|
2289
|
-
|
|
2290
|
-
filtered = children[i].children
|
|
2291
|
-
else:
|
|
2292
|
-
filtered.append(children[i])
|
|
2293
|
-
|
|
2294
|
-
if self.append_none:
|
|
2295
|
-
filtered += [None] * self.append_none
|
|
2296
|
-
|
|
2297
|
-
return self.node_builder(filtered)
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
class ChildFilterLALR_NoPlaceholders(ChildFilter):
|
|
2301
|
-
#--
|
|
2302
|
-
|
|
2303
|
-
def __init__(self, to_include, node_builder):
|
|
2304
|
-
self.node_builder = node_builder
|
|
2305
|
-
self.to_include = to_include
|
|
2306
|
-
|
|
2307
|
-
def __call__(self, children):
|
|
2308
|
-
filtered = []
|
|
2309
|
-
for i, to_expand in self.to_include:
|
|
2310
|
-
if to_expand:
|
|
2311
|
-
if filtered:
|
|
2312
|
-
filtered += children[i].children
|
|
2313
|
-
else: ##
|
|
2314
|
-
|
|
2315
|
-
filtered = children[i].children
|
|
2316
|
-
else:
|
|
2317
|
-
filtered.append(children[i])
|
|
2318
|
-
return self.node_builder(filtered)
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
def _should_expand(sym):
|
|
2322
|
-
return not sym.is_term and sym.name.startswith("_")
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
def maybe_create_child_filter(
|
|
2326
|
-
expansion, keep_all_tokens, ambiguous, _empty_indices: List[bool]
|
|
2327
|
-
):
|
|
2328
|
-
##
|
|
2329
|
-
|
|
2330
|
-
if _empty_indices:
|
|
2331
|
-
assert _empty_indices.count(False) == len(expansion)
|
|
2332
|
-
s = "".join(str(int(b)) for b in _empty_indices)
|
|
2333
|
-
empty_indices = [len(ones) for ones in s.split("0")]
|
|
2334
|
-
assert len(empty_indices) == len(expansion) + 1, (empty_indices, len(expansion))
|
|
2335
|
-
else:
|
|
2336
|
-
empty_indices = [0] * (len(expansion) + 1)
|
|
2337
|
-
|
|
2338
|
-
to_include = []
|
|
2339
|
-
nones_to_add = 0
|
|
2340
|
-
for i, sym in enumerate(expansion):
|
|
2341
|
-
nones_to_add += empty_indices[i]
|
|
2342
|
-
if keep_all_tokens or not (sym.is_term and sym.filter_out):
|
|
2343
|
-
to_include.append((i, _should_expand(sym), nones_to_add))
|
|
2344
|
-
nones_to_add = 0
|
|
2345
|
-
|
|
2346
|
-
nones_to_add += empty_indices[len(expansion)]
|
|
2347
|
-
|
|
2348
|
-
if (
|
|
2349
|
-
_empty_indices
|
|
2350
|
-
or len(to_include) < len(expansion)
|
|
2351
|
-
or any(to_expand for i, to_expand, _ in to_include)
|
|
2352
|
-
):
|
|
2353
|
-
if _empty_indices or ambiguous:
|
|
2354
|
-
return partial(
|
|
2355
|
-
ChildFilter if ambiguous else ChildFilterLALR, to_include, nones_to_add
|
|
2356
|
-
)
|
|
2357
|
-
else:
|
|
2358
|
-
##
|
|
2359
|
-
|
|
2360
|
-
return partial(
|
|
2361
|
-
ChildFilterLALR_NoPlaceholders, [(i, x) for i, x, _ in to_include]
|
|
2362
|
-
)
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
class AmbiguousExpander:
|
|
2366
|
-
#--
|
|
2367
|
-
|
|
2368
|
-
def __init__(self, to_expand, tree_class, node_builder):
|
|
2369
|
-
self.node_builder = node_builder
|
|
2370
|
-
self.tree_class = tree_class
|
|
2371
|
-
self.to_expand = to_expand
|
|
2372
|
-
|
|
2373
|
-
def __call__(self, children):
|
|
2374
|
-
def _is_ambig_tree(t):
|
|
2375
|
-
return hasattr(t, "data") and t.data == "_ambig"
|
|
2376
|
-
|
|
2377
|
-
##
|
|
2378
|
-
|
|
2379
|
-
##
|
|
2380
|
-
|
|
2381
|
-
##
|
|
2382
|
-
|
|
2383
|
-
##
|
|
2384
|
-
|
|
2385
|
-
ambiguous = []
|
|
2386
|
-
for i, child in enumerate(children):
|
|
2387
|
-
if _is_ambig_tree(child):
|
|
2388
|
-
if i in self.to_expand:
|
|
2389
|
-
ambiguous.append(i)
|
|
2390
|
-
|
|
2391
|
-
child.expand_kids_by_data("_ambig")
|
|
2392
|
-
|
|
2393
|
-
if not ambiguous:
|
|
2394
|
-
return self.node_builder(children)
|
|
2395
|
-
|
|
2396
|
-
expand = [
|
|
2397
|
-
child.children if i in ambiguous else (child,)
|
|
2398
|
-
for i, child in enumerate(children)
|
|
2399
|
-
]
|
|
2400
|
-
return self.tree_class(
|
|
2401
|
-
"_ambig", [self.node_builder(list(f)) for f in product(*expand)]
|
|
2402
|
-
)
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
def maybe_create_ambiguous_expander(tree_class, expansion, keep_all_tokens):
|
|
2406
|
-
to_expand = [
|
|
2407
|
-
i
|
|
2408
|
-
for i, sym in enumerate(expansion)
|
|
2409
|
-
if keep_all_tokens
|
|
2410
|
-
or ((not (sym.is_term and sym.filter_out)) and _should_expand(sym))
|
|
2411
|
-
]
|
|
2412
|
-
if to_expand:
|
|
2413
|
-
return partial(AmbiguousExpander, to_expand, tree_class)
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
class AmbiguousIntermediateExpander:
|
|
2417
|
-
#--
|
|
2418
|
-
|
|
2419
|
-
def __init__(self, tree_class, node_builder):
|
|
2420
|
-
self.node_builder = node_builder
|
|
2421
|
-
self.tree_class = tree_class
|
|
2422
|
-
|
|
2423
|
-
def __call__(self, children):
|
|
2424
|
-
def _is_iambig_tree(child):
|
|
2425
|
-
return hasattr(child, "data") and child.data == "_iambig"
|
|
2426
|
-
|
|
2427
|
-
def _collapse_iambig(children):
|
|
2428
|
-
#--
|
|
2429
|
-
|
|
2430
|
-
##
|
|
2431
|
-
|
|
2432
|
-
##
|
|
2433
|
-
|
|
2434
|
-
if children and _is_iambig_tree(children[0]):
|
|
2435
|
-
iambig_node = children[0]
|
|
2436
|
-
result = []
|
|
2437
|
-
for grandchild in iambig_node.children:
|
|
2438
|
-
collapsed = _collapse_iambig(grandchild.children)
|
|
2439
|
-
if collapsed:
|
|
2440
|
-
for child in collapsed:
|
|
2441
|
-
child.children += children[1:]
|
|
2442
|
-
result += collapsed
|
|
2443
|
-
else:
|
|
2444
|
-
new_tree = self.tree_class(
|
|
2445
|
-
"_inter", grandchild.children + children[1:]
|
|
2446
|
-
)
|
|
2447
|
-
result.append(new_tree)
|
|
2448
|
-
return result
|
|
2449
|
-
|
|
2450
|
-
collapsed = _collapse_iambig(children)
|
|
2451
|
-
if collapsed:
|
|
2452
|
-
processed_nodes = [self.node_builder(c.children) for c in collapsed]
|
|
2453
|
-
return self.tree_class("_ambig", processed_nodes)
|
|
2454
|
-
|
|
2455
|
-
return self.node_builder(children)
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
def inplace_transformer(func):
|
|
2459
|
-
@wraps(func)
|
|
2460
|
-
def f(children):
|
|
2461
|
-
##
|
|
2462
|
-
|
|
2463
|
-
tree = Tree(func.__name__, children)
|
|
2464
|
-
return func(tree)
|
|
2465
|
-
|
|
2466
|
-
return f
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
def apply_visit_wrapper(func, name, wrapper):
|
|
2470
|
-
if wrapper is _vargs_meta or wrapper is _vargs_meta_inline:
|
|
2471
|
-
raise NotImplementedError("Meta args not supported for internal transformer")
|
|
2472
|
-
|
|
2473
|
-
@wraps(func)
|
|
2474
|
-
def f(children):
|
|
2475
|
-
return wrapper(func, name, children, None)
|
|
2476
|
-
|
|
2477
|
-
return f
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
class ParseTreeBuilder:
|
|
2481
|
-
def __init__(
|
|
2482
|
-
self,
|
|
2483
|
-
rules,
|
|
2484
|
-
tree_class,
|
|
2485
|
-
propagate_positions=False,
|
|
2486
|
-
ambiguous=False,
|
|
2487
|
-
maybe_placeholders=False,
|
|
2488
|
-
):
|
|
2489
|
-
self.tree_class = tree_class
|
|
2490
|
-
self.propagate_positions = propagate_positions
|
|
2491
|
-
self.ambiguous = ambiguous
|
|
2492
|
-
self.maybe_placeholders = maybe_placeholders
|
|
2493
|
-
|
|
2494
|
-
self.rule_builders = list(self._init_builders(rules))
|
|
2495
|
-
|
|
2496
|
-
def _init_builders(self, rules):
|
|
2497
|
-
propagate_positions = make_propagate_positions(self.propagate_positions)
|
|
2498
|
-
|
|
2499
|
-
for rule in rules:
|
|
2500
|
-
options = rule.options
|
|
2501
|
-
keep_all_tokens = options.keep_all_tokens
|
|
2502
|
-
expand_single_child = options.expand1
|
|
2503
|
-
|
|
2504
|
-
wrapper_chain = list(
|
|
2505
|
-
filter(
|
|
2506
|
-
None,
|
|
2507
|
-
[
|
|
2508
|
-
(expand_single_child and not rule.alias) and ExpandSingleChild,
|
|
2509
|
-
maybe_create_child_filter(
|
|
2510
|
-
rule.expansion,
|
|
2511
|
-
keep_all_tokens,
|
|
2512
|
-
self.ambiguous,
|
|
2513
|
-
options.empty_indices if self.maybe_placeholders else None,
|
|
2514
|
-
),
|
|
2515
|
-
propagate_positions,
|
|
2516
|
-
self.ambiguous
|
|
2517
|
-
and maybe_create_ambiguous_expander(
|
|
2518
|
-
self.tree_class, rule.expansion, keep_all_tokens
|
|
2519
|
-
),
|
|
2520
|
-
self.ambiguous
|
|
2521
|
-
and partial(AmbiguousIntermediateExpander, self.tree_class),
|
|
2522
|
-
],
|
|
2523
|
-
)
|
|
2524
|
-
)
|
|
2525
|
-
|
|
2526
|
-
yield rule, wrapper_chain
|
|
2527
|
-
|
|
2528
|
-
def create_callback(self, transformer=None):
|
|
2529
|
-
callbacks = {}
|
|
2530
|
-
|
|
2531
|
-
default_handler = getattr(transformer, "__default__", None)
|
|
2532
|
-
if default_handler:
|
|
2533
|
-
|
|
2534
|
-
def default_callback(data, children):
|
|
2535
|
-
return default_handler(data, children, None)
|
|
2536
|
-
|
|
2537
|
-
else:
|
|
2538
|
-
default_callback = self.tree_class
|
|
2539
|
-
|
|
2540
|
-
for rule, wrapper_chain in self.rule_builders:
|
|
2541
|
-
|
|
2542
|
-
user_callback_name = (
|
|
2543
|
-
rule.alias or rule.options.template_source or rule.origin.name
|
|
2544
|
-
)
|
|
2545
|
-
try:
|
|
2546
|
-
f = getattr(transformer, user_callback_name)
|
|
2547
|
-
wrapper = getattr(f, "visit_wrapper", None)
|
|
2548
|
-
if wrapper is not None:
|
|
2549
|
-
f = apply_visit_wrapper(f, user_callback_name, wrapper)
|
|
2550
|
-
elif isinstance(transformer, Transformer_InPlace):
|
|
2551
|
-
f = inplace_transformer(f)
|
|
2552
|
-
except AttributeError:
|
|
2553
|
-
f = partial(default_callback, user_callback_name)
|
|
2554
|
-
|
|
2555
|
-
for w in wrapper_chain:
|
|
2556
|
-
f = w(f)
|
|
2557
|
-
|
|
2558
|
-
if rule in callbacks:
|
|
2559
|
-
raise GrammarError("Rule '%s' already exists" % (rule,))
|
|
2560
|
-
|
|
2561
|
-
callbacks[rule] = f
|
|
2562
|
-
|
|
2563
|
-
return callbacks
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
class Action:
|
|
2570
|
-
def __init__(self, name):
|
|
2571
|
-
self.name = name
|
|
2572
|
-
|
|
2573
|
-
def __str__(self):
|
|
2574
|
-
return self.name
|
|
2575
|
-
|
|
2576
|
-
def __repr__(self):
|
|
2577
|
-
return str(self)
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
Shift = Action("Shift")
|
|
2581
|
-
Reduce = Action("Reduce")
|
|
2582
|
-
|
|
2583
|
-
StateT = TypeVar("StateT")
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
class ParseTableBase(Generic[StateT]):
|
|
2587
|
-
states: Dict[StateT, Dict[str, Tuple]]
|
|
2588
|
-
start_states: Dict[str, StateT]
|
|
2589
|
-
end_states: Dict[str, StateT]
|
|
2590
|
-
|
|
2591
|
-
def __init__(self, states, start_states, end_states):
|
|
2592
|
-
self.states = states
|
|
2593
|
-
self.start_states = start_states
|
|
2594
|
-
self.end_states = end_states
|
|
2595
|
-
|
|
2596
|
-
def serialize(self, memo):
|
|
2597
|
-
tokens = Enumerator()
|
|
2598
|
-
|
|
2599
|
-
states = {
|
|
2600
|
-
state: {
|
|
2601
|
-
tokens.get(token): (
|
|
2602
|
-
(1, arg.serialize(memo)) if action is Reduce else (0, arg)
|
|
2603
|
-
)
|
|
2604
|
-
for token, (action, arg) in actions.items()
|
|
2605
|
-
}
|
|
2606
|
-
for state, actions in self.states.items()
|
|
2607
|
-
}
|
|
2608
|
-
|
|
2609
|
-
return {
|
|
2610
|
-
"tokens": tokens.reversed(),
|
|
2611
|
-
"states": states,
|
|
2612
|
-
"start_states": self.start_states,
|
|
2613
|
-
"end_states": self.end_states,
|
|
2614
|
-
}
|
|
2615
|
-
|
|
2616
|
-
@classmethod
|
|
2617
|
-
def deserialize(cls, data, memo):
|
|
2618
|
-
tokens = data["tokens"]
|
|
2619
|
-
states = {
|
|
2620
|
-
state: {
|
|
2621
|
-
tokens[token]: (
|
|
2622
|
-
(Reduce, Rule.deserialize(arg, memo))
|
|
2623
|
-
if action == 1
|
|
2624
|
-
else (Shift, arg)
|
|
2625
|
-
)
|
|
2626
|
-
for token, (action, arg) in actions.items()
|
|
2627
|
-
}
|
|
2628
|
-
for state, actions in data["states"].items()
|
|
2629
|
-
}
|
|
2630
|
-
return cls(states, data["start_states"], data["end_states"])
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
class ParseTable(ParseTableBase["State"]):
|
|
2634
|
-
#--
|
|
2635
|
-
|
|
2636
|
-
pass
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
class IntParseTable(ParseTableBase[int]):
|
|
2640
|
-
#--
|
|
2641
|
-
|
|
2642
|
-
@classmethod
|
|
2643
|
-
def from_ParseTable(cls, parse_table: ParseTable):
|
|
2644
|
-
enum = list(parse_table.states)
|
|
2645
|
-
state_to_idx: Dict["State", int] = {s: i for i, s in enumerate(enum)}
|
|
2646
|
-
int_states = {}
|
|
2647
|
-
|
|
2648
|
-
for s, la in parse_table.states.items():
|
|
2649
|
-
la = {
|
|
2650
|
-
k: (v[0], state_to_idx[v[1]]) if v[0] is Shift else v
|
|
2651
|
-
for k, v in la.items()
|
|
2652
|
-
}
|
|
2653
|
-
int_states[state_to_idx[s]] = la
|
|
2654
|
-
|
|
2655
|
-
start_states = {
|
|
2656
|
-
start: state_to_idx[s] for start, s in parse_table.start_states.items()
|
|
2657
|
-
}
|
|
2658
|
-
end_states = {
|
|
2659
|
-
start: state_to_idx[s] for start, s in parse_table.end_states.items()
|
|
2660
|
-
}
|
|
2661
|
-
return cls(int_states, start_states, end_states)
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
class ParseConf(Generic[StateT]):
|
|
2668
|
-
__slots__ = (
|
|
2669
|
-
"parse_table",
|
|
2670
|
-
"callbacks",
|
|
2671
|
-
"start",
|
|
2672
|
-
"start_state",
|
|
2673
|
-
"end_state",
|
|
2674
|
-
"states",
|
|
2675
|
-
)
|
|
2676
|
-
|
|
2677
|
-
parse_table: ParseTableBase[StateT]
|
|
2678
|
-
callbacks: ParserCallbacks
|
|
2679
|
-
start: str
|
|
2680
|
-
|
|
2681
|
-
start_state: StateT
|
|
2682
|
-
end_state: StateT
|
|
2683
|
-
states: Dict[StateT, Dict[str, tuple]]
|
|
2684
|
-
|
|
2685
|
-
def __init__(
|
|
2686
|
-
self,
|
|
2687
|
-
parse_table: ParseTableBase[StateT],
|
|
2688
|
-
callbacks: ParserCallbacks,
|
|
2689
|
-
start: str,
|
|
2690
|
-
):
|
|
2691
|
-
self.parse_table = parse_table
|
|
2692
|
-
|
|
2693
|
-
self.start_state = self.parse_table.start_states[start]
|
|
2694
|
-
self.end_state = self.parse_table.end_states[start]
|
|
2695
|
-
self.states = self.parse_table.states
|
|
2696
|
-
|
|
2697
|
-
self.callbacks = callbacks
|
|
2698
|
-
self.start = start
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
class ParserState(Generic[StateT]):
|
|
2702
|
-
__slots__ = "parse_conf", "lexer", "state_stack", "value_stack"
|
|
2703
|
-
|
|
2704
|
-
parse_conf: ParseConf[StateT]
|
|
2705
|
-
lexer: LexerThread
|
|
2706
|
-
state_stack: List[StateT]
|
|
2707
|
-
value_stack: list
|
|
2708
|
-
|
|
2709
|
-
def __init__(
|
|
2710
|
-
self,
|
|
2711
|
-
parse_conf: ParseConf[StateT],
|
|
2712
|
-
lexer: LexerThread,
|
|
2713
|
-
state_stack=None,
|
|
2714
|
-
value_stack=None,
|
|
2715
|
-
):
|
|
2716
|
-
self.parse_conf = parse_conf
|
|
2717
|
-
self.lexer = lexer
|
|
2718
|
-
self.state_stack = state_stack or [self.parse_conf.start_state]
|
|
2719
|
-
self.value_stack = value_stack or []
|
|
2720
|
-
|
|
2721
|
-
@property
|
|
2722
|
-
def position(self) -> StateT:
|
|
2723
|
-
return self.state_stack[-1]
|
|
2724
|
-
|
|
2725
|
-
##
|
|
2726
|
-
|
|
2727
|
-
def __eq__(self, other) -> bool:
|
|
2728
|
-
if not isinstance(other, ParserState):
|
|
2729
|
-
return NotImplemented
|
|
2730
|
-
return (
|
|
2731
|
-
len(self.state_stack) == len(other.state_stack)
|
|
2732
|
-
and self.position == other.position
|
|
2733
|
-
)
|
|
2734
|
-
|
|
2735
|
-
def __copy__(self):
|
|
2736
|
-
return type(self)(
|
|
2737
|
-
self.parse_conf,
|
|
2738
|
-
self.lexer, ##
|
|
2739
|
-
|
|
2740
|
-
copy(self.state_stack),
|
|
2741
|
-
deepcopy(self.value_stack),
|
|
2742
|
-
)
|
|
2743
|
-
|
|
2744
|
-
def copy(self) -> "ParserState[StateT]":
|
|
2745
|
-
return copy(self)
|
|
2746
|
-
|
|
2747
|
-
def feed_token(self, token: Token, is_end=False) -> Any:
|
|
2748
|
-
state_stack = self.state_stack
|
|
2749
|
-
value_stack = self.value_stack
|
|
2750
|
-
states = self.parse_conf.states
|
|
2751
|
-
end_state = self.parse_conf.end_state
|
|
2752
|
-
callbacks = self.parse_conf.callbacks
|
|
2753
|
-
|
|
2754
|
-
while True:
|
|
2755
|
-
state = state_stack[-1]
|
|
2756
|
-
try:
|
|
2757
|
-
action, arg = states[state][token.type]
|
|
2758
|
-
except KeyError:
|
|
2759
|
-
expected = {s for s in states[state].keys() if s.isupper()}
|
|
2760
|
-
raise UnexpectedToken(
|
|
2761
|
-
token, expected, state=self, interactive_parser=None
|
|
2762
|
-
)
|
|
2763
|
-
|
|
2764
|
-
assert arg != end_state
|
|
2765
|
-
|
|
2766
|
-
if action is Shift:
|
|
2767
|
-
##
|
|
2768
|
-
|
|
2769
|
-
assert not is_end
|
|
2770
|
-
state_stack.append(arg)
|
|
2771
|
-
value_stack.append(
|
|
2772
|
-
token
|
|
2773
|
-
if token.type not in callbacks
|
|
2774
|
-
else callbacks[token.type](token)
|
|
2775
|
-
)
|
|
2776
|
-
return
|
|
2777
|
-
else:
|
|
2778
|
-
##
|
|
2779
|
-
|
|
2780
|
-
rule = arg
|
|
2781
|
-
size = len(rule.expansion)
|
|
2782
|
-
if size:
|
|
2783
|
-
s = value_stack[-size:]
|
|
2784
|
-
del state_stack[-size:]
|
|
2785
|
-
del value_stack[-size:]
|
|
2786
|
-
else:
|
|
2787
|
-
s = []
|
|
2788
|
-
|
|
2789
|
-
value = callbacks[rule](s) if callbacks else s
|
|
2790
|
-
|
|
2791
|
-
_action, new_state = states[state_stack[-1]][rule.origin.name]
|
|
2792
|
-
assert _action is Shift
|
|
2793
|
-
state_stack.append(new_state)
|
|
2794
|
-
value_stack.append(value)
|
|
2795
|
-
|
|
2796
|
-
if is_end and state_stack[-1] == end_state:
|
|
2797
|
-
return value_stack[-1]
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
class LALR_Parser(Serialize):
|
|
2804
|
-
def __init__(
|
|
2805
|
-
self, parser_conf: ParserConf, debug: bool = False, strict: bool = False
|
|
2806
|
-
):
|
|
2807
|
-
analysis = LALR_Analyzer(parser_conf, debug=debug, strict=strict)
|
|
2808
|
-
analysis.compute_lalr()
|
|
2809
|
-
callbacks = parser_conf.callbacks
|
|
2810
|
-
|
|
2811
|
-
self._parse_table = analysis.parse_table
|
|
2812
|
-
self.parser_conf = parser_conf
|
|
2813
|
-
self.parser = _Parser(analysis.parse_table, callbacks, debug)
|
|
2814
|
-
|
|
2815
|
-
@classmethod
|
|
2816
|
-
def deserialize(cls, data, memo, callbacks, debug=False):
|
|
2817
|
-
inst = cls.__new__(cls)
|
|
2818
|
-
inst._parse_table = IntParseTable.deserialize(data, memo)
|
|
2819
|
-
inst.parser = _Parser(inst._parse_table, callbacks, debug)
|
|
2820
|
-
return inst
|
|
2821
|
-
|
|
2822
|
-
def serialize(self, memo: Any = None) -> Dict[str, Any]:
|
|
2823
|
-
return self._parse_table.serialize(memo)
|
|
2824
|
-
|
|
2825
|
-
def parse_interactive(self, lexer: LexerThread, start: str):
|
|
2826
|
-
return self.parser.parse(lexer, start, start_interactive=True)
|
|
2827
|
-
|
|
2828
|
-
def parse(self, lexer, start, on_error=None):
|
|
2829
|
-
try:
|
|
2830
|
-
return self.parser.parse(lexer, start)
|
|
2831
|
-
except UnexpectedInput as e:
|
|
2832
|
-
if on_error is None:
|
|
2833
|
-
raise
|
|
2834
|
-
|
|
2835
|
-
while True:
|
|
2836
|
-
if isinstance(e, UnexpectedCharacters):
|
|
2837
|
-
s = e.interactive_parser.lexer_thread.state
|
|
2838
|
-
p = s.line_ctr.char_pos
|
|
2839
|
-
|
|
2840
|
-
if not on_error(e):
|
|
2841
|
-
raise e
|
|
2842
|
-
|
|
2843
|
-
if isinstance(e, UnexpectedCharacters):
|
|
2844
|
-
##
|
|
2845
|
-
|
|
2846
|
-
if p == s.line_ctr.char_pos:
|
|
2847
|
-
s.line_ctr.feed(s.text[p : p + 1])
|
|
2848
|
-
|
|
2849
|
-
try:
|
|
2850
|
-
return e.interactive_parser.resume_parse()
|
|
2851
|
-
except UnexpectedToken as e2:
|
|
2852
|
-
if (
|
|
2853
|
-
isinstance(e, UnexpectedToken)
|
|
2854
|
-
and e.token.type == e2.token.type == "$END"
|
|
2855
|
-
and e.interactive_parser == e2.interactive_parser
|
|
2856
|
-
):
|
|
2857
|
-
##
|
|
2858
|
-
|
|
2859
|
-
raise e2
|
|
2860
|
-
e = e2
|
|
2861
|
-
except UnexpectedCharacters as e2:
|
|
2862
|
-
e = e2
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
class _Parser:
|
|
2866
|
-
parse_table: ParseTableBase
|
|
2867
|
-
callbacks: ParserCallbacks
|
|
2868
|
-
debug: bool
|
|
2869
|
-
|
|
2870
|
-
def __init__(
|
|
2871
|
-
self,
|
|
2872
|
-
parse_table: ParseTableBase,
|
|
2873
|
-
callbacks: ParserCallbacks,
|
|
2874
|
-
debug: bool = False,
|
|
2875
|
-
):
|
|
2876
|
-
self.parse_table = parse_table
|
|
2877
|
-
self.callbacks = callbacks
|
|
2878
|
-
self.debug = debug
|
|
2879
|
-
|
|
2880
|
-
def parse(
|
|
2881
|
-
self,
|
|
2882
|
-
lexer: LexerThread,
|
|
2883
|
-
start: str,
|
|
2884
|
-
value_stack=None,
|
|
2885
|
-
state_stack=None,
|
|
2886
|
-
start_interactive=False,
|
|
2887
|
-
):
|
|
2888
|
-
parse_conf = ParseConf(self.parse_table, self.callbacks, start)
|
|
2889
|
-
parser_state = ParserState(parse_conf, lexer, state_stack, value_stack)
|
|
2890
|
-
if start_interactive:
|
|
2891
|
-
return InteractiveParser(self, parser_state, parser_state.lexer)
|
|
2892
|
-
return self.parse_from_state(parser_state)
|
|
2893
|
-
|
|
2894
|
-
def parse_from_state(self, state: ParserState, last_token: Optional[Token] = None):
|
|
2895
|
-
#--
|
|
2896
|
-
try:
|
|
2897
|
-
token = last_token
|
|
2898
|
-
for token in state.lexer.lex(state):
|
|
2899
|
-
assert token is not None
|
|
2900
|
-
state.feed_token(token)
|
|
2901
|
-
|
|
2902
|
-
end_token = (
|
|
2903
|
-
Token.new_borrow_pos("$END", "", token)
|
|
2904
|
-
if token
|
|
2905
|
-
else Token("$END", "", 0, 1, 1)
|
|
2906
|
-
)
|
|
2907
|
-
return state.feed_token(end_token, True)
|
|
2908
|
-
except UnexpectedInput as e:
|
|
2909
|
-
try:
|
|
2910
|
-
e.interactive_parser = InteractiveParser(self, state, state.lexer)
|
|
2911
|
-
except NameError:
|
|
2912
|
-
pass
|
|
2913
|
-
raise e
|
|
2914
|
-
except Exception as e:
|
|
2915
|
-
if self.debug:
|
|
2916
|
-
print("")
|
|
2917
|
-
print("STATE STACK DUMP")
|
|
2918
|
-
print("----------------")
|
|
2919
|
-
for i, s in enumerate(state.state_stack):
|
|
2920
|
-
print("%d)" % i, s)
|
|
2921
|
-
print("")
|
|
2922
|
-
|
|
2923
|
-
raise
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
class InteractiveParser:
|
|
2930
|
-
#--
|
|
2931
|
-
|
|
2932
|
-
def __init__(self, parser, parser_state, lexer_thread: LexerThread):
|
|
2933
|
-
self.parser = parser
|
|
2934
|
-
self.parser_state = parser_state
|
|
2935
|
-
self.lexer_thread = lexer_thread
|
|
2936
|
-
self.result = None
|
|
2937
|
-
|
|
2938
|
-
@property
|
|
2939
|
-
def lexer_state(self) -> LexerThread:
|
|
2940
|
-
warnings.warn(
|
|
2941
|
-
"lexer_state will be removed in subsequent releases. Use lexer_thread instead.",
|
|
2942
|
-
DeprecationWarning,
|
|
2943
|
-
)
|
|
2944
|
-
return self.lexer_thread
|
|
2945
|
-
|
|
2946
|
-
def feed_token(self, token: Token):
|
|
2947
|
-
#--
|
|
2948
|
-
return self.parser_state.feed_token(token, token.type == "$END")
|
|
2949
|
-
|
|
2950
|
-
def iter_parse(self) -> Iterator[Token]:
|
|
2951
|
-
#--
|
|
2952
|
-
for token in self.lexer_thread.lex(self.parser_state):
|
|
2953
|
-
yield token
|
|
2954
|
-
self.result = self.feed_token(token)
|
|
2955
|
-
|
|
2956
|
-
def exhaust_lexer(self) -> List[Token]:
|
|
2957
|
-
#--
|
|
2958
|
-
return list(self.iter_parse())
|
|
2959
|
-
|
|
2960
|
-
def feed_eof(self, last_token=None):
|
|
2961
|
-
#--
|
|
2962
|
-
eof = (
|
|
2963
|
-
Token.new_borrow_pos("$END", "", last_token)
|
|
2964
|
-
if last_token is not None
|
|
2965
|
-
else self.lexer_thread._Token("$END", "", 0, 1, 1)
|
|
2966
|
-
)
|
|
2967
|
-
return self.feed_token(eof)
|
|
2968
|
-
|
|
2969
|
-
def __copy__(self):
|
|
2970
|
-
#--
|
|
2971
|
-
return type(self)(
|
|
2972
|
-
self.parser,
|
|
2973
|
-
copy(self.parser_state),
|
|
2974
|
-
copy(self.lexer_thread),
|
|
2975
|
-
)
|
|
2976
|
-
|
|
2977
|
-
def copy(self):
|
|
2978
|
-
return copy(self)
|
|
2979
|
-
|
|
2980
|
-
def __eq__(self, other):
|
|
2981
|
-
if not isinstance(other, InteractiveParser):
|
|
2982
|
-
return False
|
|
2983
|
-
|
|
2984
|
-
return (
|
|
2985
|
-
self.parser_state == other.parser_state
|
|
2986
|
-
and self.lexer_thread == other.lexer_thread
|
|
2987
|
-
)
|
|
2988
|
-
|
|
2989
|
-
def as_immutable(self):
|
|
2990
|
-
#--
|
|
2991
|
-
p = copy(self)
|
|
2992
|
-
return ImmutableInteractiveParser(p.parser, p.parser_state, p.lexer_thread)
|
|
2993
|
-
|
|
2994
|
-
def pretty(self):
|
|
2995
|
-
#--
|
|
2996
|
-
out = ["Parser choices:"]
|
|
2997
|
-
for k, v in self.choices().items():
|
|
2998
|
-
out.append("\t- %s -> %r" % (k, v))
|
|
2999
|
-
out.append("stack size: %s" % len(self.parser_state.state_stack))
|
|
3000
|
-
return "\n".join(out)
|
|
3001
|
-
|
|
3002
|
-
def choices(self):
|
|
3003
|
-
#--
|
|
3004
|
-
return self.parser_state.parse_conf.parse_table.states[
|
|
3005
|
-
self.parser_state.position
|
|
3006
|
-
]
|
|
3007
|
-
|
|
3008
|
-
def accepts(self):
|
|
3009
|
-
#--
|
|
3010
|
-
accepts = set()
|
|
3011
|
-
conf_no_callbacks = copy(self.parser_state.parse_conf)
|
|
3012
|
-
##
|
|
3013
|
-
|
|
3014
|
-
##
|
|
3015
|
-
|
|
3016
|
-
conf_no_callbacks.callbacks = {}
|
|
3017
|
-
for t in self.choices():
|
|
3018
|
-
if t.isupper(): ##
|
|
3019
|
-
|
|
3020
|
-
new_cursor = copy(self)
|
|
3021
|
-
new_cursor.parser_state.parse_conf = conf_no_callbacks
|
|
3022
|
-
try:
|
|
3023
|
-
new_cursor.feed_token(self.lexer_thread._Token(t, ""))
|
|
3024
|
-
except UnexpectedToken:
|
|
3025
|
-
pass
|
|
3026
|
-
else:
|
|
3027
|
-
accepts.add(t)
|
|
3028
|
-
return accepts
|
|
3029
|
-
|
|
3030
|
-
def resume_parse(self):
|
|
3031
|
-
#--
|
|
3032
|
-
return self.parser.parse_from_state(
|
|
3033
|
-
self.parser_state, last_token=self.lexer_thread.state.last_token
|
|
3034
|
-
)
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
class ImmutableInteractiveParser(InteractiveParser):
|
|
3038
|
-
#--
|
|
3039
|
-
|
|
3040
|
-
result = None
|
|
3041
|
-
|
|
3042
|
-
def __hash__(self):
|
|
3043
|
-
return hash((self.parser_state, self.lexer_thread))
|
|
3044
|
-
|
|
3045
|
-
def feed_token(self, token):
|
|
3046
|
-
c = copy(self)
|
|
3047
|
-
c.result = InteractiveParser.feed_token(c, token)
|
|
3048
|
-
return c
|
|
3049
|
-
|
|
3050
|
-
def exhaust_lexer(self):
|
|
3051
|
-
#--
|
|
3052
|
-
cursor = self.as_mutable()
|
|
3053
|
-
cursor.exhaust_lexer()
|
|
3054
|
-
return cursor.as_immutable()
|
|
3055
|
-
|
|
3056
|
-
def as_mutable(self):
|
|
3057
|
-
#--
|
|
3058
|
-
p = copy(self)
|
|
3059
|
-
return InteractiveParser(p.parser, p.parser_state, p.lexer_thread)
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
def _wrap_lexer(lexer_class):
|
|
3066
|
-
future_interface = getattr(lexer_class, "__future_interface__", False)
|
|
3067
|
-
if future_interface:
|
|
3068
|
-
return lexer_class
|
|
3069
|
-
else:
|
|
3070
|
-
|
|
3071
|
-
class CustomLexerWrapper(Lexer):
|
|
3072
|
-
def __init__(self, lexer_conf):
|
|
3073
|
-
self.lexer = lexer_class(lexer_conf)
|
|
3074
|
-
|
|
3075
|
-
def lex(self, lexer_state, parser_state):
|
|
3076
|
-
return self.lexer.lex(lexer_state.text)
|
|
3077
|
-
|
|
3078
|
-
return CustomLexerWrapper
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
def _deserialize_parsing_frontend(data, memo, lexer_conf, callbacks, options):
|
|
3082
|
-
parser_conf = ParserConf.deserialize(data["parser_conf"], memo)
|
|
3083
|
-
cls = (options and options._plugins.get("LALR_Parser")) or LALR_Parser
|
|
3084
|
-
parser = cls.deserialize(data["parser"], memo, callbacks, options.debug)
|
|
3085
|
-
parser_conf.callbacks = callbacks
|
|
3086
|
-
return ParsingFrontend(lexer_conf, parser_conf, options, parser=parser)
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
_parser_creators: "Dict[str, Callable[[LexerConf, Any, Any], Any]]" = {}
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
class ParsingFrontend(Serialize):
|
|
3093
|
-
__serialize_fields__ = "lexer_conf", "parser_conf", "parser"
|
|
3094
|
-
|
|
3095
|
-
lexer_conf: LexerConf
|
|
3096
|
-
parser_conf: ParserConf
|
|
3097
|
-
options: Any
|
|
3098
|
-
|
|
3099
|
-
def __init__(
|
|
3100
|
-
self, lexer_conf: LexerConf, parser_conf: ParserConf, options, parser=None
|
|
3101
|
-
):
|
|
3102
|
-
self.parser_conf = parser_conf
|
|
3103
|
-
self.lexer_conf = lexer_conf
|
|
3104
|
-
self.options = options
|
|
3105
|
-
|
|
3106
|
-
##
|
|
3107
|
-
|
|
3108
|
-
if parser: ##
|
|
3109
|
-
|
|
3110
|
-
self.parser = parser
|
|
3111
|
-
else:
|
|
3112
|
-
create_parser = _parser_creators.get(parser_conf.parser_type)
|
|
3113
|
-
assert (
|
|
3114
|
-
create_parser is not None
|
|
3115
|
-
), "{} is not supported in standalone mode".format(parser_conf.parser_type)
|
|
3116
|
-
self.parser = create_parser(lexer_conf, parser_conf, options)
|
|
3117
|
-
|
|
3118
|
-
##
|
|
3119
|
-
|
|
3120
|
-
lexer_type = lexer_conf.lexer_type
|
|
3121
|
-
self.skip_lexer = False
|
|
3122
|
-
if lexer_type in ("dynamic", "dynamic_complete"):
|
|
3123
|
-
assert lexer_conf.postlex is None
|
|
3124
|
-
self.skip_lexer = True
|
|
3125
|
-
return
|
|
3126
|
-
|
|
3127
|
-
if isinstance(lexer_type, type):
|
|
3128
|
-
assert issubclass(lexer_type, Lexer)
|
|
3129
|
-
self.lexer = _wrap_lexer(lexer_type)(lexer_conf)
|
|
3130
|
-
elif isinstance(lexer_type, str):
|
|
3131
|
-
create_lexer = {
|
|
3132
|
-
"basic": create_basic_lexer,
|
|
3133
|
-
"contextual": create_contextual_lexer,
|
|
3134
|
-
}[lexer_type]
|
|
3135
|
-
self.lexer = create_lexer(
|
|
3136
|
-
lexer_conf, self.parser, lexer_conf.postlex, options
|
|
3137
|
-
)
|
|
3138
|
-
else:
|
|
3139
|
-
raise TypeError("Bad value for lexer_type: {lexer_type}")
|
|
3140
|
-
|
|
3141
|
-
if lexer_conf.postlex:
|
|
3142
|
-
self.lexer = PostLexConnector(self.lexer, lexer_conf.postlex)
|
|
3143
|
-
|
|
3144
|
-
def _verify_start(self, start=None):
|
|
3145
|
-
if start is None:
|
|
3146
|
-
start_decls = self.parser_conf.start
|
|
3147
|
-
if len(start_decls) > 1:
|
|
3148
|
-
raise ConfigurationError(
|
|
3149
|
-
"Lark initialized with more than 1 possible start rule. Must specify which start rule to parse",
|
|
3150
|
-
start_decls,
|
|
3151
|
-
)
|
|
3152
|
-
(start,) = start_decls
|
|
3153
|
-
elif start not in self.parser_conf.start:
|
|
3154
|
-
raise ConfigurationError(
|
|
3155
|
-
"Unknown start rule %s. Must be one of %r"
|
|
3156
|
-
% (start, self.parser_conf.start)
|
|
3157
|
-
)
|
|
3158
|
-
return start
|
|
3159
|
-
|
|
3160
|
-
def _make_lexer_thread(self, text: str) -> Union[str, LexerThread]:
|
|
3161
|
-
cls = (self.options and self.options._plugins.get("LexerThread")) or LexerThread
|
|
3162
|
-
return text if self.skip_lexer else cls.from_text(self.lexer, text)
|
|
3163
|
-
|
|
3164
|
-
def parse(self, text: str, start=None, on_error=None):
|
|
3165
|
-
chosen_start = self._verify_start(start)
|
|
3166
|
-
kw = {} if on_error is None else {"on_error": on_error}
|
|
3167
|
-
stream = self._make_lexer_thread(text)
|
|
3168
|
-
return self.parser.parse(stream, chosen_start, **kw)
|
|
3169
|
-
|
|
3170
|
-
def parse_interactive(self, text: Optional[str] = None, start=None):
|
|
3171
|
-
##
|
|
3172
|
-
|
|
3173
|
-
##
|
|
3174
|
-
|
|
3175
|
-
chosen_start = self._verify_start(start)
|
|
3176
|
-
if self.parser_conf.parser_type != "lalr":
|
|
3177
|
-
raise ConfigurationError(
|
|
3178
|
-
"parse_interactive() currently only works with parser='lalr' "
|
|
3179
|
-
)
|
|
3180
|
-
stream = self._make_lexer_thread(text) ##
|
|
3181
|
-
|
|
3182
|
-
return self.parser.parse_interactive(stream, chosen_start)
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
def _validate_frontend_args(parser, lexer) -> None:
|
|
3186
|
-
assert_config(parser, ("lalr", "earley", "cyk"))
|
|
3187
|
-
if not isinstance(lexer, type): ##
|
|
3188
|
-
|
|
3189
|
-
expected = {
|
|
3190
|
-
"lalr": ("basic", "contextual"),
|
|
3191
|
-
"earley": ("basic", "dynamic", "dynamic_complete"),
|
|
3192
|
-
"cyk": ("basic",),
|
|
3193
|
-
}[parser]
|
|
3194
|
-
assert_config(
|
|
3195
|
-
lexer,
|
|
3196
|
-
expected,
|
|
3197
|
-
"Parser %r does not support lexer %%r, expected one of %%s" % parser,
|
|
3198
|
-
)
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
def _get_lexer_callbacks(transformer, terminals):
|
|
3202
|
-
result = {}
|
|
3203
|
-
for terminal in terminals:
|
|
3204
|
-
callback = getattr(transformer, terminal.name, None)
|
|
3205
|
-
if callback is not None:
|
|
3206
|
-
result[terminal.name] = callback
|
|
3207
|
-
return result
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
class PostLexConnector:
|
|
3211
|
-
def __init__(self, lexer, postlexer):
|
|
3212
|
-
self.lexer = lexer
|
|
3213
|
-
self.postlexer = postlexer
|
|
3214
|
-
|
|
3215
|
-
def lex(self, lexer_state, parser_state):
|
|
3216
|
-
i = self.lexer.lex(lexer_state, parser_state)
|
|
3217
|
-
return self.postlexer.process(i)
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
def create_basic_lexer(lexer_conf, parser, postlex, options) -> BasicLexer:
|
|
3221
|
-
cls = (options and options._plugins.get("BasicLexer")) or BasicLexer
|
|
3222
|
-
return cls(lexer_conf)
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
def create_contextual_lexer(
|
|
3226
|
-
lexer_conf: LexerConf, parser, postlex, options
|
|
3227
|
-
) -> ContextualLexer:
|
|
3228
|
-
cls = (options and options._plugins.get("ContextualLexer")) or ContextualLexer
|
|
3229
|
-
parse_table: ParseTableBase[int] = parser._parse_table
|
|
3230
|
-
states: Dict[int, Collection[str]] = {
|
|
3231
|
-
idx: list(t.keys()) for idx, t in parse_table.states.items()
|
|
3232
|
-
}
|
|
3233
|
-
always_accept: Collection[str] = postlex.always_accept if postlex else ()
|
|
3234
|
-
return cls(lexer_conf, states, always_accept=always_accept)
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
def create_lalr_parser(
|
|
3238
|
-
lexer_conf: LexerConf, parser_conf: ParserConf, options=None
|
|
3239
|
-
) -> LALR_Parser:
|
|
3240
|
-
debug = options.debug if options else False
|
|
3241
|
-
strict = options.strict if options else False
|
|
3242
|
-
cls = (options and options._plugins.get("LALR_Parser")) or LALR_Parser
|
|
3243
|
-
return cls(parser_conf, debug=debug, strict=strict)
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
_parser_creators["lalr"] = create_lalr_parser
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
class PostLex(ABC):
|
|
3252
|
-
@abstractmethod
|
|
3253
|
-
def process(self, stream: Iterator[Token]) -> Iterator[Token]:
|
|
3254
|
-
return stream
|
|
3255
|
-
|
|
3256
|
-
always_accept: Iterable[str] = ()
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
class LarkOptions(Serialize):
|
|
3260
|
-
#--
|
|
3261
|
-
|
|
3262
|
-
start: List[str]
|
|
3263
|
-
debug: bool
|
|
3264
|
-
strict: bool
|
|
3265
|
-
transformer: "Optional[Transformer]"
|
|
3266
|
-
propagate_positions: Union[bool, str]
|
|
3267
|
-
maybe_placeholders: bool
|
|
3268
|
-
cache: Union[bool, str]
|
|
3269
|
-
regex: bool
|
|
3270
|
-
g_regex_flags: int
|
|
3271
|
-
keep_all_tokens: bool
|
|
3272
|
-
tree_class: Optional[Callable[[str, List], Any]]
|
|
3273
|
-
parser: _ParserArgType
|
|
3274
|
-
lexer: _LexerArgType
|
|
3275
|
-
ambiguity: 'Literal["auto", "resolve", "explicit", "forest"]'
|
|
3276
|
-
postlex: Optional[PostLex]
|
|
3277
|
-
priority: 'Optional[Literal["auto", "normal", "invert"]]'
|
|
3278
|
-
lexer_callbacks: Dict[str, Callable[[Token], Token]]
|
|
3279
|
-
use_bytes: bool
|
|
3280
|
-
ordered_sets: bool
|
|
3281
|
-
edit_terminals: Optional[Callable[[TerminalDef], TerminalDef]]
|
|
3282
|
-
import_paths: "List[Union[str, Callable[[Union[None, str, PackageResource], str], Tuple[str, str]]]]"
|
|
3283
|
-
source_path: Optional[str]
|
|
3284
|
-
|
|
3285
|
-
OPTIONS_DOC = r"""
|
|
3286
|
-
**=== General Options ===**
|
|
3287
|
-
|
|
3288
|
-
start
|
|
3289
|
-
The start symbol. Either a string, or a list of strings for multiple possible starts (Default: "start")
|
|
3290
|
-
debug
|
|
3291
|
-
Display debug information and extra warnings. Use only when debugging (Default: ``False``)
|
|
3292
|
-
When used with Earley, it generates a forest graph as "sppf.png", if 'dot' is installed.
|
|
3293
|
-
strict
|
|
3294
|
-
Throw an exception on any potential ambiguity, including shift/reduce conflicts, and regex collisions.
|
|
3295
|
-
transformer
|
|
3296
|
-
Applies the transformer to every parse tree (equivalent to applying it after the parse, but faster)
|
|
3297
|
-
propagate_positions
|
|
3298
|
-
Propagates positional attributes into the 'meta' attribute of all tree branches.
|
|
3299
|
-
Sets attributes: (line, column, end_line, end_column, start_pos, end_pos,
|
|
3300
|
-
container_line, container_column, container_end_line, container_end_column)
|
|
3301
|
-
Accepts ``False``, ``True``, or a callable, which will filter which nodes to ignore when propagating.
|
|
3302
|
-
maybe_placeholders
|
|
3303
|
-
When ``True``, the ``[]`` operator returns ``None`` when not matched.
|
|
3304
|
-
When ``False``, ``[]`` behaves like the ``?`` operator, and returns no value at all.
|
|
3305
|
-
(default= ``True``)
|
|
3306
|
-
cache
|
|
3307
|
-
Cache the results of the Lark grammar analysis, for x2 to x3 faster loading. LALR only for now.
|
|
3308
|
-
|
|
3309
|
-
- When ``False``, does nothing (default)
|
|
3310
|
-
- When ``True``, caches to a temporary file in the local directory
|
|
3311
|
-
- When given a string, caches to the path pointed by the string
|
|
3312
|
-
regex
|
|
3313
|
-
When True, uses the ``regex`` module instead of the stdlib ``re``.
|
|
3314
|
-
g_regex_flags
|
|
3315
|
-
Flags that are applied to all terminals (both regex and strings)
|
|
3316
|
-
keep_all_tokens
|
|
3317
|
-
Prevent the tree builder from automagically removing "punctuation" tokens (Default: ``False``)
|
|
3318
|
-
tree_class
|
|
3319
|
-
Lark will produce trees comprised of instances of this class instead of the default ``lark.Tree``.
|
|
3320
|
-
|
|
3321
|
-
**=== Algorithm Options ===**
|
|
3322
|
-
|
|
3323
|
-
parser
|
|
3324
|
-
Decides which parser engine to use. Accepts "earley" or "lalr". (Default: "earley").
|
|
3325
|
-
(there is also a "cyk" option for legacy)
|
|
3326
|
-
lexer
|
|
3327
|
-
Decides whether or not to use a lexer stage
|
|
3328
|
-
|
|
3329
|
-
- "auto" (default): Choose for me based on the parser
|
|
3330
|
-
- "basic": Use a basic lexer
|
|
3331
|
-
- "contextual": Stronger lexer (only works with parser="lalr")
|
|
3332
|
-
- "dynamic": Flexible and powerful (only with parser="earley")
|
|
3333
|
-
- "dynamic_complete": Same as dynamic, but tries *every* variation of tokenizing possible.
|
|
3334
|
-
ambiguity
|
|
3335
|
-
Decides how to handle ambiguity in the parse. Only relevant if parser="earley"
|
|
3336
|
-
|
|
3337
|
-
- "resolve": The parser will automatically choose the simplest derivation
|
|
3338
|
-
(it chooses consistently: greedy for tokens, non-greedy for rules)
|
|
3339
|
-
- "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest).
|
|
3340
|
-
- "forest": The parser will return the root of the shared packed parse forest.
|
|
3341
|
-
|
|
3342
|
-
**=== Misc. / Domain Specific Options ===**
|
|
3343
|
-
|
|
3344
|
-
postlex
|
|
3345
|
-
Lexer post-processing (Default: ``None``) Only works with the basic and contextual lexers.
|
|
3346
|
-
priority
|
|
3347
|
-
How priorities should be evaluated - "auto", ``None``, "normal", "invert" (Default: "auto")
|
|
3348
|
-
lexer_callbacks
|
|
3349
|
-
Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution.
|
|
3350
|
-
use_bytes
|
|
3351
|
-
Accept an input of type ``bytes`` instead of ``str``.
|
|
3352
|
-
ordered_sets
|
|
3353
|
-
Should Earley use ordered-sets to achieve stable output (~10% slower than regular sets. Default: True)
|
|
3354
|
-
edit_terminals
|
|
3355
|
-
A callback for editing the terminals before parse.
|
|
3356
|
-
import_paths
|
|
3357
|
-
A List of either paths or loader functions to specify from where grammars are imported
|
|
3358
|
-
source_path
|
|
3359
|
-
Override the source of from where the grammar was loaded. Useful for relative imports and unconventional grammar loading
|
|
3360
|
-
**=== End of Options ===**
|
|
3361
|
-
"""
|
|
3362
|
-
if __doc__:
|
|
3363
|
-
__doc__ += OPTIONS_DOC
|
|
3364
|
-
|
|
3365
|
-
##
|
|
3366
|
-
|
|
3367
|
-
##
|
|
3368
|
-
|
|
3369
|
-
##
|
|
3370
|
-
|
|
3371
|
-
##
|
|
3372
|
-
|
|
3373
|
-
##
|
|
3374
|
-
|
|
3375
|
-
##
|
|
3376
|
-
|
|
3377
|
-
_defaults: Dict[str, Any] = {
|
|
3378
|
-
"debug": False,
|
|
3379
|
-
"strict": False,
|
|
3380
|
-
"keep_all_tokens": False,
|
|
3381
|
-
"tree_class": None,
|
|
3382
|
-
"cache": False,
|
|
3383
|
-
"postlex": None,
|
|
3384
|
-
"parser": "earley",
|
|
3385
|
-
"lexer": "auto",
|
|
3386
|
-
"transformer": None,
|
|
3387
|
-
"start": "start",
|
|
3388
|
-
"priority": "auto",
|
|
3389
|
-
"ambiguity": "auto",
|
|
3390
|
-
"regex": False,
|
|
3391
|
-
"propagate_positions": False,
|
|
3392
|
-
"lexer_callbacks": {},
|
|
3393
|
-
"maybe_placeholders": True,
|
|
3394
|
-
"edit_terminals": None,
|
|
3395
|
-
"g_regex_flags": 0,
|
|
3396
|
-
"use_bytes": False,
|
|
3397
|
-
"ordered_sets": True,
|
|
3398
|
-
"import_paths": [],
|
|
3399
|
-
"source_path": None,
|
|
3400
|
-
"_plugins": {},
|
|
3401
|
-
}
|
|
3402
|
-
|
|
3403
|
-
def __init__(self, options_dict: Dict[str, Any]) -> None:
|
|
3404
|
-
o = dict(options_dict)
|
|
3405
|
-
|
|
3406
|
-
options = {}
|
|
3407
|
-
for name, default in self._defaults.items():
|
|
3408
|
-
if name in o:
|
|
3409
|
-
value = o.pop(name)
|
|
3410
|
-
if isinstance(default, bool) and name not in (
|
|
3411
|
-
"cache",
|
|
3412
|
-
"use_bytes",
|
|
3413
|
-
"propagate_positions",
|
|
3414
|
-
):
|
|
3415
|
-
value = bool(value)
|
|
3416
|
-
else:
|
|
3417
|
-
value = default
|
|
3418
|
-
|
|
3419
|
-
options[name] = value
|
|
3420
|
-
|
|
3421
|
-
if isinstance(options["start"], str):
|
|
3422
|
-
options["start"] = [options["start"]]
|
|
3423
|
-
|
|
3424
|
-
self.__dict__["options"] = options
|
|
3425
|
-
|
|
3426
|
-
assert_config(self.parser, ("earley", "lalr", "cyk", None))
|
|
3427
|
-
|
|
3428
|
-
if self.parser == "earley" and self.transformer:
|
|
3429
|
-
raise ConfigurationError(
|
|
3430
|
-
"Cannot specify an embedded transformer when using the Earley algorithm. "
|
|
3431
|
-
"Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. LALR)"
|
|
3432
|
-
)
|
|
3433
|
-
|
|
3434
|
-
if o:
|
|
3435
|
-
raise ConfigurationError("Unknown options: %s" % o.keys())
|
|
3436
|
-
|
|
3437
|
-
def __getattr__(self, name: str) -> Any:
|
|
3438
|
-
try:
|
|
3439
|
-
return self.__dict__["options"][name]
|
|
3440
|
-
except KeyError as e:
|
|
3441
|
-
raise AttributeError(e)
|
|
3442
|
-
|
|
3443
|
-
def __setattr__(self, name: str, value: str) -> None:
|
|
3444
|
-
assert_config(
|
|
3445
|
-
name, self.options.keys(), "%r isn't a valid option. Expected one of: %s"
|
|
3446
|
-
)
|
|
3447
|
-
self.options[name] = value
|
|
3448
|
-
|
|
3449
|
-
def serialize(self, memo=None) -> Dict[str, Any]:
|
|
3450
|
-
return self.options
|
|
3451
|
-
|
|
3452
|
-
@classmethod
|
|
3453
|
-
def deserialize(
|
|
3454
|
-
cls, data: Dict[str, Any], memo: Dict[int, Union[TerminalDef, Rule]]
|
|
3455
|
-
) -> "LarkOptions":
|
|
3456
|
-
return cls(data)
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
##
|
|
3460
|
-
|
|
3461
|
-
##
|
|
3462
|
-
|
|
3463
|
-
_LOAD_ALLOWED_OPTIONS = {
|
|
3464
|
-
"postlex",
|
|
3465
|
-
"transformer",
|
|
3466
|
-
"lexer_callbacks",
|
|
3467
|
-
"use_bytes",
|
|
3468
|
-
"debug",
|
|
3469
|
-
"g_regex_flags",
|
|
3470
|
-
"regex",
|
|
3471
|
-
"propagate_positions",
|
|
3472
|
-
"tree_class",
|
|
3473
|
-
"_plugins",
|
|
3474
|
-
}
|
|
3475
|
-
|
|
3476
|
-
_VALID_PRIORITY_OPTIONS = ("auto", "normal", "invert", None)
|
|
3477
|
-
_VALID_AMBIGUITY_OPTIONS = ("auto", "resolve", "explicit", "forest")
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
_T = TypeVar("_T", bound="Lark")
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
class Lark(Serialize):
|
|
3484
|
-
#--
|
|
3485
|
-
|
|
3486
|
-
source_path: str
|
|
3487
|
-
source_grammar: str
|
|
3488
|
-
grammar: "Grammar"
|
|
3489
|
-
options: LarkOptions
|
|
3490
|
-
lexer: Lexer
|
|
3491
|
-
parser: "ParsingFrontend"
|
|
3492
|
-
terminals: Collection[TerminalDef]
|
|
3493
|
-
|
|
3494
|
-
def __init__(self, grammar: "Union[Grammar, str, IO[str]]", **options) -> None:
|
|
3495
|
-
self.options = LarkOptions(options)
|
|
3496
|
-
re_module: types.ModuleType
|
|
3497
|
-
|
|
3498
|
-
##
|
|
3499
|
-
|
|
3500
|
-
use_regex = self.options.regex
|
|
3501
|
-
if use_regex:
|
|
3502
|
-
if _has_regex:
|
|
3503
|
-
re_module = regex
|
|
3504
|
-
else:
|
|
3505
|
-
raise ImportError(
|
|
3506
|
-
"`regex` module must be installed if calling `Lark(regex=True)`."
|
|
3507
|
-
)
|
|
3508
|
-
else:
|
|
3509
|
-
re_module = re
|
|
3510
|
-
|
|
3511
|
-
##
|
|
3512
|
-
|
|
3513
|
-
if self.options.source_path is None:
|
|
3514
|
-
try:
|
|
3515
|
-
self.source_path = grammar.name ##
|
|
3516
|
-
|
|
3517
|
-
except AttributeError:
|
|
3518
|
-
self.source_path = "<string>"
|
|
3519
|
-
else:
|
|
3520
|
-
self.source_path = self.options.source_path
|
|
3521
|
-
|
|
3522
|
-
##
|
|
3523
|
-
|
|
3524
|
-
try:
|
|
3525
|
-
read = grammar.read ##
|
|
3526
|
-
|
|
3527
|
-
except AttributeError:
|
|
3528
|
-
pass
|
|
3529
|
-
else:
|
|
3530
|
-
grammar = read()
|
|
3531
|
-
|
|
3532
|
-
cache_fn = None
|
|
3533
|
-
cache_sha256 = None
|
|
3534
|
-
if isinstance(grammar, str):
|
|
3535
|
-
self.source_grammar = grammar
|
|
3536
|
-
if self.options.use_bytes:
|
|
3537
|
-
if not isascii(grammar):
|
|
3538
|
-
raise ConfigurationError(
|
|
3539
|
-
"Grammar must be ascii only, when use_bytes=True"
|
|
3540
|
-
)
|
|
3541
|
-
|
|
3542
|
-
if self.options.cache:
|
|
3543
|
-
if self.options.parser != "lalr":
|
|
3544
|
-
raise ConfigurationError(
|
|
3545
|
-
"cache only works with parser='lalr' for now"
|
|
3546
|
-
)
|
|
3547
|
-
|
|
3548
|
-
unhashable = (
|
|
3549
|
-
"transformer",
|
|
3550
|
-
"postlex",
|
|
3551
|
-
"lexer_callbacks",
|
|
3552
|
-
"edit_terminals",
|
|
3553
|
-
"_plugins",
|
|
3554
|
-
)
|
|
3555
|
-
options_str = "".join(
|
|
3556
|
-
k + str(v) for k, v in options.items() if k not in unhashable
|
|
3557
|
-
)
|
|
3558
|
-
from . import __version__
|
|
3559
|
-
|
|
3560
|
-
s = grammar + options_str + __version__ + str(sys.version_info[:2])
|
|
3561
|
-
cache_sha256 = sha256_digest(s)
|
|
3562
|
-
|
|
3563
|
-
if isinstance(self.options.cache, str):
|
|
3564
|
-
cache_fn = self.options.cache
|
|
3565
|
-
else:
|
|
3566
|
-
if self.options.cache is not True:
|
|
3567
|
-
raise ConfigurationError("cache argument must be bool or str")
|
|
3568
|
-
|
|
3569
|
-
try:
|
|
3570
|
-
username = getpass.getuser()
|
|
3571
|
-
except Exception:
|
|
3572
|
-
##
|
|
3573
|
-
|
|
3574
|
-
##
|
|
3575
|
-
|
|
3576
|
-
##
|
|
3577
|
-
|
|
3578
|
-
username = "unknown"
|
|
3579
|
-
|
|
3580
|
-
cache_fn = (
|
|
3581
|
-
tempfile.gettempdir()
|
|
3582
|
-
+ "/.lark_cache_%s_%s_%s_%s.tmp"
|
|
3583
|
-
% (username, cache_sha256, *sys.version_info[:2])
|
|
3584
|
-
)
|
|
3585
|
-
|
|
3586
|
-
old_options = self.options
|
|
3587
|
-
try:
|
|
3588
|
-
with FS.open(cache_fn, "rb") as f:
|
|
3589
|
-
logger.debug("Loading grammar from cache: %s", cache_fn)
|
|
3590
|
-
##
|
|
3591
|
-
|
|
3592
|
-
for name in set(options) - _LOAD_ALLOWED_OPTIONS:
|
|
3593
|
-
del options[name]
|
|
3594
|
-
file_sha256 = f.readline().rstrip(b"\n")
|
|
3595
|
-
cached_used_files = pickle.load(f)
|
|
3596
|
-
if file_sha256 == cache_sha256.encode(
|
|
3597
|
-
"utf8"
|
|
3598
|
-
) and verify_used_files(cached_used_files):
|
|
3599
|
-
cached_parser_data = pickle.load(f)
|
|
3600
|
-
self._load(cached_parser_data, **options)
|
|
3601
|
-
return
|
|
3602
|
-
except FileNotFoundError:
|
|
3603
|
-
##
|
|
3604
|
-
|
|
3605
|
-
pass
|
|
3606
|
-
except (
|
|
3607
|
-
Exception
|
|
3608
|
-
): ##
|
|
3609
|
-
|
|
3610
|
-
logger.exception(
|
|
3611
|
-
"Failed to load Lark from cache: %r. We will try to carry on.",
|
|
3612
|
-
cache_fn,
|
|
3613
|
-
)
|
|
3614
|
-
|
|
3615
|
-
##
|
|
3616
|
-
|
|
3617
|
-
##
|
|
3618
|
-
|
|
3619
|
-
self.options = old_options
|
|
3620
|
-
|
|
3621
|
-
##
|
|
3622
|
-
|
|
3623
|
-
self.grammar, used_files = load_grammar(
|
|
3624
|
-
grammar,
|
|
3625
|
-
self.source_path,
|
|
3626
|
-
self.options.import_paths,
|
|
3627
|
-
self.options.keep_all_tokens,
|
|
3628
|
-
)
|
|
3629
|
-
else:
|
|
3630
|
-
assert isinstance(grammar, Grammar)
|
|
3631
|
-
self.grammar = grammar
|
|
3632
|
-
|
|
3633
|
-
if self.options.lexer == "auto":
|
|
3634
|
-
if self.options.parser == "lalr":
|
|
3635
|
-
self.options.lexer = "contextual"
|
|
3636
|
-
elif self.options.parser == "earley":
|
|
3637
|
-
if self.options.postlex is not None:
|
|
3638
|
-
logger.info(
|
|
3639
|
-
"postlex can't be used with the dynamic lexer, so we use 'basic' instead. "
|
|
3640
|
-
"Consider using lalr with contextual instead of earley"
|
|
3641
|
-
)
|
|
3642
|
-
self.options.lexer = "basic"
|
|
3643
|
-
else:
|
|
3644
|
-
self.options.lexer = "dynamic"
|
|
3645
|
-
elif self.options.parser == "cyk":
|
|
3646
|
-
self.options.lexer = "basic"
|
|
3647
|
-
else:
|
|
3648
|
-
assert False, self.options.parser
|
|
3649
|
-
lexer = self.options.lexer
|
|
3650
|
-
if isinstance(lexer, type):
|
|
3651
|
-
assert issubclass(
|
|
3652
|
-
lexer, Lexer
|
|
3653
|
-
) ##
|
|
3654
|
-
|
|
3655
|
-
else:
|
|
3656
|
-
assert_config(lexer, ("basic", "contextual", "dynamic", "dynamic_complete"))
|
|
3657
|
-
if self.options.postlex is not None and "dynamic" in lexer:
|
|
3658
|
-
raise ConfigurationError(
|
|
3659
|
-
"Can't use postlex with a dynamic lexer. Use basic or contextual instead"
|
|
3660
|
-
)
|
|
3661
|
-
|
|
3662
|
-
if self.options.ambiguity == "auto":
|
|
3663
|
-
if self.options.parser == "earley":
|
|
3664
|
-
self.options.ambiguity = "resolve"
|
|
3665
|
-
else:
|
|
3666
|
-
assert_config(
|
|
3667
|
-
self.options.parser,
|
|
3668
|
-
("earley", "cyk"),
|
|
3669
|
-
"%r doesn't support disambiguation. Use one of these parsers instead: %s",
|
|
3670
|
-
)
|
|
3671
|
-
|
|
3672
|
-
if self.options.priority == "auto":
|
|
3673
|
-
self.options.priority = "normal"
|
|
3674
|
-
|
|
3675
|
-
if self.options.priority not in _VALID_PRIORITY_OPTIONS:
|
|
3676
|
-
raise ConfigurationError(
|
|
3677
|
-
"invalid priority option: %r. Must be one of %r"
|
|
3678
|
-
% (self.options.priority, _VALID_PRIORITY_OPTIONS)
|
|
3679
|
-
)
|
|
3680
|
-
if self.options.ambiguity not in _VALID_AMBIGUITY_OPTIONS:
|
|
3681
|
-
raise ConfigurationError(
|
|
3682
|
-
"invalid ambiguity option: %r. Must be one of %r"
|
|
3683
|
-
% (self.options.ambiguity, _VALID_AMBIGUITY_OPTIONS)
|
|
3684
|
-
)
|
|
3685
|
-
|
|
3686
|
-
if self.options.parser is None:
|
|
3687
|
-
terminals_to_keep = "*"
|
|
3688
|
-
elif self.options.postlex is not None:
|
|
3689
|
-
terminals_to_keep = set(self.options.postlex.always_accept)
|
|
3690
|
-
else:
|
|
3691
|
-
terminals_to_keep = set()
|
|
3692
|
-
|
|
3693
|
-
##
|
|
3694
|
-
|
|
3695
|
-
self.terminals, self.rules, self.ignore_tokens = self.grammar.compile(
|
|
3696
|
-
self.options.start, terminals_to_keep
|
|
3697
|
-
)
|
|
3698
|
-
|
|
3699
|
-
if self.options.edit_terminals:
|
|
3700
|
-
for t in self.terminals:
|
|
3701
|
-
self.options.edit_terminals(t)
|
|
3702
|
-
|
|
3703
|
-
self._terminals_dict = {t.name: t for t in self.terminals}
|
|
3704
|
-
|
|
3705
|
-
##
|
|
3706
|
-
|
|
3707
|
-
if self.options.priority == "invert":
|
|
3708
|
-
for rule in self.rules:
|
|
3709
|
-
if rule.options.priority is not None:
|
|
3710
|
-
rule.options.priority = -rule.options.priority
|
|
3711
|
-
for term in self.terminals:
|
|
3712
|
-
term.priority = -term.priority
|
|
3713
|
-
##
|
|
3714
|
-
|
|
3715
|
-
##
|
|
3716
|
-
|
|
3717
|
-
##
|
|
3718
|
-
|
|
3719
|
-
elif self.options.priority is None:
|
|
3720
|
-
for rule in self.rules:
|
|
3721
|
-
if rule.options.priority is not None:
|
|
3722
|
-
rule.options.priority = None
|
|
3723
|
-
for term in self.terminals:
|
|
3724
|
-
term.priority = 0
|
|
3725
|
-
|
|
3726
|
-
##
|
|
3727
|
-
|
|
3728
|
-
self.lexer_conf = LexerConf(
|
|
3729
|
-
self.terminals,
|
|
3730
|
-
re_module,
|
|
3731
|
-
self.ignore_tokens,
|
|
3732
|
-
self.options.postlex,
|
|
3733
|
-
self.options.lexer_callbacks,
|
|
3734
|
-
self.options.g_regex_flags,
|
|
3735
|
-
use_bytes=self.options.use_bytes,
|
|
3736
|
-
strict=self.options.strict,
|
|
3737
|
-
)
|
|
3738
|
-
|
|
3739
|
-
if self.options.parser:
|
|
3740
|
-
self.parser = self._build_parser()
|
|
3741
|
-
elif lexer:
|
|
3742
|
-
self.lexer = self._build_lexer()
|
|
3743
|
-
|
|
3744
|
-
if cache_fn:
|
|
3745
|
-
logger.debug("Saving grammar to cache: %s", cache_fn)
|
|
3746
|
-
try:
|
|
3747
|
-
with FS.open(cache_fn, "wb") as f:
|
|
3748
|
-
assert cache_sha256 is not None
|
|
3749
|
-
f.write(cache_sha256.encode("utf8") + b"\n")
|
|
3750
|
-
pickle.dump(used_files, f)
|
|
3751
|
-
self.save(f, _LOAD_ALLOWED_OPTIONS)
|
|
3752
|
-
except IOError as e:
|
|
3753
|
-
logger.exception("Failed to save Lark to cache: %r.", cache_fn, e)
|
|
3754
|
-
|
|
3755
|
-
if __doc__:
|
|
3756
|
-
__doc__ += "\n\n" + LarkOptions.OPTIONS_DOC
|
|
3757
|
-
|
|
3758
|
-
__serialize_fields__ = "parser", "rules", "options"
|
|
3759
|
-
|
|
3760
|
-
def _build_lexer(self, dont_ignore: bool = False) -> BasicLexer:
|
|
3761
|
-
lexer_conf = self.lexer_conf
|
|
3762
|
-
if dont_ignore:
|
|
3763
|
-
from copy import copy
|
|
3764
|
-
|
|
3765
|
-
lexer_conf = copy(lexer_conf)
|
|
3766
|
-
lexer_conf.ignore = ()
|
|
3767
|
-
return BasicLexer(lexer_conf)
|
|
3768
|
-
|
|
3769
|
-
def _prepare_callbacks(self) -> None:
|
|
3770
|
-
self._callbacks = {}
|
|
3771
|
-
##
|
|
3772
|
-
|
|
3773
|
-
if self.options.ambiguity != "forest":
|
|
3774
|
-
self._parse_tree_builder = ParseTreeBuilder(
|
|
3775
|
-
self.rules,
|
|
3776
|
-
self.options.tree_class or Tree,
|
|
3777
|
-
self.options.propagate_positions,
|
|
3778
|
-
self.options.parser != "lalr" and self.options.ambiguity == "explicit",
|
|
3779
|
-
self.options.maybe_placeholders,
|
|
3780
|
-
)
|
|
3781
|
-
self._callbacks = self._parse_tree_builder.create_callback(
|
|
3782
|
-
self.options.transformer
|
|
3783
|
-
)
|
|
3784
|
-
self._callbacks.update(
|
|
3785
|
-
_get_lexer_callbacks(self.options.transformer, self.terminals)
|
|
3786
|
-
)
|
|
3787
|
-
|
|
3788
|
-
def _build_parser(self) -> "ParsingFrontend":
|
|
3789
|
-
self._prepare_callbacks()
|
|
3790
|
-
_validate_frontend_args(self.options.parser, self.options.lexer)
|
|
3791
|
-
parser_conf = ParserConf(self.rules, self._callbacks, self.options.start)
|
|
3792
|
-
return _construct_parsing_frontend(
|
|
3793
|
-
self.options.parser,
|
|
3794
|
-
self.options.lexer,
|
|
3795
|
-
self.lexer_conf,
|
|
3796
|
-
parser_conf,
|
|
3797
|
-
options=self.options,
|
|
3798
|
-
)
|
|
3799
|
-
|
|
3800
|
-
def save(self, f, exclude_options: Collection[str] = ()) -> None:
|
|
3801
|
-
#--
|
|
3802
|
-
if self.options.parser != "lalr":
|
|
3803
|
-
raise NotImplementedError(
|
|
3804
|
-
"Lark.save() is only implemented for the LALR(1) parser."
|
|
3805
|
-
)
|
|
3806
|
-
data, m = self.memo_serialize([TerminalDef, Rule])
|
|
3807
|
-
if exclude_options:
|
|
3808
|
-
data["options"] = {
|
|
3809
|
-
n: v for n, v in data["options"].items() if n not in exclude_options
|
|
3810
|
-
}
|
|
3811
|
-
pickle.dump({"data": data, "memo": m}, f, protocol=pickle.HIGHEST_PROTOCOL)
|
|
3812
|
-
|
|
3813
|
-
@classmethod
|
|
3814
|
-
def load(cls: Type[_T], f) -> _T:
|
|
3815
|
-
#--
|
|
3816
|
-
inst = cls.__new__(cls)
|
|
3817
|
-
return inst._load(f)
|
|
3818
|
-
|
|
3819
|
-
def _deserialize_lexer_conf(
|
|
3820
|
-
self,
|
|
3821
|
-
data: Dict[str, Any],
|
|
3822
|
-
memo: Dict[int, Union[TerminalDef, Rule]],
|
|
3823
|
-
options: LarkOptions,
|
|
3824
|
-
) -> LexerConf:
|
|
3825
|
-
lexer_conf = LexerConf.deserialize(data["lexer_conf"], memo)
|
|
3826
|
-
lexer_conf.callbacks = options.lexer_callbacks or {}
|
|
3827
|
-
lexer_conf.re_module = regex if options.regex else re
|
|
3828
|
-
lexer_conf.use_bytes = options.use_bytes
|
|
3829
|
-
lexer_conf.g_regex_flags = options.g_regex_flags
|
|
3830
|
-
lexer_conf.skip_validation = True
|
|
3831
|
-
lexer_conf.postlex = options.postlex
|
|
3832
|
-
return lexer_conf
|
|
3833
|
-
|
|
3834
|
-
def _load(self: _T, f: Any, **kwargs) -> _T:
|
|
3835
|
-
if isinstance(f, dict):
|
|
3836
|
-
d = f
|
|
3837
|
-
else:
|
|
3838
|
-
d = pickle.load(f)
|
|
3839
|
-
memo_json = d["memo"]
|
|
3840
|
-
data = d["data"]
|
|
3841
|
-
|
|
3842
|
-
assert memo_json
|
|
3843
|
-
memo = SerializeMemoizer.deserialize(
|
|
3844
|
-
memo_json, {"Rule": Rule, "TerminalDef": TerminalDef}, {}
|
|
3845
|
-
)
|
|
3846
|
-
options = dict(data["options"])
|
|
3847
|
-
if (set(kwargs) - _LOAD_ALLOWED_OPTIONS) & set(LarkOptions._defaults):
|
|
3848
|
-
raise ConfigurationError(
|
|
3849
|
-
"Some options are not allowed when loading a Parser: {}".format(
|
|
3850
|
-
set(kwargs) - _LOAD_ALLOWED_OPTIONS
|
|
3851
|
-
)
|
|
3852
|
-
)
|
|
3853
|
-
options.update(kwargs)
|
|
3854
|
-
self.options = LarkOptions.deserialize(options, memo)
|
|
3855
|
-
self.rules = [Rule.deserialize(r, memo) for r in data["rules"]]
|
|
3856
|
-
self.source_path = "<deserialized>"
|
|
3857
|
-
_validate_frontend_args(self.options.parser, self.options.lexer)
|
|
3858
|
-
self.lexer_conf = self._deserialize_lexer_conf(
|
|
3859
|
-
data["parser"], memo, self.options
|
|
3860
|
-
)
|
|
3861
|
-
self.terminals = self.lexer_conf.terminals
|
|
3862
|
-
self._prepare_callbacks()
|
|
3863
|
-
self._terminals_dict = {t.name: t for t in self.terminals}
|
|
3864
|
-
self.parser = _deserialize_parsing_frontend(
|
|
3865
|
-
data["parser"],
|
|
3866
|
-
memo,
|
|
3867
|
-
self.lexer_conf,
|
|
3868
|
-
self._callbacks,
|
|
3869
|
-
self.options, ##
|
|
3870
|
-
|
|
3871
|
-
)
|
|
3872
|
-
return self
|
|
3873
|
-
|
|
3874
|
-
@classmethod
|
|
3875
|
-
def _load_from_dict(cls, data, memo, **kwargs):
|
|
3876
|
-
inst = cls.__new__(cls)
|
|
3877
|
-
return inst._load({"data": data, "memo": memo}, **kwargs)
|
|
3878
|
-
|
|
3879
|
-
@classmethod
|
|
3880
|
-
def open(
|
|
3881
|
-
cls: Type[_T], grammar_filename: str, rel_to: Optional[str] = None, **options
|
|
3882
|
-
) -> _T:
|
|
3883
|
-
#--
|
|
3884
|
-
if rel_to:
|
|
3885
|
-
basepath = os.path.dirname(rel_to)
|
|
3886
|
-
grammar_filename = os.path.join(basepath, grammar_filename)
|
|
3887
|
-
with open(grammar_filename, encoding="utf8") as f:
|
|
3888
|
-
return cls(f, **options)
|
|
3889
|
-
|
|
3890
|
-
@classmethod
|
|
3891
|
-
def open_from_package(
|
|
3892
|
-
cls: Type[_T],
|
|
3893
|
-
package: str,
|
|
3894
|
-
grammar_path: str,
|
|
3895
|
-
search_paths: "Sequence[str]" = [""],
|
|
3896
|
-
**options
|
|
3897
|
-
) -> _T:
|
|
3898
|
-
#--
|
|
3899
|
-
package_loader = FromPackageLoader(package, search_paths)
|
|
3900
|
-
full_path, text = package_loader(None, grammar_path)
|
|
3901
|
-
options.setdefault("source_path", full_path)
|
|
3902
|
-
options.setdefault("import_paths", [])
|
|
3903
|
-
options["import_paths"].append(package_loader)
|
|
3904
|
-
return cls(text, **options)
|
|
3905
|
-
|
|
3906
|
-
def __repr__(self):
|
|
3907
|
-
return "Lark(open(%r), parser=%r, lexer=%r, ...)" % (
|
|
3908
|
-
self.source_path,
|
|
3909
|
-
self.options.parser,
|
|
3910
|
-
self.options.lexer,
|
|
3911
|
-
)
|
|
3912
|
-
|
|
3913
|
-
def lex(self, text: str, dont_ignore: bool = False) -> Iterator[Token]:
|
|
3914
|
-
#--
|
|
3915
|
-
lexer: Lexer
|
|
3916
|
-
if not hasattr(self, "lexer") or dont_ignore:
|
|
3917
|
-
lexer = self._build_lexer(dont_ignore)
|
|
3918
|
-
else:
|
|
3919
|
-
lexer = self.lexer
|
|
3920
|
-
lexer_thread = LexerThread.from_text(lexer, text)
|
|
3921
|
-
stream = lexer_thread.lex(None)
|
|
3922
|
-
if self.options.postlex:
|
|
3923
|
-
return self.options.postlex.process(stream)
|
|
3924
|
-
return stream
|
|
3925
|
-
|
|
3926
|
-
def get_terminal(self, name: str) -> TerminalDef:
|
|
3927
|
-
#--
|
|
3928
|
-
return self._terminals_dict[name]
|
|
3929
|
-
|
|
3930
|
-
def parse_interactive(
|
|
3931
|
-
self, text: Optional[str] = None, start: Optional[str] = None
|
|
3932
|
-
) -> "InteractiveParser":
|
|
3933
|
-
#--
|
|
3934
|
-
return self.parser.parse_interactive(text, start=start)
|
|
3935
|
-
|
|
3936
|
-
def parse(
|
|
3937
|
-
self,
|
|
3938
|
-
text: str,
|
|
3939
|
-
start: Optional[str] = None,
|
|
3940
|
-
on_error: "Optional[Callable[[UnexpectedInput], bool]]" = None,
|
|
3941
|
-
) -> "ParseTree":
|
|
3942
|
-
#--
|
|
3943
|
-
return self.parser.parse(text, start=start, on_error=on_error)
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
class DedentError(LarkError):
|
|
3950
|
-
pass
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
class Indenter(PostLex, ABC):
|
|
3954
|
-
paren_level: int
|
|
3955
|
-
indent_level: List[int]
|
|
3956
|
-
|
|
3957
|
-
def __init__(self) -> None:
|
|
3958
|
-
self.paren_level = 0
|
|
3959
|
-
self.indent_level = [0]
|
|
3960
|
-
assert self.tab_len > 0
|
|
3961
|
-
|
|
3962
|
-
def handle_NL(self, token: Token) -> Iterator[Token]:
|
|
3963
|
-
if self.paren_level > 0:
|
|
3964
|
-
return
|
|
3965
|
-
|
|
3966
|
-
yield token
|
|
3967
|
-
|
|
3968
|
-
indent_str = token.rsplit("\n", 1)[1] ##
|
|
3969
|
-
|
|
3970
|
-
indent = indent_str.count(" ") + indent_str.count("\t") * self.tab_len
|
|
3971
|
-
|
|
3972
|
-
if indent > self.indent_level[-1]:
|
|
3973
|
-
self.indent_level.append(indent)
|
|
3974
|
-
yield Token.new_borrow_pos(self.INDENT_type, indent_str, token)
|
|
3975
|
-
else:
|
|
3976
|
-
while indent < self.indent_level[-1]:
|
|
3977
|
-
self.indent_level.pop()
|
|
3978
|
-
yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token)
|
|
3979
|
-
|
|
3980
|
-
if indent != self.indent_level[-1]:
|
|
3981
|
-
raise DedentError(
|
|
3982
|
-
"Unexpected dedent to column %s. Expected dedent to %s"
|
|
3983
|
-
% (indent, self.indent_level[-1])
|
|
3984
|
-
)
|
|
3985
|
-
|
|
3986
|
-
def _process(self, stream):
|
|
3987
|
-
for token in stream:
|
|
3988
|
-
if token.type == self.NL_type:
|
|
3989
|
-
yield from self.handle_NL(token)
|
|
3990
|
-
else:
|
|
3991
|
-
yield token
|
|
3992
|
-
|
|
3993
|
-
if token.type in self.OPEN_PAREN_types:
|
|
3994
|
-
self.paren_level += 1
|
|
3995
|
-
elif token.type in self.CLOSE_PAREN_types:
|
|
3996
|
-
self.paren_level -= 1
|
|
3997
|
-
assert self.paren_level >= 0
|
|
3998
|
-
|
|
3999
|
-
while len(self.indent_level) > 1:
|
|
4000
|
-
self.indent_level.pop()
|
|
4001
|
-
yield Token(self.DEDENT_type, "")
|
|
4002
|
-
|
|
4003
|
-
assert self.indent_level == [0], self.indent_level
|
|
4004
|
-
|
|
4005
|
-
def process(self, stream):
|
|
4006
|
-
self.paren_level = 0
|
|
4007
|
-
self.indent_level = [0]
|
|
4008
|
-
return self._process(stream)
|
|
4009
|
-
|
|
4010
|
-
##
|
|
4011
|
-
|
|
4012
|
-
@property
|
|
4013
|
-
def always_accept(self):
|
|
4014
|
-
return (self.NL_type,)
|
|
4015
|
-
|
|
4016
|
-
@property
|
|
4017
|
-
@abstractmethod
|
|
4018
|
-
def NL_type(self) -> str:
|
|
4019
|
-
raise NotImplementedError()
|
|
4020
|
-
|
|
4021
|
-
@property
|
|
4022
|
-
@abstractmethod
|
|
4023
|
-
def OPEN_PAREN_types(self) -> List[str]:
|
|
4024
|
-
raise NotImplementedError()
|
|
4025
|
-
|
|
4026
|
-
@property
|
|
4027
|
-
@abstractmethod
|
|
4028
|
-
def CLOSE_PAREN_types(self) -> List[str]:
|
|
4029
|
-
raise NotImplementedError()
|
|
4030
|
-
|
|
4031
|
-
@property
|
|
4032
|
-
@abstractmethod
|
|
4033
|
-
def INDENT_type(self) -> str:
|
|
4034
|
-
raise NotImplementedError()
|
|
4035
|
-
|
|
4036
|
-
@property
|
|
4037
|
-
@abstractmethod
|
|
4038
|
-
def DEDENT_type(self) -> str:
|
|
4039
|
-
raise NotImplementedError()
|
|
4040
|
-
|
|
4041
|
-
@property
|
|
4042
|
-
@abstractmethod
|
|
4043
|
-
def tab_len(self) -> int:
|
|
4044
|
-
raise NotImplementedError()
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
class PythonIndenter(Indenter):
|
|
4048
|
-
NL_type = "_NEWLINE"
|
|
4049
|
-
OPEN_PAREN_types = ["LPAR", "LSQB", "LBRACE"]
|
|
4050
|
-
CLOSE_PAREN_types = ["RPAR", "RSQB", "RBRACE"]
|
|
4051
|
-
INDENT_type = "_INDENT"
|
|
4052
|
-
DEDENT_type = "_DEDENT"
|
|
4053
|
-
tab_len = 8
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
import pickle, zlib, base64
|
|
4058
|
-
DATA = (
|
|
4059
|
-
b'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+1Hs7kexux/FbkN/AR0JugbUCHoDdANotE0DgdO8eCPoVtBtoDtAd4HqQK+B7gf1gd7Eobl4aA+AXgU9DJqK3RRzN0+AngY9gw+W8INvgZ4FjQe9gN2UcjdX4sUyvDiQbPRjjKQfYxaGHgVdB7oe9CToKdDNoNtBd4LuBt0DehF0H+hB0EMgH+gA0IWgCtBIUDWoHbQdtAE0BTQbVAZaDToVNMymhsgGx2UXRS9zesnxRrNEeYKzoDJhh5stCDdbEG62INxsQbjZgnCzBeFmC8LNFoSbLQg3WxButphws1GO9nPO0Tb8S8ulP3IVuYr0v0/qpk0fUTfV9dJz9CufjJX8F9ZNT7GzuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByzuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByzuByyuByyuByyuByyuByzuByyuByyuByyuByzuByyuByyuByyuByyuByzuByyuByzuByzuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuByyuJzJ4jbZYxY+jFn4MGbhw5iFD2MWPoxZ+DBm4cOYhQ9jFj6MWfgwZuHDmIUPuaAPYxY+jFn4MGbhw5iFD2MWPoxZ+DBm4cOYhQ9jFj6MWfgwZuHDmIUPYxY+jFn4MGbhw5iFD2MWPoxZ+DBm4cOYhQ9jFj6MWfgwZuHDmIUPYxY+jFn4MGbhw5iFD2MWPoxZ+DBm4cOYhQ9jFj6MWfgwZuHDmIUPYxY+jFn4MGbhw5iFD2MWPoxZ+DBm4cOYhQ9jFj6MWfgwZuHDmIUPYxY+jFn4MGbhQz/GhzELH8YsfBiz8GHMwocxCx/GLHwYs/BhzMKHMQsfxix8GLPwYczChzELH8YsfBiz8HHMwscxCx/HLHwcs/BxzMLHMQsfxyx8GLPwYczChzELH8YsfBiz8GHMwocxCx/GLHwYs/BhzMKHMQsfxix8GLPwYczC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ZyiFM5TCGUrhDKVwhlI4QymcoRTOUApnKIUzlMIZSuEMpXCGUjhDKZyhFM5QCmcohTOUwhlK4QylcIZSOEMpnKEUzlAKZyiFM5TCGUvhDKVwhlI4QymcoRTOUApnKIUzlMIZSuEMpXCGUjhDKZyhFM5QCmcshTOWwhlL4YylcMZSOGMpnKEUzlAKZyiFM5TCGUrhDKVwhlI4QymcKZfCfzSqsYvg3TCk51r+uPJneeU8XOj+nZ/IEvrllfPIyvm3K38WfwEwPOjsD8KXLv8m4OXfMu79S/YbgP++sjx2iCx8frUq8m1q+aVwkbGdpdSLL9Q/f3V07CfdMxpwP+F4x/EjHMcObLz4VMbIOYtjxyteOEOxZ/RTRiv/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/div/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/div/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/div/div/div/div/div/div/dir/dir/dir/dir/dir/dir/dir/dir/9nLl/53K6BC8gSF4A0PwBobgDQzBGxiCNzAEb2AI3sAQvIEheAND8AaG4A0MwRsYgjcwBG9gCN7AELyBIXgDQ/AGhuANDMEbGII3MARvYAjewBC8gSF4A0PwBobgDQzBGxiCNzAEb2AI3sAQvIEheAND8AaG4A0MwRsYgjcwBG9gCN7AELyBIXgDQ/AGhuANDMEbGII3MARvYAjewBC8gSF4A0PwBobgDQzBGxiCNzAEb2AI3sAQvIEheAND8AaG4A0MwRsYgjcwBG9gCN7AELyBIXgDQ/AGhuANDMEbGII3MARvYAjewBC8gSF4A0PwBobgDQzBGxiCNzAEb2AI3sAQvIEheAND8AaG4A0MwRsYgjcwBG9gCN7AELyBIXgDQ/AGh+ANDsEbHII3OARvcAjeUB6C/wdi6YIJ0Vha1hRUj6rQZLQQXYNq0d3oy6gNrUJ5NAktRo+gRWgANaKrUT+ahlai6WgBehA9huaiW1ESXYHWoWXou+g+tAR9C81BAboXVaDH0V3oeyiLrkIPo/vRN9AK9E20Gn0B3YBS6PPoSpRAS1EfqkY3oc+g69CN6AGUQbejOHoILUd3otnoFrQGTUWPohyahWagmegOdC36EroNPYGuRzH0FXRzVOPhscSelnWV0Wfv7qd+3E/e20+e3U/9sZ/qbj+ZdT8ZZH85DK+v/BkfXM/7L72X59Y/2bn1w6VrINykP2VCJD59ULpq30UvodfRMKqNqqflP5Luu2mdummdurn0u2mdummdummdummdummdummdummdummdummdummdurm5ummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdummdugld3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3bRO3YT0blqnblqnblqnbgJ8N61TN61TNymkm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm9apm8TXTevUTevUTevUTevUTevUTevUTevUTevUbevUbevUbevUbevUbevUXc7Zhcqf7NmG/yB861f/R51yWDqUb95Xe3/sxx3++A85bEmHf/TCj+W4w9JhjLvCP/rJHXc4dsjh46Xr6JHK6GpUjNWoGKtRMVajYqxGxViNirEaFWM1KsZqVIzVqBirUTFWo2KsRsVYjYqxGhVjNSrGalSM1agYq1ExVqNirEbFWI2KsRoVYzUqxmpUjNWoGKtRMVajYqxGxVh+irH8FGP5KcbyU4zlpxjLTzGWn2IsP8VYfoqx/BRj+SnG8lOM5acYy08xlp9iLD/FWH6KsfwUY/kpxvJTjOWnGMtPMZafYiw/xVh+irH8FGP5KcbyU4zlpxjLTzGWn2IsP8VY5ImxchNjqSjGkk+MpaIYazwxlopiLEbFWP+Jsf4TY/0nxvpPjPWfGOs/MdZ/Yqz/xFj/ibH+E2P9J+b6T8z1n5jrPzHXf2Ku/8RcD4u5HBRjOaiserQGTUVXogXoMdSH7kDXoTloEsqiO9G0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v/ysq94fy/Es4cj9/UsfzzJ17Jb67eiv+fSXavSN6BDagZaiPWgZmo2OoKMoQMfQcVSNTqCTaCSqyK/aM3nqZ+DSz+Spn6lQP3OffodC/Y6M+p1E9TOh6GcQ1c8UoqwzvE2Vb3OWFyf64nlenMyLPS3/04ToxsrT9ORlPYU2oqdRFXoGLUXPok1oM9qChtFzaCt6Hi1E29ALqBZtRy+il9DLaAd6BS1Gr6IMeg0tQjvRLvQ6egO9id5Cb6OV6B30Liqi3eg99D7ag/aiD9CHaB+aiZah/WgJ2oA+QhXoADqIDqHDaDY6go6iYyhAx9EJVI1G0Ek0BZ1C09FpNBedQWfROXQ+qvGgeNqgeNqgeNrgdtpwdtqgfdp4Vv60X0T1aA2aiq5EC9BjqA/dga5Dc9AklEV3omlR9bT8AhOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOENBOEtBOEtBOEtBOEtBOEtBOEdHmC8JmPNxSV//Br/HrA19zGX37xeFQ9LZ+dcGEve0X4+543hAsU88PO6kIBfSvrEGU9hTaip1EV2oyq0RY0jLai59FCtA3Vou3oJbQDLUavogxahI6hnWgXeh29hd5GK9G7qIh2oz1oL/oAfYj2oZloGdqPlkQ1XtPcyiJFWQfQQXQIHY6qp+WvlS7WHaOXaLwy8qNYSz+2lq5uLTX0WqrYtVSxa6li11LFrqVuXUtNu5Yqdi1V7Frq1rXUtGst/tZSwq+lxF1LObqWwnUtBe9aSty1FqNrqYbXUtWupYpea9m61hp3rRXwWlretRTSay1411rhri3Xg58r/VhPh2PDiaUvqaJlefiL5teGwej28KPrSg8mm9BbPpj32xNKX2pFyw0Ty19l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daN22ailGOPvIjc+j6hdUWrpQ3R5mxJdWg6SR3z7q07tGlPLMGoXm1qqUcswDnL5GZ981C5IB8lCateqWjpSy0JqOUft6jUu1fjWy1kt4xhLNL41vxi7zI2lF2NZxbde9saSi7Gr3rjconYZrKUUY9fDsdRiLIEYSzHGrpPjU43y5X7xnf1BqhFmGIu/Fr2F/pFLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLapxLatxLarx6Sf2nSjwcfyX97i6g0XXzcx//unmQy+X4RdpBJhc/PRfH8Qvvj3qVHH+L1fEXxa+Ebdjd0RvjvLZ/HisOLV7cX7md6uKW6Etv5vpZZCanyExOkb7AIjM5RWZyiszkFJnJKTKTU2Qmp8hMTpGZnCIzOUVmcop0HhaZySkyk1NkJqfITE6RmZwiMzlFZnKKzOQUmckpMpNTZCanyExOkZmcIjM5RWZyiszkFJnJKTKTU2Qmp8hMTpGZnCIzOUVmcor0dRaZySkyk1NkJqfITE6RmZwiMzlFZnKKzOQUmckpMpNTZCanyExOkZmcIjM5RWZyiszkFJnJKTKTU6TftchMTpGZnCIzOUW6X4vM5BSZySnSX1tkJqfITE6RmZwiMzlFZnKKzOQUmckpMpNTZCanyExOkZmcIjM5RWZyiszkFJnJKTKTU2Qmp0hXcJGZnCIzOUVmcorM5BSZySkyk1NkJqfITE7RmZxitSn5Fm++/LeVQvt8OQ/WXua/rVbh/6XW53rqWAfrn4QNr/vbXH82KsO3xMZ6YNOVPtdbD+34Lz5Ubf/Equ3Rhf/c/h+Dqntv+f+/1B9W32+rnFnRm/yi6Bu+HL05Y/0HKjt9d8ny9yhHjp4Ke8wnmiy3nRyF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J2lSTtKknKRJOUmTcpIm5SRNykmalJM0KSdpUk7SpJykSTlJk3KSJuUkTcpJmpSTNCknaVJO0qScpEk5SZNykiblJE3KSZqUkzQpJ2lSTtKknKRJOUmTcpIm5SRNykmalJM0KSdpUk7SpJykSTlJk3KSJuUkTcpJmpSTNCknaVJO0qScpEk5SZNykiblJE3KSZqUkzQpJ2lSTtKknKRimKRJOcmplqRJOUmTcpIm5SRNykmalJM0KSdpUk7SpJykSTlJk3KSJuUkTcpJmpSTNCknaVJO0qScpEk5SZNykiblJE3KSZqUkzQpJ2lSTtKknKRJOUmTcpIm5SRNykmalJM2KSdtUk7apJy0STlpk3KyGkuT+++42RSF4eiOm/8ufLj9djLq7WTU28mot5NRbyej3k4OvZ2seTtZ83bygu3k0NvJobeTNW8na95O1rydrHk7efJ28uTtZMbbyYW3k/1uJ/vdTva7nXx3OxnSdrLf7WS/VZ2ArkFD6Gn0DNqCnkPPoxfQS+hlVEKvoFfRa2g+Wo9eR6tQHUqgN9EwGkGT0Fuh0m2nkku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0kku0mku0mku0mku0mku0mku0VnOJzxNLU8TSFLE0RSxNEUtTxNIUsTRFLE0RS1PE0hSxNEUsTRFLU8TSFLE0RSxNEUtTxNIUsTRFLE0RS1PE0hSxNEUsTRFLU8TSFLE0RSxNEUtTxNIUsTRFLE0RS1PE0hSxNEUsTRFLU8TSFLE0RSxNEUtTxNIUsTRFLE0RS1PE0hSxNEUsTRFLU8TSFLE0RSxNEUtTxNIUsTRFLE0RS1PE0hSxNEUsTRFLU8TSFLE0RSxNEUtTxNIUsTRF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qmV+lVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkXdjkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQkVZQ0VZQ0VZQ0VZQ0VZQ0VZQsSW35/7EzjZorbz/QfS51+68g2iJfnX3xI96AkLmd6LfdUf0oZ/7UxFe/pmMme3Rs/Ir3RM/dWcgtE88aCeOdtBoR4/X9AyEudMf+DvRN38ZpyL8WvMtOGNEEhiRBGYjgb1IYCESWIgExiBB8U9Q/BMU/wTlPkG5T1DSE5T0BCU9QRFPULYTlO0EhTpBoU5QqBOU3wTlN0H5TVBwExTcBCU2QYlNKK4J6miCOpqgjiaolQmqY4LqmKA6JqiOCapjgnqYoAImqHkJi0CCMpegsCUsEAkqW4LKlqCyJahsCSpbgsqWoLIlqGUJalmL/hzqgeZC50Jd0FpoJZSEDkCXQ7dBW6Dj0GroMJSDUlCJF2KxL8QuaA+0CboTugq6G7oOugY6HzoHOhM6BC3nj5jnHxGHFkLXQhugg1AMugxaCs0LqTatueHOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPay85qLzurveys9rKz2svOai87q73srPays9rLzmovO6u97Kz2srPa685qrzurve6s9rqz2uvOaq87q73urPay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AOE0gHAaQDgNIJwGEE4DCKcBhNMAwmkA4TSAcBpAOA0gnAYQTgMIpwGE0wDCaQDhNIBwGkA4DSCcBhBOAwinAYTTAMNpwAyn3xrZLGHzzR9jPmzz/a269KdYjRqMFDSADRVdGn5Ol1nP/5WVvwZHAm7ljerrf329b/wB+sZqbagr9DHtH19vG3+kbeOg8Y7KbGj6ntFcOwlp0G3QKehu6E5oJVQC3Q89BNVAj0CPQqugWdAB6AnoaagHegZ6FnoOegE6B70MNUB1kA06D70ODUM3QwuhE9AW6FbodugO6B7oLmgIuhe6D3oAehB6GKqFHoMeh05DT0JPQc9DL0JnoLPQS1AZ9Ap0E/QqtAB6DcqTGt2hZD54EUpBF6By6A2oGLoEOaE3ocvQeOgKVAS9BXmht6F3oDT0Lg6MDQdmdLfa97jS8D2uJpgcS47jMb4BmgFFoQmQA1oOHYVi0EZoPlQB5UIboCBUIFXv+99GZM+cBHNx8szFiTUXL/tcvOxzzR+2OftzIz6N2fQaV+pYM3omx/AtVdngXPX9V/nciC3G1amfVk+5NbOO/IfayC/9XK74pb4i9aTNqlyfpEbL1ZX2n1KjE+r5au7/N/WgQ31pq3pwshoN4hqozORp5YAjuYpvinruMSQrKuMbwlyvcq57NPkP0RO9yon6t09VH2rxKX1wg/o55ervVhN5XsjIOyt/Sxwzn1M9VzNeHz0LUn/oZ9RXpl31cI6kQ75p6inFRri3VbpDo+mQb7p65HdDRpZR6REHvl5PwWXy/R0m398xX+tGpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpARJpgRJRO4konoSKUESKUESKUESKUESKUESKUESc0MSc0MSKUESKUESKUESKUESKUESKUESKUESKUESKUGSKUGSKUGSKUGSKUGSKUGSKUESKUESKUESKUESKUESKUESKUESKUESKUESKUESKUES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E6H50FJoO1QL+aF8KAK1QkGoHFoNRaEJUBLaBM2GpkBl0EZoHrQIWg8NQAugPGgFVCU12uk1mU8WkIVkHljvm4ZYOgX7EKdgUpmCXYmmNGgctBKaC5VAjdBiaC20FwpAuVANdBhaBR2H5kCzoANQAdQDFUHLoS7oKOSF1kHToEnQQagBOgJtg+qgdqgCKoaaIBt0DNoMDUIboJnQISgMrYF2Q83QPmgqtBCaDk2GHFAhtAWKQU5oGTQRmg8thbZDtZAfyociUCsUhMqh1VAUmgAloU3QbGgKVAZthOZBi6D10AC0AMqDVkBVUqPhcYqZW0434uHL+jl9PqQuONCrW1VVZJZjevGim3oIOgPZoFrodagBKocuQG9AxdBFKAU5oUvQZehNaDx0BTolNZri97IA6GVd0YsY2Yuyohdx0NTb+DEaf8w7eHAsH7wJSkPv4htz+beOA+t9xZgm4yg54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54ig54iw54iw54iw54iw54iw54mbJ4cq9+u1qrnGXGusjBq2PQbM+EM76HLNr3G4m8yl5mXvJZN9CRn1AV7X63Vl3jjE+m2xxbuhqt4uxPgHP+lQw69PtrM/1sj6rS31k4Wx8xFz27VvUpyz+rXqO9fFdu/RBX+aT4FZe/aPl1Meo3ZmjDm0JpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYpqkYp6kYp6kYp6kYp6kYp6mYOU258eECg/j870F8/repWigFXZCq983IzXxyzfpcce6+ZNQlz0IPQKehO6ESqXrfZ68vIH9CF5BVcaq/UOrnq3XRf7q+phz6qLeV/Ta24jQiz2pEntWIPKsRUbgRUbgRuUYj5qpGZB6NyDUaMVc1MpY1Iig3Ir1oRELRiKmrEQlFI1KIRiRojUghGhG+G5EYNCKYN2LqakQS1mhG4FLsvalEg6sSzbZK9nAq0TWrRBerEo2hSvTlKs3Q+TvG77VuAW7cPXxhbmj0xt+TxsgXfBJ+vqkZkAaNg1ZCc6ESqBFaDK2F9kIBKBeqgQ5Dq6Dj0BxoFnQAKoB6oCJoOdQFHYW80DpoGjQJOgg1QEegbVAd1A5VQMVQE2SDjkGboUFoAzQTOgSFoTXQbqgZ2gdNhRZC06HJkAMqhLZAMcgJLYMmQvOhpdB2qBbyQ/lQBGqFglA5tBqKQhOgJLQJmg1NgcqgjdA8aBG0HhqAFkB50AqoSmo0V55khsjfVbskVdLRaeyS9Hxsk011A+JFIx8feT3r/Pm2LX64qeV3xthybOq/34QcUyXuS9Wf9AGSzTIkm7uQbO5CsrkLyeYuJJu7kGzuQrK5C8nmLiSbu5Bs7kKyuYvJ5i4km7uQbO5CsrkLyeYuJJu7kGzuQrK5C8nmLiSbu5Bs7kKyuQvJ5i4km7vMZHMmPqCkG2V7N0r6brOI//eZi7d2GCHwP+BV2opXaStepa14lbbiVdqKV2krXqWteJW24lXaildpK16lrXyVtuJV2opXaStepa14lbbiVdqKV2krXqWteJW24lXaildpK16lrXiVtuJV2mq+SrNwlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJt5lJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJtxlJvNo/x7I8sII9HcKv6tqdGalLKnRhXQ/itu5WLNF5m5pd73H3Otj87/nZGWj3njztlyAaPyAfHymhgvMUNCkxgnsVJirkSJRKPEYom1EnslAhK5EjUShyVWSRyXmCMxS+KARIFEj0SRxHKJLomjEl6JdRLTJCZJHJRokDgisU2iTqJdokKiWKJJwiZxTGKzxKDEBomZEockwhJrJHZLNEvsk5gqsVBiusRkCYdEocQWiZiEU2KZxESJ+RJLJbZL1Er4JfIlIhKtEkGJconVElGJCRJJiU0SsyWmSJRJbJSYJ7FIYr3EgMQCiTyJFRJVAqM3lzaUDxVAhVCeVL3v9zGXNWEua8Jc1oS5rAlzWRPmsibMZU2Yy5owlzVhLmvCXNbEuawJc1kT5rImzGVNmMuaMJc1YS5rwlzWhLmsCXNZE+ayJsxlTZjLmjCXNZlz2X8yjrI1hamy4y/UIPuz2LPnMqsYsqZCK123agFrKsya7+p9f4BXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOMRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOIRXOGS+wp9Tifgp/aDXGIn4HOyBaEETqwVNrBY0qlrQnG1Ba6oFrakWNG5b0LhtQeO2BY3bFrRqW9CqbUFLqwWN2xY0blvQ7mpBG7cFDa4WNHVb0AprQYu3BS3eFjR1W9AYa0GLtwVN3RY0blvQnG1BK6wFrbAWtMJa0AprQSusBS3eFrR4W9D8akGLtwVN3RY0blvQqm1Bq7YFrdoWtNBa0I5tQTu2Be3YFjTbWtBybTH7aX84Un3afH+u8uGUPlhnFP//GSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkhSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkBSGkxQwhczO1/L+NUSFk3sjCk833NfVqqJfl94xXY77xgOoZvqmNhPxnjE8o/jyWqr5svMQXoTNSo0tV5oMXoPHQTVCtVL2vHL93GX7vMvMpX7D+Mdv5j1lgPHCT7g3qgR/rg9pMS3R3poKLGE9diJj66THyLPw0/mZTMyANGgethOZCJVAjtBhaC+2FAlAuVAMdhlZBx6E50CzoAFQA9UBF0HKoCzoKeaF10DRoEnQQaoCOQNugOqgdqoCKoSbIBh2DNkOD0AZoJnQICkNroN1QM7QPmgothKZDkyEHVAhtgWKQE1oGTYTmQ0uh7VAt5IfyoQjUCgWhcmg1FIUmQEloEzQbmgKVQRuhedAiaD00AC2A8qAVUJXU6PLXp82Yugiz8qOYlQ2N7kR7FNPyo5iWH8W0/Cim5UcxLZs/NJ8/dDl0FIrhGwv4jRuhg9ARaD5UB7VDFVAu1AQtgDZAeVAQmgoVSNX7FqNx+KB4QUyMl5ghoUmMk1gpMVeiRKJRYrHEWom9EgGJXIkaicMSqySOS8yRmCVxQKJAokeiSGK5RJfEUQmvxDqJaRKTJA5KNEgckdgmUSfRLlEhUSzRJGGTOCaxWWJQYoPETIlDEmGJNRK7JZol9klMlVgoMV1isoRDolBii0RMwimxTGKixHyJpRLbJWol/BL5EhGJVomgRLnEaomoxASJpMQmidkSUyTKJDZKzJNYJLFeYkBigUSexAqJKoHRxuGDMpqbKoAKoTypet8SJP3/BUn/fzEnqC8aT1GbEm7MCZk7D07pA98MteTypRzj/WLzfV59yW18trf6UubC0h/niJNpRE6pet+XVMGkLs9ZZvRcKrhgpLpkn1KfGx5Qd9y8oA/+Sg2Ohq62lpTddrMWjLJ7a6NLSF4chFtz5EEwVQ4VS9X7luLb/wjH8I/MY/hlFD2dSAc7kQ52IuXrRJnTiSSvE0leJ0qgTpRAnSiBOlECdaLo6UTR04nksBMlUCdKoE4kjp0oiDqRKnaiPOpEUtmJYqkTxVInyqNOpJidKJY6UR51ogTqRJnTiaSyE0llJ5LKTiSVnUgqO1EsdaJY6kQa2YliqRPlUSdKoE4UPZ0oejpR9HQiGe1EYdOJwqYThU0n0tZOFC+d5kl7IzLTHchMd6BftAOJ6Q4kpjuQmO5AYroDiekOZKI7kInuQCa6g/2iHchEdyAT3YFMdAcy0R3IRHcg99yB3HMHcs8dyD13IPfcgdxzB3LPHcg2d5jRo9I4yvfpwegLaodQ5r6E9xivyC3QCegkpEFboNuhO6C7oXugIeghqAZ6BKqFVkGPQY9DT0FPQz3Qc9Dz0BnoLPQSdA56GSqDGqBXoDrIBr0GnYdeh4ahcugC9AZ0ESqGUtAlyAm9CV2GxkNXoFNQEfQW5IXeht6B0tC7UqOfCmEyhxxDauRY0OqFmg/m8rnjwHrfVz62m1I/QXtR/6f+/5dC1z9K89d/S+r77kS1Jqivm+8vn7GJ69OqfLg1sxryh5k9rZ/LFYfPV6SetFkbOcb/pkqDT6kvnVCjyWo0qMm3X+aPtN5rI+eEb4p67jGcFOqdNSSPqc+hnnSvunTnBjVakjtyvt+jyTNF7TmbqD9nqipNPjVy6PLMd3rlb4k3n8+pnqGNnly+aeoLxfrgM2ow7apvSz3cVLrFeeebrp77u+bLWekR76Z6/QRQkUoPGpWvyUBlnX3WcblGNLLORysI/Tz3vLfOx+yolH0/++wT8xrF3Ae5ab0VjN7/FvWZ89sKRe93i/pf+s70H8IN6bPvQ599+/ll1tJivTpfrWU57FypU4dELdRtwFvgGn/iB9nmYv15WZta6n3/NbO5otEo9P8I5cVOlBc7UV7sRHmxE+XFTpQXO1Fe7ER5sRPlxU6UFztRXuxkebET5cVOlBc7UV7sRHmxE+XFTpQXO1Fe7ER5sRPlxU6UFztRXuxEebET5cVOs7xYbu0G8GV2A5Qa67D/bWSdunKmejGq5F3bzN205SrSfFON+nNGzqKTxneuQDOjaIx84YqQMpqaAWnQOGglNBcqgRqhxdBaaC8UgHKhGugwtAo6Ds2BZkEHoAKoByqClkNd0FHIC62DpkGToINQA3QE2gbVQe1QBVQMNUE26Bi0GRqENkAzoUNQGFoD7YaaoX3QVGghNB2aDDmgQmgLFIOc0DJoIjQfWgpth2ohP5QPRaBWKAiVQ6uhKDQBSkKboNnQFKgM2gjNgxZB66EBaAGUB62AqqRGV3CLzOR1JeLhXExkczGRzcVEZkqDxkEroblQCdQILYbWQnuhAJQL1UCHoVXQcWgONAs6ABVAPVARtBzqgo5CXmgdNA2aBB2EGqAj0DaoDmqHKqBiqAmyQcegzdAgtAGaCR2CwtAaaDfUDO2DpkILoenQZMgBFUJboBjkhJZBE6H50FJoO1QL+aF8KAK1QkGoHFoNRaEJUBLaBM2GpkBl0EZoHrQIWg8NQAugPGgFVCU1uj/FZD5ZQBaSeWC9bxU+KanHuFjyolS9rxrbMx4S0dbEeIkZEprEOImVEnMlSiQaJRZLrJXYKxGQyJWokTgssUriuMQciVkSByQKJHokiiSWS3RJHJXwSqyTmCYxSeKgRIPEEYltEnUS7RIVEsUSTRI2iWMSmyUGJTZIzJQ4JBGWWCOxW6JZYp/EVImFEtMlJks4JAoltkjEJJwSyyQmSsyXWCqxXaJWwi+RLxGRaJUISpRLrJaISkyQSEpskpgtMUWiTGKjxDyJRRLrJQYkFkjkSayQqBIY3Z7xkAyJpgqgQihPqt73x++x7mB1cqwFCKur/HOtO2R3+q6x3PDeLb/sXnT20oTVnb5GNzC7X529amE1Cq2e/i/WKLT63tnLF+/fOrRahpke4vu1DrPWLH7hHqK1YGF16lr0R54O/TJNxeyVjWuvaJhtxq/KnlHlG/r/T4TMltLzIz2kyptDat1R/xcYjaP/jkKpAyV1B0rqDpTNHWgVdaBQ7kCh3IE2UgfaSB1oI3WgjdSBxlEHGkcdKLA70EbqQBupA8V3B5pKHSi3O9Bi6kBh3oGGUwcaTh1oMXWgTO9Aw6kDLaYOtJE60CrqQGHegcK8A4V5BwrzDhTmHWg4daDh1IFSvAMNpw60mDrQRupA46gDjaMONI46UNB3oDnUgeZQB5pDHSj9O9AA6jCr+69hd9dS4ykXoTNSoyvJ5oMXoPHQTVCtVL1v9VWWxH6i/UoWwMy1LdtVV8Cs1S5fiXrSuMxHLFxzuUtFu5wPuNw1sriVtaZV7/u6ceQz1dM59E7OoeY7hxrzHGrvc+hsnENVeQ7V0zmzBPnGyCeqml8szJEveKH5lDUIZCl0fFLo+KTwV6fQ8Umh45NCxyeFjk8KHZ8UOj4pdHxS6Pik0PFJoeOTwnFJoeOTQscnhY5PCh2fFDo+KXR8Uuj4pNDxSaHjk0LHJ4WOTwodnxQ6Pil0fFLo+KTQ8Umh45NCxyeFjk8KHZ8UOj4pdHxS6PikcNal0PFJoeOTQscnhY5PCh2fFDo+KXR8Uuj4pNDxSaHjk0LHJ4WOTwodnxQ6Pil0fFLo+KTQ8Umh45PCuzGFjk8KHZ8UOj4pvDdT6Pik0PFJ4d2fQscnhY5PCh2fFDo+KXR8Uuj4pNDxSaHjk0LHJ4WOTwodnxQ6Pil0fFLo+KTQ8Umh45NCxyeFmJVCxyeFjk8KHZ8UOj4pdHxS6Pik0PFJoeOTYhMnZcbDmo9urrrKHg1j9lqKnRnvN0P9chPTWlZl1u0nrE1gmj64A5vAVA328NjQ1Wow614V1iYwu/qXjTXOd5vvXjVQVdkzamDVadY+M6tOs251cY39YeqmELeNNd6rNt8R7M2w7osxVb1SamDdTSN7D5lVaVm1l7oG4IR6jku9qNiJkX03jUw5pe5jMaS+YG0Ly9oN9v4fRJi12ev3VBGjvucD7Pqy7trxOXV+qa/M0Qc/UIM/1AcDamDdx8Oqq+bpg1fGhMSdPaxdcdZ9Rr6gD1y5o2fYaPG+SB90q9+5WP0qNcjcVOSL+hc61Resgkzd1+NbauDVB/O1kKjMvqwP/k79ghv1wX3qd1fqg59i01n2XrOsIt7aUGbdgcSq5qvUVzQjFth8X1EPWUW8Valbdyn5Y1U0q8FX9cFBVOpf0wfxXCNK2nwVamDdcuUb+mCN+soafbBfDay6PFNr1+pfOIQNanX6oDQnNFo8W62OrB1p1g1S/kwfzFVfsXaz/YU+aFID9QGKf6kGmXLZr3/hs1e/P4q1ge2b6sRRg3r1gqvBt/TBn6EnY23mVDdcOab+udY9Z6z9mZv1QZ25I87mC6uB1em4+m7MbvVQsz6YpAbWLWusvoa1LTOkThT1nOxtmdbdbKwGh9XQaNcHL6ivZG3D3KX/3xka7VxYd75R94y5Wz1T3d7mHnxe23f0wVj1ld36IKAGEXVGqkGmB2G1HLI7DVaXy7pdznf1wSX1HOu+OVYHK64P6tV3WZsos3ekJdS/W32XdZOdXn3wPfXkg+oFUT/5H9VJr76SvUdN3dnnEfVdVlsp0/6xbtHzz/rgnPruI+p3qq/064MvqF/+LyoeqkGmJ2TdzifT6/lX9f5Vz7Bu4mP1eKyb+PxQvbXVcwb0wT+pQaaJ8yN13qhfPajO5zFqoqq1NoKVjR15Wb48Vj2wDkWtD0WtD0Wtj0WtD0WtD0WtD0WtD0Wtzyxq68xNR+bXNqivbfKtRzEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTEVRTFlaHT53GQ+WUAWknlgve9PENe9iOtexHUv47oXcd2LuO5FXPcirnvNuP6niOGt6Oy3orPfis5+Kzr7rejst6Kz34rOfis6+63o7Leis9/6f9s78/go7vr/bwgLQ8UtQRigyOBIqxUsiusXF2K4VEDpFkUOjy+WEEKBUq4QsQhBSMwmIWqiSVAO8UBFlFVUaG1IkzSktPS+W3oftPQ+ZuiUnt+dmXeS9/NXH/pVq9/2J/7hc57dsEk+M/P6vD/HTjCzn8LMfgoz+ynM7Kcws5/CzH4KM/spzOynMLOfwsx+CjP7KczspzCzn8LMfgoz+ynM7Kcws5/CzH4KM/spzOynMLOfwsx+CjP7KczspzCzn8LMfgoz+ynM7Kcws5/CzH4KM/spzOynMLOfwsx+CjP7KczspzCzn8LMfiq8aBdjojcnS98sOeH9tCSY2LjYH+GP9Oez1/pHV2TKuuQ3/aMTwQO7Lgze5636qIU/1DdOfebinfaZi6Vv608wjYu+cz7BdFFwO3V88nlvsAXsMCwbdjXsCOwG2HWw2TAbdivsDlg+7C7YUdgc2EjYLth9sAdhW2EPwR6GPQJ7FPYk7ClYCawQFoE9B3se9gLsEGwC7ErYethVsGtg18JuhF0Puwl2M+wW2G2w22F3wgpgd8Pugd0Lux/2AOwY7DHYcdjjsCdgw2FPw1pgz8DGw56FGdq66sS92JG5F3/MYi/+0EVoeTAXNhTmwQbDXoKdhPWEvQzrD3sFNgX2Kuw12OuwN9AwETRM1wfSQ+1GzaZ2p/ZgG58BGwbbAesFGwibAdsP2wlbCcuFTYZFYUtga2E52oqTyzA6ycXoJBejk1yOTnIxOsnF6CQXo5NcjE5yw0JvecdH3V7z55tW4HOHlZhvqsR8UyXmmyoxGq3EaLQScy6VGLNXYgamEnMulRizV3JMV4nBaSWmWSoxsVKJIXwlJlYqMZVSiYmqSkylVGIYW4kJkkoMaisxhK/EZFRlWDmv9Nvc/8zg/ODDnquCRu/oFH7fTXdCoV0JWw+7A3YcFoEVwJ6F3QN7HlYCy4M5MBc2FHYC9iJsMMyDnYS9BOsJexl2RFtXFoWaRe0G7bxWQ3sFNgX2Kt4mm2/zGl7szhdbYK/D3sA/jPJn7QEtThbhli3FLVuKW7YUt2wpbtlS3LKluGVLccuW4pYtxS1bilu2lLdsKW7ZUtyypbhlS3HLluKWLcUtW4pbthS3bClu2VLcsqW4ZUtxy5bili0Nb9nVHU+u/nhwyxYHje4vJRp+ud85rP13/LWDr/+nPm/lbfCYlX/x41X85bn3YzX93/+clb9nJ/s76Kkqxck1f+Phif/kMxPDZy+eKNcPT/zGO+RW9Vf5v9vtX3HPvp2ekXTq2Uj/H9zFF6PcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSbHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSaHcSYXlzlqZ/s/c8v5l5T8iZXGwOeKbaP4yNH8Zmr8MzV+G5i9D85eh+cvQ/GVo/jI0fxmav4zNX4bmL0Pzl6H5y9D8ZWj+MjR/GZq/DM1fhuYvQ/OXofnL0PxlaP6ysPnXdVSbI4Nqcz0avQqNXoVGr0KjV6HRq9DoVWj0KjR6FRq9Co1ehUavYqNXodGr0OhVaPQqNHoVGr0KjV6FRq9Co1eh0avQ6FVo9Co0ehUavSps9JKglTvWW88JvmQ2bANsPiwKy4eNhuXAtsL6w+pg+2FDYP1gu2H7YIWwathQ2EZYBLYENgK2BzYP1gDbDhukrWvl/xxcmqH1ha2HTYflwqbCNsMKYCtgW2BrYXPxY/fhj52GjcKX5vBLh8NWwsbCJsIWwg7CxsNmwWbCfgQ7A9YTNgyWDRsDs2GTYNtga2B7YXNgTbCRsF2wGbApsAU4EX15IkpgZbDJsAOwdbBmWBVsE2wCzIKZsJ2wwfglDP4SvWF9YClYHmwHrBesCDYAZmgrTm74hz70ECzC7oi+dR9/+Hd96OFbnX/761X/Lbr+9tfGjo7cCf7g2aagWXr5P3BpVP9yz2Xe6VXVKJ0/XudSddBK3fXw4k0N0rFcLA1TnPke+oEh27A8tS1cdihDaVGDu78Gd38N7v4aXC01uFpq0JXVIL9rcG/WoGOrwUVew8u6BrFYg36uBv1cDYK/Br1eDe7iGvTcNej1ahCgNej1anDJ16BTqEEfXxPeDt9+h8wDnBr+v+2G//7UzPZT8wBvmgcoD24p/xmtuR2fqviR/y86H+jq7+xfFczCpZBxDci4BmRcAzKuARnXgIxrQMY1IOMakHENyLgGZFwDM64BGdeAjGtAxjUg4xqQcQ3IuAZkXAMyrgEZ14CMa0DGNSDjGpBxDWHGVQSt7H/eZUz38vATd7dHy8NPyiX9M+N/+mtzcEIqO3rFLwTD2ypskD2tmz4/p2GdL7RhsGxYD9hs2BiYDdsAmwSbD9sGWwOLwvJhe2FzYE2w0bCRsF2wHNhWWH/YDFgdbD9sCmwBbAisH2w3rAS2D1YGK4RVwybDhsI2wiKwA7B1sGbYEtgI2B5YFWwerAG2CbYdNgg2AWbBTNhAWF/YethO2GDYdFhvWC5sKmwzrAC2AtYHtgWWgq2F5cHmwnbAesHSsCLYKNgA2HDYSthY2ETYQthB2HiYAZsFm6mta/x5Wriivxlbgc7F7onQjmvr2iBwLrZknIvoPBe7Ds7FiTw3/L7V2IfyEK7Q0NphV8IOw7JhV8HWw66GHYFdA7sWdh3setgNsBths2E3wW6G2bBbYLfCboPdDrsDdicsH3YXrAB2FDYHdjfsHti9sPtg98MegD0I2wp7CPYw7BHYMdijsMdgx2GPw56APQl7CjYcVgJ7GlYIa4E9A4vAnoU9B3se9gIsD+bAXNgJ2FDYizAPNhj2EuwkrCfsZVh/2CuwKbBXYa/BXoe9oa1rJ1aoWdRu1Gxqd2qU2gPaWUKGNgw2ELYTlguLwtbCcmA7YL1gM2D7YSthk2FLtBUnv4ORTAlGMiUYyZRgJFOCkUwJRjIlGMmUYCRTgpFMCUYyJRjJlHAkU4KRTAlGMiUYyZRgJFOCkUwJRjIlGMmUYCRTgpFMCUYyJRjJlGAkU4KRTEk4kvkuWrkerVyPVq5HK9ejlevRyvVo5Xq0cj1auR6tXI9Wrmcr16OV69HK9WjlerRyPVq5Hq1cj1auRyvXo5Xr0cr1aOV6tHI9Wrk+bOXvdQwCzwoGgTWnnhsz7dRzY/6vnxtz6nEx/9DjYvyHc0T93+7Uc2NOPTfm7fXcmLfmcTGdPf7ZHLGfHdZltagYKlAxVKBiqEDFUIGKoQIVQwUqhgpUDBWoGCpQMVSgYqhgxVCBiqECFUMFKoYKVAwVqBgqUDFUoGKoQMVQgYqhAhVDBSqGClQMFagYKsKK4ftBK3c+nAYfW90RLmf+4NRC27T/mIU2v49+qlv5v37Drd+Zfc5/v/+gFbfO/vrNS291wS6G3h2ZcknwCc13U2PQzsmJS8LbtL6j9v9cUPs3+Oqf33lZvm7p3Hz6hcyvm0z6Y4H3+r+4v7b3Mf/gwczBp7vLXfN7f/P9p/0vmhVsUf3hvykDkqP977mp219MA/8euKTjsn2k21/Nh+RX/Tc62P2fTorkl/03Wtnt35MZ/l2xots/Gx7PZQ5+0v0vpMhbGh5vxeJ88it+6z6iQyOZ8P/Tsv/4/frJT/jtsMj/jfwx675uKkj8wdvabn8xSH7UEQOJIAa2dug5gW77W/fx26QLf6s+1fZX7rk33WF/8xExf7sP/tfscem4e/6OP5bxF+6Yf+7DaH5CRbPe+vvjrdy+sr3jWv9YcK3vwJLf57EQ8PlwjPFjjDFqMcaoxRijFmOMWowxajHGqMUYoxZjjFqMMWoxxqjFGKOWY4xajDFqMcaoxRijFmOMWowxajHGqMUYoxZjjFqMMWoxxqjFGKMWY4xajDFqwzHGTuxFGYpWHopWHopWDi0b1gM2GzYGZsM2wCbB5sO2wdbAorB82F7YHFgTbDRsJGwXLAe2FdYfNgNWB9sPmwJbABsC6wfbDSuB7YOVwQph1bDJsKGwjbAI7ABsHawZtgQ2ArYHVgWbB2uAbYJthw2CTYBZMBM2ENYXth62EzYYNh3WG5YLmwrbDCuArYD1gW2BpWBrYXmwubAdsF6wNKwINgo2ADYcthI2FjYRthB2EDYeZsBmwWZq6/rYTah9qDnUvlQDWpz8SZCl/pzz16MqOIfh8UPD8MChYXho0jA8NGlYOHb8aUfPeWu233P+DIF9OlZ+T8dy9+lYBz4d21RC6wGbDRsDs2EbYJNg82HbYGtgUVg+bC9sDqwJNho2ErYLlgPbCusPmwGrg+2HTYEt0NZ1tYQvDoH1g+2GlcD2wcpghbBq2GTYUNhGWAR2ALYO1gxbAhsB2wOrgs2DNcA2wbbDBsEmwCyYCRsI6wtbD9sJGwybDusNy4VNhW2GFcBWwPrAtsBSsLWwPNhc2A5YL1gaVgQbBRsAGw5bCRsLmwhbCDsIGw8zYLNgM7UVJ3/+v5798udvXvJHW28eR3cOnzsH1Kemwt/WU+Fv1Xj8H3hMTOdc1jt7CuuvjNV3BbfU6xl/1J/zGxdMNUfLuz40a6LqMFF1mKg6TFQdJqoOE1WHiarDRNVhouowUXWYqDpMVB0mqg4TVYeJqsNE1WGi6jBRdZioOkxUHSaqDhNVh4mqw0TVYaLqMFF1mKg6TFQdJqoOE2WGiTLDRJlhoswwUWaYKDNMlBkmygwTZYaJMsNEmWGizDBRZpgoM0yUGSbKDBNlhokyw0SZYaLMMFFmmCgzTJQZJsoME2WGiTLDRJlhoswwUWaYKDNMlBkmygwTZYaJMsNEmWGizDBRZpgoM0yUGSbKDBNlhokyw0SZYaLMMFFmmCgzTJQZJsoME2WGiTLDRJlhoswwUWaYKDNMlBkmygwTZYaJMsNEmWGizDBRZgTWVcubYdXxi7f6Me/T1pefesr7O+sp77/ESDyGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjGGPjHGuzeGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjKGLjIW9om/Qh6eiTw8E3l4JvLwTOThmcjDM5GHZyIPz0Qenok8DCx5VhZenASbD9sGWwOLwvJhe2FzYE2w0bCRsF2wHNhWWH/YDFgdbD9sCmwBmqkvm2kIrB9sN6wEb/M1vs0+WBmsEPY6rBo2GTYUthEWgR2ArYM1w5bARsD2wKpg82ANsE2w7bBBsAkwC2bCBsL6wtbDdsIGw6bDesNyYVNhm2EFsBWwPrAtsBRsLSwPNhe2A9YLloYVwUbBBsCGw1bCxsImwhbCDsLGwwzYLNhMbcXJ3chOA9lpIDsNZKeB7DSQnQay00B2GshOA9lpICwNhKWBsDQQlgbC0kBYGghLA2FpICwNhKWBsDQQlgbC0kBYGghLA2FpICwNhKWBsDQQlgbS0UA6GkhHA+loIA4NxKGBODQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAANBKCBADQQgAYC0EAAGghAAwFoIAAD6ypBjDAPfx3kof8Qu0jm1Z7+A+juLg//bssl5f4nwSPJDwdz1Xv+ic3Pb5NVH39d6oj/PqeWf04t/5T/3y///AZ7Mz8Z3K0nYMe1dT2VIHzRgfWEtcAKtBUnf4saKI6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxjK2IcWxHj2IoYx1bEOLYixrEVMY6tiHFsRYxzK2KcWxHj3IoY51bEOLcixsOtiHuDLPWfyzs3GmRyJLksCPf0W75wdVn5qYWrd9bC1e/wmOSng764HXYYlg17GXYEdgPsOthsmA1zYXfA8mF3webAHoRthfWHPQx7BPYKbArsVdhrsCdhT8FKYIWw12FvwIbCIrDnYM/DXoAdgk2AXQlbD/Ng18AGa+t6xlX44rWwG2E3wW6B3QYrgJ2A3Q27B/YSfrQs/mj3whzYA7A8vE03vs0x2HHY4/iH2fyHJ2FPwIbDnsbbdOfbtODFKF7sei5Y+LXPwl6EPQS7CnY17FHYY7DrYTfDboXdDrsT9gzsKOw+2P2wM2DDYDtgvWADYTNg+2E7YSthubDJsChsCWwtLEdbcWZk7n/ifJ0/7ZEOru9I8t1Z6k5O495N495NI0PTuEDTyJE0brM0LpY0UiyNjEkj09K4W9K4r9JI9zQyLY3bOo2LM42MSSON0riP0rjl0xhzptFfpdFfpZlbaWZFmvd8Gl1IGt1EGt1EGt1EmgmQRq+R5n2dxn2dRteQRteQ5j2f5j2fDq+gfRjET0BbT8A1MYFvNwEncAIadAJ+xgm4fCaE3/cPnRN3z4dPRYhM+3DmoLd/YOrHJvQPP93yR6lFItOWlod/SGJTUKf+CZMBHiYDPEwGeJgM8DAZ4GEywMNkgIfJAA+TAR4mAzxMBniYDPAwGeBhMsDDZICHyQAPkwEeJgM8TAZ4mAzwMBngYTLAw2SAh8kAD5MBHiYDPEwGeJgM8DAZ4GEywMNkgIfJAA+TAR4mAzxMBniYDPAwGeBhMsDDZICHyQAPkwEeJgM8TAZ4mAzwMBngYTLAw2SAh8kAD5MBHiYDPEwGeJgM8DAZ4GEywMNkgIfJAA+TAR4mAzxMBniYDPAwGeBhMsDDZICHyQAPkwEeJgM8TAZ4mAzwMBngYTLAw2SAh8kAD5MBHiYDPEwGeJgM8DAZ4GEywMNkgIfJAA+TAR4mAzxMBniYDPAwGeBhMsDDZICHyQAPkwEeJgM8TAZ4HN974YB+P/LQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayEMLeWghDy3koYU8tJCHFvLQQh5ayMPAuiZHQ+1DzaH2pRrQ4uSBIEv/jr9FFvwBsznRf/Cvkl2C6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i20V0u4huF9HtIrpdRLeL6HYR3S6i22Uau2H8Xorlh89gauIz4SzCn/ElJ4MvaYcdhmXDXoYdgd0Auw42G2bDXNgdsHzYXbA5sAdhW2H9YQ/DHoG9ApsCexX2GuxJ2FOwElgh7HXYG7ChsAjsOdjzsBdgh2ATYFfC1sM82DWwwdq6ZvrCF6+F3Qi7CXYL7DZYAewE7G7YPbCX8KNl8Ue7F+bAHoDl4W268W2OwY7DHsc/zOY/PAl7AjYc9jTepjvfpgUvRvFi12zlSUw6n8QkcGgPwa6CXQ17FPYY7HrYzbBbYbfD7oQ9AzsKuw92P+wM2DDYDlgv2EDYDNh+2E7YSlgubDIsClsCWwvL0VacvAxFrY2i1kZRa6OotVHU2ihqbRS1NopaG0WtjaLWRlFro6i1UdTaKGptFLU2ilobRa2NotZGUWujqLVR1Nooam0UtTaKWhtFrY2i1kZRa6OotVHU2ihqbRS1NopaG0WtjaLWRlFro6i1UdTaKGptFLU2ilobRa2NotZGUWujqLVR1Nooam0UtTaKWhtFrY2i1kZRa6OotVHU2ihqbRS1NopaG0WtjaLWRlFro6i1UdTaKGptFLU2ilobRa2NotZGUWujqLVR1Nooam0UtTaKWhtFrY2i1kZRa6OotVHU2ihqbRS1NopaG0WtjaLWRlFro6i1UdTaKGptFLU2ilobRa2NotZGURtY13xEqH2oOdS+VANanGxEljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgyx1kKUOstRBljrIUgdZ6iBLHWSpgywNrP5d50WC/3WGqoNQdRCqDkLVQag6CFUHoeogVB2EqoNQdRCqDkLVQag6CFUHoeogVB2EqoNQdRCqDkLVQag6CFUHoeogVB2EqoNQdRCqDkLVQag6zEknDMaD2MQwDqOscRjXjOMoYxzGTuOwiWEchifjMJAbFxa3TfJ9I8nWaHld5zba4uTlwQudf3K9c/dsa+b+G1mudnT6ey0nlYezxFPL/+rOzs4trn9lZ2vnrs7OXasdm1KLk83Bz+RPYr9U3jXD0I5xdTvmG9oxrm7HfEo75hvaMZRsxwi8HSegHSPwdgwz2zHz0o4hdzvmItoxymzHzEQ7xpztmKdox6xMO2Zl2jEr0455inac/XYMRtsxjG/HML4dMxrtmNFox0i9HSP1dlyXobmwE7ChsBdhg2Ee7CXYSVhP2MuwI9q65kzaOU/RzvmG8J/2h70CmwJ7FW+Tzbd5DS9254stsNdhb+AfRvmz9oAWJ1sQLIeydMsfQgwfQs97KMylVvzzPJy4PNwWefxp8nD+83A+8vAr5uHKzAt/7Ct0oTjtadVnhlKnZbOWUVrGaBmiZbuWBVrGa5mgpa+WHloGa5muxdayQct8Ldu0TNUS1dJHy14tTVpGatmlJa1lgJZ+WnZrWailTMtkLQe0jNCyR0uVFkNJcbINc+GX42HSl+Nh0qEVwF6EOdqKk4eCt/b7pjuiupfp7Nf+SpfU+amIN/doHb1gcbI9+Ab+J1Q/l1UefvjiSFZ5+EdTPpk5SA7z11O/4h+93z/6bpYKttbwZrsyeA//w7ab/Fc7/0LiW/UZln/ksyvJMf5PuzZa/pc+xdL5VwDf5h9n6Sxj3g6fa8lUUMmv6XX1yzN8vPzNH3Tp+CMqf/sDL8XJwx1/Z+tk8Oj0qyQ+/46r3P/Jh/2vL/erg28gQ/dpVxSpeYLAOkbuoQzUslNLrpaolrVacrTkadmhpZeW/vqH64MfboaW/frrcvB1K7Xs1rJPS6GWai2TtWzUMl7LEi2GlkFKipNH0OptaPU23eptutXbdKu36VZv063eplu9Tbd6m271Nt3qbbrV23Srt6HV23Srt+lWb0Ort+lWb9Ot3qZbvU23eptu9Tbd6m261dt0q7fpVm/Trd6mW70taPVrUIsc9r/gDC09tQzTkq2lh5bZWsZosbVs0DJJy3wt27Ss0RLVkq9lr5Y5Wpq0jNYyUssuLTlatmrpr2WGljot+7VM0bJAyxAt/bTs1lKiZZ+WMi2FWqq1TNYyVMtGLREtB7Ss09KsZYmWEVr2aKnSMk9Lg5ZNWrZrGaRlghZLi6lloJa+WtZr2allsJbpWnprydUyVctmLQVaVmjpo2WLlpSWtVrytMzVskNLLy1pLUVaRmkZoGW4lpVaxmqZqGWhloNaxmsxtMzSMlNJVz9wGMF7GPEaWF9txclrg3TruBdf8t+4Rct4JcXJ6/w6o6NsfcQvW4uS1+MdTuh3OKHf4UTwDjdgCSCBJYAElgASWAJIYAkggSWABJYAElgCSGAJIIElgASWABJYAkhgCSCBJYAElgASWAJIYAkggSWABJYAElgCSGAJIIElgASWABJYAkhgCSCBJYAElgASWAJIYAkggSWABJYAElgCSGAJIIElgASWABJYAkhgCSCBJYAElgASmIhIYAkggSWABJYAElgCSGAJIIElgASWABJYAkhgCSCBJYAElgASWAJIYAkggSWABJYAElgCSGAJIIElgASWABJYAkhgCSCBJYDQpsN6w3JhU2GbYQWwFbA+sC2wFGwtLA82F7YD1guWhhXBRsEGwIbDVsLGwibCFsIOwsbDDNgs2ExtXcupofah5lD7Ug1ocfJGVKZ3qSgNpaeWYVqytfTQMlvLGC22lg1aJmmZr2WbljVaolrytezVMkdLk5bRWkZq2aUlR8tWLf21zNBSp2W/lilaFmgZoqWflt1aSrTs01KmpVBLtZbJWoZq2aglouWAlnVamrUs0TJCyx4tVVrmaWnQsknLdi2DtEzQYmkxtQzU0lfLei07tQzWMl1Lby25WqZq2aylQMsKLX20bNGS0rJWS56WuVp2aOmlJa2lSMsoLQO0DNeyUstYLRO1LNRyUMt4LYaWWVpmKumqTO/SeRdaDqwvzNBWnLwpyLqcaZHk7dEg5yLJZFZ5+EeoN/sH388cNAeTUzdnvjR5S/D1Hb3JMdSSx9AHHkOfewy1yDFUesfQyx5Db3IsjORbMUXTigZo1THcqq/qVn3ttuqLslVnZau+jFp1urXqa6pVX0at+jJq1bnXivPRqlOwVQdfK85Uq76QWnW+tepIa9Up1qpTrFWnWKsOrlZ9ibXqRGrV11urzpDWoNVvQ6u3oNVbdKu36FZv0a3eolu9Rbd6i271Ft3qLbrVW3Srt+hWb9Gt3oJWb9Gt3qJbvQWt3qJbvUW3eotu9Rbd6i261Vt0q7foVm/Rrd6iW71Ft3qLbvWWoNVvl1aPJHtmy53Yku2/cIceJT7r3xhFyTtxippwipr0KWrSp6hJn6ImfYqa9Clq0qeoSZ+iJn2KmvQpatKnqEmfoiacoiZ9ipr0KWrCKWrSp6hJn6ImfYqa9Clq0qeoSZ+iJn2KmvQpatKnqEmfoiZ9ipqCU3QXKsSjReVdFWIgPbUM05KtpYeW2VrGaLG1bNAySct8Ldu0rNES1ZKvZa+WOVqatIzWMlLLLi05WrZq6a9lhpY6Lfu1TNGyQMsQLf207NZSomWfljIthVqqtUzWMlTLRi0RLQe0rNPSrGWJlhFa9mip0jJPS4OWTVq2axmkZYIWS4upZaCWvlrWa9mpZbCW6Vp6a8nVMlXLZi0FWlZo6aNli5aUlrVa8rTM1bJDSy8taS1FWkZpGaBluJaVWsZqmahloZaDWsZrMbTM0jJTSVc/cBTBexTxGlhfmKGtOHkUPUwj3rlR51ujvlwa9UXRqM92ow6hRn1+GnVsNOqT1ajPT6M+P406UBp1oDTqDGnEL92oz0mjjopGnQ6NOhAadSA06kBo1BnQqO/nRn3TNeIsNOqz2qjPaiPOQWNwDu7GOWjGOWjW56BZn4NmfQ6a9Tlo1uegWZ+DZn0OmvU5aNbnoFmfg2Z9DprxazbrM9Ksz0gzzkizPiPN+ow06zPSrM9Isz4jzfqMNOsz0qxbulmfnmbd7M36XDUHrX5P0Or+Ro3x/kf3J/tH3/PHRH5t9hl/uDQuc/C+aNAUkWR5NGi6SPKX3cvDsu0S/+DizMGB7kETR5J7uwfnJ5Lc1T34dpHkpd3Ddogkb+t4GPsR/+BrmYMb/YNf+ztP/INSfzupf/A+f0jmH7w/c3BF9+D0R5KH/YPKzME1/sFZ/u6U7sFvHkk+3j1oqUjyUf/gU5k+amyG38twcHAdRKb1Lw+3nbT42zZqMwc/9w8+njlo9GtQfxB4g//r/cD/qfyDROagPRpcUpHkVdHwgowkr4wGF0kkeSgaXHuR5LX+ax/2Xzvqv9NXMgdXR4OLIpK83j/4hf8j+we/zBxc53/1Of5XH4kGF1Xmt/APvpQ5uMV/bWTQUv7RR/yjW/0XV2cO7vQPfuvvzYmWh7t1jvpfNML/ovv9b1ycObjbf+13mYN7o8FFFUneFw0uqEjyA1nBtRlJDs0KrpBI8qys4IrKnHz/4NLMwSz/4LLMwcCs4GqNJD/oH6zKHCz1dyB91P9mY7P09b8/uJDuxaD5OAbNxzFoPo5B83EMmo9j0Hwcg+bjGDQfDwfN92FN6M7gS86A9YQNg2XDesBmw8bAbNgG2CTYfNg22BpYFJYP2wubA2uCjYaNhO2C5cC2wvrDZsDqYPthU2ALYENg/WC7YSWwfbAyWCGsGjYZNhS2ERaBHYCtgzXDlsBGwPbAqmDzYA2wTbDtsEGwCTALZsIGwvrC1sN2wgbDpsN6w3JhU2GbYQWwFbA+sC2wFGwtLA82F7YD1guWhhXBRsEGwIbDVsLGwibCFsIOwsbDDNgs2ExtXWtCofah5lD7Qjt3Y4cvGnixuLi6d9Hq/FWrz8/8/+rCorr1dUvuy45Ekr/NKqo+rXDZgv/3v98cLSpe1Fp9+ufzVxUtXnbB5FXLl63OfFld8aL2uXVnBx3FvqIAfwjxxxB/KpJOJMCBEJeEuDTEn0NcFqIxxMEQTSEuL5KaJkBLiNYQV4RoC3EoRHuIK0McDnFViKtDHAlxTYhrQ1wX4voQN4S4McRNIW4OcUuIW0PcFuL2EHeEuDPEXSGOhrg7xD0h7g1xX4j7QzwQ4sEQD4V4OMQjIY6FeDTEYyGOh3g8xBMhngzxVIinQzwT4tkQz4V4PsQLIZwQbogTIV4M4YV4KcTJEC+HeCXEqyFeC/F6iDcCJCNZIbOE3YTZwu7CqLCHsKfQEPYSniZ8l7C38N3CmPB0YR9hjrCv8D3CfsL+QlM4QDhQOEh4hnCw8L3CIUJLOFT4PqEtfL9wmPBM4VnCDwg/KDxb+CHhcOEI4YeF5whHCj8i/KhwlPBjwrjw48L/Eo4WfkKYEI4RjhXmCj8pzBOOE44XThBOFE4Sfkr4aeFnhJOFU4RThZ8Vfk44TXiuMCk8Tzhd+HnhF4QzhF8UzhTOEs4WzhF+Sfhl4VeEXxX+t3Cu8GvC84XzhPnC+cIC4QJhoXCh8ALhIuFi4RLhhcKlwouEy4TLhSuEK4WrhEXC1cJi4deFa4TfEF4sXCv8pnCdcL2wRLhB+C3hRuEmYamwTPhtYbkwJawQVgqrhJuF1cLvCL8r/J6wRlgr/L7wB8I6Yb2wQbhF+EPhj4RbhduE24U7hD8W7hT+RPhT4c+EPxfuEv5C+Evhr4S7hb8W7hH+Rvhb4V5hWvg74e+F+4R/EP5R+CfhfuEB4SXCS4V/Fl4mbBQeFDYJLxc2C1uErcIrhG3CQ8J24ZXCw8KrhFcLjwivEV4rvE54vfAG4Y3Cm4Q3C28R3iq8TXi78A7hncK7hEeFdwvvEd4rvE94v/AB4YPCh4QPCx8RHhM+KnxMeFz4uPAJ4ZPCp4RPC58RPit8Tvi88AWhI3SFJ4QvCj3hS8KTwpeFrwhfFb4mfF34hjDSLWSWsJswW9hdGBX2EPYUGsJewtOE7xL2Fr5bGBOeLuwjzBH2Fb5H2E/YX2gKBwgHCgcJzxAOFr5XOERoCYcK3ye0he8XDhOeKTxL+AHhB4VnCz8kHC4cIfyw8BzhSOFHhB8VjhJ+TBgXflz4X8LRwk8IE8IxwrHCXOEnhXnCccLxwgnCicJJwk8JPy38jHCycIpwqvCzws8JpwnPFSaF5wmnCz8v/IJwhvCLwpnCWcLZwjnCLwm/LPyK8KvC/xbOFX5NeL5wnjBfOF9YIFwgLBQuFF4gXCRcLFwivFC4VHiRcJlwuXCFcKVwlbBIuFpYLPy6cI3wG8KLhWuF3xSuE64Xlgg3CL8l3CjcJCwVlgm/LSwXpoQVwkphlXCzsFr4HeF3hd8T1ghrhd8X/kBYJ6wXNgi3CH8o/JFwq3CbcLtwh/DHwp3Cnwh/KvyZ8OfCXcJfCH8p/JVwt/DXwj3C3wh/K9wrTAt/J/y9cJ/wD8I/Cv8k3C88ILxEeKnwz8LLhI3Cg8Im4eXCZmGLsFV4hbBNeEjYLrxSeFh4lfBq4RHhNcJrhdcJrxfeILxReJPwZuEtwluFtwlvF94hvFN4l/Co8G7hPcJ7hfcJ7xc+IHxQ+JDwYeEjwmPCR4WPCY8LHxc+IXxS+JTwaeEzwmeFzwmfF74gdISu8ITwRaEnfEl4Uviy8BXhq8LXhK8L3xBGskNmCbsJs4XdhVFhD2FPoSHsJTxN+C5hb+G7hTHh6cI+whxhX+F7hP2E/YWmcIBwoHCQ8AzhYOF7hUOElnCo8H1CW/h+4TDhmcKzhB8QflB4tvBDwuHCEcIPC88RjhR+RPhR4Sjhx4Rx4ceF/yUcLfyEMCEcIxwrzBV+UpgnHCccL5wgnCicJPyU8NPCzwgnC6cIpwo/K/yccJrwXGFSeJ5wuvDzwi8IZwi/KJwpnCWcLZwj/JLwy8KvCL8q/G/hXOHXhOcL5wnzhfOFBcIFwkLhQuEFwkXCxcIlwguFS4UXCZcJlwtXCFcKVwmLhKuFxcKvC9cIvyG8WLhW+E3hOuF6YYlwg/Bbwo3CTcJSYZnw28JyYUpYIawUVgk3C6uF3xF+V/g9YY2wVvh94Q+EdcJ6YYNwi/CHwh8Jtwq3CbcLdwh/LNwp/Inwp8KfCX8u3CX8hfCXwl8Jdwt/Ldwj/I3wt8K9wrTwd8LfC/cJ/yD8o/BPwv3CA8JLhJcK/yy8TNgoPChsEl4ubBa2CFuFVwjbhIeE7cIrhYeziwqrey5fsXrx8mX+ysTZ1dEFhfOLL6irrO5RtHrV4oLVmaPTLywsXHF+/tKl569efmFh5usqq09bvaqw8PyCpflFRXXnVUcL8gsWFWb+c88Vy4tWLy38Rt15i7KWPJgdiVRHM1a4qm5RS/W7Vq/KX1a0cPmqizJ+XrAEMjdcCcmvNlasWrx81eLVF9dV91iW+Yr8pXXVvfIvmr/4guLgP3bPL169vK46uqrwgsybV1a/Z8Wq5SvyL8hfXXh+5jsuDn/6zA8afLPzCzI/6vz8ggv9X6i670X5F8/PfNnS/ILCRcuXLihc5X9lrHDB4tXnry5cddHiZflLM7/DoqZpkUWXV1b3Xr4q8yWFC84vKlxdVFdR3XvxRSuWr1p9/or81YuK6ubWVb+raHnxqoLC4D9kfnUj887FFywOGs9fzel+bv6qC+uKR/4PySZKEg=='
|
|
4060
|
-
)
|
|
4061
|
-
DATA = pickle.loads(zlib.decompress(base64.b64decode(DATA)))
|
|
4062
|
-
MEMO = (
|
|
4063
|
-
b'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'
|
|
4064
|
-
)
|
|
4065
|
-
MEMO = pickle.loads(zlib.decompress(base64.b64decode(MEMO)))
|
|
4066
|
-
Shift = 0
|
|
4067
|
-
Reduce = 1
|
|
4068
|
-
def Lark_StandAlone(**kwargs):
|
|
4069
|
-
return Lark._load_from_dict(DATA, MEMO, **kwargs)
|