jaclang 0.6.0__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 +115 -7
- jaclang/cli/cmdreg.py +18 -6
- jaclang/compiler/.gitignore +1 -0
- jaclang/compiler/__init__.py +1 -0
- jaclang/compiler/absyntree.py +8 -9
- jaclang/compiler/compile.py +4 -4
- jaclang/compiler/jac.lark +1 -0
- jaclang/compiler/parser.py +16 -3
- jaclang/compiler/passes/main/def_impl_match_pass.py +8 -1
- jaclang/compiler/passes/main/fuse_typeinfo_pass.py +20 -8
- jaclang/compiler/passes/main/import_pass.py +78 -47
- jaclang/compiler/passes/main/pyast_gen_pass.py +6 -57
- jaclang/compiler/passes/main/pyast_load_pass.py +33 -6
- jaclang/compiler/passes/main/pyjac_ast_link_pass.py +218 -0
- jaclang/compiler/passes/main/schedules.py +2 -0
- jaclang/compiler/passes/main/sym_tab_build_pass.py +9 -3
- 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_import_pass.py +11 -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/core/aott.py +10 -1
- jaclang/core/construct.py +157 -21
- jaclang/core/importer.py +6 -2
- jaclang/core/memory.py +48 -0
- jaclang/core/shelve_storage.py +55 -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/__init__.py +1 -2
- jaclang/plugin/builtin.py +1 -1
- jaclang/plugin/default.py +97 -4
- jaclang/plugin/feature.py +28 -9
- jaclang/plugin/spec.py +45 -10
- 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/plugin/tests/test_jaseci.py +219 -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 +17 -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.0.dist-info/METADATA +0 -17
- jaclang-0.6.0.dist-info/RECORD +0 -426
- jaclang-0.6.0.dist-info/entry_points.txt +0 -2
- jaclang-0.6.0.dist-info/top_level.txt +0 -1
- /jaclang/{compiler/generated/__init__.py → vendor/attr/py.typed} +0 -0
- {jaclang-0.6.0.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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AeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAeSRAZdHXmVd1JYsFtsKSyUIH0L4PITAdwiB7xAC3yEEt0MIg4cQBg8hoBxCGDyE8HIIQfEQguIhhJ5DCJGHEIgOIRAdQvg8hPB5CEHqEILUIYTWQwhZhxBoDyHQHkKgPYTgdgjB7RCC8CEE4UMu8F2t7yB9T8U9B0ENGzRM1LBRQ1JDi4ZNGro1TNIQ0rBIQ0pDq4YlGtIabtGwVMMyDZs1LNewQsNKDRkNYQ1ZDRENOQ31GqIa8hq2aAhomK4hpmGrhhkabtJws4aZGlZp2K5hroZbNezQsFPDLg23aRiuYbKGPRp2a1itoU3DGg23a2jU0KChXcNYDXs1rNUwRcMdGhZomKphn4YODes0FDT4NYzTMEbDNA1xDfM17NcwS8MBDXdqSGiYo2Gkhgka7tIwXsPdGooamjQc1NClYZuGTg3rNSxWkAteo12urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2urF2u7Lnctdbl7DDp37onyR97ak5on3e37Dpd5RhAlWMAVY4BVDkGUOUYQJVjAFWOAVQ5BlDlGECVYwBVjgFUOQZQ5RhAlWMAVY4BVDkGUOUYQJVjAFWOAVQ5BlDlGECVYwBVjgFUOQZQ5RhAlWMAVY4BVDkGUOUYQJVjAFWOAVQ5BlDlGECVYwBVjgFUOQZQ5RhAlWMAVY4BVDkGUOUYQJVjAFWOAVQ5BlDlGECVYwBVjgFUOQZQ5RhAlWMAVY4BVDkGUOUYQJVjAFWOAVQ5BlDl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YeoxwtRjhKnHCFOPEaYeI0w9Rph6jDD1GGHqMcLUY4SpxwhTjxGmHiNMPUaYeoww9Rhh6jHC1GOEqccIU48Rph4jTD1GmHqMMPUYYeoxwtRjhKnHCFOPEaYeI0w9Rpj67AhzDo22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22EY22Mdtoz6PR2vAESBueqGnD8xJteF6iDc/XtOGZiDY8L9GGZ2/a8Hw/G57vZ8PTE214eqINz5G04TmSNjwXMKunID+0AFoB7Yb2QUuh9dB+qYh2wdq916znmT+NRVuZZ35BYxZinruV7HnHX1rNr2apPG/+Ri1auzWW3Z6+YBxo91qND5UYr2SM/840XhirToc9rz40SH3oCePgPnUw1fxDWionmb8aS+VXjf/+m5oHqXnAvxsH/2QcGD+gcXRIvaQmrD9UB/9hHGTUxxaojy0wfjxjamAcvZlr/kIs2t+rD05WL12yxrJzv4fUux5QL/21+mCeOvqZOlqojjaqn+5z6uglY3TXeqsjh/poH3U0JNf8cxnfwGa2BWMKrA5+Zhx41Sd+Vr1pn/rEL6ijH9nMv5LxPXNv/iqXqHcVq495c2PZifY96qsPVS/91GY2WouWtpmtyaL9s+3mb36qelOBetO/qq9uV781h3HQX730ZfUv+rw6qssz/9gWLaJeGmb+DHlm+7Zoy/LMRmnRFubFsrOeztxYdoo/Os9s58Ys0JiTaVXmScvq24xRR1NzzI5l0aaoD1rUS6dtZsu0aH9jVQ3iouyXle+IsSSLSomVEgMkVkmslpghsUZircRACU1ipsSzEk9K+CWek1gnEZAISjwvMUtitsQcifUScyU2SDwtEZGwScyT2CihSxRLlEjMl9gk4ZZ4RmKBhEdioURUokxii8RWiVqJbRLbJXpJDJLYIVEnUSWxSKJaYqdEH4lcicUS+RK7JEISQyRekKiQGCaxW2KJxFKJmMQ4iX4SfSUmSNRITJfYI1EqsVeiXmKFxFSJ3hL9JRok7BKNEvskyiX2SyyT2CwRllgu8ZRA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B2VAa0BrQRZoPMgLGg2aCIqDZoL6QJ2gLKgftA7UBRoJagUNgFpAB0AHQTNAg6D7QQ+A7gPFQHdJMiO/U6+qH29WVXUkquog7LsadYPGglKg3SAdtAG0F7QStA/UBhoFmgtaBRoD6gWtBo0DtYPWgOaDLNACkBe0EGSARoMmgraCmkGLQdtAM0GTQEtAU0BTQVlQJ6gLNBLUCmoBLQftAE0HzQANSjIjHhy0eUiBPKRAHlIgDymQhxTIQwrkIQXykAJ5SIE8pEAeUiAPKZCHFMhDCuQhBfKQAnlIgTykQB5SIA8pkIcUyEMK5CEF8pACeUiBPKRAHlIgDymQhxTIQwrkIQXykAJ5SIE8pEAeUiAPKZCHFMhDCuQhBfKQAnlIgTykQB5SIA8pkIcUyEMK5CEF8pACeUiBPKRAHlIgDymQhxTIQwrkIQXykAJ5SIE8pEAeUiAPKZCHFMhDCuQhBfKQAnlIgTykQB5SIA8pkIcUyEMK5CEF8pACeUiBPKRAHlIgDymQhxTIQwrkIQXykAJ5SIE8pEAeUiAPKZCHFMhDCuQhBfKQAnlIgTykQB5SIA8pkIcUyEMK5CEF8jUpMEr7uZ/r6b7N+i/3sZ73P81zdp/m+QD80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj90jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80jj80njNLx3t1O0P23X8piar9jnCsIoQ3mEv/lXdolr0tiardmpIs0kU8m9DJNZotiQzMkb5Bk32N77YpHwDL5qEFwXdi4LuRUH3oqB7UdC9KOheFHQvKrgXFdyLCu5FBfeigntRwb2o4F5UcC8quBcV3IsK7kUF96KC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DROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDdeaDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROiDROizYiq/40weggX8yEEx0MY+ocw9A8hVB7C8D6EoX8IYfQQTtUhnKpDuBAO4UI4hJBwCCHhEE7xIfzRhxBiDyFAHMIpPoRBewgn5xAG7SEEzkM4VYeMF/mH+os8Pj93PWE8nMv47NP61+6DGqFaqZCWxV0f3xUXroFhEgMkKiSGSAyVGCgxXKJS4joJk0SdxDaJFomlEq0SyyW2S4yU8EqMkvBJzJVISMyX2CyxRaJUIiyxQGKhxHSJXRJLJLZKdEh0CoS0Plyh+3GF7scVuh9X6H6Mp/24QvfjCt2PK3Q/rtD9uEL34wrdjyt0P67Q/bhC9+MK3Y8rdD+u0P24QvfjCt2PK3Q/rtD9uEL34wrdjyt0P67Q/caV9SO8yNcXi4F9SXVQABoGrYXWQfVQEFoPDYc0aDb0KHQ/NAfaAG2EHoQegh6D5kIPQ/OgTdB8aDP0CBSCSqEF0BYoDFVB1dBCKAI5oEXQYmg6tATaCrmhGBSHGqFtUBM0ABoBtUDNUAO0FFoGtUIDoTJoOTQY2g55oZHQDqgWGgW1QT5oBZSAxkKV0CBoArQamgnthGZAu6DHoTWQC6qAhkK7oSFQO9QBeaBOaBUUhVZCfugBqZD2Y4TRFMJoCmE0hTCaQhhNIYymEEZTCKMphNEUwmgKYTSFMJpCGE0hjKYQRlMIoymE0RTCaAphNIUwmkIYTSGMphBGUwijKYTRFMJoCmE0hTCaQhhNIYymEEZTCKMphNEUwmgKYTSFMJpCGE0hjKYQRlMIoymE0RTCaAphNIUwmkIYTSGMphBGUwijKYTRFMJoCmE0hTCaQhhNIYymEEZTCKMphNEU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5xDJc4jkOUTyHCJ5DpE8h0ieQyTPIT7njIjs08OhetPIJcWFgFksYrM2rjj/2b+Wofg9Vql/K/+1f/pusVkbr57f0VYug/PlmLxC/yXUStKExBf0laUDiZ9aUdqmvm7lz14U1r5YmvhNWhX+9VwN/oAPyVz1HuPi4Q/zcarXxsUnalz4kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kev5kesZWgVFoZWQH3pAKqSt1sNoYSj2YI9xD/YY92CPcQ/2GPdgj3EP9hj3YI9xD/YY92CPcQ/2GPdgj3EP9hj3YI9xD/YY92CPcQ/2GPdgj3EP9hj3YI9xD/YY92CPcQ/2GPdgj3EP9hj3YI9xD/YY92CPcQ/2GPdgj3EP9hj3YI9xD/YY92CPcQ/2GPdgj7EhF+SGaiAPVAoVQ8ugfdBq6Bj0NHQcGg/Ngp6ATkAnoWegU9Bp6Az0LFQONUINUBlUC52FzkHPQeelQtoa/YJVZdMXEsYOvR2Jy/VUSAtcVdH3TuLqir6rKvbylaFWqn7G5apvrfotjB/15Xf7LT68H375Z667tl6auLZe+pHdOfxxfAM99Szb7yQ+ygcqB/WLSgWUv01cnkuOYC45ghnwCObtI5i3j2AGPIJZ5wjyiyOYxY9g3j6C/OIIZqQjmJGOYNY5ghnpCGarI4jtRxDbj2C2OoJIfwRz1xHE/SOI+0cQ949gljuCWeAI5rwjmPOOYIY48v/aO/PAKOq7/89OCKUUAVv72LFaZ8Y5PCKoReqFIAilrGNqvGqUI0AkyOkkQURAAV1RQ+kBPZ/ely291+3uSq1aOZYbbKv1viptn9rjebbXs0mf+e1kPqTf1w/boqL1iH/4nlcSkjB89z2fz3s/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'
|
|
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)
|