diff --git a/.idea/runConfigurations/module_programming_apted.xml b/.idea/runConfigurations/module_programming_apted.xml new file mode 100644 index 000000000..0465f1c6b --- /dev/null +++ b/.idea/runConfigurations/module_programming_apted.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/module_programming_winnowing.xml b/.idea/runConfigurations/module_programming_winnowing.xml new file mode 100644 index 000000000..5f57e786c --- /dev/null +++ b/.idea/runConfigurations/module_programming_winnowing.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/.prospector.yaml b/.prospector.yaml index 2add2d6b2..bd97b9978 100644 --- a/.prospector.yaml +++ b/.prospector.yaml @@ -8,6 +8,8 @@ ignore-paths: - module_programming_themisml/extract_methods/languages - module_programming_themisml/extract_methods/method_parser_listener.py - module_programming_apted/convert_code_to_ast/languages + - module_programming_winnowing/convert_code_to_ast/languages + - module_programming_winnowing/test_codes mypy: run: true diff --git a/assessment_module_manager/modules.docker.ini b/assessment_module_manager/modules.docker.ini index 53a2b83f8..ba23b665b 100644 --- a/assessment_module_manager/modules.docker.ini +++ b/assessment_module_manager/modules.docker.ini @@ -38,7 +38,7 @@ url = http://module-programming-apted:5006 type = programming supports_evaluation = false supports_non_graded_feedback_requests = false -supports_graded_feedback_requests = false +supports_graded_feedback_requests = true [module_modeling_llm] url = http://module-modeling-llm:5008 @@ -47,3 +47,9 @@ supports_evaluation = false supports_non_graded_feedback_requests = true supports_graded_feedback_requests = true +[module_programming_winnowing] +url = http://module-programming-winnowing:5009 +type = programming +supports_evaluation = false +supports_non_graded_feedback_requests = false +supports_graded_feedback_requests = true diff --git a/assessment_module_manager/modules.ini b/assessment_module_manager/modules.ini index cbe4a406c..6baa92caa 100644 --- a/assessment_module_manager/modules.ini +++ b/assessment_module_manager/modules.ini @@ -38,7 +38,7 @@ url = http://localhost:5006 type = programming supports_evaluation = false supports_non_graded_feedback_requests = false -supports_graded_feedback_requests = false +supports_graded_feedback_requests = true [module_modeling_llm] url = http://localhost:5008 @@ -47,3 +47,10 @@ supports_evaluation = false supports_non_graded_feedback_requests = true supports_graded_feedback_requests = true +[module_programming_winnowing] +url = http://localhost:5009 +type = programming +supports_evaluation = false +supports_non_graded_feedback_requests = false +supports_graded_feedback_requests = true + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 35a9aef9d..09f54753a 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -71,6 +71,14 @@ services: - postgres image: ls1tum/athena_module_programming_apted:${ATHENA_TAG:-develop} + module_programming_winnowing: + hostname: module-programming-winnowing + env_file: + - ${ATHENA_ENV_DIR:-./env_example}/module_programming_winnowing.env + depends_on: + - postgres + image: ls1tum/athena_module_programming_winnowing:${ATHENA_TAG:-develop} + module_modeling_llm: hostname: module-modeling-llm env_file: diff --git a/docker-compose.yml b/docker-compose.yml index 54dcefbeb..64f4b221e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -82,3 +82,11 @@ services: - llm_core ports: - "5008:5008" + + module_programming_winnowing: + hostname: module-programming-winnowing + build: modules/programming/module_programming_winnowing + depends_on: + - athena + ports: + - "5009:5009" diff --git a/env_example/module_programming_winnowing.env b/env_example/module_programming_winnowing.env new file mode 100644 index 000000000..209f50dda --- /dev/null +++ b/env_example/module_programming_winnowing.env @@ -0,0 +1,3 @@ +PRODUCTION=1 +SECRET=12345abcdef +DATABASE_URL=postgresql://postgres:password@postgres:5432/athena diff --git a/modules/programming/module_example/module_example/__main__.py b/modules/programming/module_example/module_example/__main__.py index 182f160bb..df64d4369 100644 --- a/modules/programming/module_example/module_example/__main__.py +++ b/modules/programming/module_example/module_example/__main__.py @@ -1,5 +1,5 @@ """ -Entry point for the module_example module. +Entry point for the module_example. """ import random from typing import List, Any @@ -13,7 +13,7 @@ @config_schema_provider class Configuration(BaseModel): - """Example configuration for the module_example module.""" + """Example configuration for the module_example.""" debug: bool = Field(False, description="Whether the module is in **debug mode**. This is an example config option.") diff --git a/modules/programming/module_programming_apted/poetry.lock b/modules/programming/module_programming_apted/poetry.lock index 2dfe709a1..8bfd637fe 100644 --- a/modules/programming/module_programming_apted/poetry.lock +++ b/modules/programming/module_programming_apted/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -27,9 +27,9 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "apted" @@ -44,19 +44,15 @@ files = [ [[package]] name = "astroid" -version = "2.15.8" +version = "3.3.5" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.9.0" files = [ - {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, - {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, + {file = "astroid-3.3.5-py3-none-any.whl", hash = "sha256:a9d1c946ada25098d790e079ba2a1b112157278f3fb7e718ae6a9252f5835dc8"}, + {file = "astroid-3.3.5.tar.gz", hash = "sha256:5cfc40ae9f68311075d27ef68a4841bdc5cc7f6cf86671b49f00607d30188e2d"}, ] -[package.dependencies] -lazy-object-proxy = ">=1.4.0" -wrapt = {version = ">=1.14,<2", markers = "python_version >= \"3.11\""} - [[package]] name = "athena" version = "1.0.0" @@ -77,8 +73,8 @@ uvicorn = "^0.23.0" [package.source] type = "git" url = "https://github.com/ls1intum/Athena.git" -reference = "ccd00cf8346e76738a66e7f4cf04c84aa4cb4378" -resolved_reference = "ccd00cf8346e76738a66e7f4cf04c84aa4cb4378" +reference = "bbb2bb0" +resolved_reference = "bbb2bb02480496362647205ab517f202673e9bb2" subdirectory = "athena" [[package]] @@ -119,13 +115,13 @@ files = [ [[package]] name = "dill" -version = "0.3.8" +version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] @@ -164,19 +160,19 @@ all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" [[package]] name = "flake8" -version = "5.0.4" +version = "7.1.1" description = "the modular source code checker: pep8 pyflakes and co" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8.1" files = [ - {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, - {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, + {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, + {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.9.0,<2.10.0" -pyflakes = ">=2.5.0,<2.6.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "flake8-polyfill" @@ -226,69 +222,84 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", [[package]] name = "greenlet" -version = "3.0.3" +version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" files = [ - {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, - {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, - {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, - {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, - {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, - {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, - {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, - {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, - {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, - {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, - {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, - {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, - {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, - {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, - {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, - {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, + {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, + {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, + {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, + {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, + {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, + {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, + {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, + {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, + {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, + {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, + {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, + {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, + {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, ] [package.extras] @@ -352,15 +363,18 @@ socks = ["socksio (==1.*)"] [[package]] name = "idna" -version = "3.8" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ - {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, - {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "isort" version = "5.13.2" @@ -393,52 +407,6 @@ url = "https://github.com/c2nes/javalang" reference = "HEAD" resolved_reference = "566963547575e93d305871d9cb26ce47ff1a036e" -[[package]] -name = "lazy-object-proxy" -version = "1.10.0" -description = "A fast and thorough lazy object proxy." -optional = false -python-versions = ">=3.8" -files = [ - {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, - {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, -] - [[package]] name = "mccabe" version = "0.7.0" @@ -452,38 +420,43 @@ files = [ [[package]] name = "mypy" -version = "1.11.2" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -492,6 +465,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -509,13 +483,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -534,90 +508,85 @@ flake8-polyfill = ">=1.0.2,<2" [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "prospector" -version = "1.10.3" +version = "1.13.3" description = "Prospector is a tool to analyse Python code by aggregating the result of other tools." optional = false -python-versions = ">=3.7.2,<4.0" +python-versions = "<4.0,>=3.9" files = [ - {file = "prospector-1.10.3-py3-none-any.whl", hash = "sha256:8567df2218cdc97d29f297ee3e3b54b96b3a2dab835931955c3a7bbd95aff6f7"}, - {file = "prospector-1.10.3.tar.gz", hash = "sha256:f29ab19fd430869eb34490761af77406d2cfedd9b50292cf4d8db0288c9d764a"}, + {file = "prospector-1.13.3-py3-none-any.whl", hash = "sha256:e7261c222ba54bc8aef8c9e31b2dcf5ed2a656c9b76fc0cceab294cd5ec3db6b"}, + {file = "prospector-1.13.3.tar.gz", hash = "sha256:36ccb13f69aa27c5c4682afd4cc46219b9e0c80723e30dc64ff30c71f7b877a1"}, ] [package.dependencies] dodgy = ">=0.2.1,<0.3.0" -flake8 = "<6.0.0" GitPython = ">=3.1.27,<4.0.0" mccabe = ">=0.7.0,<0.8.0" packaging = "*" pep8-naming = ">=0.3.3,<=0.10.0" pycodestyle = ">=2.9.0" pydocstyle = ">=2.0.0" -pyflakes = ">=2.2.0,<3" -pylint = ">=2.8.3" +pyflakes = ">=2.2.0" +pylint = ">=3.0" pylint-celery = "0.3" -pylint-django = ">=2.5,<2.6" +pylint-django = ">=2.6.1" pylint-flask = "0.6" -pylint-plugin-utils = ">=0.7,<0.8" PyYAML = "*" -requirements-detector = ">=1.2.0" +requirements-detector = ">=1.3.2" setoptconf-tmp = ">=0.3.1,<0.4.0" toml = ">=0.10.2,<0.11.0" [package.extras] with-bandit = ["bandit (>=1.5.1)"] -with-everything = ["bandit (>=1.5.1)", "mypy (>=0.600)", "pyright (>=1.1.3)", "pyroma (>=2.4)", "vulture (>=1.5)"] +with-everything = ["bandit (>=1.5.1)", "mypy (>=0.600)", "pyright (>=1.1.3)", "pyroma (>=2.4)", "ruff", "vulture (>=1.5)"] with-mypy = ["mypy (>=0.600)"] with-pyright = ["pyright (>=1.1.3)"] with-pyroma = ["pyroma (>=2.4)"] +with-ruff = ["ruff"] with-vulture = ["vulture (>=1.5)"] [[package]] name = "psycopg2" -version = "2.9.9" +version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"}, - {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, - {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, - {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, - {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, - {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, - {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, - {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, - {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, - {file = "psycopg2-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:bac58c024c9922c23550af2a581998624d6e02350f4ae9c5f0bc642c633a2d5e"}, - {file = "psycopg2-2.9.9-cp39-cp39-win32.whl", hash = "sha256:c92811b2d4c9b6ea0285942b2e7cac98a59e166d59c588fe5cfe1eda58e72d59"}, - {file = "psycopg2-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913"}, - {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, + {file = "psycopg2-2.9.10-cp310-cp310-win32.whl", hash = "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716"}, + {file = "psycopg2-2.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a"}, + {file = "psycopg2-2.9.10-cp311-cp311-win32.whl", hash = "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2"}, + {file = "psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4"}, + {file = "psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067"}, + {file = "psycopg2-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e"}, + {file = "psycopg2-2.9.10-cp39-cp39-win32.whl", hash = "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b"}, + {file = "psycopg2-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442"}, + {file = "psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11"}, ] [[package]] name = "pycodestyle" -version = "2.9.1" +version = "2.12.1" description = "Python style guide checker" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, - {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, ] [[package]] @@ -698,31 +667,31 @@ toml = ["tomli (>=1.2.3)"] [[package]] name = "pyflakes" -version = "2.5.0" +version = "3.2.0" description = "passive checker of Python programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, - {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] [[package]] name = "pylint" -version = "2.17.7" +version = "3.3.2" description = "python code static checker" optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.9.0" files = [ - {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, - {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, + {file = "pylint-3.3.2-py3-none-any.whl", hash = "sha256:77f068c287d49b8683cd7c6e624243c74f92890f767f106ffa1ddf3c0a54cb7a"}, + {file = "pylint-3.3.2.tar.gz", hash = "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01"}, ] [package.dependencies] -astroid = ">=2.15.8,<=2.17.0-dev0" +astroid = ">=3.3.5,<=3.4.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = {version = ">=0.3.6", markers = "python_version >= \"3.11\""} -isort = ">=4.2.5,<6" +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomlkit = ">=0.10.1" @@ -748,22 +717,21 @@ pylint-plugin-utils = ">=0.2.1" [[package]] name = "pylint-django" -version = "2.5.3" +version = "2.6.1" description = "A Pylint plugin to help Pylint understand the Django web framework" optional = false -python-versions = "*" +python-versions = "<4.0,>=3.9" files = [ - {file = "pylint-django-2.5.3.tar.gz", hash = "sha256:0ac090d106c62fe33782a1d01bda1610b761bb1c9bf5035ced9d5f23a13d8591"}, - {file = "pylint_django-2.5.3-py3-none-any.whl", hash = "sha256:56b12b6adf56d548412445bd35483034394a1a94901c3f8571980a13882299d5"}, + {file = "pylint-django-2.6.1.tar.gz", hash = "sha256:19e8c85a8573a04e3de7be2ba91e9a7c818ebf05e1b617be2bbae67a906b725f"}, + {file = "pylint_django-2.6.1-py3-none-any.whl", hash = "sha256:359f68fe8c810ee6bc8e1ab4c83c19b15a43b234a24b08978f47a23462b5ce28"}, ] [package.dependencies] -pylint = ">=2.0,<3" -pylint-plugin-utils = ">=0.7" +pylint = ">=3.0,<4" +pylint-plugin-utils = ">=0.8" [package.extras] -for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] -with-django = ["Django"] +with-django = ["Django (>=2.2)"] [[package]] name = "pylint-flask" @@ -780,13 +748,13 @@ pylint-plugin-utils = ">=0.2.1" [[package]] name = "pylint-plugin-utils" -version = "0.7" +version = "0.8.2" description = "Utilities and helpers for writing Pylint plugins" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7,<4.0" files = [ - {file = "pylint-plugin-utils-0.7.tar.gz", hash = "sha256:ce48bc0516ae9415dd5c752c940dfe601b18fe0f48aa249f2386adfa95a004dd"}, - {file = "pylint_plugin_utils-0.7-py3-none-any.whl", hash = "sha256:b3d43e85ab74c4f48bb46ae4ce771e39c3a20f8b3d56982ab17aa73b4f98d535"}, + {file = "pylint_plugin_utils-0.8.2-py3-none-any.whl", hash = "sha256:ae11664737aa2effbf26f973a9e0b6779ab7106ec0adc5fe104b0907ca04e507"}, + {file = "pylint_plugin_utils-0.8.2.tar.gz", hash = "sha256:d3cebf68a38ba3fba23a873809155562571386d4c1b03e5b4c4cc26c3eee93e4"}, ] [package.dependencies] @@ -856,20 +824,19 @@ files = [ [[package]] name = "requirements-detector" -version = "1.2.2" +version = "1.3.2" description = "Python tool to find and list requirements of a Python project" optional = false -python-versions = ">=3.7,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "requirements_detector-1.2.2-py3-none-any.whl", hash = "sha256:d7c60493bf166da3dd59de0e6cb25765e0e32a1931aeae92614034e5786d0bd0"}, - {file = "requirements_detector-1.2.2.tar.gz", hash = "sha256:3642cd7a5b261d79536c36bb7ecacf2adabd902d2e0e42bfb2ba82515da10501"}, + {file = "requirements_detector-1.3.2-py3-none-any.whl", hash = "sha256:e7595a32a21e5273dd54d3727bfef4591bbb96de341f6d95c9671981440876ee"}, + {file = "requirements_detector-1.3.2.tar.gz", hash = "sha256:af5a3ea98ca703d14cf7b66751b2aeb3656d02d9e5fc1c97d7d4da02b057b601"}, ] [package.dependencies] -astroid = ">=2.0,<3.0" +astroid = ">=3.0,<4.0" packaging = ">=21.3" semver = ">=3.0.0,<4.0.0" -toml = ">=0.10.2,<0.11.0" [[package]] name = "semver" @@ -942,60 +909,68 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.33" +version = "2.0.36" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.33-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:63b7d9890f7958dabd95cf98a3f48740fbe2bb0493523aef590e82164fa68194"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:32a4f38d2efca066ec793451ef6852cb0d9086dc3d5479d88a5a25529d1d1861"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3926e4ed4a3e956c8b2b0f1140493378c8cd17cad123b4fc1e0f6ecd3e05b19"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2415824ec658891ac38d13a2f36b4ceb2033f034dee1c226f83917589a65f072"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:92249ac94279b8e5f0c0c8420e09b804d0a49d2269f52f549d4cb536c8382434"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9f4f92eee7d06531cc6a5b814e603a0c7639876aab03638dcc70c420a3974f6"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-win32.whl", hash = "sha256:4f1c44c8d66101e6f627f330d8b5b3de5ad25eedb6df3ce39a2e6f92debbcf15"}, - {file = "SQLAlchemy-2.0.33-cp310-cp310-win_amd64.whl", hash = "sha256:3ad94634338d8c576b1d47a96c798be186650aa5282072053ce2d12c6f309f82"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570ec43e8c3c020abac4f0720baa5fe5187334e3f1e8e1777183c041962b61cc"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81759e77a4985abdbac068762a0eaf0f11860fe041ad6da170aae7615ea72531"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49541a43828e273325c520fbacf786615bd974dad63ff60b8ea1e1216e914d1a"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c72da5be489c8d150deba70d5732398695418df5232bceb52ee323ddd9753b"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31e56020832be602201fbf8189f379569cf5c3604cdc4ce79f10dbbfcbf8a0eb"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:30a3f55be76364b64c83788728faaba782ab282a24909e1994404c2146d39982"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-win32.whl", hash = "sha256:17d0c69f66392ad2db1609373a74d1f834b2e632f3f52d446747b8ec220aea53"}, - {file = "SQLAlchemy-2.0.33-cp311-cp311-win_amd64.whl", hash = "sha256:c5d5a733c6af7f392435e673d1b136f6bdf2366033abb35eed680400dc730840"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d81e3aeab456fe24c3f0dcfd4f952a3a5ee45e9c14fc66d34c1d7a60cf7b698"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca8788dc1baee100f09110f33a01d928cf9df4483d2bfb25a37be31a659d46bb"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60c54b677d4f0a0b2df3b79e89e84d601fb931c720176641742efd66b50601f9"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684aee5fd811091b2f48006fb3fe6c7f2de4a716ef8d294a2aab762099753133"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee2b82b170591ccd19d463c9798a9caeea0cad967a8d2f3264de459f582696d5"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1109cc6dc5c9d1223c42186391e6a5509e6d4ab2c30fa629573c10184f742f2e"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-win32.whl", hash = "sha256:c633e2d2f8a7b88c06e276bbe16cb7e62fed815fcbeb69cd9752cea166ecb8e8"}, - {file = "SQLAlchemy-2.0.33-cp312-cp312-win_amd64.whl", hash = "sha256:77eaf8fdf305266b806a91ae4633edbf86ad37e13bd92ac85e305e7f654c19a5"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67eb8e0ffbebd3d82ec5079ca5f807a661c574b482785483717857c2acab833a"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3da2371628e28ef279f3f756f5e58858fad7820de08508138c9f5f9e4d8f4ac"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c82a7930126bb5ccfbb73fc1562d52942fbffb2fda2791fab49de249fc202a"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d004a623ad4aa8d2eb31b37e65b5e020c9f65a1852b8b9e6301f0e411aca5b9a"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:06b30bbc43c6dd8b7cdc509cd2e58f4f1dce867565642e1d1a65e32459c89bd0"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-win32.whl", hash = "sha256:459099ab8dd43a5edbb99f58ba4730baec457df9c06ebc71434c6b4b78cc8cf9"}, - {file = "SQLAlchemy-2.0.33-cp37-cp37m-win_amd64.whl", hash = "sha256:3c64d58e83a68e228b1ae6ebac8721241e9d8cc5e0c0dd11ed5d89155477b243"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9d035a672d5b3e4793a4a8865c3274a7bbbac7fac67a47b415023b5539105087"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:61e9a2d68a5a8ca6a84cbc79aa7f2e430ae854d3351d6e9ceb3edf6798797b63"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93efa4b72f7cb70555b0f66ee5e113ae40073c57054a72887e50b05bfd97baa4"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac252bafe8cbadfac7b1e8a74748ffd775e27325186d12b82600b652d9adcb86"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2b1e98507ec2aa200af980d592e936e9dac1c1ec50acc94330ae4b13c55d6fea"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:523ae689c023cbf0fe1613101254824515193f85f806ba04611dee83302660b5"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-win32.whl", hash = "sha256:7fd0a28bc24a75326f13735a58272247f65c9e8ee16205eacb2431d6ee94f44a"}, - {file = "SQLAlchemy-2.0.33-cp38-cp38-win_amd64.whl", hash = "sha256:0ea64443a86c3b5a0fd7c93363ad2f9465cb3af61f9920b7c75d1a7bebbeef8a"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e5819822050e6e36e2aa41260d05074c026a1bbb9baa6869170b5ce64db7a4d"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8bef11d31a1c48f5943e577d1ef81085ec1550c37552bfc9bf8e5d184ce47142"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06504d9625e3ef114b39803ebca6f379133acad58a87c33117ddc5df66079915"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454e9b4355f0051063daebc4060140251c19f33fc5d02151c347431860fd104b"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28c0800c851955f5bd11c0b904638c1343002650d0c071c6fbf0d157cc78627d"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:816c927dd51e4951d6e79870c945340057a5d8e63543419dee0d247bd67a88f8"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-win32.whl", hash = "sha256:c40e0213beaf410a151e4329e30c73687838c251c998ba1b312975dbbcb2d05d"}, - {file = "SQLAlchemy-2.0.33-cp39-cp39-win_amd64.whl", hash = "sha256:751eaafa907a66dd9a328a9d15c3dcfdcba3ef8dd8f7f4a9771cdacdec45d9bf"}, - {file = "SQLAlchemy-2.0.33-py3-none-any.whl", hash = "sha256:ae294808afde1b14a1a69aa86a69cadfe391848bbb233a5332a8065e4081cabc"}, - {file = "sqlalchemy-2.0.33.tar.gz", hash = "sha256:91c93333c2b37ff721dc83b37e28c29de4c502b5612f2d093468037b86aa2be0"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win32.whl", hash = "sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl", hash = "sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win32.whl", hash = "sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win_amd64.whl", hash = "sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win32.whl", hash = "sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win_amd64.whl", hash = "sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a"}, + {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, + {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, ] [package.dependencies] @@ -1009,7 +984,7 @@ aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] mssql-pyodbc = ["pyodbc"] @@ -1069,13 +1044,13 @@ files = [ [[package]] name = "types-requests" -version = "2.32.0.20240712" +version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358"}, - {file = "types_requests-2.32.0.20240712-py3-none-any.whl", hash = "sha256:f754283e152c752e46e70942fa2a146b5bc70393522257bb85bd1ef7e019dcc3"}, + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, ] [package.dependencies] @@ -1094,13 +1069,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -1127,86 +1102,7 @@ h11 = ">=0.8" [package.extras] standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - [metadata] lock-version = "2.0" python-versions = "3.11.*" -content-hash = "a53e66a0790b33594a57d50f7007016f3c516ba3759b7b85bdfa15a215fc44b1" +content-hash = "37947358b1074c5e12a32c34b7db21e77ea08ff533f2b01684dcd0821e6499ae" diff --git a/modules/programming/module_programming_apted/pyproject.toml b/modules/programming/module_programming_apted/pyproject.toml index ac3ef5ab0..dee26fc11 100644 --- a/modules/programming/module_programming_apted/pyproject.toml +++ b/modules/programming/module_programming_apted/pyproject.toml @@ -9,7 +9,7 @@ license = "MIT" python = "3.11.*" # if you have local changes in the common Athena module, use the line below. Otherwise, please use a VCS stable version. Also, a version with tag = "" is possible. # athena = { path = "../athena", develop = true } -athena = { git = "https://github.com/ls1intum/Athena.git", rev = "ccd00cf8346e76738a66e7f4cf04c84aa4cb4378", subdirectory = "athena"} +athena = { git = "https://github.com/ls1intum/Athena.git", rev = "bbb2bb0", subdirectory = "athena"} apted = "^1.0.3" antlr4-python3-runtime = "^4.13.1" javalang = {git = "https://github.com/c2nes/javalang"} diff --git a/modules/programming/module_programming_winnowing/.dockerignore b/modules/programming/module_programming_winnowing/.dockerignore new file mode 100644 index 000000000..892b6a92a --- /dev/null +++ b/modules/programming/module_programming_winnowing/.dockerignore @@ -0,0 +1,4 @@ +.venv +.vscode +__pycache__ +.DS_Store \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/.vscode/settings.json b/modules/programming/module_programming_winnowing/.vscode/settings.json new file mode 100644 index 000000000..9a77d359f --- /dev/null +++ b/modules/programming/module_programming_winnowing/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python.pythonPath": "./.venv/bin/python", + "python.analysis.typeCheckingMode": "basic", +} \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/Dockerfile b/modules/programming/module_programming_winnowing/Dockerfile new file mode 100644 index 000000000..a0f0db55a --- /dev/null +++ b/modules/programming/module_programming_winnowing/Dockerfile @@ -0,0 +1,29 @@ +# syntax=docker/dockerfile:1 + +# This is the Dockerfile for the module_programming_winnowing. + +FROM python:3.11 +LABEL org.opencontainers.image.source=https://github.com/ls1intum/Athena + +# Environment variable Python in Docker +ENV PYTHONUNBUFFERED=1 + +WORKDIR /code + +# Poetry +RUN pip install --no-cache-dir poetry==1.5.0 + +# Dependencies +COPY pyproject.toml poetry.lock ./ +# athena module (from the Dockerfile in the athena folder) +COPY --from=athena /code /athena +# install dependencies +RUN poetry config virtualenvs.create true \ + && poetry config virtualenvs.in-project true \ + && poetry install --no-interaction --no-ansi + +# Project files +COPY . ./ + +# poetry scripts don't work here +CMD poetry run python -m module_* \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/README.md b/modules/programming/module_programming_winnowing/README.md new file mode 100644 index 000000000..0bed60b25 --- /dev/null +++ b/modules/programming/module_programming_winnowing/README.md @@ -0,0 +1,8 @@ +# Start Directly +`poetry run module` + +# Start with Docker +`docker-compose up --build` + +# Start with Docker in Production Mode +`docker-compose up --env-file .env.production --build` \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module.conf b/modules/programming/module_programming_winnowing/module.conf new file mode 100644 index 000000000..4de9dda80 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module.conf @@ -0,0 +1,4 @@ +[module] +name = module_programming_winnowing +type = programming +port = 5009 diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/__main__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/__main__.py new file mode 100644 index 000000000..0f9cfd43e --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/__main__.py @@ -0,0 +1,171 @@ +""" +Entry point for the module_programming_winnowing module. +""" +import random +from typing import List, Any, cast +from pydantic import BaseModel, Field + +from athena import app, config_schema_provider, submissions_consumer, submission_selector, feedback_consumer, feedback_provider, evaluation_provider, emit_meta +from athena.programming import Exercise, Submission, Feedback, get_stored_feedback_suggestions, \ + count_stored_submissions, get_stored_submissions +from athena.logger import logger +from athena.storage import store_exercise, store_submissions, store_feedback, store_feedback_suggestions +from module_programming_winnowing.convert_code_to_ast.get_feedback_methods import get_feedback_method +from module_programming_winnowing.feedback_suggestions.feedback_suggestions import create_feedback_suggestions +from module_programming_winnowing.feedback_suggestions.remove_overlapping import filter_overlapping_suggestions +from module_programming_winnowing.feedback_suggestions.remove_suspicious import filter_suspicious + + +@config_schema_provider +class Configuration(BaseModel): + """Example configuration for the module_programming_winnowing module.""" + debug: bool = Field(False, description="Whether the module is in **debug mode**. This is an example config option.") + + +@submissions_consumer +def receive_submissions(exercise: Exercise, submissions: List[Submission], module_config: Configuration): + logger.info("receive_submissions: Received %d submissions for exercise %d", len(submissions), exercise.id) + for submission in submissions: + logger.info("- Submission %d", submission.id) + zip_content = submission.get_zip() + # list the files in the zip + for file in zip_content.namelist(): + logger.info(" - %s", file) + # Do something with the submissions + logger.info("Doing stuff") + + # Example use module config + # If you are not using module_config for your module, you can remove it from the function signature + logger.info("Config: %s", module_config) + if module_config.debug: + emit_meta('debug', True) + emit_meta('comment', 'You can add any metadata you want here') + + # Add data to exercise + exercise.meta["some_data"] = "some_value" + logger.info("- Exercise meta: %s", exercise.meta) + + # Add data to submission + for submission in submissions: + submission.meta["some_data"] = "some_value" + logger.info("- Submission %d meta: %s", submission.id, submission.meta) + + store_exercise(exercise) + store_submissions(submissions) + + +@submission_selector +def select_submission(exercise: Exercise, submissions: List[Submission]) -> Submission: + logger.info("select_submission: Received %d submissions for exercise %d", len(submissions), exercise.id) + for submission in submissions: + logger.info("- Submission %d", submission.id) + # Do something with the submissions and return the one that should be assessed next + return submissions[0] + + +@feedback_consumer +def process_incoming_feedback(exercise: Exercise, submission: Submission, feedbacks: List[Feedback]): + logger.info("process_feedback: Received %d feedbacks for submission %d of exercise %d", len(feedbacks), + submission.id, exercise.id) + logger.info("process_feedback: Feedbacks: %s", feedbacks) + + programming_language = exercise.programming_language.lower() + # Currently only works with Java and Python - can be extended with more languages if the grammar is available + if programming_language not in ["java", "python"]: + logger.info("The winnowing module currently only works with Java and Python. Not consuming feedback.") + return + + # Remove unreferenced feedbacks + feedbacks = list(filter(lambda f: f.file_path is not None and f.line_start is not None, feedbacks)) + + # Add method metadata to feedbacks + feedbacks_with_method = [] + for feedback in feedbacks: + feedback_method = get_feedback_method(submission, feedback, programming_language) + if feedback_method is None: + # don't consider feedback without a method + continue + logger.debug("Feedback #%d: Found method %s", feedback.id, feedback_method.name) + feedback.meta["method_name"] = feedback_method.name + feedback.meta["method_code"] = feedback_method.source_code + feedback.meta["method_line_start"] = feedback_method.line_start + feedback.meta["method_line_end"] = feedback_method.line_end + feedback.meta["method_ast"] = feedback_method.ast + feedbacks_with_method.append(feedback) + feedbacks = feedbacks_with_method + + # find all submissions for this exercise + exercise_submissions = cast(List[Submission], list(get_stored_submissions(exercise.id))) + + # create feedback suggestions + logger.info("Creating feedback suggestions for %d feedbacks", len(feedbacks)) + feedback_suggestions = create_feedback_suggestions(exercise_submissions, feedbacks, programming_language) + + # additionally, store metadata about how impactful each feedback was, i.e. how many suggestions were given based on it + for feedback in feedbacks: + # count how many suggestions were given based on this feedback + feedback.meta["n_feedback_suggestions"] = len( + [f for f in feedback_suggestions if f.meta["original_feedback_id"] == feedback.id]) + # store the information on the suggestions as well for quicker access later + for suggestion in feedback_suggestions: + if suggestion.meta["original_feedback_id"] == feedback.id: + suggestion.meta["n_feedback_suggestions"] = feedback.meta["n_feedback_suggestions"] + + # save to database + # type: ignore + store_feedback_suggestions(feedback_suggestions) + for feedback in feedbacks: + store_feedback(feedback) + + logger.debug("Feedbacks processed") + +@feedback_provider +def suggest_feedback(exercise: Exercise, submission: Submission, is_graded: bool, module_config: Configuration) -> List[Feedback]: + logger.info("suggest_feedback: Suggestions for submission %d of exercise %d were requested", submission.id, + exercise.id) + # Do something with the submission and return a list of feedback + # ThemisML currently only works with Java + if exercise.programming_language.lower() not in ["java", "python"]: + logger.info("The Winnowing module currently only works with Java and Python. Returning no suggestions.") + return [] + + suggested_feedbacks = cast(List[Feedback], list(get_stored_feedback_suggestions(exercise.id, submission.id))) + logger.debug("Found %d feedback suggestions (unfiltered)", len(suggested_feedbacks)) + suggested_feedbacks = filter_suspicious(suggested_feedbacks, count_stored_submissions(exercise.id)) + logger.debug("Found %d feedback suggestions (removed suspicious suggestions)", len(suggested_feedbacks)) + suggested_feedbacks = filter_overlapping_suggestions(suggested_feedbacks) + logger.debug("Found %d feedback suggestions (removed overlapping suggestions)", len(suggested_feedbacks)) + + logger.info("Suggesting %d filtered feedback suggestions", len(suggested_feedbacks)) + logger.debug("Suggested Feedback suggestions: %s", suggested_feedbacks) + + return suggested_feedbacks + + +# Only if it makes sense for a module (Optional) +@evaluation_provider +def evaluate_feedback(exercise: Exercise, submission: Submission, true_feedbacks: List[Feedback], predicted_feedbacks: List[Feedback]) -> Any: + logger.info( + "evaluate_feedback: Evaluation for submission %d of exercise %d was requested with %d true and %d predicted feedbacks", + submission.id, exercise.id, len(true_feedbacks), len(predicted_feedbacks) + ) + + # Do something with the true and predicted feedback and return the evaluation result + # Generate some example evaluation result + evaluation_results = [] + true_feedback_embeddings = [random.random() for _ in true_feedbacks] + predicted_feedback_embeddings = [random.random() for _ in predicted_feedbacks] + for feedback, embedding in zip(predicted_feedbacks, predicted_feedback_embeddings): + feedback_evaluation = { + "feedback_id": feedback.id, + "embedding": embedding, + "has_match": len([t for t in true_feedback_embeddings if abs(t - embedding) < 0.1]) > 0, + "correctness": random.random() + } + evaluation_results.append(feedback_evaluation) + + return evaluation_results + + +if __name__ == "__main__": + app.start() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/extract_method_and_ast.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/extract_method_and_ast.py new file mode 100644 index 000000000..19dd7d422 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/extract_method_and_ast.py @@ -0,0 +1,63 @@ +from antlr4 import CommonTokenStream, InputStream +from antlr4.tree.Tree import ParseTreeWalker +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Lexer import Python3Lexer +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Parser import Python3Parser +from module_programming_winnowing.convert_code_to_ast.languages.java import JavaLexer +from module_programming_winnowing.convert_code_to_ast.languages.java import JavaParser +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3MethodParserListener import \ + MethodParserListener as PythonMethodParserListener +from module_programming_winnowing.convert_code_to_ast.languages.java.JavaMethodParserListener import \ + MethodParserListener as JavaMethodParserListener + +# Grammars for programming languages have different parse rules +JAVA_PARSE_RULE = "compilationUnit" +PYTHON_PARSE_RULE = "file_input" + +def parse_java_file(source_code: str): + return parse_file(source_code, JavaLexer, JavaParser, JAVA_PARSE_RULE, JavaMethodParserListener) + + +def parse_python_file(source_code: str): + return parse_file(source_code, Python3Lexer, Python3Parser, PYTHON_PARSE_RULE, PythonMethodParserListener) + + +def parse_file(source_code, lexer_class, parser_class, parse_rule, listener_class): + input_stream = InputStream(source_code) + lexer = lexer_class(input_stream) + stream = CommonTokenStream(lexer) + parser = parser_class(stream) + tree = getattr(parser, parse_rule)() + + listener = listener_class(parser) + walker = ParseTreeWalker() + walker.walk(listener, tree) + print(listener.methods) + + return listener.methods.copy() + + +def parse(source_code: str, programming_language: str): + if programming_language == "java": + return parse_java_file(source_code) + if programming_language == "python": + return parse_python_file(source_code) + raise ValueError(f"Unsupported programming language: {programming_language}") + + +if __name__ == "__main__": + # file_path2 = "../test_files/test_java_1.java" + # parse_java_file(file_path2) + + code = """def process_numbers(numbers): + total = 0 + for number in numbers: + if number % 2 == 1: + total += number + else: + total -= number + if total > 0: + print("Positive total:", total) + else: + print("Non-positive total:", total)""" + code1 = parse_python_file(code) + code2 = parse_python_file(code) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/get_feedback_methods.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/get_feedback_methods.py new file mode 100644 index 000000000..f1e26a5a8 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/get_feedback_methods.py @@ -0,0 +1,27 @@ +from typing import Optional + +from athena.programming import Submission, Feedback +from module_programming_winnowing.convert_code_to_ast.extract_method_and_ast import parse +from module_programming_winnowing.convert_code_to_ast.method_node import MethodNode +from athena.logger import logger + + +def get_feedback_method(submission: Submission, feedback: Feedback, programming_language: str) -> Optional[MethodNode]: + """Find method that the feedback is on""" + if feedback.file_path is None or feedback.line_start is None: + return None + try: + code = submission.get_code(feedback.file_path) + except UnicodeDecodeError: + logger.warning("File %s in submission %d is not UTF-8 encoded.", feedback.file_path, submission.id) + return None + methods = parse(code, programming_language) + for m in methods: + if m.line_start is None or m.line_end is None: + continue + # method has to contain all feedback lines + if m.line_start <= feedback.line_start: + feedback_line_end = feedback.line_end if feedback.line_end is not None else feedback.line_start + if m.line_end >= feedback_line_end: + return m + return None diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaAstVisitor.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaAstVisitor.py new file mode 100644 index 000000000..583b82e04 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaAstVisitor.py @@ -0,0 +1,133 @@ +from antlr4 import * + +from module_programming_winnowing.convert_code_to_ast.languages.java.JavaLexer import Java20Lexer +from module_programming_winnowing.convert_code_to_ast.languages.java.JavaParser import Java20Parser +from module_programming_winnowing.convert_code_to_ast.languages.java.JavaParserVisitor import Java20ParserVisitor + + +class RemoveVariableNames(Java20ParserVisitor): + def visitVariableDeclaratorId(self, ctx): + if ctx.Identifier(): + token = ctx.Identifier().symbol + token.text = 'x' + return self.visitChildren(ctx) + + +class CustomJavaVisitor(Java20ParserVisitor): + def __init__(self): + self.loop_count = 0 + self.if_count = 0 + self.method_count = 0 + + def visitWhileStatement(self, ctx): + self.loop_count += 1 + return self.visitChildren(ctx) + + def visitForStatement(self, ctx): + self.loop_count += 1 + return self.visitChildren(ctx) + + def visitIfStatement(self, ctx): + self.if_count += 1 + return self.visitChildren(ctx) + + def visitMethodDeclaration(self, ctx): + self.method_count += 1 + return self.visitChildren(ctx) + + +def mutate(source_code): + input_stream = InputStream(source_code) + lexer = Java20Lexer(input_stream) + stream = CommonTokenStream(lexer) + parser = Java20Parser(stream) + tree = parser.compilationUnit() + + # Transform the AST + transformer = RemoveVariableNames() + transformer.visit(tree) + + return tree + + +level0 = [] +level1 = [] +level2 = [] + + +def find_levels(node, parser, level=0): + if level == 0: + level0.append(node.toStringTree(recog=parser)) + elif level == 1: + level1.append(node.toStringTree(recog=parser)) + elif level == 2: + level2.append(node.toStringTree(recog=parser)) + + for child in node.getChildren(): + if isinstance(child, ParserRuleContext): + find_levels(child, parser, level=level + 1) + + +def get_children(node, parser): + if isinstance(node, TerminalNode): + parent = node.getText() + children = [] + else: + parent = node.toStringTree(recog=parser) + children = [child.toStringTree(recog=parser) if isinstance(child, ParserRuleContext) else child.getText() for + child in node.getChildren()] + return parent, children + + +parents1 = [] +parents2 = [] +children1 = [] +children2 = [] + + +def get_parent_children_relation(root, parser, level=0): + for child in root.getChildren(): + if isinstance(child, ParserRuleContext): + p, c = get_children(child, parser) + if level == 0: + parents1.append(p) + children1.append(c) + elif level == 1: + parents2.append(p) + children2.append(c) + get_parent_children_relation(child, parser, level + 1) + + +def analyze(source_code): + input_tree = mutate(source_code) + + parser = Java20Parser(CommonTokenStream(Java20Lexer(InputStream(source_code)))) + + visitor = CustomJavaVisitor() + visitor.visit(input_tree) + count_l = visitor.loop_count + count_if = visitor.if_count + count_f = visitor.method_count + + # Finden der Ebenen + find_levels(input_tree, parser) + + # Eltern-Kind-Beziehungen finden + get_parent_children_relation(input_tree, parser) + + counts = [count_l, count_if, count_f] + levels = [level0, level1, level2] + + return counts, levels + + +if __name__ == "__main__": + file_path = """ + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, wooorld!"); + int test = 5; + } + """ + counts, levels = analyze(file_path) + print(counts, levels) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaLexer.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaLexer.py new file mode 100644 index 000000000..6f1da3778 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaLexer.py @@ -0,0 +1,815 @@ +# Generated from JavaLexer.g4 by ANTLR 4.13.1 +from antlr4 import * +from io import StringIO +import sys + +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4, 0, 126, 1264, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, + 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, + 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, + 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, + 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, + 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, + 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, + 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, + 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, + 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, + 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, + 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, + 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, + 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, + 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, + 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, + 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, + 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, + 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, + 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, + 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, + 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, + 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, + 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, + 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, + 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, + 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, + 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, + 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, + 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, + 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, + 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, + 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, + 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, + 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, + 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, + 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, + 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, + 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, + 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, + 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, + 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, + 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, + 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, + 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, + 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, + 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, + 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, + 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, + 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, + 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, + 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, + 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, + 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, + 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, + 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, + 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, + 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, + 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, + 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, + 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 805, 8, 68, 1, + 69, 1, 69, 3, 69, 809, 8, 69, 1, 70, 1, 70, 3, 70, 813, 8, 70, 1, 71, 1, 71, 3, 71, 817, + 8, 71, 1, 72, 1, 72, 3, 72, 821, 8, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 3, 74, 828, 8, + 74, 1, 74, 1, 74, 1, 74, 3, 74, 833, 8, 74, 3, 74, 835, 8, 74, 1, 75, 1, 75, 3, 75, 839, + 8, 75, 1, 75, 3, 75, 842, 8, 75, 1, 76, 1, 76, 3, 76, 846, 8, 76, 1, 77, 1, 77, 1, 78, 4, + 78, 851, 8, 78, 11, 78, 12, 78, 852, 1, 79, 1, 79, 3, 79, 857, 8, 79, 1, 80, 4, 80, 860, + 8, 80, 11, 80, 12, 80, 861, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 870, 8, 82, + 1, 82, 3, 82, 873, 8, 82, 1, 83, 1, 83, 1, 84, 4, 84, 878, 8, 84, 11, 84, 12, 84, 879, + 1, 85, 1, 85, 3, 85, 884, 8, 85, 1, 86, 1, 86, 3, 86, 888, 8, 86, 1, 86, 1, 86, 1, 87, 1, + 87, 3, 87, 894, 8, 87, 1, 87, 3, 87, 897, 8, 87, 1, 88, 1, 88, 1, 89, 4, 89, 902, 8, 89, + 11, 89, 12, 89, 903, 1, 90, 1, 90, 3, 90, 908, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, + 1, 92, 3, 92, 916, 8, 92, 1, 92, 3, 92, 919, 8, 92, 1, 93, 1, 93, 1, 94, 4, 94, 924, 8, + 94, 11, 94, 12, 94, 925, 1, 95, 1, 95, 3, 95, 930, 8, 95, 1, 96, 1, 96, 3, 96, 934, 8, + 96, 1, 97, 1, 97, 1, 97, 3, 97, 939, 8, 97, 1, 97, 3, 97, 942, 8, 97, 1, 97, 3, 97, 945, + 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 950, 8, 97, 1, 97, 3, 97, 953, 8, 97, 1, 97, 1, 97, 1, + 97, 3, 97, 958, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 963, 8, 97, 1, 98, 1, 98, 1, 98, 1, 99, + 1, 99, 1, 100, 3, 100, 971, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, + 103, 1, 103, 1, 103, 3, 103, 982, 8, 103, 1, 104, 1, 104, 3, 104, 986, 8, 104, 1, 104, + 1, 104, 1, 104, 3, 104, 991, 8, 104, 1, 104, 1, 104, 3, 104, 995, 8, 104, 1, 105, 1, + 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, + 1, 107, 1, 107, 3, 107, 1011, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, + 1, 108, 1, 108, 3, 108, 1021, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 1027, + 8, 110, 1, 110, 1, 110, 1, 111, 4, 111, 1032, 8, 111, 11, 111, 12, 111, 1033, 1, 112, + 1, 112, 3, 112, 1038, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1045, + 8, 113, 10, 113, 12, 113, 1048, 9, 113, 1, 113, 1, 113, 5, 113, 1052, 8, 113, 10, 113, + 12, 113, 1055, 9, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, + 3, 114, 1065, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, + 1, 115, 1, 115, 1, 115, 3, 115, 1078, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 4, 117, + 1084, 8, 117, 11, 117, 12, 117, 1085, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, + 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, + 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, + 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, + 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, + 1, 137, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 141, + 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, + 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, + 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, + 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, + 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, + 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, + 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 5, 166, 1221, 8, 166, 10, 166, 12, 166, + 1224, 9, 166, 1, 167, 3, 167, 1227, 8, 167, 1, 168, 1, 168, 3, 168, 1231, 8, 168, 1, + 169, 4, 169, 1234, 8, 169, 11, 169, 12, 169, 1235, 1, 169, 1, 169, 1, 170, 1, 170, + 1, 170, 1, 170, 5, 170, 1244, 8, 170, 10, 170, 12, 170, 1247, 9, 170, 1, 170, 1, 170, + 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 5, 171, 1258, 8, 171, 10, 171, + 12, 171, 1261, 9, 171, 1, 171, 1, 171, 1, 1245, 0, 172, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, + 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, + 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, + 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, + 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, + 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, + 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, + 139, 0, 141, 0, 143, 0, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, + 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, + 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 70, 195, 0, 197, 0, 199, 0, 201, 0, 203, + 0, 205, 0, 207, 0, 209, 0, 211, 0, 213, 0, 215, 71, 217, 72, 219, 0, 221, 73, 223, 0, + 225, 0, 227, 74, 229, 0, 231, 0, 233, 0, 235, 0, 237, 75, 239, 76, 241, 77, 243, 78, + 245, 79, 247, 80, 249, 81, 251, 82, 253, 83, 255, 84, 257, 85, 259, 86, 261, 87, 263, + 88, 265, 89, 267, 90, 269, 91, 271, 92, 273, 93, 275, 94, 277, 95, 279, 96, 281, 97, + 283, 98, 285, 99, 287, 100, 289, 101, 291, 102, 293, 103, 295, 104, 297, 105, 299, + 106, 301, 107, 303, 108, 305, 109, 307, 110, 309, 111, 311, 112, 313, 113, 315, + 114, 317, 115, 319, 116, 321, 117, 323, 118, 325, 119, 327, 120, 329, 121, 331, + 122, 333, 123, 335, 0, 337, 0, 339, 124, 341, 125, 343, 126, 1, 0, 21, 2, 0, 76, 76, + 108, 108, 1, 0, 49, 57, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, + 55, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, + 0, 68, 68, 70, 70, 100, 100, 102, 102, 2, 0, 80, 80, 112, 112, 4, 0, 10, 10, 13, 13, + 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, + 13, 13, 3, 0, 8, 8, 13, 13, 46, 46, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, + 110, 114, 114, 116, 116, 1, 0, 48, 51, 402, 0, 36, 36, 65, 90, 95, 95, 97, 122, 162, + 165, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, + 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, + 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, + 1369, 1377, 1415, 1423, 1423, 1488, 1514, 1520, 1522, 1547, 1547, 1568, 1610, + 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, + 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, + 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, + 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, + 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, + 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2547, 2555, 2556, + 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, + 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, + 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2801, + 2801, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, + 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, + 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, + 2984, 2986, 2990, 3001, 3024, 3024, 3065, 3065, 3077, 3084, 3086, 3088, 3090, + 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, + 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, + 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, + 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, + 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3647, 3654, 3713, 3714, 3716, 3716, + 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, + 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, + 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, + 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, + 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, + 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, + 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, + 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, + 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, + 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6107, 6108, + 6176, 6263, 6272, 6276, 6279, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, + 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, + 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, + 7247, 7258, 7293, 7296, 7304, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, + 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, + 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, + 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, + 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8352, 8383, 8450, 8450, + 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, + 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, + 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, + 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, + 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, + 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, + 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, + 12543, 12549, 12590, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, + 19968, 40938, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, + 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, + 42891, 42926, 42928, 42935, 42999, 43009, 43011, 43013, 43015, 43018, 43020, + 43042, 43064, 43064, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, + 43261, 43261, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, + 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, + 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, + 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, + 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, + 43822, 43824, 43866, 43868, 43877, 43888, 44002, 44032, 55203, 55216, 55238, + 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, + 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, + 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, + 65020, 65075, 65076, 65101, 65103, 65129, 65129, 65136, 65140, 65142, 65276, + 65284, 65284, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, + 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65504, 65505, 65509, 65510, + 228, 0, 48, 57, 127, 159, 173, 173, 768, 879, 1155, 1159, 1425, 1469, 1471, 1471, + 1473, 1474, 1476, 1477, 1479, 1479, 1536, 1541, 1552, 1562, 1564, 1564, 1611, + 1641, 1648, 1648, 1750, 1757, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, + 1807, 1807, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, + 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2260, 2307, 2362, 2364, + 2366, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2435, 2492, 2492, 2494, + 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2563, + 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2673, 2677, + 2677, 2689, 2691, 2748, 2748, 2750, 2757, 2759, 2761, 2763, 2765, 2786, 2787, + 2790, 2799, 2810, 2815, 2817, 2819, 2876, 2876, 2878, 2884, 2887, 2888, 2891, + 2893, 2902, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3010, 3014, 3016, + 3018, 3021, 3031, 3031, 3046, 3055, 3072, 3075, 3134, 3140, 3142, 3144, 3146, + 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3203, 3260, 3260, 3262, 3268, + 3270, 3272, 3274, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3328, 3331, 3387, + 3388, 3390, 3396, 3398, 3400, 3402, 3405, 3415, 3415, 3426, 3427, 3430, 3439, + 3458, 3459, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, + 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, + 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, + 3895, 3897, 3897, 3902, 3903, 3953, 3972, 3974, 3975, 3981, 3991, 3993, 4028, + 4038, 4038, 4139, 4158, 4160, 4169, 4182, 4185, 4190, 4192, 4194, 4196, 4199, + 4205, 4209, 4212, 4226, 4237, 4239, 4253, 4957, 4959, 5906, 5908, 5938, 5940, + 5970, 5971, 6002, 6003, 6068, 6099, 6109, 6109, 6112, 6121, 6155, 6158, 6160, + 6169, 6277, 6278, 6313, 6313, 6432, 6443, 6448, 6459, 6470, 6479, 6608, 6617, + 6679, 6683, 6741, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6832, 6845, 6912, + 6916, 6964, 6980, 6992, 7001, 7019, 7027, 7040, 7042, 7073, 7085, 7088, 7097, + 7142, 7155, 7204, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7400, 7405, + 7405, 7410, 7412, 7415, 7417, 7616, 7673, 7675, 7679, 8203, 8207, 8234, 8238, + 8288, 8292, 8294, 8303, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, + 11647, 11744, 11775, 12330, 12335, 12441, 12442, 42528, 42537, 42607, 42607, + 42612, 42621, 42654, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, + 43019, 43043, 43047, 43136, 43137, 43188, 43205, 43216, 43225, 43232, 43249, + 43264, 43273, 43302, 43309, 43335, 43347, 43392, 43395, 43443, 43456, 43472, + 43481, 43493, 43493, 43504, 43513, 43561, 43574, 43587, 43587, 43596, 43597, + 43600, 43609, 43643, 43645, 43696, 43696, 43698, 43700, 43703, 43704, 43710, + 43711, 43713, 43713, 43755, 43759, 43765, 43766, 44003, 44010, 44012, 44013, + 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65071, 65279, 65279, 65296, + 65305, 65529, 65531, 3, 0, 9, 10, 12, 13, 32, 32, 1278, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, + 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, + 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, + 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, + 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, + 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, + 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, + 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, + 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, + 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, + 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, + 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, + 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, + 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, + 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, + 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 237, 1, 0, + 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, + 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, + 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, + 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, + 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, + 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, + 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, + 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, + 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, + 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, + 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, + 1, 0, 0, 0, 1, 345, 1, 0, 0, 0, 3, 353, 1, 0, 0, 0, 5, 360, 1, 0, 0, 0, 7, 371, 1, 0, 0, 0, + 9, 374, 1, 0, 0, 0, 11, 379, 1, 0, 0, 0, 13, 385, 1, 0, 0, 0, 15, 393, 1, 0, 0, 0, 17, 402, + 1, 0, 0, 0, 19, 409, 1, 0, 0, 0, 21, 418, 1, 0, 0, 0, 23, 425, 1, 0, 0, 0, 25, 428, 1, 0, + 0, 0, 27, 439, 1, 0, 0, 0, 29, 444, 1, 0, 0, 0, 31, 448, 1, 0, 0, 0, 33, 453, 1, 0, 0, 0, + 35, 459, 1, 0, 0, 0, 37, 468, 1, 0, 0, 0, 39, 475, 1, 0, 0, 0, 41, 483, 1, 0, 0, 0, 43, 489, + 1, 0, 0, 0, 45, 494, 1, 0, 0, 0, 47, 499, 1, 0, 0, 0, 49, 505, 1, 0, 0, 0, 51, 510, 1, 0, + 0, 0, 53, 516, 1, 0, 0, 0, 55, 522, 1, 0, 0, 0, 57, 531, 1, 0, 0, 0, 59, 539, 1, 0, 0, 0, + 61, 542, 1, 0, 0, 0, 63, 549, 1, 0, 0, 0, 65, 554, 1, 0, 0, 0, 67, 559, 1, 0, 0, 0, 69, 567, + 1, 0, 0, 0, 71, 573, 1, 0, 0, 0, 73, 581, 1, 0, 0, 0, 75, 587, 1, 0, 0, 0, 77, 591, 1, 0, + 0, 0, 79, 594, 1, 0, 0, 0, 81, 599, 1, 0, 0, 0, 83, 610, 1, 0, 0, 0, 85, 617, 1, 0, 0, 0, + 87, 628, 1, 0, 0, 0, 89, 632, 1, 0, 0, 0, 91, 642, 1, 0, 0, 0, 93, 647, 1, 0, 0, 0, 95, 654, + 1, 0, 0, 0, 97, 658, 1, 0, 0, 0, 99, 666, 1, 0, 0, 0, 101, 674, 1, 0, 0, 0, 103, 684, 1, + 0, 0, 0, 105, 691, 1, 0, 0, 0, 107, 698, 1, 0, 0, 0, 109, 704, 1, 0, 0, 0, 111, 711, 1, + 0, 0, 0, 113, 720, 1, 0, 0, 0, 115, 726, 1, 0, 0, 0, 117, 733, 1, 0, 0, 0, 119, 746, 1, + 0, 0, 0, 121, 751, 1, 0, 0, 0, 123, 757, 1, 0, 0, 0, 125, 764, 1, 0, 0, 0, 127, 774, 1, + 0, 0, 0, 129, 778, 1, 0, 0, 0, 131, 783, 1, 0, 0, 0, 133, 792, 1, 0, 0, 0, 135, 798, 1, + 0, 0, 0, 137, 804, 1, 0, 0, 0, 139, 806, 1, 0, 0, 0, 141, 810, 1, 0, 0, 0, 143, 814, 1, + 0, 0, 0, 145, 818, 1, 0, 0, 0, 147, 822, 1, 0, 0, 0, 149, 834, 1, 0, 0, 0, 151, 836, 1, + 0, 0, 0, 153, 845, 1, 0, 0, 0, 155, 847, 1, 0, 0, 0, 157, 850, 1, 0, 0, 0, 159, 856, 1, + 0, 0, 0, 161, 859, 1, 0, 0, 0, 163, 863, 1, 0, 0, 0, 165, 867, 1, 0, 0, 0, 167, 874, 1, + 0, 0, 0, 169, 877, 1, 0, 0, 0, 171, 883, 1, 0, 0, 0, 173, 885, 1, 0, 0, 0, 175, 891, 1, + 0, 0, 0, 177, 898, 1, 0, 0, 0, 179, 901, 1, 0, 0, 0, 181, 907, 1, 0, 0, 0, 183, 909, 1, + 0, 0, 0, 185, 913, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 923, 1, 0, 0, 0, 191, 929, 1, + 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 962, 1, 0, 0, 0, 197, 964, 1, 0, 0, 0, 199, 967, 1, + 0, 0, 0, 201, 970, 1, 0, 0, 0, 203, 974, 1, 0, 0, 0, 205, 976, 1, 0, 0, 0, 207, 978, 1, + 0, 0, 0, 209, 994, 1, 0, 0, 0, 211, 996, 1, 0, 0, 0, 213, 999, 1, 0, 0, 0, 215, 1010, 1, + 0, 0, 0, 217, 1020, 1, 0, 0, 0, 219, 1022, 1, 0, 0, 0, 221, 1024, 1, 0, 0, 0, 223, 1031, + 1, 0, 0, 0, 225, 1037, 1, 0, 0, 0, 227, 1039, 1, 0, 0, 0, 229, 1064, 1, 0, 0, 0, 231, 1077, + 1, 0, 0, 0, 233, 1079, 1, 0, 0, 0, 235, 1081, 1, 0, 0, 0, 237, 1092, 1, 0, 0, 0, 239, 1097, + 1, 0, 0, 0, 241, 1099, 1, 0, 0, 0, 243, 1101, 1, 0, 0, 0, 245, 1103, 1, 0, 0, 0, 247, 1105, + 1, 0, 0, 0, 249, 1107, 1, 0, 0, 0, 251, 1109, 1, 0, 0, 0, 253, 1111, 1, 0, 0, 0, 255, 1113, + 1, 0, 0, 0, 257, 1115, 1, 0, 0, 0, 259, 1119, 1, 0, 0, 0, 261, 1121, 1, 0, 0, 0, 263, 1124, + 1, 0, 0, 0, 265, 1126, 1, 0, 0, 0, 267, 1128, 1, 0, 0, 0, 269, 1130, 1, 0, 0, 0, 271, 1132, + 1, 0, 0, 0, 273, 1134, 1, 0, 0, 0, 275, 1136, 1, 0, 0, 0, 277, 1138, 1, 0, 0, 0, 279, 1141, + 1, 0, 0, 0, 281, 1144, 1, 0, 0, 0, 283, 1147, 1, 0, 0, 0, 285, 1150, 1, 0, 0, 0, 287, 1153, + 1, 0, 0, 0, 289, 1156, 1, 0, 0, 0, 291, 1159, 1, 0, 0, 0, 293, 1162, 1, 0, 0, 0, 295, 1165, + 1, 0, 0, 0, 297, 1167, 1, 0, 0, 0, 299, 1169, 1, 0, 0, 0, 301, 1171, 1, 0, 0, 0, 303, 1173, + 1, 0, 0, 0, 305, 1175, 1, 0, 0, 0, 307, 1177, 1, 0, 0, 0, 309, 1179, 1, 0, 0, 0, 311, 1181, + 1, 0, 0, 0, 313, 1184, 1, 0, 0, 0, 315, 1187, 1, 0, 0, 0, 317, 1190, 1, 0, 0, 0, 319, 1193, + 1, 0, 0, 0, 321, 1196, 1, 0, 0, 0, 323, 1199, 1, 0, 0, 0, 325, 1202, 1, 0, 0, 0, 327, 1205, + 1, 0, 0, 0, 329, 1209, 1, 0, 0, 0, 331, 1213, 1, 0, 0, 0, 333, 1218, 1, 0, 0, 0, 335, 1226, + 1, 0, 0, 0, 337, 1230, 1, 0, 0, 0, 339, 1233, 1, 0, 0, 0, 341, 1239, 1, 0, 0, 0, 343, 1253, + 1, 0, 0, 0, 345, 346, 5, 101, 0, 0, 346, 347, 5, 120, 0, 0, 347, 348, 5, 112, 0, 0, 348, + 349, 5, 111, 0, 0, 349, 350, 5, 114, 0, 0, 350, 351, 5, 116, 0, 0, 351, 352, 5, 115, + 0, 0, 352, 2, 1, 0, 0, 0, 353, 354, 5, 109, 0, 0, 354, 355, 5, 111, 0, 0, 355, 356, 5, + 100, 0, 0, 356, 357, 5, 117, 0, 0, 357, 358, 5, 108, 0, 0, 358, 359, 5, 101, 0, 0, 359, + 4, 1, 0, 0, 0, 360, 361, 5, 110, 0, 0, 361, 362, 5, 111, 0, 0, 362, 363, 5, 110, 0, 0, + 363, 364, 5, 45, 0, 0, 364, 365, 5, 115, 0, 0, 365, 366, 5, 101, 0, 0, 366, 367, 5, 97, + 0, 0, 367, 368, 5, 108, 0, 0, 368, 369, 5, 101, 0, 0, 369, 370, 5, 100, 0, 0, 370, 6, + 1, 0, 0, 0, 371, 372, 5, 60, 0, 0, 372, 373, 5, 62, 0, 0, 373, 8, 1, 0, 0, 0, 374, 375, + 5, 111, 0, 0, 375, 376, 5, 112, 0, 0, 376, 377, 5, 101, 0, 0, 377, 378, 5, 110, 0, 0, + 378, 10, 1, 0, 0, 0, 379, 380, 5, 111, 0, 0, 380, 381, 5, 112, 0, 0, 381, 382, 5, 101, + 0, 0, 382, 383, 5, 110, 0, 0, 383, 384, 5, 115, 0, 0, 384, 12, 1, 0, 0, 0, 385, 386, 5, + 112, 0, 0, 386, 387, 5, 101, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, 109, 0, 0, 389, + 390, 5, 105, 0, 0, 390, 391, 5, 116, 0, 0, 391, 392, 5, 115, 0, 0, 392, 14, 1, 0, 0, 0, + 393, 394, 5, 112, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 111, 0, 0, 396, 397, 5, + 118, 0, 0, 397, 398, 5, 105, 0, 0, 398, 399, 5, 100, 0, 0, 399, 400, 5, 101, 0, 0, 400, + 401, 5, 115, 0, 0, 401, 16, 1, 0, 0, 0, 402, 403, 5, 114, 0, 0, 403, 404, 5, 101, 0, 0, + 404, 405, 5, 99, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 114, 0, 0, 407, 408, 5, 100, + 0, 0, 408, 18, 1, 0, 0, 0, 409, 410, 5, 114, 0, 0, 410, 411, 5, 101, 0, 0, 411, 412, 5, + 113, 0, 0, 412, 413, 5, 117, 0, 0, 413, 414, 5, 105, 0, 0, 414, 415, 5, 114, 0, 0, 415, + 416, 5, 101, 0, 0, 416, 417, 5, 115, 0, 0, 417, 20, 1, 0, 0, 0, 418, 419, 5, 115, 0, 0, + 419, 420, 5, 101, 0, 0, 420, 421, 5, 97, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 101, + 0, 0, 423, 424, 5, 100, 0, 0, 424, 22, 1, 0, 0, 0, 425, 426, 5, 116, 0, 0, 426, 427, 5, + 111, 0, 0, 427, 24, 1, 0, 0, 0, 428, 429, 5, 116, 0, 0, 429, 430, 5, 114, 0, 0, 430, 431, + 5, 97, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 115, 0, 0, 433, 434, 5, 105, 0, 0, 434, + 435, 5, 116, 0, 0, 435, 436, 5, 105, 0, 0, 436, 437, 5, 118, 0, 0, 437, 438, 5, 101, + 0, 0, 438, 26, 1, 0, 0, 0, 439, 440, 5, 117, 0, 0, 440, 441, 5, 115, 0, 0, 441, 442, 5, + 101, 0, 0, 442, 443, 5, 115, 0, 0, 443, 28, 1, 0, 0, 0, 444, 445, 5, 118, 0, 0, 445, 446, + 5, 97, 0, 0, 446, 447, 5, 114, 0, 0, 447, 30, 1, 0, 0, 0, 448, 449, 5, 119, 0, 0, 449, + 450, 5, 105, 0, 0, 450, 451, 5, 116, 0, 0, 451, 452, 5, 104, 0, 0, 452, 32, 1, 0, 0, 0, + 453, 454, 5, 121, 0, 0, 454, 455, 5, 105, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, + 108, 0, 0, 457, 458, 5, 100, 0, 0, 458, 34, 1, 0, 0, 0, 459, 460, 5, 97, 0, 0, 460, 461, + 5, 98, 0, 0, 461, 462, 5, 115, 0, 0, 462, 463, 5, 116, 0, 0, 463, 464, 5, 114, 0, 0, 464, + 465, 5, 97, 0, 0, 465, 466, 5, 99, 0, 0, 466, 467, 5, 116, 0, 0, 467, 36, 1, 0, 0, 0, 468, + 469, 5, 97, 0, 0, 469, 470, 5, 115, 0, 0, 470, 471, 5, 115, 0, 0, 471, 472, 5, 101, 0, + 0, 472, 473, 5, 114, 0, 0, 473, 474, 5, 116, 0, 0, 474, 38, 1, 0, 0, 0, 475, 476, 5, 98, + 0, 0, 476, 477, 5, 111, 0, 0, 477, 478, 5, 111, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, + 5, 101, 0, 0, 480, 481, 5, 97, 0, 0, 481, 482, 5, 110, 0, 0, 482, 40, 1, 0, 0, 0, 483, + 484, 5, 98, 0, 0, 484, 485, 5, 114, 0, 0, 485, 486, 5, 101, 0, 0, 486, 487, 5, 97, 0, + 0, 487, 488, 5, 107, 0, 0, 488, 42, 1, 0, 0, 0, 489, 490, 5, 98, 0, 0, 490, 491, 5, 121, + 0, 0, 491, 492, 5, 116, 0, 0, 492, 493, 5, 101, 0, 0, 493, 44, 1, 0, 0, 0, 494, 495, 5, + 99, 0, 0, 495, 496, 5, 97, 0, 0, 496, 497, 5, 115, 0, 0, 497, 498, 5, 101, 0, 0, 498, + 46, 1, 0, 0, 0, 499, 500, 5, 99, 0, 0, 500, 501, 5, 97, 0, 0, 501, 502, 5, 116, 0, 0, 502, + 503, 5, 99, 0, 0, 503, 504, 5, 104, 0, 0, 504, 48, 1, 0, 0, 0, 505, 506, 5, 99, 0, 0, 506, + 507, 5, 104, 0, 0, 507, 508, 5, 97, 0, 0, 508, 509, 5, 114, 0, 0, 509, 50, 1, 0, 0, 0, + 510, 511, 5, 99, 0, 0, 511, 512, 5, 108, 0, 0, 512, 513, 5, 97, 0, 0, 513, 514, 5, 115, + 0, 0, 514, 515, 5, 115, 0, 0, 515, 52, 1, 0, 0, 0, 516, 517, 5, 99, 0, 0, 517, 518, 5, + 111, 0, 0, 518, 519, 5, 110, 0, 0, 519, 520, 5, 115, 0, 0, 520, 521, 5, 116, 0, 0, 521, + 54, 1, 0, 0, 0, 522, 523, 5, 99, 0, 0, 523, 524, 5, 111, 0, 0, 524, 525, 5, 110, 0, 0, + 525, 526, 5, 116, 0, 0, 526, 527, 5, 105, 0, 0, 527, 528, 5, 110, 0, 0, 528, 529, 5, + 117, 0, 0, 529, 530, 5, 101, 0, 0, 530, 56, 1, 0, 0, 0, 531, 532, 5, 100, 0, 0, 532, 533, + 5, 101, 0, 0, 533, 534, 5, 102, 0, 0, 534, 535, 5, 97, 0, 0, 535, 536, 5, 117, 0, 0, 536, + 537, 5, 108, 0, 0, 537, 538, 5, 116, 0, 0, 538, 58, 1, 0, 0, 0, 539, 540, 5, 100, 0, 0, + 540, 541, 5, 111, 0, 0, 541, 60, 1, 0, 0, 0, 542, 543, 5, 100, 0, 0, 543, 544, 5, 111, + 0, 0, 544, 545, 5, 117, 0, 0, 545, 546, 5, 98, 0, 0, 546, 547, 5, 108, 0, 0, 547, 548, + 5, 101, 0, 0, 548, 62, 1, 0, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 108, 0, 0, 551, + 552, 5, 115, 0, 0, 552, 553, 5, 101, 0, 0, 553, 64, 1, 0, 0, 0, 554, 555, 5, 101, 0, 0, + 555, 556, 5, 110, 0, 0, 556, 557, 5, 117, 0, 0, 557, 558, 5, 109, 0, 0, 558, 66, 1, 0, + 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 120, 0, 0, 561, 562, 5, 116, 0, 0, 562, 563, + 5, 101, 0, 0, 563, 564, 5, 110, 0, 0, 564, 565, 5, 100, 0, 0, 565, 566, 5, 115, 0, 0, + 566, 68, 1, 0, 0, 0, 567, 568, 5, 102, 0, 0, 568, 569, 5, 105, 0, 0, 569, 570, 5, 110, + 0, 0, 570, 571, 5, 97, 0, 0, 571, 572, 5, 108, 0, 0, 572, 70, 1, 0, 0, 0, 573, 574, 5, + 102, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 110, 0, 0, 576, 577, 5, 97, 0, 0, 577, + 578, 5, 108, 0, 0, 578, 579, 5, 108, 0, 0, 579, 580, 5, 121, 0, 0, 580, 72, 1, 0, 0, 0, + 581, 582, 5, 102, 0, 0, 582, 583, 5, 108, 0, 0, 583, 584, 5, 111, 0, 0, 584, 585, 5, + 97, 0, 0, 585, 586, 5, 116, 0, 0, 586, 74, 1, 0, 0, 0, 587, 588, 5, 102, 0, 0, 588, 589, + 5, 111, 0, 0, 589, 590, 5, 114, 0, 0, 590, 76, 1, 0, 0, 0, 591, 592, 5, 105, 0, 0, 592, + 593, 5, 102, 0, 0, 593, 78, 1, 0, 0, 0, 594, 595, 5, 103, 0, 0, 595, 596, 5, 111, 0, 0, + 596, 597, 5, 116, 0, 0, 597, 598, 5, 111, 0, 0, 598, 80, 1, 0, 0, 0, 599, 600, 5, 105, + 0, 0, 600, 601, 5, 109, 0, 0, 601, 602, 5, 112, 0, 0, 602, 603, 5, 108, 0, 0, 603, 604, + 5, 101, 0, 0, 604, 605, 5, 109, 0, 0, 605, 606, 5, 101, 0, 0, 606, 607, 5, 110, 0, 0, + 607, 608, 5, 116, 0, 0, 608, 609, 5, 115, 0, 0, 609, 82, 1, 0, 0, 0, 610, 611, 5, 105, + 0, 0, 611, 612, 5, 109, 0, 0, 612, 613, 5, 112, 0, 0, 613, 614, 5, 111, 0, 0, 614, 615, + 5, 114, 0, 0, 615, 616, 5, 116, 0, 0, 616, 84, 1, 0, 0, 0, 617, 618, 5, 105, 0, 0, 618, + 619, 5, 110, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 97, 0, + 0, 622, 623, 5, 110, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 101, 0, 0, 625, 626, 5, + 111, 0, 0, 626, 627, 5, 102, 0, 0, 627, 86, 1, 0, 0, 0, 628, 629, 5, 105, 0, 0, 629, 630, + 5, 110, 0, 0, 630, 631, 5, 116, 0, 0, 631, 88, 1, 0, 0, 0, 632, 633, 5, 105, 0, 0, 633, + 634, 5, 110, 0, 0, 634, 635, 5, 116, 0, 0, 635, 636, 5, 101, 0, 0, 636, 637, 5, 114, + 0, 0, 637, 638, 5, 102, 0, 0, 638, 639, 5, 97, 0, 0, 639, 640, 5, 99, 0, 0, 640, 641, + 5, 101, 0, 0, 641, 90, 1, 0, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 111, 0, 0, 644, + 645, 5, 110, 0, 0, 645, 646, 5, 103, 0, 0, 646, 92, 1, 0, 0, 0, 647, 648, 5, 110, 0, 0, + 648, 649, 5, 97, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, 5, 105, 0, 0, 651, 652, 5, 118, + 0, 0, 652, 653, 5, 101, 0, 0, 653, 94, 1, 0, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, + 101, 0, 0, 656, 657, 5, 119, 0, 0, 657, 96, 1, 0, 0, 0, 658, 659, 5, 112, 0, 0, 659, 660, + 5, 97, 0, 0, 660, 661, 5, 99, 0, 0, 661, 662, 5, 107, 0, 0, 662, 663, 5, 97, 0, 0, 663, + 664, 5, 103, 0, 0, 664, 665, 5, 101, 0, 0, 665, 98, 1, 0, 0, 0, 666, 667, 5, 112, 0, 0, + 667, 668, 5, 114, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 118, 0, 0, 670, 671, 5, + 97, 0, 0, 671, 672, 5, 116, 0, 0, 672, 673, 5, 101, 0, 0, 673, 100, 1, 0, 0, 0, 674, 675, + 5, 112, 0, 0, 675, 676, 5, 114, 0, 0, 676, 677, 5, 111, 0, 0, 677, 678, 5, 116, 0, 0, + 678, 679, 5, 101, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 116, 0, 0, 681, 682, 5, 101, + 0, 0, 682, 683, 5, 100, 0, 0, 683, 102, 1, 0, 0, 0, 684, 685, 5, 112, 0, 0, 685, 686, + 5, 117, 0, 0, 686, 687, 5, 98, 0, 0, 687, 688, 5, 108, 0, 0, 688, 689, 5, 105, 0, 0, 689, + 690, 5, 99, 0, 0, 690, 104, 1, 0, 0, 0, 691, 692, 5, 114, 0, 0, 692, 693, 5, 101, 0, 0, + 693, 694, 5, 116, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 114, 0, 0, 696, 697, 5, + 110, 0, 0, 697, 106, 1, 0, 0, 0, 698, 699, 5, 115, 0, 0, 699, 700, 5, 104, 0, 0, 700, + 701, 5, 111, 0, 0, 701, 702, 5, 114, 0, 0, 702, 703, 5, 116, 0, 0, 703, 108, 1, 0, 0, + 0, 704, 705, 5, 115, 0, 0, 705, 706, 5, 116, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, + 116, 0, 0, 708, 709, 5, 105, 0, 0, 709, 710, 5, 99, 0, 0, 710, 110, 1, 0, 0, 0, 711, 712, + 5, 115, 0, 0, 712, 713, 5, 116, 0, 0, 713, 714, 5, 114, 0, 0, 714, 715, 5, 105, 0, 0, + 715, 716, 5, 99, 0, 0, 716, 717, 5, 116, 0, 0, 717, 718, 5, 102, 0, 0, 718, 719, 5, 112, + 0, 0, 719, 112, 1, 0, 0, 0, 720, 721, 5, 115, 0, 0, 721, 722, 5, 117, 0, 0, 722, 723, + 5, 112, 0, 0, 723, 724, 5, 101, 0, 0, 724, 725, 5, 114, 0, 0, 725, 114, 1, 0, 0, 0, 726, + 727, 5, 115, 0, 0, 727, 728, 5, 119, 0, 0, 728, 729, 5, 105, 0, 0, 729, 730, 5, 116, + 0, 0, 730, 731, 5, 99, 0, 0, 731, 732, 5, 104, 0, 0, 732, 116, 1, 0, 0, 0, 733, 734, 5, + 115, 0, 0, 734, 735, 5, 121, 0, 0, 735, 736, 5, 110, 0, 0, 736, 737, 5, 99, 0, 0, 737, + 738, 5, 104, 0, 0, 738, 739, 5, 114, 0, 0, 739, 740, 5, 111, 0, 0, 740, 741, 5, 110, + 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 122, 0, 0, 743, 744, 5, 101, 0, 0, 744, 745, + 5, 100, 0, 0, 745, 118, 1, 0, 0, 0, 746, 747, 5, 116, 0, 0, 747, 748, 5, 104, 0, 0, 748, + 749, 5, 105, 0, 0, 749, 750, 5, 115, 0, 0, 750, 120, 1, 0, 0, 0, 751, 752, 5, 116, 0, + 0, 752, 753, 5, 104, 0, 0, 753, 754, 5, 114, 0, 0, 754, 755, 5, 111, 0, 0, 755, 756, + 5, 119, 0, 0, 756, 122, 1, 0, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 104, 0, 0, 759, + 760, 5, 114, 0, 0, 760, 761, 5, 111, 0, 0, 761, 762, 5, 119, 0, 0, 762, 763, 5, 115, + 0, 0, 763, 124, 1, 0, 0, 0, 764, 765, 5, 116, 0, 0, 765, 766, 5, 114, 0, 0, 766, 767, + 5, 97, 0, 0, 767, 768, 5, 110, 0, 0, 768, 769, 5, 115, 0, 0, 769, 770, 5, 105, 0, 0, 770, + 771, 5, 101, 0, 0, 771, 772, 5, 110, 0, 0, 772, 773, 5, 116, 0, 0, 773, 126, 1, 0, 0, + 0, 774, 775, 5, 116, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 121, 0, 0, 777, 128, + 1, 0, 0, 0, 778, 779, 5, 118, 0, 0, 779, 780, 5, 111, 0, 0, 780, 781, 5, 105, 0, 0, 781, + 782, 5, 100, 0, 0, 782, 130, 1, 0, 0, 0, 783, 784, 5, 118, 0, 0, 784, 785, 5, 111, 0, + 0, 785, 786, 5, 108, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, 5, + 105, 0, 0, 789, 790, 5, 108, 0, 0, 790, 791, 5, 101, 0, 0, 791, 132, 1, 0, 0, 0, 792, + 793, 5, 119, 0, 0, 793, 794, 5, 104, 0, 0, 794, 795, 5, 105, 0, 0, 795, 796, 5, 108, + 0, 0, 796, 797, 5, 101, 0, 0, 797, 134, 1, 0, 0, 0, 798, 799, 5, 95, 0, 0, 799, 136, 1, + 0, 0, 0, 800, 805, 3, 139, 69, 0, 801, 805, 3, 141, 70, 0, 802, 805, 3, 143, 71, 0, 803, + 805, 3, 145, 72, 0, 804, 800, 1, 0, 0, 0, 804, 801, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, + 803, 1, 0, 0, 0, 805, 138, 1, 0, 0, 0, 806, 808, 3, 149, 74, 0, 807, 809, 3, 147, 73, + 0, 808, 807, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 140, 1, 0, 0, 0, 810, 812, 3, 163, + 81, 0, 811, 813, 3, 147, 73, 0, 812, 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 142, + 1, 0, 0, 0, 814, 816, 3, 173, 86, 0, 815, 817, 3, 147, 73, 0, 816, 815, 1, 0, 0, 0, 816, + 817, 1, 0, 0, 0, 817, 144, 1, 0, 0, 0, 818, 820, 3, 183, 91, 0, 819, 821, 3, 147, 73, + 0, 820, 819, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 146, 1, 0, 0, 0, 822, 823, 7, 0, 0, + 0, 823, 148, 1, 0, 0, 0, 824, 835, 5, 48, 0, 0, 825, 832, 3, 155, 77, 0, 826, 828, 3, + 151, 75, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 833, 1, 0, 0, 0, 829, 830, + 3, 161, 80, 0, 830, 831, 3, 151, 75, 0, 831, 833, 1, 0, 0, 0, 832, 827, 1, 0, 0, 0, 832, + 829, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 824, 1, 0, 0, 0, 834, 825, 1, 0, 0, 0, 835, + 150, 1, 0, 0, 0, 836, 841, 3, 153, 76, 0, 837, 839, 3, 157, 78, 0, 838, 837, 1, 0, 0, + 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 3, 153, 76, 0, 841, 838, 1, 0, + 0, 0, 841, 842, 1, 0, 0, 0, 842, 152, 1, 0, 0, 0, 843, 846, 5, 48, 0, 0, 844, 846, 3, 155, + 77, 0, 845, 843, 1, 0, 0, 0, 845, 844, 1, 0, 0, 0, 846, 154, 1, 0, 0, 0, 847, 848, 7, 1, + 0, 0, 848, 156, 1, 0, 0, 0, 849, 851, 3, 159, 79, 0, 850, 849, 1, 0, 0, 0, 851, 852, 1, + 0, 0, 0, 852, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 158, 1, 0, 0, 0, 854, 857, 3, + 153, 76, 0, 855, 857, 5, 95, 0, 0, 856, 854, 1, 0, 0, 0, 856, 855, 1, 0, 0, 0, 857, 160, + 1, 0, 0, 0, 858, 860, 5, 95, 0, 0, 859, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 859, + 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 162, 1, 0, 0, 0, 863, 864, 5, 48, 0, 0, 864, 865, + 7, 2, 0, 0, 865, 866, 3, 165, 82, 0, 866, 164, 1, 0, 0, 0, 867, 872, 3, 167, 83, 0, 868, + 870, 3, 169, 84, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, + 873, 3, 167, 83, 0, 872, 869, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 166, 1, 0, 0, 0, 874, + 875, 7, 3, 0, 0, 875, 168, 1, 0, 0, 0, 876, 878, 3, 171, 85, 0, 877, 876, 1, 0, 0, 0, 878, + 879, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 170, 1, 0, 0, 0, 881, + 884, 3, 167, 83, 0, 882, 884, 5, 95, 0, 0, 883, 881, 1, 0, 0, 0, 883, 882, 1, 0, 0, 0, + 884, 172, 1, 0, 0, 0, 885, 887, 5, 48, 0, 0, 886, 888, 3, 161, 80, 0, 887, 886, 1, 0, + 0, 0, 887, 888, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 3, 175, 87, 0, 890, 174, 1, + 0, 0, 0, 891, 896, 3, 177, 88, 0, 892, 894, 3, 179, 89, 0, 893, 892, 1, 0, 0, 0, 893, + 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 3, 177, 88, 0, 896, 893, 1, 0, 0, 0, 896, + 897, 1, 0, 0, 0, 897, 176, 1, 0, 0, 0, 898, 899, 7, 4, 0, 0, 899, 178, 1, 0, 0, 0, 900, + 902, 3, 181, 90, 0, 901, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 903, + 904, 1, 0, 0, 0, 904, 180, 1, 0, 0, 0, 905, 908, 3, 177, 88, 0, 906, 908, 5, 95, 0, 0, + 907, 905, 1, 0, 0, 0, 907, 906, 1, 0, 0, 0, 908, 182, 1, 0, 0, 0, 909, 910, 5, 48, 0, 0, + 910, 911, 7, 5, 0, 0, 911, 912, 3, 185, 92, 0, 912, 184, 1, 0, 0, 0, 913, 918, 3, 187, + 93, 0, 914, 916, 3, 189, 94, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, + 1, 0, 0, 0, 917, 919, 3, 187, 93, 0, 918, 915, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 186, + 1, 0, 0, 0, 920, 921, 7, 6, 0, 0, 921, 188, 1, 0, 0, 0, 922, 924, 3, 191, 95, 0, 923, 922, + 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 190, + 1, 0, 0, 0, 927, 930, 3, 187, 93, 0, 928, 930, 5, 95, 0, 0, 929, 927, 1, 0, 0, 0, 929, + 928, 1, 0, 0, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 97, 0, 932, 934, 3, 207, 103, + 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 936, 3, 151, + 75, 0, 936, 938, 5, 46, 0, 0, 937, 939, 3, 151, 75, 0, 938, 937, 1, 0, 0, 0, 938, 939, + 1, 0, 0, 0, 939, 941, 1, 0, 0, 0, 940, 942, 3, 197, 98, 0, 941, 940, 1, 0, 0, 0, 941, 942, + 1, 0, 0, 0, 942, 944, 1, 0, 0, 0, 943, 945, 3, 205, 102, 0, 944, 943, 1, 0, 0, 0, 944, + 945, 1, 0, 0, 0, 945, 963, 1, 0, 0, 0, 946, 947, 5, 46, 0, 0, 947, 949, 3, 151, 75, 0, + 948, 950, 3, 197, 98, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 952, 1, 0, 0, + 0, 951, 953, 3, 205, 102, 0, 952, 951, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 963, 1, + 0, 0, 0, 954, 955, 3, 151, 75, 0, 955, 957, 3, 197, 98, 0, 956, 958, 3, 205, 102, 0, + 957, 956, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 963, 1, 0, 0, 0, 959, 960, 3, 151, 75, + 0, 960, 961, 3, 205, 102, 0, 961, 963, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 946, 1, + 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 963, 196, 1, 0, 0, 0, 964, 965, 3, + 199, 99, 0, 965, 966, 3, 201, 100, 0, 966, 198, 1, 0, 0, 0, 967, 968, 7, 7, 0, 0, 968, + 200, 1, 0, 0, 0, 969, 971, 3, 203, 101, 0, 970, 969, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, + 971, 972, 1, 0, 0, 0, 972, 973, 3, 151, 75, 0, 973, 202, 1, 0, 0, 0, 974, 975, 7, 8, 0, + 0, 975, 204, 1, 0, 0, 0, 976, 977, 7, 9, 0, 0, 977, 206, 1, 0, 0, 0, 978, 979, 3, 209, + 104, 0, 979, 981, 3, 211, 105, 0, 980, 982, 3, 205, 102, 0, 981, 980, 1, 0, 0, 0, 981, + 982, 1, 0, 0, 0, 982, 208, 1, 0, 0, 0, 983, 985, 3, 163, 81, 0, 984, 986, 5, 46, 0, 0, + 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 995, 1, 0, 0, 0, 987, 988, 5, 48, 0, 0, + 988, 990, 7, 2, 0, 0, 989, 991, 3, 165, 82, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, + 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 46, 0, 0, 993, 995, 3, 165, 82, 0, 994, 983, 1, + 0, 0, 0, 994, 987, 1, 0, 0, 0, 995, 210, 1, 0, 0, 0, 996, 997, 3, 213, 106, 0, 997, 998, + 3, 201, 100, 0, 998, 212, 1, 0, 0, 0, 999, 1000, 7, 10, 0, 0, 1000, 214, 1, 0, 0, 0, 1001, + 1002, 5, 116, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 117, 0, 0, 1004, 1011, + 5, 101, 0, 0, 1005, 1006, 5, 102, 0, 0, 1006, 1007, 5, 97, 0, 0, 1007, 1008, 5, 108, + 0, 0, 1008, 1009, 5, 115, 0, 0, 1009, 1011, 5, 101, 0, 0, 1010, 1001, 1, 0, 0, 0, 1010, + 1005, 1, 0, 0, 0, 1011, 216, 1, 0, 0, 0, 1012, 1013, 5, 39, 0, 0, 1013, 1014, 3, 219, + 109, 0, 1014, 1015, 5, 39, 0, 0, 1015, 1021, 1, 0, 0, 0, 1016, 1017, 5, 39, 0, 0, 1017, + 1018, 3, 229, 114, 0, 1018, 1019, 5, 39, 0, 0, 1019, 1021, 1, 0, 0, 0, 1020, 1012, + 1, 0, 0, 0, 1020, 1016, 1, 0, 0, 0, 1021, 218, 1, 0, 0, 0, 1022, 1023, 8, 11, 0, 0, 1023, + 220, 1, 0, 0, 0, 1024, 1026, 5, 34, 0, 0, 1025, 1027, 3, 223, 111, 0, 1026, 1025, 1, + 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1029, 5, 34, 0, 0, 1029, + 222, 1, 0, 0, 0, 1030, 1032, 3, 225, 112, 0, 1031, 1030, 1, 0, 0, 0, 1032, 1033, 1, + 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 224, 1, 0, 0, 0, 1035, + 1038, 8, 12, 0, 0, 1036, 1038, 3, 229, 114, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1036, + 1, 0, 0, 0, 1038, 226, 1, 0, 0, 0, 1039, 1040, 5, 34, 0, 0, 1040, 1041, 5, 34, 0, 0, 1041, + 1042, 5, 34, 0, 0, 1042, 1046, 1, 0, 0, 0, 1043, 1045, 7, 13, 0, 0, 1044, 1043, 1, 0, + 0, 0, 1045, 1048, 1, 0, 0, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1049, + 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1053, 7, 14, 0, 0, 1050, 1052, 7, 15, 0, 0, + 1051, 1050, 1, 0, 0, 0, 1052, 1055, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1053, 1054, + 1, 0, 0, 0, 1054, 1056, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1056, 1057, 5, 34, 0, 0, 1057, + 1058, 5, 34, 0, 0, 1058, 1059, 5, 34, 0, 0, 1059, 228, 1, 0, 0, 0, 1060, 1061, 5, 92, + 0, 0, 1061, 1065, 7, 16, 0, 0, 1062, 1065, 3, 231, 115, 0, 1063, 1065, 3, 235, 117, + 0, 1064, 1060, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 230, + 1, 0, 0, 0, 1066, 1067, 5, 92, 0, 0, 1067, 1078, 3, 177, 88, 0, 1068, 1069, 5, 92, 0, + 0, 1069, 1070, 3, 177, 88, 0, 1070, 1071, 3, 177, 88, 0, 1071, 1078, 1, 0, 0, 0, 1072, + 1073, 5, 92, 0, 0, 1073, 1074, 3, 233, 116, 0, 1074, 1075, 3, 177, 88, 0, 1075, 1076, + 3, 177, 88, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1066, 1, 0, 0, 0, 1077, 1068, 1, 0, 0, 0, + 1077, 1072, 1, 0, 0, 0, 1078, 232, 1, 0, 0, 0, 1079, 1080, 7, 17, 0, 0, 1080, 234, 1, + 0, 0, 0, 1081, 1083, 5, 92, 0, 0, 1082, 1084, 5, 117, 0, 0, 1083, 1082, 1, 0, 0, 0, 1084, + 1085, 1, 0, 0, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, + 0, 1087, 1088, 3, 167, 83, 0, 1088, 1089, 3, 167, 83, 0, 1089, 1090, 3, 167, 83, 0, + 1090, 1091, 3, 167, 83, 0, 1091, 236, 1, 0, 0, 0, 1092, 1093, 5, 110, 0, 0, 1093, 1094, + 5, 117, 0, 0, 1094, 1095, 5, 108, 0, 0, 1095, 1096, 5, 108, 0, 0, 1096, 238, 1, 0, 0, + 0, 1097, 1098, 5, 40, 0, 0, 1098, 240, 1, 0, 0, 0, 1099, 1100, 5, 41, 0, 0, 1100, 242, + 1, 0, 0, 0, 1101, 1102, 5, 123, 0, 0, 1102, 244, 1, 0, 0, 0, 1103, 1104, 5, 125, 0, 0, + 1104, 246, 1, 0, 0, 0, 1105, 1106, 5, 91, 0, 0, 1106, 248, 1, 0, 0, 0, 1107, 1108, 5, + 93, 0, 0, 1108, 250, 1, 0, 0, 0, 1109, 1110, 5, 59, 0, 0, 1110, 252, 1, 0, 0, 0, 1111, + 1112, 5, 44, 0, 0, 1112, 254, 1, 0, 0, 0, 1113, 1114, 5, 46, 0, 0, 1114, 256, 1, 0, 0, + 0, 1115, 1116, 5, 46, 0, 0, 1116, 1117, 5, 46, 0, 0, 1117, 1118, 5, 46, 0, 0, 1118, + 258, 1, 0, 0, 0, 1119, 1120, 5, 64, 0, 0, 1120, 260, 1, 0, 0, 0, 1121, 1122, 5, 58, 0, + 0, 1122, 1123, 5, 58, 0, 0, 1123, 262, 1, 0, 0, 0, 1124, 1125, 5, 61, 0, 0, 1125, 264, + 1, 0, 0, 0, 1126, 1127, 5, 62, 0, 0, 1127, 266, 1, 0, 0, 0, 1128, 1129, 5, 60, 0, 0, 1129, + 268, 1, 0, 0, 0, 1130, 1131, 5, 33, 0, 0, 1131, 270, 1, 0, 0, 0, 1132, 1133, 5, 126, + 0, 0, 1133, 272, 1, 0, 0, 0, 1134, 1135, 5, 63, 0, 0, 1135, 274, 1, 0, 0, 0, 1136, 1137, + 5, 58, 0, 0, 1137, 276, 1, 0, 0, 0, 1138, 1139, 5, 45, 0, 0, 1139, 1140, 5, 62, 0, 0, + 1140, 278, 1, 0, 0, 0, 1141, 1142, 5, 61, 0, 0, 1142, 1143, 5, 61, 0, 0, 1143, 280, + 1, 0, 0, 0, 1144, 1145, 5, 60, 0, 0, 1145, 1146, 5, 61, 0, 0, 1146, 282, 1, 0, 0, 0, 1147, + 1148, 5, 62, 0, 0, 1148, 1149, 5, 61, 0, 0, 1149, 284, 1, 0, 0, 0, 1150, 1151, 5, 33, + 0, 0, 1151, 1152, 5, 61, 0, 0, 1152, 286, 1, 0, 0, 0, 1153, 1154, 5, 38, 0, 0, 1154, + 1155, 5, 38, 0, 0, 1155, 288, 1, 0, 0, 0, 1156, 1157, 5, 124, 0, 0, 1157, 1158, 5, 124, + 0, 0, 1158, 290, 1, 0, 0, 0, 1159, 1160, 5, 43, 0, 0, 1160, 1161, 5, 43, 0, 0, 1161, + 292, 1, 0, 0, 0, 1162, 1163, 5, 45, 0, 0, 1163, 1164, 5, 45, 0, 0, 1164, 294, 1, 0, 0, + 0, 1165, 1166, 5, 43, 0, 0, 1166, 296, 1, 0, 0, 0, 1167, 1168, 5, 45, 0, 0, 1168, 298, + 1, 0, 0, 0, 1169, 1170, 5, 42, 0, 0, 1170, 300, 1, 0, 0, 0, 1171, 1172, 5, 47, 0, 0, 1172, + 302, 1, 0, 0, 0, 1173, +74, 5, 38, 0, 0, 1174, 304, 1, 0, 0, 0, 1175, 1176, 5, 124, + 0, 0, 1176, 306, 1, 0, 0, 0, 1177, 1178, 5, 94, 0, 0, 1178, 308, 1, 0, 0, 0, 1179, 1180, + 5, 37, 0, 0, 1180, 310, 1, 0, 0, 0, 1181, 1182, 5, 43, 0, 0, 1182, 1183, 5, 61, 0, 0, + 1183, 312, 1, 0, 0, 0, 1184, 1185, 5, 45, 0, 0, 1185, 1186, 5, 61, 0, 0, 1186, 314, + 1, 0, 0, 0, 1187, 1188, 5, 42, 0, 0, 1188, 1189, 5, 61, 0, 0, 1189, 316, 1, 0, 0, 0, 1190, + 1191, 5, 47, 0, 0, 1191, 1192, 5, 61, 0, 0, 1192, 318, 1, 0, 0, 0, 1193, 1194, 5, 38, + 0, 0, 1194, 1195, 5, 61, 0, 0, 1195, 320, 1, 0, 0, 0, 1196, 1197, 5, 124, 0, 0, 1197, + 1198, 5, 61, 0, 0, 1198, 322, 1, 0, 0, 0, 1199, 1200, 5, 94, 0, 0, 1200, 1201, 5, 61, + 0, 0, 1201, 324, 1, 0, 0, 0, 1202, 1203, 5, 37, 0, 0, 1203, 1204, 5, 61, 0, 0, 1204, + 326, 1, 0, 0, 0, 1205, 1206, 5, 60, 0, 0, 1206, 1207, 5, 60, 0, 0, 1207, 1208, 5, 61, + 0, 0, 1208, 328, 1, 0, 0, 0, 1209, 1210, 5, 62, 0, 0, 1210, 1211, 5, 62, 0, 0, 1211, + 1212, 5, 61, 0, 0, 1212, 330, 1, 0, 0, 0, 1213, 1214, 5, 62, 0, 0, 1214, 1215, 5, 62, + 0, 0, 1215, 1216, 5, 62, 0, 0, 1216, 1217, 5, 61, 0, 0, 1217, 332, 1, 0, 0, 0, 1218, + 1222, 3, 335, 167, 0, 1219, 1221, 3, 337, 168, 0, 1220, 1219, 1, 0, 0, 0, 1221, 1224, + 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 334, 1, 0, 0, 0, 1224, + 1222, 1, 0, 0, 0, 1225, 1227, 7, 18, 0, 0, 1226, 1225, 1, 0, 0, 0, 1227, 336, 1, 0, 0, + 0, 1228, 1231, 3, 335, 167, 0, 1229, 1231, 7, 19, 0, 0, 1230, 1228, 1, 0, 0, 0, 1230, + 1229, 1, 0, 0, 0, 1231, 338, 1, 0, 0, 0, 1232, 1234, 7, 20, 0, 0, 1233, 1232, 1, 0, 0, + 0, 1234, 1235, 1, 0, 0, 0, 1235, 1233, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, + 1, 0, 0, 0, 1237, 1238, 6, 169, 0, 0, 1238, 340, 1, 0, 0, 0, 1239, 1240, 5, 47, 0, 0, + 1240, 1241, 5, 42, 0, 0, 1241, 1245, 1, 0, 0, 0, 1242, 1244, 9, 0, 0, 0, 1243, 1242, + 1, 0, 0, 0, 1244, 1247, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1246, + 1248, 1, 0, 0, 0, 1247, 1245, 1, 0, 0, 0, 1248, 1249, 5, 42, 0, 0, 1249, 1250, 5, 47, + 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1252, 6, 170, 1, 0, 1252, 342, 1, 0, 0, 0, 1253, + 1254, 5, 47, 0, 0, 1254, 1255, 5, 47, 0, 0, 1255, 1259, 1, 0, 0, 0, 1256, 1258, 8, 14, + 0, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, + 1, 0, 0, 0, 1260, 1262, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1263, 6, 171, 1, 0, + 1263, 344, 1, 0, 0, 0, 57, 0, 804, 808, 812, 816, 820, 827, 832, 834, 838, 841, 845, + 852, 856, 861, 869, 872, 879, 883, 887, 893, 896, 903, 907, 915, 918, 925, 929, + 933, 938, 941, 944, 949, 952, 957, 962, 970, 981, 985, 990, 994, 1010, 1020, 1026, + 1033, 1037, 1046, 1053, 1064, 1077, 1085, 1222, 1226, 1230, 1235, 1245, 1259, + 2, 6, 0, 0, 0, 1, 0 + ] + + +class Java20Lexer(Lexer): + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + EXPORTS = 1 + MODULE = 2 + NONSEALED = 3 + OACA = 4 + OPEN = 5 + OPENS = 6 + PERMITS = 7 + PROVIDES = 8 + RECORD = 9 + REQUIRES = 10 + SEALED = 11 + TO = 12 + TRANSITIVE = 13 + USES = 14 + VAR = 15 + WITH = 16 + YIELD = 17 + ABSTRACT = 18 + ASSERT = 19 + BOOLEAN = 20 + BREAK = 21 + BYTE = 22 + CASE = 23 + CATCH = 24 + CHAR = 25 + CLASS = 26 + CONST = 27 + CONTINUE = 28 + DEFAULT = 29 + DO = 30 + DOUBLE = 31 + ELSE = 32 + ENUM = 33 + EXTENDS = 34 + FINAL = 35 + FINALLY = 36 + FLOAT = 37 + FOR = 38 + IF = 39 + GOTO = 40 + IMPLEMENTS = 41 + IMPORT = 42 + INSTANCEOF = 43 + INT = 44 + INTERFACE = 45 + LONG = 46 + NATIVE = 47 + NEW = 48 + PACKAGE = 49 + PRIVATE = 50 + PROTECTED = 51 + PUBLIC = 52 + RETURN = 53 + SHORT = 54 + STATIC = 55 + STRICTFP = 56 + SUPER = 57 + SWITCH = 58 + SYNCHRONIZED = 59 + THIS = 60 + THROW = 61 + THROWS = 62 + TRANSIENT = 63 + TRY = 64 + VOID = 65 + VOLATILE = 66 + WHILE = 67 + UNDER_SCORE = 68 + IntegerLiteral = 69 + FloatingPointLiteral = 70 + BooleanLiteral = 71 + CharacterLiteral = 72 + StringLiteral = 73 + TextBlock = 74 + NullLiteral = 75 + LPAREN = 76 + RPAREN = 77 + LBRACE = 78 + RBRACE = 79 + LBRACK = 80 + RBRACK = 81 + SEMI = 82 + COMMA = 83 + DOT = 84 + ELLIPSIS = 85 + AT = 86 + COLONCOLON = 87 + ASSIGN = 88 + GT = 89 + LT = 90 + BANG = 91 + TILDE = 92 + QUESTION = 93 + COLON = 94 + ARROW = 95 + EQUAL = 96 + LE = 97 + GE = 98 + NOTEQUAL = 99 + AND = 100 + OR = 101 + INC = 102 + DEC = 103 + ADD = 104 + SUB = 105 + MUL = 106 + DIV = 107 + BITAND = 108 + BITOR = 109 + CARET = 110 + MOD = 111 + ADD_ASSIGN = 112 + SUB_ASSIGN = 113 + MUL_ASSIGN = 114 + DIV_ASSIGN = 115 + AND_ASSIGN = 116 + OR_ASSIGN = 117 + XOR_ASSIGN = 118 + MOD_ASSIGN = 119 + LSHIFT_ASSIGN = 120 + RSHIFT_ASSIGN = 121 + URSHIFT_ASSIGN = 122 + Identifier = 123 + WS = 124 + COMMENT = 125 + LINE_COMMENT = 126 + + channelNames = [u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN"] + + modeNames = ["DEFAULT_MODE"] + + literalNames = ["", + "'exports'", "'module'", "'non-sealed'", "'<>'", "'open'", "'opens'", + "'permits'", "'provides'", "'record'", "'requires'", "'sealed'", + "'to'", "'transitive'", "'uses'", "'var'", "'with'", "'yield'", + "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", + "'case'", "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", "'extends'", + "'final'", "'finally'", "'float'", "'for'", "'if'", "'goto'", + "'implements'", "'import'", "'instanceof'", "'int'", "'interface'", + "'long'", "'native'", "'new'", "'package'", "'private'", "'protected'", + "'public'", "'return'", "'short'", "'static'", "'strictfp'", + "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "'null'", "'('", "')'", "'{'", "'}'", "'['", + "']'", "';'", "','", "'.'", "'...'", "'@'", "'::'", "'='", "'>'", + "'<'", "'!'", "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", "'*'", + "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", "'*='", "'/='", + "'&='", "'|='", "'^='", "'%='", "'<<='", "'>>='", "'>>>='"] + + symbolicNames = ["", + "EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", "PERMITS", + "PROVIDES", "RECORD", "REQUIRES", "SEALED", "TO", "TRANSITIVE", + "USES", "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", "CONST", + "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", + "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", + "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", + "NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", "VOLATILE", + "WHILE", "UNDER_SCORE", "IntegerLiteral", "FloatingPointLiteral", + "BooleanLiteral", "CharacterLiteral", "StringLiteral", "TextBlock", + "NullLiteral", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", + "RBRACK", "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", + "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", + "DEC", "ADD", "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", + "MOD", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", + "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", + "LINE_COMMENT"] + + ruleNames = ["EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", + "PERMITS", "PROVIDES", "RECORD", "REQUIRES", "SEALED", + "TO", "TRANSITIVE", "USES", "VAR", "WITH", "YIELD", "ABSTRACT", + "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", + "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", + "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FINAL", "FINALLY", + "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", "IMPORT", + "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW", + "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "DecimalIntegerLiteral", "HexIntegerLiteral", "OctalIntegerLiteral", + "BinaryIntegerLiteral", "IntegerTypeSuffix", "DecimalNumeral", + "Digits", "Digit", "NonZeroDigit", "DigitsAndUnderscores", + "DigitOrUnderscore", "Underscores", "HexNumeral", "HexDigits", + "HexDigit", "HexDigitsAndUnderscores", "HexDigitOrUnderscore", + "OctalNumeral", "OctalDigits", "OctalDigit", "OctalDigitsAndUnderscores", + "OctalDigitOrUnderscore", "BinaryNumeral", "BinaryDigits", + "BinaryDigit", "BinaryDigitsAndUnderscores", "BinaryDigitOrUnderscore", + "FloatingPointLiteral", "DecimalFloatingPointLiteral", + "ExponentPart", "ExponentIndicator", "SignedInteger", + "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", + "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", + "BooleanLiteral", "CharacterLiteral", "SingleCharacter", + "StringLiteral", "StringCharacters", "StringCharacter", + "TextBlock", "EscapeSequence", "OctalEscape", "ZeroToThree", + "UnicodeEscape", "NullLiteral", "LPAREN", "RPAREN", "LBRACE", + "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT", + "ELLIPSIS", "AT", "COLONCOLON", "ASSIGN", "GT", "LT", + "BANG", "TILDE", "QUESTION", "COLON", "ARROW", "EQUAL", + "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", + "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", "MOD", + "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", + "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", + "IdentifierStart", "IdentifierPart", "WS", "COMMENT", + "LINE_COMMENT"] + + grammarFileName = "Java20Lexer.g4" + + def __init__(self, input=None, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaMethodParserListener.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaMethodParserListener.py new file mode 100644 index 000000000..f3d825c72 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaMethodParserListener.py @@ -0,0 +1,73 @@ +# Generated from JavaParser.g4 by ANTLR 4.11.1 +from dataclasses import dataclass +from antlr4 import * + +from module_programming_winnowing.convert_code_to_ast.languages.java import JavaParser + + +@dataclass +class MethodNode: + line_start: int + line_end: int + source_code: str + name: str + ast: any + ast_string: str + + def __str__(self): + return f"MethodNode({self.name}, lines {self.line_start} to {self.line_end})" + + +def _extract_method_name(ctx): + # Navigate through the methodHeader context to find the method name + if hasattr(ctx, 'methodHeader'): + method_header = ctx.methodHeader() + if method_header: + method_declarator = method_header.methodDeclarator() + if method_declarator and hasattr(method_declarator, 'Identifier'): + return method_declarator.Identifier().getText() + elif method_declarator and hasattr(method_declarator, 'identifier'): + return method_declarator.identifier().getText() + else: + # Traverse the children to find the identifier + for child in method_declarator.children: + if isinstance(child, TerminalNode) and child.symbol.type == JavaParser.Identifier: + return child.getText() + return "Unknown" + + +class MethodParserListener(ParseTreeListener): + def __init__(self, parser): + self.methods = [] + self.parser = parser + + def enterMethodDeclaration(self, ctx): + self._enter_method(ctx) + + def enterConstructorDeclaration(self, ctx): + self._enter_method(ctx) + + def enterGenericMethodDeclaration(self, ctx): + self._enter_method(ctx) + + def enterGenericConstructorDeclaration(self, ctx): + self._enter_method(ctx) + + def _enter_method(self, ctx): + ast_string = ctx.toStringTree(recog=self.parser) + method_name = _extract_method_name(ctx) + + me = MethodNode( + line_start=ctx.start.line, + line_end=ctx.stop.line, + source_code=ctx.start.source[1].getText(ctx.start.start, ctx.stop.stop), + name=method_name, + ast=ctx, + ast_string=ast_string + ) + self.methods.append(me) + print("Method found:", method_name) + + def enterIdentifier(self, ctx: ParserRuleContext): + if self.methods and self.methods[-1].name is None: + self.methods[-1].name = ctx.getText() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParser.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParser.py new file mode 100644 index 000000000..76380e530 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParser.py @@ -0,0 +1,20451 @@ +# Generated from JavaParser.g4 by ANTLR 4.13.1 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4, 1, 126, 2946, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, + 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, + 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, + 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, + 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, + 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, + 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, + 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, + 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, + 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, + 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, + 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, + 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, + 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, + 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, + 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, + 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, + 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, + 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, + 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, + 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, + 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, + 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, + 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, + 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, + 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, + 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, + 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, + 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, + 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, + 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, + 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, + 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, + 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, + 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, + 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, + 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, + 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, + 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, + 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, + 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, + 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, + 2, 1, 2, 1, 3, 1, 3, 1, 4, 5, 4, 501, 8, 4, 10, 4, 12, 4, 504, 9, 4, 1, 4, 1, 4, 3, 4, 508, + 8, 4, 1, 5, 1, 5, 3, 5, 512, 8, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 521, 8, 8, + 1, 9, 1, 9, 5, 9, 525, 8, 9, 10, 9, 12, 9, 528, 9, 9, 1, 9, 1, 9, 3, 9, 532, 8, 9, 1, 9, 3, + 9, 535, 8, 9, 1, 10, 1, 10, 1, 10, 3, 10, 540, 8, 10, 1, 10, 5, 10, 543, 8, 10, 10, 10, + 12, 10, 546, 9, 10, 1, 10, 1, 10, 3, 10, 550, 8, 10, 1, 10, 3, 10, 553, 8, 10, 1, 11, 5, + 11, 556, 8, 11, 10, 11, 12, 11, 559, 9, 11, 1, 11, 1, 11, 3, 11, 563, 8, 11, 1, 11, 1, + 11, 1, 11, 5, 11, 568, 8, 11, 10, 11, 12, 11, 571, 9, 11, 1, 11, 1, 11, 3, 11, 575, 8, + 11, 1, 11, 1, 11, 1, 11, 5, 11, 580, 8, 11, 10, 11, 12, 11, 583, 9, 11, 1, 11, 1, 11, 3, + 11, 587, 8, 11, 3, 11, 589, 8, 11, 1, 12, 1, 12, 1, 13, 5, 13, 594, 8, 13, 10, 13, 12, + 13, 597, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, + 14, 3, 14, 610, 8, 14, 1, 15, 5, 15, 613, 8, 15, 10, 15, 12, 15, 616, 9, 15, 1, 15, 1, + 15, 1, 15, 5, 15, 621, 8, 15, 10, 15, 12, 15, 624, 9, 15, 1, 15, 1, 15, 5, 15, 628, 8, + 15, 10, 15, 12, 15, 631, 9, 15, 1, 16, 5, 16, 634, 8, 16, 10, 16, 12, 16, 637, 9, 16, + 1, 16, 1, 16, 3, 16, 641, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 649, 8, + 18, 10, 18, 12, 18, 652, 9, 18, 3, 18, 654, 8, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, + 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 666, 8, 21, 10, 21, 12, 21, 669, 9, 21, 1, 22, 1, + 22, 3, 22, 673, 8, 22, 1, 23, 5, 23, 676, 8, 23, 10, 23, 12, 23, 679, 9, 23, 1, 23, 1, + 23, 3, 23, 683, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 689, 8, 24, 1, 25, 1, 25, 1, 25, + 3, 25, 694, 8, 25, 1, 26, 1, 26, 1, 26, 3, 26, 699, 8, 26, 1, 27, 1, 27, 1, 27, 3, 27, 704, + 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 709, 8, 28, 1, 29, 1, 29, 1, 29, 3, 29, 714, 8, 29, 1, + 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 3, 31, 723, 8, 31, 1, 32, 1, 32, 3, 32, 727, + 8, 32, 1, 33, 3, 33, 730, 8, 33, 1, 33, 5, 33, 733, 8, 33, 10, 33, 12, 33, 736, 9, 33, + 1, 33, 5, 33, 739, 8, 33, 10, 33, 12, 33, 742, 9, 33, 1, 34, 5, 34, 745, 8, 34, 10, 34, + 12, 34, 748, 9, 34, 1, 34, 1, 34, 1, 35, 5, 35, 753, 8, 35, 10, 35, 12, 35, 756, 9, 35, + 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 762, 8, 35, 10, 35, 12, 35, 765, 9, 35, 1, 35, 1, 35, + 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 775, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, + 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, + 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 804, 8, 42, + 1, 43, 5, 43, 807, 8, 43, 10, 43, 12, 43, 810, 9, 43, 1, 43, 3, 43, 813, 8, 43, 1, 43, + 1, 43, 1, 43, 1, 43, 5, 43, 819, 8, 43, 10, 43, 12, 43, 822, 9, 43, 1, 43, 1, 43, 5, 43, + 826, 8, 43, 10, 43, 12, 43, 829, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 5, 44, 835, 8, 44, + 10, 44, 12, 44, 838, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, + 5, 44, 849, 8, 44, 10, 44, 12, 44, 852, 9, 44, 3, 44, 854, 8, 44, 1, 44, 1, 44, 1, 44, + 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 864, 8, 44, 10, 44, 12, 44, 867, 9, 44, 3, 44, + 869, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, + 1, 44, 5, 44, 883, 8, 44, 10, 44, 12, 44, 886, 9, 44, 1, 44, 1, 44, 3, 44, 890, 8, 44, + 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 3, 46, 897, 8, 46, 1, 47, 5, 47, 900, 8, 47, 10, 47, + 12, 47, 903, 9, 47, 1, 47, 1, 47, 1, 47, 3, 47, 908, 8, 47, 1, 47, 3, 47, 911, 8, 47, 1, + 47, 3, 47, 914, 8, 47, 1, 47, 3, 47, 917, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, + 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 931, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, + 1, 50, 1, 50, 1, 50, 5, 50, 940, 8, 50, 10, 50, 12, 50, 943, 9, 50, 1, 51, 1, 51, 1, 51, + 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 954, 8, 53, 10, 53, 12, 53, 957, 9, 53, + 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 963, 8, 54, 10, 54, 12, 54, 966, 9, 54, 1, 55, 1, 55, + 5, 55, 970, 8, 55, 10, 55, 12, 55, 973, 9, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, + 3, 56, 981, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 988, 8, 57, 1, 58, 5, 58, 991, + 8, 58, 10, 58, 12, 58, 994, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, + 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1008, 8, 59, 1, 60, 1, 60, 1, 60, 5, 60, 1013, 8, 60, + 10, 60, 12, 60, 1016, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 1021, 8, 61, 1, 62, 1, 62, 3, + 62, 1025, 8, 62, 1, 63, 1, 63, 3, 63, 1029, 8, 63, 1, 64, 1, 64, 3, 64, 1033, 8, 64, 1, + 65, 1, 65, 3, 65, 1037, 8, 65, 1, 66, 1, 66, 1, 66, 3, 66, 1042, 8, 66, 1, 67, 1, 67, 1, + 67, 5, 67, 1047, 8, 67, 10, 67, 12, 67, 1050, 9, 67, 3, 67, 1052, 8, 67, 1, 67, 1, 67, + 3, 67, 1056, 8, 67, 1, 67, 3, 67, 1059, 8, 67, 1, 68, 1, 68, 5, 68, 1063, 8, 68, 10, 68, + 12, 68, 1066, 9, 68, 1, 68, 1, 68, 3, 68, 1070, 8, 68, 1, 68, 3, 68, 1073, 8, 68, 1, 69, + 1, 69, 3, 69, 1077, 8, 69, 1, 69, 1, 69, 3, 69, 1081, 8, 69, 1, 69, 1, 69, 5, 69, 1085, + 8, 69, 10, 69, 12, 69, 1088, 9, 69, 1, 69, 1, 69, 3, 69, 1092, 8, 69, 3, 69, 1094, 8, + 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1103, 8, 72, 1, 72, 1, 72, 1, + 73, 5, 73, 1108, 8, 73, 10, 73, 12, 73, 1111, 9, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, + 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1126, 8, 74, 1, 75, 1, 75, + 5, 75, 1130, 8, 75, 10, 75, 12, 75, 1133, 9, 75, 3, 75, 1135, 8, 75, 1, 75, 1, 75, 1, + 75, 3, 75, 1140, 8, 75, 1, 76, 1, 76, 3, 76, 1144, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, + 77, 3, 77, 1151, 8, 77, 1, 77, 3, 77, 1154, 8, 77, 1, 77, 1, 77, 3, 77, 1158, 8, 77, 1, + 78, 5, 78, 1161, 8, 78, 10, 78, 12, 78, 1164, 9, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1169, + 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 5, 79, 1176, 8, 79, 10, 79, 12, 79, 1179, 9, + 79, 1, 80, 5, 80, 1182, 8, 80, 10, 80, 12, 80, 1185, 9, 80, 1, 80, 1, 80, 1, 80, 1, 80, + 3, 80, 1191, 8, 80, 1, 81, 5, 81, 1194, 8, 81, 10, 81, 12, 81, 1197, 9, 81, 1, 81, 1, + 81, 5, 81, 1201, 8, 81, 10, 81, 12, 81, 1204, 9, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, + 3, 82, 1211, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 5, 84, 1219, 8, 84, 10, 84, + 12, 84, 1222, 9, 84, 1, 85, 1, 85, 3, 85, 1226, 8, 85, 1, 86, 1, 86, 3, 86, 1230, 8, 86, + 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 89, 5, 89, 1238, 8, 89, 10, 89, 12, 89, 1241, 9, + 89, 1, 89, 1, 89, 3, 89, 1245, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1253, + 8, 90, 1, 91, 3, 91, 1256, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1263, 8, 91, + 1, 91, 3, 91, 1266, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 3, 93, 1274, 8, 93, + 1, 93, 3, 93, 1277, 8, 93, 1, 93, 1, 93, 1, 94, 3, 94, 1282, 8, 94, 1, 94, 1, 94, 1, 94, + 3, 94, 1287, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1293, 8, 94, 1, 94, 1, 94, 3, 94, + 1297, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1302, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1307, + 8, 94, 1, 95, 5, 95, 1310, 8, 95, 10, 95, 12, 95, 1313, 9, 95, 1, 95, 1, 95, 1, 95, 3, + 95, 1318, 8, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 1324, 8, 96, 1, 96, 3, 96, 1327, 8, + 96, 1, 96, 3, 96, 1330, 8, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 5, 97, 1337, 8, 97, 10, + 97, 12, 97, 1340, 9, 97, 1, 98, 5, 98, 1343, 8, 98, 10, 98, 12, 98, 1346, 9, 98, 1, 98, + 1, 98, 1, 98, 3, 98, 1351, 8, 98, 1, 98, 3, 98, 1354, 8, 98, 1, 98, 3, 98, 1357, 8, 98, + 1, 99, 1, 99, 1, 100, 1, 100, 5, 100, 1363, 8, 100, 10, 100, 12, 100, 1366, 9, 100, + 1, 101, 5, 101, 1369, 8, 101, 10, 101, 12, 101, 1372, 9, 101, 1, 101, 1, 101, 1, 101, + 3, 101, 1377, 8, 101, 1, 101, 1, 101, 3, 101, 1381, 8, 101, 1, 101, 1, 101, 1, 102, + 1, 102, 3, 102, 1387, 8, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 5, 103, 1394, + 8, 103, 10, 103, 12, 103, 1397, 9, 103, 1, 104, 5, 104, 1400, 8, 104, 10, 104, 12, + 104, 1403, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1409, 8, 104, 1, 105, 5, + 105, 1412, 8, 105, 10, 105, 12, 105, 1415, 9, 105, 1, 105, 1, 105, 5, 105, 1419, 8, + 105, 10, 105, 12, 105, 1422, 9, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, + 1, 107, 5, 107, 1431, 8, 107, 10, 107, 12, 107, 1434, 9, 107, 1, 107, 1, 107, 1, 108, + 1, 108, 3, 108, 1440, 8, 108, 1, 109, 5, 109, 1443, 8, 109, 10, 109, 12, 109, 1446, + 9, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 1453, 8, 110, 1, 111, 5, 111, + 1456, 8, 111, 10, 111, 12, 111, 1459, 9, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1464, + 8, 111, 1, 111, 3, 111, 1467, 8, 111, 1, 111, 3, 111, 1470, 8, 111, 1, 111, 1, 111, + 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1483, + 8, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1492, 8, 114, + 10, 114, 12, 114, 1495, 9, 114, 1, 115, 1, 115, 5, 115, 1499, 8, 115, 10, 115, 12, + 115, 1502, 9, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1511, + 8, 116, 1, 117, 5, 117, 1514, 8, 117, 10, 117, 12, 117, 1517, 9, 117, 1, 117, 1, 117, + 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1527, 8, 118, 1, 119, 5, 119, + 1530, 8, 119, 10, 119, 12, 119, 1533, 9, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, + 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1545, 8, 120, 1, 121, 5, 121, 1548, + 8, 121, 10, 121, 12, 121, 1551, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, + 1, 122, 5, 122, 1560, 8, 122, 10, 122, 12, 122, 1563, 9, 122, 1, 122, 1, 122, 1, 123, + 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1572, 8, 123, 1, 124, 5, 124, 1575, 8, 124, + 10, 124, 12, 124, 1578, 9, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1585, + 8, 124, 1, 124, 3, 124, 1588, 8, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 3, 125, + 1595, 8, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 3, 127, 1603, 8, 127, + 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1609, 8, 128, 1, 128, 1, 128, 1, 129, 1, 129, + 1, 129, 5, 129, 1616, 8, 129, 10, 129, 12, 129, 1619, 9, 129, 1, 130, 1, 130, 1, 130, + 1, 130, 1, 131, 1, 131, 1, 131, 3, 131, 1628, 8, 131, 1, 132, 1, 132, 3, 132, 1632, + 8, 132, 1, 132, 3, 132, 1635, 8, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 5, 133, + 1642, 8, 133, 10, 133, 12, 133, 1645, 9, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, + 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1658, 8, 136, 1, 136, 3, 136, + 1661, 8, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 5, 137, 1668, 8, 137, 10, 137, + 12, 137, 1671, 9, 137, 1, 138, 1, 138, 3, 138, 1675, 8, 138, 1, 138, 1, 138, 1, 139, + 1, 139, 5, 139, 1681, 8, 139, 10, 139, 12, 139, 1684, 9, 139, 1, 140, 1, 140, 1, 140, + 3, 140, 1689, 8, 140, 1, 141, 1, 141, 3, 141, 1693, 8, 141, 1, 142, 5, 142, 1696, 8, + 142, 10, 142, 12, 142, 1699, 9, 142, 1, 142, 1, 142, 3, 142, 1703, 8, 142, 1, 143, + 1, 143, 3, 143, 1707, 8, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, + 1, 145, 1, 145, 3, 145, 1718, 8, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, + 1725, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, + 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1740, 8, 147, 1, 148, 1, 148, 1, 149, 1, 149, + 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, + 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 1762, 8, 152, 1, 153, 1, 153, 1, 153, + 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, + 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, + 1, 156, 3, 156, 1790, 8, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, + 1, 157, 1, 158, 1, 158, 1, 158, 5, 158, 1803, 8, 158, 10, 158, 12, 158, 1806, 9, 158, + 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1812, 8, 158, 10, 158, 12, 158, 1815, 9, 158, + 1, 158, 1, 158, 1, 158, 5, 158, 1820, 8, 158, 10, 158, 12, 158, 1823, 9, 158, 1, 158, + 3, 158, 1826, 8, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, + 1835, 8, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1842, 8, 160, 10, 160, + 12, 160, 1845, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1853, + 8, 161, 10, 161, 12, 161, 1856, 9, 161, 1, 161, 3, 161, 1859, 8, 161, 1, 162, 1, 162, + 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, + 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, + 3, 166, 1885, 8, 166, 1, 167, 1, 167, 3, 167, 1889, 8, 167, 1, 168, 1, 168, 1, 168, + 3, 168, 1894, 8, 168, 1, 168, 1, 168, 3, 168, 1898, 8, 168, 1, 168, 1, 168, 3, 168, + 1902, 8, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 3, 169, 1910, 8, 169, + 1, 169, 1, 169, 3, 169, 1914, 8, 169, 1, 169, 1, 169, 3, 169, 1918, 8, 169, 1, 169, + 1, 169, 1, 169, 1, 170, 1, 170, 3, 170, 1925, 8, 170, 1, 171, 1, 171, 1, 172, 1, 172, + 1, 172, 5, 172, 1932, 8, 172, 10, 172, 12, 172, 1935, 9, 172, 1, 173, 1, 173, 1, 173, + 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, + 1, 174, 1, 174, 1, 175, 1, 175, 3, 175, 1955, 8, 175, 1, 175, 1, 175, 1, 176, 1, 176, + 3, 176, 1961, 8, 176, 1, 176, 1, 176, 1, 177, 1, 177, 3, 177, 1967, 8, 177, 1, 177, + 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, + 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, + 3, 180, 1992, 8, 180, 1, 180, 1, 180, 1, 180, 3, 180, 1997, 8, 180, 1, 181, 1, 181, + 5, 181, 2001, 8, 181, 10, 181, 12, 181, 2004, 9, 181, 1, 182, 1, 182, 1, 182, 1, 182, + 1, 182, 1, 182, 1, 183, 5, 183, 2013, 8, 183, 10, 183, 12, 183, 2016, 9, 183, 1, 183, + 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 5, 184, 2024, 8, 184, 10, 184, 12, 184, 2027, + 9, 184, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2036, 8, 186, + 1, 186, 3, 186, 2039, 8, 186, 1, 187, 1, 187, 1, 187, 3, 187, 2044, 8, 187, 1, 187, + 1, 187, 1, 188, 1, 188, 1, 188, 5, 188, 2051, 8, 188, 10, 188, 12, 188, 2054, 9, 188, + 1, 189, 1, 189, 3, 189, 2058, 8, 189, 1, 190, 1, 190, 3, 190, 2062, 8, 190, 1, 191, + 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 193, 1, 193, 1, 194, 1, 194, 3, 194, 2074, + 8, 194, 1, 195, 1, 195, 3, 195, 2078, 8, 195, 1, 196, 1, 196, 3, 196, 2082, 8, 196, + 1, 196, 1, 196, 3, 196, 2086, 8, 196, 1, 196, 1, 196, 3, 196, 2090, 8, 196, 1, 196, + 1, 196, 1, 196, 1, 196, 3, 196, 2096, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, + 2102, 8, 196, 1, 196, 1, 196, 3, 196, 2106, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, + 3, 196, 2112, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2118, 8, 196, 1, 196, + 1, 196, 1, 196, 1, 196, 3, 196, 2124, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, + 2130, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2138, 8, 196, + 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2145, 8, 196, 1, 196, 1, 196, 1, 196, + 1, 196, 1, 196, 3, 196, 2152, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2157, 8, 196, + 1, 196, 1, 196, 3, 196, 2161, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2166, 8, 196, + 1, 196, 1, 196, 1, 196, 3, 196, 2171, 8, 196, 1, 196, 1, 196, 3, 196, 2175, 8, 196, + 1, 196, 1, 196, 1, 196, 3, 196, 2180, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2185, + 8, 196, 1, 196, 1, 196, 3, 196, 2189, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2194, + 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2199, 8, 196, 1, 196, 1, 196, 3, 196, 2203, + 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2208, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, + 2213, 8, 196, 1, 196, 1, 196, 3, 196, 2217, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, + 1, 196, 3, 196, 2224, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2229, 8, 196, 1, 196, + 1, 196, 3, 196, 2233, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2238, 8, 196, 1, 196, + 1, 196, 3, 196, 2242, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2247, 8, 196, 1, 196, + 1, 196, 3, 196, 2251, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2256, 8, 196, 1, 196, + 1, 196, 3, 196, 2260, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2265, 8, 196, 1, 196, + 1, 196, 3, 196, 2269, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2276, + 8, 196, 1, 196, 1, 196, 3, 196, 2280, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2285, + 8, 196, 1, 196, 1, 196, 3, 196, 2289, 8, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, + 2295, 8, 196, 3, 196, 2297, 8, 196, 1, 197, 1, 197, 1, 197, 3, 197, 2302, 8, 197, 1, + 197, 1, 197, 1, 197, 3, 197, 2307, 8, 197, 1, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2313, + 8, 197, 1, 197, 1, 197, 3, 197, 2317, 8, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2322, + 8, 197, 1, 197, 1, 197, 3, 197, 2326, 8, 197, 1, 197, 1, 197, 3, 197, 2330, 8, 197, + 1, 197, 1, 197, 3, 197, 2334, 8, 197, 3, 197, 2336, 8, 197, 1, 198, 1, 198, 1, 198, + 5, 198, 2341, 8, 198, 10, 198, 12, 198, 2344, 9, 198, 1, 198, 1, 198, 1, 198, 1, 198, + 1, 198, 1, 198, 5, 198, 2352, 8, 198, 10, 198, 12, 198, 2355, 9, 198, 1, 198, 1, 198, + 1, 198, 1, 198, 1, 198, 1, 198, 5, 198, 2363, 8, 198, 10, 198, 12, 198, 2366, 9, 198, + 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2373, 8, 198, 1, 199, 1, 199, 1, 199, + 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 2384, 8, 199, 1, 200, 1, 200, + 3, 200, 2388, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2393, 8, 200, 1, 200, 1, 200, + 3, 200, 2397, 8, 200, 1, 201, 5, 201, 2400, 8, 201, 10, 201, 12, 201, 2403, 9, 201, + 1, 201, 1, 201, 1, 201, 5, 201, 2408, 8, 201, 10, 201, 12, 201, 2411, 9, 201, 1, 201, + 5, 201, 2414, 8, 201, 10, 201, 12, 201, 2417, 9, 201, 1, 201, 3, 201, 2420, 8, 201, + 1, 202, 1, 202, 3, 202, 2424, 8, 202, 1, 203, 1, 203, 3, 203, 2428, 8, 203, 1, 204, + 1, 204, 1, 204, 1, 204, 3, 204, 2434, 8, 204, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, + 2440, 8, 204, 3, 204, 2442, 8, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, + 1, 205, 1, 205, 1, 205, 1, 205, 3, 205, 2454, 8, 205, 1, 206, 1, 206, 5, 206, 2458, + 8, 206, 10, 206, 12, 206, 2461, 9, 206, 1, 207, 5, 207, 2464, 8, 207, 10, 207, 12, + 207, 2467, 9, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, + 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, + 3, 208, 2488, 8, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, + 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 2503, 8, 209, 1, 210, 1, 210, 1, 210, + 3, 210, 2508, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2515, 8, 210, + 1, 210, 1, 210, 1, 210, 3, 210, 2520, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, + 3, 210, 2527, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2532, 8, 210, 1, 210, 1, 210, + 1, 210, 1, 210, 1, 210, 3, 210, 2539, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2544, + 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2551, 8, 210, 1, 210, 1, 210, + 1, 210, 3, 210, 2556, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, + 2564, 8, 210, 1, 210, 1, 210, 1, 210, 3, 210, 2569, 8, 210, 1, 210, 1, 210, 3, 210, + 2573, 8, 210, 1, 211, 1, 211, 1, 211, 5, 211, 2578, 8, 211, 10, 211, 12, 211, 2581, + 9, 211, 1, 212, 1, 212, 1, 212, 3, 212, 2586, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, + 1, 212, 3, 212, 2593, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2600, + 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2607, 8, 212, 1, 212, 1, 212, + 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2615, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, + 1, 212, 3, 212, 2622, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, + 2630, 8, 212, 1, 213, 1, 213, 3, 213, 2634, 8, 213, 1, 213, 1, 213, 3, 213, 2638, 8, + 213, 3, 213, 2640, 8, 213, 1, 214, 1, 214, 3, 214, 2644, 8, 214, 1, 214, 1, 214, 3, + 214, 2648, 8, 214, 3, 214, 2650, 8, 214, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, + 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 2665, 8, 217, 1, + 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, + 1, 220, 1, 220, 3, 220, 2680, 8, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, + 1, 221, 1, 221, 5, 221, 2690, 8, 221, 10, 221, 12, 221, 2693, 9, 221, 1, 221, 1, 221, + 1, 221, 1, 221, 1, 221, 1, 221, 5, 221, 2701, 8, 221, 10, 221, 12, 221, 2704, 9, 221, + 1, 221, 1, 221, 1, 221, 3, 221, 2709, 8, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, + 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 5, 222, 2723, 8, 222, 10, 222, + 12, 222, 2726, 9, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, + 1, 223, 5, 223, 2737, 8, 223, 10, 223, 12, 223, 2740, 9, 223, 1, 224, 1, 224, 1, 224, + 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, + 1, 224, 1, 224, 5, 224, 2758, 8, 224, 10, 224, 12, 224, 2761, 9, 224, 1, 225, 1, 225, + 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, + 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 3, 225, 2782, 8, 225, 5, 225, 2784, + 8, 225, 10, 225, 12, 225, 2787, 9, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, + 1, 226, 1, 226, 1, 226, 5, 226, 2798, 8, 226, 10, 226, 12, 226, 2801, 9, 226, 1, 227, + 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 5, 227, 2809, 8, 227, 10, 227, 12, 227, 2812, + 9, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 5, 228, 2820, 8, 228, 10, 228, + 12, 228, 2823, 9, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 5, 229, 2831, + 8, 229, 10, 229, 12, 229, 2834, 9, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, + 5, 230, 2842, 8, 230, 10, 230, 12, 230, 2845, 9, 230, 1, 231, 1, 231, 1, 231, 1, 231, + 1, 231, 1, 231, 5, 231, 2853, 8, 231, 10, 231, 12, 231, 2856, 9, 231, 1, 232, 1, 232, + 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, + 3, 232, 2871, 8, 232, 1, 233, 1, 233, 3, 233, 2875, 8, 233, 1, 234, 1, 234, 1, 234, + 1, 234, 1, 235, 1, 235, 1, 235, 3, 235, 2884, 8, 235, 1, 236, 1, 236, 1, 237, 1, 237, + 1, 237, 1, 237, 1, 238, 1, 238, 3, 238, 2894, 8, 238, 1, 238, 1, 238, 3, 238, 2898, + 8, 238, 1, 239, 1, 239, 1, 239, 5, 239, 2903, 8, 239, 10, 239, 12, 239, 2906, 9, 239, + 1, 239, 1, 239, 1, 239, 5, 239, 2911, 8, 239, 10, 239, 12, 239, 2914, 9, 239, 3, 239, + 2916, 8, 239, 1, 240, 5, 240, 2919, 8, 240, 10, 240, 12, 240, 2922, 9, 240, 1, 240, + 1, 240, 1, 240, 1, 240, 3, 240, 2928, 8, 240, 1, 241, 1, 241, 3, 241, 2932, 8, 241, + 1, 242, 1, 242, 3, 242, 2936, 8, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, + 1, 244, 1, 244, 1, 244, 0, 10, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 245, + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, + 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, + 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, + 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, + 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, + 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, + 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, + 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, + 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, + 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, + 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, + 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, + 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, + 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, + 478, 480, 482, 484, 486, 488, 0, 6, 1, 0, 69, 75, 5, 0, 22, 22, 25, 25, 44, 44, 46, 46, + 54, 54, 2, 0, 31, 31, 37, 37, 2, 0, 13, 13, 55, 55, 2, 0, 57, 57, 60, 60, 2, 0, 88, 88, + 112, 122, 3206, 0, 490, 1, 0, 0, 0, 2, 493, 1, 0, 0, 0, 4, 495, 1, 0, 0, 0, 6, 497, 1, 0, + 0, 0, 8, 502, 1, 0, 0, 0, 10, 511, 1, 0, 0, 0, 12, 513, 1, 0, 0, 0, 14, 515, 1, 0, 0, 0, 16, + 520, 1, 0, 0, 0, 18, 522, 1, 0, 0, 0, 20, 539, 1, 0, 0, 0, 22, 588, 1, 0, 0, 0, 24, 590, + 1, 0, 0, 0, 26, 595, 1, 0, 0, 0, 28, 609, 1, 0, 0, 0, 30, 614, 1, 0, 0, 0, 32, 635, 1, 0, + 0, 0, 34, 642, 1, 0, 0, 0, 36, 644, 1, 0, 0, 0, 38, 655, 1, 0, 0, 0, 40, 658, 1, 0, 0, 0, + 42, 662, 1, 0, 0, 0, 44, 672, 1, 0, 0, 0, 46, 677, 1, 0, 0, 0, 48, 688, 1, 0, 0, 0, 50, 690, + 1, 0, 0, 0, 52, 695, 1, 0, 0, 0, 54, 700, 1, 0, 0, 0, 56, 705, 1, 0, 0, 0, 58, 713, 1, 0, + 0, 0, 60, 717, 1, 0, 0, 0, 62, 719, 1, 0, 0, 0, 64, 726, 1, 0, 0, 0, 66, 729, 1, 0, 0, 0, + 68, 746, 1, 0, 0, 0, 70, 754, 1, 0, 0, 0, 72, 768, 1, 0, 0, 0, 74, 774, 1, 0, 0, 0, 76, 776, + 1, 0, 0, 0, 78, 780, 1, 0, 0, 0, 80, 786, 1, 0, 0, 0, 82, 793, 1, 0, 0, 0, 84, 803, 1, 0, + 0, 0, 86, 808, 1, 0, 0, 0, 88, 889, 1, 0, 0, 0, 90, 891, 1, 0, 0, 0, 92, 896, 1, 0, 0, 0, + 94, 901, 1, 0, 0, 0, 96, 930, 1, 0, 0, 0, 98, 932, 1, 0, 0, 0, 100, 936, 1, 0, 0, 0, 102, + 944, 1, 0, 0, 0, 104, 947, 1, 0, 0, 0, 106, 950, 1, 0, 0, 0, 108, 958, 1, 0, 0, 0, 110, + 967, 1, 0, 0, 0, 112, 980, 1, 0, 0, 0, 114, 987, 1, 0, 0, 0, 116, 992, 1, 0, 0, 0, 118, + 1007, 1, 0, 0, 0, 120, 1009, 1, 0, 0, 0, 122, 1017, 1, 0, 0, 0, 124, 1022, 1, 0, 0, 0, + 126, 1028, 1, 0, 0, 0, 128, 1032, 1, 0, 0, 0, 130, 1036, 1, 0, 0, 0, 132, 1041, 1, 0, + 0, 0, 134, 1051, 1, 0, 0, 0, 136, 1060, 1, 0, 0, 0, 138, 1093, 1, 0, 0, 0, 140, 1095, + 1, 0, 0, 0, 142, 1097, 1, 0, 0, 0, 144, 1102, 1, 0, 0, 0, 146, 1109, 1, 0, 0, 0, 148, 1125, + 1, 0, 0, 0, 150, 1134, 1, 0, 0, 0, 152, 1143, 1, 0, 0, 0, 154, 1145, 1, 0, 0, 0, 156, 1162, + 1, 0, 0, 0, 158, 1172, 1, 0, 0, 0, 160, 1190, 1, 0, 0, 0, 162, 1195, 1, 0, 0, 0, 164, 1210, + 1, 0, 0, 0, 166, 1212, 1, 0, 0, 0, 168, 1215, 1, 0, 0, 0, 170, 1225, 1, 0, 0, 0, 172, 1229, + 1, 0, 0, 0, 174, 1231, 1, 0, 0, 0, 176, 1233, 1, 0, 0, 0, 178, 1239, 1, 0, 0, 0, 180, 1252, + 1, 0, 0, 0, 182, 1255, 1, 0, 0, 0, 184, 1269, 1, 0, 0, 0, 186, 1271, 1, 0, 0, 0, 188, 1306, + 1, 0, 0, 0, 190, 1311, 1, 0, 0, 0, 192, 1321, 1, 0, 0, 0, 194, 1333, 1, 0, 0, 0, 196, 1344, + 1, 0, 0, 0, 198, 1358, 1, 0, 0, 0, 200, 1360, 1, 0, 0, 0, 202, 1370, 1, 0, 0, 0, 204, 1384, + 1, 0, 0, 0, 206, 1390, 1, 0, 0, 0, 208, 1408, 1, 0, 0, 0, 210, 1413, 1, 0, 0, 0, 212, 1426, + 1, 0, 0, 0, 214, 1428, 1, 0, 0, 0, 216, 1439, 1, 0, 0, 0, 218, 1444, 1, 0, 0, 0, 220, 1452, + 1, 0, 0, 0, 222, 1457, 1, 0, 0, 0, 224, 1482, 1, 0, 0, 0, 226, 1484, 1, 0, 0, 0, 228, 1487, + 1, 0, 0, 0, 230, 1496, 1, 0, 0, 0, 232, 1510, 1, 0, 0, 0, 234, 1515, 1, 0, 0, 0, 236, 1526, + 1, 0, 0, 0, 238, 1531, 1, 0, 0, 0, 240, 1544, 1, 0, 0, 0, 242, 1549, 1, 0, 0, 0, 244, 1557, + 1, 0, 0, 0, 246, 1571, 1, 0, 0, 0, 248, 1576, 1, 0, 0, 0, 250, 1594, 1, 0, 0, 0, 252, 1596, + 1, 0, 0, 0, 254, 1602, 1, 0, 0, 0, 256, 1604, 1, 0, 0, 0, 258, 1612, 1, 0, 0, 0, 260, 1620, + 1, 0, 0, 0, 262, 1627, 1, 0, 0, 0, 264, 1629, 1, 0, 0, 0, 266, 1638, 1, 0, 0, 0, 268, 1646, + 1, 0, 0, 0, 270, 1649, 1, 0, 0, 0, 272, 1655, 1, 0, 0, 0, 274, 1664, 1, 0, 0, 0, 276, 1672, + 1, 0, 0, 0, 278, 1678, 1, 0, 0, 0, 280, 1688, 1, 0, 0, 0, 282, 1692, 1, 0, 0, 0, 284, 1697, + 1, 0, 0, 0, 286, 1706, 1, 0, 0, 0, 288, 1708, 1, 0, 0, 0, 290, 1717, 1, 0, 0, 0, 292, 1724, + 1, 0, 0, 0, 294, 1739, 1, 0, 0, 0, 296, 1741, 1, 0, 0, 0, 298, 1743, 1, 0, 0, 0, 300, 1747, + 1, 0, 0, 0, 302, 1751, 1, 0, 0, 0, 304, 1761, 1, 0, 0, 0, 306, 1763, 1, 0, 0, 0, 308, 1769, + 1, 0, 0, 0, 310, 1777, 1, 0, 0, 0, 312, 1785, 1, 0, 0, 0, 314, 1793, 1, 0, 0, 0, 316, 1825, + 1, 0, 0, 0, 318, 1827, 1, 0, 0, 0, 320, 1836, 1, 0, 0, 0, 322, 1858, 1, 0, 0, 0, 324, 1860, + 1, 0, 0, 0, 326, 1862, 1, 0, 0, 0, 328, 1868, 1, 0, 0, 0, 330, 1874, 1, 0, 0, 0, 332, 1884, + 1, 0, 0, 0, 334, 1888, 1, 0, 0, 0, 336, 1890, 1, 0, 0, 0, 338, 1906, 1, 0, 0, 0, 340, 1924, + 1, 0, 0, 0, 342, 1926, 1, 0, 0, 0, 344, 1928, 1, 0, 0, 0, 346, 1936, 1, 0, 0, 0, 348, 1944, + 1, 0, 0, 0, 350, 1952, 1, 0, 0, 0, 352, 1958, 1, 0, 0, 0, 354, 1964, 1, 0, 0, 0, 356, 1970, + 1, 0, 0, 0, 358, 1974, 1, 0, 0, 0, 360, 1996, 1, 0, 0, 0, 362, 1998, 1, 0, 0, 0, 364, 2005, + 1, 0, 0, 0, 366, 2014, 1, 0, 0, 0, 368, 2020, 1, 0, 0, 0, 370, 2028, 1, 0, 0, 0, 372, 2031, + 1, 0, 0, 0, 374, 2040, 1, 0, 0, 0, 376, 2047, 1, 0, 0, 0, 378, 2057, 1, 0, 0, 0, 380, 2061, + 1, 0, 0, 0, 382, 2063, 1, 0, 0, 0, 384, 2067, 1, 0, 0, 0, 386, 2069, 1, 0, 0, 0, 388, 2073, + 1, 0, 0, 0, 390, 2077, 1, 0, 0, 0, 392, 2296, 1, 0, 0, 0, 394, 2335, 1, 0, 0, 0, 396, 2372, + 1, 0, 0, 0, 398, 2383, 1, 0, 0, 0, 400, 2385, 1, 0, 0, 0, 402, 2401, 1, 0, 0, 0, 404, 2423, + 1, 0, 0, 0, 406, 2427, 1, 0, 0, 0, 408, 2441, 1, 0, 0, 0, 410, 2453, 1, 0, 0, 0, 412, 2455, + 1, 0, 0, 0, 414, 2465, 1, 0, 0, 0, 416, 2487, 1, 0, 0, 0, 418, 2502, 1, 0, 0, 0, 420, 2572, + 1, 0, 0, 0, 422, 2574, 1, 0, 0, 0, 424, 2629, 1, 0, 0, 0, 426, 2639, 1, 0, 0, 0, 428, 2649, + 1, 0, 0, 0, 430, 2651, 1, 0, 0, 0, 432, 2654, 1, 0, 0, 0, 434, 2664, 1, 0, 0, 0, 436, 2666, + 1, 0, 0, 0, 438, 2669, 1, 0, 0, 0, 440, 2679, 1, 0, 0, 0, 442, 2708, 1, 0, 0, 0, 444, 2710, + 1, 0, 0, 0, 446, 2727, 1, 0, 0, 0, 448, 2741, 1, 0, 0, 0, 450, 2762, 1, 0, 0, 0, 452, 2788, + 1, 0, 0, 0, 454, 2802, 1, 0, 0, 0, 456, 2813, 1, 0, 0, 0, 458, 2824, 1, 0, 0, 0, 460, 2835, + 1, 0, 0, 0, 462, 2846, 1, 0, 0, 0, 464, 2870, 1, 0, 0, 0, 466, 2874, 1, 0, 0, 0, 468, 2876, + 1, 0, 0, 0, 470, 2883, 1, 0, 0, 0, 472, 2885, 1, 0, 0, 0, 474, 2887, 1, 0, 0, 0, 476, 2897, + 1, 0, 0, 0, 478, 2915, 1, 0, 0, 0, 480, 2927, 1, 0, 0, 0, 482, 2931, 1, 0, 0, 0, 484, 2935, + 1, 0, 0, 0, 486, 2937, 1, 0, 0, 0, 488, 2943, 1, 0, 0, 0, 490, 491, 3, 64, 32, 0, 491, + 492, 5, 0, 0, 1, 492, 1, 1, 0, 0, 0, 493, 494, 7, 0, 0, 0, 494, 3, 1, 0, 0, 0, 495, 496, + 5, 123, 0, 0, 496, 5, 1, 0, 0, 0, 497, 498, 5, 123, 0, 0, 498, 7, 1, 0, 0, 0, 499, 501, + 3, 254, 127, 0, 500, 499, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, + 503, 1, 0, 0, 0, 503, 507, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 508, 3, 10, 5, 0, 506, + 508, 5, 20, 0, 0, 507, 505, 1, 0, 0, 0, 507, 506, 1, 0, 0, 0, 508, 9, 1, 0, 0, 0, 509, 512, + 3, 12, 6, 0, 510, 512, 3, 14, 7, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 11, + 1, 0, 0, 0, 513, 514, 7, 1, 0, 0, 514, 13, 1, 0, 0, 0, 515, 516, 7, 2, 0, 0, 516, 15, 1, + 0, 0, 0, 517, 521, 3, 20, 10, 0, 518, 521, 3, 26, 13, 0, 519, 521, 3, 28, 14, 0, 520, + 517, 1, 0, 0, 0, 520, 518, 1, 0, 0, 0, 520, 519, 1, 0, 0, 0, 521, 17, 1, 0, 0, 0, 522, 526, + 5, 84, 0, 0, 523, 525, 3, 254, 127, 0, 524, 523, 1, 0, 0, 0, 525, 528, 1, 0, 0, 0, 526, + 524, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 529, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 529, + 531, 3, 4, 2, 0, 530, 532, 3, 40, 20, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, + 534, 1, 0, 0, 0, 533, 535, 3, 18, 9, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, + 19, 1, 0, 0, 0, 536, 537, 3, 52, 26, 0, 537, 538, 5, 84, 0, 0, 538, 540, 1, 0, 0, 0, 539, + 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 544, 1, 0, 0, 0, 541, 543, 3, 254, 127, 0, + 542, 541, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, + 545, 547, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 547, 549, 3, 4, 2, 0, 548, 550, 3, 40, 20, + 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 552, 1, 0, 0, 0, 551, 553, 3, 18, 9, + 0, 552, 551, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 21, 1, 0, 0, 0, 554, 556, 3, 254, 127, + 0, 555, 554, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, + 0, 558, 560, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 562, 3, 4, 2, 0, 561, 563, 3, 40, 20, + 0, 562, 561, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 589, 1, 0, 0, 0, 564, 565, 3, 52, 26, + 0, 565, 569, 5, 84, 0, 0, 566, 568, 3, 254, 127, 0, 567, 566, 1, 0, 0, 0, 568, 571, 1, + 0, 0, 0, 569, 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 572, 1, 0, 0, 0, 571, 569, 1, + 0, 0, 0, 572, 574, 3, 4, 2, 0, 573, 575, 3, 40, 20, 0, 574, 573, 1, 0, 0, 0, 574, 575, + 1, 0, 0, 0, 575, 589, 1, 0, 0, 0, 576, 577, 3, 20, 10, 0, 577, 581, 5, 84, 0, 0, 578, 580, + 3, 254, 127, 0, 579, 578, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 581, + 582, 1, 0, 0, 0, 582, 584, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 584, 586, 3, 4, 2, 0, 585, + 587, 3, 40, 20, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, + 557, 1, 0, 0, 0, 588, 564, 1, 0, 0, 0, 588, 576, 1, 0, 0, 0, 589, 23, 1, 0, 0, 0, 590, 591, + 3, 22, 11, 0, 591, 25, 1, 0, 0, 0, 592, 594, 3, 254, 127, 0, 593, 592, 1, 0, 0, 0, 594, + 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 1, 0, 0, 0, 597, + 595, 1, 0, 0, 0, 598, 599, 3, 4, 2, 0, 599, 27, 1, 0, 0, 0, 600, 601, 3, 8, 4, 0, 601, 602, + 3, 30, 15, 0, 602, 610, 1, 0, 0, 0, 603, 604, 3, 22, 11, 0, 604, 605, 3, 30, 15, 0, 605, + 610, 1, 0, 0, 0, 606, 607, 3, 26, 13, 0, 607, 608, 3, 30, 15, 0, 608, 610, 1, 0, 0, 0, + 609, 600, 1, 0, 0, 0, 609, 603, 1, 0, 0, 0, 609, 606, 1, 0, 0, 0, 610, 29, 1, 0, 0, 0, 611, + 613, 3, 254, 127, 0, 612, 611, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, + 614, 615, 1, 0, 0, 0, 615, 617, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 617, 618, 5, 80, 0, 0, + 618, 629, 5, 81, 0, 0, 619, 621, 3, 254, 127, 0, 620, 619, 1, 0, 0, 0, 621, 624, 1, 0, + 0, 0, 622, 620, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 1, 0, 0, 0, 624, 622, 1, 0, + 0, 0, 625, 626, 5, 80, 0, 0, 626, 628, 5, 81, 0, 0, 627, 622, 1, 0, 0, 0, 628, 631, 1, + 0, 0, 0, 629, 627, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 31, 1, 0, 0, 0, 631, 629, 1, 0, + 0, 0, 632, 634, 3, 34, 17, 0, 633, 632, 1, 0, 0, 0, 634, 637, 1, 0, 0, 0, 635, 633, 1, + 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 638, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 638, 640, 3, + 4, 2, 0, 639, 641, 3, 36, 18, 0, 640, 639, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 33, 1, + 0, 0, 0, 642, 643, 3, 254, 127, 0, 643, 35, 1, 0, 0, 0, 644, 653, 5, 34, 0, 0, 645, 654, + 3, 26, 13, 0, 646, 650, 3, 20, 10, 0, 647, 649, 3, 38, 19, 0, 648, 647, 1, 0, 0, 0, 649, + 652, 1, 0, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 654, 1, 0, 0, 0, 652, + 650, 1, 0, 0, 0, 653, 645, 1, 0, 0, 0, 653, 646, 1, 0, 0, 0, 654, 37, 1, 0, 0, 0, 655, 656, + 5, 108, 0, 0, 656, 657, 3, 24, 12, 0, 657, 39, 1, 0, 0, 0, 658, 659, 5, 90, 0, 0, 659, + 660, 3, 42, 21, 0, 660, 661, 5, 89, 0, 0, 661, 41, 1, 0, 0, 0, 662, 667, 3, 44, 22, 0, + 663, 664, 5, 83, 0, 0, 664, 666, 3, 44, 22, 0, 665, 663, 1, 0, 0, 0, 666, 669, 1, 0, 0, + 0, 667, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 43, 1, 0, 0, 0, 669, 667, 1, 0, 0, 0, + 670, 673, 3, 16, 8, 0, 671, 673, 3, 46, 23, 0, 672, 670, 1, 0, 0, 0, 672, 671, 1, 0, 0, + 0, 673, 45, 1, 0, 0, 0, 674, 676, 3, 254, 127, 0, 675, 674, 1, 0, 0, 0, 676, 679, 1, 0, + 0, 0, 677, 675, 1, 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 680, 1, 0, 0, 0, 679, 677, 1, 0, + 0, 0, 680, 682, 5, 93, 0, 0, 681, 683, 3, 48, 24, 0, 682, 681, 1, 0, 0, 0, 682, 683, 1, + 0, 0, 0, 683, 47, 1, 0, 0, 0, 684, 685, 5, 34, 0, 0, 685, 689, 3, 16, 8, 0, 686, 687, 5, + 57, 0, 0, 687, 689, 3, 16, 8, 0, 688, 684, 1, 0, 0, 0, 688, 686, 1, 0, 0, 0, 689, 49, 1, + 0, 0, 0, 690, 693, 5, 123, 0, 0, 691, 692, 5, 84, 0, 0, 692, 694, 3, 50, 25, 0, 693, 691, + 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 51, 1, 0, 0, 0, 695, 698, 5, 123, 0, 0, 696, 697, + 5, 84, 0, 0, 697, 699, 3, 52, 26, 0, 698, 696, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 53, + 1, 0, 0, 0, 700, 703, 3, 52, 26, 0, 701, 702, 5, 84, 0, 0, 702, 704, 3, 4, 2, 0, 703, 701, + 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 55, 1, 0, 0, 0, 705, 708, 5, 123, 0, 0, 706, 707, + 5, 84, 0, 0, 707, 709, 3, 56, 28, 0, 708, 706, 1, 0, 0, 0, 708, 709, 1, 0, 0, 0, 709, 57, + 1, 0, 0, 0, 710, 711, 3, 62, 31, 0, 711, 712, 5, 84, 0, 0, 712, 714, 1, 0, 0, 0, 713, 710, + 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 5, 123, 0, 0, 716, 59, + 1, 0, 0, 0, 717, 718, 3, 6, 3, 0, 718, 61, 1, 0, 0, 0, 719, 722, 5, 123, 0, 0, 720, 721, + 5, 84, 0, 0, 721, 723, 3, 62, 31, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 63, + 1, 0, 0, 0, 724, 727, 3, 66, 33, 0, 725, 727, 3, 68, 34, 0, 726, 724, 1, 0, 0, 0, 726, + 725, 1, 0, 0, 0, 727, 65, 1, 0, 0, 0, 728, 730, 3, 70, 35, 0, 729, 728, 1, 0, 0, 0, 729, + 730, 1, 0, 0, 0, 730, 734, 1, 0, 0, 0, 731, 733, 3, 74, 37, 0, 732, 731, 1, 0, 0, 0, 733, + 736, 1, 0, 0, 0, 734, 732, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 740, 1, 0, 0, 0, 736, + 734, 1, 0, 0, 0, 737, 739, 3, 84, 42, 0, 738, 737, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, + 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 67, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 743, 745, + 3, 74, 37, 0, 744, 743, 1, 0, 0, 0, 745, 748, 1, 0, 0, 0, 746, 744, 1, 0, 0, 0, 746, 747, + 1, 0, 0, 0, 747, 749, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 749, 750, 3, 86, 43, 0, 750, 69, + 1, 0, 0, 0, 751, 753, 3, 72, 36, 0, 752, 751, 1, 0, 0, 0, 753, 756, 1, 0, 0, 0, 754, 752, + 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 757, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 757, 758, + 5, 49, 0, 0, 758, 763, 5, 123, 0, 0, 759, 760, 5, 84, 0, 0, 760, 762, 5, 123, 0, 0, 761, + 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, + 766, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 767, 5, 82, 0, 0, 767, 71, 1, 0, 0, 0, 768, + 769, 3, 254, 127, 0, 769, 73, 1, 0, 0, 0, 770, 775, 3, 76, 38, 0, 771, 775, 3, 78, 39, + 0, 772, 775, 3, 80, 40, 0, 773, 775, 3, 82, 41, 0, 774, 770, 1, 0, 0, 0, 774, 771, 1, + 0, 0, 0, 774, 772, 1, 0, 0, 0, 774, 773, 1, 0, 0, 0, 775, 75, 1, 0, 0, 0, 776, 777, 5, 42, + 0, 0, 777, 778, 3, 54, 27, 0, 778, 779, 5, 82, 0, 0, 779, 77, 1, 0, 0, 0, 780, 781, 5, + 42, 0, 0, 781, 782, 3, 56, 28, 0, 782, 783, 5, 84, 0, 0, 783, 784, 5, 106, 0, 0, 784, + 785, 5, 82, 0, 0, 785, 79, 1, 0, 0, 0, 786, 787, 5, 42, 0, 0, 787, 788, 5, 55, 0, 0, 788, + 789, 3, 54, 27, 0, 789, 790, 5, 84, 0, 0, 790, 791, 5, 123, 0, 0, 791, 792, 5, 82, 0, + 0, 792, 81, 1, 0, 0, 0, 793, 794, 5, 42, 0, 0, 794, 795, 5, 55, 0, 0, 795, 796, 3, 54, + 27, 0, 796, 797, 5, 84, 0, 0, 797, 798, 5, 106, 0, 0, 798, 799, 5, 82, 0, 0, 799, 83, + 1, 0, 0, 0, 800, 804, 3, 92, 46, 0, 801, 804, 3, 220, 110, 0, 802, 804, 5, 82, 0, 0, 803, + 800, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 803, 802, 1, 0, 0, 0, 804, 85, 1, 0, 0, 0, 805, 807, + 3, 254, 127, 0, 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, + 809, 1, 0, 0, 0, 809, 812, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 813, 5, 5, 0, 0, 812, + 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 815, 5, 2, 0, 0, 815, + 820, 5, 123, 0, 0, 816, 817, 5, 84, 0, 0, 817, 819, 5, 123, 0, 0, 818, 816, 1, 0, 0, 0, + 819, 822, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 823, 1, 0, 0, 0, + 822, 820, 1, 0, 0, 0, 823, 827, 5, 78, 0, 0, 824, 826, 3, 88, 44, 0, 825, 824, 1, 0, 0, + 0, 826, 829, 1, 0, 0, 0, 827, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 1, 0, 0, + 0, 829, 827, 1, 0, 0, 0, 830, 831, 5, 79, 0, 0, 831, 87, 1, 0, 0, 0, 832, 836, 5, 10, 0, + 0, 833, 835, 3, 90, 45, 0, 834, 833, 1, 0, 0, 0, 835, 838, 1, 0, 0, 0, 836, 834, 1, 0, + 0, 0, 836, 837, 1, 0, 0, 0, 837, 839, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 840, 3, 50, + 25, 0, 840, 841, 5, 82, 0, 0, 841, 890, 1, 0, 0, 0, 842, 843, 5, 1, 0, 0, 843, 853, 3, + 52, 26, 0, 844, 845, 5, 12, 0, 0, 845, 850, 3, 50, 25, 0, 846, 847, 5, 83, 0, 0, 847, + 849, 3, 50, 25, 0, 848, 846, 1, 0, 0, 0, 849, 852, 1, 0, 0, 0, 850, 848, 1, 0, 0, 0, 850, + 851, 1, 0, 0, 0, 851, 854, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 853, 844, 1, 0, 0, 0, 853, + 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 5, 82, 0, 0, 856, 890, 1, 0, 0, 0, 857, + 858, 5, 6, 0, 0, 858, 868, 3, 52, 26, 0, 859, 860, 5, 12, 0, 0, 860, 865, 3, 50, 25, 0, + 861, 862, 5, 83, 0, 0, 862, 864, 3, 50, 25, 0, 863, 861, 1, 0, 0, 0, 864, 867, 1, 0, 0, + 0, 865, 863, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 869, 1, 0, 0, 0, 867, 865, 1, 0, 0, + 0, 868, 859, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 5, 82, 0, + 0, 871, 890, 1, 0, 0, 0, 872, 873, 5, 14, 0, 0, 873, 874, 3, 54, 27, 0, 874, 875, 5, 82, + 0, 0, 875, 890, 1, 0, 0, 0, 876, 877, 5, 8, 0, 0, 877, 878, 3, 54, 27, 0, 878, 879, 5, + 16, 0, 0, 879, 884, 3, 54, 27, 0, 880, 881, 5, 83, 0, 0, 881, 883, 3, 54, 27, 0, 882, + 880, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, + 887, 1, 0, 0, 0, 886, 884, 1, 0, 0, 0, 887, 888, 5, 82, 0, 0, 888, 890, 1, 0, 0, 0, 889, + 832, 1, 0, 0, 0, 889, 842, 1, 0, 0, 0, 889, 857, 1, 0, 0, 0, 889, 872, 1, 0, 0, 0, 889, + 876, 1, 0, 0, 0, 890, 89, 1, 0, 0, 0, 891, 892, 7, 3, 0, 0, 892, 91, 1, 0, 0, 0, 893, 897, + 3, 94, 47, 0, 894, 897, 3, 190, 95, 0, 895, 897, 3, 202, 101, 0, 896, 893, 1, 0, 0, 0, + 896, 894, 1, 0, 0, 0, 896, 895, 1, 0, 0, 0, 897, 93, 1, 0, 0, 0, 898, 900, 3, 96, 48, 0, + 899, 898, 1, 0, 0, 0, 900, 903, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, + 902, 904, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 904, 905, 5, 26, 0, 0, 905, 907, 3, 4, 2, 0, + 906, 908, 3, 98, 49, 0, 907, 906, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 910, 1, 0, 0, + 0, 909, 911, 3, 102, 51, 0, 910, 909, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 913, 1, 0, + 0, 0, 912, 914, 3, 104, 52, 0, 913, 912, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 916, 1, + 0, 0, 0, 915, 917, 3, 108, 54, 0, 916, 915, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 918, + 1, 0, 0, 0, 918, 919, 3, 110, 55, 0, 919, 95, 1, 0, 0, 0, 920, 931, 3, 254, 127, 0, 921, + 931, 5, 52, 0, 0, 922, 931, 5, 51, 0, 0, 923, 931, 5, 50, 0, 0, 924, 931, 5, 18, 0, 0, + 925, 931, 5, 55, 0, 0, 926, 931, 5, 35, 0, 0, 927, 931, 5, 11, 0, 0, 928, 931, 5, 3, 0, + 0, 929, 931, 5, 56, 0, 0, 930, 920, 1, 0, 0, 0, 930, 921, 1, 0, 0, 0, 930, 922, 1, 0, 0, + 0, 930, 923, 1, 0, 0, 0, 930, 924, 1, 0, 0, 0, 930, 925, 1, 0, 0, 0, 930, 926, 1, 0, 0, + 0, 930, 927, 1, 0, 0, 0, 930, 928, 1, 0, 0, 0, 930, 929, 1, 0, 0, 0, 931, 97, 1, 0, 0, 0, + 932, 933, 5, 90, 0, 0, 933, 934, 3, 100, 50, 0, 934, 935, 5, 89, 0, 0, 935, 99, 1, 0, + 0, 0, 936, 941, 3, 32, 16, 0, 937, 938, 5, 83, 0, 0, 938, 940, 3, 32, 16, 0, 939, 937, + 1, 0, 0, 0, 940, 943, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 101, + 1, 0, 0, 0, 943, 941, 1, 0, 0, 0, 944, 945, 5, 34, 0, 0, 945, 946, 3, 22, 11, 0, 946, 103, + 1, 0, 0, 0, 947, 948, 5, 41, 0, 0, 948, 949, 3, 106, 53, 0, 949, 105, 1, 0, 0, 0, 950, + 955, 3, 24, 12, 0, 951, 952, 5, 83, 0, 0, 952, 954, 3, 24, 12, 0, 953, 951, 1, 0, 0, 0, + 954, 957, 1, 0, 0, 0, 955, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 107, 1, 0, 0, 0, + 957, 955, 1, 0, 0, 0, 958, 959, 5, 7, 0, 0, 959, 964, 3, 54, 27, 0, 960, 961, 5, 83, 0, + 0, 961, 963, 3, 54, 27, 0, 962, 960, 1, 0, 0, 0, 963, 966, 1, 0, 0, 0, 964, 962, 1, 0, + 0, 0, 964, 965, 1, 0, 0, 0, 965, 109, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 967, 971, 5, 78, + 0, 0, 968, 970, 3, 112, 56, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, + 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 975, 5, + 79, 0, 0, 975, 111, 1, 0, 0, 0, 976, 981, 3, 114, 57, 0, 977, 981, 3, 174, 87, 0, 978, + 981, 3, 176, 88, 0, 979, 981, 3, 178, 89, 0, 980, 976, 1, 0, 0, 0, 980, 977, 1, 0, 0, + 0, 980, 978, 1, 0, 0, 0, 980, 979, 1, 0, 0, 0, 981, 113, 1, 0, 0, 0, 982, 988, 3, 116, + 58, 0, 983, 988, 3, 146, 73, 0, 984, 988, 3, 92, 46, 0, 985, 988, 3, 220, 110, 0, 986, + 988, 5, 82, 0, 0, 987, 982, 1, 0, 0, 0, 987, 983, 1, 0, 0, 0, 987, 984, 1, 0, 0, 0, 987, + 985, 1, 0, 0, 0, 987, 986, 1, 0, 0, 0, 988, 115, 1, 0, 0, 0, 989, 991, 3, 118, 59, 0, 990, + 989, 1, 0, 0, 0, 991, 994, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, + 995, 1, 0, 0, 0, 994, 992, 1, 0, 0, 0, 995, 996, 3, 128, 64, 0, 996, 997, 3, 120, 60, + 0, 997, 998, 5, 82, 0, 0, 998, 117, 1, 0, 0, 0, 999, 1008, 3, 254, 127, 0, 1000, 1008, + 5, 52, 0, 0, 1001, 1008, 5, 51, 0, 0, 1002, 1008, 5, 50, 0, 0, 1003, 1008, 5, 55, 0, + 0, 1004, 1008, 5, 35, 0, 0, 1005, 1008, 5, 63, 0, 0, 1006, 1008, 5, 66, 0, 0, 1007, + 999, 1, 0, 0, 0, 1007, 1000, 1, 0, 0, 0, 1007, 1001, 1, 0, 0, 0, 1007, 1002, 1, 0, 0, + 0, 1007, 1003, 1, 0, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1005, 1, 0, 0, 0, 1007, 1006, + 1, 0, 0, 0, 1008, 119, 1, 0, 0, 0, 1009, 1014, 3, 122, 61, 0, 1010, 1011, 5, 83, 0, 0, + 1011, 1013, 3, 122, 61, 0, 1012, 1010, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1012, + 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 121, 1, 0, 0, 0, 1016, 1014, 1, 0, 0, 0, 1017, + 1020, 3, 124, 62, 0, 1018, 1019, 5, 88, 0, 0, 1019, 1021, 3, 126, 63, 0, 1020, 1018, + 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 123, 1, 0, 0, 0, 1022, 1024, 5, 123, 0, 0, 1023, + 1025, 3, 30, 15, 0, 1024, 1023, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 125, 1, 0, + 0, 0, 1026, 1029, 3, 388, 194, 0, 1027, 1029, 3, 272, 136, 0, 1028, 1026, 1, 0, 0, + 0, 1028, 1027, 1, 0, 0, 0, 1029, 127, 1, 0, 0, 0, 1030, 1033, 3, 130, 65, 0, 1031, 1033, + 3, 132, 66, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1031, 1, 0, 0, 0, 1033, 129, 1, 0, 0, 0, + 1034, 1037, 3, 10, 5, 0, 1035, 1037, 5, 20, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1035, + 1, 0, 0, 0, 1037, 131, 1, 0, 0, 0, 1038, 1042, 3, 134, 67, 0, 1039, 1042, 3, 142, 71, + 0, 1040, 1042, 3, 144, 72, 0, 1041, 1038, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, + 1040, 1, 0, 0, 0, 1042, 133, 1, 0, 0, 0, 1043, 1044, 3, 52, 26, 0, 1044, 1048, 5, 84, + 0, 0, 1045, 1047, 3, 254, 127, 0, 1046, 1045, 1, 0, 0, 0, 1047, 1050, 1, 0, 0, 0, 1048, + 1046, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1052, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, + 0, 1051, 1043, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1055, + 3, 4, 2, 0, 1054, 1056, 3, 40, 20, 0, 1055, 1054, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, + 1056, 1058, 1, 0, 0, 0, 1057, 1059, 3, 136, 68, 0, 1058, 1057, 1, 0, 0, 0, 1058, 1059, + 1, 0, 0, 0, 1059, 135, 1, 0, 0, 0, 1060, 1064, 5, 84, 0, 0, 1061, 1063, 3, 254, 127, + 0, 1062, 1061, 1, 0, 0, 0, 1063, 1066, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1065, + 1, 0, 0, 0, 1065, 1067, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1067, 1069, 3, 4, 2, 0, 1068, + 1070, 3, 40, 20, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1072, 1, 0, + 0, 0, 1071, 1073, 3, 136, 68, 0, 1072, 1071, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, + 137, 1, 0, 0, 0, 1074, 1076, 3, 4, 2, 0, 1075, 1077, 3, 40, 20, 0, 1076, 1075, 1, 0, + 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1094, 1, 0, 0, 0, 1078, 1081, 3, 52, 26, 0, 1079, + 1081, 3, 134, 67, 0, 1080, 1078, 1, 0, 0, 0, 1080, 1079, 1, 0, 0, 0, 1081, 1082, 1, + 0, 0, 0, 1082, 1086, 5, 84, 0, 0, 1083, 1085, 3, 254, 127, 0, 1084, 1083, 1, 0, 0, 0, + 1085, 1088, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, + 1, 0, 0, 0, 1088, 1086, 1, 0, 0, 0, 1089, 1091, 3, 4, 2, 0, 1090, 1092, 3, 40, 20, 0, + 1091, 1090, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1094, 1, 0, 0, 0, 1093, 1074, + 1, 0, 0, 0, 1093, 1080, 1, 0, 0, 0, 1094, 139, 1, 0, 0, 0, 1095, 1096, 3, 138, 69, 0, + 1096, 141, 1, 0, 0, 0, 1097, 1098, 3, 4, 2, 0, 1098, 143, 1, 0, 0, 0, 1099, 1103, 3, + 130, 65, 0, 1100, 1103, 3, 134, 67, 0, 1101, 1103, 3, 142, 71, 0, 1102, 1099, 1, 0, + 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1105, + 3, 30, 15, 0, 1105, 145, 1, 0, 0, 0, 1106, 1108, 3, 148, 74, 0, 1107, 1106, 1, 0, 0, + 0, 1108, 1111, 1, 0, 0, 0, 1109, 1107, 1, 0, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1112, + 1, 0, 0, 0, 1111, 1109, 1, 0, 0, 0, 1112, 1113, 3, 150, 75, 0, 1113, 1114, 3, 172, 86, + 0, 1114, 147, 1, 0, 0, 0, 1115, 1126, 3, 254, 127, 0, 1116, 1126, 5, 52, 0, 0, 1117, + 1126, 5, 51, 0, 0, 1118, 1126, 5, 50, 0, 0, 1119, 1126, 5, 18, 0, 0, 1120, 1126, 5, + 55, 0, 0, 1121, 1126, 5, 35, 0, 0, 1122, 1126, 5, 59, 0, 0, 1123, 1126, 5, 47, 0, 0, + 1124, 1126, 5, 56, 0, 0, 1125, 1115, 1, 0, 0, 0, 1125, 1116, 1, 0, 0, 0, 1125, 1117, + 1, 0, 0, 0, 1125, 1118, 1, 0, 0, 0, 1125, 1119, 1, 0, 0, 0, 1125, 1120, 1, 0, 0, 0, 1125, + 1121, 1, 0, 0, 0, 1125, 1122, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1125, 1124, 1, 0, 0, + 0, 1126, 149, 1, 0, 0, 0, 1127, 1131, 3, 98, 49, 0, 1128, 1130, 3, 254, 127, 0, 1129, + 1128, 1, 0, 0, 0, 1130, 1133, 1, 0, 0, 0, 1131, 1129, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, + 0, 1132, 1135, 1, 0, 0, 0, 1133, 1131, 1, 0, 0, 0, 1134, 1127, 1, 0, 0, 0, 1134, 1135, + 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 3, 152, 76, 0, 1137, 1139, 3, 154, 77, + 0, 1138, 1140, 3, 166, 83, 0, 1139, 1138, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, + 151, 1, 0, 0, 0, 1141, 1144, 3, 128, 64, 0, 1142, 1144, 5, 65, 0, 0, 1143, 1141, 1, + 0, 0, 0, 1143, 1142, 1, 0, 0, 0, 1144, 153, 1, 0, 0, 0, 1145, 1146, 5, 123, 0, 0, 1146, + 1150, 5, 76, 0, 0, 1147, 1148, 3, 156, 78, 0, 1148, 1149, 5, 83, 0, 0, 1149, 1151, + 1, 0, 0, 0, 1150, 1147, 1, 0, 0, 0, 1150, 1151, 1, 0, 0, 0, 1151, 1153, 1, 0, 0, 0, 1152, + 1154, 3, 158, 79, 0, 1153, 1152, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1155, 1, + 0, 0, 0, 1155, 1157, 5, 77, 0, 0, 1156, 1158, 3, 30, 15, 0, 1157, 1156, 1, 0, 0, 0, 1157, + 1158, 1, 0, 0, 0, 1158, 155, 1, 0, 0, 0, 1159, 1161, 3, 254, 127, 0, 1160, 1159, 1, + 0, 0, 0, 1161, 1164, 1, 0, 0, 0, 1162, 1160, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, + 1165, 1, 0, 0, 0, 1164, 1162, 1, 0, 0, 0, 1165, 1168, 3, 128, 64, 0, 1166, 1167, 5, + 123, 0, 0, 1167, 1169, 5, 84, 0, 0, 1168, 1166, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, + 1170, 1, 0, 0, 0, 1170, 1171, 5, 60, 0, 0, 1171, 157, 1, 0, 0, 0, 1172, 1177, 3, 160, + 80, 0, 1173, 1174, 5, 83, 0, 0, 1174, 1176, 3, 160, 80, 0, 1175, 1173, 1, 0, 0, 0, 1176, + 1179, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 159, 1, 0, 0, + 0, 1179, 1177, 1, 0, 0, 0, 1180, 1182, 3, 164, 82, 0, 1181, 1180, 1, 0, 0, 0, 1182, + 1185, 1, 0, 0, 0, 1183, 1181, 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1186, 1, 0, 0, + 0, 1185, 1183, 1, 0, 0, 0, 1186, 1187, 3, 128, 64, 0, 1187, 1188, 3, 124, 62, 0, 1188, + 1191, 1, 0, 0, 0, 1189, 1191, 3, 162, 81, 0, 1190, 1183, 1, 0, 0, 0, 1190, 1189, 1, + 0, 0, 0, 1191, 161, 1, 0, 0, 0, 1192, 1194, 3, 164, 82, 0, 1193, 1192, 1, 0, 0, 0, 1194, + 1197, 1, 0, 0, 0, 1195, 1193, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1198, 1, 0, 0, + 0, 1197, 1195, 1, 0, 0, 0, 1198, 1202, 3, 128, 64, 0, 1199, 1201, 3, 254, 127, 0, 1200, + 1199, 1, 0, 0, 0, 1201, 1204, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, + 0, 1203, 1205, 1, 0, 0, 0, 1204, 1202, 1, 0, 0, 0, 1205, 1206, 5, 85, 0, 0, 1206, 1207, + 5, 123, 0, 0, 1207, 163, 1, 0, 0, 0, 1208, 1211, 3, 254, 127, 0, 1209, 1211, 5, 35, + 0, 0, 1210, 1208, 1, 0, 0, 0, 1210, 1209, 1, 0, 0, 0, 1211, 165, 1, 0, 0, 0, 1212, 1213, + 5, 62, 0, 0, 1213, 1214, 3, 168, 84, 0, 1214, 167, 1, 0, 0, 0, 1215, 1220, 3, 170, 85, + 0, 1216, 1217, 5, 83, 0, 0, 1217, 1219, 3, 170, 85, 0, 1218, 1216, 1, 0, 0, 0, 1219, + 1222, 1, 0, 0, 0, 1220, 1218, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 169, 1, 0, 0, + 0, 1222, 1220, 1, 0, 0, 0, 1223, 1226, 3, 22, 11, 0, 1224, 1226, 3, 26, 13, 0, 1225, + 1223, 1, 0, 0, 0, 1225, 1224, 1, 0, 0, 0, 1226, 171, 1, 0, 0, 0, 1227, 1230, 3, 276, + 138, 0, 1228, 1230, 5, 82, 0, 0, 1229, 1227, 1, 0, 0, 0, 1229, 1228, 1, 0, 0, 0, 1230, + 173, 1, 0, 0, 0, 1231, 1232, 3, 276, 138, 0, 1232, 175, 1, 0, 0, 0, 1233, 1234, 5, 55, + 0, 0, 1234, 1235, 3, 276, 138, 0, 1235, 177, 1, 0, 0, 0, 1236, 1238, 3, 180, 90, 0, + 1237, 1236, 1, 0, 0, 0, 1238, 1241, 1, 0, 0, 0, 1239, 1237, 1, 0, 0, 0, 1239, 1240, + 1, 0, 0, 0, 1240, 1242, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1242, 1244, 3, 182, 91, 0, + 1243, 1245, 3, 166, 83, 0, 1244, 1243, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, + 1, 0, 0, 0, 1246, 1247, 3, 186, 93, 0, 1247, 179, 1, 0, 0, 0, 1248, 1253, 3, 254, 127, + 0, 1249, 1253, 5, 52, 0, 0, 1250, 1253, 5, 51, 0, 0, 1251, 1253, 5, 50, 0, 0, 1252, + 1248, 1, 0, 0, 0, 1252, 1249, 1, 0, 0, 0, 1252, 1250, 1, 0, 0, 0, 1252, 1251, 1, 0, 0, + 0, 1253, 181, 1, 0, 0, 0, 1254, 1256, 3, 98, 49, 0, 1255, 1254, 1, 0, 0, 0, 1255, 1256, + 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 3, 184, 92, 0, 1258, 1262, 5, 76, 0, + 0, 1259, 1260, 3, 156, 78, 0, 1260, 1261, 5, 83, 0, 0, 1261, 1263, 1, 0, 0, 0, 1262, + 1259, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1265, 1, 0, 0, 0, 1264, 1266, 3, 158, + 79, 0, 1265, 1264, 1, 0, 0, 0, 1265, 1266, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, + 1268, 5, 77, 0, 0, 1268, 183, 1, 0, 0, 0, 1269, 1270, 3, 4, 2, 0, 1270, 185, 1, 0, 0, + 0, 1271, 1273, 5, 78, 0, 0, 1272, 1274, 3, 188, 94, 0, 1273, 1272, 1, 0, 0, 0, 1273, + 1274, 1, 0, 0, 0, 1274, 1276, 1, 0, 0, 0, 1275, 1277, 3, 278, 139, 0, 1276, 1275, 1, + 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1278, 1, 0, 0, 0, 1278, 1279, 5, 79, 0, 0, 1279, + 187, 1, 0, 0, 0, 1280, 1282, 3, 40, 20, 0, 1281, 1280, 1, 0, 0, 0, 1281, 1282, 1, 0, + 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 7, 4, 0, 0, 1284, 1286, 5, 76, 0, 0, 1285, + 1287, 3, 422, 211, 0, 1286, 1285, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1287, 1288, 1, + 0, 0, 0, 1288, 1289, 5, 77, 0, 0, 1289, 1307, 5, 82, 0, 0, 1290, 1293, 3, 58, 29, 0, + 1291, 1293, 3, 390, 195, 0, 1292, 1290, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 1294, + 1, 0, 0, 0, 1294, 1296, 5, 84, 0, 0, 1295, 1297, 3, 40, 20, 0, 1296, 1295, 1, 0, 0, 0, + 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1299, 5, 57, 0, 0, 1299, 1301, + 5, 76, 0, 0, 1300, 1302, 3, 422, 211, 0, 1301, 1300, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, + 0, 1302, 1303, 1, 0, 0, 0, 1303, 1304, 5, 77, 0, 0, 1304, 1305, 5, 82, 0, 0, 1305, 1307, + 1, 0, 0, 0, 1306, 1281, 1, 0, 0, 0, 1306, 1292, 1, 0, 0, 0, 1307, 189, 1, 0, 0, 0, 1308, + 1310, 3, 96, 48, 0, 1309, 1308, 1, 0, 0, 0, 1310, 1313, 1, 0, 0, 0, 1311, 1309, 1, 0, + 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1314, 1, 0, 0, 0, 1313, 1311, 1, 0, 0, 0, 1314, 1315, + 5, 33, 0, 0, 1315, 1317, 3, 4, 2, 0, 1316, 1318, 3, 104, 52, 0, 1317, 1316, 1, 0, 0, + 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 3, 192, 96, 0, 1320, + 191, 1, 0, 0, 0, 1321, 1323, 5, 78, 0, 0, 1322, 1324, 3, 194, 97, 0, 1323, 1322, 1, + 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1327, 5, 83, 0, 0, 1326, + 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1329, 1, 0, 0, 0, 1328, 1330, 3, 200, + 100, 0, 1329, 1328, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 1, 0, 0, 0, 1331, + 1332, 5, 79, 0, 0, 1332, 193, 1, 0, 0, 0, 1333, 1338, 3, 196, 98, 0, 1334, 1335, 5, + 83, 0, 0, 1335, 1337, 3, 196, 98, 0, 1336, 1334, 1, 0, 0, 0, 1337, 1340, 1, 0, 0, 0, + 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 195, 1, 0, 0, 0, 1340, 1338, 1, + 0, 0, 0, 1341, 1343, 3, 198, 99, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1346, 1, 0, 0, 0, 1344, + 1342, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1347, 1, 0, 0, 0, 1346, 1344, 1, 0, 0, + 0, 1347, 1353, 5, 123, 0, 0, 1348, 1350, 5, 76, 0, 0, 1349, 1351, 3, 422, 211, 0, 1350, + 1349, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1354, 5, 77, + 0, 0, 1353, 1348, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1356, 1, 0, 0, 0, 1355, 1357, + 3, 110, 55, 0, 1356, 1355, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 197, 1, 0, 0, 0, + 1358, 1359, 3, 254, 127, 0, 1359, 199, 1, 0, 0, 0, 1360, 1364, 5, 82, 0, 0, 1361, 1363, + 3, 112, 56, 0, 1362, 1361, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, + 1364, 1365, 1, 0, 0, 0, 1365, 201, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1369, 3, + 96, 48, 0, 1368, 1367, 1, 0, 0, 0, 1369, 1372, 1, 0, 0, 0, 1370, 1368, 1, 0, 0, 0, 1370, + 1371, 1, 0, 0, 0, 1371, 1373, 1, 0, 0, 0, 1372, 1370, 1, 0, 0, 0, 1373, 1374, 5, 9, 0, + 0, 1374, 1376, 3, 4, 2, 0, 1375, 1377, 3, 98, 49, 0, 1376, 1375, 1, 0, 0, 0, 1376, 1377, + 1, 0, 0, 0, 1377, 1378, 1, 0, 0, 0, 1378, 1380, 3, 204, 102, 0, 1379, 1381, 3, 104, + 52, 0, 1380, 1379, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1381, 1382, 1, 0, 0, 0, 1382, + 1383, 3, 214, 107, 0, 1383, 203, 1, 0, 0, 0, 1384, 1386, 5, 76, 0, 0, 1385, 1387, 3, + 206, 103, 0, 1386, 1385, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, + 1388, 1389, 5, 77, 0, 0, 1389, 205, 1, 0, 0, 0, 1390, 1395, 3, 208, 104, 0, 1391, 1392, + 5, 83, 0, 0, 1392, 1394, 3, 208, 104, 0, 1393, 1391, 1, 0, 0, 0, 1394, 1397, 1, 0, 0, + 0, 1395, 1393, 1, 0, 0, 0, 1395, 1396, 1, 0, 0, 0, 1396, 207, 1, 0, 0, 0, 1397, 1395, + 1, 0, 0, 0, 1398, 1400, 3, 212, 106, 0, 1399, 1398, 1, 0, 0, 0, 1400, 1403, 1, 0, 0, + 0, 1401, 1399, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1404, 1, 0, 0, 0, 1403, 1401, + 1, 0, 0, 0, 1404, 1405, 3, 128, 64, 0, 1405, 1406, 5, 123, 0, 0, 1406, 1409, 1, 0, 0, + 0, 1407, 1409, 3, 210, 105, 0, 1408, 1401, 1, 0, 0, 0, 1408, 1407, 1, 0, 0, 0, 1409, + 209, 1, 0, 0, 0, 1410, 1412, 3, 212, 106, 0, 1411, 1410, 1, 0, 0, 0, 1412, 1415, 1, + 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1416, 1, 0, 0, 0, 1415, + 1413, 1, 0, 0, 0, 1416, 1420, 3, 128, 64, 0, 1417, 1419, 3, 254, 127, 0, 1418, 1417, + 1, 0, 0, 0, 1419, 1422, 1, 0, 0, 0, 1420, 1418, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, + 1423, 1, 0, 0, 0, 1422, 1420, 1, 0, 0, 0, 1423, 1424, 5, 85, 0, 0, 1424, 1425, 5, 123, + 0, 0, 1425, 211, 1, 0, 0, 0, 1426, 1427, 3, 254, 127, 0, 1427, 213, 1, 0, 0, 0, 1428, + 1432, 5, 78, 0, 0, 1429, 1431, 3, 216, 108, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1434, + 1, 0, 0, 0, 1432, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1435, 1, 0, 0, 0, 1434, + 1432, 1, 0, 0, 0, 1435, 1436, 5, 79, 0, 0, 1436, 215, 1, 0, 0, 0, 1437, 1440, 3, 112, + 56, 0, 1438, 1440, 3, 218, 109, 0, 1439, 1437, 1, 0, 0, 0, 1439, 1438, 1, 0, 0, 0, 1440, + 217, 1, 0, 0, 0, 1441, 1443, 3, 180, 90, 0, 1442, 1441, 1, 0, 0, 0, 1443, 1446, 1, 0, + 0, 0, 1444, 1442, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1447, 1, 0, 0, 0, 1446, 1444, + 1, 0, 0, 0, 1447, 1448, 3, 184, 92, 0, 1448, 1449, 3, 186, 93, 0, 1449, 219, 1, 0, 0, + 0, 1450, 1453, 3, 222, 111, 0, 1451, 1453, 3, 242, 121, 0, 1452, 1450, 1, 0, 0, 0, + 1452, 1451, 1, 0, 0, 0, 1453, 221, 1, 0, 0, 0, 1454, 1456, 3, 224, 112, 0, 1455, 1454, + 1, 0, 0, 0, 1456, 1459, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, + 1460, 1, 0, 0, 0, 1459, 1457, 1, 0, 0, 0, 1460, 1461, 5, 45, 0, 0, 1461, 1463, 3, 4, + 2, 0, 1462, 1464, 3, 98, 49, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, + 1466, 1, 0, 0, 0, 1465, 1467, 3, 226, 113, 0, 1466, 1465, 1, 0, 0, 0, 1466, 1467, 1, + 0, 0, 0, 1467, 1469, 1, 0, 0, 0, 1468, 1470, 3, 228, 114, 0, 1469, 1468, 1, 0, 0, 0, + 1469, 1470, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1472, 3, 230, 115, 0, 1472, 223, + 1, 0, 0, 0, 1473, 1483, 3, 254, 127, 0, 1474, 1483, 5, 52, 0, 0, 1475, 1483, 5, 51, + 0, 0, 1476, 1483, 5, 50, 0, 0, 1477, 1483, 5, 18, 0, 0, 1478, 1483, 5, 55, 0, 0, 1479, + 1483, 5, 11, 0, 0, 1480, 1483, 5, 3, 0, 0, 1481, 1483, 5, 56, 0, 0, 1482, 1473, 1, 0, + 0, 0, 1482, 1474, 1, 0, 0, 0, 1482, 1475, 1, 0, 0, 0, 1482, 1476, 1, 0, 0, 0, 1482, 1477, + 1, 0, 0, 0, 1482, 1478, 1, 0, 0, 0, 1482, 1479, 1, 0, 0, 0, 1482, 1480, 1, 0, 0, 0, 1482, + 1481, 1, 0, 0, 0, 1483, 225, 1, 0, 0, 0, 1484, 1485, 5, 34, 0, 0, 1485, 1486, 3, 106, + 53, 0, 1486, 227, 1, 0, 0, 0, 1487, 1488, 5, 7, 0, 0, 1488, 1493, 3, 54, 27, 0, 1489, + 1490, 5, 83, 0, 0, 1490, 1492, 3, 54, 27, 0, 1491, 1489, 1, 0, 0, 0, 1492, 1495, 1, + 0, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 229, 1, 0, 0, 0, 1495, + 1493, 1, 0, 0, 0, 1496, 1500, 5, 78, 0, 0, 1497, 1499, 3, 232, 116, 0, 1498, 1497, + 1, 0, 0, 0, 1499, 1502, 1, 0, 0, 0, 1500, 1498, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, + 1503, 1, 0, 0, 0, 1502, 1500, 1, 0, 0, 0, 1503, 1504, 5, 79, 0, 0, 1504, 231, 1, 0, 0, + 0, 1505, 1511, 3, 234, 117, 0, 1506, 1511, 3, 238, 119, 0, 1507, 1511, 3, 92, 46, + 0, 1508, 1511, 3, 220, 110, 0, 1509, 1511, 5, 82, 0, 0, 1510, 1505, 1, 0, 0, 0, 1510, + 1506, 1, 0, 0, 0, 1510, 1507, 1, 0, 0, 0, 1510, 1508, 1, 0, 0, 0, 1510, 1509, 1, 0, 0, + 0, 1511, 233, 1, 0, 0, 0, 1512, 1514, 3, 236, 118, 0, 1513, 1512, 1, 0, 0, 0, 1514, + 1517, 1, 0, 0, 0, 1515, 1513, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1518, 1, 0, 0, + 0, 1517, 1515, 1, 0, 0, 0, 1518, 1519, 3, 128, 64, 0, 1519, 1520, 3, 120, 60, 0, 1520, + 1521, 5, 82, 0, 0, 1521, 235, 1, 0, 0, 0, 1522, 1527, 3, 254, 127, 0, 1523, 1527, 5, + 52, 0, 0, 1524, 1527, 5, 55, 0, 0, 1525, 1527, 5, 35, 0, 0, 1526, 1522, 1, 0, 0, 0, 1526, + 1523, 1, 0, 0, 0, 1526, 1524, 1, 0, 0, 0, 1526, 1525, 1, 0, 0, 0, 1527, 237, 1, 0, 0, + 0, 1528, 1530, 3, 240, 120, 0, 1529, 1528, 1, 0, 0, 0, 1530, 1533, 1, 0, 0, 0, 1531, + 1529, 1, 0, 0, 0, 1531, 1532, 1, 0, 0, 0, 1532, 1534, 1, 0, 0, 0, 1533, 1531, 1, 0, 0, + 0, 1534, 1535, 3, 150, 75, 0, 1535, 1536, 3, 172, 86, 0, 1536, 239, 1, 0, 0, 0, 1537, + 1545, 3, 254, 127, 0, 1538, 1545, 5, 52, 0, 0, 1539, 1545, 5, 50, 0, 0, 1540, 1545, + 5, 18, 0, 0, 1541, 1545, 5, 29, 0, 0, 1542, 1545, 5, 55, 0, 0, 1543, 1545, 5, 56, 0, + 0, 1544, 1537, 1, 0, 0, 0, 1544, 1538, 1, 0, 0, 0, 1544, 1539, 1, 0, 0, 0, 1544, 1540, + 1, 0, 0, 0, 1544, 1541, 1, 0, 0, 0, 1544, 1542, 1, 0, 0, 0, 1544, 1543, 1, 0, 0, 0, 1545, + 241, 1, 0, 0, 0, 1546, 1548, 3, 224, 112, 0, 1547, 1546, 1, 0, 0, 0, 1548, 1551, 1, + 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1552, 1, 0, 0, 0, 1551, + 1549, 1, 0, 0, 0, 1552, 1553, 5, 86, 0, 0, 1553, 1554, 5, 45, 0, 0, 1554, 1555, 3, 4, + 2, 0, 1555, 1556, 3, 244, 122, 0, 1556, 243, 1, 0, 0, 0, 1557, 1561, 5, 78, 0, 0, 1558, + 1560, 3, 246, 123, 0, 1559, 1558, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, + 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1564, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, + 1565, 5, 79, 0, 0, 1565, 245, 1, 0, 0, 0, 1566, 1572, 3, 248, 124, 0, 1567, 1572, 3, + 234, 117, 0, 1568, 1572, 3, 92, 46, 0, 1569, 1572, 3, 220, 110, 0, 1570, 1572, 5, + 82, 0, 0, 1571, 1566, 1, 0, 0, 0, 1571, 1567, 1, 0, 0, 0, 1571, 1568, 1, 0, 0, 0, 1571, + 1569, 1, 0, 0, 0, 1571, 1570, 1, 0, 0, 0, 1572, 247, 1, 0, 0, 0, 1573, 1575, 3, 250, + 125, 0, 1574, 1573, 1, 0, 0, 0, 1575, 1578, 1, 0, 0, 0, 1576, 1574, 1, 0, 0, 0, 1576, + 1577, 1, 0, 0, 0, 1577, 1579, 1, 0, 0, 0, 1578, 1576, 1, 0, 0, 0, 1579, 1580, 3, 128, + 64, 0, 1580, 1581, 5, 123, 0, 0, 1581, 1582, 5, 76, 0, 0, 1582, 1584, 5, 77, 0, 0, 1583, + 1585, 3, 30, 15, 0, 1584, 1583, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1587, 1, 0, + 0, 0, 1586, 1588, 3, 252, 126, 0, 1587, 1586, 1, 0, 0, 0, 1587, 1588, 1, 0, 0, 0, 1588, + 1589, 1, 0, 0, 0, 1589, 1590, 5, 82, 0, 0, 1590, 249, 1, 0, 0, 0, 1591, 1595, 3, 254, + 127, 0, 1592, 1595, 5, 52, 0, 0, 1593, 1595, 5, 18, 0, 0, 1594, 1591, 1, 0, 0, 0, 1594, + 1592, 1, 0, 0, 0, 1594, 1593, 1, 0, 0, 0, 1595, 251, 1, 0, 0, 0, 1596, 1597, 5, 29, 0, + 0, 1597, 1598, 3, 262, 131, 0, 1598, 253, 1, 0, 0, 0, 1599, 1603, 3, 256, 128, 0, 1600, + 1603, 3, 268, 134, 0, 1601, 1603, 3, 270, 135, 0, 1602, 1599, 1, 0, 0, 0, 1602, 1600, + 1, 0, 0, 0, 1602, 1601, 1, 0, 0, 0, 1603, 255, 1, 0, 0, 0, 1604, 1605, 5, 86, 0, 0, 1605, + 1606, 3, 54, 27, 0, 1606, 1608, 5, 76, 0, 0, 1607, 1609, 3, 258, 129, 0, 1608, 1607, + 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1611, 5, 77, 0, 0, 1611, + 257, 1, 0, 0, 0, 1612, 1617, 3, 260, 130, 0, 1613, 1614, 5, 83, 0, 0, 1614, 1616, 3, + 260, 130, 0, 1615, 1613, 1, 0, 0, 0, 1616, 1619, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, + 1617, 1618, 1, 0, 0, 0, 1618, 259, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1621, 5, + 123, 0, 0, 1621, 1622, 5, 88, 0, 0, 1622, 1623, 3, 262, 131, 0, 1623, 261, 1, 0, 0, + 0, 1624, 1628, 3, 464, 232, 0, 1625, 1628, 3, 264, 132, 0, 1626, 1628, 3, 254, 127, + 0, 1627, 1624, 1, 0, 0, 0, 1627, 1625, 1, 0, 0, 0, 1627, 1626, 1, 0, 0, 0, 1628, 263, + 1, 0, 0, 0, 1629, 1631, 5, 78, 0, 0, 1630, 1632, 3, 266, 133, 0, 1631, 1630, 1, 0, 0, + 0, 1631, 1632, 1, 0, 0, 0, 1632, 1634, 1, 0, 0, 0, 1633, 1635, 5, 83, 0, 0, 1634, 1633, + 1, 0, 0, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1637, 5, 79, 0, 0, 1637, + 265, 1, 0, 0, 0, 1638, 1643, 3, 262, 131, 0, 1639, 1640, 5, 83, 0, 0, 1640, 1642, 3, + 262, 131, 0, 1641, 1639, 1, 0, 0, 0, 1642, 1645, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, + 1643, 1644, 1, 0, 0, 0, 1644, 267, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1646, 1647, 5, + 86, 0, 0, 1647, 1648, 3, 54, 27, 0, 1648, 269, 1, 0, 0, 0, 1649, 1650, 5, 86, 0, 0, 1650, + 1651, 3, 54, 27, 0, 1651, 1652, 5, 76, 0, 0, 1652, 1653, 3, 262, 131, 0, 1653, 1654, + 5, 77, 0, 0, 1654, 271, 1, 0, 0, 0, 1655, 1657, 5, 78, 0, 0, 1656, 1658, 3, 274, 137, + 0, 1657, 1656, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1660, 1, 0, 0, 0, 1659, 1661, + 5, 83, 0, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, + 1663, 5, 79, 0, 0, 1663, 273, 1, 0, 0, 0, 1664, 1669, 3, 126, 63, 0, 1665, 1666, 5, + 83, 0, 0, 1666, 1668, 3, 126, 63, 0, 1667, 1665, 1, 0, 0, 0, 1668, 1671, 1, 0, 0, 0, + 1669, 1667, 1, 0, 0, 0, 1669, 1670, 1, 0, 0, 0, 1670, 275, 1, 0, 0, 0, 1671, 1669, 1, + 0, 0, 0, 1672, 1674, 5, 78, 0, 0, 1673, 1675, 3, 278, 139, 0, 1674, 1673, 1, 0, 0, 0, + 1674, 1675, 1, 0, 0, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1677, 5, 79, 0, 0, 1677, 277, + 1, 0, 0, 0, 1678, 1682, 3, 280, 140, 0, 1679, 1681, 3, 280, 140, 0, 1680, 1679, 1, + 0, 0, 0, 1681, 1684, 1, 0, 0, 0, 1682, 1680, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, + 279, 1, 0, 0, 0, 1684, 1682, 1, 0, 0, 0, 1685, 1689, 3, 282, 141, 0, 1686, 1689, 3, + 288, 144, 0, 1687, 1689, 3, 290, 145, 0, 1688, 1685, 1, 0, 0, 0, 1688, 1686, 1, 0, + 0, 0, 1688, 1687, 1, 0, 0, 0, 1689, 281, 1, 0, 0, 0, 1690, 1693, 3, 92, 46, 0, 1691, + 1693, 3, 222, 111, 0, 1692, 1690, 1, 0, 0, 0, 1692, 1691, 1, 0, 0, 0, 1693, 283, 1, + 0, 0, 0, 1694, 1696, 3, 164, 82, 0, 1695, 1694, 1, 0, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, + 1695, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1700, 1, 0, 0, 0, 1699, 1697, 1, 0, 0, + 0, 1700, 1702, 3, 286, 143, 0, 1701, 1703, 3, 120, 60, 0, 1702, 1701, 1, 0, 0, 0, 1702, + 1703, 1, 0, 0, 0, 1703, 285, 1, 0, 0, 0, 1704, 1707, 3, 128, 64, 0, 1705, 1707, 5, 15, + 0, 0, 1706, 1704, 1, 0, 0, 0, 1706, 1705, 1, 0, 0, 0, 1707, 287, 1, 0, 0, 0, 1708, 1709, + 3, 284, 142, 0, 1709, 1710, 5, 82, 0, 0, 1710, 289, 1, 0, 0, 0, 1711, 1718, 3, 294, + 147, 0, 1712, 1718, 3, 298, 149, 0, 1713, 1718, 3, 306, 153, 0, 1714, 1718, 3, 308, + 154, 0, 1715, 1718, 3, 326, 163, 0, 1716, 1718, 3, 332, 166, 0, 1717, 1711, 1, 0, + 0, 0, 1717, 1712, 1, 0, 0, 0, 1717, 1713, 1, 0, 0, 0, 1717, 1714, 1, 0, 0, 0, 1717, 1715, + 1, 0, 0, 0, 1717, 1716, 1, 0, 0, 0, 1718, 291, 1, 0, 0, 0, 1719, 1725, 3, 294, 147, 0, + 1720, 1725, 3, 300, 150, 0, 1721, 1725, 3, 310, 155, 0, 1722, 1725, 3, 328, 164, + 0, 1723, 1725, 3, 334, 167, 0, 1724, 1719, 1, 0, 0, 0, 1724, 1720, 1, 0, 0, 0, 1724, + 1721, 1, 0, 0, 0, 1724, 1722, 1, 0, 0, 0, 1724, 1723, 1, 0, 0, 0, 1725, 293, 1, 0, 0, + 0, 1726, 1740, 3, 276, 138, 0, 1727, 1740, 3, 296, 148, 0, 1728, 1740, 3, 302, 151, + 0, 1729, 1740, 3, 312, 156, 0, 1730, 1740, 3, 314, 157, 0, 1731, 1740, 3, 330, 165, + 0, 1732, 1740, 3, 350, 175, 0, 1733, 1740, 3, 352, 176, 0, 1734, 1740, 3, 354, 177, + 0, 1735, 1740, 3, 358, 179, 0, 1736, 1740, 3, 356, 178, 0, 1737, 1740, 3, 360, 180, + 0, 1738, 1740, 3, 382, 191, 0, 1739, 1726, 1, 0, 0, 0, 1739, 1727, 1, 0, 0, 0, 1739, + 1728, 1, 0, 0, 0, 1739, 1729, 1, 0, 0, 0, 1739, 1730, 1, 0, 0, 0, 1739, 1731, 1, 0, 0, + 0, 1739, 1732, 1, 0, 0, 0, 1739, 1733, 1, 0, 0, 0, 1739, 1734, 1, 0, 0, 0, 1739, 1735, + 1, 0, 0, 0, 1739, 1736, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1738, 1, 0, 0, 0, 1740, + 295, 1, 0, 0, 0, 1741, 1742, 5, 82, 0, 0, 1742, 297, 1, 0, 0, 0, 1743, 1744, 5, 123, + 0, 0, 1744, 1745, 5, 94, 0, 0, 1745, 1746, 3, 290, 145, 0, 1746, 299, 1, 0, 0, 0, 1747, + 1748, 5, 123, 0, 0, 1748, 1749, 5, 94, 0, 0, 1749, 1750, 3, 292, 146, 0, 1750, 301, + 1, 0, 0, 0, 1751, 1752, 3, 304, 152, 0, 1752, 1753, 5, 82, 0, 0, 1753, 303, 1, 0, 0, + 0, 1754, 1762, 3, 468, 234, 0, 1755, 1762, 3, 436, 218, 0, 1756, 1762, 3, 438, 219, + 0, 1757, 1762, 3, 430, 215, 0, 1758, 1762, 3, 432, 216, 0, 1759, 1762, 3, 420, 210, + 0, 1760, 1762, 3, 398, 199, 0, 1761, 1754, 1, 0, 0, 0, 1761, 1755, 1, 0, 0, 0, 1761, + 1756, 1, 0, 0, 0, 1761, 1757, 1, 0, 0, 0, 1761, 1758, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, + 0, 1761, 1760, 1, 0, 0, 0, 1762, 305, 1, 0, 0, 0, 1763, 1764, 5, 39, 0, 0, 1764, 1765, + 5, 76, 0, 0, 1765, 1766, 3, 388, 194, 0, 1766, 1767, 5, 77, 0, 0, 1767, 1768, 3, 290, + 145, 0, 1768, 307, 1, 0, 0, 0, 1769, 1770, 5, 39, 0, 0, 1770, 1771, 5, 76, 0, 0, 1771, + 1772, 3, 388, 194, 0, 1772, 1773, 5, 77, 0, 0, 1773, 1774, 3, 292, 146, 0, 1774, 1775, + 5, 32, 0, 0, 1775, 1776, 3, 290, 145, 0, 1776, 309, 1, 0, 0, 0, 1777, 1778, 5, 39, 0, + 0, 1778, 1779, 5, 76, 0, 0, 1779, 1780, 3, 388, 194, 0, 1780, 1781, 5, 77, 0, 0, 1781, + 1782, 3, 292, 146, 0, 1782, 1783, 5, 32, 0, 0, 1783, 1784, 3, 292, 146, 0, 1784, 311, + 1, 0, 0, 0, 1785, 1786, 5, 19, 0, 0, 1786, 1789, 3, 388, 194, 0, 1787, 1788, 5, 94, + 0, 0, 1788, 1790, 3, 388, 194, 0, 1789, 1787, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, + 1791, 1, 0, 0, 0, 1791, 1792, 5, 82, 0, 0, 1792, 313, 1, 0, 0, 0, 1793, 1794, 5, 58, + 0, 0, 1794, 1795, 5, 76, 0, 0, 1795, 1796, 3, 388, 194, 0, 1796, 1797, 5, 77, 0, 0, + 1797, 1798, 3, 316, 158, 0, 1798, 315, 1, 0, 0, 0, 1799, 1800, 5, 78, 0, 0, 1800, 1804, + 3, 318, 159, 0, 1801, 1803, 3, 318, 159, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, + 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, + 1804, 1, 0, 0, 0, 1807, 1808, 5, 79, 0, 0, 1808, 1826, 1, 0, 0, 0, 1809, 1813, 5, 78, + 0, 0, 1810, 1812, 3, 320, 160, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, + 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1821, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, + 0, 1816, 1817, 3, 322, 161, 0, 1817, 1818, 5, 94, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, + 1816, 1, 0, 0, 0, 1820, 1823, 1, 0, 0, 0, 1821, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, + 0, 1822, 1824, 1, 0, 0, 0, 1823, 1821, 1, 0, 0, 0, 1824, 1826, 5, 79, 0, 0, 1825, 1799, + 1, 0, 0, 0, 1825, 1809, 1, 0, 0, 0, 1826, 317, 1, 0, 0, 0, 1827, 1828, 3, 322, 161, 0, + 1828, 1834, 5, 95, 0, 0, 1829, 1830, 3, 388, 194, 0, 1830, 1831, 5, 82, 0, 0, 1831, + 1835, 1, 0, 0, 0, 1832, 1835, 3, 276, 138, 0, 1833, 1835, 3, 356, 178, 0, 1834, 1829, + 1, 0, 0, 0, 1834, 1832, 1, 0, 0, 0, 1834, 1833, 1, 0, 0, 0, 1835, 319, 1, 0, 0, 0, 1836, + 1837, 3, 322, 161, 0, 1837, 1843, 5, 94, 0, 0, 1838, 1839, 3, 322, 161, 0, 1839, 1840, + 5, 94, 0, 0, 1840, 1842, 1, 0, 0, 0, 1841, 1838, 1, 0, 0, 0, 1842, 1845, 1, 0, 0, 0, 1843, + 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1846, 1, 0, 0, 0, 1845, 1843, 1, 0, 0, + 0, 1846, 1847, 3, 278, 139, 0, 1847, 321, 1, 0, 0, 0, 1848, 1849, 5, 23, 0, 0, 1849, + 1854, 3, 324, 162, 0, 1850, 1851, 5, 83, 0, 0, 1851, 1853, 3, 324, 162, 0, 1852, 1850, + 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, + 1859, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1857, 1859, 5, 29, 0, 0, 1858, 1848, 1, 0, + 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 323, 1, 0, 0, 0, 1860, 1861, 3, 464, 232, 0, 1861, + 325, 1, 0, 0, 0, 1862, 1863, 5, 67, 0, 0, 1863, 1864, 5, 76, 0, 0, 1864, 1865, 3, 388, + 194, 0, 1865, 1866, 5, 77, 0, 0, 1866, 1867, 3, 290, 145, 0, 1867, 327, 1, 0, 0, 0, + 1868, 1869, 5, 67, 0, 0, 1869, 1870, 5, 76, 0, 0, 1870, 1871, 3, 388, 194, 0, 1871, + 1872, 5, 77, 0, 0, 1872, 1873, 3, 292, 146, 0, 1873, 329, 1, 0, 0, 0, 1874, 1875, 5, + 30, 0, 0, 1875, 1876, 3, 290, 145, 0, 1876, 1877, 5, 67, 0, 0, 1877, 1878, 5, 76, 0, + 0, 1878, 1879, 3, 388, 194, 0, 1879, 1880, 5, 77, 0, 0, 1880, 1881, 5, 82, 0, 0, 1881, + 331, 1, 0, 0, 0, 1882, 1885, 3, 336, 168, 0, 1883, 1885, 3, 346, 173, 0, 1884, 1882, + 1, 0, 0, 0, 1884, 1883, 1, 0, 0, 0, 1885, 333, 1, 0, 0, 0, 1886, 1889, 3, 338, 169, 0, + 1887, 1889, 3, 348, 174, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1887, 1, 0, 0, 0, 1889, 335, + 1, 0, 0, 0, 1890, 1891, 5, 38, 0, 0, 1891, 1893, 5, 76, 0, 0, 1892, 1894, 3, 340, 170, + 0, 1893, 1892, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1897, + 5, 82, 0, 0, 1896, 1898, 3, 388, 194, 0, 1897, 1896, 1, 0, 0, 0, 1897, 1898, 1, 0, 0, + 0, 1898, 1899, 1, 0, 0, 0, 1899, 1901, 5, 82, 0, 0, 1900, 1902, 3, 342, 171, 0, 1901, + 1900, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 5, 77, + 0, 0, 1904, 1905, 3, 290, 145, 0, 1905, 337, 1, 0, 0, 0, 1906, 1907, 5, 38, 0, 0, 1907, + 1909, 5, 76, 0, 0, 1908, 1910, 3, 340, 170, 0, 1909, 1908, 1, 0, 0, 0, 1909, 1910, + 1, 0, 0, 0, 1910, 1911, 1, 0, 0, 0, 1911, 1913, 5, 82, 0, 0, 1912, 1914, 3, 388, 194, + 0, 1913, 1912, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1917, + 5, 82, 0, 0, 1916, 1918, 3, 342, 171, 0, 1917, 1916, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, + 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 5, 77, 0, 0, 1920, 1921, 3, 292, 146, 0, 1921, + 339, 1, 0, 0, 0, 1922, 1925, 3, 344, 172, 0, 1923, 1925, 3, 284, 142, 0, 1924, 1922, + 1, 0, 0, 0, 1924, 1923, 1, 0, 0, 0, 1925, 341, 1, 0, 0, 0, 1926, 1927, 3, 344, 172, 0, + 1927, 343, 1, 0, 0, 0, 1928, 1933, 3, 304, 152, 0, 1929, 1930, 5, 83, 0, 0, 1930, 1932, + 3, 304, 152, 0, 1931, 1929, 1, 0, 0, 0, 1932, 1935, 1, 0, 0, 0, 1933, 1931, 1, 0, 0, + 0, 1933, 1934, 1, 0, 0, 0, 1934, 345, 1, 0, 0, 0, 1935, 1933, 1, 0, 0, 0, 1936, 1937, + 5, 38, 0, 0, 1937, 1938, 5, 76, 0, 0, 1938, 1939, 3, 284, 142, 0, 1939, 1940, 5, 94, + 0, 0, 1940, 1941, 3, 388, 194, 0, 1941, 1942, 5, 77, 0, 0, 1942, 1943, 3, 290, 145, + 0, 1943, 347, 1, 0, 0, 0, 1944, 1945, 5, 38, 0, 0, 1945, 1946, 5, 76, 0, 0, 1946, 1947, + 3, 284, 142, 0, 1947, 1948, 5, 94, 0, 0, 1948, 1949, 3, 388, 194, 0, 1949, 1950, 5, + 77, 0, 0, 1950, 1951, 3, 292, 146, 0, 1951, 349, 1, 0, 0, 0, 1952, 1954, 5, 21, 0, 0, + 1953, 1955, 5, 123, 0, 0, 1954, 1953, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, + 1, 0, 0, 0, 1956, 1957, 5, 82, 0, 0, 1957, 351, 1, 0, 0, 0, 1958, 1960, 5, 28, 0, 0, 1959, + 1961, 5, 123, 0, 0, 1960, 1959, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1962, 1, 0, + 0, 0, 1962, 1963, 5, 82, 0, 0, 1963, 353, 1, 0, 0, 0, 1964, 1966, 5, 53, 0, 0, 1965, + 1967, 3, 388, 194, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, + 0, 0, 0, 1968, 1969, 5, 82, 0, 0, 1969, 355, 1, 0, 0, 0, 1970, 1971, 5, 61, 0, 0, 1971, + 1972, 3, 388, 194, 0, 1972, 1973, 5, 82, 0, 0, 1973, 357, 1, 0, 0, 0, 1974, 1975, 5, + 59, 0, 0, 1975, 1976, 5, 76, 0, 0, 1976, 1977, 3, 388, 194, 0, 1977, 1978, 5, 77, 0, + 0, 1978, 1979, 3, 276, 138, 0, 1979, 359, 1, 0, 0, 0, 1980, 1981, 5, 64, 0, 0, 1981, + 1982, 3, 276, 138, 0, 1982, 1983, 3, 362, 181, 0, 1983, 1997, 1, 0, 0, 0, 1984, 1985, + 5, 64, 0, 0, 1985, 1986, 3, 276, 138, 0, 1986, 1987, 3, 370, 185, 0, 1987, 1997, 1, + 0, 0, 0, 1988, 1989, 5, 64, 0, 0, 1989, 1991, 3, 276, 138, 0, 1990, 1992, 3, 362, 181, + 0, 1991, 1990, 1, 0, 0, 0, 1991, 1992, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1994, + 3, 370, 185, 0, 1994, 1997, 1, 0, 0, 0, 1995, 1997, 3, 372, 186, 0, 1996, 1980, 1, + 0, 0, 0, 1996, 1984, 1, 0, 0, 0, 1996, 1988, 1, 0, 0, 0, 1996, 1995, 1, 0, 0, 0, 1997, + 361, 1, 0, 0, 0, 1998, 2002, 3, 364, 182, 0, 1999, 2001, 3, 364, 182, 0, 2000, 1999, + 1, 0, 0, 0, 2001, 2004, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2002, 2003, 1, 0, 0, 0, 2003, + 363, 1, 0, 0, 0, 2004, 2002, 1, 0, 0, 0, 2005, 2006, 5, 24, 0, 0, 2006, 2007, 5, 76, + 0, 0, 2007, 2008, 3, 366, 183, 0, 2008, 2009, 5, 77, 0, 0, 2009, 2010, 3, 276, 138, + 0, 2010, 365, 1, 0, 0, 0, 2011, 2013, 3, 164, 82, 0, 2012, 2011, 1, 0, 0, 0, 2013, 2016, + 1, 0, 0, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2017, 1, 0, 0, 0, 2016, + 2014, 1, 0, 0, 0, 2017, 2018, 3, 368, 184, 0, 2018, 2019, 3, 124, 62, 0, 2019, 367, + 1, 0, 0, 0, 2020, 2025, 3, 138, 69, 0, 2021, 2022, 5, 109, 0, 0, 2022, 2024, 3, 22, + 11, 0, 2023, 2021, 1, 0, 0, 0, 2024, 2027, 1, 0, 0, 0, 2025, 2023, 1, 0, 0, 0, 2025, + 2026, 1, 0, 0, 0, 2026, 369, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2028, 2029, 5, 36, 0, + 0, 2029, 2030, 3, 276, 138, 0, 2030, 371, 1, 0, 0, 0, 2031, 2032, 5, 64, 0, 0, 2032, + 2033, 3, 374, 187, 0, 2033, 2035, 3, 276, 138, 0, 2034, 2036, 3, 362, 181, 0, 2035, + 2034, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2038, 1, 0, 0, 0, 2037, 2039, 3, 370, + 185, 0, 2038, 2037, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 373, 1, 0, 0, 0, 2040, + 2041, 5, 76, 0, 0, 2041, 2043, 3, 376, 188, 0, 2042, 2044, 5, 82, 0, 0, 2043, 2042, + 1, 0, 0, 0, 2043, 2044, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 2046, 5, 77, 0, 0, 2046, + 375, 1, 0, 0, 0, 2047, 2052, 3, 378, 189, 0, 2048, 2049, 5, 82, 0, 0, 2049, 2051, 3, + 378, 189, 0, 2050, 2048, 1, 0, 0, 0, 2051, 2054, 1, 0, 0, 0, 2052, 2050, 1, 0, 0, 0, + 2052, 2053, 1, 0, 0, 0, 2053, 377, 1, 0, 0, 0, 2054, 2052, 1, 0, 0, 0, 2055, 2058, 3, + 284, 142, 0, 2056, 2058, 3, 380, 190, 0, 2057, 2055, 1, 0, 0, 0, 2057, 2056, 1, 0, + 0, 0, 2058, 379, 1, 0, 0, 0, 2059, 2062, 3, 58, 29, 0, 2060, 2062, 3, 418, 209, 0, 2061, + 2059, 1, 0, 0, 0, 2061, 2060, 1, 0, 0, 0, 2062, 381, 1, 0, 0, 0, 2063, 2064, 5, 17, 0, + 0, 2064, 2065, 3, 388, 194, 0, 2065, 2066, 5, 82, 0, 0, 2066, 383, 1, 0, 0, 0, 2067, + 2068, 3, 386, 193, 0, 2068, 385, 1, 0, 0, 0, 2069, 2070, 3, 284, 142, 0, 2070, 387, + 1, 0, 0, 0, 2071, 2074, 3, 474, 237, 0, 2072, 2074, 3, 466, 233, 0, 2073, 2071, 1, + 0, 0, 0, 2073, 2072, 1, 0, 0, 0, 2074, 389, 1, 0, 0, 0, 2075, 2078, 3, 392, 196, 0, 2076, + 2078, 3, 406, 203, 0, 2077, 2075, 1, 0, 0, 0, 2077, 2076, 1, 0, 0, 0, 2078, 391, 1, + 0, 0, 0, 2079, 2081, 3, 2, 1, 0, 2080, 2082, 3, 394, 197, 0, 2081, 2080, 1, 0, 0, 0, + 2081, 2082, 1, 0, 0, 0, 2082, 2297, 1, 0, 0, 0, 2083, 2085, 3, 396, 198, 0, 2084, 2086, + 3, 394, 197, 0, 2085, 2084, 1, 0, 0, 0, 2085, 2086, 1, 0, 0, 0, 2086, 2297, 1, 0, 0, + 0, 2087, 2089, 5, 60, 0, 0, 2088, 2090, 3, 394, 197, 0, 2089, 2088, 1, 0, 0, 0, 2089, + 2090, 1, 0, 0, 0, 2090, 2297, 1, 0, 0, 0, 2091, 2092, 3, 54, 27, 0, 2092, 2093, 5, 84, + 0, 0, 2093, 2095, 5, 60, 0, 0, 2094, 2096, 3, 394, 197, 0, 2095, 2094, 1, 0, 0, 0, 2095, + 2096, 1, 0, 0, 0, 2096, 2297, 1, 0, 0, 0, 2097, 2098, 5, 76, 0, 0, 2098, 2099, 3, 388, + 194, 0, 2099, 2101, 5, 77, 0, 0, 2100, 2102, 3, 394, 197, 0, 2101, 2100, 1, 0, 0, 0, + 2101, 2102, 1, 0, 0, 0, 2102, 2297, 1, 0, 0, 0, 2103, 2105, 3, 400, 200, 0, 2104, 2106, + 3, 394, 197, 0, 2105, 2104, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 2297, 1, 0, 0, + 0, 2107, 2108, 3, 58, 29, 0, 2108, 2109, 5, 84, 0, 0, 2109, 2111, 3, 400, 200, 0, 2110, + 2112, 3, 394, 197, 0, 2111, 2110, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2297, 1, + 0, 0, 0, 2113, 2114, 3, 406, 203, 0, 2114, 2115, 5, 84, 0, 0, 2115, 2117, 3, 400, 200, + 0, 2116, 2118, 3, 394, 197, 0, 2117, 2116, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, + 2297, 1, 0, 0, 0, 2119, 2120, 3, 406, 203, 0, 2120, 2121, 5, 84, 0, 0, 2121, 2123, + 5, 123, 0, 0, 2122, 2124, 3, 394, 197, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, + 0, 0, 2124, 2297, 1, 0, 0, 0, 2125, 2126, 5, 57, 0, 0, 2126, 2127, 5, 84, 0, 0, 2127, + 2129, 5, 123, 0, 0, 2128, 2130, 3, 394, 197, 0, 2129, 2128, 1, 0, 0, 0, 2129, 2130, + 1, 0, 0, 0, 2130, 2297, 1, 0, 0, 0, 2131, 2132, 3, 54, 27, 0, 2132, 2133, 5, 84, 0, 0, + 2133, 2134, 5, 57, 0, 0, 2134, 2135, 5, 84, 0, 0, 2135, 2137, 5, 123, 0, 0, 2136, 2138, + 3, 394, 197, 0, 2137, 2136, 1, 0, 0, 0, 2137, 2138, 1, 0, 0, 0, 2138, 2297, 1, 0, 0, + 0, 2139, 2140, 3, 58, 29, 0, 2140, 2141, 5, 80, 0, 0, 2141, 2142, 3, 388, 194, 0, 2142, + 2144, 5, 81, 0, 0, 2143, 2145, 3, 394, 197, 0, 2144, 2143, 1, 0, 0, 0, 2144, 2145, + 1, 0, 0, 0, 2145, 2297, 1, 0, 0, 0, 2146, 2147, 3, 410, 205, 0, 2147, 2148, 5, 80, 0, + 0, 2148, 2149, 3, 388, 194, 0, 2149, 2151, 5, 81, 0, 0, 2150, 2152, 3, 394, 197, 0, + 2151, 2150, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2297, 1, 0, 0, 0, 2153, 2154, + 3, 60, 30, 0, 2154, 2156, 5, 76, 0, 0, 2155, 2157, 3, 422, 211, 0, 2156, 2155, 1, 0, + 0, 0, 2156, 2157, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2160, 5, 77, 0, 0, 2159, + 2161, 3, 394, 197, 0, 2160, 2159, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2297, 1, + 0, 0, 0, 2162, 2163, 3, 54, 27, 0, 2163, 2165, 5, 84, 0, 0, 2164, 2166, 3, 40, 20, 0, + 2165, 2164, 1, 0, 0, 0, 2165, 2166, 1, 0, 0, 0, 2166, 2167, 1, 0, 0, 0, 2167, 2168, + 5, 123, 0, 0, 2168, 2170, 5, 76, 0, 0, 2169, 2171, 3, 422, 211, 0, 2170, 2169, 1, 0, + 0, 0, 2170, 2171, 1, 0, 0, 0, 2171, 2172, 1, 0, 0, 0, 2172, 2174, 5, 77, 0, 0, 2173, + 2175, 3, 394, 197, 0, 2174, 2173, 1, 0, 0, 0, 2174, 2175, 1, 0, 0, 0, 2175, 2297, 1, + 0, 0, 0, 2176, 2177, 3, 58, 29, 0, 2177, 2179, 5, 84, 0, 0, 2178, 2180, 3, 40, 20, 0, + 2179, 2178, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 2181, 1, 0, 0, 0, 2181, 2182, + 5, 123, 0, 0, 2182, 2184, 5, 76, 0, 0, 2183, 2185, 3, 422, 211, 0, 2184, 2183, 1, 0, + 0, 0, 2184, 2185, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2188, 5, 77, 0, 0, 2187, + 2189, 3, 394, 197, 0, 2188, 2187, 1, 0, 0, 0, 2188, 2189, 1, 0, 0, 0, 2189, 2297, 1, + 0, 0, 0, 2190, 2191, 3, 406, 203, 0, 2191, 2193, 5, 84, 0, 0, 2192, 2194, 3, 40, 20, + 0, 2193, 2192, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2195, 1, 0, 0, 0, 2195, 2196, + 5, 123, 0, 0, 2196, 2198, 5, 76, 0, 0, 2197, 2199, 3, 422, 211, 0, 2198, 2197, 1, 0, + 0, 0, 2198, 2199, 1, 0, 0, 0, 2199, 2200, 1, 0, 0, 0, 2200, 2202, 5, 77, 0, 0, 2201, + 2203, 3, 394, 197, 0, 2202, 2201, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2297, 1, + 0, 0, 0, 2204, 2205, 5, 57, 0, 0, 2205, 2207, 5, 84, 0, 0, 2206, 2208, 3, 40, 20, 0, + 2207, 2206, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2209, 1, 0, 0, 0, 2209, 2210, + 5, 123, 0, 0, 2210, 2212, 5, 76, 0, 0, 2211, 2213, 3, 422, 211, 0, 2212, 2211, 1, 0, + 0, 0, 2212, 2213, 1, 0, 0, 0, 2213, 2214, 1, 0, 0, 0, 2214, 2216, 5, 77, 0, 0, 2215, + 2217, 3, 394, 197, 0, 2216, 2215, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2297, 1, + 0, 0, 0, 2218, 2219, 3, 54, 27, 0, 2219, 2220, 5, 84, 0, 0, 2220, 2221, 5, 57, 0, 0, + 2221, 2223, 5, 84, 0, 0, 2222, 2224, 3, 40, 20, 0, 2223, 2222, 1, 0, 0, 0, 2223, 2224, + 1, 0, 0, 0, 2224, 2225, 1, 0, 0, 0, 2225, 2226, 5, 123, 0, 0, 2226, 2228, 5, 76, 0, 0, + 2227, 2229, 3, 422, 211, 0, 2228, 2227, 1, 0, 0, 0, 2228, 2229, 1, 0, 0, 0, 2229, 2230, + 1, 0, 0, 0, 2230, 2232, 5, 77, 0, 0, 2231, 2233, 3, 394, 197, 0, 2232, 2231, 1, 0, 0, + 0, 2232, 2233, 1, 0, 0, 0, 2233, 2297, 1, 0, 0, 0, 2234, 2235, 3, 58, 29, 0, 2235, 2237, + 5, 87, 0, 0, 2236, 2238, 3, 40, 20, 0, 2237, 2236, 1, 0, 0, 0, 2237, 2238, 1, 0, 0, 0, + 2238, 2239, 1, 0, 0, 0, 2239, 2241, 5, 123, 0, 0, 2240, 2242, 3, 394, 197, 0, 2241, + 2240, 1, 0, 0, 0, 2241, 2242, 1, 0, 0, 0, 2242, 2297, 1, 0, 0, 0, 2243, 2244, 3, 406, + 203, 0, 2244, 2246, 5, 87, 0, 0, 2245, 2247, 3, 40, 20, 0, 2246, 2245, 1, 0, 0, 0, 2246, + 2247, 1, 0, 0, 0, 2247, 2248, 1, 0, 0, 0, 2248, 2250, 5, 123, 0, 0, 2249, 2251, 3, 394, + 197, 0, 2250, 2249, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2297, 1, 0, 0, 0, 2252, + 2253, 3, 16, 8, 0, 2253, 2255, 5, 87, 0, 0, 2254, 2256, 3, 40, 20, 0, 2255, 2254, 1, + 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 2257, 1, 0, 0, 0, 2257, 2259, 5, 123, 0, 0, 2258, + 2260, 3, 394, 197, 0, 2259, 2258, 1, 0, 0, 0, 2259, 2260, 1, 0, 0, 0, 2260, 2297, 1, + 0, 0, 0, 2261, 2262, 5, 57, 0, 0, 2262, 2264, 5, 87, 0, 0, 2263, 2265, 3, 40, 20, 0, + 2264, 2263, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 2266, 1, 0, 0, 0, 2266, 2268, + 5, 123, 0, 0, 2267, 2269, 3, 394, 197, 0, 2268, 2267, 1, 0, 0, 0, 2268, 2269, 1, 0, + 0, 0, 2269, 2297, 1, 0, 0, 0, 2270, 2271, 3, 54, 27, 0, 2271, 2272, 5, 84, 0, 0, 2272, + 2273, 5, 57, 0, 0, 2273, 2275, 5, 87, 0, 0, 2274, 2276, 3, 40, 20, 0, 2275, 2274, 1, + 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2277, 1, 0, 0, 0, 2277, 2279, 5, 123, 0, 0, 2278, + 2280, 3, 394, 197, 0, 2279, 2278, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 2297, 1, + 0, 0, 0, 2281, 2282, 3, 22, 11, 0, 2282, 2284, 5, 87, 0, 0, 2283, 2285, 3, 40, 20, 0, + 2284, 2283, 1, 0, 0, 0, 2284, 2285, 1, 0, 0, 0, 2285, 2286, 1, 0, 0, 0, 2286, 2288, + 5, 48, 0, 0, 2287, 2289, 3, 394, 197, 0, 2288, 2287, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, + 0, 2289, 2297, 1, 0, 0, 0, 2290, 2291, 3, 28, 14, 0, 2291, 2292, 5, 87, 0, 0, 2292, + 2294, 5, 48, 0, 0, 2293, 2295, 3, 394, 197, 0, 2294, 2293, 1, 0, 0, 0, 2294, 2295, + 1, 0, 0, 0, 2295, 2297, 1, 0, 0, 0, 2296, 2079, 1, 0, 0, 0, 2296, 2083, 1, 0, 0, 0, 2296, + 2087, 1, 0, 0, 0, 2296, 2091, 1, 0, 0, 0, 2296, 2097, 1, 0, 0, 0, 2296, 2103, 1, 0, 0, + 0, 2296, 2107, 1, 0, 0, 0, 2296, 2113, 1, 0, 0, 0, 2296, 2119, 1, 0, 0, 0, 2296, 2125, + 1, 0, 0, 0, 2296, 2131, 1, 0, 0, 0, 2296, 2139, 1, 0, 0, 0, 2296, 2146, 1, 0, 0, 0, 2296, + 2153, 1, 0, 0, 0, 2296, 2162, 1, 0, 0, 0, 2296, 2176, 1, 0, 0, 0, 2296, 2190, 1, 0, 0, + 0, 2296, 2204, 1, 0, 0, 0, 2296, 2218, 1, 0, 0, 0, 2296, 2234, 1, 0, 0, 0, 2296, 2243, + 1, 0, 0, 0, 2296, 2252, 1, 0, 0, 0, 2296, 2261, 1, 0, 0, 0, 2296, 2270, 1, 0, 0, 0, 2296, + 2281, 1, 0, 0, 0, 2296, 2290, 1, 0, 0, 0, 2297, 393, 1, 0, 0, 0, 2298, 2299, 5, 84, 0, + 0, 2299, 2301, 3, 400, 200, 0, 2300, 2302, 3, 394, 197, 0, 2301, 2300, 1, 0, 0, 0, + 2301, 2302, 1, 0, 0, 0, 2302, 2336, 1, 0, 0, 0, 2303, 2304, 5, 84, 0, 0, 2304, 2306, + 5, 123, 0, 0, 2305, 2307, 3, 394, 197, 0, 2306, 2305, 1, 0, 0, 0, 2306, 2307, 1, 0, + 0, 0, 2307, 2336, 1, 0, 0, 0, 2308, 2309, 5, 80, 0, 0, 2309, 2310, 3, 388, 194, 0, 2310, + 2312, 5, 81, 0, 0, 2311, 2313, 3, 394, 197, 0, 2312, 2311, 1, 0, 0, 0, 2312, 2313, + 1, 0, 0, 0, 2313, 2336, 1, 0, 0, 0, 2314, 2316, 5, 84, 0, 0, 2315, 2317, 3, 40, 20, 0, + 2316, 2315, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 2319, + 5, 123, 0, 0, 2319, 2321, 5, 76, 0, 0, 2320, 2322, 3, 422, 211, 0, 2321, 2320, 1, 0, + 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2323, 1, 0, 0, 0, 2323, 2325, 5, 77, 0, 0, 2324, + 2326, 3, 394, 197, 0, 2325, 2324, 1, 0, 0, 0, 2325, 2326, 1, 0, 0, 0, 2326, 2336, 1, + 0, 0, 0, 2327, 2329, 5, 87, 0, 0, 2328, 2330, 3, 40, 20, 0, 2329, 2328, 1, 0, 0, 0, 2329, + 2330, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2333, 5, 123, 0, 0, 2332, 2334, 3, 394, + 197, 0, 2333, 2332, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2336, 1, 0, 0, 0, 2335, + 2298, 1, 0, 0, 0, 2335, 2303, 1, 0, 0, 0, 2335, 2308, 1, 0, 0, 0, 2335, 2314, 1, 0, 0, + 0, 2335, 2327, 1, 0, 0, 0, 2336, 395, 1, 0, 0, 0, 2337, 2342, 3, 54, 27, 0, 2338, 2339, + 5, 80, 0, 0, 2339, 2341, 5, 81, 0, 0, 2340, 2338, 1, 0, 0, 0, 2341, 2344, 1, 0, 0, 0, + 2342, 2340, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2345, 1, 0, 0, 0, 2344, 2342, + 1, 0, 0, 0, 2345, 2346, 5, 84, 0, 0, 2346, 2347, 5, 26, 0, 0, 2347, 2373, 1, 0, 0, 0, + 2348, 2353, 3, 10, 5, 0, 2349, 2350, 5, 80, 0, 0, 2350, 2352, 5, 81, 0, 0, 2351, 2349, + 1, 0, 0, 0, 2352, 2355, 1, 0, 0, 0, 2353, 2351, 1, 0, 0, 0, 2353, 2354, 1, 0, 0, 0, 2354, + 2356, 1, 0, 0, 0, 2355, 2353, 1, 0, 0, 0, 2356, 2357, 5, 84, 0, 0, 2357, 2358, 5, 26, + 0, 0, 2358, 2373, 1, 0, 0, 0, 2359, 2364, 5, 20, 0, 0, 2360, 2361, 5, 80, 0, 0, 2361, + 2363, 5, 81, 0, 0, 2362, 2360, 1, 0, 0, 0, 2363, 2366, 1, 0, 0, 0, 2364, 2362, 1, 0, + 0, 0, 2364, 2365, 1, 0, 0, 0, 2365, 2367, 1, 0, 0, 0, 2366, 2364, 1, 0, 0, 0, 2367, 2368, + 5, 84, 0, 0, 2368, 2373, 5, 26, 0, 0, 2369, 2370, 5, 65, 0, 0, 2370, 2371, 5, 84, 0, + 0, 2371, 2373, 5, 26, 0, 0, 2372, 2337, 1, 0, 0, 0, 2372, 2348, 1, 0, 0, 0, 2372, 2359, + 1, 0, 0, 0, 2372, 2369, 1, 0, 0, 0, 2373, 397, 1, 0, 0, 0, 2374, 2384, 3, 400, 200, 0, + 2375, 2376, 3, 58, 29, 0, 2376, 2377, 5, 84, 0, 0, 2377, 2378, 3, 400, 200, 0, 2378, + 2384, 1, 0, 0, 0, 2379, 2380, 3, 390, 195, 0, 2380, 2381, 5, 84, 0, 0, 2381, 2382, + 3, 400, 200, 0, 2382, 2384, 1, 0, 0, 0, 2383, 2374, 1, 0, 0, 0, 2383, 2375, 1, 0, 0, + 0, 2383, 2379, 1, 0, 0, 0, 2384, 399, 1, 0, 0, 0, 2385, 2387, 5, 48, 0, 0, 2386, 2388, + 3, 40, 20, 0, 2387, 2386, 1, 0, 0, 0, 2387, 2388, 1, 0, 0, 0, 2388, 2389, 1, 0, 0, 0, + 2389, 2390, 3, 402, 201, 0, 2390, 2392, 5, 76, 0, 0, 2391, 2393, 3, 422, 211, 0, 2392, + 2391, 1, 0, 0, 0, 2392, 2393, 1, 0, 0, 0, 2393, 2394, 1, 0, 0, 0, 2394, 2396, 5, 77, + 0, 0, 2395, 2397, 3, 110, 55, 0, 2396, 2395, 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, + 401, 1, 0, 0, 0, 2398, 2400, 3, 254, 127, 0, 2399, 2398, 1, 0, 0, 0, 2400, 2403, 1, + 0, 0, 0, 2401, 2399, 1, 0, 0, 0, 2401, 2402, 1, 0, 0, 0, 2402, 2404, 1, 0, 0, 0, 2403, + 2401, 1, 0, 0, 0, 2404, 2415, 5, 123, 0, 0, 2405, 2409, 5, 84, 0, 0, 2406, 2408, 3, + 254, 127, 0, 2407, 2406, 1, 0, 0, 0, 2408, 2411, 1, 0, 0, 0, 2409, 2407, 1, 0, 0, 0, + 2409, 2410, 1, 0, 0, 0, 2410, 2412, 1, 0, 0, 0, 2411, 2409, 1, 0, 0, 0, 2412, 2414, + 5, 123, 0, 0, 2413, 2405, 1, 0, 0, 0, 2414, 2417, 1, 0, 0, 0, 2415, 2413, 1, 0, 0, 0, + 2415, 2416, 1, 0, 0, 0, 2416, 2419, 1, 0, 0, 0, 2417, 2415, 1, 0, 0, 0, 2418, 2420, + 3, 404, 202, 0, 2419, 2418, 1, 0, 0, 0, 2419, 2420, 1, 0, 0, 0, 2420, 403, 1, 0, 0, 0, + 2421, 2424, 3, 40, 20, 0, 2422, 2424, 5, 4, 0, 0, 2423, 2421, 1, 0, 0, 0, 2423, 2422, + 1, 0, 0, 0, 2424, 405, 1, 0, 0, 0, 2425, 2428, 3, 408, 204, 0, 2426, 2428, 3, 410, 205, + 0, 2427, 2425, 1, 0, 0, 0, 2427, 2426, 1, 0, 0, 0, 2428, 407, 1, 0, 0, 0, 2429, 2430, + 5, 48, 0, 0, 2430, 2431, 3, 8, 4, 0, 2431, 2433, 3, 412, 206, 0, 2432, 2434, 3, 30, + 15, 0, 2433, 2432, 1, 0, 0, 0, 2433, 2434, 1, 0, 0, 0, 2434, 2442, 1, 0, 0, 0, 2435, + 2436, 5, 48, 0, 0, 2436, 2437, 3, 22, 11, 0, 2437, 2439, 3, 412, 206, 0, 2438, 2440, + 3, 30, 15, 0, 2439, 2438, 1, 0, 0, 0, 2439, 2440, 1, 0, 0, 0, 2440, 2442, 1, 0, 0, 0, + 2441, 2429, 1, 0, 0, 0, 2441, 2435, 1, 0, 0, 0, 2442, 409, 1, 0, 0, 0, 2443, 2444, 5, + 48, 0, 0, 2444, 2445, 3, 8, 4, 0, 2445, 2446, 3, 30, 15, 0, 2446, 2447, 3, 272, 136, + 0, 2447, 2454, 1, 0, 0, 0, 2448, 2449, 5, 48, 0, 0, 2449, 2450, 3, 20, 10, 0, 2450, + 2451, 3, 30, 15, 0, 2451, 2452, 3, 272, 136, 0, 2452, 2454, 1, 0, 0, 0, 2453, 2443, + 1, 0, 0, 0, 2453, 2448, 1, 0, 0, 0, 2454, 411, 1, 0, 0, 0, 2455, 2459, 3, 414, 207, 0, + 2456, 2458, 3, 414, 207, 0, 2457, 2456, 1, 0, 0, 0, 2458, 2461, 1, 0, 0, 0, 2459, 2457, + 1, 0, 0, 0, 2459, 2460, 1, 0, 0, 0, 2460, 413, 1, 0, 0, 0, 2461, 2459, 1, 0, 0, 0, 2462, + 2464, 3, 254, 127, 0, 2463, 2462, 1, 0, 0, 0, 2464, 2467, 1, 0, 0, 0, 2465, 2463, 1, + 0, 0, 0, 2465, 2466, 1, 0, 0, 0, 2466, 2468, 1, 0, 0, 0, 2467, 2465, 1, 0, 0, 0, 2468, + 2469, 5, 80, 0, 0, 2469, 2470, 3, 388, 194, 0, 2470, 2471, 5, 81, 0, 0, 2471, 415, + 1, 0, 0, 0, 2472, 2473, 3, 58, 29, 0, 2473, 2474, 5, 80, 0, 0, 2474, 2475, 3, 388, 194, + 0, 2475, 2476, 5, 81, 0, 0, 2476, 2488, 1, 0, 0, 0, 2477, 2478, 3, 392, 196, 0, 2478, + 2479, 5, 80, 0, 0, 2479, 2480, 3, 388, 194, 0, 2480, 2481, 5, 81, 0, 0, 2481, 2488, + 1, 0, 0, 0, 2482, 2483, 3, 410, 205, 0, 2483, 2484, 5, 80, 0, 0, 2484, 2485, 3, 388, + 194, 0, 2485, 2486, 5, 81, 0, 0, 2486, 2488, 1, 0, 0, 0, 2487, 2472, 1, 0, 0, 0, 2487, + 2477, 1, 0, 0, 0, 2487, 2482, 1, 0, 0, 0, 2488, 417, 1, 0, 0, 0, 2489, 2490, 3, 390, + 195, 0, 2490, 2491, 5, 84, 0, 0, 2491, 2492, 5, 123, 0, 0, 2492, 2503, 1, 0, 0, 0, 2493, + 2494, 5, 57, 0, 0, 2494, 2495, 5, 84, 0, 0, 2495, 2503, 5, 123, 0, 0, 2496, 2497, 3, + 54, 27, 0, 2497, 2498, 5, 84, 0, 0, 2498, 2499, 5, 57, 0, 0, 2499, 2500, 5, 84, 0, 0, + 2500, 2501, 5, 123, 0, 0, 2501, 2503, 1, 0, 0, 0, 2502, 2489, 1, 0, 0, 0, 2502, 2493, + 1, 0, 0, 0, 2502, 2496, 1, 0, 0, 0, 2503, 419, 1, 0, 0, 0, 2504, 2505, 3, 60, 30, 0, 2505, + 2507, 5, 76, 0, 0, 2506, 2508, 3, 422, 211, 0, 2507, 2506, 1, 0, 0, 0, 2507, 2508, + 1, 0, 0, 0, 2508, 2509, 1, 0, 0, 0, 2509, 2510, 5, 77, 0, 0, 2510, 2573, 1, 0, 0, 0, 2511, + 2512, 3, 54, 27, 0, 2512, 2514, 5, 84, 0, 0, 2513, 2515, 3, 40, 20, 0, 2514, 2513, + 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2516, 1, 0, 0, 0, 2516, 2517, 5, 123, 0, 0, + 2517, 2519, 5, 76, 0, 0, 2518, 2520, 3, 422, 211, 0, 2519, 2518, 1, 0, 0, 0, 2519, + 2520, 1, 0, 0, 0, 2520, 2521, 1, 0, 0, 0, 2521, 2522, 5, 77, 0, 0, 2522, 2573, 1, 0, + 0, 0, 2523, 2524, 3, 58, 29, 0, 2524, 2526, 5, 84, 0, 0, 2525, 2527, 3, 40, 20, 0, 2526, + 2525, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 2528, 1, 0, 0, 0, 2528, 2529, 5, 123, + 0, 0, 2529, 2531, 5, 76, 0, 0, 2530, 2532, 3, 422, 211, 0, 2531, 2530, 1, 0, 0, 0, 2531, + 2532, 1, 0, 0, 0, 2532, 2533, 1, 0, 0, 0, 2533, 2534, 5, 77, 0, 0, 2534, 2573, 1, 0, + 0, 0, 2535, 2536, 3, 390, 195, 0, 2536, 2538, 5, 84, 0, 0, 2537, 2539, 3, 40, 20, 0, + 2538, 2537, 1, 0, 0, 0, 2538, 2539, 1, 0, 0, 0, 2539, 2540, 1, 0, 0, 0, 2540, 2541, + 5, 123, 0, 0, 2541, 2543, 5, 76, 0, 0, 2542, 2544, 3, 422, 211, 0, 2543, 2542, 1, 0, + 0, 0, 2543, 2544, 1, 0, 0, 0, 2544, 2545, 1, 0, 0, 0, 2545, 2546, 5, 77, 0, 0, 2546, + 2573, 1, 0, 0, 0, 2547, 2548, 5, 57, 0, 0, 2548, 2550, 5, 84, 0, 0, 2549, 2551, 3, 40, + 20, 0, 2550, 2549, 1, 0, 0, 0, 2550, 2551, 1, 0, 0, 0, 2551, 2552, 1, 0, 0, 0, 2552, + 2553, 5, 123, 0, 0, 2553, 2555, 5, 76, 0, 0, 2554, 2556, 3, 422, 211, 0, 2555, 2554, + 1, 0, 0, 0, 2555, 2556, 1, 0, 0, 0, 2556, 2557, 1, 0, 0, 0, 2557, 2573, 5, 77, 0, 0, 2558, + 2559, 3, 54, 27, 0, 2559, 2560, 5, 84, 0, 0, 2560, 2561, 5, 57, 0, 0, 2561, 2563, 5, + 84, 0, 0, 2562, 2564, 3, 40, 20, 0, 2563, 2562, 1, 0, 0, 0, 2563, 2564, 1, 0, 0, 0, 2564, + 2565, 1, 0, 0, 0, 2565, 2566, 5, 123, 0, 0, 2566, 2568, 5, 76, 0, 0, 2567, 2569, 3, + 422, 211, 0, 2568, 2567, 1, 0, 0, 0, 2568, 2569, 1, 0, 0, 0, 2569, 2570, 1, 0, 0, 0, + 2570, 2571, 5, 77, 0, 0, 2571, 2573, 1, 0, 0, 0, 2572, 2504, 1, 0, 0, 0, 2572, 2511, + 1, 0, 0, 0, 2572, 2523, 1, 0, 0, 0, 2572, 2535, 1, 0, 0, 0, 2572, 2547, 1, 0, 0, 0, 2572, + 2558, 1, 0, 0, 0, 2573, 421, 1, 0, 0, 0, 2574, 2579, 3, 388, 194, 0, 2575, 2576, 5, + 83, 0, 0, 2576, 2578, 3, 388, 194, 0, 2577, 2575, 1, 0, 0, 0, 2578, 2581, 1, 0, 0, 0, + 2579, 2577, 1, 0, 0, 0, 2579, 2580, 1, 0, 0, 0, 2580, 423, 1, 0, 0, 0, 2581, 2579, 1, + 0, 0, 0, 2582, 2583, 3, 58, 29, 0, 2583, 2585, 5, 87, 0, 0, 2584, 2586, 3, 40, 20, 0, + 2585, 2584, 1, 0, 0, 0, 2585, 2586, 1, 0, 0, 0, 2586, 2587, 1, 0, 0, 0, 2587, 2588, + 5, 123, 0, 0, 2588, 2630, 1, 0, 0, 0, 2589, 2590, 3, 390, 195, 0, 2590, 2592, 5, 87, + 0, 0, 2591, 2593, 3, 40, 20, 0, 2592, 2591, 1, 0, 0, 0, 2592, 2593, 1, 0, 0, 0, 2593, + 2594, 1, 0, 0, 0, 2594, 2595, 5, 123, 0, 0, 2595, 2630, 1, 0, 0, 0, 2596, 2597, 3, 16, + 8, 0, 2597, 2599, 5, 87, 0, 0, 2598, 2600, 3, 40, 20, 0, 2599, 2598, 1, 0, 0, 0, 2599, + 2600, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2602, 5, 123, 0, 0, 2602, 2630, 1, 0, + 0, 0, 2603, 2604, 5, 57, 0, 0, 2604, 2606, 5, 87, 0, 0, 2605, 2607, 3, 40, 20, 0, 2606, + 2605, 1, 0, 0, 0, 2606, 2607, 1, 0, 0, 0, 2607, 2608, 1, 0, 0, 0, 2608, 2630, 5, 123, + 0, 0, 2609, 2610, 3, 54, 27, 0, 2610, 2611, 5, 84, 0, 0, 2611, 2612, 5, 57, 0, 0, 2612, + 2614, 5, 87, 0, 0, 2613, 2615, 3, 40, 20, 0, 2614, 2613, 1, 0, 0, 0, 2614, 2615, 1, + 0, 0, 0, 2615, 2616, 1, 0, 0, 0, 2616, 2617, 5, 123, 0, 0, 2617, 2630, 1, 0, 0, 0, 2618, + 2619, 3, 22, 11, 0, 2619, 2621, 5, 87, 0, 0, 2620, 2622, 3, 40, 20, 0, 2621, 2620, + 1, 0, 0, 0, 2621, 2622, 1, 0, 0, 0, 2622, 2623, 1, 0, 0, 0, 2623, 2624, 5, 48, 0, 0, 2624, + 2630, 1, 0, 0, 0, 2625, 2626, 3, 28, 14, 0, 2626, 2627, 5, 87, 0, 0, 2627, 2628, 5, + 48, 0, 0, 2628, 2630, 1, 0, 0, 0, 2629, 2582, 1, 0, 0, 0, 2629, 2589, 1, 0, 0, 0, 2629, + 2596, 1, 0, 0, 0, 2629, 2603, 1, 0, 0, 0, 2629, 2609, 1, 0, 0, 0, 2629, 2618, 1, 0, 0, + 0, 2629, 2625, 1, 0, 0, 0, 2630, 425, 1, 0, 0, 0, 2631, 2633, 3, 390, 195, 0, 2632, + 2634, 3, 428, 214, 0, 2633, 2632, 1, 0, 0, 0, 2633, 2634, 1, 0, 0, 0, 2634, 2640, 1, + 0, 0, 0, 2635, 2637, 3, 58, 29, 0, 2636, 2638, 3, 428, 214, 0, 2637, 2636, 1, 0, 0, + 0, 2637, 2638, 1, 0, 0, 0, 2638, 2640, 1, 0, 0, 0, 2639, 2631, 1, 0, 0, 0, 2639, 2635, + 1, 0, 0, 0, 2640, 427, 1, 0, 0, 0, 2641, 2643, 5, 102, 0, 0, 2642, 2644, 3, 428, 214, + 0, 2643, 2642, 1, 0, 0, 0, 2643, 2644, 1, 0, 0, 0, 2644, 2650, 1, 0, 0, 0, 2645, 2647, + 5, 103, 0, 0, 2646, 2648, 3, 428, 214, 0, 2647, 2646, 1, 0, 0, 0, 2647, 2648, 1, 0, + 0, 0, 2648, 2650, 1, 0, 0, 0, 2649, 2641, 1, 0, 0, 0, 2649, 2645, 1, 0, 0, 0, 2650, 429, + 1, 0, 0, 0, 2651, 2652, 3, 426, 213, 0, 2652, 2653, 5, 102, 0, 0, 2653, 431, 1, 0, 0, + 0, 2654, 2655, 3, 426, 213, 0, 2655, 2656, 5, 103, 0, 0, 2656, 433, 1, 0, 0, 0, 2657, + 2665, 3, 436, 218, 0, 2658, 2665, 3, 438, 219, 0, 2659, 2660, 5, 104, 0, 0, 2660, + 2665, 3, 434, 217, 0, 2661, 2662, 5, 105, 0, 0, 2662, 2665, 3, 434, 217, 0, 2663, + 2665, 3, 440, 220, 0, 2664, 2657, 1, 0, 0, 0, 2664, 2658, 1, 0, 0, 0, 2664, 2659, 1, + 0, 0, 0, 2664, 2661, 1, 0, 0, 0, 2664, 2663, 1, 0, 0, 0, 2665, 435, 1, 0, 0, 0, 2666, + 2667, 5, 102, 0, 0, 2667, 2668, 3, 434, 217, 0, 2668, 437, 1, 0, 0, 0, 2669, 2670, + 5, 103, 0, 0, 2670, 2671, 3, 434, 217, 0, 2671, 439, 1, 0, 0, 0, 2672, 2680, 3, 426, + 213, 0, 2673, 2674, 5, 92, 0, 0, 2674, 2680, 3, 434, 217, 0, 2675, 2676, 5, 91, 0, + 0, 2676, 2680, 3, 434, 217, 0, 2677, 2680, 3, 442, 221, 0, 2678, 2680, 3, 486, 243, + 0, 2679, 2672, 1, 0, 0, 0, 2679, 2673, 1, 0, 0, 0, 2679, 2675, 1, 0, 0, 0, 2679, 2677, + 1, 0, 0, 0, 2679, 2678, 1, 0, 0, 0, 2680, 441, 1, 0, 0, 0, 2681, 2682, 5, 76, 0, 0, 2682, + 2683, 3, 8, 4, 0, 2683, 2684, 5, 77, 0, 0, 2684, 2685, 3, 434, 217, 0, 2685, 2709, + 1, 0, 0, 0, 2686, 2687, 5, 76, 0, 0, 2687, 2691, 3, 16, 8, 0, 2688, 2690, 3, 38, 19, + 0, 2689, 2688, 1, 0, 0, 0, 2690, 2693, 1, 0, 0, 0, 2691, 2689, 1, 0, 0, 0, 2691, 2692, + 1, 0, 0, 0, 2692, 2694, 1, 0, 0, 0, 2693, 2691, 1, 0, 0, 0, 2694, 2695, 5, 77, 0, 0, 2695, + 2696, 3, 440, 220, 0, 2696, 2709, 1, 0, 0, 0, 2697, 2698, 5, 76, 0, 0, 2698, 2702, + 3, 16, 8, 0, 2699, 2701, 3, 38, 19, 0, 2700, 2699, 1, 0, 0, 0, 2701, 2704, 1, 0, 0, 0, + 2702, 2700, 1, 0, 0, 0, 2702, 2703, 1, 0, 0, 0, 2703, 2705, 1, 0, 0, 0, 2704, 2702, + 1, 0, 0, 0, 2705, 2706, 5, 77, 0, 0, 2706, 2707, 3, 474, 237, 0, 2707, 2709, 1, 0, 0, + 0, 2708, 2681, 1, 0, 0, 0, 2708, 2686, 1, 0, 0, 0, 2708, 2697, 1, 0, 0, 0, 2709, 443, + 1, 0, 0, 0, 2710, 2711, 6, 222, -1, 0, 2711, 2712, 3, 434, 217, 0, 2712, 2724, 1, 0, + 0, 0, 2713, 2714, 10, 3, 0, 0, 2714, 2715, 5, 106, 0, 0, 2715, 2723, 3, 434, 217, 0, + 2716, 2717, 10, 2, 0, 0, 2717, 2718, 5, 107, 0, 0, 2718, 2723, 3, 434, 217, 0, 2719, + 2720, 10, 1, 0, 0, 2720, 2721, 5, 111, 0, 0, 2721, 2723, 3, 434, 217, 0, 2722, 2713, + 1, 0, 0, 0, 2722, 2716, 1, 0, 0, 0, 2722, 2719, 1, 0, 0, 0, 2723, 2726, 1, 0, 0, 0, 2724, + 2722, 1, 0, 0, 0, 2724, 2725, 1, 0, 0, 0, 2725, 445, 1, 0, 0, 0, 2726, 2724, 1, 0, 0, + 0, 2727, 2728, 6, 223, -1, 0, 2728, 2729, 3, 444, 222, 0, 2729, 2738, 1, 0, 0, 0, 2730, + 2731, 10, 2, 0, 0, 2731, 2732, 5, 104, 0, 0, 2732, 2737, 3, 444, 222, 0, 2733, 2734, + 10, 1, 0, 0, 2734, 2735, 5, 105, 0, 0, 2735, 2737, 3, 444, 222, 0, 2736, 2730, 1, 0, + 0, 0, 2736, 2733, 1, 0, 0, 0, 2737, 2740, 1, 0, 0, 0, 2738, 2736, 1, 0, 0, 0, 2738, 2739, + 1, 0, 0, 0, 2739, 447, 1, 0, 0, 0, 2740, 2738, 1, 0, 0, 0, 2741, 2742, 6, 224, -1, 0, + 2742, 2743, 3, 446, 223, 0, 2743, 2759, 1, 0, 0, 0, 2744, 2745, 10, 3, 0, 0, 2745, + 2746, 5, 90, 0, 0, 2746, 2747, 5, 90, 0, 0, 2747, 2758, 3, 446, 223, 0, 2748, 2749, + 10, 2, 0, 0, 2749, 2750, 5, 89, 0, 0, 2750, 2751, 5, 89, 0, 0, 2751, 2758, 3, 446, 223, + 0, 2752, 2753, 10, 1, 0, 0, 2753, 2754, 5, 89, 0, 0, 2754, 2755, 5, 89, 0, 0, 2755, + 2756, 5, 89, 0, 0, 2756, 2758, 3, 446, 223, 0, 2757, 2744, 1, 0, 0, 0, 2757, 2748, + 1, 0, 0, 0, 2757, 2752, 1, 0, 0, 0, 2758, 2761, 1, 0, 0, 0, 2759, 2757, 1, 0, 0, 0, 2759, + 2760, 1, 0, 0, 0, 2760, 449, 1, 0, 0, 0, 2761, 2759, 1, 0, 0, 0, 2762, 2763, 6, 225, + -1, 0, 2763, 2764, 3, 448, 224, 0, 2764, 2785, 1, 0, 0, 0, 2765, 2766, 10, 5, 0, 0, + 2766, 2767, 5, 90, 0, 0, 2767, 2784, 3, 448, 224, 0, 2768, 2769, 10, 4, 0, 0, 2769, + 2770, 5, 89, 0, 0, 2770, 2784, 3, 448, 224, 0, 2771, 2772, 10, 3, 0, 0, 2772, 2773, + 5, 97, 0, 0, 2773, 2784, 3, 448, 224, 0, 2774, 2775, 10, 2, 0, 0, 2775, 2776, 5, 98, + 0, 0, 2776, 2784, 3, 448, 224, 0, 2777, 2778, 10, 1, 0, 0, 2778, 2781, 5, 43, 0, 0, + 2779, 2782, 3, 16, 8, 0, 2780, 2782, 3, 384, 192, 0, 2781, 2779, 1, 0, 0, 0, 2781, + 2780, 1, 0, 0, 0, 2782, 2784, 1, 0, 0, 0, 2783, 2765, 1, 0, 0, 0, 2783, 2768, 1, 0, 0, + 0, 2783, 2771, 1, 0, 0, 0, 2783, 2774, 1, 0, 0, 0, 2783, 2777, 1, 0, 0, 0, 2784, 2787, + 1, 0, 0, 0, 2785, 2783, 1, 0, 0, 0, 2785, 2786, 1, 0, 0, 0, 2786, 451, 1, 0, 0, 0, 2787, + 2785, 1, 0, 0, 0, 2788, 2789, 6, 226, -1, 0, 2789, 2790, 3, 450, 225, 0, 2790, 2799, + 1, 0, 0, 0, 2791, 2792, 10, 2, 0, 0, 2792, 2793, 5, 96, 0, 0, 2793, 2798, 3, 450, 225, + 0, 2794, 2795, 10, 1, 0, 0, 2795, 2796, 5, 99, 0, 0, 2796, 2798, 3, 450, 225, 0, 2797, + 2791, 1, 0, 0, 0, 2797, 2794, 1, 0, 0, 0, 2798, 2801, 1, 0, 0, 0, 2799, 2797, 1, 0, 0, + 0, 2799, 2800, 1, 0, 0, 0, 2800, 453, 1, 0, 0, 0, 2801, 2799, 1, 0, 0, 0, 2802, 2803, + 6, 227, -1, 0, 2803, 2804, 3, 452, 226, 0, 2804, 2810, 1, 0, 0, 0, 2805, 2806, 10, + 1, 0, 0, 2806, 2807, 5, 108, 0, 0, 2807, 2809, 3, 452, 226, 0, 2808, 2805, 1, 0, 0, + 0, 2809, 2812, 1, 0, 0, 0, 2810, 2808, 1, 0, 0, 0, 2810, 2811, 1, 0, 0, 0, 2811, 455, + 1, 0, 0, 0, 2812, 2810, 1, 0, 0, 0, 2813, 2814, 6, 228, -1, 0, 2814, 2815, 3, 454, 227, + 0, 2815, 2821, 1, 0, 0, 0, 2816, 2817, 10, 1, 0, 0, 2817, 2818, 5, 110, 0, 0, 2818, + 2820, 3, 454, 227, 0, 2819, 2816, 1, 0, 0, 0, 2820, 2823, 1, 0, 0, 0, 2821, 2819, 1, + 0, 0, 0, 2821, 2822, 1, 0, 0, 0, 2822, 457, 1, 0, 0, 0, 2823, 2821, 1, 0, 0, 0, 2824, + 2825, 6, 229, -1, 0, 2825, 2826, 3, 456, 228, 0, 2826, 2832, 1, 0, 0, 0, 2827, 2828, + 10, 1, 0, 0, 2828, 2829, 5, 109, 0, 0, 2829, 2831, 3, 456, 228, 0, 2830, 2827, 1, 0, + 0, 0, 2831, 2834, 1, 0, 0, 0, 2832, 2830, 1, 0, 0, 0, 2832, 2833, 1, 0, 0, 0, 2833, 459, + 1, 0, 0, 0, 2834, 2832, 1, 0, 0, 0, 2835, 2836, 6, 230, -1, 0, 2836, 2837, 3, 458, 229, + 0, 2837, 2843, 1, 0, 0, 0, 2838, 2839, 10, 1, 0, 0, 2839, 2840, 5, 100, 0, 0, 2840, + 2842, 3, 458, 229, 0, 2841, 2838, 1, 0, 0, 0, 2842, 2845, 1, 0, 0, 0, 2843, 2841, 1, + 0, 0, 0, 2843, 2844, 1, 0, 0, 0, 2844, 461, 1, 0, 0, 0, 2845, 2843, 1, 0, 0, 0, 2846, + 2847, 6, 231, -1, 0, 2847, 2848, 3, 460, 230, 0, 2848, 2854, 1, 0, 0, 0, 2849, 2850, + 10, 1, 0, 0, 2850, 2851, 5, 101, 0, 0, 2851, 2853, 3, 460, 230, 0, 2852, 2849, 1, 0, + 0, 0, 2853, 2856, 1, 0, 0, 0, 2854, 2852, 1, 0, 0, 0, 2854, 2855, 1, 0, 0, 0, 2855, 463, + 1, 0, 0, 0, 2856, 2854, 1, 0, 0, 0, 2857, 2871, 3, 462, 231, 0, 2858, 2859, 3, 462, + 231, 0, 2859, 2860, 5, 93, 0, 0, 2860, 2861, 3, 388, 194, 0, 2861, 2862, 5, 94, 0, + 0, 2862, 2863, 3, 464, 232, 0, 2863, 2871, 1, 0, 0, 0, 2864, 2865, 3, 462, 231, 0, + 2865, 2866, 5, 93, 0, 0, 2866, 2867, 3, 388, 194, 0, 2867, 2868, 5, 94, 0, 0, 2868, + 2869, 3, 474, 237, 0, 2869, 2871, 1, 0, 0, 0, 2870, 2857, 1, 0, 0, 0, 2870, 2858, 1, + 0, 0, 0, 2870, 2864, 1, 0, 0, 0, 2871, 465, 1, 0, 0, 0, 2872, 2875, 3, 464, 232, 0, 2873, + 2875, 3, 468, 234, 0, 2874, 2872, 1, 0, 0, 0, 2874, 2873, 1, 0, 0, 0, 2875, 467, 1, + 0, 0, 0, 2876, 2877, 3, 470, 235, 0, 2877, 2878, 3, 472, 236, 0, 2878, 2879, 3, 388, + 194, 0, 2879, 469, 1, 0, 0, 0, 2880, 2884, 3, 58, 29, 0, 2881, 2884, 3, 418, 209, 0, + 2882, 2884, 3, 416, 208, 0, 2883, 2880, 1, 0, 0, 0, 2883, 2881, 1, 0, 0, 0, 2883, 2882, + 1, 0, 0, 0, 2884, 471, 1, 0, 0, 0, 2885, 2886, 7, 5, 0, 0, 2886, 473, 1, 0, 0, 0, 2887, + 2888, 3, 476, 238, 0, 2888, 2889, 5, 95, 0, 0, 2889, 2890, 3, 484, 242, 0, 2890, 475, + 1, 0, 0, 0, 2891, 2893, 5, 76, 0, 0, 2892, 2894, 3, 478, 239, 0, 2893, 2892, 1, 0, 0, + 0, 2893, 2894, 1, 0, 0, 0, 2894, 2895, 1, 0, 0, 0, 2895, 2898, 5, 77, 0, 0, 2896, 2898, + 5, 123, 0, 0, 2897, 2891, 1, 0, 0, 0, 2897, 2896, 1, 0, 0, 0, 2898, 477, 1, 0, 0, 0, 2899, + 2904, 3, 480, 240, 0, 2900, 2901, 5, 83, 0, 0, 2901, 2903, 3, 480, 240, 0, 2902, 2900, + 1, 0, 0, 0, 2903, 2906, 1, 0, 0, 0, 2904, 2902, 1, 0, 0, 0, 2904, 2905, 1, 0, 0, 0, 2905, + 2916, 1, 0, 0, 0, 2906, 2904, 1, 0, 0, 0, 2907, 2912, 5, 123, 0, 0, 2908, 2909, 5, 83, + 0, 0, 2909, 2911, 5, 123, 0, 0, 2910, 2908, 1, 0, 0, 0, 2911, 2914, 1, 0, 0, 0, 2912, + 2910, 1, 0, 0, 0, 2912, 2913, 1, 0, 0, 0, 2913, 2916, 1, 0, 0, 0, 2914, 2912, 1, 0, 0, + 0, 2915, 2899, 1, 0, 0, 0, 2915, 2907, 1, 0, 0, 0, 2916, 479, 1, 0, 0, 0, 2917, 2919, + 3, 164, 82, 0, 2918, 2917, 1, 0, 0, 0, 2919, 2922, 1, 0, 0, 0, 2920, 2918, 1, 0, 0, 0, + 2920, 2921, 1, 0, 0, 0, 2921, 2923, 1, 0, 0, 0, 2922, 2920, 1, 0, 0, 0, 2923, 2924, + 3, 482, 241, 0, 2924, 2925, 3, 124, 62, 0, 2925, 2928, 1, 0, 0, 0, 2926, 2928, 3, 162, + 81, 0, 2927, 2920, 1, 0, 0, 0, 2927, 2926, 1, 0, 0, 0, 2928, 481, 1, 0, 0, 0, 2929, 2932, + 3, 128, 64, 0, 2930, 2932, 5, 15, 0, 0, 2931, 2929, 1, 0, 0, 0, 2931, 2930, 1, 0, 0, + 0, 2932, 483, 1, 0, 0, 0, 2933, 2936, 3, 388, 194, 0, 2934, 2936, 3, 276, 138, 0, 2935, + 2933, 1, 0, 0, 0, 2935, 2934, 1, 0, 0, 0, 2936, 485, 1, 0, 0, 0, 2937, 2938, 5, 58, 0, + 0, 2938, 2939, 5, 76, 0, 0, 2939, 2940, 3, 388, 194, 0, 2940, 2941, 5, 77, 0, 0, 2941, + 2942, 3, 316, 158, 0, 2942, 487, 1, 0, 0, 0, 2943, 2944, 3, 388, 194, 0, 2944, 489, + 1, 0, 0, 0, 360, 502, 507, 511, 520, 526, 531, 534, 539, 544, 549, 552, 557, 562, + 569, 574, 581, 586, 588, 595, 609, 614, 622, 629, 635, 640, 650, 653, 667, 672, + 677, 682, 688, 693, 698, 703, 708, 713, 722, 726, 729, 734, 740, 746, 754, 763, + 774, 803, 808, 812, 820, 827, 836, 850, 853, 865, 868, 884, 889, 896, 901, 907, + 910, 913, 916, 930, 941, 955, 964, 971, 980, 987, 992, 1007, 1014, 1020, 1024, + 1028, 1032, 1036, 1041, 1048, 1051, 1055, 1058, 1064, 1069, 1072, 1076, 1080, + 1086, 1091, 1093, 1102, 1109, 1125, 1131, 1134, 1139, 1143, 1150, 1153, 1157, + 1162, 1168, 1177, 1183, 1190, 1195, 1202, 1210, 1220, 1225, 1229, 1239, 1244, + 1252, 1255, 1262, 1265, 1273, 1276, 1281, 1286, 1292, 1296, 1301, 1306, 1311, + 1317, 1323, 1326, 1329, 1338, 1344, 1350, 1353, 1356, 1364, 1370, 1376, 1380, + 1386, 1395, 1401, 1408, 1413, 1420, 1432, 1439, 1444, 1452, 1457, 1463, 1466, + 1469, 1482, 1493, 1500, 1510, 1515, 1526, 1531, 1544, 1549, 1561, 1571, 1576, + 1584, 1587, 1594, 1602, 1608, 1617, 1627, 1631, 1634, 1643, 1657, 1660, 1669, + 1674, 1682, 1688, 1692, 1697, 1702, 1706, 1717, 1724, 1739, 1761, 1789, 1804, + 1813, 1821, 1825, 1834, 1843, 1854, 1858, 1884, 1888, 1893, 1897, 1901, 1909, + 1913, 1917, 1924, 1933, 1954, 1960, 1966, 1991, 1996, 2002, 2014, 2025, 2035, + 2038, 2043, 2052, 2057, 2061, 2073, 2077, 2081, 2085, 2089, 2095, 2101, 2105, + 2111, 2117, 2123, 2129, 2137, 2144, 2151, 2156, 2160, 2165, 2170, 2174, 2179, + 2184, 2188, 2193, 2198, 2202, 2207, 2212, 2216, 2223, 2228, 2232, 2237, 2241, + 2246, 2250, 2255, 2259, 2264, 2268, 2275, 2279, 2284, 2288, 2294, 2296, 2301, + 2306, 2312, 2316, 2321, 2325, 2329, 2333, 2335, 2342, 2353, 2364, 2372, 2383, + 2387, 2392, 2396, 2401, 2409, 2415, 2419, 2423, 2427, 2433, 2439, 2441, 2453, + 2459, 2465, 2487, 2502, 2507, 2514, 2519, 2526, 2531, 2538, 2543, 2550, 2555, + 2563, 2568, 2572, 2579, 2585, 2592, 2599, 2606, 2614, 2621, 2629, 2633, 2637, + 2639, 2643, 2647, 2649, 2664, 2679, 2691, 2702, 2708, 2722, 2724, 2736, 2738, + 2757, 2759, 2781, 2783, 2785, 2797, 2799, 2810, 2821, 2832, 2843, 2854, 2870, + 2874, 2883, 2893, 2897, 2904, 2912, 2915, 2920, 2927, 2931, 2935 + ] + + +class Java20Parser(Parser): + grammarFileName = "Java20Parser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + sharedContextCache = PredictionContextCache() + + literalNames = ["", "'exports'", "'module'", "'non-sealed'", + "'<>'", "'open'", "'opens'", "'permits'", "'provides'", + "'record'", "'requires'", "'sealed'", "'to'", "'transitive'", + "'uses'", "'var'", "'with'", "'yield'", "'abstract'", + "'assert'", "'boolean'", "'break'", "'byte'", "'case'", + "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", + "'extends'", "'final'", "'finally'", "'float'", "'for'", + "'if'", "'goto'", "'implements'", "'import'", "'instanceof'", + "'int'", "'interface'", "'long'", "'native'", "'new'", + "'package'", "'private'", "'protected'", "'public'", + "'return'", "'short'", "'static'", "'strictfp'", "'super'", + "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "", "", "", + "", "", "", "'null'", "'('", + "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", + "'...'", "'@'", "'::'", "'='", "'>'", "'<'", "'!'", + "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", + "'*'", "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", + "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='", + "'>>='", "'>>>='"] + + symbolicNames = ["", "EXPORTS", "MODULE", "NONSEALED", "OACA", + "OPEN", "OPENS", "PERMITS", "PROVIDES", "RECORD", + "REQUIRES", "SEALED", "TO", "TRANSITIVE", "USES", + "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", + "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", + "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", + "IF", "GOTO", "IMPLEMENTS", "IMPORT", "INSTANCEOF", + "INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", + "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", + "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", + "StringLiteral", "TextBlock", "NullLiteral", "LPAREN", + "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", + "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", + "COLON", "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", + "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL", "DIV", + "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN", + "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", + "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", + "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", "LINE_COMMENT"] + + RULE_start_ = 0 + RULE_literal = 1 + RULE_typeIdentifier = 2 + RULE_unqualifiedMethodIdentifier = 3 + RULE_primitiveType = 4 + RULE_numericType = 5 + RULE_integralType = 6 + RULE_floatingPointType = 7 + RULE_referenceType = 8 + RULE_coit = 9 + RULE_classOrInterfaceType = 10 + RULE_classType = 11 + RULE_interfaceType = 12 + RULE_typeVariable = 13 + RULE_arrayType = 14 + RULE_dims = 15 + RULE_typeParameter = 16 + RULE_typeParameterModifier = 17 + RULE_typeBound = 18 + RULE_additionalBound = 19 + RULE_typeArguments = 20 + RULE_typeArgumentList = 21 + RULE_typeArgument = 22 + RULE_wildcard = 23 + RULE_wildcardBounds = 24 + RULE_moduleName = 25 + RULE_packageName = 26 + RULE_typeName = 27 + RULE_packageOrTypeName = 28 + RULE_expressionName = 29 + RULE_methodName = 30 + RULE_ambiguousName = 31 + RULE_compilationUnit = 32 + RULE_ordinaryCompilationUnit = 33 + RULE_modularCompilationUnit = 34 + RULE_packageDeclaration = 35 + RULE_packageModifier = 36 + RULE_importDeclaration = 37 + RULE_singleTypeImportDeclaration = 38 + RULE_typeImportOnDemandDeclaration = 39 + RULE_singleStaticImportDeclaration = 40 + RULE_staticImportOnDemandDeclaration = 41 + RULE_topLevelClassOrInterfaceDeclaration = 42 + RULE_moduleDeclaration = 43 + RULE_moduleDirective = 44 + RULE_requiresModifier = 45 + RULE_classDeclaration = 46 + RULE_normalClassDeclaration = 47 + RULE_classModifier = 48 + RULE_typeParameters = 49 + RULE_typeParameterList = 50 + RULE_classExtends = 51 + RULE_classImplements = 52 + RULE_interfaceTypeList = 53 + RULE_classPermits = 54 + RULE_classBody = 55 + RULE_classBodyDeclaration = 56 + RULE_classMemberDeclaration = 57 + RULE_fieldDeclaration = 58 + RULE_fieldModifier = 59 + RULE_variableDeclaratorList = 60 + RULE_variableDeclarator = 61 + RULE_variableDeclaratorId = 62 + RULE_variableInitializer = 63 + RULE_unannType = 64 + RULE_unannPrimitiveType = 65 + RULE_unannReferenceType = 66 + RULE_unannClassOrInterfaceType = 67 + RULE_uCOIT = 68 + RULE_unannClassType = 69 + RULE_unannInterfaceType = 70 + RULE_unannTypeVariable = 71 + RULE_unannArrayType = 72 + RULE_methodDeclaration = 73 + RULE_methodModifier = 74 + RULE_methodHeader = 75 + RULE_result = 76 + RULE_methodDeclarator = 77 + RULE_receiverParameter = 78 + RULE_formalParameterList = 79 + RULE_formalParameter = 80 + RULE_variableArityParameter = 81 + RULE_variableModifier = 82 + RULE_throwsT = 83 + RULE_exceptionTypeList = 84 + RULE_exceptionType = 85 + RULE_methodBody = 86 + RULE_instanceInitializer = 87 + RULE_staticInitializer = 88 + RULE_constructorDeclaration = 89 + RULE_constructorModifier = 90 + RULE_constructorDeclarator = 91 + RULE_simpleTypeName = 92 + RULE_constructorBody = 93 + RULE_explicitConstructorInvocation = 94 + RULE_enumDeclaration = 95 + RULE_enumBody = 96 + RULE_enumConstantList = 97 + RULE_enumConstant = 98 + RULE_enumConstantModifier = 99 + RULE_enumBodyDeclarations = 100 + RULE_recordDeclaration = 101 + RULE_recordHeader = 102 + RULE_recordComponentList = 103 + RULE_recordComponent = 104 + RULE_variableArityRecordComponent = 105 + RULE_recordComponentModifier = 106 + RULE_recordBody = 107 + RULE_recordBodyDeclaration = 108 + RULE_compactConstructorDeclaration = 109 + RULE_interfaceDeclaration = 110 + RULE_normalInterfaceDeclaration = 111 + RULE_interfaceModifier = 112 + RULE_interfaceExtends = 113 + RULE_interfacePermits = 114 + RULE_interfaceBody = 115 + RULE_interfaceMemberDeclaration = 116 + RULE_constantDeclaration = 117 + RULE_constantModifier = 118 + RULE_interfaceMethodDeclaration = 119 + RULE_interfaceMethodModifier = 120 + RULE_annotationInterfaceDeclaration = 121 + RULE_annotationInterfaceBody = 122 + RULE_annotationInterfaceMemberDeclaration = 123 + RULE_annotationInterfaceElementDeclaration = 124 + RULE_annotationInterfaceElementModifier = 125 + RULE_defaultValue = 126 + RULE_annotation = 127 + RULE_normalAnnotation = 128 + RULE_elementValuePairList = 129 + RULE_elementValuePair = 130 + RULE_elementValue = 131 + RULE_elementValueArrayInitializer = 132 + RULE_elementValueList = 133 + RULE_markerAnnotation = 134 + RULE_singleElementAnnotation = 135 + RULE_arrayInitializer = 136 + RULE_variableInitializerList = 137 + RULE_block = 138 + RULE_blockStatements = 139 + RULE_blockStatement = 140 + RULE_localClassOrInterfaceDeclaration = 141 + RULE_localVariableDeclaration = 142 + RULE_localVariableType = 143 + RULE_localVariableDeclarationStatement = 144 + RULE_statement = 145 + RULE_statementNoShortIf = 146 + RULE_statementWithoutTrailingSubstatement = 147 + RULE_emptyStatement_ = 148 + RULE_labeledStatement = 149 + RULE_labeledStatementNoShortIf = 150 + RULE_expressionStatement = 151 + RULE_statementExpression = 152 + RULE_ifThenStatement = 153 + RULE_ifThenElseStatement = 154 + RULE_ifThenElseStatementNoShortIf = 155 + RULE_assertStatement = 156 + RULE_switchStatement = 157 + RULE_switchBlock = 158 + RULE_switchRule = 159 + RULE_switchBlockStatementGroup = 160 + RULE_switchLabel = 161 + RULE_caseConstant = 162 + RULE_whileStatement = 163 + RULE_whileStatementNoShortIf = 164 + RULE_doStatement = 165 + RULE_forStatement = 166 + RULE_forStatementNoShortIf = 167 + RULE_basicForStatement = 168 + RULE_basicForStatementNoShortIf = 169 + RULE_forInit = 170 + RULE_forUpdate = 171 + RULE_statementExpressionList = 172 + RULE_enhancedForStatement = 173 + RULE_enhancedForStatementNoShortIf = 174 + RULE_breakStatement = 175 + RULE_continueStatement = 176 + RULE_returnStatement = 177 + RULE_throwStatement = 178 + RULE_synchronizedStatement = 179 + RULE_tryStatement = 180 + RULE_catches = 181 + RULE_catchClause = 182 + RULE_catchFormalParameter = 183 + RULE_catchType = 184 + RULE_finallyBlock = 185 + RULE_tryWithResourcesStatement = 186 + RULE_resourceSpecification = 187 + RULE_resourceList = 188 + RULE_resource = 189 + RULE_variableAccess = 190 + RULE_yieldStatement = 191 + RULE_pattern = 192 + RULE_typePattern = 193 + RULE_expression = 194 + RULE_primary = 195 + RULE_primaryNoNewArray = 196 + RULE_pNNA = 197 + RULE_classLiteral = 198 + RULE_classInstanceCreationExpression = 199 + RULE_unqualifiedClassInstanceCreationExpression = 200 + RULE_classOrInterfaceTypeToInstantiate = 201 + RULE_typeArgumentsOrDiamond = 202 + RULE_arrayCreationExpression = 203 + RULE_arrayCreationExpressionWithoutInitializer = 204 + RULE_arrayCreationExpressionWithInitializer = 205 + RULE_dimExprs = 206 + RULE_dimExpr = 207 + RULE_arrayAccess = 208 + RULE_fieldAccess = 209 + RULE_methodInvocation = 210 + RULE_argumentList = 211 + RULE_methodReference = 212 + RULE_postfixExpression = 213 + RULE_pfE = 214 + RULE_postIncrementExpression = 215 + RULE_postDecrementExpression = 216 + RULE_unaryExpression = 217 + RULE_preIncrementExpression = 218 + RULE_preDecrementExpression = 219 + RULE_unaryExpressionNotPlusMinus = 220 + RULE_castExpression = 221 + RULE_multiplicativeExpression = 222 + RULE_additiveExpression = 223 + RULE_shiftExpression = 224 + RULE_relationalExpression = 225 + RULE_equalityExpression = 226 + RULE_andExpression = 227 + RULE_exclusiveOrExpression = 228 + RULE_inclusiveOrExpression = 229 + RULE_conditionalAndExpression = 230 + RULE_conditionalOrExpression = 231 + RULE_conditionalExpression = 232 + RULE_assignmentExpression = 233 + RULE_assignment = 234 + RULE_leftHandSide = 235 + RULE_assignmentOperator = 236 + RULE_lambdaExpression = 237 + RULE_lambdaParameters = 238 + RULE_lambdaParameterList = 239 + RULE_lambdaParameter = 240 + RULE_lambdaParameterType = 241 + RULE_lambdaBody = 242 + RULE_switchExpression = 243 + RULE_constantExpression = 244 + + ruleNames = ["start_", "literal", "typeIdentifier", "unqualifiedMethodIdentifier", + "primitiveType", "numericType", "integralType", "floatingPointType", + "referenceType", "coit", "classOrInterfaceType", "classType", + "interfaceType", "typeVariable", "arrayType", "dims", + "typeParameter", "typeParameterModifier", "typeBound", + "additionalBound", "typeArguments", "typeArgumentList", + "typeArgument", "wildcard", "wildcardBounds", "moduleName", + "packageName", "typeName", "packageOrTypeName", "expressionName", + "methodName", "ambiguousName", "compilationUnit", "ordinaryCompilationUnit", + "modularCompilationUnit", "packageDeclaration", "packageModifier", + "importDeclaration", "singleTypeImportDeclaration", "typeImportOnDemandDeclaration", + "singleStaticImportDeclaration", "staticImportOnDemandDeclaration", + "topLevelClassOrInterfaceDeclaration", "moduleDeclaration", + "moduleDirective", "requiresModifier", "classDeclaration", + "normalClassDeclaration", "classModifier", "typeParameters", + "typeParameterList", "classExtends", "classImplements", + "interfaceTypeList", "classPermits", "classBody", "classBodyDeclaration", + "classMemberDeclaration", "fieldDeclaration", "fieldModifier", + "variableDeclaratorList", "variableDeclarator", "variableDeclaratorId", + "variableInitializer", "unannType", "unannPrimitiveType", + "unannReferenceType", "unannClassOrInterfaceType", "uCOIT", + "unannClassType", "unannInterfaceType", "unannTypeVariable", + "unannArrayType", "methodDeclaration", "methodModifier", + "methodHeader", "result", "methodDeclarator", "receiverParameter", + "formalParameterList", "formalParameter", "variableArityParameter", + "variableModifier", "throwsT", "exceptionTypeList", "exceptionType", + "methodBody", "instanceInitializer", "staticInitializer", + "constructorDeclaration", "constructorModifier", "constructorDeclarator", + "simpleTypeName", "constructorBody", "explicitConstructorInvocation", + "enumDeclaration", "enumBody", "enumConstantList", "enumConstant", + "enumConstantModifier", "enumBodyDeclarations", "recordDeclaration", + "recordHeader", "recordComponentList", "recordComponent", + "variableArityRecordComponent", "recordComponentModifier", + "recordBody", "recordBodyDeclaration", "compactConstructorDeclaration", + "interfaceDeclaration", "normalInterfaceDeclaration", + "interfaceModifier", "interfaceExtends", "interfacePermits", + "interfaceBody", "interfaceMemberDeclaration", "constantDeclaration", + "constantModifier", "interfaceMethodDeclaration", "interfaceMethodModifier", + "annotationInterfaceDeclaration", "annotationInterfaceBody", + "annotationInterfaceMemberDeclaration", "annotationInterfaceElementDeclaration", + "annotationInterfaceElementModifier", "defaultValue", + "annotation", "normalAnnotation", "elementValuePairList", + "elementValuePair", "elementValue", "elementValueArrayInitializer", + "elementValueList", "markerAnnotation", "singleElementAnnotation", + "arrayInitializer", "variableInitializerList", "block", + "blockStatements", "blockStatement", "localClassOrInterfaceDeclaration", + "localVariableDeclaration", "localVariableType", "localVariableDeclarationStatement", + "statement", "statementNoShortIf", "statementWithoutTrailingSubstatement", + "emptyStatement_", "labeledStatement", "labeledStatementNoShortIf", + "expressionStatement", "statementExpression", "ifThenStatement", + "ifThenElseStatement", "ifThenElseStatementNoShortIf", + "assertStatement", "switchStatement", "switchBlock", + "switchRule", "switchBlockStatementGroup", "switchLabel", + "caseConstant", "whileStatement", "whileStatementNoShortIf", + "doStatement", "forStatement", "forStatementNoShortIf", + "basicForStatement", "basicForStatementNoShortIf", "forInit", + "forUpdate", "statementExpressionList", "enhancedForStatement", + "enhancedForStatementNoShortIf", "breakStatement", "continueStatement", + "returnStatement", "throwStatement", "synchronizedStatement", + "tryStatement", "catches", "catchClause", "catchFormalParameter", + "catchType", "finallyBlock", "tryWithResourcesStatement", + "resourceSpecification", "resourceList", "resource", + "variableAccess", "yieldStatement", "pattern", "typePattern", + "expression", "primary", "primaryNoNewArray", "pNNA", + "classLiteral", "classInstanceCreationExpression", "unqualifiedClassInstanceCreationExpression", + "classOrInterfaceTypeToInstantiate", "typeArgumentsOrDiamond", + "arrayCreationExpression", "arrayCreationExpressionWithoutInitializer", + "arrayCreationExpressionWithInitializer", "dimExprs", + "dimExpr", "arrayAccess", "fieldAccess", "methodInvocation", + "argumentList", "methodReference", "postfixExpression", + "pfE", "postIncrementExpression", "postDecrementExpression", + "unaryExpression", "preIncrementExpression", "preDecrementExpression", + "unaryExpressionNotPlusMinus", "castExpression", "multiplicativeExpression", + "additiveExpression", "shiftExpression", "relationalExpression", + "equalityExpression", "andExpression", "exclusiveOrExpression", + "inclusiveOrExpression", "conditionalAndExpression", + "conditionalOrExpression", "conditionalExpression", "assignmentExpression", + "assignment", "leftHandSide", "assignmentOperator", "lambdaExpression", + "lambdaParameters", "lambdaParameterList", "lambdaParameter", + "lambdaParameterType", "lambdaBody", "switchExpression", + "constantExpression"] + + EOF = Token.EOF + EXPORTS = 1 + MODULE = 2 + NONSEALED = 3 + OACA = 4 + OPEN = 5 + OPENS = 6 + PERMITS = 7 + PROVIDES = 8 + RECORD = 9 + REQUIRES = 10 + SEALED = 11 + TO = 12 + TRANSITIVE = 13 + USES = 14 + VAR = 15 + WITH = 16 + YIELD = 17 + ABSTRACT = 18 + ASSERT = 19 + BOOLEAN = 20 + BREAK = 21 + BYTE = 22 + CASE = 23 + CATCH = 24 + CHAR = 25 + CLASS = 26 + CONST = 27 + CONTINUE = 28 + DEFAULT = 29 + DO = 30 + DOUBLE = 31 + ELSE = 32 + ENUM = 33 + EXTENDS = 34 + FINAL = 35 + FINALLY = 36 + FLOAT = 37 + FOR = 38 + IF = 39 + GOTO = 40 + IMPLEMENTS = 41 + IMPORT = 42 + INSTANCEOF = 43 + INT = 44 + INTERFACE = 45 + LONG = 46 + NATIVE = 47 + NEW = 48 + PACKAGE = 49 + PRIVATE = 50 + PROTECTED = 51 + PUBLIC = 52 + RETURN = 53 + SHORT = 54 + STATIC = 55 + STRICTFP = 56 + SUPER = 57 + SWITCH = 58 + SYNCHRONIZED = 59 + THIS = 60 + THROW = 61 + THROWS = 62 + TRANSIENT = 63 + TRY = 64 + VOID = 65 + VOLATILE = 66 + WHILE = 67 + UNDER_SCORE = 68 + IntegerLiteral = 69 + FloatingPointLiteral = 70 + BooleanLiteral = 71 + CharacterLiteral = 72 + StringLiteral = 73 + TextBlock = 74 + NullLiteral = 75 + LPAREN = 76 + RPAREN = 77 + LBRACE = 78 + RBRACE = 79 + LBRACK = 80 + RBRACK = 81 + SEMI = 82 + COMMA = 83 + DOT = 84 + ELLIPSIS = 85 + AT = 86 + COLONCOLON = 87 + ASSIGN = 88 + GT = 89 + LT = 90 + BANG = 91 + TILDE = 92 + QUESTION = 93 + COLON = 94 + ARROW = 95 + EQUAL = 96 + LE = 97 + GE = 98 + NOTEQUAL = 99 + AND = 100 + OR = 101 + INC = 102 + DEC = 103 + ADD = 104 + SUB = 105 + MUL = 106 + DIV = 107 + BITAND = 108 + BITOR = 109 + CARET = 110 + MOD = 111 + ADD_ASSIGN = 112 + SUB_ASSIGN = 113 + MUL_ASSIGN = 114 + DIV_ASSIGN = 115 + AND_ASSIGN = 116 + OR_ASSIGN = 117 + XOR_ASSIGN = 118 + MOD_ASSIGN = 119 + LSHIFT_ASSIGN = 120 + RSHIFT_ASSIGN = 121 + URSHIFT_ASSIGN = 122 + Identifier = 123 + WS = 124 + COMMENT = 125 + LINE_COMMENT = 126 + + def __init__(self, input: TokenStream, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + class Start_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def compilationUnit(self): + return self.getTypedRuleContext(Java20Parser.CompilationUnitContext, 0) + + def EOF(self): + return self.getToken(Java20Parser.EOF, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_start_ + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStart_"): + listener.enterStart_(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStart_"): + listener.exitStart_(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStart_"): + return visitor.visitStart_(self) + else: + return visitor.visitChildren(self) + + def start_(self): + + localctx = Java20Parser.Start_Context(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_start_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 490 + self.compilationUnit() + self.state = 491 + self.match(Java20Parser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IntegerLiteral(self): + return self.getToken(Java20Parser.IntegerLiteral, 0) + + def FloatingPointLiteral(self): + return self.getToken(Java20Parser.FloatingPointLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(Java20Parser.BooleanLiteral, 0) + + def CharacterLiteral(self): + return self.getToken(Java20Parser.CharacterLiteral, 0) + + def StringLiteral(self): + return self.getToken(Java20Parser.StringLiteral, 0) + + def TextBlock(self): + return self.getToken(Java20Parser.TextBlock, 0) + + def NullLiteral(self): + return self.getToken(Java20Parser.NullLiteral, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_literal + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLiteral"): + listener.enterLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLiteral"): + listener.exitLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLiteral"): + return visitor.visitLiteral(self) + else: + return visitor.visitChildren(self) + + def literal(self): + + localctx = Java20Parser.LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_literal) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 493 + _la = self._input.LA(1) + if not (((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & 127) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeIdentifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeIdentifier"): + listener.enterTypeIdentifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeIdentifier"): + listener.exitTypeIdentifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeIdentifier"): + return visitor.visitTypeIdentifier(self) + else: + return visitor.visitChildren(self) + + def typeIdentifier(self): + + localctx = Java20Parser.TypeIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_typeIdentifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 495 + self.match(Java20Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnqualifiedMethodIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unqualifiedMethodIdentifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnqualifiedMethodIdentifier"): + listener.enterUnqualifiedMethodIdentifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnqualifiedMethodIdentifier"): + listener.exitUnqualifiedMethodIdentifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnqualifiedMethodIdentifier"): + return visitor.visitUnqualifiedMethodIdentifier(self) + else: + return visitor.visitChildren(self) + + def unqualifiedMethodIdentifier(self): + + localctx = Java20Parser.UnqualifiedMethodIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_unqualifiedMethodIdentifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 497 + self.match(Java20Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext, 0) + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_primitiveType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrimitiveType"): + listener.enterPrimitiveType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrimitiveType"): + listener.exitPrimitiveType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrimitiveType"): + return visitor.visitPrimitiveType(self) + else: + return visitor.visitChildren(self) + + def primitiveType(self): + + localctx = Java20Parser.PrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_primitiveType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 502 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 499 + self.annotation() + self.state = 504 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 507 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.state = 505 + self.numericType() + pass + elif token in [20]: + self.state = 506 + self.match(Java20Parser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NumericTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def integralType(self): + return self.getTypedRuleContext(Java20Parser.IntegralTypeContext, 0) + + def floatingPointType(self): + return self.getTypedRuleContext(Java20Parser.FloatingPointTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_numericType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNumericType"): + listener.enterNumericType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNumericType"): + listener.exitNumericType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNumericType"): + return visitor.visitNumericType(self) + else: + return visitor.visitChildren(self) + + def numericType(self): + + localctx = Java20Parser.NumericTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_numericType) + try: + self.state = 511 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 509 + self.integralType() + pass + elif token in [31, 37]: + self.enterOuterAlt(localctx, 2) + self.state = 510 + self.floatingPointType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntegralTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def BYTE(self): + return self.getToken(Java20Parser.BYTE, 0) + + def SHORT(self): + return self.getToken(Java20Parser.SHORT, 0) + + def INT(self): + return self.getToken(Java20Parser.INT, 0) + + def LONG(self): + return self.getToken(Java20Parser.LONG, 0) + + def CHAR(self): + return self.getToken(Java20Parser.CHAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_integralType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntegralType"): + listener.enterIntegralType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntegralType"): + listener.exitIntegralType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntegralType"): + return visitor.visitIntegralType(self) + else: + return visitor.visitChildren(self) + + def integralType(self): + + localctx = Java20Parser.IntegralTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_integralType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 513 + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 18102359477452800) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FloatingPointTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FLOAT(self): + return self.getToken(Java20Parser.FLOAT, 0) + + def DOUBLE(self): + return self.getToken(Java20Parser.DOUBLE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_floatingPointType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFloatingPointType"): + listener.enterFloatingPointType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFloatingPointType"): + listener.exitFloatingPointType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFloatingPointType"): + return visitor.visitFloatingPointType(self) + else: + return visitor.visitChildren(self) + + def floatingPointType(self): + + localctx = Java20Parser.FloatingPointTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_floatingPointType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 515 + _la = self._input.LA(1) + if not (_la == 31 or _la == 37): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext, 0) + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext, 0) + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_referenceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReferenceType"): + listener.enterReferenceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReferenceType"): + listener.exitReferenceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReferenceType"): + return visitor.visitReferenceType(self) + else: + return visitor.visitChildren(self) + + def referenceType(self): + + localctx = Java20Parser.ReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_referenceType) + try: + self.state = 520 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 3, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 517 + self.classOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 518 + self.typeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 519 + self.arrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CoitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def coit(self): + return self.getTypedRuleContext(Java20Parser.CoitContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_coit + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCoit"): + listener.enterCoit(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCoit"): + listener.exitCoit(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCoit"): + return visitor.visitCoit(self) + else: + return visitor.visitChildren(self) + + def coit(self): + + localctx = Java20Parser.CoitContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_coit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 522 + self.match(Java20Parser.DOT) + self.state = 526 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 523 + self.annotation() + self.state = 528 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 529 + self.typeIdentifier() + self.state = 531 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 5, self._ctx) + if la_ == 1: + self.state = 530 + self.typeArguments() + + self.state = 534 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 6, self._ctx) + if la_ == 1: + self.state = 533 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def coit(self): + return self.getTypedRuleContext(Java20Parser.CoitContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classOrInterfaceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassOrInterfaceType"): + listener.enterClassOrInterfaceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassOrInterfaceType"): + listener.exitClassOrInterfaceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassOrInterfaceType"): + return visitor.visitClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + def classOrInterfaceType(self): + + localctx = Java20Parser.ClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_classOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 539 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 7, self._ctx) + if la_ == 1: + self.state = 536 + self.packageName() + self.state = 537 + self.match(Java20Parser.DOT) + + self.state = 544 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 541 + self.annotation() + self.state = 546 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 547 + self.typeIdentifier() + self.state = 549 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 9, self._ctx) + if la_ == 1: + self.state = 548 + self.typeArguments() + + self.state = 552 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 10, self._ctx) + if la_ == 1: + self.state = 551 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassType"): + listener.enterClassType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassType"): + listener.exitClassType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassType"): + return visitor.visitClassType(self) + else: + return visitor.visitChildren(self) + + def classType(self): + + localctx = Java20Parser.ClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_classType) + self._la = 0 # Token type + try: + self.state = 588 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 17, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 557 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 554 + self.annotation() + self.state = 559 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 560 + self.typeIdentifier() + self.state = 562 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 561 + self.typeArguments() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 564 + self.packageName() + self.state = 565 + self.match(Java20Parser.DOT) + self.state = 569 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 566 + self.annotation() + self.state = 571 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 572 + self.typeIdentifier() + self.state = 574 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 573 + self.typeArguments() + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 576 + self.classOrInterfaceType() + self.state = 577 + self.match(Java20Parser.DOT) + self.state = 581 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 578 + self.annotation() + self.state = 583 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 584 + self.typeIdentifier() + self.state = 586 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 585 + self.typeArguments() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceType"): + listener.enterInterfaceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceType"): + listener.exitInterfaceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceType"): + return visitor.visitInterfaceType(self) + else: + return visitor.visitChildren(self) + + def interfaceType(self): + + localctx = Java20Parser.InterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_interfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 590 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeVariable + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeVariable"): + listener.enterTypeVariable(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeVariable"): + listener.exitTypeVariable(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeVariable"): + return visitor.visitTypeVariable(self) + else: + return visitor.visitChildren(self) + + def typeVariable(self): + + localctx = Java20Parser.TypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_typeVariable) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 595 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 592 + self.annotation() + self.state = 597 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 598 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext, 0) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayType"): + listener.enterArrayType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayType"): + listener.exitArrayType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayType"): + return visitor.visitArrayType(self) + else: + return visitor.visitChildren(self) + + def arrayType(self): + + localctx = Java20Parser.ArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_arrayType) + try: + self.state = 609 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 19, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 600 + self.primitiveType() + self.state = 601 + self.dims() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 603 + self.classType() + self.state = 604 + self.dims() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 606 + self.typeVariable() + self.state = 607 + self.dims() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DimsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.LBRACK) + else: + return self.getToken(Java20Parser.LBRACK, i) + + def RBRACK(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.RBRACK) + else: + return self.getToken(Java20Parser.RBRACK, i) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_dims + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDims"): + listener.enterDims(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDims"): + listener.exitDims(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDims"): + return visitor.visitDims(self) + else: + return visitor.visitChildren(self) + + def dims(self): + + localctx = Java20Parser.DimsContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_dims) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 614 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 611 + self.annotation() + self.state = 616 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 617 + self.match(Java20Parser.LBRACK) + self.state = 618 + self.match(Java20Parser.RBRACK) + self.state = 629 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 22, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 622 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 619 + self.annotation() + self.state = 624 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 625 + self.match(Java20Parser.LBRACK) + self.state = 626 + self.match(Java20Parser.RBRACK) + self.state = 631 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 22, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def typeParameterModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeParameterModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeParameterModifierContext, i) + + def typeBound(self): + return self.getTypedRuleContext(Java20Parser.TypeBoundContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeParameter"): + listener.enterTypeParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeParameter"): + listener.exitTypeParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeParameter"): + return visitor.visitTypeParameter(self) + else: + return visitor.visitChildren(self) + + def typeParameter(self): + + localctx = Java20Parser.TypeParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_typeParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 635 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 632 + self.typeParameterModifier() + self.state = 637 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 638 + self.typeIdentifier() + self.state = 640 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 34: + self.state = 639 + self.typeBound() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeParameterModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameterModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeParameterModifier"): + listener.enterTypeParameterModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeParameterModifier"): + listener.exitTypeParameterModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeParameterModifier"): + return visitor.visitTypeParameterModifier(self) + else: + return visitor.visitChildren(self) + + def typeParameterModifier(self): + + localctx = Java20Parser.TypeParameterModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_typeParameterModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 642 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext, 0) + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext, 0) + + def additionalBound(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(Java20Parser.AdditionalBoundContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeBound + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeBound"): + listener.enterTypeBound(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeBound"): + listener.exitTypeBound(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeBound"): + return visitor.visitTypeBound(self) + else: + return visitor.visitChildren(self) + + def typeBound(self): + + localctx = Java20Parser.TypeBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_typeBound) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 644 + self.match(Java20Parser.EXTENDS) + self.state = 653 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 26, self._ctx) + if la_ == 1: + self.state = 645 + self.typeVariable() + pass + + elif la_ == 2: + self.state = 646 + self.classOrInterfaceType() + self.state = 650 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 108: + self.state = 647 + self.additionalBound() + self.state = 652 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AdditionalBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def BITAND(self): + return self.getToken(Java20Parser.BITAND, 0) + + def interfaceType(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_additionalBound + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAdditionalBound"): + listener.enterAdditionalBound(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAdditionalBound"): + listener.exitAdditionalBound(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAdditionalBound"): + return visitor.visitAdditionalBound(self) + else: + return visitor.visitChildren(self) + + def additionalBound(self): + + localctx = Java20Parser.AdditionalBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_additionalBound) + try: + self.enterOuterAlt(localctx, 1) + self.state = 655 + self.match(Java20Parser.BITAND) + self.state = 656 + self.interfaceType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeArgumentsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def typeArgumentList(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentListContext, 0) + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArguments + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeArguments"): + listener.enterTypeArguments(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeArguments"): + listener.exitTypeArguments(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeArguments"): + return visitor.visitTypeArguments(self) + else: + return visitor.visitChildren(self) + + def typeArguments(self): + + localctx = Java20Parser.TypeArgumentsContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_typeArguments) + try: + self.enterOuterAlt(localctx, 1) + self.state = 658 + self.match(Java20Parser.LT) + self.state = 659 + self.typeArgumentList() + self.state = 660 + self.match(Java20Parser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArgument(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeArgumentContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeArgumentContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgumentList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeArgumentList"): + listener.enterTypeArgumentList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeArgumentList"): + listener.exitTypeArgumentList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeArgumentList"): + return visitor.visitTypeArgumentList(self) + else: + return visitor.visitChildren(self) + + def typeArgumentList(self): + + localctx = Java20Parser.TypeArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_typeArgumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 662 + self.typeArgument() + self.state = 667 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 663 + self.match(Java20Parser.COMMA) + self.state = 664 + self.typeArgument() + self.state = 669 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def wildcard(self): + return self.getTypedRuleContext(Java20Parser.WildcardContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgument + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeArgument"): + listener.enterTypeArgument(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeArgument"): + listener.exitTypeArgument(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeArgument"): + return visitor.visitTypeArgument(self) + else: + return visitor.visitChildren(self) + + def typeArgument(self): + + localctx = Java20Parser.TypeArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_typeArgument) + try: + self.state = 672 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 28, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 670 + self.referenceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 671 + self.wildcard() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WildcardContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def QUESTION(self): + return self.getToken(Java20Parser.QUESTION, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def wildcardBounds(self): + return self.getTypedRuleContext(Java20Parser.WildcardBoundsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_wildcard + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWildcard"): + listener.enterWildcard(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWildcard"): + listener.exitWildcard(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWildcard"): + return visitor.visitWildcard(self) + else: + return visitor.visitChildren(self) + + def wildcard(self): + + localctx = Java20Parser.WildcardContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_wildcard) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 677 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 674 + self.annotation() + self.state = 679 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 680 + self.match(Java20Parser.QUESTION) + self.state = 682 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 34 or _la == 57: + self.state = 681 + self.wildcardBounds() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WildcardBoundsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_wildcardBounds + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWildcardBounds"): + listener.enterWildcardBounds(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWildcardBounds"): + listener.exitWildcardBounds(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWildcardBounds"): + return visitor.visitWildcardBounds(self) + else: + return visitor.visitChildren(self) + + def wildcardBounds(self): + + localctx = Java20Parser.WildcardBoundsContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_wildcardBounds) + try: + self.state = 688 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [34]: + self.enterOuterAlt(localctx, 1) + self.state = 684 + self.match(Java20Parser.EXTENDS) + self.state = 685 + self.referenceType() + pass + elif token in [57]: + self.enterOuterAlt(localctx, 2) + self.state = 686 + self.match(Java20Parser.SUPER) + self.state = 687 + self.referenceType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModuleNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def moduleName(self): + return self.getTypedRuleContext(Java20Parser.ModuleNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_moduleName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModuleName"): + listener.enterModuleName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModuleName"): + listener.exitModuleName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModuleName"): + return visitor.visitModuleName(self) + else: + return visitor.visitChildren(self) + + def moduleName(self): + + localctx = Java20Parser.ModuleNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_moduleName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 690 + self.match(Java20Parser.Identifier) + self.state = 693 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 84: + self.state = 691 + self.match(Java20Parser.DOT) + self.state = 692 + self.moduleName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PackageNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_packageName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPackageName"): + listener.enterPackageName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPackageName"): + listener.exitPackageName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPackageName"): + return visitor.visitPackageName(self) + else: + return visitor.visitChildren(self) + + def packageName(self): + + localctx = Java20Parser.PackageNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_packageName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 695 + self.match(Java20Parser.Identifier) + self.state = 698 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 33, self._ctx) + if la_ == 1: + self.state = 696 + self.match(Java20Parser.DOT) + self.state = 697 + self.packageName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeName"): + listener.enterTypeName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeName"): + listener.exitTypeName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeName"): + return visitor.visitTypeName(self) + else: + return visitor.visitChildren(self) + + def typeName(self): + + localctx = Java20Parser.TypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_typeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 700 + self.packageName() + self.state = 703 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 34, self._ctx) + if la_ == 1: + self.state = 701 + self.match(Java20Parser.DOT) + self.state = 702 + self.typeIdentifier() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PackageOrTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(Java20Parser.PackageOrTypeNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_packageOrTypeName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPackageOrTypeName"): + listener.enterPackageOrTypeName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPackageOrTypeName"): + listener.exitPackageOrTypeName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPackageOrTypeName"): + return visitor.visitPackageOrTypeName(self) + else: + return visitor.visitChildren(self) + + def packageOrTypeName(self): + + localctx = Java20Parser.PackageOrTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_packageOrTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 705 + self.match(Java20Parser.Identifier) + self.state = 708 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 35, self._ctx) + if la_ == 1: + self.state = 706 + self.match(Java20Parser.DOT) + self.state = 707 + self.packageOrTypeName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExpressionNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def ambiguousName(self): + return self.getTypedRuleContext(Java20Parser.AmbiguousNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_expressionName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpressionName"): + listener.enterExpressionName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpressionName"): + listener.exitExpressionName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpressionName"): + return visitor.visitExpressionName(self) + else: + return visitor.visitChildren(self) + + def expressionName(self): + + localctx = Java20Parser.ExpressionNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_expressionName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 713 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 36, self._ctx) + if la_ == 1: + self.state = 710 + self.ambiguousName() + self.state = 711 + self.match(Java20Parser.DOT) + + self.state = 715 + self.match(Java20Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedMethodIdentifier(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedMethodIdentifierContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodName"): + listener.enterMethodName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodName"): + listener.exitMethodName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodName"): + return visitor.visitMethodName(self) + else: + return visitor.visitChildren(self) + + def methodName(self): + + localctx = Java20Parser.MethodNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_methodName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 717 + self.unqualifiedMethodIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AmbiguousNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def ambiguousName(self): + return self.getTypedRuleContext(Java20Parser.AmbiguousNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_ambiguousName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAmbiguousName"): + listener.enterAmbiguousName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAmbiguousName"): + listener.exitAmbiguousName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAmbiguousName"): + return visitor.visitAmbiguousName(self) + else: + return visitor.visitChildren(self) + + def ambiguousName(self): + + localctx = Java20Parser.AmbiguousNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_ambiguousName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 719 + self.match(Java20Parser.Identifier) + self.state = 722 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 37, self._ctx) + if la_ == 1: + self.state = 720 + self.match(Java20Parser.DOT) + self.state = 721 + self.ambiguousName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ordinaryCompilationUnit(self): + return self.getTypedRuleContext(Java20Parser.OrdinaryCompilationUnitContext, 0) + + def modularCompilationUnit(self): + return self.getTypedRuleContext(Java20Parser.ModularCompilationUnitContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_compilationUnit + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCompilationUnit"): + listener.enterCompilationUnit(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCompilationUnit"): + listener.exitCompilationUnit(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCompilationUnit"): + return visitor.visitCompilationUnit(self) + else: + return visitor.visitChildren(self) + + def compilationUnit(self): + + localctx = Java20Parser.CompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_compilationUnit) + try: + self.state = 726 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 38, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 724 + self.ordinaryCompilationUnit() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 725 + self.modularCompilationUnit() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class OrdinaryCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageDeclaration(self): + return self.getTypedRuleContext(Java20Parser.PackageDeclarationContext, 0) + + def importDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ImportDeclarationContext, i) + + def topLevelClassOrInterfaceDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TopLevelClassOrInterfaceDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.TopLevelClassOrInterfaceDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_ordinaryCompilationUnit + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOrdinaryCompilationUnit"): + listener.enterOrdinaryCompilationUnit(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOrdinaryCompilationUnit"): + listener.exitOrdinaryCompilationUnit(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOrdinaryCompilationUnit"): + return visitor.visitOrdinaryCompilationUnit(self) + else: + return visitor.visitChildren(self) + + def ordinaryCompilationUnit(self): + + localctx = Java20Parser.OrdinaryCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_ordinaryCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 729 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 39, self._ctx) + if la_ == 1: + self.state = 728 + self.packageDeclaration() + + self.state = 734 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 42: + self.state = 731 + self.importDeclaration() + self.state = 736 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 740 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 116002917793925640) != 0) or _la == 82 or _la == 86: + self.state = 737 + self.topLevelClassOrInterfaceDeclaration() + self.state = 742 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModularCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ModuleDeclarationContext, 0) + + def importDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ImportDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_modularCompilationUnit + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModularCompilationUnit"): + listener.enterModularCompilationUnit(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModularCompilationUnit"): + listener.exitModularCompilationUnit(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModularCompilationUnit"): + return visitor.visitModularCompilationUnit(self) + else: + return visitor.visitChildren(self) + + def modularCompilationUnit(self): + + localctx = Java20Parser.ModularCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_modularCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 746 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 42: + self.state = 743 + self.importDeclaration() + self.state = 748 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 749 + self.moduleDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PackageDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def PACKAGE(self): + return self.getToken(Java20Parser.PACKAGE, 0) + + def Identifier(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.Identifier) + else: + return self.getToken(Java20Parser.Identifier, i) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def packageModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.PackageModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.PackageModifierContext, i) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def getRuleIndex(self): + return Java20Parser.RULE_packageDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPackageDeclaration"): + listener.enterPackageDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPackageDeclaration"): + listener.exitPackageDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPackageDeclaration"): + return visitor.visitPackageDeclaration(self) + else: + return visitor.visitChildren(self) + + def packageDeclaration(self): + + localctx = Java20Parser.PackageDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_packageDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 754 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 751 + self.packageModifier() + self.state = 756 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 757 + self.match(Java20Parser.PACKAGE) + self.state = 758 + self.match(Java20Parser.Identifier) + self.state = 763 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 84: + self.state = 759 + self.match(Java20Parser.DOT) + self.state = 760 + self.match(Java20Parser.Identifier) + self.state = 765 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 766 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PackageModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_packageModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPackageModifier"): + listener.enterPackageModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPackageModifier"): + listener.exitPackageModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPackageModifier"): + return visitor.visitPackageModifier(self) + else: + return visitor.visitChildren(self) + + def packageModifier(self): + + localctx = Java20Parser.PackageModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_packageModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 768 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleTypeImportDeclaration(self): + return self.getTypedRuleContext(Java20Parser.SingleTypeImportDeclarationContext, 0) + + def typeImportOnDemandDeclaration(self): + return self.getTypedRuleContext(Java20Parser.TypeImportOnDemandDeclarationContext, 0) + + def singleStaticImportDeclaration(self): + return self.getTypedRuleContext(Java20Parser.SingleStaticImportDeclarationContext, 0) + + def staticImportOnDemandDeclaration(self): + return self.getTypedRuleContext(Java20Parser.StaticImportOnDemandDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_importDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImportDeclaration"): + listener.enterImportDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImportDeclaration"): + listener.exitImportDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImportDeclaration"): + return visitor.visitImportDeclaration(self) + else: + return visitor.visitChildren(self) + + def importDeclaration(self): + + localctx = Java20Parser.ImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_importDeclaration) + try: + self.state = 774 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 45, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 770 + self.singleTypeImportDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 771 + self.typeImportOnDemandDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 772 + self.singleStaticImportDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 773 + self.staticImportOnDemandDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SingleTypeImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleTypeImportDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSingleTypeImportDeclaration"): + listener.enterSingleTypeImportDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSingleTypeImportDeclaration"): + listener.exitSingleTypeImportDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSingleTypeImportDeclaration"): + return visitor.visitSingleTypeImportDeclaration(self) + else: + return visitor.visitChildren(self) + + def singleTypeImportDeclaration(self): + + localctx = Java20Parser.SingleTypeImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_singleTypeImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 776 + self.match(Java20Parser.IMPORT) + self.state = 777 + self.typeName() + self.state = 778 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(Java20Parser.PackageOrTypeNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeImportOnDemandDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeImportOnDemandDeclaration"): + listener.enterTypeImportOnDemandDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeImportOnDemandDeclaration"): + listener.exitTypeImportOnDemandDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeImportOnDemandDeclaration"): + return visitor.visitTypeImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + def typeImportOnDemandDeclaration(self): + + localctx = Java20Parser.TypeImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_typeImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 780 + self.match(Java20Parser.IMPORT) + self.state = 781 + self.packageOrTypeName() + self.state = 782 + self.match(Java20Parser.DOT) + self.state = 783 + self.match(Java20Parser.MUL) + self.state = 784 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SingleStaticImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleStaticImportDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSingleStaticImportDeclaration"): + listener.enterSingleStaticImportDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSingleStaticImportDeclaration"): + listener.exitSingleStaticImportDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSingleStaticImportDeclaration"): + return visitor.visitSingleStaticImportDeclaration(self) + else: + return visitor.visitChildren(self) + + def singleStaticImportDeclaration(self): + + localctx = Java20Parser.SingleStaticImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_singleStaticImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 786 + self.match(Java20Parser.IMPORT) + self.state = 787 + self.match(Java20Parser.STATIC) + self.state = 788 + self.typeName() + self.state = 789 + self.match(Java20Parser.DOT) + self.state = 790 + self.match(Java20Parser.Identifier) + self.state = 791 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StaticImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_staticImportOnDemandDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStaticImportOnDemandDeclaration"): + listener.enterStaticImportOnDemandDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStaticImportOnDemandDeclaration"): + listener.exitStaticImportOnDemandDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStaticImportOnDemandDeclaration"): + return visitor.visitStaticImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + def staticImportOnDemandDeclaration(self): + + localctx = Java20Parser.StaticImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_staticImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 793 + self.match(Java20Parser.IMPORT) + self.state = 794 + self.match(Java20Parser.STATIC) + self.state = 795 + self.typeName() + self.state = 796 + self.match(Java20Parser.DOT) + self.state = 797 + self.match(Java20Parser.MUL) + self.state = 798 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TopLevelClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext, 0) + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_topLevelClassOrInterfaceDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTopLevelClassOrInterfaceDeclaration"): + listener.enterTopLevelClassOrInterfaceDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTopLevelClassOrInterfaceDeclaration"): + listener.exitTopLevelClassOrInterfaceDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTopLevelClassOrInterfaceDeclaration"): + return visitor.visitTopLevelClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + def topLevelClassOrInterfaceDeclaration(self): + + localctx = Java20Parser.TopLevelClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_topLevelClassOrInterfaceDeclaration) + try: + self.state = 803 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 46, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 800 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 801 + self.interfaceDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 802 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModuleDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def MODULE(self): + return self.getToken(Java20Parser.MODULE, 0) + + def Identifier(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.Identifier) + else: + return self.getToken(Java20Parser.Identifier, i) + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def OPEN(self): + return self.getToken(Java20Parser.OPEN, 0) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def moduleDirective(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ModuleDirectiveContext) + else: + return self.getTypedRuleContext(Java20Parser.ModuleDirectiveContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_moduleDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModuleDeclaration"): + listener.enterModuleDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModuleDeclaration"): + listener.exitModuleDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModuleDeclaration"): + return visitor.visitModuleDeclaration(self) + else: + return visitor.visitChildren(self) + + def moduleDeclaration(self): + + localctx = Java20Parser.ModuleDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_moduleDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 808 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 805 + self.annotation() + self.state = 810 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 812 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 5: + self.state = 811 + self.match(Java20Parser.OPEN) + + self.state = 814 + self.match(Java20Parser.MODULE) + self.state = 815 + self.match(Java20Parser.Identifier) + self.state = 820 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 84: + self.state = 816 + self.match(Java20Parser.DOT) + self.state = 817 + self.match(Java20Parser.Identifier) + self.state = 822 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 823 + self.match(Java20Parser.LBRACE) + self.state = 827 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 17730) != 0): + self.state = 824 + self.moduleDirective() + self.state = 829 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 830 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ModuleDirectiveContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def REQUIRES(self): + return self.getToken(Java20Parser.REQUIRES, 0) + + def moduleName(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ModuleNameContext) + else: + return self.getTypedRuleContext(Java20Parser.ModuleNameContext, i) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def requiresModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RequiresModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RequiresModifierContext, i) + + def EXPORTS(self): + return self.getToken(Java20Parser.EXPORTS, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def TO(self): + return self.getToken(Java20Parser.TO, 0) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def OPENS(self): + return self.getToken(Java20Parser.OPENS, 0) + + def USES(self): + return self.getToken(Java20Parser.USES, 0) + + def typeName(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext, i) + + def PROVIDES(self): + return self.getToken(Java20Parser.PROVIDES, 0) + + def WITH(self): + return self.getToken(Java20Parser.WITH, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_moduleDirective + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterModuleDirective"): + listener.enterModuleDirective(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitModuleDirective"): + listener.exitModuleDirective(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitModuleDirective"): + return visitor.visitModuleDirective(self) + else: + return visitor.visitChildren(self) + + def moduleDirective(self): + + localctx = Java20Parser.ModuleDirectiveContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_moduleDirective) + self._la = 0 # Token type + try: + self.state = 889 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [10]: + self.enterOuterAlt(localctx, 1) + self.state = 832 + self.match(Java20Parser.REQUIRES) + self.state = 836 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 13 or _la == 55: + self.state = 833 + self.requiresModifier() + self.state = 838 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 839 + self.moduleName() + self.state = 840 + self.match(Java20Parser.SEMI) + pass + elif token in [1]: + self.enterOuterAlt(localctx, 2) + self.state = 842 + self.match(Java20Parser.EXPORTS) + self.state = 843 + self.packageName() + self.state = 853 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 12: + self.state = 844 + self.match(Java20Parser.TO) + self.state = 845 + self.moduleName() + self.state = 850 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 846 + self.match(Java20Parser.COMMA) + self.state = 847 + self.moduleName() + self.state = 852 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 855 + self.match(Java20Parser.SEMI) + pass + elif token in [6]: + self.enterOuterAlt(localctx, 3) + self.state = 857 + self.match(Java20Parser.OPENS) + self.state = 858 + self.packageName() + self.state = 868 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 12: + self.state = 859 + self.match(Java20Parser.TO) + self.state = 860 + self.moduleName() + self.state = 865 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 861 + self.match(Java20Parser.COMMA) + self.state = 862 + self.moduleName() + self.state = 867 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 870 + self.match(Java20Parser.SEMI) + pass + elif token in [14]: + self.enterOuterAlt(localctx, 4) + self.state = 872 + self.match(Java20Parser.USES) + self.state = 873 + self.typeName() + self.state = 874 + self.match(Java20Parser.SEMI) + pass + elif token in [8]: + self.enterOuterAlt(localctx, 5) + self.state = 876 + self.match(Java20Parser.PROVIDES) + self.state = 877 + self.typeName() + self.state = 878 + self.match(Java20Parser.WITH) + self.state = 879 + self.typeName() + self.state = 884 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 880 + self.match(Java20Parser.COMMA) + self.state = 881 + self.typeName() + self.state = 886 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 887 + self.match(Java20Parser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RequiresModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRANSITIVE(self): + return self.getToken(Java20Parser.TRANSITIVE, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_requiresModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRequiresModifier"): + listener.enterRequiresModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRequiresModifier"): + listener.exitRequiresModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRequiresModifier"): + return visitor.visitRequiresModifier(self) + else: + return visitor.visitChildren(self) + + def requiresModifier(self): + + localctx = Java20Parser.RequiresModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_requiresModifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 891 + _la = self._input.LA(1) + if not (_la == 13 or _la == 55): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalClassDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalClassDeclarationContext, 0) + + def enumDeclaration(self): + return self.getTypedRuleContext(Java20Parser.EnumDeclarationContext, 0) + + def recordDeclaration(self): + return self.getTypedRuleContext(Java20Parser.RecordDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassDeclaration"): + listener.enterClassDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassDeclaration"): + listener.exitClassDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassDeclaration"): + return visitor.visitClassDeclaration(self) + else: + return visitor.visitChildren(self) + + def classDeclaration(self): + + localctx = Java20Parser.ClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_classDeclaration) + try: + self.state = 896 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 58, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 893 + self.normalClassDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 894 + self.enumDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 895 + self.recordDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NormalClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CLASS(self): + return self.getToken(Java20Parser.CLASS, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext, 0) + + def classModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext, i) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext, 0) + + def classExtends(self): + return self.getTypedRuleContext(Java20Parser.ClassExtendsContext, 0) + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext, 0) + + def classPermits(self): + return self.getTypedRuleContext(Java20Parser.ClassPermitsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_normalClassDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNormalClassDeclaration"): + listener.enterNormalClassDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNormalClassDeclaration"): + listener.exitNormalClassDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNormalClassDeclaration"): + return visitor.visitNormalClassDeclaration(self) + else: + return visitor.visitChildren(self) + + def normalClassDeclaration(self): + + localctx = Java20Parser.NormalClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_normalClassDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 901 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la == 86: + self.state = 898 + self.classModifier() + self.state = 903 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 904 + self.match(Java20Parser.CLASS) + self.state = 905 + self.typeIdentifier() + self.state = 907 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 906 + self.typeParameters() + + self.state = 910 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 34: + self.state = 909 + self.classExtends() + + self.state = 913 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 41: + self.state = 912 + self.classImplements() + + self.state = 916 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 915 + self.classPermits() + + self.state = 918 + self.classBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassModifier"): + listener.enterClassModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassModifier"): + listener.exitClassModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassModifier"): + return visitor.visitClassModifier(self) + else: + return visitor.visitChildren(self) + + def classModifier(self): + + localctx = Java20Parser.ClassModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_classModifier) + try: + self.state = 930 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 920 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 921 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 922 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 923 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 924 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 925 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 926 + self.match(Java20Parser.FINAL) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 8) + self.state = 927 + self.match(Java20Parser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 9) + self.state = 928 + self.match(Java20Parser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 929 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def typeParameterList(self): + return self.getTypedRuleContext(Java20Parser.TypeParameterListContext, 0) + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameters + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeParameters"): + listener.enterTypeParameters(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeParameters"): + listener.exitTypeParameters(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeParameters"): + return visitor.visitTypeParameters(self) + else: + return visitor.visitChildren(self) + + def typeParameters(self): + + localctx = Java20Parser.TypeParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_typeParameters) + try: + self.enterOuterAlt(localctx, 1) + self.state = 932 + self.match(Java20Parser.LT) + self.state = 933 + self.typeParameterList() + self.state = 934 + self.match(Java20Parser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeParameter(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeParameterContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameterList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeParameterList"): + listener.enterTypeParameterList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeParameterList"): + listener.exitTypeParameterList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeParameterList"): + return visitor.visitTypeParameterList(self) + else: + return visitor.visitChildren(self) + + def typeParameterList(self): + + localctx = Java20Parser.TypeParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_typeParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 936 + self.typeParameter() + self.state = 941 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 937 + self.match(Java20Parser.COMMA) + self.state = 938 + self.typeParameter() + self.state = 943 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classExtends + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassExtends"): + listener.enterClassExtends(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassExtends"): + listener.exitClassExtends(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassExtends"): + return visitor.visitClassExtends(self) + else: + return visitor.visitChildren(self) + + def classExtends(self): + + localctx = Java20Parser.ClassExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_classExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 944 + self.match(Java20Parser.EXTENDS) + self.state = 945 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassImplementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPLEMENTS(self): + return self.getToken(Java20Parser.IMPLEMENTS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classImplements + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassImplements"): + listener.enterClassImplements(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassImplements"): + listener.exitClassImplements(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassImplements"): + return visitor.visitClassImplements(self) + else: + return visitor.visitChildren(self) + + def classImplements(self): + + localctx = Java20Parser.ClassImplementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_classImplements) + try: + self.enterOuterAlt(localctx, 1) + self.state = 947 + self.match(Java20Parser.IMPLEMENTS) + self.state = 948 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def interfaceType(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceTypeContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceTypeList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceTypeList"): + listener.enterInterfaceTypeList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceTypeList"): + listener.exitInterfaceTypeList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceTypeList"): + return visitor.visitInterfaceTypeList(self) + else: + return visitor.visitChildren(self) + + def interfaceTypeList(self): + + localctx = Java20Parser.InterfaceTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_interfaceTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 950 + self.interfaceType() + self.state = 955 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 951 + self.match(Java20Parser.COMMA) + self.state = 952 + self.interfaceType() + self.state = 957 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassPermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def typeName(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_classPermits + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassPermits"): + listener.enterClassPermits(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassPermits"): + listener.exitClassPermits(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassPermits"): + return visitor.visitClassPermits(self) + else: + return visitor.visitChildren(self) + + def classPermits(self): + + localctx = Java20Parser.ClassPermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_classPermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 958 + self.match(Java20Parser.PERMITS) + self.state = 959 + self.typeName() + self.state = 964 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 960 + self.match(Java20Parser.COMMA) + self.state = 961 + self.typeName() + self.state = 966 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def classBodyDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_classBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassBody"): + listener.enterClassBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassBody"): + listener.exitClassBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassBody"): + return visitor.visitClassBody(self) + else: + return visitor.visitChildren(self) + + def classBody(self): + + localctx = Java20Parser.ClassBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_classBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 967 + self.match(Java20Parser.LBRACE) + self.state = 971 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 968 + self.classBodyDeclaration() + self.state = 973 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 974 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classMemberDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassMemberDeclarationContext, 0) + + def instanceInitializer(self): + return self.getTypedRuleContext(Java20Parser.InstanceInitializerContext, 0) + + def staticInitializer(self): + return self.getTypedRuleContext(Java20Parser.StaticInitializerContext, 0) + + def constructorDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstructorDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classBodyDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassBodyDeclaration"): + listener.enterClassBodyDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassBodyDeclaration"): + listener.exitClassBodyDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassBodyDeclaration"): + return visitor.visitClassBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + def classBodyDeclaration(self): + + localctx = Java20Parser.ClassBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_classBodyDeclaration) + try: + self.state = 980 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 69, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 976 + self.classMemberDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 977 + self.instanceInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 978 + self.staticInitializer() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 979 + self.constructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def fieldDeclaration(self): + return self.getTypedRuleContext(Java20Parser.FieldDeclarationContext, 0) + + def methodDeclaration(self): + return self.getTypedRuleContext(Java20Parser.MethodDeclarationContext, 0) + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext, 0) + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classMemberDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassMemberDeclaration"): + listener.enterClassMemberDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassMemberDeclaration"): + listener.exitClassMemberDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassMemberDeclaration"): + return visitor.visitClassMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + def classMemberDeclaration(self): + + localctx = Java20Parser.ClassMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_classMemberDeclaration) + try: + self.state = 987 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 70, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 982 + self.fieldDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 983 + self.methodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 984 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 985 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 986 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FieldDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def fieldModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.FieldModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.FieldModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_fieldDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFieldDeclaration"): + listener.enterFieldDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFieldDeclaration"): + listener.exitFieldDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFieldDeclaration"): + return visitor.visitFieldDeclaration(self) + else: + return visitor.visitChildren(self) + + def fieldDeclaration(self): + + localctx = Java20Parser.FieldDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_fieldDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 992 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251802230882305) != 0): + self.state = 989 + self.fieldModifier() + self.state = 994 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 995 + self.unannType() + self.state = 996 + self.variableDeclaratorList() + self.state = 997 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FieldModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def TRANSIENT(self): + return self.getToken(Java20Parser.TRANSIENT, 0) + + def VOLATILE(self): + return self.getToken(Java20Parser.VOLATILE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_fieldModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFieldModifier"): + listener.enterFieldModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFieldModifier"): + listener.exitFieldModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFieldModifier"): + return visitor.visitFieldModifier(self) + else: + return visitor.visitChildren(self) + + def fieldModifier(self): + + localctx = Java20Parser.FieldModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_fieldModifier) + try: + self.state = 1007 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 999 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1000 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1001 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1002 + self.match(Java20Parser.PRIVATE) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 5) + self.state = 1003 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 6) + self.state = 1004 + self.match(Java20Parser.FINAL) + pass + elif token in [63]: + self.enterOuterAlt(localctx, 7) + self.state = 1005 + self.match(Java20Parser.TRANSIENT) + pass + elif token in [66]: + self.enterOuterAlt(localctx, 8) + self.state = 1006 + self.match(Java20Parser.VOLATILE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableDeclaratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclarator(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableDeclaratorContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclaratorList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclaratorList"): + listener.enterVariableDeclaratorList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclaratorList"): + listener.exitVariableDeclaratorList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclaratorList"): + return visitor.visitVariableDeclaratorList(self) + else: + return visitor.visitChildren(self) + + def variableDeclaratorList(self): + + localctx = Java20Parser.VariableDeclaratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_variableDeclaratorList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1009 + self.variableDeclarator() + self.state = 1014 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 73, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1010 + self.match(Java20Parser.COMMA) + self.state = 1011 + self.variableDeclarator() + self.state = 1016 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 73, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext, 0) + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def variableInitializer(self): + return self.getTypedRuleContext(Java20Parser.VariableInitializerContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclarator + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclarator"): + listener.enterVariableDeclarator(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclarator"): + listener.exitVariableDeclarator(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclarator"): + return visitor.visitVariableDeclarator(self) + else: + return visitor.visitChildren(self) + + def variableDeclarator(self): + + localctx = Java20Parser.VariableDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_variableDeclarator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1017 + self.variableDeclaratorId() + self.state = 1020 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 74, self._ctx) + if la_ == 1: + self.state = 1018 + self.match(Java20Parser.ASSIGN) + self.state = 1019 + self.variableInitializer() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableDeclaratorIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclaratorId + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableDeclaratorId"): + listener.enterVariableDeclaratorId(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableDeclaratorId"): + listener.exitVariableDeclaratorId(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableDeclaratorId"): + return visitor.visitVariableDeclaratorId(self) + else: + return visitor.visitChildren(self) + + def variableDeclaratorId(self): + + localctx = Java20Parser.VariableDeclaratorIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_variableDeclaratorId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1022 + self.match(Java20Parser.Identifier) + self.state = 1024 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 75, self._ctx) + if la_ == 1: + self.state = 1023 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def arrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayInitializerContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableInitializer"): + listener.enterVariableInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableInitializer"): + listener.exitVariableInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableInitializer"): + return visitor.visitVariableInitializer(self) + else: + return visitor.visitChildren(self) + + def variableInitializer(self): + + localctx = Java20Parser.VariableInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_variableInitializer) + try: + self.state = 1028 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, + 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1026 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 1027 + self.arrayInitializer() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannPrimitiveType(self): + return self.getTypedRuleContext(Java20Parser.UnannPrimitiveTypeContext, 0) + + def unannReferenceType(self): + return self.getTypedRuleContext(Java20Parser.UnannReferenceTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannType"): + listener.enterUnannType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannType"): + listener.exitUnannType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannType"): + return visitor.visitUnannType(self) + else: + return visitor.visitChildren(self) + + def unannType(self): + + localctx = Java20Parser.UnannTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_unannType) + try: + self.state = 1032 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 77, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1030 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1031 + self.unannReferenceType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannPrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext, 0) + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannPrimitiveType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannPrimitiveType"): + listener.enterUnannPrimitiveType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannPrimitiveType"): + listener.exitUnannPrimitiveType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannPrimitiveType"): + return visitor.visitUnannPrimitiveType(self) + else: + return visitor.visitChildren(self) + + def unannPrimitiveType(self): + + localctx = Java20Parser.UnannPrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_unannPrimitiveType) + try: + self.state = 1036 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 1034 + self.numericType() + pass + elif token in [20]: + self.enterOuterAlt(localctx, 2) + self.state = 1035 + self.match(Java20Parser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext, 0) + + def unannTypeVariable(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeVariableContext, 0) + + def unannArrayType(self): + return self.getTypedRuleContext(Java20Parser.UnannArrayTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannReferenceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannReferenceType"): + listener.enterUnannReferenceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannReferenceType"): + listener.exitUnannReferenceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannReferenceType"): + return visitor.visitUnannReferenceType(self) + else: + return visitor.visitChildren(self) + + def unannReferenceType(self): + + localctx = Java20Parser.UnannReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_unannReferenceType) + try: + self.state = 1041 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 79, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1038 + self.unannClassOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1039 + self.unannTypeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1040 + self.unannArrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def uCOIT(self): + return self.getTypedRuleContext(Java20Parser.UCOITContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_unannClassOrInterfaceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannClassOrInterfaceType"): + listener.enterUnannClassOrInterfaceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannClassOrInterfaceType"): + listener.exitUnannClassOrInterfaceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannClassOrInterfaceType"): + return visitor.visitUnannClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + def unannClassOrInterfaceType(self): + + localctx = Java20Parser.UnannClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_unannClassOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1051 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 81, self._ctx) + if la_ == 1: + self.state = 1043 + self.packageName() + self.state = 1044 + self.match(Java20Parser.DOT) + self.state = 1048 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1045 + self.annotation() + self.state = 1050 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1053 + self.typeIdentifier() + self.state = 1055 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 82, self._ctx) + if la_ == 1: + self.state = 1054 + self.typeArguments() + + self.state = 1058 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 83, self._ctx) + if la_ == 1: + self.state = 1057 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UCOITContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def uCOIT(self): + return self.getTypedRuleContext(Java20Parser.UCOITContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_uCOIT + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUCOIT"): + listener.enterUCOIT(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUCOIT"): + listener.exitUCOIT(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUCOIT"): + return visitor.visitUCOIT(self) + else: + return visitor.visitChildren(self) + + def uCOIT(self): + + localctx = Java20Parser.UCOITContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_uCOIT) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1060 + self.match(Java20Parser.DOT) + self.state = 1064 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1061 + self.annotation() + self.state = 1066 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1067 + self.typeIdentifier() + self.state = 1069 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 85, self._ctx) + if la_ == 1: + self.state = 1068 + self.typeArguments() + + self.state = 1072 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 86, self._ctx) + if la_ == 1: + self.state = 1071 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext, 0) + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_unannClassType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannClassType"): + listener.enterUnannClassType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannClassType"): + listener.exitUnannClassType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannClassType"): + return visitor.visitUnannClassType(self) + else: + return visitor.visitChildren(self) + + def unannClassType(self): + + localctx = Java20Parser.UnannClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_unannClassType) + self._la = 0 # Token type + try: + self.state = 1093 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 91, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1074 + self.typeIdentifier() + self.state = 1076 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1075 + self.typeArguments() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1080 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 88, self._ctx) + if la_ == 1: + self.state = 1078 + self.packageName() + pass + + elif la_ == 2: + self.state = 1079 + self.unannClassOrInterfaceType() + pass + + self.state = 1082 + self.match(Java20Parser.DOT) + self.state = 1086 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1083 + self.annotation() + self.state = 1088 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1089 + self.typeIdentifier() + self.state = 1091 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1090 + self.typeArguments() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannInterfaceType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannInterfaceType"): + listener.enterUnannInterfaceType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannInterfaceType"): + listener.exitUnannInterfaceType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannInterfaceType"): + return visitor.visitUnannInterfaceType(self) + else: + return visitor.visitChildren(self) + + def unannInterfaceType(self): + + localctx = Java20Parser.UnannInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_unannInterfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1095 + self.unannClassType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannTypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannTypeVariable + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannTypeVariable"): + listener.enterUnannTypeVariable(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannTypeVariable"): + listener.exitUnannTypeVariable(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannTypeVariable"): + return visitor.visitUnannTypeVariable(self) + else: + return visitor.visitChildren(self) + + def unannTypeVariable(self): + + localctx = Java20Parser.UnannTypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_unannTypeVariable) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1097 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnannArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def unannPrimitiveType(self): + return self.getTypedRuleContext(Java20Parser.UnannPrimitiveTypeContext, 0) + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext, 0) + + def unannTypeVariable(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeVariableContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannArrayType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnannArrayType"): + listener.enterUnannArrayType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnannArrayType"): + listener.exitUnannArrayType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnannArrayType"): + return visitor.visitUnannArrayType(self) + else: + return visitor.visitChildren(self) + + def unannArrayType(self): + + localctx = Java20Parser.UnannArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_unannArrayType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1102 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 92, self._ctx) + if la_ == 1: + self.state = 1099 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.state = 1100 + self.unannClassOrInterfaceType() + pass + + elif la_ == 3: + self.state = 1101 + self.unannTypeVariable() + pass + + self.state = 1104 + self.dims() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(Java20Parser.MethodHeaderContext, 0) + + def methodBody(self): + return self.getTypedRuleContext(Java20Parser.MethodBodyContext, 0) + + def methodModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.MethodModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.MethodModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_methodDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodDeclaration"): + listener.enterMethodDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodDeclaration"): + listener.exitMethodDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodDeclaration"): + return visitor.visitMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + def methodDeclaration(self): + + localctx = Java20Parser.MethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_methodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1109 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 692569214556569600) != 0) or _la == 86: + self.state = 1106 + self.methodModifier() + self.state = 1111 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1112 + self.methodHeader() + self.state = 1113 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def SYNCHRONIZED(self): + return self.getToken(Java20Parser.SYNCHRONIZED, 0) + + def NATIVE(self): + return self.getToken(Java20Parser.NATIVE, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodModifier"): + listener.enterMethodModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodModifier"): + listener.exitMethodModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodModifier"): + return visitor.visitMethodModifier(self) + else: + return visitor.visitChildren(self) + + def methodModifier(self): + + localctx = Java20Parser.MethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_methodModifier) + try: + self.state = 1125 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1115 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1116 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1117 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1118 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1119 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1120 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 1121 + self.match(Java20Parser.FINAL) + pass + elif token in [59]: + self.enterOuterAlt(localctx, 8) + self.state = 1122 + self.match(Java20Parser.SYNCHRONIZED) + pass + elif token in [47]: + self.enterOuterAlt(localctx, 9) + self.state = 1123 + self.match(Java20Parser.NATIVE) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 1124 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def result(self): + return self.getTypedRuleContext(Java20Parser.ResultContext, 0) + + def methodDeclarator(self): + return self.getTypedRuleContext(Java20Parser.MethodDeclaratorContext, 0) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext, 0) + + def throwsT(self): + return self.getTypedRuleContext(Java20Parser.ThrowsTContext, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_methodHeader + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodHeader"): + listener.enterMethodHeader(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodHeader"): + listener.exitMethodHeader(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodHeader"): + return visitor.visitMethodHeader(self) + else: + return visitor.visitChildren(self) + + def methodHeader(self): + + localctx = Java20Parser.MethodHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_methodHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1134 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1127 + self.typeParameters() + self.state = 1131 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1128 + self.annotation() + self.state = 1133 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1136 + self.result() + self.state = 1137 + self.methodDeclarator() + self.state = 1139 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 1138 + self.throwsT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ResultContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def VOID(self): + return self.getToken(Java20Parser.VOID, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_result + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterResult"): + listener.enterResult(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitResult"): + listener.exitResult(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitResult"): + return visitor.visitResult(self) + else: + return visitor.visitChildren(self) + + def result(self): + + localctx = Java20Parser.ResultContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_result) + try: + self.state = 1143 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1141 + self.unannType() + pass + elif token in [65]: + self.enterOuterAlt(localctx, 2) + self.state = 1142 + self.match(Java20Parser.VOID) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def receiverParameter(self): + return self.getTypedRuleContext(Java20Parser.ReceiverParameterContext, 0) + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(Java20Parser.FormalParameterListContext, 0) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodDeclarator + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodDeclarator"): + listener.enterMethodDeclarator(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodDeclarator"): + listener.exitMethodDeclarator(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodDeclarator"): + return visitor.visitMethodDeclarator(self) + else: + return visitor.visitChildren(self) + + def methodDeclarator(self): + + localctx = Java20Parser.MethodDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_methodDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1145 + self.match(Java20Parser.Identifier) + self.state = 1146 + self.match(Java20Parser.LPAREN) + self.state = 1150 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 99, self._ctx) + if la_ == 1: + self.state = 1147 + self.receiverParameter() + self.state = 1148 + self.match(Java20Parser.COMMA) + + self.state = 1153 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424676864) != 0) or _la == 86 or _la == 123: + self.state = 1152 + self.formalParameterList() + + self.state = 1155 + self.match(Java20Parser.RPAREN) + self.state = 1157 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 80 or _la == 86: + self.state = 1156 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ReceiverParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_receiverParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReceiverParameter"): + listener.enterReceiverParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReceiverParameter"): + listener.exitReceiverParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReceiverParameter"): + return visitor.visitReceiverParameter(self) + else: + return visitor.visitChildren(self) + + def receiverParameter(self): + + localctx = Java20Parser.ReceiverParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_receiverParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1162 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1159 + self.annotation() + self.state = 1164 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1165 + self.unannType() + self.state = 1168 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 123: + self.state = 1166 + self.match(Java20Parser.Identifier) + self.state = 1167 + self.match(Java20Parser.DOT) + + self.state = 1170 + self.match(Java20Parser.THIS) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FormalParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def formalParameter(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.FormalParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.FormalParameterContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_formalParameterList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFormalParameterList"): + listener.enterFormalParameterList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFormalParameterList"): + listener.exitFormalParameterList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFormalParameterList"): + return visitor.visitFormalParameterList(self) + else: + return visitor.visitChildren(self) + + def formalParameterList(self): + + localctx = Java20Parser.FormalParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_formalParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1172 + self.formalParameter() + self.state = 1177 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1173 + self.match(Java20Parser.COMMA) + self.state = 1174 + self.formalParameter() + self.state = 1179 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext, 0) + + def variableModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext, i) + + def variableArityParameter(self): + return self.getTypedRuleContext(Java20Parser.VariableArityParameterContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_formalParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFormalParameter"): + listener.enterFormalParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFormalParameter"): + listener.exitFormalParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFormalParameter"): + return visitor.visitFormalParameter(self) + else: + return visitor.visitChildren(self) + + def formalParameter(self): + + localctx = Java20Parser.FormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_formalParameter) + self._la = 0 # Token type + try: + self.state = 1190 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 106, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1183 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 35 or _la == 86: + self.state = 1180 + self.variableModifier() + self.state = 1185 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1186 + self.unannType() + self.state = 1187 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1189 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableArityParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def ELLIPSIS(self): + return self.getToken(Java20Parser.ELLIPSIS, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def variableModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext, i) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableArityParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableArityParameter"): + listener.enterVariableArityParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableArityParameter"): + listener.exitVariableArityParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableArityParameter"): + return visitor.visitVariableArityParameter(self) + else: + return visitor.visitChildren(self) + + def variableArityParameter(self): + + localctx = Java20Parser.VariableArityParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_variableArityParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1195 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 35 or _la == 86: + self.state = 1192 + self.variableModifier() + self.state = 1197 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1198 + self.unannType() + self.state = 1202 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1199 + self.annotation() + self.state = 1204 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1205 + self.match(Java20Parser.ELLIPSIS) + self.state = 1206 + self.match(Java20Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableModifier"): + listener.enterVariableModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableModifier"): + listener.exitVariableModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableModifier"): + return visitor.visitVariableModifier(self) + else: + return visitor.visitChildren(self) + + def variableModifier(self): + + localctx = Java20Parser.VariableModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_variableModifier) + try: + self.state = 1210 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1208 + self.annotation() + pass + elif token in [35]: + self.enterOuterAlt(localctx, 2) + self.state = 1209 + self.match(Java20Parser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ThrowsTContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROWS(self): + return self.getToken(Java20Parser.THROWS, 0) + + def exceptionTypeList(self): + return self.getTypedRuleContext(Java20Parser.ExceptionTypeListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_throwsT + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterThrowsT"): + listener.enterThrowsT(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitThrowsT"): + listener.exitThrowsT(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitThrowsT"): + return visitor.visitThrowsT(self) + else: + return visitor.visitChildren(self) + + def throwsT(self): + + localctx = Java20Parser.ThrowsTContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_throwsT) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1212 + self.match(Java20Parser.THROWS) + self.state = 1213 + self.exceptionTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExceptionTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def exceptionType(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExceptionTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.ExceptionTypeContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_exceptionTypeList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExceptionTypeList"): + listener.enterExceptionTypeList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExceptionTypeList"): + listener.exitExceptionTypeList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExceptionTypeList"): + return visitor.visitExceptionTypeList(self) + else: + return visitor.visitChildren(self) + + def exceptionTypeList(self): + + localctx = Java20Parser.ExceptionTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_exceptionTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1215 + self.exceptionType() + self.state = 1220 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1216 + self.match(Java20Parser.COMMA) + self.state = 1217 + self.exceptionType() + self.state = 1222 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExceptionTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_exceptionType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExceptionType"): + listener.enterExceptionType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExceptionType"): + listener.exitExceptionType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExceptionType"): + return visitor.visitExceptionType(self) + else: + return visitor.visitChildren(self) + + def exceptionType(self): + + localctx = Java20Parser.ExceptionTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_exceptionType) + try: + self.state = 1225 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 111, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1223 + self.classType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1224 + self.typeVariable() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodBody"): + listener.enterMethodBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodBody"): + listener.exitMethodBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodBody"): + return visitor.visitMethodBody(self) + else: + return visitor.visitChildren(self) + + def methodBody(self): + + localctx = Java20Parser.MethodBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_methodBody) + try: + self.state = 1229 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [78]: + self.enterOuterAlt(localctx, 1) + self.state = 1227 + self.block() + pass + elif token in [82]: + self.enterOuterAlt(localctx, 2) + self.state = 1228 + self.match(Java20Parser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InstanceInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_instanceInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInstanceInitializer"): + listener.enterInstanceInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInstanceInitializer"): + listener.exitInstanceInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInstanceInitializer"): + return visitor.visitInstanceInitializer(self) + else: + return visitor.visitChildren(self) + + def instanceInitializer(self): + + localctx = Java20Parser.InstanceInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_instanceInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1231 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StaticInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_staticInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStaticInitializer"): + listener.enterStaticInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStaticInitializer"): + listener.exitStaticInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStaticInitializer"): + return visitor.visitStaticInitializer(self) + else: + return visitor.visitChildren(self) + + def staticInitializer(self): + + localctx = Java20Parser.StaticInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_staticInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1233 + self.match(Java20Parser.STATIC) + self.state = 1234 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def constructorDeclarator(self): + return self.getTypedRuleContext(Java20Parser.ConstructorDeclaratorContext, 0) + + def constructorBody(self): + return self.getTypedRuleContext(Java20Parser.ConstructorBodyContext, 0) + + def constructorModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstructorModifierContext, i) + + def throwsT(self): + return self.getTypedRuleContext(Java20Parser.ThrowsTContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constructorDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstructorDeclaration"): + listener.enterConstructorDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstructorDeclaration"): + listener.exitConstructorDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstructorDeclaration"): + return visitor.visitConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + def constructorDeclaration(self): + + localctx = Java20Parser.ConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_constructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1239 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1236 + self.constructorModifier() + self.state = 1241 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1242 + self.constructorDeclarator() + self.state = 1244 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 1243 + self.throwsT() + + self.state = 1246 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstructorModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constructorModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstructorModifier"): + listener.enterConstructorModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstructorModifier"): + listener.exitConstructorModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstructorModifier"): + return visitor.visitConstructorModifier(self) + else: + return visitor.visitChildren(self) + + def constructorModifier(self): + + localctx = Java20Parser.ConstructorModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_constructorModifier) + try: + self.state = 1252 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1248 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1249 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1250 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1251 + self.match(Java20Parser.PRIVATE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstructorDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(Java20Parser.SimpleTypeNameContext, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext, 0) + + def receiverParameter(self): + return self.getTypedRuleContext(Java20Parser.ReceiverParameterContext, 0) + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(Java20Parser.FormalParameterListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constructorDeclarator + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstructorDeclarator"): + listener.enterConstructorDeclarator(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstructorDeclarator"): + listener.exitConstructorDeclarator(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstructorDeclarator"): + return visitor.visitConstructorDeclarator(self) + else: + return visitor.visitChildren(self) + + def constructorDeclarator(self): + + localctx = Java20Parser.ConstructorDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_constructorDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1255 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1254 + self.typeParameters() + + self.state = 1257 + self.simpleTypeName() + self.state = 1258 + self.match(Java20Parser.LPAREN) + self.state = 1262 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 117, self._ctx) + if la_ == 1: + self.state = 1259 + self.receiverParameter() + self.state = 1260 + self.match(Java20Parser.COMMA) + + self.state = 1265 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424676864) != 0) or _la == 86 or _la == 123: + self.state = 1264 + self.formalParameterList() + + self.state = 1267 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SimpleTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_simpleTypeName + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSimpleTypeName"): + listener.enterSimpleTypeName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSimpleTypeName"): + listener.exitSimpleTypeName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSimpleTypeName"): + return visitor.visitSimpleTypeName(self) + else: + return visitor.visitChildren(self) + + def simpleTypeName(self): + + localctx = Java20Parser.SimpleTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_simpleTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1269 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstructorBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def explicitConstructorInvocation(self): + return self.getTypedRuleContext(Java20Parser.ExplicitConstructorInvocationContext, 0) + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constructorBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstructorBody"): + listener.enterConstructorBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstructorBody"): + listener.exitConstructorBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstructorBody"): + return visitor.visitConstructorBody(self) + else: + return visitor.visitChildren(self) + + def constructorBody(self): + + localctx = Java20Parser.ConstructorBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_constructorBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1271 + self.match(Java20Parser.LBRACE) + self.state = 1273 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 119, self._ctx) + if la_ == 1: + self.state = 1272 + self.explicitConstructorInvocation() + + self.state = 1276 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1275 + self.blockStatements() + + self.state = 1278 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExplicitConstructorInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_explicitConstructorInvocation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExplicitConstructorInvocation"): + listener.enterExplicitConstructorInvocation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExplicitConstructorInvocation"): + listener.exitExplicitConstructorInvocation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExplicitConstructorInvocation"): + return visitor.visitExplicitConstructorInvocation(self) + else: + return visitor.visitChildren(self) + + def explicitConstructorInvocation(self): + + localctx = Java20Parser.ExplicitConstructorInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_explicitConstructorInvocation) + self._la = 0 # Token type + try: + self.state = 1306 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 126, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1281 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1280 + self.typeArguments() + + self.state = 1283 + _la = self._input.LA(1) + if not (_la == 57 or _la == 60): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1284 + self.match(Java20Parser.LPAREN) + self.state = 1286 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1285 + self.argumentList() + + self.state = 1288 + self.match(Java20Parser.RPAREN) + self.state = 1289 + self.match(Java20Parser.SEMI) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1292 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 123, self._ctx) + if la_ == 1: + self.state = 1290 + self.expressionName() + pass + + elif la_ == 2: + self.state = 1291 + self.primary() + pass + + self.state = 1294 + self.match(Java20Parser.DOT) + self.state = 1296 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1295 + self.typeArguments() + + self.state = 1298 + self.match(Java20Parser.SUPER) + self.state = 1299 + self.match(Java20Parser.LPAREN) + self.state = 1301 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1300 + self.argumentList() + + self.state = 1303 + self.match(Java20Parser.RPAREN) + self.state = 1304 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ENUM(self): + return self.getToken(Java20Parser.ENUM, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def enumBody(self): + return self.getTypedRuleContext(Java20Parser.EnumBodyContext, 0) + + def classModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext, i) + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enumDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumDeclaration"): + listener.enterEnumDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumDeclaration"): + listener.exitEnumDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumDeclaration"): + return visitor.visitEnumDeclaration(self) + else: + return visitor.visitChildren(self) + + def enumDeclaration(self): + + localctx = Java20Parser.EnumDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_enumDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1311 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la == 86: + self.state = 1308 + self.classModifier() + self.state = 1313 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1314 + self.match(Java20Parser.ENUM) + self.state = 1315 + self.typeIdentifier() + self.state = 1317 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 41: + self.state = 1316 + self.classImplements() + + self.state = 1319 + self.enumBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def enumConstantList(self): + return self.getTypedRuleContext(Java20Parser.EnumConstantListContext, 0) + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def enumBodyDeclarations(self): + return self.getTypedRuleContext(Java20Parser.EnumBodyDeclarationsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enumBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumBody"): + listener.enterEnumBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumBody"): + listener.exitEnumBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumBody"): + return visitor.visitEnumBody(self) + else: + return visitor.visitChildren(self) + + def enumBody(self): + + localctx = Java20Parser.EnumBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_enumBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1321 + self.match(Java20Parser.LBRACE) + self.state = 1323 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 86 or _la == 123: + self.state = 1322 + self.enumConstantList() + + self.state = 1326 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 83: + self.state = 1325 + self.match(Java20Parser.COMMA) + + self.state = 1329 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 82: + self.state = 1328 + self.enumBodyDeclarations() + + self.state = 1331 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumConstantListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumConstant(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.EnumConstantContext) + else: + return self.getTypedRuleContext(Java20Parser.EnumConstantContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstantList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumConstantList"): + listener.enterEnumConstantList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumConstantList"): + listener.exitEnumConstantList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumConstantList"): + return visitor.visitEnumConstantList(self) + else: + return visitor.visitChildren(self) + + def enumConstantList(self): + + localctx = Java20Parser.EnumConstantListContext(self, self._ctx, self.state) + self.enterRule(localctx, 194, self.RULE_enumConstantList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1333 + self.enumConstant() + self.state = 1338 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 132, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1334 + self.match(Java20Parser.COMMA) + self.state = 1335 + self.enumConstant() + self.state = 1340 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 132, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def enumConstantModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.EnumConstantModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.EnumConstantModifierContext, i) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstant + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumConstant"): + listener.enterEnumConstant(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumConstant"): + listener.exitEnumConstant(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumConstant"): + return visitor.visitEnumConstant(self) + else: + return visitor.visitChildren(self) + + def enumConstant(self): + + localctx = Java20Parser.EnumConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_enumConstant) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1344 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1341 + self.enumConstantModifier() + self.state = 1346 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1347 + self.match(Java20Parser.Identifier) + self.state = 1353 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 76: + self.state = 1348 + self.match(Java20Parser.LPAREN) + self.state = 1350 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1349 + self.argumentList() + + self.state = 1352 + self.match(Java20Parser.RPAREN) + + self.state = 1356 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 78: + self.state = 1355 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstantModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumConstantModifier"): + listener.enterEnumConstantModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumConstantModifier"): + listener.exitEnumConstantModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumConstantModifier"): + return visitor.visitEnumConstantModifier(self) + else: + return visitor.visitChildren(self) + + def enumConstantModifier(self): + + localctx = Java20Parser.EnumConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_enumConstantModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1358 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnumBodyDeclarationsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def classBodyDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_enumBodyDeclarations + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnumBodyDeclarations"): + listener.enterEnumBodyDeclarations(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnumBodyDeclarations"): + listener.exitEnumBodyDeclarations(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnumBodyDeclarations"): + return visitor.visitEnumBodyDeclarations(self) + else: + return visitor.visitChildren(self) + + def enumBodyDeclarations(self): + + localctx = Java20Parser.EnumBodyDeclarationsContext(self, self._ctx, self.state) + self.enterRule(localctx, 200, self.RULE_enumBodyDeclarations) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1360 + self.match(Java20Parser.SEMI) + self.state = 1364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1361 + self.classBodyDeclaration() + self.state = 1366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def RECORD(self): + return self.getToken(Java20Parser.RECORD, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def recordHeader(self): + return self.getTypedRuleContext(Java20Parser.RecordHeaderContext, 0) + + def recordBody(self): + return self.getTypedRuleContext(Java20Parser.RecordBodyContext, 0) + + def classModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext, i) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext, 0) + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_recordDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordDeclaration"): + listener.enterRecordDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordDeclaration"): + listener.exitRecordDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordDeclaration"): + return visitor.visitRecordDeclaration(self) + else: + return visitor.visitChildren(self) + + def recordDeclaration(self): + + localctx = Java20Parser.RecordDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 202, self.RULE_recordDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1370 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la == 86: + self.state = 1367 + self.classModifier() + self.state = 1372 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1373 + self.match(Java20Parser.RECORD) + self.state = 1374 + self.typeIdentifier() + self.state = 1376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1375 + self.typeParameters() + + self.state = 1378 + self.recordHeader() + self.state = 1380 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 41: + self.state = 1379 + self.classImplements() + + self.state = 1382 + self.recordBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def recordComponentList(self): + return self.getTypedRuleContext(Java20Parser.RecordComponentListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_recordHeader + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordHeader"): + listener.enterRecordHeader(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordHeader"): + listener.exitRecordHeader(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordHeader"): + return visitor.visitRecordHeader(self) + else: + return visitor.visitChildren(self) + + def recordHeader(self): + + localctx = Java20Parser.RecordHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 204, self.RULE_recordHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1384 + self.match(Java20Parser.LPAREN) + self.state = 1386 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102499064938496) != 0) or _la == 86 or _la == 123: + self.state = 1385 + self.recordComponentList() + + self.state = 1388 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordComponentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def recordComponent(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponentList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordComponentList"): + listener.enterRecordComponentList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordComponentList"): + listener.exitRecordComponentList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordComponentList"): + return visitor.visitRecordComponentList(self) + else: + return visitor.visitChildren(self) + + def recordComponentList(self): + + localctx = Java20Parser.RecordComponentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 206, self.RULE_recordComponentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1390 + self.recordComponent() + self.state = 1395 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1391 + self.match(Java20Parser.COMMA) + self.state = 1392 + self.recordComponent() + self.state = 1397 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def recordComponentModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentModifierContext, i) + + def variableArityRecordComponent(self): + return self.getTypedRuleContext(Java20Parser.VariableArityRecordComponentContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponent + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordComponent"): + listener.enterRecordComponent(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordComponent"): + listener.exitRecordComponent(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordComponent"): + return visitor.visitRecordComponent(self) + else: + return visitor.visitChildren(self) + + def recordComponent(self): + + localctx = Java20Parser.RecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 208, self.RULE_recordComponent) + self._la = 0 # Token type + try: + self.state = 1408 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 144, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1401 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1398 + self.recordComponentModifier() + self.state = 1403 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1404 + self.unannType() + self.state = 1405 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1407 + self.variableArityRecordComponent() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableArityRecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def ELLIPSIS(self): + return self.getToken(Java20Parser.ELLIPSIS, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def recordComponentModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentModifierContext, i) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableArityRecordComponent + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableArityRecordComponent"): + listener.enterVariableArityRecordComponent(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableArityRecordComponent"): + listener.exitVariableArityRecordComponent(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableArityRecordComponent"): + return visitor.visitVariableArityRecordComponent(self) + else: + return visitor.visitChildren(self) + + def variableArityRecordComponent(self): + + localctx = Java20Parser.VariableArityRecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 210, self.RULE_variableArityRecordComponent) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1413 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1410 + self.recordComponentModifier() + self.state = 1415 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1416 + self.unannType() + self.state = 1420 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 1417 + self.annotation() + self.state = 1422 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1423 + self.match(Java20Parser.ELLIPSIS) + self.state = 1424 + self.match(Java20Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordComponentModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponentModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordComponentModifier"): + listener.enterRecordComponentModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordComponentModifier"): + listener.exitRecordComponentModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordComponentModifier"): + return visitor.visitRecordComponentModifier(self) + else: + return visitor.visitChildren(self) + + def recordComponentModifier(self): + + localctx = Java20Parser.RecordComponentModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 212, self.RULE_recordComponentModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1426 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def recordBodyDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordBodyDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_recordBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordBody"): + listener.enterRecordBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordBody"): + listener.exitRecordBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordBody"): + return visitor.visitRecordBody(self) + else: + return visitor.visitChildren(self) + + def recordBody(self): + + localctx = Java20Parser.RecordBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 214, self.RULE_recordBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1428 + self.match(Java20Parser.LBRACE) + self.state = 1432 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130204132856) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1429 + self.recordBodyDeclaration() + self.state = 1434 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1435 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class RecordBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classBodyDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext, 0) + + def compactConstructorDeclaration(self): + return self.getTypedRuleContext(Java20Parser.CompactConstructorDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_recordBodyDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRecordBodyDeclaration"): + listener.enterRecordBodyDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRecordBodyDeclaration"): + listener.exitRecordBodyDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRecordBodyDeclaration"): + return visitor.visitRecordBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + def recordBodyDeclaration(self): + + localctx = Java20Parser.RecordBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 216, self.RULE_recordBodyDeclaration) + try: + self.state = 1439 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 148, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1437 + self.classBodyDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1438 + self.compactConstructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CompactConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(Java20Parser.SimpleTypeNameContext, 0) + + def constructorBody(self): + return self.getTypedRuleContext(Java20Parser.ConstructorBodyContext, 0) + + def constructorModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstructorModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_compactConstructorDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCompactConstructorDeclaration"): + listener.enterCompactConstructorDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCompactConstructorDeclaration"): + listener.exitCompactConstructorDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCompactConstructorDeclaration"): + return visitor.visitCompactConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + def compactConstructorDeclaration(self): + + localctx = Java20Parser.CompactConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 218, self.RULE_compactConstructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1444 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1441 + self.constructorModifier() + self.state = 1446 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1447 + self.simpleTypeName() + self.state = 1448 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalInterfaceDeclarationContext, 0) + + def annotationInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceDeclaration"): + listener.enterInterfaceDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceDeclaration"): + listener.exitInterfaceDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceDeclaration"): + return visitor.visitInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + def interfaceDeclaration(self): + + localctx = Java20Parser.InterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 220, self.RULE_interfaceDeclaration) + try: + self.state = 1452 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 150, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1450 + self.normalInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1451 + self.annotationInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NormalInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def INTERFACE(self): + return self.getToken(Java20Parser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def interfaceBody(self): + return self.getTypedRuleContext(Java20Parser.InterfaceBodyContext, 0) + + def interfaceModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceModifierContext, i) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext, 0) + + def interfaceExtends(self): + return self.getTypedRuleContext(Java20Parser.InterfaceExtendsContext, 0) + + def interfacePermits(self): + return self.getTypedRuleContext(Java20Parser.InterfacePermitsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_normalInterfaceDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNormalInterfaceDeclaration"): + listener.enterNormalInterfaceDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNormalInterfaceDeclaration"): + listener.exitNormalInterfaceDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNormalInterfaceDeclaration"): + return visitor.visitNormalInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + def normalInterfaceDeclaration(self): + + localctx = Java20Parser.NormalInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 222, self.RULE_normalInterfaceDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1457 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967690405054472) != 0) or _la == 86: + self.state = 1454 + self.interfaceModifier() + self.state = 1459 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1460 + self.match(Java20Parser.INTERFACE) + self.state = 1461 + self.typeIdentifier() + self.state = 1463 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 1462 + self.typeParameters() + + self.state = 1466 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 34: + self.state = 1465 + self.interfaceExtends() + + self.state = 1469 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 1468 + self.interfacePermits() + + self.state = 1471 + self.interfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceModifier"): + listener.enterInterfaceModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceModifier"): + listener.exitInterfaceModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceModifier"): + return visitor.visitInterfaceModifier(self) + else: + return visitor.visitChildren(self) + + def interfaceModifier(self): + + localctx = Java20Parser.InterfaceModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 224, self.RULE_interfaceModifier) + try: + self.state = 1482 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1473 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1474 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1475 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1476 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1477 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1478 + self.match(Java20Parser.STATIC) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 7) + self.state = 1479 + self.match(Java20Parser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 8) + self.state = 1480 + self.match(Java20Parser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 9) + self.state = 1481 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceExtends + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceExtends"): + listener.enterInterfaceExtends(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceExtends"): + listener.exitInterfaceExtends(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceExtends"): + return visitor.visitInterfaceExtends(self) + else: + return visitor.visitChildren(self) + + def interfaceExtends(self): + + localctx = Java20Parser.InterfaceExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 226, self.RULE_interfaceExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1484 + self.match(Java20Parser.EXTENDS) + self.state = 1485 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfacePermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def typeName(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfacePermits + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfacePermits"): + listener.enterInterfacePermits(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfacePermits"): + listener.exitInterfacePermits(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfacePermits"): + return visitor.visitInterfacePermits(self) + else: + return visitor.visitChildren(self) + + def interfacePermits(self): + + localctx = Java20Parser.InterfacePermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 228, self.RULE_interfacePermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1487 + self.match(Java20Parser.PERMITS) + self.state = 1488 + self.typeName() + self.state = 1493 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1489 + self.match(Java20Parser.COMMA) + self.state = 1490 + self.typeName() + self.state = 1495 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def interfaceMemberDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceMemberDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceBody"): + listener.enterInterfaceBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceBody"): + listener.exitInterfaceBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceBody"): + return visitor.visitInterfaceBody(self) + else: + return visitor.visitChildren(self) + + def interfaceBody(self): + + localctx = Java20Parser.InterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 230, self.RULE_interfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1496 + self.match(Java20Parser.LBRACE) + self.state = 1500 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105417395735048) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187494401) != 0): + self.state = 1497 + self.interfaceMemberDeclaration() + self.state = 1502 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1503 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def constantDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstantDeclarationContext, 0) + + def interfaceMethodDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceMethodDeclarationContext, 0) + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext, 0) + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMemberDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceMemberDeclaration"): + listener.enterInterfaceMemberDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceMemberDeclaration"): + listener.exitInterfaceMemberDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceMemberDeclaration"): + return visitor.visitInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + def interfaceMemberDeclaration(self): + + localctx = Java20Parser.InterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 232, self.RULE_interfaceMemberDeclaration) + try: + self.state = 1510 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 158, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1505 + self.constantDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1506 + self.interfaceMethodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1507 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1508 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1509 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstantDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def constantModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstantModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstantModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_constantDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstantDeclaration"): + listener.enterConstantDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstantDeclaration"): + listener.exitConstantDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstantDeclaration"): + return visitor.visitConstantDeclaration(self) + else: + return visitor.visitChildren(self) + + def constantDeclaration(self): + + localctx = Java20Parser.ConstantDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 234, self.RULE_constantDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1515 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251799814864897) != 0): + self.state = 1512 + self.constantModifier() + self.state = 1517 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1518 + self.unannType() + self.state = 1519 + self.variableDeclaratorList() + self.state = 1520 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constantModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstantModifier"): + listener.enterConstantModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstantModifier"): + listener.exitConstantModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstantModifier"): + return visitor.visitConstantModifier(self) + else: + return visitor.visitChildren(self) + + def constantModifier(self): + + localctx = Java20Parser.ConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 236, self.RULE_constantModifier) + try: + self.state = 1526 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1522 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1523 + self.match(Java20Parser.PUBLIC) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 3) + self.state = 1524 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 4) + self.state = 1525 + self.match(Java20Parser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceMethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(Java20Parser.MethodHeaderContext, 0) + + def methodBody(self): + return self.getTypedRuleContext(Java20Parser.MethodBodyContext, 0) + + def interfaceMethodModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceMethodModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceMethodModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMethodDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceMethodDeclaration"): + listener.enterInterfaceMethodDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceMethodDeclaration"): + listener.exitInterfaceMethodDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceMethodDeclaration"): + return visitor.visitInterfaceMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + def interfaceMethodDeclaration(self): + + localctx = Java20Parser.InterfaceMethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 238, self.RULE_interfaceMethodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1531 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 113715891128238080) != 0) or _la == 86: + self.state = 1528 + self.interfaceMethodModifier() + self.state = 1533 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1534 + self.methodHeader() + self.state = 1535 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class InterfaceMethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMethodModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInterfaceMethodModifier"): + listener.enterInterfaceMethodModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInterfaceMethodModifier"): + listener.exitInterfaceMethodModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInterfaceMethodModifier"): + return visitor.visitInterfaceMethodModifier(self) + else: + return visitor.visitChildren(self) + + def interfaceMethodModifier(self): + + localctx = Java20Parser.InterfaceMethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 240, self.RULE_interfaceMethodModifier) + try: + self.state = 1544 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1537 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1538 + self.match(Java20Parser.PUBLIC) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 3) + self.state = 1539 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 4) + self.state = 1540 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [29]: + self.enterOuterAlt(localctx, 5) + self.state = 1541 + self.match(Java20Parser.DEFAULT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1542 + self.match(Java20Parser.STATIC) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 7) + self.state = 1543 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def INTERFACE(self): + return self.getToken(Java20Parser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext, 0) + + def annotationInterfaceBody(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceBodyContext, 0) + + def interfaceModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotationInterfaceDeclaration"): + listener.enterAnnotationInterfaceDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotationInterfaceDeclaration"): + listener.exitAnnotationInterfaceDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotationInterfaceDeclaration"): + return visitor.visitAnnotationInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + def annotationInterfaceDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 242, self.RULE_annotationInterfaceDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1549 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 163, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1546 + self.interfaceModifier() + self.state = 1551 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 163, self._ctx) + + self.state = 1552 + self.match(Java20Parser.AT) + self.state = 1553 + self.match(Java20Parser.INTERFACE) + self.state = 1554 + self.typeIdentifier() + self.state = 1555 + self.annotationInterfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationInterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def annotationInterfaceMemberDeclaration(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationInterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceMemberDeclarationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotationInterfaceBody"): + listener.enterAnnotationInterfaceBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotationInterfaceBody"): + listener.exitAnnotationInterfaceBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotationInterfaceBody"): + return visitor.visitAnnotationInterfaceBody(self) + else: + return visitor.visitChildren(self) + + def annotationInterfaceBody(self): + + localctx = Java20Parser.AnnotationInterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 244, self.RULE_annotationInterfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1557 + self.match(Java20Parser.LBRACE) + self.state = 1561 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105416858864136) != 0) or ( + (((_la - 82)) & ~0x3f) == 0 and ((1 << (_la - 82)) & 2199023255569) != 0): + self.state = 1558 + self.annotationInterfaceMemberDeclaration() + self.state = 1563 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1564 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationInterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotationInterfaceElementDeclaration(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceElementDeclarationContext, 0) + + def constantDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstantDeclarationContext, 0) + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext, 0) + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceMemberDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotationInterfaceMemberDeclaration"): + listener.enterAnnotationInterfaceMemberDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotationInterfaceMemberDeclaration"): + listener.exitAnnotationInterfaceMemberDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotationInterfaceMemberDeclaration"): + return visitor.visitAnnotationInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + def annotationInterfaceMemberDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 246, self.RULE_annotationInterfaceMemberDeclaration) + try: + self.state = 1571 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 165, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1566 + self.annotationInterfaceElementDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1567 + self.constantDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1568 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1569 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1570 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationInterfaceElementDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def annotationInterfaceElementModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationInterfaceElementModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceElementModifierContext, i) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def defaultValue(self): + return self.getTypedRuleContext(Java20Parser.DefaultValueContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceElementDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotationInterfaceElementDeclaration"): + listener.enterAnnotationInterfaceElementDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotationInterfaceElementDeclaration"): + listener.exitAnnotationInterfaceElementDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotationInterfaceElementDeclaration"): + return visitor.visitAnnotationInterfaceElementDeclaration(self) + else: + return visitor.visitChildren(self) + + def annotationInterfaceElementDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceElementDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 248, self.RULE_annotationInterfaceElementDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1576 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 18 or _la == 52 or _la == 86: + self.state = 1573 + self.annotationInterfaceElementModifier() + self.state = 1578 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1579 + self.unannType() + self.state = 1580 + self.match(Java20Parser.Identifier) + self.state = 1581 + self.match(Java20Parser.LPAREN) + self.state = 1582 + self.match(Java20Parser.RPAREN) + self.state = 1584 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 80 or _la == 86: + self.state = 1583 + self.dims() + + self.state = 1587 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 29: + self.state = 1586 + self.defaultValue() + + self.state = 1589 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationInterfaceElementModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceElementModifier + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotationInterfaceElementModifier"): + listener.enterAnnotationInterfaceElementModifier(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotationInterfaceElementModifier"): + listener.exitAnnotationInterfaceElementModifier(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotationInterfaceElementModifier"): + return visitor.visitAnnotationInterfaceElementModifier(self) + else: + return visitor.visitChildren(self) + + def annotationInterfaceElementModifier(self): + + localctx = Java20Parser.AnnotationInterfaceElementModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 250, self.RULE_annotationInterfaceElementModifier) + try: + self.state = 1594 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1591 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1592 + self.match(Java20Parser.PUBLIC) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 3) + self.state = 1593 + self.match(Java20Parser.ABSTRACT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DefaultValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_defaultValue + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDefaultValue"): + listener.enterDefaultValue(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDefaultValue"): + listener.exitDefaultValue(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDefaultValue"): + return visitor.visitDefaultValue(self) + else: + return visitor.visitChildren(self) + + def defaultValue(self): + + localctx = Java20Parser.DefaultValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 252, self.RULE_defaultValue) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1596 + self.match(Java20Parser.DEFAULT) + self.state = 1597 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalAnnotation(self): + return self.getTypedRuleContext(Java20Parser.NormalAnnotationContext, 0) + + def markerAnnotation(self): + return self.getTypedRuleContext(Java20Parser.MarkerAnnotationContext, 0) + + def singleElementAnnotation(self): + return self.getTypedRuleContext(Java20Parser.SingleElementAnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnotation"): + listener.enterAnnotation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnotation"): + listener.exitAnnotation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnotation"): + return visitor.visitAnnotation(self) + else: + return visitor.visitChildren(self) + + def annotation(self): + + localctx = Java20Parser.AnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 254, self.RULE_annotation) + try: + self.state = 1602 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 170, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1599 + self.normalAnnotation() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1600 + self.markerAnnotation() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1601 + self.singleElementAnnotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NormalAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def elementValuePairList(self): + return self.getTypedRuleContext(Java20Parser.ElementValuePairListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_normalAnnotation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNormalAnnotation"): + listener.enterNormalAnnotation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNormalAnnotation"): + listener.exitNormalAnnotation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNormalAnnotation"): + return visitor.visitNormalAnnotation(self) + else: + return visitor.visitChildren(self) + + def normalAnnotation(self): + + localctx = Java20Parser.NormalAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 256, self.RULE_normalAnnotation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1604 + self.match(Java20Parser.AT) + self.state = 1605 + self.typeName() + self.state = 1606 + self.match(Java20Parser.LPAREN) + self.state = 1608 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 123: + self.state = 1607 + self.elementValuePairList() + + self.state = 1610 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ElementValuePairListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValuePair(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ElementValuePairContext) + else: + return self.getTypedRuleContext(Java20Parser.ElementValuePairContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValuePairList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementValuePairList"): + listener.enterElementValuePairList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementValuePairList"): + listener.exitElementValuePairList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementValuePairList"): + return visitor.visitElementValuePairList(self) + else: + return visitor.visitChildren(self) + + def elementValuePairList(self): + + localctx = Java20Parser.ElementValuePairListContext(self, self._ctx, self.state) + self.enterRule(localctx, 258, self.RULE_elementValuePairList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1612 + self.elementValuePair() + self.state = 1617 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1613 + self.match(Java20Parser.COMMA) + self.state = 1614 + self.elementValuePair() + self.state = 1619 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ElementValuePairContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValuePair + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementValuePair"): + listener.enterElementValuePair(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementValuePair"): + listener.exitElementValuePair(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementValuePair"): + return visitor.visitElementValuePair(self) + else: + return visitor.visitChildren(self) + + def elementValuePair(self): + + localctx = Java20Parser.ElementValuePairContext(self, self._ctx, self.state) + self.enterRule(localctx, 260, self.RULE_elementValuePair) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1620 + self.match(Java20Parser.Identifier) + self.state = 1621 + self.match(Java20Parser.ASSIGN) + self.state = 1622 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ElementValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext, 0) + + def elementValueArrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ElementValueArrayInitializerContext, 0) + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValue + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementValue"): + listener.enterElementValue(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementValue"): + listener.exitElementValue(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementValue"): + return visitor.visitElementValue(self) + else: + return visitor.visitChildren(self) + + def elementValue(self): + + localctx = Java20Parser.ElementValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 262, self.RULE_elementValue) + try: + self.state = 1627 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 173, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1624 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1625 + self.elementValueArrayInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1626 + self.annotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ElementValueArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def elementValueList(self): + return self.getTypedRuleContext(Java20Parser.ElementValueListContext, 0) + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValueArrayInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementValueArrayInitializer"): + listener.enterElementValueArrayInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementValueArrayInitializer"): + listener.exitElementValueArrayInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementValueArrayInitializer"): + return visitor.visitElementValueArrayInitializer(self) + else: + return visitor.visitChildren(self) + + def elementValueArrayInitializer(self): + + localctx = Java20Parser.ElementValueArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 264, self.RULE_elementValueArrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1629 + self.match(Java20Parser.LBRACE) + self.state = 1631 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1630 + self.elementValueList() + + self.state = 1634 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 83: + self.state = 1633 + self.match(Java20Parser.COMMA) + + self.state = 1636 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ElementValueListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValue(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ElementValueContext) + else: + return self.getTypedRuleContext(Java20Parser.ElementValueContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValueList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterElementValueList"): + listener.enterElementValueList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitElementValueList"): + listener.exitElementValueList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitElementValueList"): + return visitor.visitElementValueList(self) + else: + return visitor.visitChildren(self) + + def elementValueList(self): + + localctx = Java20Parser.ElementValueListContext(self, self._ctx, self.state) + self.enterRule(localctx, 266, self.RULE_elementValueList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1638 + self.elementValue() + self.state = 1643 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 176, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1639 + self.match(Java20Parser.COMMA) + self.state = 1640 + self.elementValue() + self.state = 1645 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 176, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MarkerAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_markerAnnotation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMarkerAnnotation"): + listener.enterMarkerAnnotation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMarkerAnnotation"): + listener.exitMarkerAnnotation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMarkerAnnotation"): + return visitor.visitMarkerAnnotation(self) + else: + return visitor.visitChildren(self) + + def markerAnnotation(self): + + localctx = Java20Parser.MarkerAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 268, self.RULE_markerAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1646 + self.match(Java20Parser.AT) + self.state = 1647 + self.typeName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SingleElementAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleElementAnnotation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSingleElementAnnotation"): + listener.enterSingleElementAnnotation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSingleElementAnnotation"): + listener.exitSingleElementAnnotation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSingleElementAnnotation"): + return visitor.visitSingleElementAnnotation(self) + else: + return visitor.visitChildren(self) + + def singleElementAnnotation(self): + + localctx = Java20Parser.SingleElementAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 270, self.RULE_singleElementAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1649 + self.match(Java20Parser.AT) + self.state = 1650 + self.typeName() + self.state = 1651 + self.match(Java20Parser.LPAREN) + self.state = 1652 + self.elementValue() + self.state = 1653 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def variableInitializerList(self): + return self.getTypedRuleContext(Java20Parser.VariableInitializerListContext, 0) + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayInitializer"): + listener.enterArrayInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayInitializer"): + listener.exitArrayInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayInitializer"): + return visitor.visitArrayInitializer(self) + else: + return visitor.visitChildren(self) + + def arrayInitializer(self): + + localctx = Java20Parser.ArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 272, self.RULE_arrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1655 + self.match(Java20Parser.LBRACE) + self.state = 1657 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1656 + self.variableInitializerList() + + self.state = 1660 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 83: + self.state = 1659 + self.match(Java20Parser.COMMA) + + self.state = 1662 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableInitializerListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableInitializer(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableInitializerContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableInitializerContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableInitializerList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableInitializerList"): + listener.enterVariableInitializerList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableInitializerList"): + listener.exitVariableInitializerList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableInitializerList"): + return visitor.visitVariableInitializerList(self) + else: + return visitor.visitChildren(self) + + def variableInitializerList(self): + + localctx = Java20Parser.VariableInitializerListContext(self, self._ctx, self.state) + self.enterRule(localctx, 274, self.RULE_variableInitializerList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1664 + self.variableInitializer() + self.state = 1669 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 179, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1665 + self.match(Java20Parser.COMMA) + self.state = 1666 + self.variableInitializer() + self.state = 1671 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 179, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_block + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBlock"): + listener.enterBlock(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBlock"): + listener.exitBlock(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBlock"): + return visitor.visitBlock(self) + else: + return visitor.visitChildren(self) + + def block(self): + + localctx = Java20Parser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 276, self.RULE_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1672 + self.match(Java20Parser.LBRACE) + self.state = 1674 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1673 + self.blockStatements() + + self.state = 1676 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BlockStatementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def blockStatement(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.BlockStatementContext) + else: + return self.getTypedRuleContext(Java20Parser.BlockStatementContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_blockStatements + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBlockStatements"): + listener.enterBlockStatements(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBlockStatements"): + listener.exitBlockStatements(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBlockStatements"): + return visitor.visitBlockStatements(self) + else: + return visitor.visitChildren(self) + + def blockStatements(self): + + localctx = Java20Parser.BlockStatementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 278, self.RULE_blockStatements) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1678 + self.blockStatement() + self.state = 1682 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420531208) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1679 + self.blockStatement() + self.state = 1684 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BlockStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def localClassOrInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalClassOrInterfaceDeclarationContext, 0) + + def localVariableDeclarationStatement(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationStatementContext, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_blockStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBlockStatement"): + listener.enterBlockStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBlockStatement"): + listener.exitBlockStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBlockStatement"): + return visitor.visitBlockStatement(self) + else: + return visitor.visitChildren(self) + + def blockStatement(self): + + localctx = Java20Parser.BlockStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 280, self.RULE_blockStatement) + try: + self.state = 1688 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 182, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1685 + self.localClassOrInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1686 + self.localVariableDeclarationStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1687 + self.statement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LocalClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext, 0) + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalInterfaceDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localClassOrInterfaceDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLocalClassOrInterfaceDeclaration"): + listener.enterLocalClassOrInterfaceDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLocalClassOrInterfaceDeclaration"): + listener.exitLocalClassOrInterfaceDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLocalClassOrInterfaceDeclaration"): + return visitor.visitLocalClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + def localClassOrInterfaceDeclaration(self): + + localctx = Java20Parser.LocalClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 282, self.RULE_localClassOrInterfaceDeclaration) + try: + self.state = 1692 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 183, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1690 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1691 + self.normalInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LocalVariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableType(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableTypeContext, 0) + + def variableModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext, i) + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableDeclaration + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLocalVariableDeclaration"): + listener.enterLocalVariableDeclaration(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLocalVariableDeclaration"): + listener.exitLocalVariableDeclaration(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLocalVariableDeclaration"): + return visitor.visitLocalVariableDeclaration(self) + else: + return visitor.visitChildren(self) + + def localVariableDeclaration(self): + + localctx = Java20Parser.LocalVariableDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 284, self.RULE_localVariableDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1697 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 35 or _la == 86: + self.state = 1694 + self.variableModifier() + self.state = 1699 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1700 + self.localVariableType() + self.state = 1702 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 185, self._ctx) + if la_ == 1: + self.state = 1701 + self.variableDeclaratorList() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LocalVariableTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLocalVariableType"): + listener.enterLocalVariableType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLocalVariableType"): + listener.exitLocalVariableType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLocalVariableType"): + return visitor.visitLocalVariableType(self) + else: + return visitor.visitChildren(self) + + def localVariableType(self): + + localctx = Java20Parser.LocalVariableTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 286, self.RULE_localVariableType) + try: + self.state = 1706 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1704 + self.unannType() + pass + elif token in [15]: + self.enterOuterAlt(localctx, 2) + self.state = 1705 + self.match(Java20Parser.VAR) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LocalVariableDeclarationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableDeclarationStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLocalVariableDeclarationStatement"): + listener.enterLocalVariableDeclarationStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLocalVariableDeclarationStatement"): + listener.exitLocalVariableDeclarationStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLocalVariableDeclarationStatement"): + return visitor.visitLocalVariableDeclarationStatement(self) + else: + return visitor.visitChildren(self) + + def localVariableDeclarationStatement(self): + + localctx = Java20Parser.LocalVariableDeclarationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 288, self.RULE_localVariableDeclarationStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1708 + self.localVariableDeclaration() + self.state = 1709 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(Java20Parser.StatementWithoutTrailingSubstatementContext, 0) + + def labeledStatement(self): + return self.getTypedRuleContext(Java20Parser.LabeledStatementContext, 0) + + def ifThenStatement(self): + return self.getTypedRuleContext(Java20Parser.IfThenStatementContext, 0) + + def ifThenElseStatement(self): + return self.getTypedRuleContext(Java20Parser.IfThenElseStatementContext, 0) + + def whileStatement(self): + return self.getTypedRuleContext(Java20Parser.WhileStatementContext, 0) + + def forStatement(self): + return self.getTypedRuleContext(Java20Parser.ForStatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_statement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatement"): + listener.enterStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatement"): + listener.exitStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatement"): + return visitor.visitStatement(self) + else: + return visitor.visitChildren(self) + + def statement(self): + + localctx = Java20Parser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 290, self.RULE_statement) + try: + self.state = 1717 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 187, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1711 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1712 + self.labeledStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1713 + self.ifThenStatement() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1714 + self.ifThenElseStatement() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1715 + self.whileStatement() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1716 + self.forStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(Java20Parser.StatementWithoutTrailingSubstatementContext, 0) + + def labeledStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.LabeledStatementNoShortIfContext, 0) + + def ifThenElseStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.IfThenElseStatementNoShortIfContext, 0) + + def whileStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.WhileStatementNoShortIfContext, 0) + + def forStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.ForStatementNoShortIfContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_statementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatementNoShortIf"): + listener.enterStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatementNoShortIf"): + listener.exitStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatementNoShortIf"): + return visitor.visitStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def statementNoShortIf(self): + + localctx = Java20Parser.StatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 292, self.RULE_statementNoShortIf) + try: + self.state = 1724 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 188, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1719 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1720 + self.labeledStatementNoShortIf() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1721 + self.ifThenElseStatementNoShortIf() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1722 + self.whileStatementNoShortIf() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1723 + self.forStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StatementWithoutTrailingSubstatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def emptyStatement_(self): + return self.getTypedRuleContext(Java20Parser.EmptyStatement_Context, 0) + + def expressionStatement(self): + return self.getTypedRuleContext(Java20Parser.ExpressionStatementContext, 0) + + def assertStatement(self): + return self.getTypedRuleContext(Java20Parser.AssertStatementContext, 0) + + def switchStatement(self): + return self.getTypedRuleContext(Java20Parser.SwitchStatementContext, 0) + + def doStatement(self): + return self.getTypedRuleContext(Java20Parser.DoStatementContext, 0) + + def breakStatement(self): + return self.getTypedRuleContext(Java20Parser.BreakStatementContext, 0) + + def continueStatement(self): + return self.getTypedRuleContext(Java20Parser.ContinueStatementContext, 0) + + def returnStatement(self): + return self.getTypedRuleContext(Java20Parser.ReturnStatementContext, 0) + + def synchronizedStatement(self): + return self.getTypedRuleContext(Java20Parser.SynchronizedStatementContext, 0) + + def throwStatement(self): + return self.getTypedRuleContext(Java20Parser.ThrowStatementContext, 0) + + def tryStatement(self): + return self.getTypedRuleContext(Java20Parser.TryStatementContext, 0) + + def yieldStatement(self): + return self.getTypedRuleContext(Java20Parser.YieldStatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_statementWithoutTrailingSubstatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatementWithoutTrailingSubstatement"): + listener.enterStatementWithoutTrailingSubstatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatementWithoutTrailingSubstatement"): + listener.exitStatementWithoutTrailingSubstatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatementWithoutTrailingSubstatement"): + return visitor.visitStatementWithoutTrailingSubstatement(self) + else: + return visitor.visitChildren(self) + + def statementWithoutTrailingSubstatement(self): + + localctx = Java20Parser.StatementWithoutTrailingSubstatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 294, self.RULE_statementWithoutTrailingSubstatement) + try: + self.state = 1739 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [78]: + self.enterOuterAlt(localctx, 1) + self.state = 1726 + self.block() + pass + elif token in [82]: + self.enterOuterAlt(localctx, 2) + self.state = 1727 + self.emptyStatement_() + pass + elif token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 102, 103, + 123]: + self.enterOuterAlt(localctx, 3) + self.state = 1728 + self.expressionStatement() + pass + elif token in [19]: + self.enterOuterAlt(localctx, 4) + self.state = 1729 + self.assertStatement() + pass + elif token in [58]: + self.enterOuterAlt(localctx, 5) + self.state = 1730 + self.switchStatement() + pass + elif token in [30]: + self.enterOuterAlt(localctx, 6) + self.state = 1731 + self.doStatement() + pass + elif token in [21]: + self.enterOuterAlt(localctx, 7) + self.state = 1732 + self.breakStatement() + pass + elif token in [28]: + self.enterOuterAlt(localctx, 8) + self.state = 1733 + self.continueStatement() + pass + elif token in [53]: + self.enterOuterAlt(localctx, 9) + self.state = 1734 + self.returnStatement() + pass + elif token in [59]: + self.enterOuterAlt(localctx, 10) + self.state = 1735 + self.synchronizedStatement() + pass + elif token in [61]: + self.enterOuterAlt(localctx, 11) + self.state = 1736 + self.throwStatement() + pass + elif token in [64]: + self.enterOuterAlt(localctx, 12) + self.state = 1737 + self.tryStatement() + pass + elif token in [17]: + self.enterOuterAlt(localctx, 13) + self.state = 1738 + self.yieldStatement() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EmptyStatement_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_emptyStatement_ + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEmptyStatement_"): + listener.enterEmptyStatement_(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEmptyStatement_"): + listener.exitEmptyStatement_(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEmptyStatement_"): + return visitor.visitEmptyStatement_(self) + else: + return visitor.visitChildren(self) + + def emptyStatement_(self): + + localctx = Java20Parser.EmptyStatement_Context(self, self._ctx, self.state) + self.enterRule(localctx, 296, self.RULE_emptyStatement_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1741 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LabeledStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_labeledStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLabeledStatement"): + listener.enterLabeledStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLabeledStatement"): + listener.exitLabeledStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLabeledStatement"): + return visitor.visitLabeledStatement(self) + else: + return visitor.visitChildren(self) + + def labeledStatement(self): + + localctx = Java20Parser.LabeledStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 298, self.RULE_labeledStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1743 + self.match(Java20Parser.Identifier) + self.state = 1744 + self.match(Java20Parser.COLON) + self.state = 1745 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LabeledStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_labeledStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLabeledStatementNoShortIf"): + listener.enterLabeledStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLabeledStatementNoShortIf"): + listener.exitLabeledStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLabeledStatementNoShortIf"): + return visitor.visitLabeledStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def labeledStatementNoShortIf(self): + + localctx = Java20Parser.LabeledStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 300, self.RULE_labeledStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1747 + self.match(Java20Parser.Identifier) + self.state = 1748 + self.match(Java20Parser.COLON) + self.state = 1749 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_expressionStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpressionStatement"): + listener.enterExpressionStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpressionStatement"): + listener.exitExpressionStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpressionStatement"): + return visitor.visitExpressionStatement(self) + else: + return visitor.visitChildren(self) + + def expressionStatement(self): + + localctx = Java20Parser.ExpressionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 302, self.RULE_expressionStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1751 + self.statementExpression() + self.state = 1752 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StatementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignment(self): + return self.getTypedRuleContext(Java20Parser.AssignmentContext, 0) + + def preIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreIncrementExpressionContext, 0) + + def preDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreDecrementExpressionContext, 0) + + def postIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PostIncrementExpressionContext, 0) + + def postDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PostDecrementExpressionContext, 0) + + def methodInvocation(self): + return self.getTypedRuleContext(Java20Parser.MethodInvocationContext, 0) + + def classInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ClassInstanceCreationExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_statementExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatementExpression"): + listener.enterStatementExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatementExpression"): + listener.exitStatementExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatementExpression"): + return visitor.visitStatementExpression(self) + else: + return visitor.visitChildren(self) + + def statementExpression(self): + + localctx = Java20Parser.StatementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 304, self.RULE_statementExpression) + try: + self.state = 1761 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 190, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1754 + self.assignment() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1755 + self.preIncrementExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1756 + self.preDecrementExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1757 + self.postIncrementExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1758 + self.postDecrementExpression() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1759 + self.methodInvocation() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1760 + self.classInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IfThenStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIfThenStatement"): + listener.enterIfThenStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIfThenStatement"): + listener.exitIfThenStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIfThenStatement"): + return visitor.visitIfThenStatement(self) + else: + return visitor.visitChildren(self) + + def ifThenStatement(self): + + localctx = Java20Parser.IfThenStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 306, self.RULE_ifThenStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1763 + self.match(Java20Parser.IF) + self.state = 1764 + self.match(Java20Parser.LPAREN) + self.state = 1765 + self.expression() + self.state = 1766 + self.match(Java20Parser.RPAREN) + self.state = 1767 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IfThenElseStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, 0) + + def ELSE(self): + return self.getToken(Java20Parser.ELSE, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenElseStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIfThenElseStatement"): + listener.enterIfThenElseStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIfThenElseStatement"): + listener.exitIfThenElseStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIfThenElseStatement"): + return visitor.visitIfThenElseStatement(self) + else: + return visitor.visitChildren(self) + + def ifThenElseStatement(self): + + localctx = Java20Parser.IfThenElseStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 308, self.RULE_ifThenElseStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1769 + self.match(Java20Parser.IF) + self.state = 1770 + self.match(Java20Parser.LPAREN) + self.state = 1771 + self.expression() + self.state = 1772 + self.match(Java20Parser.RPAREN) + self.state = 1773 + self.statementNoShortIf() + self.state = 1774 + self.match(Java20Parser.ELSE) + self.state = 1775 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IfThenElseStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.StatementNoShortIfContext) + else: + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, i) + + def ELSE(self): + return self.getToken(Java20Parser.ELSE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenElseStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIfThenElseStatementNoShortIf"): + listener.enterIfThenElseStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIfThenElseStatementNoShortIf"): + listener.exitIfThenElseStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIfThenElseStatementNoShortIf"): + return visitor.visitIfThenElseStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def ifThenElseStatementNoShortIf(self): + + localctx = Java20Parser.IfThenElseStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 310, self.RULE_ifThenElseStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1777 + self.match(Java20Parser.IF) + self.state = 1778 + self.match(Java20Parser.LPAREN) + self.state = 1779 + self.expression() + self.state = 1780 + self.match(Java20Parser.RPAREN) + self.state = 1781 + self.statementNoShortIf() + self.state = 1782 + self.match(Java20Parser.ELSE) + self.state = 1783 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AssertStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSERT(self): + return self.getToken(Java20Parser.ASSERT, 0) + + def expression(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.ExpressionContext, i) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assertStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssertStatement"): + listener.enterAssertStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssertStatement"): + listener.exitAssertStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssertStatement"): + return visitor.visitAssertStatement(self) + else: + return visitor.visitChildren(self) + + def assertStatement(self): + + localctx = Java20Parser.AssertStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 312, self.RULE_assertStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1785 + self.match(Java20Parser.ASSERT) + self.state = 1786 + self.expression() + self.state = 1789 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 94: + self.state = 1787 + self.match(Java20Parser.COLON) + self.state = 1788 + self.expression() + + self.state = 1791 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(Java20Parser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(Java20Parser.SwitchBlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchStatement"): + listener.enterSwitchStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchStatement"): + listener.exitSwitchStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchStatement"): + return visitor.visitSwitchStatement(self) + else: + return visitor.visitChildren(self) + + def switchStatement(self): + + localctx = Java20Parser.SwitchStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 314, self.RULE_switchStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1793 + self.match(Java20Parser.SWITCH) + self.state = 1794 + self.match(Java20Parser.LPAREN) + self.state = 1795 + self.expression() + self.state = 1796 + self.match(Java20Parser.RPAREN) + self.state = 1797 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def switchRule(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchRuleContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchRuleContext, i) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def switchBlockStatementGroup(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchBlockStatementGroupContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchBlockStatementGroupContext, i) + + def switchLabel(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchLabelContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext, i) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COLON) + else: + return self.getToken(Java20Parser.COLON, i) + + def getRuleIndex(self): + return Java20Parser.RULE_switchBlock + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchBlock"): + listener.enterSwitchBlock(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchBlock"): + listener.exitSwitchBlock(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchBlock"): + return visitor.visitSwitchBlock(self) + else: + return visitor.visitChildren(self) + + def switchBlock(self): + + localctx = Java20Parser.SwitchBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 316, self.RULE_switchBlock) + self._la = 0 # Token type + try: + self.state = 1825 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 195, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1799 + self.match(Java20Parser.LBRACE) + self.state = 1800 + self.switchRule() + self.state = 1804 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 23 or _la == 29: + self.state = 1801 + self.switchRule() + self.state = 1806 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1807 + self.match(Java20Parser.RBRACE) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1809 + self.match(Java20Parser.LBRACE) + self.state = 1813 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 193, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1810 + self.switchBlockStatementGroup() + self.state = 1815 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 193, self._ctx) + + self.state = 1821 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 23 or _la == 29: + self.state = 1816 + self.switchLabel() + self.state = 1817 + self.match(Java20Parser.COLON) + self.state = 1823 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1824 + self.match(Java20Parser.RBRACE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchRuleContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self): + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext, 0) + + def ARROW(self): + return self.getToken(Java20Parser.ARROW, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def throwStatement(self): + return self.getTypedRuleContext(Java20Parser.ThrowStatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchRule + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchRule"): + listener.enterSwitchRule(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchRule"): + listener.exitSwitchRule(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchRule"): + return visitor.visitSwitchRule(self) + else: + return visitor.visitChildren(self) + + def switchRule(self): + + localctx = Java20Parser.SwitchRuleContext(self, self._ctx, self.state) + self.enterRule(localctx, 318, self.RULE_switchRule) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1827 + self.switchLabel() + self.state = 1828 + self.match(Java20Parser.ARROW) + self.state = 1834 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, + 102, 103, 104, 105, 123]: + self.state = 1829 + self.expression() + self.state = 1830 + self.match(Java20Parser.SEMI) + pass + elif token in [78]: + self.state = 1832 + self.block() + pass + elif token in [61]: + self.state = 1833 + self.throwStatement() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchBlockStatementGroupContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchLabelContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext, i) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COLON) + else: + return self.getToken(Java20Parser.COLON, i) + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchBlockStatementGroup + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchBlockStatementGroup"): + listener.enterSwitchBlockStatementGroup(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchBlockStatementGroup"): + listener.exitSwitchBlockStatementGroup(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchBlockStatementGroup"): + return visitor.visitSwitchBlockStatementGroup(self) + else: + return visitor.visitChildren(self) + + def switchBlockStatementGroup(self): + + localctx = Java20Parser.SwitchBlockStatementGroupContext(self, self._ctx, self.state) + self.enterRule(localctx, 320, self.RULE_switchBlockStatementGroup) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1836 + self.switchLabel() + self.state = 1837 + self.match(Java20Parser.COLON) + self.state = 1843 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 23 or _la == 29: + self.state = 1838 + self.switchLabel() + self.state = 1839 + self.match(Java20Parser.COLON) + self.state = 1845 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1846 + self.blockStatements() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchLabelContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CASE(self): + return self.getToken(Java20Parser.CASE, 0) + + def caseConstant(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.CaseConstantContext) + else: + return self.getTypedRuleContext(Java20Parser.CaseConstantContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchLabel + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchLabel"): + listener.enterSwitchLabel(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchLabel"): + listener.exitSwitchLabel(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchLabel"): + return visitor.visitSwitchLabel(self) + else: + return visitor.visitChildren(self) + + def switchLabel(self): + + localctx = Java20Parser.SwitchLabelContext(self, self._ctx, self.state) + self.enterRule(localctx, 322, self.RULE_switchLabel) + self._la = 0 # Token type + try: + self.state = 1858 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [23]: + self.enterOuterAlt(localctx, 1) + self.state = 1848 + self.match(Java20Parser.CASE) + self.state = 1849 + self.caseConstant() + self.state = 1854 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1850 + self.match(Java20Parser.COMMA) + self.state = 1851 + self.caseConstant() + self.state = 1856 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 1857 + self.match(Java20Parser.DEFAULT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CaseConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_caseConstant + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCaseConstant"): + listener.enterCaseConstant(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCaseConstant"): + listener.exitCaseConstant(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCaseConstant"): + return visitor.visitCaseConstant(self) + else: + return visitor.visitChildren(self) + + def caseConstant(self): + + localctx = Java20Parser.CaseConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 324, self.RULE_caseConstant) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1860 + self.conditionalExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WhileStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_whileStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWhileStatement"): + listener.enterWhileStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWhileStatement"): + listener.exitWhileStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWhileStatement"): + return visitor.visitWhileStatement(self) + else: + return visitor.visitChildren(self) + + def whileStatement(self): + + localctx = Java20Parser.WhileStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 326, self.RULE_whileStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1862 + self.match(Java20Parser.WHILE) + self.state = 1863 + self.match(Java20Parser.LPAREN) + self.state = 1864 + self.expression() + self.state = 1865 + self.match(Java20Parser.RPAREN) + self.state = 1866 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WhileStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_whileStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWhileStatementNoShortIf"): + listener.enterWhileStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWhileStatementNoShortIf"): + listener.exitWhileStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWhileStatementNoShortIf"): + return visitor.visitWhileStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def whileStatementNoShortIf(self): + + localctx = Java20Parser.WhileStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 328, self.RULE_whileStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1868 + self.match(Java20Parser.WHILE) + self.state = 1869 + self.match(Java20Parser.LPAREN) + self.state = 1870 + self.expression() + self.state = 1871 + self.match(Java20Parser.RPAREN) + self.state = 1872 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DoStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DO(self): + return self.getToken(Java20Parser.DO, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_doStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDoStatement"): + listener.enterDoStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDoStatement"): + listener.exitDoStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDoStatement"): + return visitor.visitDoStatement(self) + else: + return visitor.visitChildren(self) + + def doStatement(self): + + localctx = Java20Parser.DoStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 330, self.RULE_doStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1874 + self.match(Java20Parser.DO) + self.state = 1875 + self.statement() + self.state = 1876 + self.match(Java20Parser.WHILE) + self.state = 1877 + self.match(Java20Parser.LPAREN) + self.state = 1878 + self.expression() + self.state = 1879 + self.match(Java20Parser.RPAREN) + self.state = 1880 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatement(self): + return self.getTypedRuleContext(Java20Parser.BasicForStatementContext, 0) + + def enhancedForStatement(self): + return self.getTypedRuleContext(Java20Parser.EnhancedForStatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_forStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterForStatement"): + listener.enterForStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitForStatement"): + listener.exitForStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitForStatement"): + return visitor.visitForStatement(self) + else: + return visitor.visitChildren(self) + + def forStatement(self): + + localctx = Java20Parser.ForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 332, self.RULE_forStatement) + try: + self.state = 1884 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 200, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1882 + self.basicForStatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1883 + self.enhancedForStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.BasicForStatementNoShortIfContext, 0) + + def enhancedForStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.EnhancedForStatementNoShortIfContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_forStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterForStatementNoShortIf"): + listener.enterForStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitForStatementNoShortIf"): + listener.exitForStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitForStatementNoShortIf"): + return visitor.visitForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def forStatementNoShortIf(self): + + localctx = Java20Parser.ForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 334, self.RULE_forStatementNoShortIf) + try: + self.state = 1888 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 201, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1886 + self.basicForStatementNoShortIf() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1887 + self.enhancedForStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BasicForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def SEMI(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def forInit(self): + return self.getTypedRuleContext(Java20Parser.ForInitContext, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def forUpdate(self): + return self.getTypedRuleContext(Java20Parser.ForUpdateContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_basicForStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBasicForStatement"): + listener.enterBasicForStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBasicForStatement"): + listener.exitBasicForStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBasicForStatement"): + return visitor.visitBasicForStatement(self) + else: + return visitor.visitChildren(self) + + def basicForStatement(self): + + localctx = Java20Parser.BasicForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 336, self.RULE_basicForStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1890 + self.match(Java20Parser.FOR) + self.state = 1891 + self.match(Java20Parser.LPAREN) + self.state = 1893 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084123136) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1892 + self.forInit() + + self.state = 1895 + self.match(Java20Parser.SEMI) + self.state = 1897 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1896 + self.expression() + + self.state = 1899 + self.match(Java20Parser.SEMI) + self.state = 1901 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724352000) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1900 + self.forUpdate() + + self.state = 1903 + self.match(Java20Parser.RPAREN) + self.state = 1904 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BasicForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def SEMI(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, 0) + + def forInit(self): + return self.getTypedRuleContext(Java20Parser.ForInitContext, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def forUpdate(self): + return self.getTypedRuleContext(Java20Parser.ForUpdateContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_basicForStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBasicForStatementNoShortIf"): + listener.enterBasicForStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBasicForStatementNoShortIf"): + listener.exitBasicForStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBasicForStatementNoShortIf"): + return visitor.visitBasicForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def basicForStatementNoShortIf(self): + + localctx = Java20Parser.BasicForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 338, self.RULE_basicForStatementNoShortIf) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1906 + self.match(Java20Parser.FOR) + self.state = 1907 + self.match(Java20Parser.LPAREN) + self.state = 1909 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084123136) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1908 + self.forInit() + + self.state = 1911 + self.match(Java20Parser.SEMI) + self.state = 1913 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1912 + self.expression() + + self.state = 1915 + self.match(Java20Parser.SEMI) + self.state = 1917 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724352000) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1916 + self.forUpdate() + + self.state = 1919 + self.match(Java20Parser.RPAREN) + self.state = 1920 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ForInitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionListContext, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_forInit + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterForInit"): + listener.enterForInit(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitForInit"): + listener.exitForInit(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitForInit"): + return visitor.visitForInit(self) + else: + return visitor.visitChildren(self) + + def forInit(self): + + localctx = Java20Parser.ForInitContext(self, self._ctx, self.state) + self.enterRule(localctx, 340, self.RULE_forInit) + try: + self.state = 1924 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 208, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1922 + self.statementExpressionList() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1923 + self.localVariableDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ForUpdateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionListContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_forUpdate + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterForUpdate"): + listener.enterForUpdate(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitForUpdate"): + listener.exitForUpdate(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitForUpdate"): + return visitor.visitForUpdate(self) + else: + return visitor.visitChildren(self) + + def forUpdate(self): + + localctx = Java20Parser.ForUpdateContext(self, self._ctx, self.state) + self.enterRule(localctx, 342, self.RULE_forUpdate) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1926 + self.statementExpressionList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StatementExpressionListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.StatementExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.StatementExpressionContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_statementExpressionList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStatementExpressionList"): + listener.enterStatementExpressionList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStatementExpressionList"): + listener.exitStatementExpressionList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStatementExpressionList"): + return visitor.visitStatementExpressionList(self) + else: + return visitor.visitChildren(self) + + def statementExpressionList(self): + + localctx = Java20Parser.StatementExpressionListContext(self, self._ctx, self.state) + self.enterRule(localctx, 344, self.RULE_statementExpressionList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1928 + self.statementExpression() + self.state = 1933 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 1929 + self.match(Java20Parser.COMMA) + self.state = 1930 + self.statementExpression() + self.state = 1935 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnhancedForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enhancedForStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnhancedForStatement"): + listener.enterEnhancedForStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnhancedForStatement"): + listener.exitEnhancedForStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnhancedForStatement"): + return visitor.visitEnhancedForStatement(self) + else: + return visitor.visitChildren(self) + + def enhancedForStatement(self): + + localctx = Java20Parser.EnhancedForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 346, self.RULE_enhancedForStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1936 + self.match(Java20Parser.FOR) + self.state = 1937 + self.match(Java20Parser.LPAREN) + self.state = 1938 + self.localVariableDeclaration() + self.state = 1939 + self.match(Java20Parser.COLON) + self.state = 1940 + self.expression() + self.state = 1941 + self.match(Java20Parser.RPAREN) + self.state = 1942 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class EnhancedForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_enhancedForStatementNoShortIf + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEnhancedForStatementNoShortIf"): + listener.enterEnhancedForStatementNoShortIf(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEnhancedForStatementNoShortIf"): + listener.exitEnhancedForStatementNoShortIf(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEnhancedForStatementNoShortIf"): + return visitor.visitEnhancedForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + def enhancedForStatementNoShortIf(self): + + localctx = Java20Parser.EnhancedForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 348, self.RULE_enhancedForStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1944 + self.match(Java20Parser.FOR) + self.state = 1945 + self.match(Java20Parser.LPAREN) + self.state = 1946 + self.localVariableDeclaration() + self.state = 1947 + self.match(Java20Parser.COLON) + self.state = 1948 + self.expression() + self.state = 1949 + self.match(Java20Parser.RPAREN) + self.state = 1950 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BreakStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def BREAK(self): + return self.getToken(Java20Parser.BREAK, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_breakStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBreakStatement"): + listener.enterBreakStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBreakStatement"): + listener.exitBreakStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBreakStatement"): + return visitor.visitBreakStatement(self) + else: + return visitor.visitChildren(self) + + def breakStatement(self): + + localctx = Java20Parser.BreakStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 350, self.RULE_breakStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1952 + self.match(Java20Parser.BREAK) + self.state = 1954 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 123: + self.state = 1953 + self.match(Java20Parser.Identifier) + + self.state = 1956 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ContinueStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CONTINUE(self): + return self.getToken(Java20Parser.CONTINUE, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_continueStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterContinueStatement"): + listener.enterContinueStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitContinueStatement"): + listener.exitContinueStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitContinueStatement"): + return visitor.visitContinueStatement(self) + else: + return visitor.visitChildren(self) + + def continueStatement(self): + + localctx = Java20Parser.ContinueStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 352, self.RULE_continueStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1958 + self.match(Java20Parser.CONTINUE) + self.state = 1960 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 123: + self.state = 1959 + self.match(Java20Parser.Identifier) + + self.state = 1962 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ReturnStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def RETURN(self): + return self.getToken(Java20Parser.RETURN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_returnStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReturnStatement"): + listener.enterReturnStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReturnStatement"): + listener.exitReturnStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReturnStatement"): + return visitor.visitReturnStatement(self) + else: + return visitor.visitChildren(self) + + def returnStatement(self): + + localctx = Java20Parser.ReturnStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 354, self.RULE_returnStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1964 + self.match(Java20Parser.RETURN) + self.state = 1966 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1965 + self.expression() + + self.state = 1968 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ThrowStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROW(self): + return self.getToken(Java20Parser.THROW, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_throwStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterThrowStatement"): + listener.enterThrowStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitThrowStatement"): + listener.exitThrowStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitThrowStatement"): + return visitor.visitThrowStatement(self) + else: + return visitor.visitChildren(self) + + def throwStatement(self): + + localctx = Java20Parser.ThrowStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 356, self.RULE_throwStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1970 + self.match(Java20Parser.THROW) + self.state = 1971 + self.expression() + self.state = 1972 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SynchronizedStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def SYNCHRONIZED(self): + return self.getToken(Java20Parser.SYNCHRONIZED, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_synchronizedStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSynchronizedStatement"): + listener.enterSynchronizedStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSynchronizedStatement"): + listener.exitSynchronizedStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSynchronizedStatement"): + return visitor.visitSynchronizedStatement(self) + else: + return visitor.visitChildren(self) + + def synchronizedStatement(self): + + localctx = Java20Parser.SynchronizedStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 358, self.RULE_synchronizedStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1974 + self.match(Java20Parser.SYNCHRONIZED) + self.state = 1975 + self.match(Java20Parser.LPAREN) + self.state = 1976 + self.expression() + self.state = 1977 + self.match(Java20Parser.RPAREN) + self.state = 1978 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TryStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(Java20Parser.TRY, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def catches(self): + return self.getTypedRuleContext(Java20Parser.CatchesContext, 0) + + def finallyBlock(self): + return self.getTypedRuleContext(Java20Parser.FinallyBlockContext, 0) + + def tryWithResourcesStatement(self): + return self.getTypedRuleContext(Java20Parser.TryWithResourcesStatementContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_tryStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTryStatement"): + listener.enterTryStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTryStatement"): + listener.exitTryStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTryStatement"): + return visitor.visitTryStatement(self) + else: + return visitor.visitChildren(self) + + def tryStatement(self): + + localctx = Java20Parser.TryStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 360, self.RULE_tryStatement) + self._la = 0 # Token type + try: + self.state = 1996 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 214, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1980 + self.match(Java20Parser.TRY) + self.state = 1981 + self.block() + self.state = 1982 + self.catches() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1984 + self.match(Java20Parser.TRY) + self.state = 1985 + self.block() + self.state = 1986 + self.finallyBlock() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1988 + self.match(Java20Parser.TRY) + self.state = 1989 + self.block() + self.state = 1991 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 24: + self.state = 1990 + self.catches() + + self.state = 1993 + self.finallyBlock() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1995 + self.tryWithResourcesStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CatchesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchClause(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.CatchClauseContext) + else: + return self.getTypedRuleContext(Java20Parser.CatchClauseContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_catches + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCatches"): + listener.enterCatches(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCatches"): + listener.exitCatches(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCatches"): + return visitor.visitCatches(self) + else: + return visitor.visitChildren(self) + + def catches(self): + + localctx = Java20Parser.CatchesContext(self, self._ctx, self.state) + self.enterRule(localctx, 362, self.RULE_catches) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1998 + self.catchClause() + self.state = 2002 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 24: + self.state = 1999 + self.catchClause() + self.state = 2004 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CatchClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CATCH(self): + return self.getToken(Java20Parser.CATCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def catchFormalParameter(self): + return self.getTypedRuleContext(Java20Parser.CatchFormalParameterContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_catchClause + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCatchClause"): + listener.enterCatchClause(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCatchClause"): + listener.exitCatchClause(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCatchClause"): + return visitor.visitCatchClause(self) + else: + return visitor.visitChildren(self) + + def catchClause(self): + + localctx = Java20Parser.CatchClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 364, self.RULE_catchClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2005 + self.match(Java20Parser.CATCH) + self.state = 2006 + self.match(Java20Parser.LPAREN) + self.state = 2007 + self.catchFormalParameter() + self.state = 2008 + self.match(Java20Parser.RPAREN) + self.state = 2009 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CatchFormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchType(self): + return self.getTypedRuleContext(Java20Parser.CatchTypeContext, 0) + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext, 0) + + def variableModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_catchFormalParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCatchFormalParameter"): + listener.enterCatchFormalParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCatchFormalParameter"): + listener.exitCatchFormalParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCatchFormalParameter"): + return visitor.visitCatchFormalParameter(self) + else: + return visitor.visitChildren(self) + + def catchFormalParameter(self): + + localctx = Java20Parser.CatchFormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 366, self.RULE_catchFormalParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2014 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 35 or _la == 86: + self.state = 2011 + self.variableModifier() + self.state = 2016 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2017 + self.catchType() + self.state = 2018 + self.variableDeclaratorId() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CatchTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassTypeContext, 0) + + def BITOR(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.BITOR) + else: + return self.getToken(Java20Parser.BITOR, i) + + def classType(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_catchType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCatchType"): + listener.enterCatchType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCatchType"): + listener.exitCatchType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCatchType"): + return visitor.visitCatchType(self) + else: + return visitor.visitChildren(self) + + def catchType(self): + + localctx = Java20Parser.CatchTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 368, self.RULE_catchType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2020 + self.unannClassType() + self.state = 2025 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 109: + self.state = 2021 + self.match(Java20Parser.BITOR) + self.state = 2022 + self.classType() + self.state = 2027 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FinallyBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FINALLY(self): + return self.getToken(Java20Parser.FINALLY, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_finallyBlock + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFinallyBlock"): + listener.enterFinallyBlock(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFinallyBlock"): + listener.exitFinallyBlock(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFinallyBlock"): + return visitor.visitFinallyBlock(self) + else: + return visitor.visitChildren(self) + + def finallyBlock(self): + + localctx = Java20Parser.FinallyBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 370, self.RULE_finallyBlock) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2028 + self.match(Java20Parser.FINALLY) + self.state = 2029 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TryWithResourcesStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(Java20Parser.TRY, 0) + + def resourceSpecification(self): + return self.getTypedRuleContext(Java20Parser.ResourceSpecificationContext, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def catches(self): + return self.getTypedRuleContext(Java20Parser.CatchesContext, 0) + + def finallyBlock(self): + return self.getTypedRuleContext(Java20Parser.FinallyBlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_tryWithResourcesStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTryWithResourcesStatement"): + listener.enterTryWithResourcesStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTryWithResourcesStatement"): + listener.exitTryWithResourcesStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTryWithResourcesStatement"): + return visitor.visitTryWithResourcesStatement(self) + else: + return visitor.visitChildren(self) + + def tryWithResourcesStatement(self): + + localctx = Java20Parser.TryWithResourcesStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 372, self.RULE_tryWithResourcesStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2031 + self.match(Java20Parser.TRY) + self.state = 2032 + self.resourceSpecification() + self.state = 2033 + self.block() + self.state = 2035 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 24: + self.state = 2034 + self.catches() + + self.state = 2038 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 36: + self.state = 2037 + self.finallyBlock() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ResourceSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def resourceList(self): + return self.getTypedRuleContext(Java20Parser.ResourceListContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_resourceSpecification + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterResourceSpecification"): + listener.enterResourceSpecification(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitResourceSpecification"): + listener.exitResourceSpecification(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitResourceSpecification"): + return visitor.visitResourceSpecification(self) + else: + return visitor.visitChildren(self) + + def resourceSpecification(self): + + localctx = Java20Parser.ResourceSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 374, self.RULE_resourceSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2040 + self.match(Java20Parser.LPAREN) + self.state = 2041 + self.resourceList() + self.state = 2043 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 82: + self.state = 2042 + self.match(Java20Parser.SEMI) + + self.state = 2045 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ResourceListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def resource(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ResourceContext) + else: + return self.getTypedRuleContext(Java20Parser.ResourceContext, i) + + def SEMI(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def getRuleIndex(self): + return Java20Parser.RULE_resourceList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterResourceList"): + listener.enterResourceList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitResourceList"): + listener.exitResourceList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitResourceList"): + return visitor.visitResourceList(self) + else: + return visitor.visitChildren(self) + + def resourceList(self): + + localctx = Java20Parser.ResourceListContext(self, self._ctx, self.state) + self.enterRule(localctx, 376, self.RULE_resourceList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2047 + self.resource() + self.state = 2052 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 221, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 2048 + self.match(Java20Parser.SEMI) + self.state = 2049 + self.resource() + self.state = 2054 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 221, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ResourceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def variableAccess(self): + return self.getTypedRuleContext(Java20Parser.VariableAccessContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_resource + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterResource"): + listener.enterResource(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitResource"): + listener.exitResource(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitResource"): + return visitor.visitResource(self) + else: + return visitor.visitChildren(self) + + def resource(self): + + localctx = Java20Parser.ResourceContext(self, self._ctx, self.state) + self.enterRule(localctx, 378, self.RULE_resource) + try: + self.state = 2057 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 222, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2055 + self.localVariableDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2056 + self.variableAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VariableAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def fieldAccess(self): + return self.getTypedRuleContext(Java20Parser.FieldAccessContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableAccess + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVariableAccess"): + listener.enterVariableAccess(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVariableAccess"): + listener.exitVariableAccess(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVariableAccess"): + return visitor.visitVariableAccess(self) + else: + return visitor.visitChildren(self) + + def variableAccess(self): + + localctx = Java20Parser.VariableAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 380, self.RULE_variableAccess) + try: + self.state = 2061 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 223, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2059 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2060 + self.fieldAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class YieldStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def YIELD(self): + return self.getToken(Java20Parser.YIELD, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_yieldStatement + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterYieldStatement"): + listener.enterYieldStatement(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitYieldStatement"): + listener.exitYieldStatement(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitYieldStatement"): + return visitor.visitYieldStatement(self) + else: + return visitor.visitChildren(self) + + def yieldStatement(self): + + localctx = Java20Parser.YieldStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 382, self.RULE_yieldStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2063 + self.match(Java20Parser.YIELD) + self.state = 2064 + self.expression() + self.state = 2065 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typePattern(self): + return self.getTypedRuleContext(Java20Parser.TypePatternContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPattern"): + listener.enterPattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPattern"): + listener.exitPattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPattern"): + return visitor.visitPattern(self) + else: + return visitor.visitChildren(self) + + def pattern(self): + + localctx = Java20Parser.PatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 384, self.RULE_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2067 + self.typePattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypePatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typePattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypePattern"): + listener.enterTypePattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypePattern"): + listener.exitTypePattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypePattern"): + return visitor.visitTypePattern(self) + else: + return visitor.visitChildren(self) + + def typePattern(self): + + localctx = Java20Parser.TypePatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 386, self.RULE_typePattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2069 + self.localVariableDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext, 0) + + def assignmentExpression(self): + return self.getTypedRuleContext(Java20Parser.AssignmentExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_expression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpression"): + listener.enterExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpression"): + listener.exitExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpression"): + return visitor.visitExpression(self) + else: + return visitor.visitChildren(self) + + def expression(self): + + localctx = Java20Parser.ExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 388, self.RULE_expression) + try: + self.state = 2073 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 224, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2071 + self.lambdaExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2072 + self.assignmentExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrimaryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def primaryNoNewArray(self): + return self.getTypedRuleContext(Java20Parser.PrimaryNoNewArrayContext, 0) + + def arrayCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_primary + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrimary"): + listener.enterPrimary(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrimary"): + listener.exitPrimary(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrimary"): + return visitor.visitPrimary(self) + else: + return visitor.visitChildren(self) + + def primary(self): + + localctx = Java20Parser.PrimaryContext(self, self._ctx, self.state) + self.enterRule(localctx, 390, self.RULE_primary) + try: + self.state = 2077 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 225, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2075 + self.primaryNoNewArray() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2076 + self.arrayCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrimaryNoNewArrayContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def literal(self): + return self.getTypedRuleContext(Java20Parser.LiteralContext, 0) + + def pNNA(self): + return self.getTypedRuleContext(Java20Parser.PNNAContext, 0) + + def classLiteral(self): + return self.getTypedRuleContext(Java20Parser.ClassLiteralContext, 0) + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def arrayCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionContext, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext, 0) + + def methodName(self): + return self.getTypedRuleContext(Java20Parser.MethodNameContext, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_primaryNoNewArray + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrimaryNoNewArray"): + listener.enterPrimaryNoNewArray(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrimaryNoNewArray"): + listener.exitPrimaryNoNewArray(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrimaryNoNewArray"): + return visitor.visitPrimaryNoNewArray(self) + else: + return visitor.visitChildren(self) + + def primaryNoNewArray(self): + + localctx = Java20Parser.PrimaryNoNewArrayContext(self, self._ctx, self.state) + self.enterRule(localctx, 392, self.RULE_primaryNoNewArray) + self._la = 0 # Token type + try: + self.state = 2296 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 269, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2079 + self.literal() + self.state = 2081 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 226, self._ctx) + if la_ == 1: + self.state = 2080 + self.pNNA() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2083 + self.classLiteral() + self.state = 2085 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 227, self._ctx) + if la_ == 1: + self.state = 2084 + self.pNNA() + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2087 + self.match(Java20Parser.THIS) + self.state = 2089 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 228, self._ctx) + if la_ == 1: + self.state = 2088 + self.pNNA() + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2091 + self.typeName() + self.state = 2092 + self.match(Java20Parser.DOT) + self.state = 2093 + self.match(Java20Parser.THIS) + self.state = 2095 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 229, self._ctx) + if la_ == 1: + self.state = 2094 + self.pNNA() + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2097 + self.match(Java20Parser.LPAREN) + self.state = 2098 + self.expression() + self.state = 2099 + self.match(Java20Parser.RPAREN) + self.state = 2101 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 230, self._ctx) + if la_ == 1: + self.state = 2100 + self.pNNA() + + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2103 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2105 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 231, self._ctx) + if la_ == 1: + self.state = 2104 + self.pNNA() + + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2107 + self.expressionName() + self.state = 2108 + self.match(Java20Parser.DOT) + self.state = 2109 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2111 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 232, self._ctx) + if la_ == 1: + self.state = 2110 + self.pNNA() + + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 2113 + self.arrayCreationExpression() + self.state = 2114 + self.match(Java20Parser.DOT) + self.state = 2115 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2117 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 233, self._ctx) + if la_ == 1: + self.state = 2116 + self.pNNA() + + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 2119 + self.arrayCreationExpression() + self.state = 2120 + self.match(Java20Parser.DOT) + self.state = 2121 + self.match(Java20Parser.Identifier) + self.state = 2123 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 234, self._ctx) + if la_ == 1: + self.state = 2122 + self.pNNA() + + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 2125 + self.match(Java20Parser.SUPER) + self.state = 2126 + self.match(Java20Parser.DOT) + self.state = 2127 + self.match(Java20Parser.Identifier) + self.state = 2129 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 235, self._ctx) + if la_ == 1: + self.state = 2128 + self.pNNA() + + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 2131 + self.typeName() + self.state = 2132 + self.match(Java20Parser.DOT) + self.state = 2133 + self.match(Java20Parser.SUPER) + self.state = 2134 + self.match(Java20Parser.DOT) + self.state = 2135 + self.match(Java20Parser.Identifier) + self.state = 2137 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 236, self._ctx) + if la_ == 1: + self.state = 2136 + self.pNNA() + + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 2139 + self.expressionName() + self.state = 2140 + self.match(Java20Parser.LBRACK) + self.state = 2141 + self.expression() + self.state = 2142 + self.match(Java20Parser.RBRACK) + self.state = 2144 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 237, self._ctx) + if la_ == 1: + self.state = 2143 + self.pNNA() + + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 2146 + self.arrayCreationExpressionWithInitializer() + self.state = 2147 + self.match(Java20Parser.LBRACK) + self.state = 2148 + self.expression() + self.state = 2149 + self.match(Java20Parser.RBRACK) + self.state = 2151 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 238, self._ctx) + if la_ == 1: + self.state = 2150 + self.pNNA() + + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 2153 + self.methodName() + self.state = 2154 + self.match(Java20Parser.LPAREN) + self.state = 2156 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2155 + self.argumentList() + + self.state = 2158 + self.match(Java20Parser.RPAREN) + self.state = 2160 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 240, self._ctx) + if la_ == 1: + self.state = 2159 + self.pNNA() + + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 2162 + self.typeName() + self.state = 2163 + self.match(Java20Parser.DOT) + self.state = 2165 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2164 + self.typeArguments() + + self.state = 2167 + self.match(Java20Parser.Identifier) + self.state = 2168 + self.match(Java20Parser.LPAREN) + self.state = 2170 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2169 + self.argumentList() + + self.state = 2172 + self.match(Java20Parser.RPAREN) + self.state = 2174 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 243, self._ctx) + if la_ == 1: + self.state = 2173 + self.pNNA() + + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 2176 + self.expressionName() + self.state = 2177 + self.match(Java20Parser.DOT) + self.state = 2179 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2178 + self.typeArguments() + + self.state = 2181 + self.match(Java20Parser.Identifier) + self.state = 2182 + self.match(Java20Parser.LPAREN) + self.state = 2184 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2183 + self.argumentList() + + self.state = 2186 + self.match(Java20Parser.RPAREN) + self.state = 2188 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 246, self._ctx) + if la_ == 1: + self.state = 2187 + self.pNNA() + + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 2190 + self.arrayCreationExpression() + self.state = 2191 + self.match(Java20Parser.DOT) + self.state = 2193 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2192 + self.typeArguments() + + self.state = 2195 + self.match(Java20Parser.Identifier) + self.state = 2196 + self.match(Java20Parser.LPAREN) + self.state = 2198 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2197 + self.argumentList() + + self.state = 2200 + self.match(Java20Parser.RPAREN) + self.state = 2202 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 249, self._ctx) + if la_ == 1: + self.state = 2201 + self.pNNA() + + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 2204 + self.match(Java20Parser.SUPER) + self.state = 2205 + self.match(Java20Parser.DOT) + self.state = 2207 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2206 + self.typeArguments() + + self.state = 2209 + self.match(Java20Parser.Identifier) + self.state = 2210 + self.match(Java20Parser.LPAREN) + self.state = 2212 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2211 + self.argumentList() + + self.state = 2214 + self.match(Java20Parser.RPAREN) + self.state = 2216 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 252, self._ctx) + if la_ == 1: + self.state = 2215 + self.pNNA() + + pass + + elif la_ == 19: + self.enterOuterAlt(localctx, 19) + self.state = 2218 + self.typeName() + self.state = 2219 + self.match(Java20Parser.DOT) + self.state = 2220 + self.match(Java20Parser.SUPER) + self.state = 2221 + self.match(Java20Parser.DOT) + self.state = 2223 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2222 + self.typeArguments() + + self.state = 2225 + self.match(Java20Parser.Identifier) + self.state = 2226 + self.match(Java20Parser.LPAREN) + self.state = 2228 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2227 + self.argumentList() + + self.state = 2230 + self.match(Java20Parser.RPAREN) + self.state = 2232 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 255, self._ctx) + if la_ == 1: + self.state = 2231 + self.pNNA() + + pass + + elif la_ == 20: + self.enterOuterAlt(localctx, 20) + self.state = 2234 + self.expressionName() + self.state = 2235 + self.match(Java20Parser.COLONCOLON) + self.state = 2237 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2236 + self.typeArguments() + + self.state = 2239 + self.match(Java20Parser.Identifier) + self.state = 2241 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 257, self._ctx) + if la_ == 1: + self.state = 2240 + self.pNNA() + + pass + + elif la_ == 21: + self.enterOuterAlt(localctx, 21) + self.state = 2243 + self.arrayCreationExpression() + self.state = 2244 + self.match(Java20Parser.COLONCOLON) + self.state = 2246 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2245 + self.typeArguments() + + self.state = 2248 + self.match(Java20Parser.Identifier) + self.state = 2250 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 259, self._ctx) + if la_ == 1: + self.state = 2249 + self.pNNA() + + pass + + elif la_ == 22: + self.enterOuterAlt(localctx, 22) + self.state = 2252 + self.referenceType() + self.state = 2253 + self.match(Java20Parser.COLONCOLON) + self.state = 2255 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2254 + self.typeArguments() + + self.state = 2257 + self.match(Java20Parser.Identifier) + self.state = 2259 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 261, self._ctx) + if la_ == 1: + self.state = 2258 + self.pNNA() + + pass + + elif la_ == 23: + self.enterOuterAlt(localctx, 23) + self.state = 2261 + self.match(Java20Parser.SUPER) + self.state = 2262 + self.match(Java20Parser.COLONCOLON) + self.state = 2264 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2263 + self.typeArguments() + + self.state = 2266 + self.match(Java20Parser.Identifier) + self.state = 2268 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 263, self._ctx) + if la_ == 1: + self.state = 2267 + self.pNNA() + + pass + + elif la_ == 24: + self.enterOuterAlt(localctx, 24) + self.state = 2270 + self.typeName() + self.state = 2271 + self.match(Java20Parser.DOT) + self.state = 2272 + self.match(Java20Parser.SUPER) + self.state = 2273 + self.match(Java20Parser.COLONCOLON) + self.state = 2275 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2274 + self.typeArguments() + + self.state = 2277 + self.match(Java20Parser.Identifier) + self.state = 2279 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 265, self._ctx) + if la_ == 1: + self.state = 2278 + self.pNNA() + + pass + + elif la_ == 25: + self.enterOuterAlt(localctx, 25) + self.state = 2281 + self.classType() + self.state = 2282 + self.match(Java20Parser.COLONCOLON) + self.state = 2284 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2283 + self.typeArguments() + + self.state = 2286 + self.match(Java20Parser.NEW) + self.state = 2288 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 267, self._ctx) + if la_ == 1: + self.state = 2287 + self.pNNA() + + pass + + elif la_ == 26: + self.enterOuterAlt(localctx, 26) + self.state = 2290 + self.arrayType() + self.state = 2291 + self.match(Java20Parser.COLONCOLON) + self.state = 2292 + self.match(Java20Parser.NEW) + self.state = 2294 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 268, self._ctx) + if la_ == 1: + self.state = 2293 + self.pNNA() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PNNAContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext, 0) + + def pNNA(self): + return self.getTypedRuleContext(Java20Parser.PNNAContext, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_pNNA + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPNNA"): + listener.enterPNNA(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPNNA"): + listener.exitPNNA(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPNNA"): + return visitor.visitPNNA(self) + else: + return visitor.visitChildren(self) + + def pNNA(self): + + localctx = Java20Parser.PNNAContext(self, self._ctx, self.state) + self.enterRule(localctx, 394, self.RULE_pNNA) + self._la = 0 # Token type + try: + self.state = 2335 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 278, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2298 + self.match(Java20Parser.DOT) + self.state = 2299 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2301 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 270, self._ctx) + if la_ == 1: + self.state = 2300 + self.pNNA() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2303 + self.match(Java20Parser.DOT) + self.state = 2304 + self.match(Java20Parser.Identifier) + self.state = 2306 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 271, self._ctx) + if la_ == 1: + self.state = 2305 + self.pNNA() + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2308 + self.match(Java20Parser.LBRACK) + self.state = 2309 + self.expression() + self.state = 2310 + self.match(Java20Parser.RBRACK) + self.state = 2312 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 272, self._ctx) + if la_ == 1: + self.state = 2311 + self.pNNA() + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2314 + self.match(Java20Parser.DOT) + self.state = 2316 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2315 + self.typeArguments() + + self.state = 2318 + self.match(Java20Parser.Identifier) + self.state = 2319 + self.match(Java20Parser.LPAREN) + self.state = 2321 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2320 + self.argumentList() + + self.state = 2323 + self.match(Java20Parser.RPAREN) + self.state = 2325 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 275, self._ctx) + if la_ == 1: + self.state = 2324 + self.pNNA() + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2327 + self.match(Java20Parser.COLONCOLON) + self.state = 2329 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2328 + self.typeArguments() + + self.state = 2331 + self.match(Java20Parser.Identifier) + self.state = 2333 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 277, self._ctx) + if la_ == 1: + self.state = 2332 + self.pNNA() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def CLASS(self): + return self.getToken(Java20Parser.CLASS, 0) + + def LBRACK(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.LBRACK) + else: + return self.getToken(Java20Parser.LBRACK, i) + + def RBRACK(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.RBRACK) + else: + return self.getToken(Java20Parser.RBRACK, i) + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext, 0) + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def VOID(self): + return self.getToken(Java20Parser.VOID, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classLiteral + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassLiteral"): + listener.enterClassLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassLiteral"): + listener.exitClassLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassLiteral"): + return visitor.visitClassLiteral(self) + else: + return visitor.visitChildren(self) + + def classLiteral(self): + + localctx = Java20Parser.ClassLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 396, self.RULE_classLiteral) + self._la = 0 # Token type + try: + self.state = 2372 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [123]: + self.enterOuterAlt(localctx, 1) + self.state = 2337 + self.typeName() + self.state = 2342 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 80: + self.state = 2338 + self.match(Java20Parser.LBRACK) + self.state = 2339 + self.match(Java20Parser.RBRACK) + self.state = 2344 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2345 + self.match(Java20Parser.DOT) + self.state = 2346 + self.match(Java20Parser.CLASS) + pass + elif token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 2) + self.state = 2348 + self.numericType() + self.state = 2353 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 80: + self.state = 2349 + self.match(Java20Parser.LBRACK) + self.state = 2350 + self.match(Java20Parser.RBRACK) + self.state = 2355 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2356 + self.match(Java20Parser.DOT) + self.state = 2357 + self.match(Java20Parser.CLASS) + pass + elif token in [20]: + self.enterOuterAlt(localctx, 3) + self.state = 2359 + self.match(Java20Parser.BOOLEAN) + self.state = 2364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 80: + self.state = 2360 + self.match(Java20Parser.LBRACK) + self.state = 2361 + self.match(Java20Parser.RBRACK) + self.state = 2366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2367 + self.match(Java20Parser.DOT) + self.state = 2368 + self.match(Java20Parser.CLASS) + pass + elif token in [65]: + self.enterOuterAlt(localctx, 4) + self.state = 2369 + self.match(Java20Parser.VOID) + self.state = 2370 + self.match(Java20Parser.DOT) + self.state = 2371 + self.match(Java20Parser.CLASS) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classInstanceCreationExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassInstanceCreationExpression"): + listener.enterClassInstanceCreationExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassInstanceCreationExpression"): + listener.exitClassInstanceCreationExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassInstanceCreationExpression"): + return visitor.visitClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + def classInstanceCreationExpression(self): + + localctx = Java20Parser.ClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 398, self.RULE_classInstanceCreationExpression) + try: + self.state = 2383 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 283, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2374 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2375 + self.expressionName() + self.state = 2376 + self.match(Java20Parser.DOT) + self.state = 2377 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2379 + self.primary() + self.state = 2380 + self.match(Java20Parser.DOT) + self.state = 2381 + self.unqualifiedClassInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnqualifiedClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def classOrInterfaceTypeToInstantiate(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeToInstantiateContext, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unqualifiedClassInstanceCreationExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnqualifiedClassInstanceCreationExpression"): + listener.enterUnqualifiedClassInstanceCreationExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnqualifiedClassInstanceCreationExpression"): + listener.exitUnqualifiedClassInstanceCreationExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnqualifiedClassInstanceCreationExpression"): + return visitor.visitUnqualifiedClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + def unqualifiedClassInstanceCreationExpression(self): + + localctx = Java20Parser.UnqualifiedClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 400, self.RULE_unqualifiedClassInstanceCreationExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2385 + self.match(Java20Parser.NEW) + self.state = 2387 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2386 + self.typeArguments() + + self.state = 2389 + self.classOrInterfaceTypeToInstantiate() + self.state = 2390 + self.match(Java20Parser.LPAREN) + self.state = 2392 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2391 + self.argumentList() + + self.state = 2394 + self.match(Java20Parser.RPAREN) + self.state = 2396 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 286, self._ctx) + if la_ == 1: + self.state = 2395 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassOrInterfaceTypeToInstantiateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.Identifier) + else: + return self.getToken(Java20Parser.Identifier, i) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def typeArgumentsOrDiamond(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsOrDiamondContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classOrInterfaceTypeToInstantiate + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassOrInterfaceTypeToInstantiate"): + listener.enterClassOrInterfaceTypeToInstantiate(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassOrInterfaceTypeToInstantiate"): + listener.exitClassOrInterfaceTypeToInstantiate(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassOrInterfaceTypeToInstantiate"): + return visitor.visitClassOrInterfaceTypeToInstantiate(self) + else: + return visitor.visitChildren(self) + + def classOrInterfaceTypeToInstantiate(self): + + localctx = Java20Parser.ClassOrInterfaceTypeToInstantiateContext(self, self._ctx, self.state) + self.enterRule(localctx, 402, self.RULE_classOrInterfaceTypeToInstantiate) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2401 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 2398 + self.annotation() + self.state = 2403 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2404 + self.match(Java20Parser.Identifier) + self.state = 2415 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 84: + self.state = 2405 + self.match(Java20Parser.DOT) + self.state = 2409 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 2406 + self.annotation() + self.state = 2411 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2412 + self.match(Java20Parser.Identifier) + self.state = 2417 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2419 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 4 or _la == 90: + self.state = 2418 + self.typeArgumentsOrDiamond() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypeArgumentsOrDiamondContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def OACA(self): + return self.getToken(Java20Parser.OACA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgumentsOrDiamond + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypeArgumentsOrDiamond"): + listener.enterTypeArgumentsOrDiamond(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypeArgumentsOrDiamond"): + listener.exitTypeArgumentsOrDiamond(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypeArgumentsOrDiamond"): + return visitor.visitTypeArgumentsOrDiamond(self) + else: + return visitor.visitChildren(self) + + def typeArgumentsOrDiamond(self): + + localctx = Java20Parser.TypeArgumentsOrDiamondContext(self, self._ctx, self.state) + self.enterRule(localctx, 404, self.RULE_typeArgumentsOrDiamond) + try: + self.state = 2423 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [90]: + self.enterOuterAlt(localctx, 1) + self.state = 2421 + self.typeArguments() + pass + elif token in [4]: + self.enterOuterAlt(localctx, 2) + self.state = 2422 + self.match(Java20Parser.OACA) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def arrayCreationExpressionWithoutInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithoutInitializerContext, 0) + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayCreationExpression"): + listener.enterArrayCreationExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayCreationExpression"): + listener.exitArrayCreationExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayCreationExpression"): + return visitor.visitArrayCreationExpression(self) + else: + return visitor.visitChildren(self) + + def arrayCreationExpression(self): + + localctx = Java20Parser.ArrayCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 406, self.RULE_arrayCreationExpression) + try: + self.state = 2427 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 292, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2425 + self.arrayCreationExpressionWithoutInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2426 + self.arrayCreationExpressionWithInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayCreationExpressionWithoutInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext, 0) + + def dimExprs(self): + return self.getTypedRuleContext(Java20Parser.DimExprsContext, 0) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpressionWithoutInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayCreationExpressionWithoutInitializer"): + listener.enterArrayCreationExpressionWithoutInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayCreationExpressionWithoutInitializer"): + listener.exitArrayCreationExpressionWithoutInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayCreationExpressionWithoutInitializer"): + return visitor.visitArrayCreationExpressionWithoutInitializer(self) + else: + return visitor.visitChildren(self) + + def arrayCreationExpressionWithoutInitializer(self): + + localctx = Java20Parser.ArrayCreationExpressionWithoutInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 408, self.RULE_arrayCreationExpressionWithoutInitializer) + try: + self.state = 2441 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 295, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2429 + self.match(Java20Parser.NEW) + self.state = 2430 + self.primitiveType() + self.state = 2431 + self.dimExprs() + self.state = 2433 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 293, self._ctx) + if la_ == 1: + self.state = 2432 + self.dims() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2435 + self.match(Java20Parser.NEW) + self.state = 2436 + self.classType() + self.state = 2437 + self.dimExprs() + self.state = 2439 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 294, self._ctx) + if la_ == 1: + self.state = 2438 + self.dims() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayCreationExpressionWithInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext, 0) + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext, 0) + + def arrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayInitializerContext, 0) + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpressionWithInitializer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayCreationExpressionWithInitializer"): + listener.enterArrayCreationExpressionWithInitializer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayCreationExpressionWithInitializer"): + listener.exitArrayCreationExpressionWithInitializer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayCreationExpressionWithInitializer"): + return visitor.visitArrayCreationExpressionWithInitializer(self) + else: + return visitor.visitChildren(self) + + def arrayCreationExpressionWithInitializer(self): + + localctx = Java20Parser.ArrayCreationExpressionWithInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 410, self.RULE_arrayCreationExpressionWithInitializer) + try: + self.state = 2453 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 296, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2443 + self.match(Java20Parser.NEW) + self.state = 2444 + self.primitiveType() + self.state = 2445 + self.dims() + self.state = 2446 + self.arrayInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2448 + self.match(Java20Parser.NEW) + self.state = 2449 + self.classOrInterfaceType() + self.state = 2450 + self.dims() + self.state = 2451 + self.arrayInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DimExprsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def dimExpr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.DimExprContext) + else: + return self.getTypedRuleContext(Java20Parser.DimExprContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_dimExprs + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDimExprs"): + listener.enterDimExprs(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDimExprs"): + listener.exitDimExprs(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDimExprs"): + return visitor.visitDimExprs(self) + else: + return visitor.visitChildren(self) + + def dimExprs(self): + + localctx = Java20Parser.DimExprsContext(self, self._ctx, self.state) + self.enterRule(localctx, 412, self.RULE_dimExprs) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2455 + self.dimExpr() + self.state = 2459 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 297, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 2456 + self.dimExpr() + self.state = 2461 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 297, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DimExprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def annotation(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext, i) + + def getRuleIndex(self): + return Java20Parser.RULE_dimExpr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDimExpr"): + listener.enterDimExpr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDimExpr"): + listener.exitDimExpr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDimExpr"): + return visitor.visitDimExpr(self) + else: + return visitor.visitChildren(self) + + def dimExpr(self): + + localctx = Java20Parser.DimExprContext(self, self._ctx, self.state) + self.enterRule(localctx, 414, self.RULE_dimExpr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2465 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 86: + self.state = 2462 + self.annotation() + self.state = 2467 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2468 + self.match(Java20Parser.LBRACK) + self.state = 2469 + self.expression() + self.state = 2470 + self.match(Java20Parser.RBRACK) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArrayAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def primaryNoNewArray(self): + return self.getTypedRuleContext(Java20Parser.PrimaryNoNewArrayContext, 0) + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayAccess + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArrayAccess"): + listener.enterArrayAccess(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArrayAccess"): + listener.exitArrayAccess(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArrayAccess"): + return visitor.visitArrayAccess(self) + else: + return visitor.visitChildren(self) + + def arrayAccess(self): + + localctx = Java20Parser.ArrayAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 416, self.RULE_arrayAccess) + try: + self.state = 2487 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 299, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2472 + self.expressionName() + self.state = 2473 + self.match(Java20Parser.LBRACK) + self.state = 2474 + self.expression() + self.state = 2475 + self.match(Java20Parser.RBRACK) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2477 + self.primaryNoNewArray() + self.state = 2478 + self.match(Java20Parser.LBRACK) + self.state = 2479 + self.expression() + self.state = 2480 + self.match(Java20Parser.RBRACK) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2482 + self.arrayCreationExpressionWithInitializer() + self.state = 2483 + self.match(Java20Parser.LBRACK) + self.state = 2484 + self.expression() + self.state = 2485 + self.match(Java20Parser.RBRACK) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FieldAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_fieldAccess + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFieldAccess"): + listener.enterFieldAccess(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFieldAccess"): + listener.exitFieldAccess(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFieldAccess"): + return visitor.visitFieldAccess(self) + else: + return visitor.visitChildren(self) + + def fieldAccess(self): + + localctx = Java20Parser.FieldAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 418, self.RULE_fieldAccess) + try: + self.state = 2502 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 300, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2489 + self.primary() + self.state = 2490 + self.match(Java20Parser.DOT) + self.state = 2491 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2493 + self.match(Java20Parser.SUPER) + self.state = 2494 + self.match(Java20Parser.DOT) + self.state = 2495 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2496 + self.typeName() + self.state = 2497 + self.match(Java20Parser.DOT) + self.state = 2498 + self.match(Java20Parser.SUPER) + self.state = 2499 + self.match(Java20Parser.DOT) + self.state = 2500 + self.match(Java20Parser.Identifier) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodName(self): + return self.getTypedRuleContext(Java20Parser.MethodNameContext, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodInvocation + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodInvocation"): + listener.enterMethodInvocation(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodInvocation"): + listener.exitMethodInvocation(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodInvocation"): + return visitor.visitMethodInvocation(self) + else: + return visitor.visitChildren(self) + + def methodInvocation(self): + + localctx = Java20Parser.MethodInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 420, self.RULE_methodInvocation) + self._la = 0 # Token type + try: + self.state = 2572 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 312, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2504 + self.methodName() + self.state = 2505 + self.match(Java20Parser.LPAREN) + self.state = 2507 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2506 + self.argumentList() + + self.state = 2509 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2511 + self.typeName() + self.state = 2512 + self.match(Java20Parser.DOT) + self.state = 2514 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2513 + self.typeArguments() + + self.state = 2516 + self.match(Java20Parser.Identifier) + self.state = 2517 + self.match(Java20Parser.LPAREN) + self.state = 2519 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2518 + self.argumentList() + + self.state = 2521 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2523 + self.expressionName() + self.state = 2524 + self.match(Java20Parser.DOT) + self.state = 2526 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2525 + self.typeArguments() + + self.state = 2528 + self.match(Java20Parser.Identifier) + self.state = 2529 + self.match(Java20Parser.LPAREN) + self.state = 2531 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2530 + self.argumentList() + + self.state = 2533 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2535 + self.primary() + self.state = 2536 + self.match(Java20Parser.DOT) + self.state = 2538 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2537 + self.typeArguments() + + self.state = 2540 + self.match(Java20Parser.Identifier) + self.state = 2541 + self.match(Java20Parser.LPAREN) + self.state = 2543 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2542 + self.argumentList() + + self.state = 2545 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2547 + self.match(Java20Parser.SUPER) + self.state = 2548 + self.match(Java20Parser.DOT) + self.state = 2550 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2549 + self.typeArguments() + + self.state = 2552 + self.match(Java20Parser.Identifier) + self.state = 2553 + self.match(Java20Parser.LPAREN) + self.state = 2555 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2554 + self.argumentList() + + self.state = 2557 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2558 + self.typeName() + self.state = 2559 + self.match(Java20Parser.DOT) + self.state = 2560 + self.match(Java20Parser.SUPER) + self.state = 2561 + self.match(Java20Parser.DOT) + self.state = 2563 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2562 + self.typeArguments() + + self.state = 2565 + self.match(Java20Parser.Identifier) + self.state = 2566 + self.match(Java20Parser.LPAREN) + self.state = 2568 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876063744) != 0) or ( + (((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2567 + self.argumentList() + + self.state = 2570 + self.match(Java20Parser.RPAREN) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.ExpressionContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_argumentList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArgumentList"): + listener.enterArgumentList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArgumentList"): + listener.exitArgumentList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArgumentList"): + return visitor.visitArgumentList(self) + else: + return visitor.visitChildren(self) + + def argumentList(self): + + localctx = Java20Parser.ArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 422, self.RULE_argumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2574 + self.expression() + self.state = 2579 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 2575 + self.match(Java20Parser.COMMA) + self.state = 2576 + self.expression() + self.state = 2581 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MethodReferenceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext, 0) + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext, 0) + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext, 0) + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodReference + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMethodReference"): + listener.enterMethodReference(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMethodReference"): + listener.exitMethodReference(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMethodReference"): + return visitor.visitMethodReference(self) + else: + return visitor.visitChildren(self) + + def methodReference(self): + + localctx = Java20Parser.MethodReferenceContext(self, self._ctx, self.state) + self.enterRule(localctx, 424, self.RULE_methodReference) + self._la = 0 # Token type + try: + self.state = 2629 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 320, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2582 + self.expressionName() + self.state = 2583 + self.match(Java20Parser.COLONCOLON) + self.state = 2585 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2584 + self.typeArguments() + + self.state = 2587 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2589 + self.primary() + self.state = 2590 + self.match(Java20Parser.COLONCOLON) + self.state = 2592 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2591 + self.typeArguments() + + self.state = 2594 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2596 + self.referenceType() + self.state = 2597 + self.match(Java20Parser.COLONCOLON) + self.state = 2599 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2598 + self.typeArguments() + + self.state = 2601 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2603 + self.match(Java20Parser.SUPER) + self.state = 2604 + self.match(Java20Parser.COLONCOLON) + self.state = 2606 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2605 + self.typeArguments() + + self.state = 2608 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2609 + self.typeName() + self.state = 2610 + self.match(Java20Parser.DOT) + self.state = 2611 + self.match(Java20Parser.SUPER) + self.state = 2612 + self.match(Java20Parser.COLONCOLON) + self.state = 2614 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2613 + self.typeArguments() + + self.state = 2616 + self.match(Java20Parser.Identifier) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2618 + self.classType() + self.state = 2619 + self.match(Java20Parser.COLONCOLON) + self.state = 2621 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 90: + self.state = 2620 + self.typeArguments() + + self.state = 2623 + self.match(Java20Parser.NEW) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2625 + self.arrayType() + self.state = 2626 + self.match(Java20Parser.COLONCOLON) + self.state = 2627 + self.match(Java20Parser.NEW) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PostfixExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext, 0) + + def pfE(self): + return self.getTypedRuleContext(Java20Parser.PfEContext, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_postfixExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPostfixExpression"): + listener.enterPostfixExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPostfixExpression"): + listener.exitPostfixExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPostfixExpression"): + return visitor.visitPostfixExpression(self) + else: + return visitor.visitChildren(self) + + def postfixExpression(self): + + localctx = Java20Parser.PostfixExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 426, self.RULE_postfixExpression) + try: + self.state = 2639 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 323, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2631 + self.primary() + self.state = 2633 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 321, self._ctx) + if la_ == 1: + self.state = 2632 + self.pfE() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2635 + self.expressionName() + self.state = 2637 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 322, self._ctx) + if la_ == 1: + self.state = 2636 + self.pfE() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PfEContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def pfE(self): + return self.getTypedRuleContext(Java20Parser.PfEContext, 0) + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_pfE + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPfE"): + listener.enterPfE(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPfE"): + listener.exitPfE(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPfE"): + return visitor.visitPfE(self) + else: + return visitor.visitChildren(self) + + def pfE(self): + + localctx = Java20Parser.PfEContext(self, self._ctx, self.state) + self.enterRule(localctx, 428, self.RULE_pfE) + try: + self.state = 2649 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2641 + self.match(Java20Parser.INC) + self.state = 2643 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 324, self._ctx) + if la_ == 1: + self.state = 2642 + self.pfE() + + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2645 + self.match(Java20Parser.DEC) + self.state = 2647 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 325, self._ctx) + if la_ == 1: + self.state = 2646 + self.pfE() + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PostIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext, 0) + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_postIncrementExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPostIncrementExpression"): + listener.enterPostIncrementExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPostIncrementExpression"): + listener.exitPostIncrementExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPostIncrementExpression"): + return visitor.visitPostIncrementExpression(self) + else: + return visitor.visitChildren(self) + + def postIncrementExpression(self): + + localctx = Java20Parser.PostIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 430, self.RULE_postIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2651 + self.postfixExpression() + self.state = 2652 + self.match(Java20Parser.INC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PostDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext, 0) + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_postDecrementExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPostDecrementExpression"): + listener.enterPostDecrementExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPostDecrementExpression"): + listener.exitPostDecrementExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPostDecrementExpression"): + return visitor.visitPostDecrementExpression(self) + else: + return visitor.visitChildren(self) + + def postDecrementExpression(self): + + localctx = Java20Parser.PostDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 432, self.RULE_postDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2654 + self.postfixExpression() + self.state = 2655 + self.match(Java20Parser.DEC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def preIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreIncrementExpressionContext, 0) + + def preDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreDecrementExpressionContext, 0) + + def ADD(self): + return self.getToken(Java20Parser.ADD, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def SUB(self): + return self.getToken(Java20Parser.SUB, 0) + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionNotPlusMinusContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unaryExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnaryExpression"): + listener.enterUnaryExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnaryExpression"): + listener.exitUnaryExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnaryExpression"): + return visitor.visitUnaryExpression(self) + else: + return visitor.visitChildren(self) + + def unaryExpression(self): + + localctx = Java20Parser.UnaryExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 434, self.RULE_unaryExpression) + try: + self.state = 2664 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2657 + self.preIncrementExpression() + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2658 + self.preDecrementExpression() + pass + elif token in [104]: + self.enterOuterAlt(localctx, 3) + self.state = 2659 + self.match(Java20Parser.ADD) + self.state = 2660 + self.unaryExpression() + pass + elif token in [105]: + self.enterOuterAlt(localctx, 4) + self.state = 2661 + self.match(Java20Parser.SUB) + self.state = 2662 + self.unaryExpression() + pass + elif token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, + 92, 123]: + self.enterOuterAlt(localctx, 5) + self.state = 2663 + self.unaryExpressionNotPlusMinus() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PreIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_preIncrementExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPreIncrementExpression"): + listener.enterPreIncrementExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPreIncrementExpression"): + listener.exitPreIncrementExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPreIncrementExpression"): + return visitor.visitPreIncrementExpression(self) + else: + return visitor.visitChildren(self) + + def preIncrementExpression(self): + + localctx = Java20Parser.PreIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 436, self.RULE_preIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2666 + self.match(Java20Parser.INC) + self.state = 2667 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PreDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_preDecrementExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPreDecrementExpression"): + listener.enterPreDecrementExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPreDecrementExpression"): + listener.exitPreDecrementExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPreDecrementExpression"): + return visitor.visitPreDecrementExpression(self) + else: + return visitor.visitChildren(self) + + def preDecrementExpression(self): + + localctx = Java20Parser.PreDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 438, self.RULE_preDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2669 + self.match(Java20Parser.DEC) + self.state = 2670 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class UnaryExpressionNotPlusMinusContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext, 0) + + def TILDE(self): + return self.getToken(Java20Parser.TILDE, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def BANG(self): + return self.getToken(Java20Parser.BANG, 0) + + def castExpression(self): + return self.getTypedRuleContext(Java20Parser.CastExpressionContext, 0) + + def switchExpression(self): + return self.getTypedRuleContext(Java20Parser.SwitchExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unaryExpressionNotPlusMinus + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUnaryExpressionNotPlusMinus"): + listener.enterUnaryExpressionNotPlusMinus(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUnaryExpressionNotPlusMinus"): + listener.exitUnaryExpressionNotPlusMinus(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUnaryExpressionNotPlusMinus"): + return visitor.visitUnaryExpressionNotPlusMinus(self) + else: + return visitor.visitChildren(self) + + def unaryExpressionNotPlusMinus(self): + + localctx = Java20Parser.UnaryExpressionNotPlusMinusContext(self, self._ctx, self.state) + self.enterRule(localctx, 440, self.RULE_unaryExpressionNotPlusMinus) + try: + self.state = 2679 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 328, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2672 + self.postfixExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2673 + self.match(Java20Parser.TILDE) + self.state = 2674 + self.unaryExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2675 + self.match(Java20Parser.BANG) + self.state = 2676 + self.unaryExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2677 + self.castExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2678 + self.switchExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class CastExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionNotPlusMinusContext, 0) + + def additionalBound(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(Java20Parser.AdditionalBoundContext, i) + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_castExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCastExpression"): + listener.enterCastExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCastExpression"): + listener.exitCastExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCastExpression"): + return visitor.visitCastExpression(self) + else: + return visitor.visitChildren(self) + + def castExpression(self): + + localctx = Java20Parser.CastExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 442, self.RULE_castExpression) + self._la = 0 # Token type + try: + self.state = 2708 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 331, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2681 + self.match(Java20Parser.LPAREN) + self.state = 2682 + self.primitiveType() + self.state = 2683 + self.match(Java20Parser.RPAREN) + self.state = 2684 + self.unaryExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2686 + self.match(Java20Parser.LPAREN) + self.state = 2687 + self.referenceType() + self.state = 2691 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 108: + self.state = 2688 + self.additionalBound() + self.state = 2693 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2694 + self.match(Java20Parser.RPAREN) + self.state = 2695 + self.unaryExpressionNotPlusMinus() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2697 + self.match(Java20Parser.LPAREN) + self.state = 2698 + self.referenceType() + self.state = 2702 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 108: + self.state = 2699 + self.additionalBound() + self.state = 2704 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2705 + self.match(Java20Parser.RPAREN) + self.state = 2706 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class MultiplicativeExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext, 0) + + def multiplicativeExpression(self): + return self.getTypedRuleContext(Java20Parser.MultiplicativeExpressionContext, 0) + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def DIV(self): + return self.getToken(Java20Parser.DIV, 0) + + def MOD(self): + return self.getToken(Java20Parser.MOD, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_multiplicativeExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMultiplicativeExpression"): + listener.enterMultiplicativeExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMultiplicativeExpression"): + listener.exitMultiplicativeExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMultiplicativeExpression"): + return visitor.visitMultiplicativeExpression(self) + else: + return visitor.visitChildren(self) + + def multiplicativeExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.MultiplicativeExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 444 + self.enterRecursionRule(localctx, 444, self.RULE_multiplicativeExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2711 + self.unaryExpression() + self._ctx.stop = self._input.LT(-1) + self.state = 2724 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 333, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2722 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 332, self._ctx) + if la_ == 1: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2713 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2714 + self.match(Java20Parser.MUL) + self.state = 2715 + self.unaryExpression() + pass + + elif la_ == 2: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2716 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2717 + self.match(Java20Parser.DIV) + self.state = 2718 + self.unaryExpression() + pass + + elif la_ == 3: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2719 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2720 + self.match(Java20Parser.MOD) + self.state = 2721 + self.unaryExpression() + pass + + self.state = 2726 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 333, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class AdditiveExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def multiplicativeExpression(self): + return self.getTypedRuleContext(Java20Parser.MultiplicativeExpressionContext, 0) + + def additiveExpression(self): + return self.getTypedRuleContext(Java20Parser.AdditiveExpressionContext, 0) + + def ADD(self): + return self.getToken(Java20Parser.ADD, 0) + + def SUB(self): + return self.getToken(Java20Parser.SUB, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_additiveExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAdditiveExpression"): + listener.enterAdditiveExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAdditiveExpression"): + listener.exitAdditiveExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAdditiveExpression"): + return visitor.visitAdditiveExpression(self) + else: + return visitor.visitChildren(self) + + def additiveExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.AdditiveExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 446 + self.enterRecursionRule(localctx, 446, self.RULE_additiveExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2728 + self.multiplicativeExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2738 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 335, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2736 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 334, self._ctx) + if la_ == 1: + localctx = Java20Parser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2730 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2731 + self.match(Java20Parser.ADD) + self.state = 2732 + self.multiplicativeExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2733 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2734 + self.match(Java20Parser.SUB) + self.state = 2735 + self.multiplicativeExpression(0) + pass + + self.state = 2740 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 335, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class ShiftExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def additiveExpression(self): + return self.getTypedRuleContext(Java20Parser.AdditiveExpressionContext, 0) + + def shiftExpression(self): + return self.getTypedRuleContext(Java20Parser.ShiftExpressionContext, 0) + + def LT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.LT) + else: + return self.getToken(Java20Parser.LT, i) + + def GT(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.GT) + else: + return self.getToken(Java20Parser.GT, i) + + def getRuleIndex(self): + return Java20Parser.RULE_shiftExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterShiftExpression"): + listener.enterShiftExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitShiftExpression"): + listener.exitShiftExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitShiftExpression"): + return visitor.visitShiftExpression(self) + else: + return visitor.visitChildren(self) + + def shiftExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ShiftExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 448 + self.enterRecursionRule(localctx, 448, self.RULE_shiftExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2742 + self.additiveExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2759 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 337, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2757 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 336, self._ctx) + if la_ == 1: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2744 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2745 + self.match(Java20Parser.LT) + self.state = 2746 + self.match(Java20Parser.LT) + self.state = 2747 + self.additiveExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2748 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2749 + self.match(Java20Parser.GT) + self.state = 2750 + self.match(Java20Parser.GT) + self.state = 2751 + self.additiveExpression(0) + pass + + elif la_ == 3: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2752 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2753 + self.match(Java20Parser.GT) + self.state = 2754 + self.match(Java20Parser.GT) + self.state = 2755 + self.match(Java20Parser.GT) + self.state = 2756 + self.additiveExpression(0) + pass + + self.state = 2761 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 337, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class RelationalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def shiftExpression(self): + return self.getTypedRuleContext(Java20Parser.ShiftExpressionContext, 0) + + def relationalExpression(self): + return self.getTypedRuleContext(Java20Parser.RelationalExpressionContext, 0) + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def LE(self): + return self.getToken(Java20Parser.LE, 0) + + def GE(self): + return self.getToken(Java20Parser.GE, 0) + + def INSTANCEOF(self): + return self.getToken(Java20Parser.INSTANCEOF, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext, 0) + + def pattern(self): + return self.getTypedRuleContext(Java20Parser.PatternContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_relationalExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRelationalExpression"): + listener.enterRelationalExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRelationalExpression"): + listener.exitRelationalExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRelationalExpression"): + return visitor.visitRelationalExpression(self) + else: + return visitor.visitChildren(self) + + def relationalExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.RelationalExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 450 + self.enterRecursionRule(localctx, 450, self.RULE_relationalExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2763 + self.shiftExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2785 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 340, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2783 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 339, self._ctx) + if la_ == 1: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2765 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 2766 + self.match(Java20Parser.LT) + self.state = 2767 + self.shiftExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2768 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 2769 + self.match(Java20Parser.GT) + self.state = 2770 + self.shiftExpression(0) + pass + + elif la_ == 3: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2771 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2772 + self.match(Java20Parser.LE) + self.state = 2773 + self.shiftExpression(0) + pass + + elif la_ == 4: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2774 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2775 + self.match(Java20Parser.GE) + self.state = 2776 + self.shiftExpression(0) + pass + + elif la_ == 5: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2777 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2778 + self.match(Java20Parser.INSTANCEOF) + self.state = 2781 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 338, self._ctx) + if la_ == 1: + self.state = 2779 + self.referenceType() + pass + + elif la_ == 2: + self.state = 2780 + self.pattern() + pass + + pass + + self.state = 2787 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 340, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class EqualityExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def relationalExpression(self): + return self.getTypedRuleContext(Java20Parser.RelationalExpressionContext, 0) + + def equalityExpression(self): + return self.getTypedRuleContext(Java20Parser.EqualityExpressionContext, 0) + + def EQUAL(self): + return self.getToken(Java20Parser.EQUAL, 0) + + def NOTEQUAL(self): + return self.getToken(Java20Parser.NOTEQUAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_equalityExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEqualityExpression"): + listener.enterEqualityExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEqualityExpression"): + listener.exitEqualityExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEqualityExpression"): + return visitor.visitEqualityExpression(self) + else: + return visitor.visitChildren(self) + + def equalityExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.EqualityExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 452 + self.enterRecursionRule(localctx, 452, self.RULE_equalityExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2789 + self.relationalExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2799 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 342, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2797 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 341, self._ctx) + if la_ == 1: + localctx = Java20Parser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2791 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2792 + self.match(Java20Parser.EQUAL) + self.state = 2793 + self.relationalExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2794 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2795 + self.match(Java20Parser.NOTEQUAL) + self.state = 2796 + self.relationalExpression(0) + pass + + self.state = 2801 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 342, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class AndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def equalityExpression(self): + return self.getTypedRuleContext(Java20Parser.EqualityExpressionContext, 0) + + def andExpression(self): + return self.getTypedRuleContext(Java20Parser.AndExpressionContext, 0) + + def BITAND(self): + return self.getToken(Java20Parser.BITAND, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_andExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAndExpression"): + listener.enterAndExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAndExpression"): + listener.exitAndExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAndExpression"): + return visitor.visitAndExpression(self) + else: + return visitor.visitChildren(self) + + def andExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.AndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 454 + self.enterRecursionRule(localctx, 454, self.RULE_andExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2803 + self.equalityExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2810 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 343, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.AndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_andExpression) + self.state = 2805 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2806 + self.match(Java20Parser.BITAND) + self.state = 2807 + self.equalityExpression(0) + self.state = 2812 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 343, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class ExclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def andExpression(self): + return self.getTypedRuleContext(Java20Parser.AndExpressionContext, 0) + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ExclusiveOrExpressionContext, 0) + + def CARET(self): + return self.getToken(Java20Parser.CARET, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_exclusiveOrExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExclusiveOrExpression"): + listener.enterExclusiveOrExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExclusiveOrExpression"): + listener.exitExclusiveOrExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExclusiveOrExpression"): + return visitor.visitExclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + def exclusiveOrExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ExclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 456 + self.enterRecursionRule(localctx, 456, self.RULE_exclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2814 + self.andExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2821 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 344, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ExclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_exclusiveOrExpression) + self.state = 2816 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2817 + self.match(Java20Parser.CARET) + self.state = 2818 + self.andExpression(0) + self.state = 2823 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 344, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class InclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ExclusiveOrExpressionContext, 0) + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.InclusiveOrExpressionContext, 0) + + def BITOR(self): + return self.getToken(Java20Parser.BITOR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_inclusiveOrExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInclusiveOrExpression"): + listener.enterInclusiveOrExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInclusiveOrExpression"): + listener.exitInclusiveOrExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInclusiveOrExpression"): + return visitor.visitInclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + def inclusiveOrExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.InclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 458 + self.enterRecursionRule(localctx, 458, self.RULE_inclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2825 + self.exclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2832 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 345, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.InclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_inclusiveOrExpression) + self.state = 2827 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2828 + self.match(Java20Parser.BITOR) + self.state = 2829 + self.exclusiveOrExpression(0) + self.state = 2834 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 345, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class ConditionalAndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.InclusiveOrExpressionContext, 0) + + def conditionalAndExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalAndExpressionContext, 0) + + def AND(self): + return self.getToken(Java20Parser.AND, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalAndExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConditionalAndExpression"): + listener.enterConditionalAndExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConditionalAndExpression"): + listener.exitConditionalAndExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConditionalAndExpression"): + return visitor.visitConditionalAndExpression(self) + else: + return visitor.visitChildren(self) + + def conditionalAndExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ConditionalAndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 460 + self.enterRecursionRule(localctx, 460, self.RULE_conditionalAndExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2836 + self.inclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2843 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 346, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ConditionalAndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalAndExpression) + self.state = 2838 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2839 + self.match(Java20Parser.AND) + self.state = 2840 + self.inclusiveOrExpression(0) + self.state = 2845 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 346, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class ConditionalOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalAndExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalAndExpressionContext, 0) + + def conditionalOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalOrExpressionContext, 0) + + def OR(self): + return self.getToken(Java20Parser.OR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalOrExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConditionalOrExpression"): + listener.enterConditionalOrExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConditionalOrExpression"): + listener.exitConditionalOrExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConditionalOrExpression"): + return visitor.visitConditionalOrExpression(self) + else: + return visitor.visitChildren(self) + + def conditionalOrExpression(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ConditionalOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 462 + self.enterRecursionRule(localctx, 462, self.RULE_conditionalOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2847 + self.conditionalAndExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2854 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 347, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ConditionalOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalOrExpression) + self.state = 2849 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2850 + self.match(Java20Parser.OR) + self.state = 2851 + self.conditionalAndExpression(0) + self.state = 2856 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 347, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class ConditionalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalOrExpressionContext, 0) + + def QUESTION(self): + return self.getToken(Java20Parser.QUESTION, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext, 0) + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConditionalExpression"): + listener.enterConditionalExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConditionalExpression"): + listener.exitConditionalExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConditionalExpression"): + return visitor.visitConditionalExpression(self) + else: + return visitor.visitChildren(self) + + def conditionalExpression(self): + + localctx = Java20Parser.ConditionalExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 464, self.RULE_conditionalExpression) + try: + self.state = 2870 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 348, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2857 + self.conditionalOrExpression(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2858 + self.conditionalOrExpression(0) + self.state = 2859 + self.match(Java20Parser.QUESTION) + self.state = 2860 + self.expression() + self.state = 2861 + self.match(Java20Parser.COLON) + self.state = 2862 + self.conditionalExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2864 + self.conditionalOrExpression(0) + self.state = 2865 + self.match(Java20Parser.QUESTION) + self.state = 2866 + self.expression() + self.state = 2867 + self.match(Java20Parser.COLON) + self.state = 2868 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AssignmentExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext, 0) + + def assignment(self): + return self.getTypedRuleContext(Java20Parser.AssignmentContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assignmentExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssignmentExpression"): + listener.enterAssignmentExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssignmentExpression"): + listener.exitAssignmentExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssignmentExpression"): + return visitor.visitAssignmentExpression(self) + else: + return visitor.visitChildren(self) + + def assignmentExpression(self): + + localctx = Java20Parser.AssignmentExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 466, self.RULE_assignmentExpression) + try: + self.state = 2874 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 349, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2872 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2873 + self.assignment() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AssignmentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def leftHandSide(self): + return self.getTypedRuleContext(Java20Parser.LeftHandSideContext, 0) + + def assignmentOperator(self): + return self.getTypedRuleContext(Java20Parser.AssignmentOperatorContext, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assignment + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssignment"): + listener.enterAssignment(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssignment"): + listener.exitAssignment(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssignment"): + return visitor.visitAssignment(self) + else: + return visitor.visitChildren(self) + + def assignment(self): + + localctx = Java20Parser.AssignmentContext(self, self._ctx, self.state) + self.enterRule(localctx, 468, self.RULE_assignment) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2876 + self.leftHandSide() + self.state = 2877 + self.assignmentOperator() + self.state = 2878 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LeftHandSideContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext, 0) + + def fieldAccess(self): + return self.getTypedRuleContext(Java20Parser.FieldAccessContext, 0) + + def arrayAccess(self): + return self.getTypedRuleContext(Java20Parser.ArrayAccessContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_leftHandSide + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLeftHandSide"): + listener.enterLeftHandSide(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLeftHandSide"): + listener.exitLeftHandSide(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLeftHandSide"): + return visitor.visitLeftHandSide(self) + else: + return visitor.visitChildren(self) + + def leftHandSide(self): + + localctx = Java20Parser.LeftHandSideContext(self, self._ctx, self.state) + self.enterRule(localctx, 470, self.RULE_leftHandSide) + try: + self.state = 2883 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 350, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2880 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(loc) + self.state = 2881 + self.fieldAccess() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2882 + self.arrayAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AssignmentOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def MUL_ASSIGN(self): + return self.getToken(Java20Parser.MUL_ASSIGN, 0) + + def DIV_ASSIGN(self): + return self.getToken(Java20Parser.DIV_ASSIGN, 0) + + def MOD_ASSIGN(self): + return self.getToken(Java20Parser.MOD_ASSIGN, 0) + + def ADD_ASSIGN(self): + return self.getToken(Java20Parser.ADD_ASSIGN, 0) + + def SUB_ASSIGN(self): + return self.getToken(Java20Parser.SUB_ASSIGN, 0) + + def LSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.LSHIFT_ASSIGN, 0) + + def RSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.RSHIFT_ASSIGN, 0) + + def URSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.URSHIFT_ASSIGN, 0) + + def AND_ASSIGN(self): + return self.getToken(Java20Parser.AND_ASSIGN, 0) + + def XOR_ASSIGN(self): + return self.getToken(Java20Parser.XOR_ASSIGN, 0) + + def OR_ASSIGN(self): + return self.getToken(Java20Parser.OR_ASSIGN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assignmentOperator + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssignmentOperator"): + listener.enterAssignmentOperator(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssignmentOperator"): + listener.exitAssignmentOperator(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssignmentOperator"): + return visitor.visitAssignmentOperator(self) + else: + return visitor.visitChildren(self) + + def assignmentOperator(self): + + localctx = Java20Parser.AssignmentOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 472, self.RULE_assignmentOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2885 + _la = self._input.LA(1) + if not (((((_la - 88)) & ~0x3f) == 0 and ((1 << (_la - 88)) & 34342961153) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameters(self): + return self.getTypedRuleContext(Java20Parser.LambdaParametersContext, 0) + + def ARROW(self): + return self.getToken(Java20Parser.ARROW, 0) + + def lambdaBody(self): + return self.getTypedRuleContext(Java20Parser.LambdaBodyContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaExpression"): + listener.enterLambdaExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaExpression"): + listener.exitLambdaExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaExpression"): + return visitor.visitLambdaExpression(self) + else: + return visitor.visitChildren(self) + + def lambdaExpression(self): + + localctx = Java20Parser.LambdaExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 474, self.RULE_lambdaExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2887 + self.lambdaParameters() + self.state = 2888 + self.match(Java20Parser.ARROW) + self.state = 2889 + self.lambdaBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def lambdaParameterList(self): + return self.getTypedRuleContext(Java20Parser.LambdaParameterListContext, 0) + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameters + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaParameters"): + listener.enterLambdaParameters(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaParameters"): + listener.exitLambdaParameters(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaParameters"): + return visitor.visitLambdaParameters(self) + else: + return visitor.visitChildren(self) + + def lambdaParameters(self): + + localctx = Java20Parser.LambdaParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 476, self.RULE_lambdaParameters) + self._la = 0 # Token type + try: + self.state = 2897 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [76]: + self.enterOuterAlt(localctx, 1) + self.state = 2891 + self.match(Java20Parser.LPAREN) + self.state = 2893 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424709632) != 0) or _la == 86 or _la == 123: + self.state = 2892 + self.lambdaParameterList() + + self.state = 2895 + self.match(Java20Parser.RPAREN) + pass + elif token in [123]: + self.enterOuterAlt(localctx, 2) + self.state = 2896 + self.match(Java20Parser.Identifier) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameter(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.LambdaParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.LambdaParameterContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def Identifier(self, i: int = None): + if i is None: + return self.getTokens(Java20Parser.Identifier) + else: + return self.getToken(Java20Parser.Identifier, i) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameterList + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaParameterList"): + listener.enterLambdaParameterList(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaParameterList"): + listener.exitLambdaParameterList(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaParameterList"): + return visitor.visitLambdaParameterList(self) + else: + return visitor.visitChildren(self) + + def lambdaParameterList(self): + + localctx = Java20Parser.LambdaParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 478, self.RULE_lambdaParameterList) + self._la = 0 # Token type + try: + self.state = 2915 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 355, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2899 + self.lambdaParameter() + self.state = 2904 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 2900 + self.match(Java20Parser.COMMA) + self.state = 2901 + self.lambdaParameter() + self.state = 2906 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2907 + self.match(Java20Parser.Identifier) + self.state = 2912 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 83: + self.state = 2908 + self.match(Java20Parser.COMMA) + self.state = 2909 + self.match(Java20Parser.Identifier) + self.state = 2914 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameterType(self): + return self.getTypedRuleContext(Java20Parser.LambdaParameterTypeContext, 0) + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext, 0) + + def variableModifier(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext, i) + + def variableArityParameter(self): + return self.getTypedRuleContext(Java20Parser.VariableArityParameterContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaParameter"): + listener.enterLambdaParameter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaParameter"): + listener.exitLambdaParameter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaParameter"): + return visitor.visitLambdaParameter(self) + else: + return visitor.visitChildren(self) + + def lambdaParameter(self): + + localctx = Java20Parser.LambdaParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 480, self.RULE_lambdaParameter) + self._la = 0 # Token type + try: + self.state = 2927 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 357, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2920 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 35 or _la == 86: + self.state = 2917 + self.variableModifier() + self.state = 2922 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2923 + self.lambdaParameterType() + self.state = 2924 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2926 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaParameterTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext, 0) + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameterType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaParameterType"): + listener.enterLambdaParameterType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaParameterType"): + listener.exitLambdaParameterType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaParameterType"): + return visitor.visitLambdaParameterType(self) + else: + return visitor.visitChildren(self) + + def lambdaParameterType(self): + + localctx = Java20Parser.LambdaParameterTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 482, self.RULE_lambdaParameterType) + try: + self.state = 2931 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2929 + self.unannType() + pass + elif token in [15]: + self.enterOuterAlt(localctx, 2) + self.state = 2930 + self.match(Java20Parser.VAR) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdaBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaBody + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdaBody"): + listener.enterLambdaBody(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdaBody"): + listener.exitLambdaBody(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdaBody"): + return visitor.visitLambdaBody(self) + else: + return visitor.visitChildren(self) + + def lambdaBody(self): + + localctx = Java20Parser.LambdaBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 484, self.RULE_lambdaBody) + try: + self.state = 2935 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, + 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2933 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 2934 + self.block() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SwitchExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(Java20Parser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(Java20Parser.SwitchBlockContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSwitchExpression"): + listener.enterSwitchExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSwitchExpression"): + listener.exitSwitchExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSwitchExpression"): + return visitor.visitSwitchExpression(self) + else: + return visitor.visitChildren(self) + + def switchExpression(self): + + localctx = Java20Parser.SwitchExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 486, self.RULE_switchExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2937 + self.match(Java20Parser.SWITCH) + self.state = 2938 + self.match(Java20Parser.LPAREN) + self.state = 2939 + self.expression() + self.state = 2940 + self.match(Java20Parser.RPAREN) + self.state = 2941 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ConstantExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constantExpression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterConstantExpression"): + listener.enterConstantExpression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitConstantExpression"): + listener.exitConstantExpression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitConstantExpression"): + return visitor.visitConstantExpression(self) + else: + return visitor.visitChildren(self) + + def constantExpression(self): + + localctx = Java20Parser.ConstantExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 488, self.RULE_constantExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2943 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + def sempred(self, localctx: RuleContext, ruleIndex: int, predIndex: int): + if self._predicates == None: + self._predicates = dict() + self._predicates[222] = self.multiplicativeExpression_sempred + self._predicates[223] = self.additiveExpression_sempred + self._predicates[224] = self.shiftExpression_sempred + self._predicates[225] = self.relationalExpression_sempred + self._predicates[226] = self.equalityExpression_sempred + self._predicates[227] = self.andExpression_sempred + self._predicates[228] = self.exclusiveOrExpression_sempred + self._predicates[229] = self.inclusiveOrExpression_sempred + self._predicates[230] = self.conditionalAndExpression_sempred + self._predicates[231] = self.conditionalOrExpression_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def multiplicativeExpression_sempred(self, localctx: MultiplicativeExpressionContext, predIndex: int): + if predIndex == 0: + return self.precpred(self._ctx, 3) + + if predIndex == 1: + return self.precpred(self._ctx, 2) + + if predIndex == 2: + return self.precpred(self._ctx, 1) + + def additiveExpression_sempred(self, localctx: AdditiveExpressionContext, predIndex: int): + if predIndex == 3: + return self.precpred(self._ctx, 2) + + if predIndex == 4: + return self.precpred(self._ctx, 1) + + def shiftExpression_sempred(self, localctx: ShiftExpressionContext, predIndex: int): + if predIndex == 5: + return self.precpred(self._ctx, 3) + + if predIndex == 6: + return self.precpred(self._ctx, 2) + + if predIndex == 7: + return self.precpred(self._ctx, 1) + + def relationalExpression_sempred(self, localctx: RelationalExpressionContext, predIndex: int): + if predIndex == 8: + return self.precpred(self._ctx, 5) + + if predIndex == 9: + return self.precpred(self._ctx, 4) + + if predIndex == 10: + return self.precpred(self._ctx, 3) + + if predIndex == 11: + return self.precpred(self._ctx, 2) + + if predIndex == 12: + return self.precpred(self._ctx, 1) + + def equalityExpression_sempred(self, localctx: EqualityExpressionContext, predIndex: int): + if predIndex == 13: + return self.precpred(self._ctx, 2) + + if predIndex == 14: + return self.precpred(self._ctx, 1) + + def andExpression_sempred(self, localctx: AndExpressionContext, predIndex: int): + if predIndex == 15: + return self.precpred(self._ctx, 1) + + def exclusiveOrExpression_sempred(self, localctx: ExclusiveOrExpressionContext, predIndex: int): + if predIndex == 16: + return self.precpred(self._ctx, 1) + + def inclusiveOrExpression_sempred(self, localctx: InclusiveOrExpressionContext, predIndex: int): + if predIndex == 17: + return self.precpred(self._ctx, 1) + + def conditionalAndExpression_sempred(self, localctx: ConditionalAndExpressionContext, predIndex: int): + if predIndex == 18: + return self.precpred(self._ctx, 1) + + def conditionalOrExpression_sempred(self, localctx: ConditionalOrExpressionContext, predIndex: int): + if predIndex == 19: + return self.precpred(self._ctx, 1) + + + + + diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParserVisitor.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParserVisitor.py new file mode 100644 index 000000000..62eb96c77 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/JavaParserVisitor.py @@ -0,0 +1,1240 @@ +# Generated from Java20Parser.g4 by ANTLR 4.13.1 +from antlr4 import * + +if "." in __name__: + from module_programming_winnowing.convert_code_to_ast.languages.java.JavaParser import Java20Parser +else: + from module_programming_winnowing.convert_code_to_ast.languages.java.JavaParser import Java20Parser + + +# This class defines a complete generic visitor for a parse tree produced by Java20Parser. + +class Java20ParserVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by Java20Parser#start_. + def visitStart_(self, ctx:Java20Parser.Start_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#literal. + def visitLiteral(self, ctx:Java20Parser.LiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeIdentifier. + def visitTypeIdentifier(self, ctx:Java20Parser.TypeIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unqualifiedMethodIdentifier. + def visitUnqualifiedMethodIdentifier(self, ctx:Java20Parser.UnqualifiedMethodIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primitiveType. + def visitPrimitiveType(self, ctx:Java20Parser.PrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#numericType. + def visitNumericType(self, ctx:Java20Parser.NumericTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#integralType. + def visitIntegralType(self, ctx:Java20Parser.IntegralTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#floatingPointType. + def visitFloatingPointType(self, ctx:Java20Parser.FloatingPointTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#referenceType. + def visitReferenceType(self, ctx:Java20Parser.ReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#coit. + def visitCoit(self, ctx:Java20Parser.CoitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classOrInterfaceType. + def visitClassOrInterfaceType(self, ctx:Java20Parser.ClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classType. + def visitClassType(self, ctx:Java20Parser.ClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceType. + def visitInterfaceType(self, ctx:Java20Parser.InterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeVariable. + def visitTypeVariable(self, ctx:Java20Parser.TypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayType. + def visitArrayType(self, ctx:Java20Parser.ArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dims. + def visitDims(self, ctx:Java20Parser.DimsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameter. + def visitTypeParameter(self, ctx:Java20Parser.TypeParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameterModifier. + def visitTypeParameterModifier(self, ctx:Java20Parser.TypeParameterModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeBound. + def visitTypeBound(self, ctx:Java20Parser.TypeBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#additionalBound. + def visitAdditionalBound(self, ctx:Java20Parser.AdditionalBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArguments. + def visitTypeArguments(self, ctx:Java20Parser.TypeArgumentsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgumentList. + def visitTypeArgumentList(self, ctx:Java20Parser.TypeArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgument. + def visitTypeArgument(self, ctx:Java20Parser.TypeArgumentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#wildcard. + def visitWildcard(self, ctx:Java20Parser.WildcardContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#wildcardBounds. + def visitWildcardBounds(self, ctx:Java20Parser.WildcardBoundsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleName. + def visitModuleName(self, ctx:Java20Parser.ModuleNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageName. + def visitPackageName(self, ctx:Java20Parser.PackageNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeName. + def visitTypeName(self, ctx:Java20Parser.TypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageOrTypeName. + def visitPackageOrTypeName(self, ctx:Java20Parser.PackageOrTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expressionName. + def visitExpressionName(self, ctx:Java20Parser.ExpressionNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodName. + def visitMethodName(self, ctx:Java20Parser.MethodNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ambiguousName. + def visitAmbiguousName(self, ctx:Java20Parser.AmbiguousNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#compilationUnit. + def visitCompilationUnit(self, ctx:Java20Parser.CompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ordinaryCompilationUnit. + def visitOrdinaryCompilationUnit(self, ctx:Java20Parser.OrdinaryCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#modularCompilationUnit. + def visitModularCompilationUnit(self, ctx:Java20Parser.ModularCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageDeclaration. + def visitPackageDeclaration(self, ctx:Java20Parser.PackageDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageModifier. + def visitPackageModifier(self, ctx:Java20Parser.PackageModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#importDeclaration. + def visitImportDeclaration(self, ctx:Java20Parser.ImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleTypeImportDeclaration. + def visitSingleTypeImportDeclaration(self, ctx:Java20Parser.SingleTypeImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeImportOnDemandDeclaration. + def visitTypeImportOnDemandDeclaration(self, ctx:Java20Parser.TypeImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleStaticImportDeclaration. + def visitSingleStaticImportDeclaration(self, ctx:Java20Parser.SingleStaticImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#staticImportOnDemandDeclaration. + def visitStaticImportOnDemandDeclaration(self, ctx:Java20Parser.StaticImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#topLevelClassOrInterfaceDeclaration. + def visitTopLevelClassOrInterfaceDeclaration(self, ctx:Java20Parser.TopLevelClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleDeclaration. + def visitModuleDeclaration(self, ctx:Java20Parser.ModuleDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleDirective. + def visitModuleDirective(self, ctx:Java20Parser.ModuleDirectiveContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#requiresModifier. + def visitRequiresModifier(self, ctx:Java20Parser.RequiresModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classDeclaration. + def visitClassDeclaration(self, ctx:Java20Parser.ClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalClassDeclaration. + def visitNormalClassDeclaration(self, ctx:Java20Parser.NormalClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classModifier. + def visitClassModifier(self, ctx:Java20Parser.ClassModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameters. + def visitTypeParameters(self, ctx:Java20Parser.TypeParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameterList. + def visitTypeParameterList(self, ctx:Java20Parser.TypeParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classExtends. + def visitClassExtends(self, ctx:Java20Parser.ClassExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classImplements. + def visitClassImplements(self, ctx:Java20Parser.ClassImplementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceTypeList. + def visitInterfaceTypeList(self, ctx:Java20Parser.InterfaceTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classPermits. + def visitClassPermits(self, ctx:Java20Parser.ClassPermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classBody. + def visitClassBody(self, ctx:Java20Parser.ClassBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classBodyDeclaration. + def visitClassBodyDeclaration(self, ctx:Java20Parser.ClassBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classMemberDeclaration. + def visitClassMemberDeclaration(self, ctx:Java20Parser.ClassMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldDeclaration. + def visitFieldDeclaration(self, ctx:Java20Parser.FieldDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldModifier. + def visitFieldModifier(self, ctx:Java20Parser.FieldModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclaratorList. + def visitVariableDeclaratorList(self, ctx:Java20Parser.VariableDeclaratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclarator. + def visitVariableDeclarator(self, ctx:Java20Parser.VariableDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclaratorId. + def visitVariableDeclaratorId(self, ctx:Java20Parser.VariableDeclaratorIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableInitializer. + def visitVariableInitializer(self, ctx:Java20Parser.VariableInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannType. + def visitUnannType(self, ctx:Java20Parser.UnannTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannPrimitiveType. + def visitUnannPrimitiveType(self, ctx:Java20Parser.UnannPrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannReferenceType. + def visitUnannReferenceType(self, ctx:Java20Parser.UnannReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannClassOrInterfaceType. + def visitUnannClassOrInterfaceType(self, ctx:Java20Parser.UnannClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#uCOIT. + def visitUCOIT(self, ctx:Java20Parser.UCOITContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannClassType. + def visitUnannClassType(self, ctx:Java20Parser.UnannClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannInterfaceType. + def visitUnannInterfaceType(self, ctx:Java20Parser.UnannInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannTypeVariable. + def visitUnannTypeVariable(self, ctx:Java20Parser.UnannTypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannArrayType. + def visitUnannArrayType(self, ctx:Java20Parser.UnannArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodDeclaration. + def visitMethodDeclaration(self, ctx:Java20Parser.MethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodModifier. + def visitMethodModifier(self, ctx:Java20Parser.MethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodHeader. + def visitMethodHeader(self, ctx:Java20Parser.MethodHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#result. + def visitResult(self, ctx:Java20Parser.ResultContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodDeclarator. + def visitMethodDeclarator(self, ctx:Java20Parser.MethodDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#receiverParameter. + def visitReceiverParameter(self, ctx:Java20Parser.ReceiverParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#formalParameterList. + def visitFormalParameterList(self, ctx:Java20Parser.FormalParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#formalParameter. + def visitFormalParameter(self, ctx:Java20Parser.FormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableArityParameter. + def visitVariableArityParameter(self, ctx:Java20Parser.VariableArityParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableModifier. + def visitVariableModifier(self, ctx:Java20Parser.VariableModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#throwsT. + def visitThrowsT(self, ctx:Java20Parser.ThrowsTContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exceptionTypeList. + def visitExceptionTypeList(self, ctx:Java20Parser.ExceptionTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exceptionType. + def visitExceptionType(self, ctx:Java20Parser.ExceptionTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodBody. + def visitMethodBody(self, ctx:Java20Parser.MethodBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#instanceInitializer. + def visitInstanceInitializer(self, ctx:Java20Parser.InstanceInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#staticInitializer. + def visitStaticInitializer(self, ctx:Java20Parser.StaticInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorDeclaration. + def visitConstructorDeclaration(self, ctx:Java20Parser.ConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorModifier. + def visitConstructorModifier(self, ctx:Java20Parser.ConstructorModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorDeclarator. + def visitConstructorDeclarator(self, ctx:Java20Parser.ConstructorDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#simpleTypeName. + def visitSimpleTypeName(self, ctx:Java20Parser.SimpleTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorBody. + def visitConstructorBody(self, ctx:Java20Parser.ConstructorBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#explicitConstructorInvocation. + def visitExplicitConstructorInvocation(self, ctx:Java20Parser.ExplicitConstructorInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumDeclaration. + def visitEnumDeclaration(self, ctx:Java20Parser.EnumDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumBody. + def visitEnumBody(self, ctx:Java20Parser.EnumBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstantList. + def visitEnumConstantList(self, ctx:Java20Parser.EnumConstantListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstant. + def visitEnumConstant(self, ctx:Java20Parser.EnumConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstantModifier. + def visitEnumConstantModifier(self, ctx:Java20Parser.EnumConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumBodyDeclarations. + def visitEnumBodyDeclarations(self, ctx:Java20Parser.EnumBodyDeclarationsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordDeclaration. + def visitRecordDeclaration(self, ctx:Java20Parser.RecordDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordHeader. + def visitRecordHeader(self, ctx:Java20Parser.RecordHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponentList. + def visitRecordComponentList(self, ctx:Java20Parser.RecordComponentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponent. + def visitRecordComponent(self, ctx:Java20Parser.RecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableArityRecordComponent. + def visitVariableArityRecordComponent(self, ctx:Java20Parser.VariableArityRecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponentModifier. + def visitRecordComponentModifier(self, ctx:Java20Parser.RecordComponentModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordBody. + def visitRecordBody(self, ctx:Java20Parser.RecordBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordBodyDeclaration. + def visitRecordBodyDeclaration(self, ctx:Java20Parser.RecordBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#compactConstructorDeclaration. + def visitCompactConstructorDeclaration(self, ctx:Java20Parser.CompactConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceDeclaration. + def visitInterfaceDeclaration(self, ctx:Java20Parser.InterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalInterfaceDeclaration. + def visitNormalInterfaceDeclaration(self, ctx:Java20Parser.NormalInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceModifier. + def visitInterfaceModifier(self, ctx:Java20Parser.InterfaceModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceExtends. + def visitInterfaceExtends(self, ctx:Java20Parser.InterfaceExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfacePermits. + def visitInterfacePermits(self, ctx:Java20Parser.InterfacePermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceBody. + def visitInterfaceBody(self, ctx:Java20Parser.InterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMemberDeclaration. + def visitInterfaceMemberDeclaration(self, ctx:Java20Parser.InterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantDeclaration. + def visitConstantDeclaration(self, ctx:Java20Parser.ConstantDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantModifier. + def visitConstantModifier(self, ctx:Java20Parser.ConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMethodDeclaration. + def visitInterfaceMethodDeclaration(self, ctx:Java20Parser.InterfaceMethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMethodModifier. + def visitInterfaceMethodModifier(self, ctx:Java20Parser.InterfaceMethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceDeclaration. + def visitAnnotationInterfaceDeclaration(self, ctx:Java20Parser.AnnotationInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceBody. + def visitAnnotationInterfaceBody(self, ctx:Java20Parser.AnnotationInterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceMemberDeclaration. + def visitAnnotationInterfaceMemberDeclaration(self, ctx:Java20Parser.AnnotationInterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceElementDeclaration. + def visitAnnotationInterfaceElementDeclaration(self, ctx:Java20Parser.AnnotationInterfaceElementDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceElementModifier. + def visitAnnotationInterfaceElementModifier(self, ctx:Java20Parser.AnnotationInterfaceElementModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#defaultValue. + def visitDefaultValue(self, ctx:Java20Parser.DefaultValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotation. + def visitAnnotation(self, ctx:Java20Parser.AnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalAnnotation. + def visitNormalAnnotation(self, ctx:Java20Parser.NormalAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValuePairList. + def visitElementValuePairList(self, ctx:Java20Parser.ElementValuePairListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValuePair. + def visitElementValuePair(self, ctx:Java20Parser.ElementValuePairContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValue. + def visitElementValue(self, ctx:Java20Parser.ElementValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValueArrayInitializer. + def visitElementValueArrayInitializer(self, ctx:Java20Parser.ElementValueArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValueList. + def visitElementValueList(self, ctx:Java20Parser.ElementValueListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#markerAnnotation. + def visitMarkerAnnotation(self, ctx:Java20Parser.MarkerAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleElementAnnotation. + def visitSingleElementAnnotation(self, ctx:Java20Parser.SingleElementAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayInitializer. + def visitArrayInitializer(self, ctx:Java20Parser.ArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableInitializerList. + def visitVariableInitializerList(self, ctx:Java20Parser.VariableInitializerListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#block. + def visitBlock(self, ctx:Java20Parser.BlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#blockStatements. + def visitBlockStatements(self, ctx:Java20Parser.BlockStatementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#blockStatement. + def visitBlockStatement(self, ctx:Java20Parser.BlockStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localClassOrInterfaceDeclaration. + def visitLocalClassOrInterfaceDeclaration(self, ctx:Java20Parser.LocalClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableDeclaration. + def visitLocalVariableDeclaration(self, ctx:Java20Parser.LocalVariableDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableType. + def visitLocalVariableType(self, ctx:Java20Parser.LocalVariableTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableDeclarationStatement. + def visitLocalVariableDeclarationStatement(self, ctx:Java20Parser.LocalVariableDeclarationStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statement. + def visitStatement(self, ctx:Java20Parser.StatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementNoShortIf. + def visitStatementNoShortIf(self, ctx:Java20Parser.StatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementWithoutTrailingSubstatement. + def visitStatementWithoutTrailingSubstatement(self, ctx:Java20Parser.StatementWithoutTrailingSubstatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#emptyStatement_. + def visitEmptyStatement_(self, ctx:Java20Parser.EmptyStatement_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#labeledStatement. + def visitLabeledStatement(self, ctx:Java20Parser.LabeledStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#labeledStatementNoShortIf. + def visitLabeledStatementNoShortIf(self, ctx:Java20Parser.LabeledStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expressionStatement. + def visitExpressionStatement(self, ctx:Java20Parser.ExpressionStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementExpression. + def visitStatementExpression(self, ctx:Java20Parser.StatementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenStatement. + def visitIfThenStatement(self, ctx:Java20Parser.IfThenStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenElseStatement. + def visitIfThenElseStatement(self, ctx:Java20Parser.IfThenElseStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenElseStatementNoShortIf. + def visitIfThenElseStatementNoShortIf(self, ctx:Java20Parser.IfThenElseStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assertStatement. + def visitAssertStatement(self, ctx:Java20Parser.AssertStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchStatement. + def visitSwitchStatement(self, ctx:Java20Parser.SwitchStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchBlock. + def visitSwitchBlock(self, ctx:Java20Parser.SwitchBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchRule. + def visitSwitchRule(self, ctx:Java20Parser.SwitchRuleContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchBlockStatementGroup. + def visitSwitchBlockStatementGroup(self, ctx:Java20Parser.SwitchBlockStatementGroupContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchLabel. + def visitSwitchLabel(self, ctx:Java20Parser.SwitchLabelContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#caseConstant. + def visitCaseConstant(self, ctx:Java20Parser.CaseConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#whileStatement. + def visitWhileStatement(self, ctx:Java20Parser.WhileStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#whileStatementNoShortIf. + def visitWhileStatementNoShortIf(self, ctx:Java20Parser.WhileStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#doStatement. + def visitDoStatement(self, ctx:Java20Parser.DoStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forStatement. + def visitForStatement(self, ctx:Java20Parser.ForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forStatementNoShortIf. + def visitForStatementNoShortIf(self, ctx:Java20Parser.ForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#basicForStatement. + def visitBasicForStatement(self, ctx:Java20Parser.BasicForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#basicForStatementNoShortIf. + def visitBasicForStatementNoShortIf(self, ctx:Java20Parser.BasicForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forInit. + def visitForInit(self, ctx:Java20Parser.ForInitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forUpdate. + def visitForUpdate(self, ctx:Java20Parser.ForUpdateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementExpressionList. + def visitStatementExpressionList(self, ctx:Java20Parser.StatementExpressionListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enhancedForStatement. + def visitEnhancedForStatement(self, ctx:Java20Parser.EnhancedForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enhancedForStatementNoShortIf. + def visitEnhancedForStatementNoShortIf(self, ctx:Java20Parser.EnhancedForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#breakStatement. + def visitBreakStatement(self, ctx:Java20Parser.BreakStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#continueStatement. + def visitContinueStatement(self, ctx:Java20Parser.ContinueStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#returnStatement. + def visitReturnStatement(self, ctx:Java20Parser.ReturnStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#throwStatement. + def visitThrowStatement(self, ctx:Java20Parser.ThrowStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#synchronizedStatement. + def visitSynchronizedStatement(self, ctx:Java20Parser.SynchronizedStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#tryStatement. + def visitTryStatement(self, ctx:Java20Parser.TryStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catches. + def visitCatches(self, ctx:Java20Parser.CatchesContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchClause. + def visitCatchClause(self, ctx:Java20Parser.CatchClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchFormalParameter. + def visitCatchFormalParameter(self, ctx:Java20Parser.CatchFormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchType. + def visitCatchType(self, ctx:Java20Parser.CatchTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#finallyBlock. + def visitFinallyBlock(self, ctx:Java20Parser.FinallyBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#tryWithResourcesStatement. + def visitTryWithResourcesStatement(self, ctx:Java20Parser.TryWithResourcesStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resourceSpecification. + def visitResourceSpecification(self, ctx:Java20Parser.ResourceSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resourceList. + def visitResourceList(self, ctx:Java20Parser.ResourceListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resource. + def visitResource(self, ctx:Java20Parser.ResourceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableAccess. + def visitVariableAccess(self, ctx:Java20Parser.VariableAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#yieldStatement. + def visitYieldStatement(self, ctx:Java20Parser.YieldStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pattern. + def visitPattern(self, ctx:Java20Parser.PatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typePattern. + def visitTypePattern(self, ctx:Java20Parser.TypePatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expression. + def visitExpression(self, ctx:Java20Parser.ExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primary. + def visitPrimary(self, ctx:Java20Parser.PrimaryContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primaryNoNewArray. + def visitPrimaryNoNewArray(self, ctx:Java20Parser.PrimaryNoNewArrayContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pNNA. + def visitPNNA(self, ctx:Java20Parser.PNNAContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classLiteral. + def visitClassLiteral(self, ctx:Java20Parser.ClassLiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classInstanceCreationExpression. + def visitClassInstanceCreationExpression(self, ctx:Java20Parser.ClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unqualifiedClassInstanceCreationExpression. + def visitUnqualifiedClassInstanceCreationExpression(self, ctx:Java20Parser.UnqualifiedClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classOrInterfaceTypeToInstantiate. + def visitClassOrInterfaceTypeToInstantiate(self, ctx:Java20Parser.ClassOrInterfaceTypeToInstantiateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgumentsOrDiamond. + def visitTypeArgumentsOrDiamond(self, ctx:Java20Parser.TypeArgumentsOrDiamondContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpression. + def visitArrayCreationExpression(self, ctx:Java20Parser.ArrayCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpressionWithoutInitializer. + def visitArrayCreationExpressionWithoutInitializer(self, ctx:Java20Parser.ArrayCreationExpressionWithoutInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpressionWithInitializer. + def visitArrayCreationExpressionWithInitializer(self, ctx:Java20Parser.ArrayCreationExpressionWithInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dimExprs. + def visitDimExprs(self, ctx:Java20Parser.DimExprsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dimExpr. + def visitDimExpr(self, ctx:Java20Parser.DimExprContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayAccess. + def visitArrayAccess(self, ctx:Java20Parser.ArrayAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldAccess. + def visitFieldAccess(self, ctx:Java20Parser.FieldAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodInvocation. + def visitMethodInvocation(self, ctx:Java20Parser.MethodInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#argumentList. + def visitArgumentList(self, ctx:Java20Parser.ArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodReference. + def visitMethodReference(self, ctx:Java20Parser.MethodReferenceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postfixExpression. + def visitPostfixExpression(self, ctx:Java20Parser.PostfixExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pfE. + def visitPfE(self, ctx:Java20Parser.PfEContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postIncrementExpression. + def visitPostIncrementExpression(self, ctx:Java20Parser.PostIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postDecrementExpression. + def visitPostDecrementExpression(self, ctx:Java20Parser.PostDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unaryExpression. + def visitUnaryExpression(self, ctx:Java20Parser.UnaryExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#preIncrementExpression. + def visitPreIncrementExpression(self, ctx:Java20Parser.PreIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#preDecrementExpression. + def visitPreDecrementExpression(self, ctx:Java20Parser.PreDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unaryExpressionNotPlusMinus. + def visitUnaryExpressionNotPlusMinus(self, ctx:Java20Parser.UnaryExpressionNotPlusMinusContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#castExpression. + def visitCastExpression(self, ctx:Java20Parser.CastExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#multiplicativeExpression. + def visitMultiplicativeExpression(self, ctx:Java20Parser.MultiplicativeExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#additiveExpression. + def visitAdditiveExpression(self, ctx:Java20Parser.AdditiveExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#shiftExpression. + def visitShiftExpression(self, ctx:Java20Parser.ShiftExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#relationalExpression. + def visitRelationalExpression(self, ctx:Java20Parser.RelationalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#equalityExpression. + def visitEqualityExpression(self, ctx:Java20Parser.EqualityExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#andExpression. + def visitAndExpression(self, ctx:Java20Parser.AndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exclusiveOrExpression. + def visitExclusiveOrExpression(self, ctx:Java20Parser.ExclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#inclusiveOrExpression. + def visitInclusiveOrExpression(self, ctx:Java20Parser.InclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalAndExpression. + def visitConditionalAndExpression(self, ctx:Java20Parser.ConditionalAndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalOrExpression. + def visitConditionalOrExpression(self, ctx:Java20Parser.ConditionalOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalExpression. + def visitConditionalExpression(self, ctx:Java20Parser.ConditionalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignmentExpression. + def visitAssignmentExpression(self, ctx:Java20Parser.AssignmentExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignment. + def visitAssignment(self, ctx:Java20Parser.AssignmentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#leftHandSide. + def visitLeftHandSide(self, ctx:Java20Parser.LeftHandSideContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignmentOperator. + def visitAssignmentOperator(self, ctx:Java20Parser.AssignmentOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaExpression. + def visitLambdaExpression(self, ctx:Java20Parser.LambdaExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameters. + def visitLambdaParameters(self, ctx:Java20Parser.LambdaParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameterList. + def visitLambdaParameterList(self, ctx:Java20Parser.LambdaParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameter. + def visitLambdaParameter(self, ctx:Java20Parser.LambdaParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameterType. + def visitLambdaParameterType(self, ctx:Java20Parser.LambdaParameterTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaBody. + def visitLambdaBody(self, ctx:Java20Parser.LambdaBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchExpression. + def visitSwitchExpression(self, ctx:Java20Parser.SwitchExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantExpression. + def visitConstantExpression(self, ctx:Java20Parser.ConstantExpressionContext): + return self.visitChildren(ctx) + + + +del Java20Parser \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/java/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Lexer.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Lexer.py new file mode 100644 index 000000000..5603da4fa --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Lexer.py @@ -0,0 +1,791 @@ +# Generated from Python3Lexer.g4 by ANTLR 4.13.1 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +if "." in __name__: + from module_programming_winnowing.convert_code_to_ast.languages.python.Python3LexerBase import Python3LexerBase +else: + from module_programming_winnowing.convert_code_to_ast.languages.python.Python3LexerBase import Python3LexerBase + +def serializedATN(): + return [ + 4,0,102,910,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, + 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, + 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, + 26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7, + 32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2, + 39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7, + 45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2, + 52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7, + 58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2, + 65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7, + 71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2, + 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7, + 84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2, + 91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7, + 97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,1,0,1,0,3,0,262,8,0,1, + 1,1,1,1,1,3,1,267,8,1,1,2,1,2,1,2,1,2,3,2,273,8,2,1,3,1,3,1,3,1, + 3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1, + 6,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1, + 9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11, + 1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,14,1,14, + 1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18, + 1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,23,1,23,1,23,1,23, + 1,23,1,23,1,23,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26,1,26,1,26, + 1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28, + 1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30, + 1,30,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33, + 1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35, + 1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38, + 1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41, + 1,41,3,41,481,8,41,1,41,1,41,3,41,485,8,41,1,41,3,41,488,8,41,3, + 41,490,8,41,1,41,1,41,1,42,1,42,5,42,496,8,42,10,42,12,42,499,9, + 42,1,43,1,43,1,43,1,43,1,43,3,43,506,8,43,1,43,1,43,3,43,510,8,43, + 1,44,1,44,1,44,1,44,1,44,3,44,517,8,44,1,44,1,44,3,44,521,8,44,1, + 45,1,45,5,45,525,8,45,10,45,12,45,528,9,45,1,45,4,45,531,8,45,11, + 45,12,45,532,3,45,535,8,45,1,46,1,46,1,46,4,46,540,8,46,11,46,12, + 46,541,1,47,1,47,1,47,4,47,547,8,47,11,47,12,47,548,1,48,1,48,1, + 48,4,48,554,8,48,11,48,12,48,555,1,49,1,49,3,49,560,8,49,1,50,1, + 50,3,50,564,8,50,1,50,1,50,1,51,1,51,1,52,1,52,1,52,1,52,1,53,1, + 53,1,54,1,54,1,54,1,55,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,1, + 59,1,59,1,59,1,60,1,60,1,61,1,61,1,61,1,62,1,62,1,62,1,63,1,63,1, + 64,1,64,1,65,1,65,1,66,1,66,1,66,1,67,1,67,1,67,1,68,1,68,1,69,1, + 69,1,70,1,70,1,71,1,71,1,72,1,72,1,72,1,73,1,73,1,74,1,74,1,74,1, + 75,1,75,1,75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,79,1,79,1,79,1, + 80,1,80,1,80,1,81,1,81,1,81,1,82,1,82,1,82,1,83,1,83,1,84,1,84,1, + 84,1,85,1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,87,1,88,1,88,1,88,1, + 89,1,89,1,89,1,90,1,90,1,90,1,91,1,91,1,91,1,92,1,92,1,92,1,93,1, + 93,1,93,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1, + 96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,3,98,700,8,98,1,98,1,98,1, + 99,1,99,1,100,1,100,1,100,5,100,709,8,100,10,100,12,100,712,9,100, + 1,100,1,100,1,100,1,100,5,100,718,8,100,10,100,12,100,721,9,100, + 1,100,3,100,724,8,100,1,101,1,101,1,101,1,101,1,101,5,101,731,8, + 101,10,101,12,101,734,9,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,5,101,744,8,101,10,101,12,101,747,9,101,1,101,1,101, + 1,101,3,101,752,8,101,1,102,1,102,3,102,756,8,102,1,103,1,103,1, + 104,1,104,1,104,1,104,3,104,764,8,104,1,105,1,105,1,106,1,106,1, + 107,1,107,1,108,1,108,1,109,1,109,1,110,3,110,777,8,110,1,110,1, + 110,1,110,1,110,3,110,783,8,110,1,111,1,111,3,111,787,8,111,1,111, + 1,111,1,112,4,112,792,8,112,11,112,12,112,793,1,113,1,113,4,113, + 798,8,113,11,113,12,113,799,1,114,1,114,3,114,804,8,114,1,114,4, + 114,807,8,114,11,114,12,114,808,1,115,1,115,1,115,5,115,814,8,115, + 10,115,12,115,817,9,115,1,115,1,115,1,115,1,115,5,115,823,8,115, + 10,115,12,115,826,9,115,1,115,3,115,829,8,115,1,116,1,116,1,116, + 1,116,1,116,5,116,836,8,116,10,116,12,116,839,9,116,1,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,5,116,849,8,116,10,116,12,116, + 852,9,116,1,116,1,116,1,116,3,116,857,8,116,1,117,1,117,3,117,861, + 8,117,1,118,3,118,864,8,118,1,119,3,119,867,8,119,1,120,3,120,870, + 8,120,1,121,1,121,1,121,1,122,4,122,876,8,122,11,122,12,122,877, + 1,123,1,123,5,123,882,8,123,10,123,12,123,885,9,123,1,124,1,124, + 3,124,889,8,124,1,124,3,124,892,8,124,1,124,1,124,3,124,896,8,124, + 1,125,1,125,1,126,1,126,1,127,1,127,3,127,904,8,127,1,128,1,128, + 1,128,3,128,909,8,128,4,732,745,837,850,0,129,1,3,3,4,5,5,7,6,9, + 7,11,8,13,9,15,10,17,11,19,12,21,13,23,14,25,15,27,16,29,17,31,18, + 33,19,35,20,37,21,39,22,41,23,43,24,45,25,47,26,49,27,51,28,53,29, + 55,30,57,31,59,32,61,33,63,34,65,35,67,36,69,37,71,38,73,39,75,40, + 77,41,79,42,81,43,83,44,85,45,87,46,89,47,91,48,93,49,95,50,97,51, + 99,52,101,53,103,54,105,55,107,56,109,57,111,58,113,59,115,60,117, + 61,119,62,121,63,123,64,125,65,127,66,129,67,131,68,133,69,135,70, + 137,71,139,72,141,73,143,74,145,75,147,76,149,77,151,78,153,79,155, + 80,157,81,159,82,161,83,163,84,165,85,167,86,169,87,171,88,173,89, + 175,90,177,91,179,92,181,93,183,94,185,95,187,96,189,97,191,98,193, + 99,195,100,197,101,199,102,201,0,203,0,205,0,207,0,209,0,211,0,213, + 0,215,0,217,0,219,0,221,0,223,0,225,0,227,0,229,0,231,0,233,0,235, + 0,237,0,239,0,241,0,243,0,245,0,247,0,249,0,251,0,253,0,255,0,257, + 0,1,0,27,6,0,70,70,82,82,85,85,102,102,114,114,117,117,2,0,70,70, + 102,102,2,0,82,82,114,114,2,0,66,66,98,98,2,0,79,79,111,111,2,0, + 88,88,120,120,2,0,74,74,106,106,4,0,10,10,12,13,39,39,92,92,4,0, + 10,10,12,13,34,34,92,92,1,0,92,92,1,0,49,57,1,0,48,57,1,0,48,55, + 3,0,48,57,65,70,97,102,1,0,48,49,2,0,69,69,101,101,2,0,43,43,45, + 45,5,0,0,9,11,12,14,38,40,91,93,127,5,0,0,9,11,12,14,33,35,91,93, + 127,2,0,0,91,93,127,1,0,0,127,2,0,9,9,32,32,2,0,10,10,12,13,4,0, + 6277,6278,8472,8472,8494,8494,12443,12444,4,0,183,183,903,903,4969, + 4977,6618,6618,663,0,65,90,95,95,97,122,170,170,181,181,186,186, + 192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884, + 886,887,890,893,895,895,902,902,904,906,908,908,910,929,931,1013, + 1015,1153,1162,1327,1329,1366,1369,1369,1376,1416,1488,1514,1519, + 1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775, + 1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994, + 2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088, + 2112,2136,2144,2154,2160,2183,2185,2190,2208,2249,2308,2361,2365, + 2365,2384,2384,2392,2401,2417,2432,2437,2444,2447,2448,2451,2472, + 2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527, + 2529,2544,2545,2556,2556,2565,2570,2575,2576,2579,2600,2602,2608, + 2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693, + 2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749, + 2768,2768,2784,2785,2809,2809,2821,2828,2831,2832,2835,2856,2858, + 2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929, + 2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974, + 2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088, + 3090,3112,3114,3129,3133,3133,3160,3162,3165,3165,3168,3169,3200, + 3200,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261, + 3293,3294,3296,3297,3313,3314,3332,3340,3342,3344,3346,3386,3389, + 3389,3406,3406,3412,3414,3423,3425,3450,3455,3461,3478,3482,3505, + 3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713, + 3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3760,3762,3763, + 3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913, + 3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193, + 4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301, + 4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701, + 4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802, + 4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5109, + 5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888, + 5905,5919,5937,5952,5969,5984,5996,5998,6000,6016,6067,6103,6103, + 6108,6108,6176,6264,6272,6276,6279,6312,6314,6314,6320,6389,6400, + 6430,6480,6509,6512,6516,6528,6571,6576,6601,6656,6678,6688,6740, + 6823,6823,6917,6963,6981,6988,7043,7072,7086,7087,7098,7141,7168, + 7203,7245,7247,7258,7293,7296,7304,7312,7354,7357,7359,7401,7404, + 7406,7411,7413,7414,7418,7418,7424,7615,7680,7957,7960,7965,7968, + 8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061, + 8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150, + 8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348, + 8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486, + 8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526, + 8544,8584,11264,11492,11499,11502,11506,11507,11520,11557,11559, + 11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686, + 11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728, + 11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341, + 12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549, + 12591,12593,12686,12704,12735,12784,12799,13312,19903,19968,42124, + 42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623, + 42653,42656,42735,42775,42783,42786,42888,42891,42954,42960,42961, + 42963,42963,42965,42969,42994,43009,43011,43013,43015,43018,43020, + 43042,43072,43123,43138,43187,43250,43255,43259,43259,43261,43262, + 43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43488, + 43492,43494,43503,43514,43518,43520,43560,43584,43586,43588,43595, + 43616,43638,43642,43642,43646,43695,43697,43697,43701,43702,43705, + 43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764, + 43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824, + 43866,43868,43881,43888,44002,44032,55203,55216,55238,55243,55291, + 63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287, + 64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324, + 64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136, + 65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479, + 65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576, + 65594,65596,65597,65599,65613,65616,65629,65664,65786,65856,65908, + 66176,66204,66208,66256,66304,66335,66349,66378,66384,66421,66432, + 66461,66464,66499,66504,66511,66513,66517,66560,66717,66736,66771, + 66776,66811,66816,66855,66864,66915,66928,66938,66940,66954,66956, + 66962,66964,66965,66967,66977,66979,66993,66995,67001,67003,67004, + 67072,67382,67392,67413,67424,67431,67456,67461,67463,67504,67506, + 67514,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644, + 67647,67669,67680,67702,67712,67742,67808,67826,67828,67829,67840, + 67861,67872,67897,67968,68023,68030,68031,68096,68096,68112,68115, + 68117,68119,68121,68149,68192,68220,68224,68252,68288,68295,68297, + 68324,68352,68405,68416,68437,68448,68466,68480,68497,68608,68680, + 68736,68786,68800,68850,68864,68899,69248,69289,69296,69297,69376, + 69404,69415,69415,69424,69445,69488,69505,69552,69572,69600,69622, + 69635,69687,69745,69746,69749,69749,69763,69807,69840,69864,69891, + 69926,69956,69956,69959,69959,69968,70002,70006,70006,70019,70066, + 70081,70084,70106,70106,70108,70108,70144,70161,70163,70187,70207, + 70208,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312, + 70320,70366,70405,70412,70415,70416,70419,70440,70442,70448,70450, + 70451,70453,70457,70461,70461,70480,70480,70493,70497,70656,70708, + 70727,70730,70751,70753,70784,70831,70852,70853,70855,70855,71040, + 71086,71128,71131,71168,71215,71236,71236,71296,71338,71352,71352, + 71424,71450,71488,71494,71680,71723,71840,71903,71935,71942,71945, + 71945,71948,71955,71957,71958,71960,71983,71999,71999,72001,72001, + 72096,72103,72106,72144,72161,72161,72163,72163,72192,72192,72203, + 72242,72250,72250,72272,72272,72284,72329,72349,72349,72368,72440, + 72704,72712,72714,72750,72768,72768,72818,72847,72960,72966,72968, + 72969,72971,73008,73030,73030,73056,73061,73063,73064,73066,73097, + 73112,73112,73440,73458,73474,73474,73476,73488,73490,73523,73648, + 73648,73728,74649,74752,74862,74880,75075,77712,77808,77824,78895, + 78913,78918,82944,83526,92160,92728,92736,92766,92784,92862,92880, + 92909,92928,92975,92992,92995,93027,93047,93053,93071,93760,93823, + 93952,94026,94032,94032,94099,94111,94176,94177,94179,94179,94208, + 100343,100352,101589,101632,101640,110576,110579,110581,110587,110589, + 110590,110592,110882,110898,110898,110928,110930,110933,110933,110948, + 110951,110960,111355,113664,113770,113776,113788,113792,113800,113808, + 113817,119808,119892,119894,119964,119966,119967,119970,119970,119973, + 119974,119977,119980,119982,119993,119995,119995,119997,120003,120005, + 120069,120071,120074,120077,120084,120086,120092,120094,120121,120123, + 120126,120128,120132,120134,120134,120138,120144,120146,120485,120488, + 120512,120514,120538,120540,120570,120572,120596,120598,120628,120630, + 120654,120656,120686,120688,120712,120714,120744,120746,120770,120772, + 120779,122624,122654,122661,122666,122928,122989,123136,123180,123191, + 123197,123214,123214,123536,123565,123584,123627,124112,124139,124896, + 124902,124904,124907,124909,124910,124912,124926,124928,125124,125184, + 125251,125259,125259,126464,126467,126469,126495,126497,126498,126500, + 126500,126503,126503,126505,126514,126516,126519,126521,126521,126523, + 126523,126530,126530,126535,126535,126537,126537,126539,126539,126541, + 126543,126545,126546,126548,126548,126551,126551,126553,126553,126555, + 126555,126557,126557,126559,126559,126561,126562,126564,126564,126567, + 126570,126572,126578,126580,126583,126585,126588,126590,126590,126592, + 126601,126603,126619,126625,126627,126629,126633,126635,126651,131072, + 173791,173824,177977,177984,178205,178208,183969,183984,191456,194560, + 195101,196608,201546,201552,205743,372,0,48,57,95,95,768,879,1155, + 1159,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1552,1562, + 1611,1641,1648,1648,1750,1756,1759,1764,1767,1768,1770,1773,1776, + 1785,1809,1809,1840,1866,1958,1968,1984,1993,2027,2035,2045,2045, + 2070,2073,2075,2083,2085,2087,2089,2093,2137,2139,2200,2207,2250, + 2273,2275,2307,2362,2364,2366,2383,2385,2391,2402,2403,2406,2415, + 2433,2435,2492,2492,2494,2500,2503,2504,2507,2509,2519,2519,2530, + 2531,2534,2543,2558,2558,2561,2563,2620,2620,2622,2626,2631,2632, + 2635,2637,2641,2641,2662,2673,2677,2677,2689,2691,2748,2748,2750, + 2757,2759,2761,2763,2765,2786,2787,2790,2799,2810,2815,2817,2819, + 2876,2876,2878,2884,2887,2888,2891,2893,2901,2903,2914,2915,2918, + 2927,2946,2946,3006,3010,3014,3016,3018,3021,3031,3031,3046,3055, + 3072,3076,3132,3132,3134,3140,3142,3144,3146,3149,3157,3158,3170, + 3171,3174,3183,3201,3203,3260,3260,3262,3268,3270,3272,3274,3277, + 3285,3286,3298,3299,3302,3311,3315,3315,3328,3331,3387,3388,3390, + 3396,3398,3400,3402,3405,3415,3415,3426,3427,3430,3439,3457,3459, + 3530,3530,3535,3540,3542,3542,3544,3551,3558,3567,3570,3571,3633, + 3633,3636,3642,3655,3662,3664,3673,3761,3761,3764,3772,3784,3790, + 3792,3801,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902, + 3903,3953,3972,3974,3975,3981,3991,3993,4028,4038,4038,4139,4158, + 4160,4169,4182,4185,4190,4192,4194,4196,4199,4205,4209,4212,4226, + 4237,4239,4253,4957,4959,5906,5909,5938,5940,5970,5971,6002,6003, + 6068,6099,6109,6109,6112,6121,6155,6157,6159,6169,6277,6278,6313, + 6313,6432,6443,6448,6459,6470,6479,6608,6617,6679,6683,6741,6750, + 6752,6780,6783,6793,6800,6809,6832,6845,6847,6862,6912,6916,6964, + 6980,6992,7001,7019,7027,7040,7042,7073,7085,7088,7097,7142,7155, + 7204,7223,7232,7241,7248,7257,7376,7378,7380,7400,7405,7405,7412, + 7412,7415,7417,7616,7679,8255,8256,8276,8276,8400,8412,8417,8417, + 8421,8432,11503,11505,11647,11647,11744,11775,12330,12335,12441, + 12442,42528,42537,42607,42607,42612,42621,42654,42655,42736,42737, + 43010,43010,43014,43014,43019,43019,43043,43047,43052,43052,43136, + 43137,43188,43205,43216,43225,43232,43249,43263,43273,43302,43309, + 43335,43347,43392,43395,43443,43456,43472,43481,43493,43493,43504, + 43513,43561,43574,43587,43587,43596,43597,43600,43609,43643,43645, + 43696,43696,43698,43700,43703,43704,43710,43711,43713,43713,43755, + 43759,43765,43766,44003,44010,44012,44013,44016,44025,64286,64286, + 65024,65039,65056,65071,65075,65076,65101,65103,65296,65305,65343, + 65343,66045,66045,66272,66272,66422,66426,66720,66729,68097,68099, + 68101,68102,68108,68111,68152,68154,68159,68159,68325,68326,68900, + 68903,68912,68921,69291,69292,69373,69375,69446,69456,69506,69509, + 69632,69634,69688,69702,69734,69744,69747,69748,69759,69762,69808, + 69818,69826,69826,69872,69881,69888,69890,69927,69940,69942,69951, + 69957,69958,70003,70003,70016,70018,70067,70080,70089,70092,70094, + 70105,70188,70199,70206,70206,70209,70209,70367,70378,70384,70393, + 70400,70403,70459,70460,70462,70468,70471,70472,70475,70477,70487, + 70487,70498,70499,70502,70508,70512,70516,70709,70726,70736,70745, + 70750,70750,70832,70851,70864,70873,71087,71093,71096,71104,71132, + 71133,71216,71232,71248,71257,71339,71351,71360,71369,71453,71467, + 71472,71481,71724,71738,71904,71913,71984,71989,71991,71992,71995, + 71998,72000,72000,72002,72003,72016,72025,72145,72151,72154,72160, + 72164,72164,72193,72202,72243,72249,72251,72254,72263,72263,72273, + 72283,72330,72345,72751,72758,72760,72767,72784,72793,72850,72871, + 72873,72886,73009,73014,73018,73018,73020,73021,73023,73029,73031, + 73031,73040,73049,73098,73102,73104,73105,73107,73111,73120,73129, + 73459,73462,73472,73473,73475,73475,73524,73530,73534,73538,73552, + 73561,78912,78912,78919,78933,92768,92777,92864,92873,92912,92916, + 92976,92982,93008,93017,94031,94031,94033,94087,94095,94098,94180, + 94180,94192,94193,113821,113822,118528,118573,118576,118598,119141, + 119145,119149,119154,119163,119170,119173,119179,119210,119213,119362, + 119364,120782,120831,121344,121398,121403,121452,121461,121461,121476, + 121476,121499,121503,121505,121519,122880,122886,122888,122904,122907, + 122913,122915,122916,122918,122922,123023,123023,123184,123190,123200, + 123209,123566,123566,123628,123641,124140,124153,125136,125142,125252, + 125258,125264,125273,130032,130041,917760,917999,942,0,1,1,0,0,0, + 0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13, + 1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23, + 1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33, + 1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43, + 1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53, + 1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63, + 1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73, + 1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83, + 1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93, + 1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103, + 1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0, + 0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1, + 0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0, + 131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0, + 0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149, + 1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0, + 0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1, + 0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0, + 177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0, + 0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195, + 1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,1,261,1,0,0,0,3,266,1,0,0,0, + 5,272,1,0,0,0,7,274,1,0,0,0,9,278,1,0,0,0,11,281,1,0,0,0,13,288, + 1,0,0,0,15,294,1,0,0,0,17,300,1,0,0,0,19,306,1,0,0,0,21,311,1,0, + 0,0,23,317,1,0,0,0,25,326,1,0,0,0,27,330,1,0,0,0,29,334,1,0,0,0, + 31,339,1,0,0,0,33,344,1,0,0,0,35,351,1,0,0,0,37,357,1,0,0,0,39,365, + 1,0,0,0,41,369,1,0,0,0,43,374,1,0,0,0,45,381,1,0,0,0,47,384,1,0, + 0,0,49,391,1,0,0,0,51,394,1,0,0,0,53,397,1,0,0,0,55,404,1,0,0,0, + 57,410,1,0,0,0,59,415,1,0,0,0,61,424,1,0,0,0,63,428,1,0,0,0,65,431, + 1,0,0,0,67,436,1,0,0,0,69,442,1,0,0,0,71,449,1,0,0,0,73,454,1,0, + 0,0,75,458,1,0,0,0,77,460,1,0,0,0,79,466,1,0,0,0,81,471,1,0,0,0, + 83,489,1,0,0,0,85,493,1,0,0,0,87,505,1,0,0,0,89,516,1,0,0,0,91,534, + 1,0,0,0,93,536,1,0,0,0,95,543,1,0,0,0,97,550,1,0,0,0,99,559,1,0, + 0,0,101,563,1,0,0,0,103,567,1,0,0,0,105,569,1,0,0,0,107,573,1,0, + 0,0,109,575,1,0,0,0,111,578,1,0,0,0,113,581,1,0,0,0,115,583,1,0, + 0,0,117,585,1,0,0,0,119,587,1,0,0,0,121,590,1,0,0,0,123,592,1,0, + 0,0,125,595,1,0,0,0,127,598,1,0,0,0,129,600,1,0,0,0,131,602,1,0, + 0,0,133,604,1,0,0,0,135,607,1,0,0,0,137,610,1,0,0,0,139,612,1,0, + 0,0,141,614,1,0,0,0,143,616,1,0,0,0,145,618,1,0,0,0,147,621,1,0, + 0,0,149,623,1,0,0,0,151,626,1,0,0,0,153,629,1,0,0,0,155,631,1,0, + 0,0,157,633,1,0,0,0,159,636,1,0,0,0,161,639,1,0,0,0,163,642,1,0, + 0,0,165,645,1,0,0,0,167,648,1,0,0,0,169,650,1,0,0,0,171,653,1,0, + 0,0,173,656,1,0,0,0,175,659,1,0,0,0,177,662,1,0,0,0,179,665,1,0, + 0,0,181,668,1,0,0,0,183,671,1,0,0,0,185,674,1,0,0,0,187,677,1,0, + 0,0,189,680,1,0,0,0,191,684,1,0,0,0,193,688,1,0,0,0,195,692,1,0, + 0,0,197,699,1,0,0,0,199,703,1,0,0,0,201,723,1,0,0,0,203,751,1,0, + 0,0,205,755,1,0,0,0,207,757,1,0,0,0,209,763,1,0,0,0,211,765,1,0, + 0,0,213,767,1,0,0,0,215,769,1,0,0,0,217,771,1,0,0,0,219,773,1,0, + 0,0,221,782,1,0,0,0,223,786,1,0,0,0,225,791,1,0,0,0,227,795,1,0, + 0,0,229,801,1,0,0,0,231,828,1,0,0,0,233,856,1,0,0,0,235,860,1,0, + 0,0,237,863,1,0,0,0,239,866,1,0,0,0,241,869,1,0,0,0,243,871,1,0, + 0,0,245,875,1,0,0,0,247,879,1,0,0,0,249,886,1,0,0,0,251,897,1,0, + 0,0,253,899,1,0,0,0,255,903,1,0,0,0,257,908,1,0,0,0,259,262,3,87, + 43,0,260,262,3,89,44,0,261,259,1,0,0,0,261,260,1,0,0,0,262,2,1,0, + 0,0,263,267,3,5,2,0,264,267,3,99,49,0,265,267,3,101,50,0,266,263, + 1,0,0,0,266,264,1,0,0,0,266,265,1,0,0,0,267,4,1,0,0,0,268,273,3, + 91,45,0,269,273,3,93,46,0,270,273,3,95,47,0,271,273,3,97,48,0,272, + 268,1,0,0,0,272,269,1,0,0,0,272,270,1,0,0,0,272,271,1,0,0,0,273, + 6,1,0,0,0,274,275,5,97,0,0,275,276,5,110,0,0,276,277,5,100,0,0,277, + 8,1,0,0,0,278,279,5,97,0,0,279,280,5,115,0,0,280,10,1,0,0,0,281, + 282,5,97,0,0,282,283,5,115,0,0,283,284,5,115,0,0,284,285,5,101,0, + 0,285,286,5,114,0,0,286,287,5,116,0,0,287,12,1,0,0,0,288,289,5,97, + 0,0,289,290,5,115,0,0,290,291,5,121,0,0,291,292,5,110,0,0,292,293, + 5,99,0,0,293,14,1,0,0,0,294,295,5,97,0,0,295,296,5,119,0,0,296,297, + 5,97,0,0,297,298,5,105,0,0,298,299,5,116,0,0,299,16,1,0,0,0,300, + 301,5,98,0,0,301,302,5,114,0,0,302,303,5,101,0,0,303,304,5,97,0, + 0,304,305,5,107,0,0,305,18,1,0,0,0,306,307,5,99,0,0,307,308,5,97, + 0,0,308,309,5,115,0,0,309,310,5,101,0,0,310,20,1,0,0,0,311,312,5, + 99,0,0,312,313,5,108,0,0,313,314,5,97,0,0,314,315,5,115,0,0,315, + 316,5,115,0,0,316,22,1,0,0,0,317,318,5,99,0,0,318,319,5,111,0,0, + 319,320,5,110,0,0,320,321,5,116,0,0,321,322,5,105,0,0,322,323,5, + 110,0,0,323,324,5,117,0,0,324,325,5,101,0,0,325,24,1,0,0,0,326,327, + 5,100,0,0,327,328,5,101,0,0,328,329,5,102,0,0,329,26,1,0,0,0,330, + 331,5,100,0,0,331,332,5,101,0,0,332,333,5,108,0,0,333,28,1,0,0,0, + 334,335,5,101,0,0,335,336,5,108,0,0,336,337,5,105,0,0,337,338,5, + 102,0,0,338,30,1,0,0,0,339,340,5,101,0,0,340,341,5,108,0,0,341,342, + 5,115,0,0,342,343,5,101,0,0,343,32,1,0,0,0,344,345,5,101,0,0,345, + 346,5,120,0,0,346,347,5,99,0,0,347,348,5,101,0,0,348,349,5,112,0, + 0,349,350,5,116,0,0,350,34,1,0,0,0,351,352,5,70,0,0,352,353,5,97, + 0,0,353,354,5,108,0,0,354,355,5,115,0,0,355,356,5,101,0,0,356,36, + 1,0,0,0,357,358,5,102,0,0,358,359,5,105,0,0,359,360,5,110,0,0,360, + 361,5,97,0,0,361,362,5,108,0,0,362,363,5,108,0,0,363,364,5,121,0, + 0,364,38,1,0,0,0,365,366,5,102,0,0,366,367,5,111,0,0,367,368,5,114, + 0,0,368,40,1,0,0,0,369,370,5,102,0,0,370,371,5,114,0,0,371,372,5, + 111,0,0,372,373,5,109,0,0,373,42,1,0,0,0,374,375,5,103,0,0,375,376, + 5,108,0,0,376,377,5,111,0,0,377,378,5,98,0,0,378,379,5,97,0,0,379, + 380,5,108,0,0,380,44,1,0,0,0,381,382,5,105,0,0,382,383,5,102,0,0, + 383,46,1,0,0,0,384,385,5,105,0,0,385,386,5,109,0,0,386,387,5,112, + 0,0,387,388,5,111,0,0,388,389,5,114,0,0,389,390,5,116,0,0,390,48, + 1,0,0,0,391,392,5,105,0,0,392,393,5,110,0,0,393,50,1,0,0,0,394,395, + 5,105,0,0,395,396,5,115,0,0,396,52,1,0,0,0,397,398,5,108,0,0,398, + 399,5,97,0,0,399,400,5,109,0,0,400,401,5,98,0,0,401,402,5,100,0, + 0,402,403,5,97,0,0,403,54,1,0,0,0,404,405,5,109,0,0,405,406,5,97, + 0,0,406,407,5,116,0,0,407,408,5,99,0,0,408,409,5,104,0,0,409,56, + 1,0,0,0,410,411,5,78,0,0,411,412,5,111,0,0,412,413,5,110,0,0,413, + 414,5,101,0,0,414,58,1,0,0,0,415,416,5,110,0,0,416,417,5,111,0,0, + 417,418,5,110,0,0,418,419,5,108,0,0,419,420,5,111,0,0,420,421,5, + 99,0,0,421,422,5,97,0,0,422,423,5,108,0,0,423,60,1,0,0,0,424,425, + 5,110,0,0,425,426,5,111,0,0,426,427,5,116,0,0,427,62,1,0,0,0,428, + 429,5,111,0,0,429,430,5,114,0,0,430,64,1,0,0,0,431,432,5,112,0,0, + 432,433,5,97,0,0,433,434,5,115,0,0,434,435,5,115,0,0,435,66,1,0, + 0,0,436,437,5,114,0,0,437,438,5,97,0,0,438,439,5,105,0,0,439,440, + 5,115,0,0,440,441,5,101,0,0,441,68,1,0,0,0,442,443,5,114,0,0,443, + 444,5,101,0,0,444,445,5,116,0,0,445,446,5,117,0,0,446,447,5,114, + 0,0,447,448,5,110,0,0,448,70,1,0,0,0,449,450,5,84,0,0,450,451,5, + 114,0,0,451,452,5,117,0,0,452,453,5,101,0,0,453,72,1,0,0,0,454,455, + 5,116,0,0,455,456,5,114,0,0,456,457,5,121,0,0,457,74,1,0,0,0,458, + 459,5,95,0,0,459,76,1,0,0,0,460,461,5,119,0,0,461,462,5,104,0,0, + 462,463,5,105,0,0,463,464,5,108,0,0,464,465,5,101,0,0,465,78,1,0, + 0,0,466,467,5,119,0,0,467,468,5,105,0,0,468,469,5,116,0,0,469,470, + 5,104,0,0,470,80,1,0,0,0,471,472,5,121,0,0,472,473,5,105,0,0,473, + 474,5,101,0,0,474,475,5,108,0,0,475,476,5,100,0,0,476,82,1,0,0,0, + 477,478,4,41,0,0,478,490,3,245,122,0,479,481,5,13,0,0,480,479,1, + 0,0,0,480,481,1,0,0,0,481,482,1,0,0,0,482,485,5,10,0,0,483,485,2, + 12,13,0,484,480,1,0,0,0,484,483,1,0,0,0,485,487,1,0,0,0,486,488, + 3,245,122,0,487,486,1,0,0,0,487,488,1,0,0,0,488,490,1,0,0,0,489, + 477,1,0,0,0,489,484,1,0,0,0,490,491,1,0,0,0,491,492,6,41,0,0,492, + 84,1,0,0,0,493,497,3,255,127,0,494,496,3,257,128,0,495,494,1,0,0, + 0,496,499,1,0,0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,86,1,0,0,0, + 499,497,1,0,0,0,500,506,7,0,0,0,501,502,7,1,0,0,502,506,7,2,0,0, + 503,504,7,2,0,0,504,506,7,1,0,0,505,500,1,0,0,0,505,501,1,0,0,0, + 505,503,1,0,0,0,505,506,1,0,0,0,506,509,1,0,0,0,507,510,3,201,100, + 0,508,510,3,203,101,0,509,507,1,0,0,0,509,508,1,0,0,0,510,88,1,0, + 0,0,511,517,7,3,0,0,512,513,7,3,0,0,513,517,7,2,0,0,514,515,7,2, + 0,0,515,517,7,3,0,0,516,511,1,0,0,0,516,512,1,0,0,0,516,514,1,0, + 0,0,517,520,1,0,0,0,518,521,3,231,115,0,519,521,3,233,116,0,520, + 518,1,0,0,0,520,519,1,0,0,0,521,90,1,0,0,0,522,526,3,211,105,0,523, + 525,3,213,106,0,524,523,1,0,0,0,525,528,1,0,0,0,526,524,1,0,0,0, + 526,527,1,0,0,0,527,535,1,0,0,0,528,526,1,0,0,0,529,531,5,48,0,0, + 530,529,1,0,0,0,531,532,1,0,0,0,532,530,1,0,0,0,532,533,1,0,0,0, + 533,535,1,0,0,0,534,522,1,0,0,0,534,530,1,0,0,0,535,92,1,0,0,0,536, + 537,5,48,0,0,537,539,7,4,0,0,538,540,3,215,107,0,539,538,1,0,0,0, + 540,541,1,0,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,94,1,0,0,0,543, + 544,5,48,0,0,544,546,7,5,0,0,545,547,3,217,108,0,546,545,1,0,0,0, + 547,548,1,0,0,0,548,546,1,0,0,0,548,549,1,0,0,0,549,96,1,0,0,0,550, + 551,5,48,0,0,551,553,7,3,0,0,552,554,3,219,109,0,553,552,1,0,0,0, + 554,555,1,0,0,0,555,553,1,0,0,0,555,556,1,0,0,0,556,98,1,0,0,0,557, + 560,3,221,110,0,558,560,3,223,111,0,559,557,1,0,0,0,559,558,1,0, + 0,0,560,100,1,0,0,0,561,564,3,99,49,0,562,564,3,225,112,0,563,561, + 1,0,0,0,563,562,1,0,0,0,564,565,1,0,0,0,565,566,7,6,0,0,566,102, + 1,0,0,0,567,568,5,46,0,0,568,104,1,0,0,0,569,570,5,46,0,0,570,571, + 5,46,0,0,571,572,5,46,0,0,572,106,1,0,0,0,573,574,5,42,0,0,574,108, + 1,0,0,0,575,576,5,40,0,0,576,577,6,54,1,0,577,110,1,0,0,0,578,579, + 5,41,0,0,579,580,6,55,2,0,580,112,1,0,0,0,581,582,5,44,0,0,582,114, + 1,0,0,0,583,584,5,58,0,0,584,116,1,0,0,0,585,586,5,59,0,0,586,118, + 1,0,0,0,587,588,5,42,0,0,588,589,5,42,0,0,589,120,1,0,0,0,590,591, + 5,61,0,0,591,122,1,0,0,0,592,593,5,91,0,0,593,594,6,61,3,0,594,124, + 1,0,0,0,595,596,5,93,0,0,596,597,6,62,4,0,597,126,1,0,0,0,598,599, + 5,124,0,0,599,128,1,0,0,0,600,601,5,94,0,0,601,130,1,0,0,0,602,603, + 5,38,0,0,603,132,1,0,0,0,604,605,5,60,0,0,605,606,5,60,0,0,606,134, + 1,0,0,0,607,608,5,62,0,0,608,609,5,62,0,0,609,136,1,0,0,0,610,611, + 5,43,0,0,611,138,1,0,0,0,612,613,5,45,0,0,613,140,1,0,0,0,614,615, + 5,47,0,0,615,142,1,0,0,0,616,617,5,37,0,0,617,144,1,0,0,0,618,619, + 5,47,0,0,619,620,5,47,0,0,620,146,1,0,0,0,621,622,5,126,0,0,622, + 148,1,0,0,0,623,624,5,123,0,0,624,625,6,74,5,0,625,150,1,0,0,0,626, + 627,5,125,0,0,627,628,6,75,6,0,628,152,1,0,0,0,629,630,5,60,0,0, + 630,154,1,0,0,0,631,632,5,62,0,0,632,156,1,0,0,0,633,634,5,61,0, + 0,634,635,5,61,0,0,635,158,1,0,0,0,636,637,5,62,0,0,637,638,5,61, + 0,0,638,160,1,0,0,0,639,640,5,60,0,0,640,641,5,61,0,0,641,162,1, + 0,0,0,642,643,5,60,0,0,643,644,5,62,0,0,644,164,1,0,0,0,645,646, + 5,33,0,0,646,647,5,61,0,0,647,166,1,0,0,0,648,649,5,64,0,0,649,168, + 1,0,0,0,650,651,5,45,0,0,651,652,5,62,0,0,652,170,1,0,0,0,653,654, + 5,43,0,0,654,655,5,61,0,0,655,172,1,0,0,0,656,657,5,45,0,0,657,658, + 5,61,0,0,658,174,1,0,0,0,659,660,5,42,0,0,660,661,5,61,0,0,661,176, + 1,0,0,0,662,663,5,64,0,0,663,664,5,61,0,0,664,178,1,0,0,0,665,666, + 5,47,0,0,666,667,5,61,0,0,667,180,1,0,0,0,668,669,5,37,0,0,669,670, + 5,61,0,0,670,182,1,0,0,0,671,672,5,38,0,0,672,673,5,61,0,0,673,184, + 1,0,0,0,674,675,5,124,0,0,675,676,5,61,0,0,676,186,1,0,0,0,677,678, + 5,94,0,0,678,679,5,61,0,0,679,188,1,0,0,0,680,681,5,60,0,0,681,682, + 5,60,0,0,682,683,5,61,0,0,683,190,1,0,0,0,684,685,5,62,0,0,685,686, + 5,62,0,0,686,687,5,61,0,0,687,192,1,0,0,0,688,689,5,42,0,0,689,690, + 5,42,0,0,690,691,5,61,0,0,691,194,1,0,0,0,692,693,5,47,0,0,693,694, + 5,47,0,0,694,695,5,61,0,0,695,196,1,0,0,0,696,700,3,245,122,0,697, + 700,3,247,123,0,698,700,3,249,124,0,699,696,1,0,0,0,699,697,1,0, + 0,0,699,698,1,0,0,0,700,701,1,0,0,0,701,702,6,98,7,0,702,198,1,0, + 0,0,703,704,9,0,0,0,704,200,1,0,0,0,705,710,5,39,0,0,706,709,3,209, + 104,0,707,709,8,7,0,0,708,706,1,0,0,0,708,707,1,0,0,0,709,712,1, + 0,0,0,710,708,1,0,0,0,710,711,1,0,0,0,711,713,1,0,0,0,712,710,1, + 0,0,0,713,724,5,39,0,0,714,719,5,34,0,0,715,718,3,209,104,0,716, + 718,8,8,0,0,717,715,1,0,0,0,717,716,1,0,0,0,718,721,1,0,0,0,719, + 717,1,0,0,0,719,720,1,0,0,0,720,722,1,0,0,0,721,719,1,0,0,0,722, + 724,5,34,0,0,723,705,1,0,0,0,723,714,1,0,0,0,724,202,1,0,0,0,725, + 726,5,39,0,0,726,727,5,39,0,0,727,728,5,39,0,0,728,732,1,0,0,0,729, + 731,3,205,102,0,730,729,1,0,0,0,731,734,1,0,0,0,732,733,1,0,0,0, + 732,730,1,0,0,0,733,735,1,0,0,0,734,732,1,0,0,0,735,736,5,39,0,0, + 736,737,5,39,0,0,737,752,5,39,0,0,738,739,5,34,0,0,739,740,5,34, + 0,0,740,741,5,34,0,0,741,745,1,0,0,0,742,744,3,205,102,0,743,742, + 1,0,0,0,744,747,1,0,0,0,745,746,1,0,0,0,745,743,1,0,0,0,746,748, + 1,0,0,0,747,745,1,0,0,0,748,749,5,34,0,0,749,750,5,34,0,0,750,752, + 5,34,0,0,751,725,1,0,0,0,751,738,1,0,0,0,752,204,1,0,0,0,753,756, + 3,207,103,0,754,756,3,209,104,0,755,753,1,0,0,0,755,754,1,0,0,0, + 756,206,1,0,0,0,757,758,8,9,0,0,758,208,1,0,0,0,759,760,5,92,0,0, + 760,764,9,0,0,0,761,762,5,92,0,0,762,764,3,83,41,0,763,759,1,0,0, + 0,763,761,1,0,0,0,764,210,1,0,0,0,765,766,7,10,0,0,766,212,1,0,0, + 0,767,768,7,11,0,0,768,214,1,0,0,0,769,770,7,12,0,0,770,216,1,0, + 0,0,771,772,7,13,0,0,772,218,1,0,0,0,773,774,7,14,0,0,774,220,1, + 0,0,0,775,777,3,225,112,0,776,775,1,0,0,0,776,777,1,0,0,0,777,778, + 1,0,0,0,778,783,3,227,113,0,779,780,3,225,112,0,780,781,5,46,0,0, + 781,783,1,0,0,0,782,776,1,0,0,0,782,779,1,0,0,0,783,222,1,0,0,0, + 784,787,3,225,112,0,785,787,3,221,110,0,786,784,1,0,0,0,786,785, + 1,0,0,0,787,788,1,0,0,0,788,789,3,229,114,0,789,224,1,0,0,0,790, + 792,3,213,106,0,791,790,1,0,0,0,792,793,1,0,0,0,793,791,1,0,0,0, + 793,794,1,0,0,0,794,226,1,0,0,0,795,797,5,46,0,0,796,798,3,213,106, + 0,797,796,1,0,0,0,798,799,1,0,0,0,799,797,1,0,0,0,799,800,1,0,0, + 0,800,228,1,0,0,0,801,803,7,15,0,0,802,804,7,16,0,0,803,802,1,0, + 0,0,803,804,1,0,0,0,804,806,1,0,0,0,805,807,3,213,106,0,806,805, + 1,0,0,0,807,808,1,0,0,0,808,806,1,0,0,0,808,809,1,0,0,0,809,230, + 1,0,0,0,810,815,5,39,0,0,811,814,3,237,118,0,812,814,3,243,121,0, + 813,811,1,0,0,0,813,812,1,0,0,0,814,817,1,0,0,0,815,813,1,0,0,0, + 815,816,1,0,0,0,816,818,1,0,0,0,817,815,1,0,0,0,818,829,5,39,0,0, + 819,824,5,34,0,0,820,823,3,239,119,0,821,823,3,243,121,0,822,820, + 1,0,0,0,822,821,1,0,0,0,823,826,1,0,0,0,824,822,1,0,0,0,824,825, + 1,0,0,0,825,827,1,0,0,0,826,824,1,0,0,0,827,829,5,34,0,0,828,810, + 1,0,0,0,828,819,1,0,0,0,829,232,1,0,0,0,830,831,5,39,0,0,831,832, + 5,39,0,0,832,833,5,39,0,0,833,837,1,0,0,0,834,836,3,235,117,0,835, + 834,1,0,0,0,836,839,1,0,0,0,837,838,1,0,0,0,837,835,1,0,0,0,838, + 840,1,0,0,0,839,837,1,0,0,0,840,841,5,39,0,0,841,842,5,39,0,0,842, + 857,5,39,0,0,843,844,5,34,0,0,844,845,5,34,0,0,845,846,5,34,0,0, + 846,850,1,0,0,0,847,849,3,235,117,0,848,847,1,0,0,0,849,852,1,0, + 0,0,850,851,1,0,0,0,850,848,1,0,0,0,851,853,1,0,0,0,852,850,1,0, + 0,0,853,854,5,34,0,0,854,855,5,34,0,0,855,857,5,34,0,0,856,830,1, + 0,0,0,856,843,1,0,0,0,857,234,1,0,0,0,858,861,3,241,120,0,859,861, + 3,243,121,0,860,858,1,0,0,0,860,859,1,0,0,0,861,236,1,0,0,0,862, + 864,7,17,0,0,863,862,1,0,0,0,864,238,1,0,0,0,865,867,7,18,0,0,866, + 865,1,0,0,0,867,240,1,0,0,0,868,870,7,19,0,0,869,868,1,0,0,0,870, + 242,1,0,0,0,871,872,5,92,0,0,872,873,7,20,0,0,873,244,1,0,0,0,874, + 876,7,21,0,0,875,874,1,0,0,0,876,877,1,0,0,0,877,875,1,0,0,0,877, + 878,1,0,0,0,878,246,1,0,0,0,879,883,5,35,0,0,880,882,8,22,0,0,881, + 880,1,0,0,0,882,885,1,0,0,0,883,881,1,0,0,0,883,884,1,0,0,0,884, + 248,1,0,0,0,885,883,1,0,0,0,886,888,5,92,0,0,887,889,3,245,122,0, + 888,887,1,0,0,0,888,889,1,0,0,0,889,895,1,0,0,0,890,892,5,13,0,0, + 891,890,1,0,0,0,891,892,1,0,0,0,892,893,1,0,0,0,893,896,5,10,0,0, + 894,896,2,12,13,0,895,891,1,0,0,0,895,894,1,0,0,0,896,250,1,0,0, + 0,897,898,7,23,0,0,898,252,1,0,0,0,899,900,7,24,0,0,900,254,1,0, + 0,0,901,904,7,25,0,0,902,904,3,251,125,0,903,901,1,0,0,0,903,902, + 1,0,0,0,904,256,1,0,0,0,905,909,3,255,127,0,906,909,7,26,0,0,907, + 909,3,253,126,0,908,905,1,0,0,0,908,906,1,0,0,0,908,907,1,0,0,0, + 909,258,1,0,0,0,58,0,261,266,272,480,484,487,489,497,505,509,516, + 520,526,532,534,541,548,555,559,563,699,708,710,717,719,723,732, + 745,751,755,763,776,782,786,793,799,803,808,813,815,822,824,828, + 837,850,856,860,863,866,869,877,883,888,891,895,903,908,8,1,41,0, + 1,54,1,1,55,2,1,61,3,1,62,4,1,74,5,1,75,6,6,0,0 + ] + +class Python3Lexer(Python3LexerBase): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + INDENT = 1 + DEDENT = 2 + STRING = 3 + NUMBER = 4 + INTEGER = 5 + AND = 6 + AS = 7 + ASSERT = 8 + ASYNC = 9 + AWAIT = 10 + BREAK = 11 + CASE = 12 + CLASS = 13 + CONTINUE = 14 + DEF = 15 + DEL = 16 + ELIF = 17 + ELSE = 18 + EXCEPT = 19 + FALSE = 20 + FINALLY = 21 + FOR = 22 + FROM = 23 + GLOBAL = 24 + IF = 25 + IMPORT = 26 + IN = 27 + IS = 28 + LAMBDA = 29 + MATCH = 30 + NONE = 31 + NONLOCAL = 32 + NOT = 33 + OR = 34 + PASS = 35 + RAISE = 36 + RETURN = 37 + TRUE = 38 + TRY = 39 + UNDERSCORE = 40 + WHILE = 41 + WITH = 42 + YIELD = 43 + NEWLINE = 44 + NAME = 45 + STRING_LITERAL = 46 + BYTES_LITERAL = 47 + DECIMAL_INTEGER = 48 + OCT_INTEGER = 49 + HEX_INTEGER = 50 + BIN_INTEGER = 51 + FLOAT_NUMBER = 52 + IMAG_NUMBER = 53 + DOT = 54 + ELLIPSIS = 55 + STAR = 56 + OPEN_PAREN = 57 + CLOSE_PAREN = 58 + COMMA = 59 + COLON = 60 + SEMI_COLON = 61 + POWER = 62 + ASSIGN = 63 + OPEN_BRACK = 64 + CLOSE_BRACK = 65 + OR_OP = 66 + XOR = 67 + AND_OP = 68 + LEFT_SHIFT = 69 + RIGHT_SHIFT = 70 + ADD = 71 + MINUS = 72 + DIV = 73 + MOD = 74 + IDIV = 75 + NOT_OP = 76 + OPEN_BRACE = 77 + CLOSE_BRACE = 78 + LESS_THAN = 79 + GREATER_THAN = 80 + EQUALS = 81 + GT_EQ = 82 + LT_EQ = 83 + NOT_EQ_1 = 84 + NOT_EQ_2 = 85 + AT = 86 + ARROW = 87 + ADD_ASSIGN = 88 + SUB_ASSIGN = 89 + MULT_ASSIGN = 90 + AT_ASSIGN = 91 + DIV_ASSIGN = 92 + MOD_ASSIGN = 93 + AND_ASSIGN = 94 + OR_ASSIGN = 95 + XOR_ASSIGN = 96 + LEFT_SHIFT_ASSIGN = 97 + RIGHT_SHIFT_ASSIGN = 98 + POWER_ASSIGN = 99 + IDIV_ASSIGN = 100 + SKIP_ = 101 + UNKNOWN_CHAR = 102 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'and'", "'as'", "'assert'", "'async'", "'await'", "'break'", + "'case'", "'class'", "'continue'", "'def'", "'del'", "'elif'", + "'else'", "'except'", "'False'", "'finally'", "'for'", "'from'", + "'global'", "'if'", "'import'", "'in'", "'is'", "'lambda'", + "'match'", "'None'", "'nonlocal'", "'not'", "'or'", "'pass'", + "'raise'", "'return'", "'True'", "'try'", "'_'", "'while'", + "'with'", "'yield'", "'.'", "'...'", "'*'", "'('", "')'", "','", + "':'", "';'", "'**'", "'='", "'['", "']'", "'|'", "'^'", "'&'", + "'<<'", "'>>'", "'+'", "'-'", "'/'", "'%'", "'//'", "'~'", "'{'", + "'}'", "'<'", "'>'", "'=='", "'>='", "'<='", "'<>'", "'!='", + "'@'", "'->'", "'+='", "'-='", "'*='", "'@='", "'/='", "'%='", + "'&='", "'|='", "'^='", "'<<='", "'>>='", "'**='", "'//='" ] + + symbolicNames = [ "", + "INDENT", "DEDENT", "STRING", "NUMBER", "INTEGER", "AND", "AS", + "ASSERT", "ASYNC", "AWAIT", "BREAK", "CASE", "CLASS", "CONTINUE", + "DEF", "DEL", "ELIF", "ELSE", "EXCEPT", "FALSE", "FINALLY", + "FOR", "FROM", "GLOBAL", "IF", "IMPORT", "IN", "IS", "LAMBDA", + "MATCH", "NONE", "NONLOCAL", "NOT", "OR", "PASS", "RAISE", "RETURN", + "TRUE", "TRY", "UNDERSCORE", "WHILE", "WITH", "YIELD", "NEWLINE", + "NAME", "STRING_LITERAL", "BYTES_LITERAL", "DECIMAL_INTEGER", + "OCT_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", + "IMAG_NUMBER", "DOT", "ELLIPSIS", "STAR", "OPEN_PAREN", "CLOSE_PAREN", + "COMMA", "COLON", "SEMI_COLON", "POWER", "ASSIGN", "OPEN_BRACK", + "CLOSE_BRACK", "OR_OP", "XOR", "AND_OP", "LEFT_SHIFT", "RIGHT_SHIFT", + "ADD", "MINUS", "DIV", "MOD", "IDIV", "NOT_OP", "OPEN_BRACE", + "CLOSE_BRACE", "LESS_THAN", "GREATER_THAN", "EQUALS", "GT_EQ", + "LT_EQ", "NOT_EQ_1", "NOT_EQ_2", "AT", "ARROW", "ADD_ASSIGN", + "SUB_ASSIGN", "MULT_ASSIGN", "AT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "LEFT_SHIFT_ASSIGN", + "RIGHT_SHIFT_ASSIGN", "POWER_ASSIGN", "IDIV_ASSIGN", "SKIP_", + "UNKNOWN_CHAR" ] + + ruleNames = [ "STRING", "NUMBER", "INTEGER", "AND", "AS", "ASSERT", + "ASYNC", "AWAIT", "BREAK", "CASE", "CLASS", "CONTINUE", + "DEF", "DEL", "ELIF", "ELSE", "EXCEPT", "FALSE", "FINALLY", + "FOR", "FROM", "GLOBAL", "IF", "IMPORT", "IN", "IS", "LAMBDA", + "MATCH", "NONE", "NONLOCAL", "NOT", "OR", "PASS", "RAISE", + "RETURN", "TRUE", "TRY", "UNDERSCORE", "WHILE", "WITH", + "YIELD", "NEWLINE", "NAME", "STRING_LITERAL", "BYTES_LITERAL", + "DECIMAL_INTEGER", "OCT_INTEGER", "HEX_INTEGER", "BIN_INTEGER", + "FLOAT_NUMBER", "IMAG_NUMBER", "DOT", "ELLIPSIS", "STAR", + "OPEN_PAREN", "CLOSE_PAREN", "COMMA", "COLON", "SEMI_COLON", + "POWER", "ASSIGN", "OPEN_BRACK", "CLOSE_BRACK", "OR_OP", + "XOR", "AND_OP", "LEFT_SHIFT", "RIGHT_SHIFT", "ADD", "MINUS", + "DIV", "MOD", "IDIV", "NOT_OP", "OPEN_BRACE", "CLOSE_BRACE", + "LESS_THAN", "GREATER_THAN", "EQUALS", "GT_EQ", "LT_EQ", + "NOT_EQ_1", "NOT_EQ_2", "AT", "ARROW", "ADD_ASSIGN", "SUB_ASSIGN", + "MULT_ASSIGN", "AT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "LEFT_SHIFT_ASSIGN", + "RIGHT_SHIFT_ASSIGN", "POWER_ASSIGN", "IDIV_ASSIGN", "SKIP_", + "UNKNOWN_CHAR", "SHORT_STRING", "LONG_STRING", "LONG_STRING_ITEM", + "LONG_STRING_CHAR", "STRING_ESCAPE_SEQ", "NON_ZERO_DIGIT", + "DIGIT", "OCT_DIGIT", "HEX_DIGIT", "BIN_DIGIT", "POINT_FLOAT", + "EXPONENT_FLOAT", "INT_PART", "FRACTION", "EXPONENT", + "SHORT_BYTES", "LONG_BYTES", "LONG_BYTES_ITEM", "SHORT_BYTES_CHAR_NO_SINGLE_QUOTE", + "SHORT_BYTES_CHAR_NO_DOUBLE_QUOTE", "LONG_BYTES_CHAR", + "BYTES_ESCAPE_SEQ", "SPACES", "COMMENT", "LINE_JOINING", + "UNICODE_OIDS", "UNICODE_OIDC", "ID_START", "ID_CONTINUE" ] + + grammarFileName = "Python3Lexer.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + + def action(self, localctx:RuleContext, ruleIndex:int, actionIndex:int): + if self._actions is None: + actions = dict() + actions[41] = self.NEWLINE_action + actions[54] = self.OPEN_PAREN_action + actions[55] = self.CLOSE_PAREN_action + actions[61] = self.OPEN_BRACK_action + actions[62] = self.CLOSE_BRACK_action + actions[74] = self.OPEN_BRACE_action + actions[75] = self.CLOSE_BRACE_action + self._actions = actions + action = self._actions.get(ruleIndex, None) + if action is not None: + action(localctx, actionIndex) + else: + raise Exception("No registered action for:" + str(ruleIndex)) + + + def NEWLINE_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 0: + self.onNewLine(); + + + def OPEN_PAREN_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 1: + self.openBrace(); + + + def CLOSE_PAREN_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 2: + self.closeBrace(); + + + def OPEN_BRACK_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 3: + self.openBrace(); + + + def CLOSE_BRACK_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 4: + self.closeBrace(); + + + def OPEN_BRACE_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 5: + self.openBrace(); + + + def CLOSE_BRACE_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 6: + self.closeBrace(); + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates is None: + preds = dict() + preds[41] = self.NEWLINE_sempred + self._predicates = preds + pred = self._predicates.get(ruleIndex, None) + if pred is not None: + return pred(localctx, predIndex) + else: + raise Exception("No registered predicate for:" + str(ruleIndex)) + + def NEWLINE_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 0: + return self.atStartOfInput() + + + diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3LexerBase.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3LexerBase.py new file mode 100644 index 000000000..d82bfbb78 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3LexerBase.py @@ -0,0 +1,101 @@ +from typing import TextIO +from antlr4 import * +from antlr4.Token import CommonToken +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Parser import Python3Parser + +import sys +from typing import TextIO +import re + + +class Python3LexerBase(Lexer): + NEW_LINE_PATTERN = re.compile('[^\r\n\f]+') + SPACES_PATTERN = re.compile('[\r\n\f]+') + + def __init__(self, input: InputStream, output: TextIO = sys.stdout): + super().__init__(input, output) + self.tokens = [] + self.indents = [] + self.opened = 0 + + def reset(self): + self.tokens = [] + self.indents = [] + self.opened = 0 + super().reset() + + def emitToken(self, token): + self._token = token + self.tokens.append(token) + + def nextToken(self): + # Check if the end-of-file is ahead and there are still some DEDENTS expected. + if self._input.LA(1) == Python3Parser.EOF and len(self.indents) != 0: + # Remove any trailing EOF tokens from our buffer. + self.tokens = [token for token in self.tokens if token.type != Python3Parser.EOF] + + # First emit an extra line break that serves as the end of the statement. + self.emitToken(self.commonToken(Python3Parser.NEWLINE, '\n')) + + # Now emit as much DEDENT tokens as needed. + while len(self.indents) != 0: + self.emitToken(self.createDedent()) + self.indents.pop() + + # Put the EOF back on the token stream. + self.emitToken(self.commonToken(Python3Parser.EOF, '')) + + next_ = super().nextToken() + return next_ if len(self.tokens) == 0 else self.tokens.pop(0) + + def createDedent(self): + return self.commonToken(Python3Parser.DEDENT, '') + + def commonToken(self, type_: int, text: str): + stop = self.getCharIndex() - 1 + start = stop if text == '' else stop - len(text) + 1 + return CommonToken(self._tokenFactorySourcePair, type_, Lexer.DEFAULT_TOKEN_CHANNEL, start, stop) + + def getIndentationCount(self, whitespace: str): + count = 0 + for c in whitespace: + if c == '\t': + count += 8 - count % 8 + else: + count += 1 + return count + + def atStartOfInput(self): + return self.getCharIndex() == 0 + + def openBrace(self): + self.opened += 1 + + def closeBrace(self): + self.opened -= 1 + + def onNewLine(self): + new_line = self.NEW_LINE_PATTERN.sub('', self.text) + spaces = self.SPACES_PATTERN.sub('', self.text) + + # Strip newlines inside open clauses except if we are near EOF. We keep NEWLINEs near EOF to + # satisfy the final newline needed by the single_put rule used by the REPL. + next_ = self._input.LA(1) + next_next = self._input.LA(2) + + if self.opened > 0 or (next_next != -1 and next_ in (10, 13, 35)): + self.skip() + else: + self.emitToken(self.commonToken(Python3Parser.NEWLINE, new_line)) + indent = self.getIndentationCount(spaces) + previous = 0 if len(self.indents) == 0 else self.indents[-1] + + if indent == previous: + self.skip() + elif indent > previous: + self.indents.append(indent) + self.emitToken(self.commonToken(Python3Parser.INDENT, spaces)) + else: + while len(self.indents) > 0 and self.indents[-1] > indent: + self.emitToken(self.createDedent()) + self.indents.pop() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3MethodParserListener.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3MethodParserListener.py new file mode 100644 index 000000000..1f41fb8df --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3MethodParserListener.py @@ -0,0 +1,52 @@ +from antlr4 import ParseTreeListener + +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Parser import Python3Parser +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3ParserListener import Python3ParserListener +from dataclasses import dataclass + + +@dataclass +class MethodNode: + def __init__(self, line_start, line_end, source_code, name, ast_string): + self.line_start = line_start + self.line_end = line_end + self.source_code = source_code + self.name = name + self.ast_string = ast_string + + +class MethodParserListener(Python3ParserListener): + def __init__(self, parser): + self.methods = [] + self.parser = parser + + def enterFuncdef(self, ctx: Python3Parser.FuncdefContext): + # Initialize the method name as None + method_name = None + + # Iterate over the children of the context to find the method name + for child in ctx.children: + if isinstance(child, Python3Parser.NameContext): + method_name = child.getText() + break + + # If method name is not found, set it to "Unknown" + if method_name is None: + method_name = "Unknown" + + ast_string = ctx.toStringTree(recog=self.parser) + + # Create a MethodNode for the method + method_node = MethodNode( + line_start=ctx.start.line, + line_end=ctx.stop.line, + source_code=ctx.start.source[1].getText(ctx.start.start, ctx.stop.stop), + name=method_name, + ast_string=ast_string + ) + + self.methods.append(method_node) + + def enterIdentifier(self, ctx): + if self.methods and self.methods[-1].name is None: + self.methods[-1].name = ctx.getText() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Parser.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Parser.py new file mode 100644 index 000000000..d7aaf94de --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3Parser.py @@ -0,0 +1,10288 @@ +# Generated from Python3Parser.g4 by ANTLR 4.13.1 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys + +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing import TextIO + +if "." in __name__: + from .Python3ParserBase import Python3ParserBase +else: + from Python3ParserBase import Python3ParserBase + + +def serializedATN(): + return [ + 4, 1, 102, 1435, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, + 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, + 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, + 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, + 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, + 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, + 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, + 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, + 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, + 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, + 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, + 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, + 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, + 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, + 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, + 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, + 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, + 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, + 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 3, 0, 244, 8, 0, 1, 1, 1, 1, 5, 1, 248, 8, 1, 10, 1, 12, 1, 251, 9, 1, 1, 1, 1, 1, 1, + 2, 1, 2, 5, 2, 257, 8, 2, 10, 2, 12, 2, 260, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, + 268, 8, 3, 1, 3, 3, 3, 271, 8, 3, 1, 3, 1, 3, 1, 4, 4, 4, 276, 8, 4, 11, 4, 12, 4, 277, 1, + 5, 1, 5, 1, 5, 1, 5, 3, 5, 284, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 294, + 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 3, 8, 301, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 308, + 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 314, 8, 9, 5, 9, 316, 8, 9, 10, 9, 12, 9, 319, 9, 9, 1, + 9, 1, 9, 1, 9, 3, 9, 324, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 330, 8, 9, 5, 9, 332, 8, 9, 10, + 9, 12, 9, 335, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 341, 8, 9, 3, 9, 343, 8, 9, 3, 9, 345, 8, + 9, 1, 9, 1, 9, 1, 9, 3, 9, 350, 8, 9, 3, 9, 352, 8, 9, 3, 9, 354, 8, 9, 1, 9, 1, 9, 3, 9, 358, + 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 364, 8, 9, 5, 9, 366, 8, 9, 10, 9, 12, 9, 369, 9, 9, 1, + 9, 1, 9, 1, 9, 1, 9, 3, 9, 375, 8, 9, 3, 9, 377, 8, 9, 3, 9, 379, 8, 9, 1, 9, 1, 9, 1, 9, 3, + 9, 384, 8, 9, 3, 9, 386, 8, 9, 1, 10, 1, 10, 1, 10, 3, 10, 391, 8, 10, 1, 11, 1, 11, 1, 11, + 3, 11, 396, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 402, 8, 11, 5, 11, 404, 8, 11, 10, + 11, 12, 11, 407, 9, 11, 1, 11, 1, 11, 1, 11, 3, 11, 412, 8, 11, 1, 11, 1, 11, 1, 11, 1, + 11, 3, 11, 418, 8, 11, 5, 11, 420, 8, 11, 10, 11, 12, 11, 423, 9, 11, 1, 11, 1, 11, 1, + 11, 1, 11, 3, 11, 429, 8, 11, 3, 11, 431, 8, 11, 3, 11, 433, 8, 11, 1, 11, 1, 11, 1, 11, + 3, 11, 438, 8, 11, 3, 11, 440, 8, 11, 3, 11, 442, 8, 11, 1, 11, 1, 11, 3, 11, 446, 8, 11, + 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 452, 8, 11, 5, 11, 454, 8, 11, 10, 11, 12, 11, 457, + 9, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 463, 8, 11, 3, 11, 465, 8, 11, 3, 11, 467, 8, + 11, 1, 11, 1, 11, 1, 11, 3, 11, 472, 8, 11, 3, 11, 474, 8, 11, 1, 12, 1, 12, 1, 13, 1, 13, + 3, 13, 480, 8, 13, 1, 14, 1, 14, 1, 14, 5, 14, 485, 8, 14, 10, 14, 12, 14, 488, 9, 14, + 1, 14, 3, 14, 491, 8, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, + 1, 15, 3, 15, 503, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 510, 8, 16, 1, 16, 1, + 16, 1, 16, 3, 16, 515, 8, 16, 5, 16, 517, 8, 16, 10, 16, 12, 16, 520, 9, 16, 3, 16, 522, + 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 528, 8, 17, 1, 18, 1, 18, 3, 18, 532, 8, 18, 1, + 18, 1, 18, 1, 18, 3, 18, 537, 8, 18, 5, 18, 539, 8, 18, 10, 18, 12, 18, 542, 9, 18, 1, + 18, 3, 18, 545, 8, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, + 22, 1, 22, 1, 22, 3, 22, 559, 8, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 567, + 8, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 575, 8, 27, 3, 27, 577, 8, 27, 1, + 28, 1, 28, 3, 28, 581, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 5, 30, 588, 8, 30, 10, + 30, 12, 30, 591, 9, 30, 1, 30, 1, 30, 4, 30, 595, 8, 30, 11, 30, 12, 30, 596, 3, 30, 599, + 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 608, 8, 30, 1, 31, 1, 31, + 1, 31, 3, 31, 613, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 618, 8, 32, 1, 33, 1, 33, 1, 33, 5, + 33, 623, 8, 33, 10, 33, 12, 33, 626, 9, 33, 1, 33, 3, 33, 629, 8, 33, 1, 34, 1, 34, 1, + 34, 5, 34, 634, 8, 34, 10, 34, 12, 34, 637, 9, 34, 1, 35, 1, 35, 1, 35, 5, 35, 642, 8, + 35, 10, 35, 12, 35, 645, 9, 35, 1, 36, 1, 36, 1, 36, 1, 36, 5, 36, 651, 8, 36, 10, 36, + 12, 36, 654, 9, 36, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 660, 8, 37, 10, 37, 12, 37, 663, + 9, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 669, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, + 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 681, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, + 687, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 698, 8, + 41, 10, 41, 12, 41, 701, 9, 41, 1, 41, 1, 41, 1, 41, 3, 41, 706, 8, 41, 1, 42, 1, 42, 1, + 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 715, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, + 43, 1, 43, 1, 43, 1, 43, 3, 43, 726, 8, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, + 44, 4, 44, 735, 8, 44, 11, 44, 12, 44, 736, 1, 44, 1, 44, 1, 44, 3, 44, 742, 8, 44, 1, + 44, 1, 44, 1, 44, 3, 44, 747, 8, 44, 1, 44, 1, 44, 1, 44, 3, 44, 752, 8, 44, 1, 45, 1, 45, + 1, 45, 1, 45, 5, 45, 758, 8, 45, 10, 45, 12, 45, 761, 9, 45, 1, 45, 1, 45, 1, 45, 1, 46, + 1, 46, 1, 46, 3, 46, 769, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 775, 8, 47, 3, 47, 777, + 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 4, 48, 783, 8, 48, 11, 48, 12, 48, 784, 1, 48, 1, 48, + 3, 48, 789, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 4, 49, 797, 8, 49, 11, 49, + 12, 49, 798, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 3, 50, 806, 8, 50, 1, 50, 3, 50, 809, 8, + 50, 1, 51, 1, 51, 4, 51, 813, 8, 51, 11, 51, 12, 51, 814, 1, 51, 3, 51, 818, 8, 51, 1, + 52, 1, 52, 1, 52, 3, 52, 823, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 828, 8, 53, 1, 53, 1, 53, + 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 838, 8, 55, 1, 56, 1, 56, 3, 56, 842, 8, + 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 5, 58, 851, 8, 58, 10, 58, 12, 58, + 854, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 864, 8, 59, 1, + 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 874, 8, 60, 1, 61, 1, 61, 1, + 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 884, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, + 62, 1, 62, 1, 62, 1, 62, 3, 62, 894, 8, 62, 1, 63, 1, 63, 1, 63, 3, 63, 899, 8, 63, 1, 64, + 1, 64, 1, 64, 3, 64, 904, 8, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, + 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 4, 71, 923, 8, 71, 11, 71, + 12, 71, 924, 1, 72, 1, 72, 3, 72, 929, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, + 3, 74, 937, 8, 74, 1, 74, 1, 74, 1, 74, 3, 74, 942, 8, 74, 1, 74, 3, 74, 945, 8, 74, 1, + 75, 1, 75, 1, 75, 3, 75, 950, 8, 75, 1, 76, 1, 76, 1, 76, 5, 76, 955, 8, 76, 10, 76, 12, + 76, 958, 9, 76, 1, 76, 3, 76, 961, 8, 76, 1, 77, 1, 77, 3, 77, 965, 8, 77, 1, 78, 1, 78, + 1, 78, 1, 78, 3, 78, 971, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 978, 8, 79, 1, + 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 987, 8, 79, 1, 79, 1, 79, 1, 79, 1, + 79, 1, 79, 3, 79, 994, 8, 79, 1, 79, 1, 79, 3, 79, 998, 8, 79, 1, 80, 1, 80, 1, 80, 5, 80, + 1003, 8, 80, 10, 80, 12, 80, 1006, 9, 80, 1, 81, 1, 81, 3, 81, 1010, 8, 81, 1, 81, 1, + 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, + 83, 1026, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1034, 8, 83, 1, 83, 1, + 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1044, 8, 83, 1, 83, 1, 83, 3, 83, 1048, + 8, 83, 1, 84, 1, 84, 1, 84, 5, 84, 1053, 8, 84, 10, 84, 12, 84, 1056, 9, 84, 1, 85, 1, + 85, 1, 85, 5, 85, 1061, 8, 85, 10, 85, 12, 85, 1064, 9, 85, 1, 86, 1, 86, 1, 86, 1, 86, + 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1076, 8, 87, 1, 87, 3, 87, 1079, 8, 87, + 1, 88, 1, 88, 3, 88, 1083, 8, 88, 1, 89, 1, 89, 3, 89, 1087, 8, 89, 1, 89, 1, 89, 1, 89, + 1, 90, 1, 90, 3, 90, 1094, 8, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 5, 91, 1102, + 8, 91, 10, 91, 12, 91, 1105, 9, 91, 1, 92, 1, 92, 1, 92, 5, 92, 1110, 8, 92, 10, 92, 12, + 92, 1113, 9, 92, 1, 93, 1, 93, 1, 93, 3, 93, 1118, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 5, + 94, 1124, 8, 94, 10, 94, 12, 94, 1127, 9, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, + 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1142, 8, 95, 1, 96, 1, 96, 1, 96, + 1, 97, 1, 97, 1, 97, 4, 97, 1150, 8, 97, 11, 97, 12, 97, 1151, 1, 97, 3, 97, 1155, 8, + 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, + 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 5, 97, 1178, 8, 97, 10, 97, + 12, 97, 1181, 9, 97, 1, 98, 3, 98, 1184, 8, 98, 1, 98, 1, 98, 5, 98, 1188, 8, 98, 10, + 98, 12, 98, 1191, 9, 98, 1, 99, 1, 99, 1, 99, 3, 99, 1196, 8, 99, 1, 99, 1, 99, 1, 99, + 3, 99, 1201, 8, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1206, 8, 99, 1, 99, 1, 99, 1, 99, 1, 99, + 4, 99, 1212, 8, 99, 11, 99, 12, 99, 1213, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1220, 8, + 99, 1, 100, 1, 100, 1, 101, 1, 101, 3, 101, 1226, 8, 101, 1, 101, 1, 101, 1, 101, 1, + 101, 3, 101, 1232, 8, 101, 5, 101, 1234, 8, 101, 10, 101, 12, 101, 1237, 9, 101, 1, + 101, 3, 101, 1240, 8, 101, 3, 101, 1242, 8, 101, 1, 102, 1, 102, 3, 102, 1246, 8, 102, + 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1255, 8, 102, 1, 103, + 1, 103, 1, 103, 5, 103, 1260, 8, 103, 10, 103, 12, 103, 1263, 9, 103, 1, 103, 3, 103, + 1266, 8, 103, 1, 104, 1, 104, 3, 104, 1270, 8, 104, 1, 104, 1, 104, 3, 104, 1274, 8, + 104, 1, 104, 3, 104, 1277, 8, 104, 3, 104, 1279, 8, 104, 1, 105, 1, 105, 3, 105, 1283, + 8, 105, 1, 106, 1, 106, 3, 106, 1287, 8, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1292, + 8, 106, 5, 106, 1294, 8, 106, 10, 106, 12, 106, 1297, 9, 106, 1, 106, 3, 106, 1300, + 8, 106, 1, 107, 1, 107, 1, 107, 5, 107, 1305, 8, 107, 10, 107, 12, 107, 1308, 9, 107, + 1, 107, 3, 107, 1311, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, + 1319, 8, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, + 1329, 8, 108, 5, 108, 1331, 8, 108, 10, 108, 12, 108, 1334, 9, 108, 1, 108, 3, 108, + 1337, 8, 108, 3, 108, 1339, 8, 108, 1, 108, 1, 108, 3, 108, 1343, 8, 108, 1, 108, 1, + 108, 1, 108, 1, 108, 3, 108, 1349, 8, 108, 5, 108, 1351, 8, 108, 10, 108, 12, 108, + 1354, 9, 108, 1, 108, 3, 108, 1357, 8, 108, 3, 108, 1359, 8, 108, 3, 108, 1361, 8, + 108, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1367, 8, 109, 1, 109, 3, 109, 1370, 8, + 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 5, 110, 1378, 8, 110, 10, 110, + 12, 110, 1381, 9, 110, 1, 110, 3, 110, 1384, 8, 110, 1, 111, 1, 111, 3, 111, 1388, + 8, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1398, + 8, 111, 1, 112, 1, 112, 3, 112, 1402, 8, 112, 1, 113, 3, 113, 1405, 8, 113, 1, 113, + 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1412, 8, 113, 1, 114, 1, 114, 1, 114, 3, 114, + 1417, 8, 114, 1, 115, 1, 115, 1, 116, 1, 116, 3, 116, 1423, 8, 116, 1, 117, 1, 117, + 1, 117, 3, 117, 1428, 8, 117, 1, 118, 4, 118, 1431, 8, 118, 11, 118, 12, 118, 1432, + 1, 118, 0, 1, 194, 119, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, + 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, + 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, + 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, + 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, + 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, + 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 0, 7, 1, 0, 88, 100, + 1, 0, 54, 55, 2, 0, 71, 72, 76, 76, 3, 0, 56, 56, 73, 75, 86, 86, 1, 0, 71, 72, 1, 0, 69, + 70, 3, 0, 30, 30, 40, 40, 45, 45, 1586, 0, 243, 1, 0, 0, 0, 2, 249, 1, 0, 0, 0, 4, 254, + 1, 0, 0, 0, 6, 263, 1, 0, 0, 0, 8, 275, 1, 0, 0, 0, 10, 279, 1, 0, 0, 0, 12, 285, 1, 0, 0, + 0, 14, 288, 1, 0, 0, 0, 16, 298, 1, 0, 0, 0, 18, 385, 1, 0, 0, 0, 20, 387, 1, 0, 0, 0, 22, + 473, 1, 0, 0, 0, 24, 475, 1, 0, 0, 0, 26, 479, 1, 0, 0, 0, 28, 481, 1, 0, 0, 0, 30, 502, + 1, 0, 0, 0, 32, 504, 1, 0, 0, 0, 34, 523, 1, 0, 0, 0, 36, 531, 1, 0, 0, 0, 38, 546, 1, 0, + 0, 0, 40, 548, 1, 0, 0, 0, 42, 551, 1, 0, 0, 0, 44, 558, 1, 0, 0, 0, 46, 560, 1, 0, 0, 0, + 48, 562, 1, 0, 0, 0, 50, 564, 1, 0, 0, 0, 52, 568, 1, 0, 0, 0, 54, 570, 1, 0, 0, 0, 56, 580, + 1, 0, 0, 0, 58, 582, 1, 0, 0, 0, 60, 585, 1, 0, 0, 0, 62, 609, 1, 0, 0, 0, 64, 614, 1, 0, + 0, 0, 66, 619, 1, 0, 0, 0, 68, 630, 1, 0, 0, 0, 70, 638, 1, 0, 0, 0, 72, 646, 1, 0, 0, 0, + 74, 655, 1, 0, 0, 0, 76, 664, 1, 0, 0, 0, 78, 680, 1, 0, 0, 0, 80, 682, 1, 0, 0, 0, 82, 688, + 1, 0, 0, 0, 84, 707, 1, 0, 0, 0, 86, 716, 1, 0, 0, 0, 88, 727, 1, 0, 0, 0, 90, 753, 1, 0, + 0, 0, 92, 765, 1, 0, 0, 0, 94, 770, 1, 0, 0, 0, 96, 788, 1, 0, 0, 0, 98, 790, 1, 0, 0, 0, + 100, 808, 1, 0, 0, 0, 102, 810, 1, 0, 0, 0, 104, 822, 1, 0, 0, 0, 106, 824, 1, 0, 0, 0, + 108, 832, 1, 0, 0, 0, 110, 837, 1, 0, 0, 0, 112, 841, 1, 0, 0, 0, 114, 843, 1, 0, 0, 0, + 116, 847, 1, 0, 0, 0, 118, 863, 1, 0, 0, 0, 120, 873, 1, 0, 0, 0, 122, 883, 1, 0, 0, 0, + 124, 893, 1, 0, 0, 0, 126, 898, 1, 0, 0, 0, 128, 903, 1, 0, 0, 0, 130, 905, 1, 0, 0, 0, + 132, 907, 1, 0, 0, 0, 134, 909, 1, 0, 0, 0, 136, 911, 1, 0, 0, 0, 138, 914, 1, 0, 0, 0, + 140, 916, 1, 0, 0, 0, 142, 919, 1, 0, 0, 0, 144, 928, 1, 0, 0, 0, 146, 930, 1, 0, 0, 0, + 148, 944, 1, 0, 0, 0, 150, 946, 1, 0, 0, 0, 152, 951, 1, 0, 0, 0, 154, 964, 1, 0, 0, 0, + 156, 970, 1, 0, 0, 0, 158, 997, 1, 0, 0, 0, 160, 999, 1, 0, 0, 0, 162, 1009, 1, 0, 0, 0, + 164, 1014, 1, 0, 0, 0, 166, 1047, 1, 0, 0, 0, 168, 1049, 1, 0, 0, 0, 170, 1057, 1, 0, + 0, 0, 172, 1065, 1, 0, 0, 0, 174, 1078, 1, 0, 0, 0, 176, 1082, 1, 0, 0, 0, 178, 1084, + 1, 0, 0, 0, 180, 1091, 1, 0, 0, 0, 182, 1098, 1, 0, 0, 0, 184, 1106, 1, 0, 0, 0, 186, 1117, + 1, 0, 0, 0, 188, 1119, 1, 0, 0, 0, 190, 1141, 1, 0, 0, 0, 192, 1143, 1, 0, 0, 0, 194, 1154, + 1, 0, 0, 0, 196, 1183, 1, 0, 0, 0, 198, 1219, 1, 0, 0, 0, 200, 1221, 1, 0, 0, 0, 202, 1225, + 1, 0, 0, 0, 204, 1254, 1, 0, 0, 0, 206, 1256, 1, 0, 0, 0, 208, 1278, 1, 0, 0, 0, 210, 1280, + 1, 0, 0, 0, 212, 1286, 1, 0, 0, 0, 214, 1301, 1, 0, 0, 0, 216, 1360, 1, 0, 0, 0, 218, 1362, + 1, 0, 0, 0, 220, 1374, 1, 0, 0, 0, 222, 1397, 1, 0, 0, 0, 224, 1401, 1, 0, 0, 0, 226, 1404, + 1, 0, 0, 0, 228, 1413, 1, 0, 0, 0, 230, 1418, 1, 0, 0, 0, 232, 1420, 1, 0, 0, 0, 234, 1427, + 1, 0, 0, 0, 236, 1430, 1, 0, 0, 0, 238, 244, 5, 44, 0, 0, 239, 244, 3, 28, 14, 0, 240, + 241, 3, 78, 39, 0, 241, 242, 5, 44, 0, 0, 242, 244, 1, 0, 0, 0, 243, 238, 1, 0, 0, 0, 243, + 239, 1, 0, 0, 0, 243, 240, 1, 0, 0, 0, 244, 1, 1, 0, 0, 0, 245, 248, 5, 44, 0, 0, 246, 248, + 3, 26, 13, 0, 247, 245, 1, 0, 0, 0, 247, 246, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, + 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 252, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, + 5, 0, 0, 1, 253, 3, 1, 0, 0, 0, 254, 258, 3, 214, 107, 0, 255, 257, 5, 44, 0, 0, 256, 255, + 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 261, + 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 262, 5, 0, 0, 1, 262, 5, 1, 0, 0, 0, 263, 264, 5, + 86, 0, 0, 264, 270, 3, 70, 35, 0, 265, 267, 5, 57, 0, 0, 266, 268, 3, 220, 110, 0, 267, + 266, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 271, 5, 58, 0, 0, 270, + 265, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 44, 0, 0, 273, + 7, 1, 0, 0, 0, 274, 276, 3, 6, 3, 0, 275, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 275, + 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 9, 1, 0, 0, 0, 279, 283, 3, 8, 4, 0, 280, 284, 3, + 218, 109, 0, 281, 284, 3, 14, 7, 0, 282, 284, 3, 12, 6, 0, 283, 280, 1, 0, 0, 0, 283, + 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 284, 11, 1, 0, 0, 0, 285, 286, 5, 9, 0, 0, 286, 287, + 3, 14, 7, 0, 287, 13, 1, 0, 0, 0, 288, 289, 5, 15, 0, 0, 289, 290, 3, 200, 100, 0, 290, + 293, 3, 16, 8, 0, 291, 292, 5, 87, 0, 0, 292, 294, 3, 174, 87, 0, 293, 291, 1, 0, 0, 0, + 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 60, 0, 0, 296, 297, 3, 96, 48, + 0, 297, 15, 1, 0, 0, 0, 298, 300, 5, 57, 0, 0, 299, 301, 3, 18, 9, 0, 300, 299, 1, 0, 0, + 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 303, 5, 58, 0, 0, 303, 17, 1, 0, 0, + 0, 304, 307, 3, 20, 10, 0, 305, 306, 5, 63, 0, 0, 306, 308, 3, 174, 87, 0, 307, 305, + 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 317, 1, 0, 0, 0, 309, 310, 5, 59, 0, 0, 310, 313, + 3, 20, 10, 0, 311, 312, 5, 63, 0, 0, 312, 314, 3, 174, 87, 0, 313, 311, 1, 0, 0, 0, 313, + 314, 1, 0, 0, 0, 314, 316, 1, 0, 0, 0, 315, 309, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, + 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 353, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, + 351, 5, 59, 0, 0, 321, 323, 5, 56, 0, 0, 322, 324, 3, 20, 10, 0, 323, 322, 1, 0, 0, 0, + 323, 324, 1, 0, 0, 0, 324, 333, 1, 0, 0, 0, 325, 326, 5, 59, 0, 0, 326, 329, 3, 20, 10, + 0, 327, 328, 5, 63, 0, 0, 328, 330, 3, 174, 87, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, + 0, 0, 0, 330, 332, 1, 0, 0, 0, 331, 325, 1, 0, 0, 0, 332, 335, 1, 0, 0, 0, 333, 331, 1, + 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 344, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 336, 342, 5, + 59, 0, 0, 337, 338, 5, 62, 0, 0, 338, 340, 3, 20, 10, 0, 339, 341, 5, 59, 0, 0, 340, 339, + 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 343, 1, 0, 0, 0, 342, 337, 1, 0, 0, 0, 342, 343, + 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 336, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 352, + 1, 0, 0, 0, 346, 347, 5, 62, 0, 0, 347, 349, 3, 20, 10, 0, 348, 350, 5, 59, 0, 0, 349, + 348, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 1, 0, 0, 0, 351, 321, 1, 0, 0, 0, 351, + 346, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 1, 0, 0, 0, 353, 320, 1, 0, 0, 0, 353, + 354, 1, 0, 0, 0, 354, 386, 1, 0, 0, 0, 355, 357, 5, 56, 0, 0, 356, 358, 3, 20, 10, 0, 357, + 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 367, 1, 0, 0, 0, 359, 360, 5, 59, 0, 0, 360, + 363, 3, 20, 10, 0, 361, 362, 5, 63, 0, 0, 362, 364, 3, 174, 87, 0, 363, 361, 1, 0, 0, + 0, 363, 364, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 359, 1, 0, 0, 0, 366, 369, 1, 0, 0, + 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 378, 1, 0, 0, 0, 369, 367, 1, 0, 0, + 0, 370, 376, 5, 59, 0, 0, 371, 372, 5, 62, 0, 0, 372, 374, 3, 20, 10, 0, 373, 375, 5, + 59, 0, 0, 374, 373, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 371, 1, + 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 379, 1, 0, 0, 0, 378, 370, 1, 0, 0, 0, 378, 379, 1, + 0, 0, 0, 379, 386, 1, 0, 0, 0, 380, 381, 5, 62, 0, 0, 381, 383, 3, 20, 10, 0, 382, 384, + 5, 59, 0, 0, 383, 382, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 386, 1, 0, 0, 0, 385, 304, + 1, 0, 0, 0, 385, 355, 1, 0, 0, 0, 385, 380, 1, 0, 0, 0, 386, 19, 1, 0, 0, 0, 387, 390, 3, + 200, 100, 0, 388, 389, 5, 60, 0, 0, 389, 391, 3, 174, 87, 0, 390, 388, 1, 0, 0, 0, 390, + 391, 1, 0, 0, 0, 391, 21, 1, 0, 0, 0, 392, 395, 3, 24, 12, 0, 393, 394, 5, 63, 0, 0, 394, + 396, 3, 174, 87, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 405, 1, 0, 0, 0, 397, + 398, 5, 59, 0, 0, 398, 401, 3, 24, 12, 0, 399, 400, 5, 63, 0, 0, 400, 402, 3, 174, 87, + 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 397, 1, 0, 0, + 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 441, 1, 0, 0, + 0, 407, 405, 1, 0, 0, 0, 408, 439, 5, 59, 0, 0, 409, 411, 5, 56, 0, 0, 410, 412, 3, 24, + 12, 0, 411, 410, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 421, 1, 0, 0, 0, 413, 414, 5, 59, + 0, 0, 414, 417, 3, 24, 12, 0, 415, 416, 5, 63, 0, 0, 416, 418, 3, 174, 87, 0, 417, 415, + 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 420, 1, 0, 0, 0, 419, 413, 1, 0, 0, 0, 420, 423, + 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 432, 1, 0, 0, 0, 423, 421, + 1, 0, 0, 0, 424, 430, 5, 59, 0, 0, 425, 426, 5, 62, 0, 0, 426, 428, 3, 24, 12, 0, 427, + 429, 5, 59, 0, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 431, 1, 0, 0, 0, 430, + 425, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 424, 1, 0, 0, 0, 432, + 433, 1, 0, 0, 0, 433, 440, 1, 0, 0, 0, 434, 435, 5, 62, 0, 0, 435, 437, 3, 24, 12, 0, 436, + 438, 5, 59, 0, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, + 409, 1, 0, 0, 0, 439, 434, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 442, 1, 0, 0, 0, 441, + 408, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 474, 1, 0, 0, 0, 443, 445, 5, 56, 0, 0, 444, + 446, 3, 24, 12, 0, 445, 444, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 455, 1, 0, 0, 0, 447, + 448, 5, 59, 0, 0, 448, 451, 3, 24, 12, 0, 449, 450, 5, 63, 0, 0, 450, 452, 3, 174, 87, + 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 454, 1, 0, 0, 0, 453, 447, 1, 0, 0, + 0, 454, 457, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 466, 1, 0, 0, + 0, 457, 455, 1, 0, 0, 0, 458, 464, 5, 59, 0, 0, 459, 460, 5, 62, 0, 0, 460, 462, 3, 24, + 12, 0, 461, 463, 5, 59, 0, 0, 462, 461, 1, 0, 0, 0, 462, 463, 1, 0, 0, 0, 463, 465, 1, + 0, 0, 0, 464, 459, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 467, 1, 0, 0, 0, 466, 458, 1, + 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 474, 1, 0, 0, 0, 468, 469, 5, 62, 0, 0, 469, 471, 3, + 24, 12, 0, 470, 472, 5, 59, 0, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 474, + 1, 0, 0, 0, 473, 392, 1, 0, 0, 0, 473, 443, 1, 0, 0, 0, 473, 468, 1, 0, 0, 0, 474, 23, 1, + 0, 0, 0, 475, 476, 3, 200, 100, 0, 476, 25, 1, 0, 0, 0, 477, 480, 3, 28, 14, 0, 478, 480, + 3, 78, 39, 0, 479, 477, 1, 0, 0, 0, 479, 478, 1, 0, 0, 0, 480, 27, 1, 0, 0, 0, 481, 486, + 3, 30, 15, 0, 482, 483, 5, 61, 0, 0, 483, 485, 3, 30, 15, 0, 484, 482, 1, 0, 0, 0, 485, + 488, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, + 486, 1, 0, 0, 0, 489, 491, 5, 61, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, + 492, 1, 0, 0, 0, 492, 493, 5, 44, 0, 0, 493, 29, 1, 0, 0, 0, 494, 503, 3, 32, 16, 0, 495, + 503, 3, 40, 20, 0, 496, 503, 3, 42, 21, 0, 497, 503, 3, 44, 22, 0, 498, 503, 3, 56, 28, + 0, 499, 503, 3, 72, 36, 0, 500, 503, 3, 74, 37, 0, 501, 503, 3, 76, 38, 0, 502, 494, + 1, 0, 0, 0, 502, 495, 1, 0, 0, 0, 502, 496, 1, 0, 0, 0, 502, 497, 1, 0, 0, 0, 502, 498, + 1, 0, 0, 0, 502, 499, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 501, 1, 0, 0, 0, 503, 31, 1, + 0, 0, 0, 504, 521, 3, 36, 18, 0, 505, 522, 3, 34, 17, 0, 506, 509, 3, 38, 19, 0, 507, + 510, 3, 232, 116, 0, 508, 510, 3, 214, 107, 0, 509, 507, 1, 0, 0, 0, 509, 508, 1, 0, + 0, 0, 510, 522, 1, 0, 0, 0, 511, 514, 5, 63, 0, 0, 512, 515, 3, 232, 116, 0, 513, 515, + 3, 36, 18, 0, 514, 512, 1, 0, 0, 0, 514, 513, 1, 0, 0, 0, 515, 517, 1, 0, 0, 0, 516, 511, + 1, 0, 0, 0, 517, 520, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 522, + 1, 0, 0, 0, 520, 518, 1, 0, 0, 0, 521, 505, 1, 0, 0, 0, 521, 506, 1, 0, 0, 0, 521, 518, + 1, 0, 0, 0, 522, 33, 1, 0, 0, 0, 523, 524, 5, 60, 0, 0, 524, 527, 3, 174, 87, 0, 525, 526, + 5, 63, 0, 0, 526, 528, 3, 174, 87, 0, 527, 525, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, + 35, 1, 0, 0, 0, 529, 532, 3, 174, 87, 0, 530, 532, 3, 192, 96, 0, 531, 529, 1, 0, 0, 0, + 531, 530, 1, 0, 0, 0, 532, 540, 1, 0, 0, 0, 533, 536, 5, 59, 0, 0, 534, 537, 3, 174, 87, + 0, 535, 537, 3, 192, 96, 0, 536, 534, 1, 0, 0, 0, 536, 535, 1, 0, 0, 0, 537, 539, 1, 0, + 0, 0, 538, 533, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, + 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 543, 545, 5, 59, 0, 0, 544, 543, 1, 0, + 0, 0, 544, 545, 1, 0, 0, 0, 545, 37, 1, 0, 0, 0, 546, 547, 7, 0, 0, 0, 547, 39, 1, 0, 0, + 0, 548, 549, 5, 16, 0, 0, 549, 550, 3, 212, 106, 0, 550, 41, 1, 0, 0, 0, 551, 552, 5, + 35, 0, 0, 552, 43, 1, 0, 0, 0, 553, 559, 3, 46, 23, 0, 554, 559, 3, 48, 24, 0, 555, 559, + 3, 50, 25, 0, 556, 559, 3, 54, 27, 0, 557, 559, 3, 52, 26, 0, 558, 553, 1, 0, 0, 0, 558, + 554, 1, 0, 0, 0, 558, 555, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 558, 557, 1, 0, 0, 0, 559, + 45, 1, 0, 0, 0, 560, 561, 5, 11, 0, 0, 561, 47, 1, 0, 0, 0, 562, 563, 5, 14, 0, 0, 563, + 49, 1, 0, 0, 0, 564, 566, 5, 37, 0, 0, 565, 567, 3, 214, 107, 0, 566, 565, 1, 0, 0, 0, + 566, 567, 1, 0, 0, 0, 567, 51, 1, 0, 0, 0, 568, 569, 3, 232, 116, 0, 569, 53, 1, 0, 0, + 0, 570, 576, 5, 36, 0, 0, 571, 574, 3, 174, 87, 0, 572, 573, 5, 23, 0, 0, 573, 575, 3, + 174, 87, 0, 574, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 577, 1, 0, 0, 0, 576, 571, + 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 55, 1, 0, 0, 0, 578, 581, 3, 58, 29, 0, 579, 581, + 3, 60, 30, 0, 580, 578, 1, 0, 0, 0, 580, 579, 1, 0, 0, 0, 581, 57, 1, 0, 0, 0, 582, 583, + 5, 26, 0, 0, 583, 584, 3, 68, 34, 0, 584, 59, 1, 0, 0, 0, 585, 598, 5, 23, 0, 0, 586, 588, + 7, 1, 0, 0, 587, 586, 1, 0, 0, 0, 588, 591, 1, 0, 0, 0, 589, 587, 1, 0, 0, 0, 589, 590, + 1, 0, 0, 0, 590, 592, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 592, 599, 3, 70, 35, 0, 593, 595, + 7, 1, 0, 0, 594, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, + 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 589, 1, 0, 0, 0, 598, 594, 1, 0, 0, 0, 599, 600, + 1, 0, 0, 0, 600, 607, 5, 26, 0, 0, 601, 608, 5, 56, 0, 0, 602, 603, 5, 57, 0, 0, 603, 604, + 3, 66, 33, 0, 604, 605, 5, 58, 0, 0, 605, 608, 1, 0, 0, 0, 606, 608, 3, 66, 33, 0, 607, + 601, 1, 0, 0, 0, 607, 602, 1, 0, 0, 0, 607, 606, 1, 0, 0, 0, 608, 61, 1, 0, 0, 0, 609, 612, + 3, 200, 100, 0, 610, 611, 5, 7, 0, 0, 611, 613, 3, 200, 100, 0, 612, 610, 1, 0, 0, 0, + 612, 613, 1, 0, 0, 0, 613, 63, 1, 0, 0, 0, 614, 617, 3, 70, 35, 0, 615, 616, 5, 7, 0, 0, + 616, 618, 3, 200, 100, 0, 617, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 65, 1, 0, 0, + 0, 619, 624, 3, 62, 31, 0, 620, 621, 5, 59, 0, 0, 621, 623, 3, 62, 31, 0, 622, 620, 1, + 0, 0, 0, 623, 626, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 628, 1, + 0, 0, 0, 626, 624, 1, 0, 0, 0, 627, 629, 5, 59, 0, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, + 0, 0, 0, 629, 67, 1, 0, 0, 0, 630, 635, 3, 64, 32, 0, 631, 632, 5, 59, 0, 0, 632, 634, + 3, 64, 32, 0, 633, 631, 1, 0, 0, 0, 634, 637, 1, 0, 0, 0, 635, 633, 1, 0, 0, 0, 635, 636, + 1, 0, 0, 0, 636, 69, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 638, 643, 3, 200, 100, 0, 639, 640, + 5, 54, 0, 0, 640, 642, 3, 200, 100, 0, 641, 639, 1, 0, 0, 0, 642, 645, 1, 0, 0, 0, 643, + 641, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 71, 1, 0, 0, 0, 645, 643, 1, 0, 0, 0, 646, 647, + 5, 24, 0, 0, 647, 652, 3, 200, 100, 0, 648, 649, 5, 59, 0, 0, 649, 651, 3, 200, 100, + 0, 650, 648, 1, 0, 0, 0, 651, 654, 1, 0, 0, 0, 652, 650, 1, 0, 0, 0, 652, 653, 1, 0, 0, + 0, 653, 73, 1, 0, 0, 0, 654, 652, 1, 0, 0, 0, 655, 656, 5, 32, 0, 0, 656, 661, 3, 200, + 100, 0, 657, 658, 5, 59, 0, 0, 658, 660, 3, 200, 100, 0, 659, 657, 1, 0, 0, 0, 660, 663, + 1, 0, 0, 0, 661, 659, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 75, 1, 0, 0, 0, 663, 661, 1, + 0, 0, 0, 664, 665, 5, 8, 0, 0, 665, 668, 3, 174, 87, 0, 666, 667, 5, 59, 0, 0, 667, 669, + 3, 174, 87, 0, 668, 666, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 77, 1, 0, 0, 0, 670, 681, + 3, 82, 41, 0, 671, 681, 3, 84, 42, 0, 672, 681, 3, 86, 43, 0, 673, 681, 3, 88, 44, 0, + 674, 681, 3, 90, 45, 0, 675, 681, 3, 14, 7, 0, 676, 681, 3, 218, 109, 0, 677, 681, 3, + 10, 5, 0, 678, 681, 3, 80, 40, 0, 679, 681, 3, 98, 49, 0, 680, 670, 1, 0, 0, 0, 680, 671, + 1, 0, 0, 0, 680, 672, 1, 0, 0, 0, 680, 673, 1, 0, 0, 0, 680, 674, 1, 0, 0, 0, 680, 675, + 1, 0, 0, 0, 680, 676, 1, 0, 0, 0, 680, 677, 1, 0, 0, 0, 680, 678, 1, 0, 0, 0, 680, 679, + 1, 0, 0, 0, 681, 79, 1, 0, 0, 0, 682, 686, 5, 9, 0, 0, 683, 687, 3, 14, 7, 0, 684, 687, + 3, 90, 45, 0, 685, 687, 3, 86, 43, 0, 686, 683, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 686, + 685, 1, 0, 0, 0, 687, 81, 1, 0, 0, 0, 688, 689, 5, 25, 0, 0, 689, 690, 3, 174, 87, 0, 690, + 691, 5, 60, 0, 0, 691, 699, 3, 96, 48, 0, 692, 693, 5, 17, 0, 0, 693, 694, 3, 174, 87, + 0, 694, 695, 5, 60, 0, 0, 695, 696, 3, 96, 48, 0, 696, 698, 1, 0, 0, 0, 697, 692, 1, 0, + 0, 0, 698, 701, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 705, 1, 0, + 0, 0, 701, 699, 1, 0, 0, 0, 702, 703, 5, 18, 0, 0, 703, 704, 5, 60, 0, 0, 704, 706, 3, + 96, 48, 0, 705, 702, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 83, 1, 0, 0, 0, 707, 708, 5, + 41, 0, 0, 708, 709, 3, 174, 87, 0, 709, 710, 5, 60, 0, 0, 710, 714, 3, 96, 48, 0, 711, + 712, 5, 18, 0, 0, 712, 713, 5, 60, 0, 0, 713, 715, 3, 96, 48, 0, 714, 711, 1, 0, 0, 0, + 714, 715, 1, 0, 0, 0, 715, 85, 1, 0, 0, 0, 716, 717, 5, 22, 0, 0, 717, 718, 3, 212, 106, + 0, 718, 719, 5, 27, 0, 0, 719, 720, 3, 214, 107, 0, 720, 721, 5, 60, 0, 0, 721, 725, + 3, 96, 48, 0, 722, 723, 5, 18, 0, 0, 723, 724, 5, 60, 0, 0, 724, 726, 3, 96, 48, 0, 725, + 722, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 87, 1, 0, 0, 0, 727, 728, 5, 39, 0, 0, 728, + 729, 5, 60, 0, 0, 729, 751, 3, 96, 48, 0, 730, 731, 3, 94, 47, 0, 731, 732, 5, 60, 0, + 0, 732, 733, 3, 96, 48, 0, 733, 735, 1, 0, 0, 0, 734, 730, 1, 0, 0, 0, 735, 736, 1, 0, + 0, 0, 736, 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 741, 1, 0, 0, 0, 738, 739, 5, 18, + 0, 0, 739, 740, 5, 60, 0, 0, 740, 742, 3, 96, 48, 0, 741, 738, 1, 0, 0, 0, 741, 742, 1, + 0, 0, 0, 742, 746, 1, 0, 0, 0, 743, 744, 5, 21, 0, 0, 744, 745, 5, 60, 0, 0, 745, 747, + 3, 96, 48, 0, 746, 743, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 752, 1, 0, 0, 0, 748, 749, + 5, 21, 0, 0, 749, 750, 5, 60, 0, 0, 750, 752, 3, 96, 48, 0, 751, 734, 1, 0, 0, 0, 751, + 748, 1, 0, 0, 0, 752, 89, 1, 0, 0, 0, 753, 754, 5, 42, 0, 0, 754, 759, 3, 92, 46, 0, 755, + 756, 5, 59, 0, 0, 756, 758, 3, 92, 46, 0, 757, 755, 1, 0, 0, 0, 758, 761, 1, 0, 0, 0, 759, + 757, 1, 0, 0, 0, 759, 760, 1, 0, 0, 0, 760, 762, 1, 0, 0, 0, 761, 759, 1, 0, 0, 0, 762, + 763, 5, 60, 0, 0, 763, 764, 3, 96, 48, 0, 764, 91, 1, 0, 0, 0, 765, 768, 3, 174, 87, 0, + 766, 767, 5, 7, 0, 0, 767, 769, 3, 194, 97, 0, 768, 766, 1, 0, 0, 0, 768, 769, 1, 0, 0, + 0, 769, 93, 1, 0, 0, 0, 770, 776, 5, 19, 0, 0, 771, 774, 3, 174, 87, 0, 772, 773, 5, 7, + 0, 0, 773, 775, 3, 200, 100, 0, 774, 772, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 777, + 1, 0, 0, 0, 776, 771, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 95, 1, 0, 0, 0, 778, 789, 3, + 28, 14, 0, 779, 780, 5, 44, 0, 0, 780, 782, 5, 1, 0, 0, 781, 783, 3, 26, 13, 0, 782, 781, + 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 782, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, + 1, 0, 0, 0, 786, 787, 5, 2, 0, 0, 787, 789, 1, 0, 0, 0, 788, 778, 1, 0, 0, 0, 788, 779, + 1, 0, 0, 0, 789, 97, 1, 0, 0, 0, 790, 791, 5, 30, 0, 0, 791, 792, 3, 100, 50, 0, 792, 793, + 5, 60, 0, 0, 793, 794, 5, 44, 0, 0, 794, 796, 5, 1, 0, 0, 795, 797, 3, 106, 53, 0, 796, + 795, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, + 800, 1, 0, 0, 0, 800, 801, 5, 2, 0, 0, 801, 99, 1, 0, 0, 0, 802, 803, 3, 104, 52, 0, 803, + 805, 5, 59, 0, 0, 804, 806, 3, 102, 51, 0, 805, 804, 1, 0, 0, 0, 805, 806, 1, 0, 0, 0, + 806, 809, 1, 0, 0, 0, 807, 809, 3, 174, 87, 0, 808, 802, 1, 0, 0, 0, 808, 807, 1, 0, 0, + 0, 809, 101, 1, 0, 0, 0, 810, 812, 5, 59, 0, 0, 811, 813, 3, 104, 52, 0, 812, 811, 1, + 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 812, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 817, 1, + 0, 0, 0, 816, 818, 5, 59, 0, 0, 817, 816, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 103, 1, + 0, 0, 0, 819, 820, 5, 56, 0, 0, 820, 823, 3, 194, 97, 0, 821, 823, 3, 174, 87, 0, 822, + 819, 1, 0, 0, 0, 822, 821, 1, 0, 0, 0, 823, 105, 1, 0, 0, 0, 824, 825, 5, 12, 0, 0, 825, + 827, 3, 110, 55, 0, 826, 828, 3, 108, 54, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, + 0, 828, 829, 1, 0, 0, 0, 829, 830, 5, 60, 0, 0, 830, 831, 3, 96, 48, 0, 831, 107, 1, 0, + 0, 0, 832, 833, 5, 25, 0, 0, 833, 834, 3, 174, 87, 0, 834, 109, 1, 0, 0, 0, 835, 838, + 3, 150, 75, 0, 836, 838, 3, 112, 56, 0, 837, 835, 1, 0, 0, 0, 837, 836, 1, 0, 0, 0, 838, + 111, 1, 0, 0, 0, 839, 842, 3, 114, 57, 0, 840, 842, 3, 116, 58, 0, 841, 839, 1, 0, 0, + 0, 841, 840, 1, 0, 0, 0, 842, 113, 1, 0, 0, 0, 843, 844, 3, 116, 58, 0, 844, 845, 5, 7, + 0, 0, 845, 846, 3, 136, 68, 0, 846, 115, 1, 0, 0, 0, 847, 852, 3, 118, 59, 0, 848, 849, + 5, 66, 0, 0, 849, 851, 3, 118, 59, 0, 850, 848, 1, 0, 0, 0, 851, 854, 1, 0, 0, 0, 852, + 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 117, 1, 0, 0, 0, 854, 852, 1, 0, 0, 0, 855, + 864, 3, 120, 60, 0, 856, 864, 3, 134, 67, 0, 857, 864, 3, 138, 69, 0, 858, 864, 3, 140, + 70, 0, 859, 864, 3, 146, 73, 0, 860, 864, 3, 148, 74, 0, 861, 864, 3, 158, 79, 0, 862, + 864, 3, 166, 83, 0, 863, 855, 1, 0, 0, 0, 863, 856, 1, 0, 0, 0, 863, 857, 1, 0, 0, 0, 863, + 858, 1, 0, 0, 0, 863, 859, 1, 0, 0, 0, 863, 860, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 863, + 862, 1, 0, 0, 0, 864, 119, 1, 0, 0, 0, 865, 866, 3, 126, 63, 0, 866, 867, 4, 60, 0, 0, + 867, 874, 1, 0, 0, 0, 868, 874, 3, 124, 62, 0, 869, 874, 3, 236, 118, 0, 870, 874, 5, + 31, 0, 0, 871, 874, 5, 38, 0, 0, 872, 874, 5, 20, 0, 0, 873, 865, 1, 0, 0, 0, 873, 868, + 1, 0, 0, 0, 873, 869, 1, 0, 0, 0, 873, 870, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 872, + 1, 0, 0, 0, 874, 121, 1, 0, 0, 0, 875, 876, 3, 126, 63, 0, 876, 877, 4, 61, 1, 0, 877, + 884, 1, 0, 0, 0, 878, 884, 3, 124, 62, 0, 879, 884, 3, 236, 118, 0, 880, 884, 5, 31, + 0, 0, 881, 884, 5, 38, 0, 0, 882, 884, 5, 20, 0, 0, 883, 875, 1, 0, 0, 0, 883, 878, 1, + 0, 0, 0, 883, 879, 1, 0, 0, 0, 883, 880, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 883, 882, 1, + 0, 0, 0, 884, 123, 1, 0, 0, 0, 885, 886, 3, 128, 64, 0, 886, 887, 5, 71, 0, 0, 887, 888, + 3, 132, 66, 0, 888, 894, 1, 0, 0, 0, 889, 890, 3, 128, 64, 0, 890, 891, 5, 72, 0, 0, 891, + 892, 3, 132, 66, 0, 892, 894, 1, 0, 0, 0, 893, 885, 1, 0, 0, 0, 893, 889, 1, 0, 0, 0, 894, + 125, 1, 0, 0, 0, 895, 899, 5, 4, 0, 0, 896, 897, 5, 72, 0, 0, 897, 899, 5, 4, 0, 0, 898, + 895, 1, 0, 0, 0, 898, 896, 1, 0, 0, 0, 899, 127, 1, 0, 0, 0, 900, 904, 3, 130, 65, 0, 901, + 902, 5, 72, 0, 0, 902, 904, 3, 130, 65, 0, 903, 900, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, + 904, 129, 1, 0, 0, 0, 905, 906, 5, 4, 0, 0, 906, 131, 1, 0, 0, 0, 907, 908, 5, 4, 0, 0, + 908, 133, 1, 0, 0, 0, 909, 910, 3, 136, 68, 0, 910, 135, 1, 0, 0, 0, 911, 912, 3, 200, + 100, 0, 912, 913, 4, 68, 2, 0, 913, 137, 1, 0, 0, 0, 914, 915, 5, 40, 0, 0, 915, 139, + 1, 0, 0, 0, 916, 917, 3, 142, 71, 0, 917, 918, 4, 70, 3, 0, 918, 141, 1, 0, 0, 0, 919, + 922, 3, 200, 100, 0, 920, 921, 5, 54, 0, 0, 921, 923, 3, 200, 100, 0, 922, 920, 1, 0, + 0, 0, 923, 924, 1, 0, 0, 0, 924, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 143, 1, 0, + 0, 0, 926, 929, 3, 142, 71, 0, 927, 929, 3, 200, 100, 0, 928, 926, 1, 0, 0, 0, 928, 927, + 1, 0, 0, 0, 929, 145, 1, 0, 0, 0, 930, 931, 5, 57, 0, 0, 931, 932, 3, 112, 56, 0, 932, + 933, 5, 58, 0, 0, 933, 147, 1, 0, 0, 0, 934, 936, 5, 64, 0, 0, 935, 937, 3, 152, 76, 0, + 936, 935, 1, 0, 0, 0, 936, 937, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 945, 5, 65, 0, 0, + 939, 941, 5, 57, 0, 0, 940, 942, 3, 150, 75, 0, 941, 940, 1, 0, 0, 0, 941, 942, 1, 0, + 0, 0, 942, 943, 1, 0, 0, 0, 943, 945, 5, 58, 0, 0, 944, 934, 1, 0, 0, 0, 944, 939, 1, 0, + 0, 0, 945, 149, 1, 0, 0, 0, 946, 947, 3, 154, 77, 0, 947, 949, 5, 59, 0, 0, 948, 950, + 3, 152, 76, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 151, 1, 0, 0, 0, 951, 956, + 3, 154, 77, 0, 952, 953, 5, 59, 0, 0, 953, 955, 3, 154, 77, 0, 954, 952, 1, 0, 0, 0, 955, + 958, 1, 0, 0, 0, 956, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 960, 1, 0, 0, 0, 958, + 956, 1, 0, 0, 0, 959, 961, 5, 59, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, + 153, 1, 0, 0, 0, 962, 965, 3, 156, 78, 0, 963, 965, 3, 112, 56, 0, 964, 962, 1, 0, 0, + 0, 964, 963, 1, 0, 0, 0, 965, 155, 1, 0, 0, 0, 966, 967, 5, 56, 0, 0, 967, 971, 3, 136, + 68, 0, 968, 969, 5, 56, 0, 0, 969, 971, 3, 138, 69, 0, 970, 966, 1, 0, 0, 0, 970, 968, + 1, 0, 0, 0, 971, 157, 1, 0, 0, 0, 972, 973, 5, 77, 0, 0, 973, 998, 5, 78, 0, 0, 974, 975, + 5, 77, 0, 0, 975, 977, 3, 164, 82, 0, 976, 978, 5, 59, 0, 0, 977, 976, 1, 0, 0, 0, 977, + 978, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 980, 5, 78, 0, 0, 980, 998, 1, 0, 0, 0, 981, + 982, 5, 77, 0, 0, 982, 983, 3, 160, 80, 0, 983, 984, 5, 59, 0, 0, 984, 986, 3, 164, 82, + 0, 985, 987, 5, 59, 0, 0, 986, 985, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 988, 1, 0, 0, + 0, 988, 989, 5, 78, 0, 0, 989, 998, 1, 0, 0, 0, 990, 991, 5, 77, 0, 0, 991, 993, 3, 160, + 80, 0, 992, 994, 5, 59, 0, 0, 993, 992, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 995, 1, + 0, 0, 0, 995, 996, 5, 78, 0, 0, 996, 998, 1, 0, 0, 0, 997, 972, 1, 0, 0, 0, 997, 974, 1, + 0, 0, 0, 997, 981, 1, 0, 0, 0, 997, 990, 1, 0, 0, 0, 998, 159, 1, 0, 0, 0, 999, 1004, 3, + 162, 81, 0, 1000, 1001, 5, 59, 0, 0, 1001, 1003, 3, 162, 81, 0, 1002, 1000, 1, 0, 0, + 0, 1003, 1006, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 161, + 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1007, 1010, 3, 122, 61, 0, 1008, 1010, 3, 142, 71, + 0, 1009, 1007, 1, 0, 0, 0, 1009, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1012, + 5, 60, 0, 0, 1012, 1013, 3, 112, 56, 0, 1013, 163, 1, 0, 0, 0, 1014, 1015, 5, 62, 0, + 0, 1015, 1016, 3, 136, 68, 0, 1016, 165, 1, 0, 0, 0, 1017, 1018, 3, 144, 72, 0, 1018, + 1019, 5, 57, 0, 0, 1019, 1020, 5, 58, 0, 0, 1020, 1048, 1, 0, 0, 0, 1021, 1022, 3, 144, + 72, 0, 1022, 1023, 5, 57, 0, 0, 1023, 1025, 3, 168, 84, 0, 1024, 1026, 5, 59, 0, 0, + 1025, 1024, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, + 5, 58, 0, 0, 1028, 1048, 1, 0, 0, 0, 1029, 1030, 3, 144, 72, 0, 1030, 1031, 5, 57, 0, + 0, 1031, 1033, 3, 170, 85, 0, 1032, 1034, 5, 59, 0, 0, 1033, 1032, 1, 0, 0, 0, 1033, + 1034, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1036, 5, 58, 0, 0, 1036, 1048, 1, 0, + 0, 0, 1037, 1038, 3, 144, 72, 0, 1038, 1039, 5, 57, 0, 0, 1039, 1040, 3, 168, 84, 0, + 1040, 1041, 5, 59, 0, 0, 1041, 1043, 3, 170, 85, 0, 1042, 1044, 5, 59, 0, 0, 1043, + 1042, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 5, 58, + 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1017, 1, 0, 0, 0, 1047, 1021, 1, 0, 0, 0, 1047, 1029, + 1, 0, 0, 0, 1047, 1037, 1, 0, 0, 0, 1048, 167, 1, 0, 0, 0, 1049, 1054, 3, 112, 56, 0, + 1050, 1051, 5, 59, 0, 0, 1051, 1053, 3, 112, 56, 0, 1052, 1050, 1, 0, 0, 0, 1053, 1056, + 1, 0, 0, 0, 1054, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 169, 1, 0, 0, 0, 1056, + 1054, 1, 0, 0, 0, 1057, 1062, 3, 172, 86, 0, 1058, 1059, 5, 59, 0, 0, 1059, 1061, 3, + 172, 86, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1064, 1, 0, 0, 0, 1062, 1060, 1, 0, 0, 0, 1062, + 1063, 1, 0, 0, 0, 1063, 171, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1065, 1066, 3, 200, + 100, 0, 1066, 1067, 5, 63, 0, 0, 1067, 1068, 3, 112, 56, 0, 1068, 173, 1, 0, 0, 0, 1069, + 1075, 3, 182, 91, 0, 1070, 1071, 5, 25, 0, 0, 1071, 1072, 3, 182, 91, 0, 1072, 1073, + 5, 18, 0, 0, 1073, 1074, 3, 174, 87, 0, 1074, 1076, 1, 0, 0, 0, 1075, 1070, 1, 0, 0, + 0, 1075, 1076, 1, 0, 0, 0, 1076, 1079, 1, 0, 0, 0, 1077, 1079, 3, 178, 89, 0, 1078, + 1069, 1, 0, 0, 0, 1078, 1077, 1, 0, 0, 0, 1079, 175, 1, 0, 0, 0, 1080, 1083, 3, 182, + 91, 0, 1081, 1083, 3, 180, 90, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1081, 1, 0, 0, 0, 1083, + 177, 1, 0, 0, 0, 1084, 1086, 5, 29, 0, 0, 1085, 1087, 3, 22, 11, 0, 1086, 1085, 1, 0, + 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1089, 5, 60, 0, 0, 1089, + 1090, 3, 174, 87, 0, 1090, 179, 1, 0, 0, 0, 1091, 1093, 5, 29, 0, 0, 1092, 1094, 3, + 22, 11, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, + 1096, 5, 60, 0, 0, 1096, 1097, 3, 176, 88, 0, 1097, 181, 1, 0, 0, 0, 1098, 1103, 3, + 184, 92, 0, 1099, 1100, 5, 34, 0, 0, 1100, 1102, 3, 184, 92, 0, 1101, 1099, 1, 0, 0, + 0, 1102, 1105, 1, 0, 0, 0, 1103, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 183, + 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1106, 1111, 3, 186, 93, 0, 1107, 1108, 5, 6, 0, 0, + 1108, 1110, 3, 186, 93, 0, 1109, 1107, 1, 0, 0, 0, 1110, 1113, 1, 0, 0, 0, 1111, 1109, + 1, 0, 0, 0, 1111, 1112, 1, 0, 0, 0, 1112, 185, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1114, + 1115, 5, 33, 0, 0, 1115, 1118, 3, 186, 93, 0, 1116, 1118, 3, 188, 94, 0, 1117, 1114, + 1, 0, 0, 0, 1117, 1116, 1, 0, 0, 0, 1118, 187, 1, 0, 0, 0, 1119, 1125, 3, 194, 97, 0, + 1120, 1121, 3, 190, 95, 0, 1121, 1122, 3, 194, 97, 0, 1122, 1124, 1, 0, 0, 0, 1123, + 1120, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, + 0, 1126, 189, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1142, 5, 79, 0, 0, 1129, 1142, + 5, 80, 0, 0, 1130, 1142, 5, 81, 0, 0, 1131, 1142, 5, 82, 0, 0, 1132, 1142, 5, 83, 0, + 0, 1133, 1142, 5, 84, 0, 0, 1134, 1142, 5, 85, 0, 0, 1135, 1142, 5, 27, 0, 0, 1136, + 1137, 5, 33, 0, 0, 1137, 1142, 5, 27, 0, 0, 1138, 1142, 5, 28, 0, 0, 1139, 1140, 5, + 28, 0, 0, 1140, 1142, 5, 33, 0, 0, 1141, 1128, 1, 0, 0, 0, 1141, 1129, 1, 0, 0, 0, 1141, + 1130, 1, 0, 0, 0, 1141, 1131, 1, 0, 0, 0, 1141, 1132, 1, 0, 0, 0, 1141, 1133, 1, 0, 0, + 0, 1141, 1134, 1, 0, 0, 0, 1141, 1135, 1, 0, 0, 0, 1141, 1136, 1, 0, 0, 0, 1141, 1138, + 1, 0, 0, 0, 1141, 1139, 1, 0, 0, 0, 1142, 191, 1, 0, 0, 0, 1143, 1144, 5, 56, 0, 0, 1144, + 1145, 3, 194, 97, 0, 1145, 193, 1, 0, 0, 0, 1146, 1147, 6, 97, -1, 0, 1147, 1155, 3, + 196, 98, 0, 1148, 1150, 7, 2, 0, 0, 1149, 1148, 1, 0, 0, 0, 1150, 1151, 1, 0, 0, 0, 1151, + 1149, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1155, 3, 194, + 97, 7, 1154, 1146, 1, 0, 0, 0, 1154, 1149, 1, 0, 0, 0, 1155, 1179, 1, 0, 0, 0, 1156, + 1157, 10, 8, 0, 0, 1157, 1158, 5, 62, 0, 0, 1158, 1178, 3, 194, 97, 9, 1159, 1160, + 10, 6, 0, 0, 1160, 1161, 7, 3, 0, 0, 1161, 1178, 3, 194, 97, 7, 1162, 1163, 10, 5, 0, + 0, 1163, 1164, 7, 4, 0, 0, 1164, 1178, 3, 194, 97, 6, 1165, 1166, 10, 4, 0, 0, 1166, + 1167, 7, 5, 0, 0, 1167, 1178, 3, 194, 97, 5, 1168, 1169, 10, 3, 0, 0, 1169, 1170, 5, + 68, 0, 0, 1170, 1178, 3, 194, 97, 4, 1171, 1172, 10, 2, 0, 0, 1172, 1173, 5, 67, 0, + 0, 1173, 1178, 3, 194, 97, 3, 1174, 1175, 10, 1, 0, 0, 1175, 1176, 5, 66, 0, 0, 1176, + 1178, 3, 194, 97, 2, 1177, 1156, 1, 0, 0, 0, 1177, 1159, 1, 0, 0, 0, 1177, 1162, 1, + 0, 0, 0, 1177, 1165, 1, 0, 0, 0, 1177, 1168, 1, 0, 0, 0, 1177, 1171, 1, 0, 0, 0, 1177, + 1174, 1, 0, 0, 0, 1178, 1181, 1, 0, 0, 0, 1179, 1177, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, + 0, 1180, 195, 1, 0, 0, 0, 1181, 1179, 1, 0, 0, 0, 1182, 1184, 5, 10, 0, 0, 1183, 1182, + 1, 0, 0, 0, 1183, 1184, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1189, 3, 198, 99, 0, + 1186, 1188, 3, 204, 102, 0, 1187, 1186, 1, 0, 0, 0, 1188, 1191, 1, 0, 0, 0, 1189, 1187, + 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 197, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1192, + 1195, 5, 57, 0, 0, 1193, 1196, 3, 232, 116, 0, 1194, 1196, 3, 202, 101, 0, 1195, 1193, + 1, 0, 0, 0, 1195, 1194, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, + 1220, 5, 58, 0, 0, 1198, 1200, 5, 64, 0, 0, 1199, 1201, 3, 202, 101, 0, 1200, 1199, + 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1220, 5, 65, 0, 0, 1203, + 1205, 5, 77, 0, 0, 1204, 1206, 3, 216, 108, 0, 1205, 1204, 1, 0, 0, 0, 1205, 1206, + 1, 0, 0, 0, 1206, 1207, 1, 0, 0, 0, 1207, 1220, 5, 78, 0, 0, 1208, 1220, 3, 200, 100, + 0, 1209, 1220, 5, 4, 0, 0, 1210, 1212, 5, 3, 0, 0, 1211, 1210, 1, 0, 0, 0, 1212, 1213, + 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1220, 1, 0, 0, 0, 1215, + 1220, 5, 55, 0, 0, 1216, 1220, 5, 31, 0, 0, 1217, 1220, 5, 38, 0, 0, 1218, 1220, 5, + 20, 0, 0, 1219, 1192, 1, 0, 0, 0, 1219, 1198, 1, 0, 0, 0, 1219, 1203, 1, 0, 0, 0, 1219, + 1208, 1, 0, 0, 0, 1219, 1209, 1, 0, 0, 0, 1219, 1211, 1, 0, 0, 0, 1219, 1215, 1, 0, 0, + 0, 1219, 1216, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1219, 1218, 1, 0, 0, 0, 1220, 199, + 1, 0, 0, 0, 1221, 1222, 7, 6, 0, 0, 1222, 201, 1, 0, 0, 0, 1223, 1226, 3, 174, 87, 0, + 1224, 1226, 3, 192, 96, 0, 1225, 1223, 1, 0, 0, 0, 1225, 1224, 1, 0, 0, 0, 1226, 1241, + 1, 0, 0, 0, 1227, 1242, 3, 226, 113, 0, 1228, 1231, 5, 59, 0, 0, 1229, 1232, 3, 174, + 87, 0, 1230, 1232, 3, 192, 96, 0, 1231, 1229, 1, 0, 0, 0, 1231, 1230, 1, 0, 0, 0, 1232, + 1234, 1, 0, 0, 0, 1233, 1228, 1, 0, 0, 0, 1234, 1237, 1, 0, 0, 0, 1235, 1233, 1, 0, 0, + 0, 1235, 1236, 1, 0, 0, 0, 1236, 1239, 1, 0, 0, 0, 1237, 1235, 1, 0, 0, 0, 1238, 1240, + 5, 59, 0, 0, 1239, 1238, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1242, 1, 0, 0, 0, 1241, + 1227, 1, 0, 0, 0, 1241, 1235, 1, 0, 0, 0, 1242, 203, 1, 0, 0, 0, 1243, 1245, 5, 57, 0, + 0, 1244, 1246, 3, 220, 110, 0, 1245, 1244, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1246, + 1247, 1, 0, 0, 0, 1247, 1255, 5, 58, 0, 0, 1248, 1249, 5, 64, 0, 0, 1249, 1250, 3, 206, + 103, 0, 1250, 1251, 5, 65, 0, 0, 1251, 1255, 1, 0, 0, 0, 1252, 1253, 5, 54, 0, 0, 1253, + 1255, 3, 200, 100, 0, 1254, 1243, 1, 0, 0, 0, 1254, 1248, 1, 0, 0, 0, 1254, 1252, 1, + 0, 0, 0, 1255, 205, 1, 0, 0, 0, 1256, 1261, 3, 208, 104, 0, 1257, 1258, 5, 59, 0, 0, + 1258, 1260, 3, 208, 104, 0, 1259, 1257, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, + 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1265, 1, 0, 0, 0, 1263, 1261, 1, 0, 0, 0, 1264, + 1266, 5, 59, 0, 0, 1265, 1264, 1, 0, 0, 0, 1265, 1266, 1, 0, 0, 0, 1266, 207, 1, 0, 0, + 0, 1267, 1279, 3, 174, 87, 0, 1268, 1270, 3, 174, 87, 0, 1269, 1268, 1, 0, 0, 0, 1269, + 1270, 1, 0, 0, 0, 1270, 1271, 1, 0, 0, 0, 1271, 1273, 5, 60, 0, 0, 1272, 1274, 3, 174, + 87, 0, 1273, 1272, 1, 0, 0, 0, 1273, 1274, 1, 0, 0, 0, 1274, 1276, 1, 0, 0, 0, 1275, + 1277, 3, 210, 105, 0, 1276, 1275, 1, 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1279, 1, + 0, 0, 0, 1278, 1267, 1, 0, 0, 0, 1278, 1269, 1, 0, 0, 0, 1279, 209, 1, 0, 0, 0, 1280, + 1282, 5, 60, 0, 0, 1281, 1283, 3, 174, 87, 0, 1282, 1281, 1, 0, 0, 0, 1282, 1283, 1, + 0, 0, 0, 1283, 211, 1, 0, 0, 0, 1284, 1287, 3, 194, 97, 0, 1285, 1287, 3, 192, 96, 0, + 1286, 1284, 1, 0, 0, 0, 1286, 1285, 1, 0, 0, 0, 1287, 1295, 1, 0, 0, 0, 1288, 1291, + 5, 59, 0, 0, 1289, 1292, 3, 194, 97, 0, 1290, 1292, 3, 192, 96, 0, 1291, 1289, 1, 0, + 0, 0, 1291, 1290, 1, 0, 0, 0, 1292, 1294, 1, 0, 0, 0, 1293, 1288, 1, 0, 0, 0, 1294, 1297, + 1, 0, 0, 0, 1295, 1293, 1, 0, 0, 0, 1295, 1296, 1, 0, 0, 0, 1296, 1299, 1, 0, 0, 0, 1297, + 1295, 1, 0, 0, 0, 1298, 1300, 5, 59, 0, 0, 1299, 1298, 1, 0, 0, 0, 1299, 1300, 1, 0, + 0, 0, 1300, 213, 1, 0, 0, 0, 1301, 1306, 3, 174, 87, 0, 1302, 1303, 5, 59, 0, 0, 1303, + 1305, 3, 174, 87, 0, 1304, 1302, 1, 0, 0, 0, 1305, 1308, 1, 0, 0, 0, 1306, 1304, 1, + 0, 0, 0, 1306, 1307, 1, 0, 0, 0, 1307, 1310, 1, 0, 0, 0, 1308, 1306, 1, 0, 0, 0, 1309, + 1311, 5, 59, 0, 0, 1310, 1309, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 215, 1, 0, 0, + 0, 1312, 1313, 3, 174, 87, 0, 1313, 1314, 5, 60, 0, 0, 1314, 1315, 3, 174, 87, 0, 1315, + 1319, 1, 0, 0, 0, 1316, 1317, 5, 62, 0, 0, 1317, 1319, 3, 194, 97, 0, 1318, 1312, 1, + 0, 0, 0, 1318, 1316, 1, 0, 0, 0, 1319, 1338, 1, 0, 0, 0, 1320, 1339, 3, 226, 113, 0, + 1321, 1328, 5, 59, 0, 0, 1322, 1323, 3, 174, 87, 0, 1323, 1324, 5, 60, 0, 0, 1324, + 1325, 3, 174, 87, 0, 1325, 1329, 1, 0, 0, 0, 1326, 1327, 5, 62, 0, 0, 1327, 1329, 3, + 194, 97, 0, 1328, 1322, 1, 0, 0, 0, 1328, 1326, 1, 0, 0, 0, 1329, 1331, 1, 0, 0, 0, 1330, + 1321, 1, 0, 0, 0, 1331, 1334, 1, 0, 0, 0, 1332, 1330, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, + 0, 1333, 1336, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1335, 1337, 5, 59, 0, 0, 1336, 1335, + 1, 0, 0, 0, 1336, 1337, 1, 0, 0, 0, 1337, 1339, 1, 0, 0, 0, 1338, 1320, 1, 0, 0, 0, 1338, + 1332, 1, 0, 0, 0, 1339, 1361, 1, 0, 0, 0, 1340, 1343, 3, 174, 87, 0, 1341, 1343, 3, + 192, 96, 0, 1342, 1340, 1, 0, 0, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1358, 1, 0, 0, 0, 1344, + 1359, 3, 226, 113, 0, 1345, 1348, 5, 59, 0, 0, 1346, 1349, 3, 174, 87, 0, 1347, 1349, + 3, 192, 96, 0, 1348, 1346, 1, 0, 0, 0, 1348, 1347, 1, 0, 0, 0, 1349, 1351, 1, 0, 0, 0, + 1350, 1345, 1, 0, 0, 0, 1351, 1354, 1, 0, 0, 0, 1352, 1350, 1, 0, 0, 0, 1352, 1353, + 1, 0, 0, 0, 1353, 1356, 1, 0, 0, 0, 1354, 1352, 1, 0, 0, 0, 1355, 1357, 5, 59, 0, 0, 1356, + 1355, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1359, 1, 0, 0, 0, 1358, 1344, 1, 0, 0, + 0, 1358, 1352, 1, 0, 0, 0, 1359, 1361, 1, 0, 0, 0, 1360, 1318, 1, 0, 0, 0, 1360, 1342, + 1, 0, 0, 0, 1361, 217, 1, 0, 0, 0, 1362, 1363, 5, 13, 0, 0, 1363, 1369, 3, 200, 100, + 0, 1364, 1366, 5, 57, 0, 0, 1365, 1367, 3, 220, 110, 0, 1366, 1365, 1, 0, 0, 0, 1366, + 1367, 1, 0, 0, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1370, 5, 58, 0, 0, 1369, 1364, 1, 0, + 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1372, 5, 60, 0, 0, 1372, + 1373, 3, 96, 48, 0, 1373, 219, 1, 0, 0, 0, 1374, 1379, 3, 222, 111, 0, 1375, 1376, + 5, 59, 0, 0, 1376, 1378, 3, 222, 111, 0, 1377, 1375, 1, 0, 0, 0, 1378, 1381, 1, 0, 0, + 0, 1379, 1377, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1383, 1, 0, 0, 0, 1381, 1379, + 1, 0, 0, 0, 1382, 1384, 5, 59, 0, 0, 1383, 1382, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, + 221, 1, 0, 0, 0, 1385, 1387, 3, 174, 87, 0, 1386, 1388, 3, 226, 113, 0, 1387, 1386, + 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1398, 1, 0, 0, 0, 1389, 1390, 3, 174, 87, 0, + 1390, 1391, 5, 63, 0, 0, 1391, 1392, 3, 174, 87, 0, 1392, 1398, 1, 0, 0, 0, 1393, 1394, + 5, 62, 0, 0, 1394, 1398, 3, 174, 87, 0, 1395, 1396, 5, 56, 0, 0, 1396, 1398, 3, 174, + 87, 0, 1397, 1385, 1, 0, 0, 0, 1397, 1389, 1, 0, 0, 0, 1397, 1393, 1, 0, 0, 0, 1397, + 1395, 1, 0, 0, 0, 1398, 223, 1, 0, 0, 0, 1399, 1402, 3, 226, 113, 0, 1400, 1402, 3, + 228, 114, 0, 1401, 1399, 1, 0, 0, 0, 1401, 1400, 1, 0, 0, 0, 1402, 225, 1, 0, 0, 0, 1403, + 1405, 5, 9, 0, 0, 1404, 1403, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1406, 1, 0, 0, + 0, 1406, 1407, 5, 22, 0, 0, 1407, 1408, 3, 212, 106, 0, 1408, 1409, 5, 27, 0, 0, 1409, + 1411, 3, 182, 91, 0, 1410, 1412, 3, 224, 112, 0, 1411, 1410, 1, 0, 0, 0, 1411, 1412, + 1, 0, 0, 0, 1412, 227, 1, 0, 0, 0, 1413, 1414, 5, 25, 0, 0, 1414, 1416, 3, 176, 88, 0, + 1415, 1417, 3, 224, 112, 0, 1416, 1415, 1, 0, 0, 0, 1416, 1417, 1, 0, 0, 0, 1417, 229, + 1, 0, 0, 0, 1418, 1419, 3, 200, 100, 0, 1419, 231, 1, 0, 0, 0, 1420, 1422, 5, 43, 0, + 0, 1421, 1423, 3, 234, 117, 0, 1422, 1421, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, + 233, 1, 0, 0, 0, 1424, 1425, 5, 23, 0, 0, 1425, 1428, 3, 174, 87, 0, 1426, 1428, 3, + 214, 107, 0, 1427, 1424, 1, 0, 0, 0, 1427, 1426, 1, 0, 0, 0, 1428, 235, 1, 0, 0, 0, 1429, + 1431, 5, 3, 0, 0, 1430, 1429, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1430, 1, 0, 0, + 0, 1432, 1433, 1, 0, 0, 0, 1433, 237, 1, 0, 0, 0, 201, 243, 247, 249, 258, 267, 270, + 277, 283, 293, 300, 307, 313, 317, 323, 329, 333, 340, 342, 344, 349, 351, 353, + 357, 363, 367, 374, 376, 378, 383, 385, 390, 395, 401, 405, 411, 417, 421, 428, + 430, 432, 437, 439, 441, 445, 451, 455, 462, 464, 466, 471, 473, 479, 486, 490, + 502, 509, 514, 518, 521, 527, 531, 536, 540, 544, 558, 566, 574, 576, 580, 589, + 596, 598, 607, 612, 617, 624, 628, 635, 643, 652, 661, 668, 680, 686, 699, 705, + 714, 725, 736, 741, 746, 751, 759, 768, 774, 776, 784, 788, 798, 805, 808, 814, + 817, 822, 827, 837, 841, 852, 863, 873, 883, 893, 898, 903, 924, 928, 936, 941, + 944, 949, 956, 960, 964, 970, 977, 986, 993, 997, 1004, 1009, 1025, 1033, 1043, + 1047, 1054, 1062, 1075, 1078, 1082, 1086, 1093, 1103, 1111, 1117, 1125, 1141, + 1151, 1154, 1177, 1179, 1183, 1189, 1195, 1200, 1205, 1213, 1219, 1225, 1231, + 1235, 1239, 1241, 1245, 1254, 1261, 1265, 1269, 1273, 1276, 1278, 1282, 1286, + 1291, 1295, 1299, 1306, 1310, 1318, 1328, 1332, 1336, 1338, 1342, 1348, 1352, + 1356, 1358, 1360, 1366, 1369, 1379, 1383, 1387, 1397, 1401, 1404, 1411, 1416, + 1422, 1427, 1432 + ] + + + + +class Python3Parser(Python3ParserBase): + grammarFileName = "Python3Parser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + sharedContextCache = PredictionContextCache() + + literalNames = ["", "", "", "", + "", "", "'and'", "'as'", "'assert'", + "'async'", "'await'", "'break'", "'case'", "'class'", + "'continue'", "'def'", "'del'", "'elif'", "'else'", + "'except'", "'False'", "'finally'", "'for'", "'from'", + "'global'", "'if'", "'import'", "'in'", "'is'", "'lambda'", + "'match'", "'None'", "'nonlocal'", "'not'", "'or'", + "'pass'", "'raise'", "'return'", "'True'", "'try'", + "'_'", "'while'", "'with'", "'yield'", "", + "", "", "", "", + "", "", "", "", + "", "'.'", "'...'", "'*'", "'('", "')'", "','", + "':'", "';'", "'**'", "'='", "'['", "']'", "'|'", "'^'", + "'&'", "'<<'", "'>>'", "'+'", "'-'", "'/'", "'%'", + "'//'", "'~'", "'{'", "'}'", "'<'", "'>'", "'=='", + "'>='", "'<='", "'<>'", "'!='", "'@'", "'->'", "'+='", + "'-='", "'*='", "'@='", "'/='", "'%='", "'&='", "'|='", + "'^='", "'<<='", "'>>='", "'**='", "'//='"] + + symbolicNames = ["", "INDENT", "DEDENT", "STRING", "NUMBER", + "INTEGER", "AND", "AS", "ASSERT", "ASYNC", "AWAIT", + "BREAK", "CASE", "CLASS", "CONTINUE", "DEF", "DEL", + "ELIF", "ELSE", "EXCEPT", "FALSE", "FINALLY", "FOR", + "FROM", "GLOBAL", "IF", "IMPORT", "IN", "IS", "LAMBDA", + "MATCH", "NONE", "NONLOCAL", "NOT", "OR", "PASS", + "RAISE", "RETURN", "TRUE", "TRY", "UNDERSCORE", "WHILE", + "WITH", "YIELD", "NEWLINE", "NAME", "STRING_LITERAL", + "BYTES_LITERAL", "DECIMAL_INTEGER", "OCT_INTEGER", + "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "IMAG_NUMBER", + "DOT", "ELLIPSIS", "STAR", "OPEN_PAREN", "CLOSE_PAREN", + "COMMA", "COLON", "SEMI_COLON", "POWER", "ASSIGN", + "OPEN_BRACK", "CLOSE_BRACK", "OR_OP", "XOR", "AND_OP", + "LEFT_SHIFT", "RIGHT_SHIFT", "ADD", "MINUS", "DIV", + "MOD", "IDIV", "NOT_OP", "OPEN_BRACE", "CLOSE_BRACE", + "LESS_THAN", "GREATER_THAN", "EQUALS", "GT_EQ", "LT_EQ", + "NOT_EQ_1", "NOT_EQ_2", "AT", "ARROW", "ADD_ASSIGN", + "SUB_ASSIGN", "MULT_ASSIGN", "AT_ASSIGN", "DIV_ASSIGN", + "MOD_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", + "LEFT_SHIFT_ASSIGN", "RIGHT_SHIFT_ASSIGN", "POWER_ASSIGN", + "IDIV_ASSIGN", "SKIP_", "UNKNOWN_CHAR"] + + RULE_single_input = 0 + RULE_file_input = 1 + RULE_eval_input = 2 + RULE_decorator = 3 + RULE_decorators = 4 + RULE_decorated = 5 + RULE_async_funcdef = 6 + RULE_funcdef = 7 + RULE_parameters = 8 + RULE_typedargslist = 9 + RULE_tfpdef = 10 + RULE_varargslist = 11 + RULE_vfpdef = 12 + RULE_stmt = 13 + RULE_simple_stmts = 14 + RULE_simple_stmt = 15 + RULE_expr_stmt = 16 + RULE_annassign = 17 + RULE_testlist_star_expr = 18 + RULE_augassign = 19 + RULE_del_stmt = 20 + RULE_pass_stmt = 21 + RULE_flow_stmt = 22 + RULE_break_stmt = 23 + RULE_continue_stmt = 24 + RULE_return_stmt = 25 + RULE_yield_stmt = 26 + RULE_raise_stmt = 27 + RULE_import_stmt = 28 + RULE_import_name = 29 + RULE_import_from = 30 + RULE_import_as_name = 31 + RULE_dotted_as_name = 32 + RULE_import_as_names = 33 + RULE_dotted_as_names = 34 + RULE_dotted_name = 35 + RULE_global_stmt = 36 + RULE_nonlocal_stmt = 37 + RULE_assert_stmt = 38 + RULE_compound_stmt = 39 + RULE_async_stmt = 40 + RULE_if_stmt = 41 + RULE_while_stmt = 42 + RULE_for_stmt = 43 + RULE_try_stmt = 44 + RULE_with_stmt = 45 + RULE_with_item = 46 + RULE_except_clause = 47 + RULE_block = 48 + RULE_match_stmt = 49 + RULE_subject_expr = 50 + RULE_star_named_expressions = 51 + RULE_star_named_expression = 52 + RULE_case_block = 53 + RULE_guard = 54 + RULE_patterns = 55 + RULE_pattern = 56 + RULE_as_pattern = 57 + RULE_or_pattern = 58 + RULE_closed_pattern = 59 + RULE_literal_pattern = 60 + RULE_literal_expr = 61 + RULE_complex_number = 62 + RULE_signed_number = 63 + RULE_signed_real_number = 64 + RULE_real_number = 65 + RULE_imaginary_number = 66 + RULE_capture_pattern = 67 + RULE_pattern_capture_target = 68 + RULE_wildcard_pattern = 69 + RULE_value_pattern = 70 + RULE_attr = 71 + RULE_name_or_attr = 72 + RULE_group_pattern = 73 + RULE_sequence_pattern = 74 + RULE_open_sequence_pattern = 75 + RULE_maybe_sequence_pattern = 76 + RULE_maybe_star_pattern = 77 + RULE_star_pattern = 78 + RULE_mapping_pattern = 79 + RULE_items_pattern = 80 + RULE_key_value_pattern = 81 + RULE_double_star_pattern = 82 + RULE_class_pattern = 83 + RULE_positional_patterns = 84 + RULE_keyword_patterns = 85 + RULE_keyword_pattern = 86 + RULE_test = 87 + RULE_test_nocond = 88 + RULE_lambdef = 89 + RULE_lambdef_nocond = 90 + RULE_or_test = 91 + RULE_and_test = 92 + RULE_not_test = 93 + RULE_comparison = 94 + RULE_comp_op = 95 + RULE_star_expr = 96 + RULE_expr = 97 + RULE_atom_expr = 98 + RULE_atom = 99 + RULE_name = 100 + RULE_testlist_comp = 101 + RULE_trailer = 102 + RULE_subscriptlist = 103 + RULE_subscript_ = 104 + RULE_sliceop = 105 + RULE_exprlist = 106 + RULE_testlist = 107 + RULE_dictorsetmaker = 108 + RULE_classdef = 109 + RULE_arglist = 110 + RULE_argument = 111 + RULE_comp_iter = 112 + RULE_comp_for = 113 + RULE_comp_if = 114 + RULE_encoding_decl = 115 + RULE_yield_expr = 116 + RULE_yield_arg = 117 + RULE_strings = 118 + + ruleNames = ["single_input", "file_input", "eval_input", "decorator", + "decorators", "decorated", "async_funcdef", "funcdef", + "parameters", "typedargslist", "tfpdef", "varargslist", + "vfpdef", "stmt", "simple_stmts", "simple_stmt", "expr_stmt", + "annassign", "testlist_star_expr", "augassign", "del_stmt", + "pass_stmt", "flow_stmt", "break_stmt", "continue_stmt", + "return_stmt", "yield_stmt", "raise_stmt", "import_stmt", + "import_name", "import_from", "import_as_name", "dotted_as_name", + "import_as_names", "dotted_as_names", "dotted_name", + "global_stmt", "nonlocal_stmt", "assert_stmt", "compound_stmt", + "async_stmt", "if_stmt", "while_stmt", "for_stmt", "try_stmt", + "with_stmt", "with_item", "except_clause", "block", "match_stmt", + "subject_expr", "star_named_expressions", "star_named_expression", + "case_block", "guard", "patterns", "pattern", "as_pattern", + "or_pattern", "closed_pattern", "literal_pattern", "literal_expr", + "complex_number", "signed_number", "signed_real_number", + "real_number", "imaginary_number", "capture_pattern", + "pattern_capture_target", "wildcard_pattern", "value_pattern", + "attr", "name_or_attr", "group_pattern", "sequence_pattern", + "open_sequence_pattern", "maybe_sequence_pattern", "maybe_star_pattern", + "star_pattern", "mapping_pattern", "items_pattern", "key_value_pattern", + "double_star_pattern", "class_pattern", "positional_patterns", + "keyword_patterns", "keyword_pattern", "test", "test_nocond", + "lambdef", "lambdef_nocond", "or_test", "and_test", "not_test", + "comparison", "comp_op", "star_expr", "expr", "atom_expr", + "atom", "name", "testlist_comp", "trailer", "subscriptlist", + "subscript_", "sliceop", "exprlist", "testlist", "dictorsetmaker", + "classdef", "arglist", "argument", "comp_iter", "comp_for", + "comp_if", "encoding_decl", "yield_expr", "yield_arg", + "strings"] + + EOF = Token.EOF + INDENT = 1 + DEDENT = 2 + STRING = 3 + NUMBER = 4 + INTEGER = 5 + AND = 6 + AS = 7 + ASSERT = 8 + ASYNC = 9 + AWAIT = 10 + BREAK = 11 + CASE = 12 + CLASS = 13 + CONTINUE = 14 + DEF = 15 + DEL = 16 + ELIF = 17 + ELSE = 18 + EXCEPT = 19 + FALSE = 20 + FINALLY = 21 + FOR = 22 + FROM = 23 + GLOBAL = 24 + IF = 25 + IMPORT = 26 + IN = 27 + IS = 28 + LAMBDA = 29 + MATCH = 30 + NONE = 31 + NONLOCAL = 32 + NOT = 33 + OR = 34 + PASS = 35 + RAISE = 36 + RETURN = 37 + TRUE = 38 + TRY = 39 + UNDERSCORE = 40 + WHILE = 41 + WITH = 42 + YIELD = 43 + NEWLINE = 44 + NAME = 45 + STRING_LITERAL = 46 + BYTES_LITERAL = 47 + DECIMAL_INTEGER = 48 + OCT_INTEGER = 49 + HEX_INTEGER = 50 + BIN_INTEGER = 51 + FLOAT_NUMBER = 52 + IMAG_NUMBER = 53 + DOT = 54 + ELLIPSIS = 55 + STAR = 56 + OPEN_PAREN = 57 + CLOSE_PAREN = 58 + COMMA = 59 + COLON = 60 + SEMI_COLON = 61 + POWER = 62 + ASSIGN = 63 + OPEN_BRACK = 64 + CLOSE_BRACK = 65 + OR_OP = 66 + XOR = 67 + AND_OP = 68 + LEFT_SHIFT = 69 + RIGHT_SHIFT = 70 + ADD = 71 + MINUS = 72 + DIV = 73 + MOD = 74 + IDIV = 75 + NOT_OP = 76 + OPEN_BRACE = 77 + CLOSE_BRACE = 78 + LESS_THAN = 79 + GREATER_THAN = 80 + EQUALS = 81 + GT_EQ = 82 + LT_EQ = 83 + NOT_EQ_1 = 84 + NOT_EQ_2 = 85 + AT = 86 + ARROW = 87 + ADD_ASSIGN = 88 + SUB_ASSIGN = 89 + MULT_ASSIGN = 90 + AT_ASSIGN = 91 + DIV_ASSIGN = 92 + MOD_ASSIGN = 93 + AND_ASSIGN = 94 + OR_ASSIGN = 95 + XOR_ASSIGN = 96 + LEFT_SHIFT_ASSIGN = 97 + RIGHT_SHIFT_ASSIGN = 98 + POWER_ASSIGN = 99 + IDIV_ASSIGN = 100 + SKIP_ = 101 + UNKNOWN_CHAR = 102 + + def __init__(self, input: TokenStream, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.1") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + class Single_inputContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEWLINE(self): + return self.getToken(Python3Parser.NEWLINE, 0) + + def simple_stmts(self): + return self.getTypedRuleContext(Python3Parser.Simple_stmtsContext, 0) + + def compound_stmt(self): + return self.getTypedRuleContext(Python3Parser.Compound_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_single_input + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSingle_input"): + listener.enterSingle_input(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSingle_input"): + listener.exitSingle_input(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSingle_input"): + return visitor.visitSingle_input(self) + else: + return visitor.visitChildren(self) + + def single_input(self): + + localctx = Python3Parser.Single_inputContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_single_input) + try: + self.state = 243 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 0, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 238 + self.match(Python3Parser.NEWLINE) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 239 + self.simple_stmts() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 240 + self.compound_stmt() + self.state = 241 + self.match(Python3Parser.NEWLINE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class File_inputContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EOF(self): + return self.getToken(Python3Parser.EOF, 0) + + def NEWLINE(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.NEWLINE) + else: + return self.getToken(Python3Parser.NEWLINE, i) + + def stmt(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.StmtContext) + else: + return self.getTypedRuleContext(Python3Parser.StmtContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_file_input + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFile_input"): + listener.enterFile_input(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFile_input"): + listener.exitFile_input(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFile_input"): + return visitor.visitFile_input(self) + else: + return visitor.visitChildren(self) + + def file_input(self): + + localctx = Python3Parser.File_inputContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_file_input) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 249 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 252271930291384088) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 4206977) != 0): + self.state = 247 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [44]: + self.state = 245 + self.match(Python3Parser.NEWLINE) + pass + elif token in [3, 4, 8, 9, 10, 11, 13, 14, 15, 16, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 45, 55, 56, 57, 64, 71, 72, 76, 77, 86]: + self.state = 246 + self.stmt() + pass + else: + raise NoViableAltException(self) + + self.state = 251 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 252 + self.match(Python3Parser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Eval_inputContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def testlist(self): + return self.getTypedRuleContext(Python3Parser.TestlistContext, 0) + + def EOF(self): + return self.getToken(Python3Parser.EOF, 0) + + def NEWLINE(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.NEWLINE) + else: + return self.getToken(Python3Parser.NEWLINE, i) + + def getRuleIndex(self): + return Python3Parser.RULE_eval_input + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEval_input"): + listener.enterEval_input(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEval_input"): + listener.exitEval_input(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEval_input"): + return visitor.visitEval_input(self) + else: + return visitor.visitChildren(self) + + def eval_input(self): + + localctx = Python3Parser.Eval_inputContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_eval_input) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 254 + self.testlist() + self.state = 258 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 44: + self.state = 255 + self.match(Python3Parser.NEWLINE) + self.state = 260 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 261 + self.match(Python3Parser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DecoratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Python3Parser.AT, 0) + + def dotted_name(self): + return self.getTypedRuleContext(Python3Parser.Dotted_nameContext, 0) + + def NEWLINE(self): + return self.getToken(Python3Parser.NEWLINE, 0) + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def arglist(self): + return self.getTypedRuleContext(Python3Parser.ArglistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_decorator + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDecorator"): + listener.enterDecorator(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDecorator"): + listener.exitDecorator(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDecorator"): + return visitor.visitDecorator(self) + else: + return visitor.visitChildren(self) + + def decorator(self): + + localctx = Python3Parser.DecoratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_decorator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 263 + self.match(Python3Parser.AT) + self.state = 264 + self.dotted_name() + self.state = 270 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 57: + self.state = 265 + self.match(Python3Parser.OPEN_PAREN) + self.state = 267 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4863924168670839832) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 266 + self.arglist() + + self.state = 269 + self.match(Python3Parser.CLOSE_PAREN) + + self.state = 272 + self.match(Python3Parser.NEWLINE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DecoratorsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def decorator(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.DecoratorContext) + else: + return self.getTypedRuleContext(Python3Parser.DecoratorContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_decorators + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDecorators"): + listener.enterDecorators(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDecorators"): + listener.exitDecorators(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDecorators"): + return visitor.visitDecorators(self) + else: + return visitor.visitChildren(self) + + def decorators(self): + + localctx = Python3Parser.DecoratorsContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_decorators) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 275 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 274 + self.decorator() + self.state = 277 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 86): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DecoratedContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def decorators(self): + return self.getTypedRuleContext(Python3Parser.DecoratorsContext, 0) + + def classdef(self): + return self.getTypedRuleContext(Python3Parser.ClassdefContext, 0) + + def funcdef(self): + return self.getTypedRuleContext(Python3Parser.FuncdefContext, 0) + + def async_funcdef(self): + return self.getTypedRuleContext(Python3Parser.Async_funcdefContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_decorated + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDecorated"): + listener.enterDecorated(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDecorated"): + listener.exitDecorated(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDecorated"): + return visitor.visitDecorated(self) + else: + return visitor.visitChildren(self) + + def decorated(self): + + localctx = Python3Parser.DecoratedContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_decorated) + try: + self.enterOuterAlt(localctx, 1) + self.state = 279 + self.decorators() + self.state = 283 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [13]: + self.state = 280 + self.classdef() + pass + elif token in [15]: + self.state = 281 + self.funcdef() + pass + elif token in [9]: + self.state = 282 + self.async_funcdef() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Async_funcdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASYNC(self): + return self.getToken(Python3Parser.ASYNC, 0) + + def funcdef(self): + return self.getTypedRuleContext(Python3Parser.FuncdefContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_async_funcdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAsync_funcdef"): + listener.enterAsync_funcdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAsync_funcdef"): + listener.exitAsync_funcdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAsync_funcdef"): + return visitor.visitAsync_funcdef(self) + else: + return visitor.visitChildren(self) + + def async_funcdef(self): + + localctx = Python3Parser.Async_funcdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_async_funcdef) + try: + self.enterOuterAlt(localctx, 1) + self.state = 285 + self.match(Python3Parser.ASYNC) + self.state = 286 + self.funcdef() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FuncdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEF(self): + return self.getToken(Python3Parser.DEF, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def parameters(self): + return self.getTypedRuleContext(Python3Parser.ParametersContext, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def block(self): + return self.getTypedRuleContext(Python3Parser.BlockContext, 0) + + def ARROW(self): + return self.getToken(Python3Parser.ARROW, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_funcdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFuncdef"): + listener.enterFuncdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFuncdef"): + listener.exitFuncdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFuncdef"): + return visitor.visitFuncdef(self) + else: + return visitor.visitChildren(self) + + def funcdef(self): + + localctx = Python3Parser.FuncdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_funcdef) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 288 + self.match(Python3Parser.DEF) + self.state = 289 + self.name() + self.state = 290 + self.parameters() + self.state = 293 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 87: + self.state = 291 + self.match(Python3Parser.ARROW) + self.state = 292 + self.test() + + self.state = 295 + self.match(Python3Parser.COLON) + self.state = 296 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def typedargslist(self): + return self.getTypedRuleContext(Python3Parser.TypedargslistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_parameters + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterParameters"): + listener.enterParameters(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitParameters"): + listener.exitParameters(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitParameters"): + return visitor.visitParameters(self) + else: + return visitor.visitChildren(self) + + def parameters(self): + + localctx = Python3Parser.ParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_parameters) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 298 + self.match(Python3Parser.OPEN_PAREN) + self.state = 300 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4683779897422774272) != 0): + self.state = 299 + self.typedargslist() + + self.state = 302 + self.match(Python3Parser.CLOSE_PAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TypedargslistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def tfpdef(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TfpdefContext) + else: + return self.getTypedRuleContext(Python3Parser.TfpdefContext, i) + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def POWER(self): + return self.getToken(Python3Parser.POWER, 0) + + def ASSIGN(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ASSIGN) + else: + return self.getToken(Python3Parser.ASSIGN, i) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_typedargslist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTypedargslist"): + listener.enterTypedargslist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTypedargslist"): + listener.exitTypedargslist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTypedargslist"): + return visitor.visitTypedargslist(self) + else: + return visitor.visitChildren(self) + + def typedargslist(self): + + localctx = Python3Parser.TypedargslistContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_typedargslist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 385 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [30, 40, 45]: + self.state = 304 + self.tfpdef() + self.state = 307 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 305 + self.match(Python3Parser.ASSIGN) + self.state = 306 + self.test() + + self.state = 317 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 12, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 309 + self.match(Python3Parser.COMMA) + self.state = 310 + self.tfpdef() + self.state = 313 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 311 + self.match(Python3Parser.ASSIGN) + self.state = 312 + self.test() + + self.state = 319 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 12, self._ctx) + + self.state = 353 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 320 + self.match(Python3Parser.COMMA) + self.state = 351 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.state = 321 + self.match(Python3Parser.STAR) + self.state = 323 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 36284957458432) != 0): + self.state = 322 + self.tfpdef() + + self.state = 333 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 15, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 325 + self.match(Python3Parser.COMMA) + self.state = 326 + self.tfpdef() + self.state = 329 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 327 + self.match(Python3Parser.ASSIGN) + self.state = 328 + self.test() + + self.state = 335 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 15, self._ctx) + + self.state = 344 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 336 + self.match(Python3Parser.COMMA) + self.state = 342 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 337 + self.match(Python3Parser.POWER) + self.state = 338 + self.tfpdef() + self.state = 340 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 339 + self.match(Python3Parser.COMMA) + + pass + elif token in [62]: + self.state = 346 + self.match(Python3Parser.POWER) + self.state = 347 + self.tfpdef() + self.state = 349 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 348 + self.match(Python3Parser.COMMA) + + pass + elif token in [58]: + pass + else: + pass + + pass + elif token in [56]: + self.state = 355 + self.match(Python3Parser.STAR) + self.state = 357 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 36284957458432) != 0): + self.state = 356 + self.tfpdef() + + self.state = 367 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 24, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 359 + self.match(Python3Parser.COMMA) + self.state = 360 + self.tfpdef() + self.state = 363 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 361 + self.match(Python3Parser.ASSIGN) + self.state = 362 + self.test() + + self.state = 369 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 24, self._ctx) + + self.state = 378 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 370 + self.match(Python3Parser.COMMA) + self.state = 376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 371 + self.match(Python3Parser.POWER) + self.state = 372 + self.tfpdef() + self.state = 374 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 373 + self.match(Python3Parser.COMMA) + + pass + elif token in [62]: + self.state = 380 + self.match(Python3Parser.POWER) + self.state = 381 + self.tfpdef() + self.state = 383 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 382 + self.match(Python3Parser.COMMA) + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TfpdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_tfpdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTfpdef"): + listener.enterTfpdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTfpdef"): + listener.exitTfpdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTfpdef"): + return visitor.visitTfpdef(self) + else: + return visitor.visitChildren(self) + + def tfpdef(self): + + localctx = Python3Parser.TfpdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_tfpdef) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 387 + self.name() + self.state = 390 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 60: + self.state = 388 + self.match(Python3Parser.COLON) + self.state = 389 + self.test() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VarargslistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def vfpdef(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.VfpdefContext) + else: + return self.getTypedRuleContext(Python3Parser.VfpdefContext, i) + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def POWER(self): + return self.getToken(Python3Parser.POWER, 0) + + def ASSIGN(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ASSIGN) + else: + return self.getToken(Python3Parser.ASSIGN, i) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_varargslist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVarargslist"): + listener.enterVarargslist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVarargslist"): + listener.exitVarargslist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVarargslist"): + return visitor.visitVarargslist(self) + else: + return visitor.visitChildren(self) + + def varargslist(self): + + localctx = Python3Parser.VarargslistContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_varargslist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 473 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [30, 40, 45]: + self.state = 392 + self.vfpdef() + self.state = 395 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 393 + self.match(Python3Parser.ASSIGN) + self.state = 394 + self.test() + + self.state = 405 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 33, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 397 + self.match(Python3Parser.COMMA) + self.state = 398 + self.vfpdef() + self.state = 401 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 399 + self.match(Python3Parser.ASSIGN) + self.state = 400 + self.test() + + self.state = 407 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 33, self._ctx) + + self.state = 441 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 408 + self.match(Python3Parser.COMMA) + self.state = 439 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.state = 409 + self.match(Python3Parser.STAR) + self.state = 411 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 36284957458432) != 0): + self.state = 410 + self.vfpdef() + + self.state = 421 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 36, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 413 + self.match(Python3Parser.COMMA) + self.state = 414 + self.vfpdef() + self.state = 417 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 415 + self.match(Python3Parser.ASSIGN) + self.state = 416 + self.test() + + self.state = 423 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 36, self._ctx) + + self.state = 432 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 424 + self.match(Python3Parser.COMMA) + self.state = 430 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 425 + self.match(Python3Parser.POWER) + self.state = 426 + self.vfpdef() + self.state = 428 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 427 + self.match(Python3Parser.COMMA) + + pass + elif token in [62]: + self.state = 434 + self.match(Python3Parser.POWER) + self.state = 435 + self.vfpdef() + self.state = 437 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 436 + self.match(Python3Parser.COMMA) + + pass + elif token in [60]: + pass + else: + pass + + pass + elif token in [56]: + self.state = 443 + self.match(Python3Parser.STAR) + self.state = 445 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 36284957458432) != 0): + self.state = 444 + self.vfpdef() + + self.state = 455 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 45, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 447 + self.match(Python3Parser.COMMA) + self.state = 448 + self.vfpdef() + self.state = 451 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 449 + self.match(Python3Parser.ASSIGN) + self.state = 450 + self.test() + + self.state = 457 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 45, self._ctx) + + self.state = 466 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 458 + self.match(Python3Parser.COMMA) + self.state = 464 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 62: + self.state = 459 + self.match(Python3Parser.POWER) + self.state = 460 + self.vfpdef() + self.state = 462 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 461 + self.match(Python3Parser.COMMA) + + pass + elif token in [62]: + self.state = 468 + self.match(Python3Parser.POWER) + self.state = 469 + self.vfpdef() + self.state = 471 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 470 + self.match(Python3Parser.COMMA) + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VfpdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_vfpdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVfpdef"): + listener.enterVfpdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVfpdef"): + listener.exitVfpdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVfpdef"): + return visitor.visitVfpdef(self) + else: + return visitor.visitChildren(self) + + def vfpdef(self): + + localctx = Python3Parser.VfpdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_vfpdef) + try: + self.enterOuterAlt(localctx, 1) + self.state = 475 + self.name() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def simple_stmts(self): + return self.getTypedRuleContext(Python3Parser.Simple_stmtsContext, 0) + + def compound_stmt(self): + return self.getTypedRuleContext(Python3Parser.Compound_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStmt"): + listener.enterStmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStmt"): + listener.exitStmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStmt"): + return visitor.visitStmt(self) + else: + return visitor.visitChildren(self) + + def stmt(self): + + localctx = Python3Parser.StmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_stmt) + try: + self.state = 479 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 51, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 477 + self.simple_stmts() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 478 + self.compound_stmt() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Simple_stmtsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def simple_stmt(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Simple_stmtContext) + else: + return self.getTypedRuleContext(Python3Parser.Simple_stmtContext, i) + + def NEWLINE(self): + return self.getToken(Python3Parser.NEWLINE, 0) + + def SEMI_COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.SEMI_COLON) + else: + return self.getToken(Python3Parser.SEMI_COLON, i) + + def getRuleIndex(self): + return Python3Parser.RULE_simple_stmts + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSimple_stmts"): + listener.enterSimple_stmts(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSimple_stmts"): + listener.exitSimple_stmts(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSimple_stmts"): + return visitor.visitSimple_stmts(self) + else: + return visitor.visitChildren(self) + + def simple_stmts(self): + + localctx = Python3Parser.Simple_stmtsContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_simple_stmts) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 481 + self.simple_stmt() + self.state = 486 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 52, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 482 + self.match(Python3Parser.SEMI_COLON) + self.state = 483 + self.simple_stmt() + self.state = 488 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 52, self._ctx) + + self.state = 490 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 61: + self.state = 489 + self.match(Python3Parser.SEMI_COLON) + + self.state = 492 + self.match(Python3Parser.NEWLINE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Simple_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expr_stmt(self): + return self.getTypedRuleContext(Python3Parser.Expr_stmtContext, 0) + + def del_stmt(self): + return self.getTypedRuleContext(Python3Parser.Del_stmtContext, 0) + + def pass_stmt(self): + return self.getTypedRuleContext(Python3Parser.Pass_stmtContext, 0) + + def flow_stmt(self): + return self.getTypedRuleContext(Python3Parser.Flow_stmtContext, 0) + + def import_stmt(self): + return self.getTypedRuleContext(Python3Parser.Import_stmtContext, 0) + + def global_stmt(self): + return self.getTypedRuleContext(Python3Parser.Global_stmtContext, 0) + + def nonlocal_stmt(self): + return self.getTypedRuleContext(Python3Parser.Nonlocal_stmtContext, 0) + + def assert_stmt(self): + return self.getTypedRuleContext(Python3Parser.Assert_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_simple_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSimple_stmt"): + listener.enterSimple_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSimple_stmt"): + listener.exitSimple_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSimple_stmt"): + return visitor.visitSimple_stmt(self) + else: + return visitor.visitChildren(self) + + def simple_stmt(self): + + localctx = Python3Parser.Simple_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_simple_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 502 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 56, 57, 64, 71, 72, 76, 77]: + self.state = 494 + self.expr_stmt() + pass + elif token in [16]: + self.state = 495 + self.del_stmt() + pass + elif token in [35]: + self.state = 496 + self.pass_stmt() + pass + elif token in [11, 14, 36, 37, 43]: + self.state = 497 + self.flow_stmt() + pass + elif token in [23, 26]: + self.state = 498 + self.import_stmt() + pass + elif token in [24]: + self.state = 499 + self.global_stmt() + pass + elif token in [32]: + self.state = 500 + self.nonlocal_stmt() + pass + elif token in [8]: + self.state = 501 + self.assert_stmt() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Expr_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def testlist_star_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Testlist_star_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Testlist_star_exprContext, i) + + def annassign(self): + return self.getTypedRuleContext(Python3Parser.AnnassignContext, 0) + + def augassign(self): + return self.getTypedRuleContext(Python3Parser.AugassignContext, 0) + + def yield_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Yield_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Yield_exprContext, i) + + def testlist(self): + return self.getTypedRuleContext(Python3Parser.TestlistContext, 0) + + def ASSIGN(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ASSIGN) + else: + return self.getToken(Python3Parser.ASSIGN, i) + + def getRuleIndex(self): + return Python3Parser.RULE_expr_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpr_stmt"): + listener.enterExpr_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpr_stmt"): + listener.exitExpr_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpr_stmt"): + return visitor.visitExpr_stmt(self) + else: + return visitor.visitChildren(self) + + def expr_stmt(self): + + localctx = Python3Parser.Expr_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_expr_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 504 + self.testlist_star_expr() + self.state = 521 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [60]: + self.state = 505 + self.annassign() + pass + elif token in [88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]: + self.state = 506 + self.augassign() + self.state = 509 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [43]: + self.state = 507 + self.yield_expr() + pass + elif token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 508 + self.testlist() + pass + else: + raise NoViableAltException(self) + + pass + elif token in [44, 61, 63]: + self.state = 518 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 63: + self.state = 511 + self.match(Python3Parser.ASSIGN) + self.state = 514 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [43]: + self.state = 512 + self.yield_expr() + pass + elif token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 56, 57, 64, 71, 72, 76, 77]: + self.state = 513 + self.testlist_star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 520 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AnnassignContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def ASSIGN(self): + return self.getToken(Python3Parser.ASSIGN, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_annassign + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnnassign"): + listener.enterAnnassign(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnnassign"): + listener.exitAnnassign(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnnassign"): + return visitor.visitAnnassign(self) + else: + return visitor.visitChildren(self) + + def annassign(self): + + localctx = Python3Parser.AnnassignContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_annassign) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 523 + self.match(Python3Parser.COLON) + self.state = 524 + self.test() + self.state = 527 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 63: + self.state = 525 + self.match(Python3Parser.ASSIGN) + self.state = 526 + self.test() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Testlist_star_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def star_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Star_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Star_exprContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_testlist_star_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestlist_star_expr"): + listener.enterTestlist_star_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestlist_star_expr"): + listener.exitTestlist_star_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestlist_star_expr"): + return visitor.visitTestlist_star_expr(self) + else: + return visitor.visitChildren(self) + + def testlist_star_expr(self): + + localctx = Python3Parser.Testlist_star_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_testlist_star_expr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 531 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 529 + self.test() + pass + elif token in [56]: + self.state = 530 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 540 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 62, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 533 + self.match(Python3Parser.COMMA) + self.state = 536 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 534 + self.test() + pass + elif token in [56]: + self.state = 535 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 542 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 62, self._ctx) + + self.state = 544 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 543 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AugassignContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ADD_ASSIGN(self): + return self.getToken(Python3Parser.ADD_ASSIGN, 0) + + def SUB_ASSIGN(self): + return self.getToken(Python3Parser.SUB_ASSIGN, 0) + + def MULT_ASSIGN(self): + return self.getToken(Python3Parser.MULT_ASSIGN, 0) + + def AT_ASSIGN(self): + return self.getToken(Python3Parser.AT_ASSIGN, 0) + + def DIV_ASSIGN(self): + return self.getToken(Python3Parser.DIV_ASSIGN, 0) + + def MOD_ASSIGN(self): + return self.getToken(Python3Parser.MOD_ASSIGN, 0) + + def AND_ASSIGN(self): + return self.getToken(Python3Parser.AND_ASSIGN, 0) + + def OR_ASSIGN(self): + return self.getToken(Python3Parser.OR_ASSIGN, 0) + + def XOR_ASSIGN(self): + return self.getToken(Python3Parser.XOR_ASSIGN, 0) + + def LEFT_SHIFT_ASSIGN(self): + return self.getToken(Python3Parser.LEFT_SHIFT_ASSIGN, 0) + + def RIGHT_SHIFT_ASSIGN(self): + return self.getToken(Python3Parser.RIGHT_SHIFT_ASSIGN, 0) + + def POWER_ASSIGN(self): + return self.getToken(Python3Parser.POWER_ASSIGN, 0) + + def IDIV_ASSIGN(self): + return self.getToken(Python3Parser.IDIV_ASSIGN, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_augassign + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAugassign"): + listener.enterAugassign(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAugassign"): + listener.exitAugassign(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAugassign"): + return visitor.visitAugassign(self) + else: + return visitor.visitChildren(self) + + def augassign(self): + + localctx = Python3Parser.AugassignContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_augassign) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 546 + _la = self._input.LA(1) + if not (((((_la - 88)) & ~0x3f) == 0 and ((1 << (_la - 88)) & 8191) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Del_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEL(self): + return self.getToken(Python3Parser.DEL, 0) + + def exprlist(self): + return self.getTypedRuleContext(Python3Parser.ExprlistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_del_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDel_stmt"): + listener.enterDel_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDel_stmt"): + listener.exitDel_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDel_stmt"): + return visitor.visitDel_stmt(self) + else: + return visitor.visitChildren(self) + + def del_stmt(self): + + localctx = Python3Parser.Del_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_del_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 548 + self.match(Python3Parser.DEL) + self.state = 549 + self.exprlist() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Pass_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def PASS(self): + return self.getToken(Python3Parser.PASS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_pass_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPass_stmt"): + listener.enterPass_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPass_stmt"): + listener.exitPass_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPass_stmt"): + return visitor.visitPass_stmt(self) + else: + return visitor.visitChildren(self) + + def pass_stmt(self): + + localctx = Python3Parser.Pass_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_pass_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 551 + self.match(Python3Parser.PASS) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Flow_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def break_stmt(self): + return self.getTypedRuleContext(Python3Parser.Break_stmtContext, 0) + + def continue_stmt(self): + return self.getTypedRuleContext(Python3Parser.Continue_stmtContext, 0) + + def return_stmt(self): + return self.getTypedRuleContext(Python3Parser.Return_stmtContext, 0) + + def raise_stmt(self): + return self.getTypedRuleContext(Python3Parser.Raise_stmtContext, 0) + + def yield_stmt(self): + return self.getTypedRuleContext(Python3Parser.Yield_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_flow_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFlow_stmt"): + listener.enterFlow_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFlow_stmt"): + listener.exitFlow_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFlow_stmt"): + return visitor.visitFlow_stmt(self) + else: + return visitor.visitChildren(self) + + def flow_stmt(self): + + localctx = Python3Parser.Flow_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_flow_stmt) + try: + self.state = 558 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [11]: + self.enterOuterAlt(localctx, 1) + self.state = 553 + self.break_stmt() + pass + elif token in [14]: + self.enterOuterAlt(localctx, 2) + self.state = 554 + self.continue_stmt() + pass + elif token in [37]: + self.enterOuterAlt(localctx, 3) + self.state = 555 + self.return_stmt() + pass + elif token in [36]: + self.enterOuterAlt(localctx, 4) + self.state = 556 + self.raise_stmt() + pass + elif token in [43]: + self.enterOuterAlt(localctx, 5) + self.state = 557 + self.yield_stmt() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Break_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def BREAK(self): + return self.getToken(Python3Parser.BREAK, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_break_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBreak_stmt"): + listener.enterBreak_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBreak_stmt"): + listener.exitBreak_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBreak_stmt"): + return visitor.visitBreak_stmt(self) + else: + return visitor.visitChildren(self) + + def break_stmt(self): + + localctx = Python3Parser.Break_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_break_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 560 + self.match(Python3Parser.BREAK) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Continue_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CONTINUE(self): + return self.getToken(Python3Parser.CONTINUE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_continue_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterContinue_stmt"): + listener.enterContinue_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitContinue_stmt"): + listener.exitContinue_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitContinue_stmt"): + return visitor.visitContinue_stmt(self) + else: + return visitor.visitChildren(self) + + def continue_stmt(self): + + localctx = Python3Parser.Continue_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_continue_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 562 + self.match(Python3Parser.CONTINUE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Return_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def RETURN(self): + return self.getToken(Python3Parser.RETURN, 0) + + def testlist(self): + return self.getTypedRuleContext(Python3Parser.TestlistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_return_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReturn_stmt"): + listener.enterReturn_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReturn_stmt"): + listener.exitReturn_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReturn_stmt"): + return visitor.visitReturn_stmt(self) + else: + return visitor.visitChildren(self) + + def return_stmt(self): + + localctx = Python3Parser.Return_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_return_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 564 + self.match(Python3Parser.RETURN) + self.state = 566 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 565 + self.testlist() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Yield_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def yield_expr(self): + return self.getTypedRuleContext(Python3Parser.Yield_exprContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_yield_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterYield_stmt"): + listener.enterYield_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitYield_stmt"): + listener.exitYield_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitYield_stmt"): + return visitor.visitYield_stmt(self) + else: + return visitor.visitChildren(self) + + def yield_stmt(self): + + localctx = Python3Parser.Yield_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_yield_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 568 + self.yield_expr() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Raise_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def RAISE(self): + return self.getToken(Python3Parser.RAISE, 0) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def FROM(self): + return self.getToken(Python3Parser.FROM, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_raise_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterRaise_stmt"): + listener.enterRaise_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitRaise_stmt"): + listener.exitRaise_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitRaise_stmt"): + return visitor.visitRaise_stmt(self) + else: + return visitor.visitChildren(self) + + def raise_stmt(self): + + localctx = Python3Parser.Raise_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_raise_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 570 + self.match(Python3Parser.RAISE) + self.state = 576 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 571 + self.test() + self.state = 574 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 23: + self.state = 572 + self.match(Python3Parser.FROM) + self.state = 573 + self.test() + + + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Import_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def import_name(self): + return self.getTypedRuleContext(Python3Parser.Import_nameContext, 0) + + def import_from(self): + return self.getTypedRuleContext(Python3Parser.Import_fromContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_import_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImport_stmt"): + listener.enterImport_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImport_stmt"): + listener.exitImport_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImport_stmt"): + return visitor.visitImport_stmt(self) + else: + return visitor.visitChildren(self) + + def import_stmt(self): + + localctx = Python3Parser.Import_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_import_stmt) + try: + self.state = 580 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26]: + self.enterOuterAlt(localctx, 1) + self.state = 578 + self.import_name() + pass + elif token in [23]: + self.enterOuterAlt(localctx, 2) + self.state = 579 + self.import_from() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Import_nameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Python3Parser.IMPORT, 0) + + def dotted_as_names(self): + return self.getTypedRuleContext(Python3Parser.Dotted_as_namesContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_import_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImport_name"): + listener.enterImport_name(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImport_name"): + listener.exitImport_name(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImport_name"): + return visitor.visitImport_name(self) + else: + return visitor.visitChildren(self) + + def import_name(self): + + localctx = Python3Parser.Import_nameContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_import_name) + try: + self.enterOuterAlt(localctx, 1) + self.state = 582 + self.match(Python3Parser.IMPORT) + self.state = 583 + self.dotted_as_names() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Import_fromContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FROM(self): + return self.getToken(Python3Parser.FROM, 0) + + def IMPORT(self): + return self.getToken(Python3Parser.IMPORT, 0) + + def dotted_name(self): + return self.getTypedRuleContext(Python3Parser.Dotted_nameContext, 0) + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def import_as_names(self): + return self.getTypedRuleContext(Python3Parser.Import_as_namesContext, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.DOT) + else: + return self.getToken(Python3Parser.DOT, i) + + def ELLIPSIS(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ELLIPSIS) + else: + return self.getToken(Python3Parser.ELLIPSIS, i) + + def getRuleIndex(self): + return Python3Parser.RULE_import_from + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImport_from"): + listener.enterImport_from(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImport_from"): + listener.exitImport_from(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImport_from"): + return visitor.visitImport_from(self) + else: + return visitor.visitChildren(self) + + def import_from(self): + + localctx = Python3Parser.Import_fromContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_import_from) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 585 + self.match(Python3Parser.FROM) + self.state = 598 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 71, self._ctx) + if la_ == 1: + self.state = 589 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 54 or _la == 55: + self.state = 586 + _la = self._input.LA(1) + if not (_la == 54 or _la == 55): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 591 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 592 + self.dotted_name() + pass + + elif la_ == 2: + self.state = 594 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 593 + _la = self._input.LA(1) + if not (_la == 54 or _la == 55): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 596 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 54 or _la == 55): + break + + pass + + self.state = 600 + self.match(Python3Parser.IMPORT) + self.state = 607 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.state = 601 + self.match(Python3Parser.STAR) + pass + elif token in [57]: + self.state = 602 + self.match(Python3Parser.OPEN_PAREN) + self.state = 603 + self.import_as_names() + self.state = 604 + self.match(Python3Parser.CLOSE_PAREN) + pass + elif token in [30, 40, 45]: + self.state = 606 + self.import_as_names() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Import_as_nameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.NameContext) + else: + return self.getTypedRuleContext(Python3Parser.NameContext, i) + + def AS(self): + return self.getToken(Python3Parser.AS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_import_as_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImport_as_name"): + listener.enterImport_as_name(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImport_as_name"): + listener.exitImport_as_name(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImport_as_name"): + return visitor.visitImport_as_name(self) + else: + return visitor.visitChildren(self) + + def import_as_name(self): + + localctx = Python3Parser.Import_as_nameContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_import_as_name) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 609 + self.name() + self.state = 612 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 610 + self.match(Python3Parser.AS) + self.state = 611 + self.name() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Dotted_as_nameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def dotted_name(self): + return self.getTypedRuleContext(Python3Parser.Dotted_nameContext, 0) + + def AS(self): + return self.getToken(Python3Parser.AS, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_dotted_as_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDotted_as_name"): + listener.enterDotted_as_name(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDotted_as_name"): + listener.exitDotted_as_name(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDotted_as_name"): + return visitor.visitDotted_as_name(self) + else: + return visitor.visitChildren(self) + + def dotted_as_name(self): + + localctx = Python3Parser.Dotted_as_nameContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_dotted_as_name) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 614 + self.dotted_name() + self.state = 617 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 615 + self.match(Python3Parser.AS) + self.state = 616 + self.name() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Import_as_namesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def import_as_name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Import_as_nameContext) + else: + return self.getTypedRuleContext(Python3Parser.Import_as_nameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_import_as_names + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImport_as_names"): + listener.enterImport_as_names(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImport_as_names"): + listener.exitImport_as_names(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImport_as_names"): + return visitor.visitImport_as_names(self) + else: + return visitor.visitChildren(self) + + def import_as_names(self): + + localctx = Python3Parser.Import_as_namesContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_import_as_names) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 619 + self.import_as_name() + self.state = 624 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 75, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 620 + self.match(Python3Parser.COMMA) + self.state = 621 + self.import_as_name() + self.state = 626 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 75, self._ctx) + + self.state = 628 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 627 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Dotted_as_namesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def dotted_as_name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Dotted_as_nameContext) + else: + return self.getTypedRuleContext(Python3Parser.Dotted_as_nameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_dotted_as_names + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDotted_as_names"): + listener.enterDotted_as_names(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDotted_as_names"): + listener.exitDotted_as_names(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDotted_as_names"): + return visitor.visitDotted_as_names(self) + else: + return visitor.visitChildren(self) + + def dotted_as_names(self): + + localctx = Python3Parser.Dotted_as_namesContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_dotted_as_names) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 630 + self.dotted_as_name() + self.state = 635 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 59: + self.state = 631 + self.match(Python3Parser.COMMA) + self.state = 632 + self.dotted_as_name() + self.state = 637 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Dotted_nameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.NameContext) + else: + return self.getTypedRuleContext(Python3Parser.NameContext, i) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.DOT) + else: + return self.getToken(Python3Parser.DOT, i) + + def getRuleIndex(self): + return Python3Parser.RULE_dotted_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDotted_name"): + listener.enterDotted_name(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDotted_name"): + listener.exitDotted_name(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDotted_name"): + return visitor.visitDotted_name(self) + else: + return visitor.visitChildren(self) + + def dotted_name(self): + + localctx = Python3Parser.Dotted_nameContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_dotted_name) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 638 + self.name() + self.state = 643 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 54: + self.state = 639 + self.match(Python3Parser.DOT) + self.state = 640 + self.name() + self.state = 645 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Global_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def GLOBAL(self): + return self.getToken(Python3Parser.GLOBAL, 0) + + def name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.NameContext) + else: + return self.getTypedRuleContext(Python3Parser.NameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_global_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterGlobal_stmt"): + listener.enterGlobal_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitGlobal_stmt"): + listener.exitGlobal_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitGlobal_stmt"): + return visitor.visitGlobal_stmt(self) + else: + return visitor.visitChildren(self) + + def global_stmt(self): + + localctx = Python3Parser.Global_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_global_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 646 + self.match(Python3Parser.GLOBAL) + self.state = 647 + self.name() + self.state = 652 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 59: + self.state = 648 + self.match(Python3Parser.COMMA) + self.state = 649 + self.name() + self.state = 654 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Nonlocal_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NONLOCAL(self): + return self.getToken(Python3Parser.NONLOCAL, 0) + + def name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.NameContext) + else: + return self.getTypedRuleContext(Python3Parser.NameContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_nonlocal_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNonlocal_stmt"): + listener.enterNonlocal_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNonlocal_stmt"): + listener.exitNonlocal_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNonlocal_stmt"): + return visitor.visitNonlocal_stmt(self) + else: + return visitor.visitChildren(self) + + def nonlocal_stmt(self): + + localctx = Python3Parser.Nonlocal_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_nonlocal_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 655 + self.match(Python3Parser.NONLOCAL) + self.state = 656 + self.name() + self.state = 661 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 59: + self.state = 657 + self.match(Python3Parser.COMMA) + self.state = 658 + self.name() + self.state = 663 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Assert_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSERT(self): + return self.getToken(Python3Parser.ASSERT, 0) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COMMA(self): + return self.getToken(Python3Parser.COMMA, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_assert_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAssert_stmt"): + listener.enterAssert_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAssert_stmt"): + listener.exitAssert_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAssert_stmt"): + return visitor.visitAssert_stmt(self) + else: + return visitor.visitChildren(self) + + def assert_stmt(self): + + localctx = Python3Parser.Assert_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_assert_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 664 + self.match(Python3Parser.ASSERT) + self.state = 665 + self.test() + self.state = 668 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 666 + self.match(Python3Parser.COMMA) + self.state = 667 + self.test() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Compound_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def if_stmt(self): + return self.getTypedRuleContext(Python3Parser.If_stmtContext, 0) + + def while_stmt(self): + return self.getTypedRuleContext(Python3Parser.While_stmtContext, 0) + + def for_stmt(self): + return self.getTypedRuleContext(Python3Parser.For_stmtContext, 0) + + def try_stmt(self): + return self.getTypedRuleContext(Python3Parser.Try_stmtContext, 0) + + def with_stmt(self): + return self.getTypedRuleContext(Python3Parser.With_stmtContext, 0) + + def funcdef(self): + return self.getTypedRuleContext(Python3Parser.FuncdefContext, 0) + + def classdef(self): + return self.getTypedRuleContext(Python3Parser.ClassdefContext, 0) + + def decorated(self): + return self.getTypedRuleContext(Python3Parser.DecoratedContext, 0) + + def async_stmt(self): + return self.getTypedRuleContext(Python3Parser.Async_stmtContext, 0) + + def match_stmt(self): + return self.getTypedRuleContext(Python3Parser.Match_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_compound_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCompound_stmt"): + listener.enterCompound_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCompound_stmt"): + listener.exitCompound_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCompound_stmt"): + return visitor.visitCompound_stmt(self) + else: + return visitor.visitChildren(self) + + def compound_stmt(self): + + localctx = Python3Parser.Compound_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_compound_stmt) + try: + self.state = 680 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [25]: + self.enterOuterAlt(localctx, 1) + self.state = 670 + self.if_stmt() + pass + elif token in [41]: + self.enterOuterAlt(localctx, 2) + self.state = 671 + self.while_stmt() + pass + elif token in [22]: + self.enterOuterAlt(localctx, 3) + self.state = 672 + self.for_stmt() + pass + elif token in [39]: + self.enterOuterAlt(localctx, 4) + self.state = 673 + self.try_stmt() + pass + elif token in [42]: + self.enterOuterAlt(localctx, 5) + self.state = 674 + self.with_stmt() + pass + elif token in [15]: + self.enterOuterAlt(localctx, 6) + self.state = 675 + self.funcdef() + pass + elif token in [13]: + self.enterOuterAlt(localctx, 7) + self.state = 676 + self.classdef() + pass + elif token in [86]: + self.enterOuterAlt(localctx, 8) + self.state = 677 + self.decorated() + pass + elif token in [9]: + self.enterOuterAlt(localctx, 9) + self.state = 678 + self.async_stmt() + pass + elif token in [30]: + self.enterOuterAlt(localctx, 10) + self.state = 679 + self.match_stmt() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Async_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASYNC(self): + return self.getToken(Python3Parser.ASYNC, 0) + + def funcdef(self): + return self.getTypedRuleContext(Python3Parser.FuncdefContext, 0) + + def with_stmt(self): + return self.getTypedRuleContext(Python3Parser.With_stmtContext, 0) + + def for_stmt(self): + return self.getTypedRuleContext(Python3Parser.For_stmtContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_async_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAsync_stmt"): + listener.enterAsync_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAsync_stmt"): + listener.exitAsync_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAsync_stmt"): + return visitor.visitAsync_stmt(self) + else: + return visitor.visitChildren(self) + + def async_stmt(self): + + localctx = Python3Parser.Async_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_async_stmt) + try: + self.enterOuterAlt(localctx, 1) + self.state = 682 + self.match(Python3Parser.ASYNC) + self.state = 686 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [15]: + self.state = 683 + self.funcdef() + pass + elif token in [42]: + self.state = 684 + self.with_stmt() + pass + elif token in [22]: + self.state = 685 + self.for_stmt() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class If_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Python3Parser.IF, 0) + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COLON) + else: + return self.getToken(Python3Parser.COLON, i) + + def block(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.BlockContext) + else: + return self.getTypedRuleContext(Python3Parser.BlockContext, i) + + def ELIF(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ELIF) + else: + return self.getToken(Python3Parser.ELIF, i) + + def ELSE(self): + return self.getToken(Python3Parser.ELSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_if_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIf_stmt"): + listener.enterIf_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIf_stmt"): + listener.exitIf_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIf_stmt"): + return visitor.visitIf_stmt(self) + else: + return visitor.visitChildren(self) + + def if_stmt(self): + + localctx = Python3Parser.If_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_if_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 688 + self.match(Python3Parser.IF) + self.state = 689 + self.test() + self.state = 690 + self.match(Python3Parser.COLON) + self.state = 691 + self.block() + self.state = 699 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 17: + self.state = 692 + self.match(Python3Parser.ELIF) + self.state = 693 + self.test() + self.state = 694 + self.match(Python3Parser.COLON) + self.state = 695 + self.block() + self.state = 701 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 705 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 18: + self.state = 702 + self.match(Python3Parser.ELSE) + self.state = 703 + self.match(Python3Parser.COLON) + self.state = 704 + self.block() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class While_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(Python3Parser.WHILE, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COLON) + else: + return self.getToken(Python3Parser.COLON, i) + + def block(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.BlockContext) + else: + return self.getTypedRuleContext(Python3Parser.BlockContext, i) + + def ELSE(self): + return self.getToken(Python3Parser.ELSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_while_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWhile_stmt"): + listener.enterWhile_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWhile_stmt"): + listener.exitWhile_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWhile_stmt"): + return visitor.visitWhile_stmt(self) + else: + return visitor.visitChildren(self) + + def while_stmt(self): + + localctx = Python3Parser.While_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_while_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 707 + self.match(Python3Parser.WHILE) + self.state = 708 + self.test() + self.state = 709 + self.match(Python3Parser.COLON) + self.state = 710 + self.block() + self.state = 714 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 18: + self.state = 711 + self.match(Python3Parser.ELSE) + self.state = 712 + self.match(Python3Parser.COLON) + self.state = 713 + self.block() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class For_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Python3Parser.FOR, 0) + + def exprlist(self): + return self.getTypedRuleContext(Python3Parser.ExprlistContext, 0) + + def IN(self): + return self.getToken(Python3Parser.IN, 0) + + def testlist(self): + return self.getTypedRuleContext(Python3Parser.TestlistContext, 0) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COLON) + else: + return self.getToken(Python3Parser.COLON, i) + + def block(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.BlockContext) + else: + return self.getTypedRuleContext(Python3Parser.BlockContext, i) + + def ELSE(self): + return self.getToken(Python3Parser.ELSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_for_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFor_stmt"): + listener.enterFor_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFor_stmt"): + listener.exitFor_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFor_stmt"): + return visitor.visitFor_stmt(self) + else: + return visitor.visitChildren(self) + + def for_stmt(self): + + localctx = Python3Parser.For_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_for_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 716 + self.match(Python3Parser.FOR) + self.state = 717 + self.exprlist() + self.state = 718 + self.match(Python3Parser.IN) + self.state = 719 + self.testlist() + self.state = 720 + self.match(Python3Parser.COLON) + self.state = 721 + self.block() + self.state = 725 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 18: + self.state = 722 + self.match(Python3Parser.ELSE) + self.state = 723 + self.match(Python3Parser.COLON) + self.state = 724 + self.block() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Try_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(Python3Parser.TRY, 0) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COLON) + else: + return self.getToken(Python3Parser.COLON, i) + + def block(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.BlockContext) + else: + return self.getTypedRuleContext(Python3Parser.BlockContext, i) + + def FINALLY(self): + return self.getToken(Python3Parser.FINALLY, 0) + + def except_clause(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Except_clauseContext) + else: + return self.getTypedRuleContext(Python3Parser.Except_clauseContext, i) + + def ELSE(self): + return self.getToken(Python3Parser.ELSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_try_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTry_stmt"): + listener.enterTry_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTry_stmt"): + listener.exitTry_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTry_stmt"): + return visitor.visitTry_stmt(self) + else: + return visitor.visitChildren(self) + + def try_stmt(self): + + localctx = Python3Parser.Try_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_try_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 727 + self.match(Python3Parser.TRY) + self.state = 728 + self.match(Python3Parser.COLON) + self.state = 729 + self.block() + self.state = 751 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [19]: + self.state = 734 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 730 + self.except_clause() + self.state = 731 + self.match(Python3Parser.COLON) + self.state = 732 + self.block() + self.state = 736 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 19): + break + + self.state = 741 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 18: + self.state = 738 + self.match(Python3Parser.ELSE) + self.state = 739 + self.match(Python3Parser.COLON) + self.state = 740 + self.block() + + self.state = 746 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 21: + self.state = 743 + self.match(Python3Parser.FINALLY) + self.state = 744 + self.match(Python3Parser.COLON) + self.state = 745 + self.block() + + pass + elif token in [21]: + self.state = 748 + self.match(Python3Parser.FINALLY) + self.state = 749 + self.match(Python3Parser.COLON) + self.state = 750 + self.block() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class With_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def WITH(self): + return self.getToken(Python3Parser.WITH, 0) + + def with_item(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.With_itemContext) + else: + return self.getTypedRuleContext(Python3Parser.With_itemContext, i) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def block(self): + return self.getTypedRuleContext(Python3Parser.BlockContext, 0) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_with_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWith_stmt"): + listener.enterWith_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWith_stmt"): + listener.exitWith_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWith_stmt"): + return visitor.visitWith_stmt(self) + else: + return visitor.visitChildren(self) + + def with_stmt(self): + + localctx = Python3Parser.With_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_with_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 753 + self.match(Python3Parser.WITH) + self.state = 754 + self.with_item() + self.state = 759 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 59: + self.state = 755 + self.match(Python3Parser.COMMA) + self.state = 756 + self.with_item() + self.state = 761 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 762 + self.match(Python3Parser.COLON) + self.state = 763 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class With_itemContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def AS(self): + return self.getToken(Python3Parser.AS, 0) + + def expr(self): + return self.getTypedRuleContext(Python3Parser.ExprContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_with_item + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWith_item"): + listener.enterWith_item(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWith_item"): + listener.exitWith_item(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWith_item"): + return visitor.visitWith_item(self) + else: + return visitor.visitChildren(self) + + def with_item(self): + + localctx = Python3Parser.With_itemContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_with_item) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 765 + self.test() + self.state = 768 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 766 + self.match(Python3Parser.AS) + self.state = 767 + self.expr(0) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Except_clauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXCEPT(self): + return self.getToken(Python3Parser.EXCEPT, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def AS(self): + return self.getToken(Python3Parser.AS, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_except_clause + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExcept_clause"): + listener.enterExcept_clause(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExcept_clause"): + listener.exitExcept_clause(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExcept_clause"): + return visitor.visitExcept_clause(self) + else: + return visitor.visitChildren(self) + + def except_clause(self): + + localctx = Python3Parser.Except_clauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_except_clause) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 770 + self.match(Python3Parser.EXCEPT) + self.state = 776 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 771 + self.test() + self.state = 774 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 7: + self.state = 772 + self.match(Python3Parser.AS) + self.state = 773 + self.name() + + + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def simple_stmts(self): + return self.getTypedRuleContext(Python3Parser.Simple_stmtsContext, 0) + + def NEWLINE(self): + return self.getToken(Python3Parser.NEWLINE, 0) + + def INDENT(self): + return self.getToken(Python3Parser.INDENT, 0) + + def DEDENT(self): + return self.getToken(Python3Parser.DEDENT, 0) + + def stmt(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.StmtContext) + else: + return self.getTypedRuleContext(Python3Parser.StmtContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_block + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBlock"): + listener.enterBlock(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBlock"): + listener.exitBlock(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBlock"): + return visitor.visitBlock(self) + else: + return visitor.visitChildren(self) + + def block(self): + + localctx = Python3Parser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_block) + self._la = 0 # Token type + try: + self.state = 788 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 8, 10, 11, 14, 16, 20, 23, 24, 26, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 43, 45, 55, + 56, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 1) + self.state = 778 + self.simple_stmts() + pass + elif token in [44]: + self.enterOuterAlt(localctx, 2) + self.state = 779 + self.match(Python3Parser.NEWLINE) + self.state = 780 + self.match(Python3Parser.INDENT) + self.state = 782 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 781 + self.stmt() + self.state = 784 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 252254338105339672) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 4206977) != 0)): + break + + self.state = 786 + self.match(Python3Parser.DEDENT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Match_stmtContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def MATCH(self): + return self.getToken(Python3Parser.MATCH, 0) + + def subject_expr(self): + return self.getTypedRuleContext(Python3Parser.Subject_exprContext, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def NEWLINE(self): + return self.getToken(Python3Parser.NEWLINE, 0) + + def INDENT(self): + return self.getToken(Python3Parser.INDENT, 0) + + def DEDENT(self): + return self.getToken(Python3Parser.DEDENT, 0) + + def case_block(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Case_blockContext) + else: + return self.getTypedRuleContext(Python3Parser.Case_blockContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_match_stmt + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMatch_stmt"): + listener.enterMatch_stmt(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMatch_stmt"): + listener.exitMatch_stmt(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMatch_stmt"): + return visitor.visitMatch_stmt(self) + else: + return visitor.visitChildren(self) + + def match_stmt(self): + + localctx = Python3Parser.Match_stmtContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_match_stmt) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 790 + self.match(Python3Parser.MATCH) + self.state = 791 + self.subject_expr() + self.state = 792 + self.match(Python3Parser.COLON) + self.state = 793 + self.match(Python3Parser.NEWLINE) + self.state = 794 + self.match(Python3Parser.INDENT) + self.state = 796 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 795 + self.case_block() + self.state = 798 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 12): + break + + self.state = 800 + self.match(Python3Parser.DEDENT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Subject_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def star_named_expression(self): + return self.getTypedRuleContext(Python3Parser.Star_named_expressionContext, 0) + + def COMMA(self): + return self.getToken(Python3Parser.COMMA, 0) + + def star_named_expressions(self): + return self.getTypedRuleContext(Python3Parser.Star_named_expressionsContext, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_subject_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSubject_expr"): + listener.enterSubject_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSubject_expr"): + listener.exitSubject_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSubject_expr"): + return visitor.visitSubject_expr(self) + else: + return visitor.visitChildren(self) + + def subject_expr(self): + + localctx = Python3Parser.Subject_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_subject_expr) + self._la = 0 # Token type + try: + self.state = 808 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 100, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 802 + self.star_named_expression() + self.state = 803 + self.match(Python3Parser.COMMA) + self.state = 805 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 804 + self.star_named_expressions() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 807 + self.test() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Star_named_expressionsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def star_named_expression(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Star_named_expressionContext) + else: + return self.getTypedRuleContext(Python3Parser.Star_named_expressionContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_star_named_expressions + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStar_named_expressions"): + listener.enterStar_named_expressions(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStar_named_expressions"): + listener.exitStar_named_expressions(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStar_named_expressions"): + return visitor.visitStar_named_expressions(self) + else: + return visitor.visitChildren(self) + + def star_named_expressions(self): + + localctx = Python3Parser.Star_named_expressionsContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_star_named_expressions) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 810 + self.match(Python3Parser.COMMA) + self.state = 812 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 811 + self.star_named_expression() + self.state = 814 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 252238150243451928) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0)): + break + + self.state = 817 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 816 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Star_named_expressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def expr(self): + return self.getTypedRuleContext(Python3Parser.ExprContext, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_star_named_expression + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStar_named_expression"): + listener.enterStar_named_expression(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStar_named_expression"): + listener.exitStar_named_expression(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStar_named_expression"): + return visitor.visitStar_named_expression(self) + else: + return visitor.visitChildren(self) + + def star_named_expression(self): + + localctx = Python3Parser.Star_named_expressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_star_named_expression) + try: + self.state = 822 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.enterOuterAlt(localctx, 1) + self.state = 819 + self.match(Python3Parser.STAR) + self.state = 820 + self.expr(0) + pass + elif token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 2) + self.state = 821 + self.test() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Case_blockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CASE(self): + return self.getToken(Python3Parser.CASE, 0) + + def patterns(self): + return self.getTypedRuleContext(Python3Parser.PatternsContext, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def block(self): + return self.getTypedRuleContext(Python3Parser.BlockContext, 0) + + def guard(self): + return self.getTypedRuleContext(Python3Parser.GuardContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_case_block + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCase_block"): + listener.enterCase_block(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCase_block"): + listener.exitCase_block(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCase_block"): + return visitor.visitCase_block(self) + else: + return visitor.visitChildren(self) + + def case_block(self): + + localctx = Python3Parser.Case_blockContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_case_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 824 + self.match(Python3Parser.CASE) + self.state = 825 + self.patterns() + self.state = 827 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 25: + self.state = 826 + self.guard() + + self.state = 829 + self.match(Python3Parser.COLON) + self.state = 830 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class GuardContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Python3Parser.IF, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_guard + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterGuard"): + listener.enterGuard(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitGuard"): + listener.exitGuard(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitGuard"): + return visitor.visitGuard(self) + else: + return visitor.visitChildren(self) + + def guard(self): + + localctx = Python3Parser.GuardContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_guard) + try: + self.enterOuterAlt(localctx, 1) + self.state = 832 + self.match(Python3Parser.IF) + self.state = 833 + self.test() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PatternsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def open_sequence_pattern(self): + return self.getTypedRuleContext(Python3Parser.Open_sequence_patternContext, 0) + + def pattern(self): + return self.getTypedRuleContext(Python3Parser.PatternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_patterns + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPatterns"): + listener.enterPatterns(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPatterns"): + listener.exitPatterns(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPatterns"): + return visitor.visitPatterns(self) + else: + return visitor.visitChildren(self) + + def patterns(self): + + localctx = Python3Parser.PatternsContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_patterns) + try: + self.state = 837 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 105, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 835 + self.open_sequence_pattern() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 836 + self.pattern() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def as_pattern(self): + return self.getTypedRuleContext(Python3Parser.As_patternContext, 0) + + def or_pattern(self): + return self.getTypedRuleContext(Python3Parser.Or_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPattern"): + listener.enterPattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPattern"): + listener.exitPattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPattern"): + return visitor.visitPattern(self) + else: + return visitor.visitChildren(self) + + def pattern(self): + + localctx = Python3Parser.PatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_pattern) + try: + self.state = 841 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 106, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 839 + self.as_pattern() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 840 + self.or_pattern() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class As_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def or_pattern(self): + return self.getTypedRuleContext(Python3Parser.Or_patternContext, 0) + + def AS(self): + return self.getToken(Python3Parser.AS, 0) + + def pattern_capture_target(self): + return self.getTypedRuleContext(Python3Parser.Pattern_capture_targetContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_as_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAs_pattern"): + listener.enterAs_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAs_pattern"): + listener.exitAs_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAs_pattern"): + return visitor.visitAs_pattern(self) + else: + return visitor.visitChildren(self) + + def as_pattern(self): + + localctx = Python3Parser.As_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_as_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 843 + self.or_pattern() + self.state = 844 + self.match(Python3Parser.AS) + self.state = 845 + self.pattern_capture_target() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Or_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def closed_pattern(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Closed_patternContext) + else: + return self.getTypedRuleContext(Python3Parser.Closed_patternContext, i) + + def OR_OP(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.OR_OP) + else: + return self.getToken(Python3Parser.OR_OP, i) + + def getRuleIndex(self): + return Python3Parser.RULE_or_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOr_pattern"): + listener.enterOr_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOr_pattern"): + listener.exitOr_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOr_pattern"): + return visitor.visitOr_pattern(self) + else: + return visitor.visitChildren(self) + + def or_pattern(self): + + localctx = Python3Parser.Or_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_or_pattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 847 + self.closed_pattern() + self.state = 852 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 66: + self.state = 848 + self.match(Python3Parser.OR_OP) + self.state = 849 + self.closed_pattern() + self.state = 854 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Closed_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def literal_pattern(self): + return self.getTypedRuleContext(Python3Parser.Literal_patternContext, 0) + + def capture_pattern(self): + return self.getTypedRuleContext(Python3Parser.Capture_patternContext, 0) + + def wildcard_pattern(self): + return self.getTypedRuleContext(Python3Parser.Wildcard_patternContext, 0) + + def value_pattern(self): + return self.getTypedRuleContext(Python3Parser.Value_patternContext, 0) + + def group_pattern(self): + return self.getTypedRuleContext(Python3Parser.Group_patternContext, 0) + + def sequence_pattern(self): + return self.getTypedRuleContext(Python3Parser.Sequence_patternContext, 0) + + def mapping_pattern(self): + return self.getTypedRuleContext(Python3Parser.Mapping_patternContext, 0) + + def class_pattern(self): + return self.getTypedRuleContext(Python3Parser.Class_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_closed_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClosed_pattern"): + listener.enterClosed_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClosed_pattern"): + listener.exitClosed_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClosed_pattern"): + return visitor.visitClosed_pattern(self) + else: + return visitor.visitChildren(self) + + def closed_pattern(self): + + localctx = Python3Parser.Closed_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_closed_pattern) + try: + self.state = 863 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 108, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 855 + self.literal_pattern() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 856 + self.capture_pattern() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 857 + self.wildcard_pattern() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 858 + self.value_pattern() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 859 + self.group_pattern() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 860 + self.sequence_pattern() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 861 + self.mapping_pattern() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 862 + self.class_pattern() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Literal_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def signed_number(self): + return self.getTypedRuleContext(Python3Parser.Signed_numberContext, 0) + + def complex_number(self): + return self.getTypedRuleContext(Python3Parser.Complex_numberContext, 0) + + def strings(self): + return self.getTypedRuleContext(Python3Parser.StringsContext, 0) + + def NONE(self): + return self.getToken(Python3Parser.NONE, 0) + + def TRUE(self): + return self.getToken(Python3Parser.TRUE, 0) + + def FALSE(self): + return self.getToken(Python3Parser.FALSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_literal_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLiteral_pattern"): + listener.enterLiteral_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLiteral_pattern"): + listener.exitLiteral_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLiteral_pattern"): + return visitor.visitLiteral_pattern(self) + else: + return visitor.visitChildren(self) + + def literal_pattern(self): + + localctx = Python3Parser.Literal_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_literal_pattern) + try: + self.state = 873 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 109, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 865 + self.signed_number() + self.state = 866 + if not self.CannotBePlusMinus(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " self.CannotBePlusMinus() ") + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 868 + self.complex_number() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 869 + self.strings() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 870 + self.match(Python3Parser.NONE) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 871 + self.match(Python3Parser.TRUE) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 872 + self.match(Python3Parser.FALSE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Literal_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def signed_number(self): + return self.getTypedRuleContext(Python3Parser.Signed_numberContext, 0) + + def complex_number(self): + return self.getTypedRuleContext(Python3Parser.Complex_numberContext, 0) + + def strings(self): + return self.getTypedRuleContext(Python3Parser.StringsContext, 0) + + def NONE(self): + return self.getToken(Python3Parser.NONE, 0) + + def TRUE(self): + return self.getToken(Python3Parser.TRUE, 0) + + def FALSE(self): + return self.getToken(Python3Parser.FALSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_literal_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLiteral_expr"): + listener.enterLiteral_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLiteral_expr"): + listener.exitLiteral_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLiteral_expr"): + return visitor.visitLiteral_expr(self) + else: + return visitor.visitChildren(self) + + def literal_expr(self): + + localctx = Python3Parser.Literal_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_literal_expr) + try: + self.state = 883 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 110, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 875 + self.signed_number() + self.state = 876 + if not self.CannotBePlusMinus(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " self.CannotBePlusMinus() ") + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 878 + self.complex_number() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 879 + self.strings() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 880 + self.match(Python3Parser.NONE) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 881 + self.match(Python3Parser.TRUE) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 882 + self.match(Python3Parser.FALSE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Complex_numberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def signed_real_number(self): + return self.getTypedRuleContext(Python3Parser.Signed_real_numberContext, 0) + + def ADD(self): + return self.getToken(Python3Parser.ADD, 0) + + def imaginary_number(self): + return self.getTypedRuleContext(Python3Parser.Imaginary_numberContext, 0) + + def MINUS(self): + return self.getToken(Python3Parser.MINUS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_complex_number + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComplex_number"): + listener.enterComplex_number(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitComplex_number"): + listener.exitComplex_number(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComplex_number"): + return visitor.visitComplex_number(self) + else: + return visitor.visitChildren(self) + + def complex_number(self): + + localctx = Python3Parser.Complex_numberContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_complex_number) + try: + self.state = 893 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 111, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 885 + self.signed_real_number() + self.state = 886 + self.match(Python3Parser.ADD) + self.state = 887 + self.imaginary_number() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 889 + self.signed_real_number() + self.state = 890 + self.match(Python3Parser.MINUS) + self.state = 891 + self.imaginary_number() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Signed_numberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NUMBER(self): + return self.getToken(Python3Parser.NUMBER, 0) + + def MINUS(self): + return self.getToken(Python3Parser.MINUS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_signed_number + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSigned_number"): + listener.enterSigned_number(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSigned_number"): + listener.exitSigned_number(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSigned_number"): + return visitor.visitSigned_number(self) + else: + return visitor.visitChildren(self) + + def signed_number(self): + + localctx = Python3Parser.Signed_numberContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_signed_number) + try: + self.state = 898 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [4]: + self.enterOuterAlt(localctx, 1) + self.state = 895 + self.match(Python3Parser.NUMBER) + pass + elif token in [72]: + self.enterOuterAlt(localctx, 2) + self.state = 896 + self.match(Python3Parser.MINUS) + self.state = 897 + self.match(Python3Parser.NUMBER) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Signed_real_numberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def real_number(self): + return self.getTypedRuleContext(Python3Parser.Real_numberContext, 0) + + def MINUS(self): + return self.getToken(Python3Parser.MINUS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_signed_real_number + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSigned_real_number"): + listener.enterSigned_real_number(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSigned_real_number"): + listener.exitSigned_real_number(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSigned_real_number"): + return visitor.visitSigned_real_number(self) + else: + return visitor.visitChildren(self) + + def signed_real_number(self): + + localctx = Python3Parser.Signed_real_numberContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_signed_real_number) + try: + self.state = 903 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [4]: + self.enterOuterAlt(localctx, 1) + self.state = 900 + self.real_number() + pass + elif token in [72]: + self.enterOuterAlt(localctx, 2) + self.state = 901 + self.match(Python3Parser.MINUS) + self.state = 902 + self.real_number() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Real_numberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NUMBER(self): + return self.getToken(Python3Parser.NUMBER, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_real_number + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterReal_number"): + listener.enterReal_number(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitReal_number"): + listener.exitReal_number(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitReal_number"): + return visitor.visitReal_number(self) + else: + return visitor.visitChildren(self) + + def real_number(self): + + localctx = Python3Parser.Real_numberContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_real_number) + try: + self.enterOuterAlt(localctx, 1) + self.state = 905 + self.match(Python3Parser.NUMBER) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Imaginary_numberContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NUMBER(self): + return self.getToken(Python3Parser.NUMBER, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_imaginary_number + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterImaginary_number"): + listener.enterImaginary_number(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitImaginary_number"): + listener.exitImaginary_number(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitImaginary_number"): + return visitor.visitImaginary_number(self) + else: + return visitor.visitChildren(self) + + def imaginary_number(self): + + localctx = Python3Parser.Imaginary_numberContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_imaginary_number) + try: + self.enterOuterAlt(localctx, 1) + self.state = 907 + self.match(Python3Parser.NUMBER) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Capture_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def pattern_capture_target(self): + return self.getTypedRuleContext(Python3Parser.Pattern_capture_targetContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_capture_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterCapture_pattern"): + listener.enterCapture_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitCapture_pattern"): + listener.exitCapture_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitCapture_pattern"): + return visitor.visitCapture_pattern(self) + else: + return visitor.visitChildren(self) + + def capture_pattern(self): + + localctx = Python3Parser.Capture_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_capture_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 909 + self.pattern_capture_target() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Pattern_capture_targetContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_pattern_capture_target + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPattern_capture_target"): + listener.enterPattern_capture_target(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPattern_capture_target"): + listener.exitPattern_capture_target(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPattern_capture_target"): + return visitor.visitPattern_capture_target(self) + else: + return visitor.visitChildren(self) + + def pattern_capture_target(self): + + localctx = Python3Parser.Pattern_capture_targetContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_pattern_capture_target) + try: + self.enterOuterAlt(localctx, 1) + self.state = 911 + self.name() + self.state = 912 + if not self.CannotBeDotLpEq(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " self.CannotBeDotLpEq() ") + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Wildcard_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def UNDERSCORE(self): + return self.getToken(Python3Parser.UNDERSCORE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_wildcard_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterWildcard_pattern"): + listener.enterWildcard_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitWildcard_pattern"): + listener.exitWildcard_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitWildcard_pattern"): + return visitor.visitWildcard_pattern(self) + else: + return visitor.visitChildren(self) + + def wildcard_pattern(self): + + localctx = Python3Parser.Wildcard_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_wildcard_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 914 + self.match(Python3Parser.UNDERSCORE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Value_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def attr(self): + return self.getTypedRuleContext(Python3Parser.AttrContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_value_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterValue_pattern"): + listener.enterValue_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitValue_pattern"): + listener.exitValue_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitValue_pattern"): + return visitor.visitValue_pattern(self) + else: + return visitor.visitChildren(self) + + def value_pattern(self): + + localctx = Python3Parser.Value_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_value_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 916 + self.attr() + self.state = 917 + if not self.CannotBeDotLpEq(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " self.CannotBeDotLpEq() ") + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AttrContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.NameContext) + else: + return self.getTypedRuleContext(Python3Parser.NameContext, i) + + def DOT(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.DOT) + else: + return self.getToken(Python3Parser.DOT, i) + + def getRuleIndex(self): + return Python3Parser.RULE_attr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAttr"): + listener.enterAttr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAttr"): + listener.exitAttr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAttr"): + return visitor.visitAttr(self) + else: + return visitor.visitChildren(self) + + def attr(self): + + localctx = Python3Parser.AttrContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_attr) + try: + self.enterOuterAlt(localctx, 1) + self.state = 919 + self.name() + self.state = 922 + self._errHandler.sync(self) + _alt = 1 + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 920 + self.match(Python3Parser.DOT) + self.state = 921 + self.name() + + else: + raise NoViableAltException(self) + self.state = 924 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 114, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Name_or_attrContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def attr(self): + return self.getTypedRuleContext(Python3Parser.AttrContext, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_name_or_attr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterName_or_attr"): + listener.enterName_or_attr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitName_or_attr"): + listener.exitName_or_attr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitName_or_attr"): + return visitor.visitName_or_attr(self) + else: + return visitor.visitChildren(self) + + def name_or_attr(self): + + localctx = Python3Parser.Name_or_attrContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_name_or_attr) + try: + self.state = 928 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 115, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 926 + self.attr() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 927 + self.name() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Group_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def pattern(self): + return self.getTypedRuleContext(Python3Parser.PatternContext, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_group_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterGroup_pattern"): + listener.enterGroup_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitGroup_pattern"): + listener.exitGroup_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitGroup_pattern"): + return visitor.visitGroup_pattern(self) + else: + return visitor.visitChildren(self) + + def group_pattern(self): + + localctx = Python3Parser.Group_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_group_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 930 + self.match(Python3Parser.OPEN_PAREN) + self.state = 931 + self.pattern() + self.state = 932 + self.match(Python3Parser.CLOSE_PAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Sequence_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_BRACK(self): + return self.getToken(Python3Parser.OPEN_BRACK, 0) + + def CLOSE_BRACK(self): + return self.getToken(Python3Parser.CLOSE_BRACK, 0) + + def maybe_sequence_pattern(self): + return self.getTypedRuleContext(Python3Parser.Maybe_sequence_patternContext, 0) + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def open_sequence_pattern(self): + return self.getTypedRuleContext(Python3Parser.Open_sequence_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_sequence_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSequence_pattern"): + listener.enterSequence_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSequence_pattern"): + listener.exitSequence_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSequence_pattern"): + return visitor.visitSequence_pattern(self) + else: + return visitor.visitChildren(self) + + def sequence_pattern(self): + + localctx = Python3Parser.Sequence_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_sequence_pattern) + self._la = 0 # Token type + try: + self.state = 944 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [64]: + self.enterOuterAlt(localctx, 1) + self.state = 934 + self.match(Python3Parser.OPEN_BRACK) + self.state = 936 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 216209344097681432) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 8449) != 0): + self.state = 935 + self.maybe_sequence_pattern() + + self.state = 938 + self.match(Python3Parser.CLOSE_BRACK) + pass + elif token in [57]: + self.enterOuterAlt(localctx, 2) + self.state = 939 + self.match(Python3Parser.OPEN_PAREN) + self.state = 941 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 216209344097681432) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 8449) != 0): + self.state = 940 + self.open_sequence_pattern() + + self.state = 943 + self.match(Python3Parser.CLOSE_PAREN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Open_sequence_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def maybe_star_pattern(self): + return self.getTypedRuleContext(Python3Parser.Maybe_star_patternContext, 0) + + def COMMA(self): + return self.getToken(Python3Parser.COMMA, 0) + + def maybe_sequence_pattern(self): + return self.getTypedRuleContext(Python3Parser.Maybe_sequence_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_open_sequence_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOpen_sequence_pattern"): + listener.enterOpen_sequence_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOpen_sequence_pattern"): + listener.exitOpen_sequence_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOpen_sequence_pattern"): + return visitor.visitOpen_sequence_pattern(self) + else: + return visitor.visitChildren(self) + + def open_sequence_pattern(self): + + localctx = Python3Parser.Open_sequence_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_open_sequence_pattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 946 + self.maybe_star_pattern() + self.state = 947 + self.match(Python3Parser.COMMA) + self.state = 949 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 216209344097681432) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 8449) != 0): + self.state = 948 + self.maybe_sequence_pattern() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Maybe_sequence_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def maybe_star_pattern(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Maybe_star_patternContext) + else: + return self.getTypedRuleContext(Python3Parser.Maybe_star_patternContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_maybe_sequence_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMaybe_sequence_pattern"): + listener.enterMaybe_sequence_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMaybe_sequence_pattern"): + listener.exitMaybe_sequence_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMaybe_sequence_pattern"): + return visitor.visitMaybe_sequence_pattern(self) + else: + return visitor.visitChildren(self) + + def maybe_sequence_pattern(self): + + localctx = Python3Parser.Maybe_sequence_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_maybe_sequence_pattern) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 951 + self.maybe_star_pattern() + self.state = 956 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 120, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 952 + self.match(Python3Parser.COMMA) + self.state = 953 + self.maybe_star_pattern() + self.state = 958 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 120, self._ctx) + + self.state = 960 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 959 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Maybe_star_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def star_pattern(self): + return self.getTypedRuleContext(Python3Parser.Star_patternContext, 0) + + def pattern(self): + return self.getTypedRuleContext(Python3Parser.PatternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_maybe_star_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMaybe_star_pattern"): + listener.enterMaybe_star_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMaybe_star_pattern"): + listener.exitMaybe_star_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMaybe_star_pattern"): + return visitor.visitMaybe_star_pattern(self) + else: + return visitor.visitChildren(self) + + def maybe_star_pattern(self): + + localctx = Python3Parser.Maybe_star_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_maybe_star_pattern) + try: + self.state = 964 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [56]: + self.enterOuterAlt(localctx, 1) + self.state = 962 + self.star_pattern() + pass + elif token in [3, 4, 20, 30, 31, 38, 40, 45, 57, 64, 72, 77]: + self.enterOuterAlt(localctx, 2) + self.state = 963 + self.pattern() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Star_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def pattern_capture_target(self): + return self.getTypedRuleContext(Python3Parser.Pattern_capture_targetContext, 0) + + def wildcard_pattern(self): + return self.getTypedRuleContext(Python3Parser.Wildcard_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_star_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStar_pattern"): + listener.enterStar_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStar_pattern"): + listener.exitStar_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStar_pattern"): + return visitor.visitStar_pattern(self) + else: + return visitor.visitChildren(self) + + def star_pattern(self): + + localctx = Python3Parser.Star_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_star_pattern) + try: + self.state = 970 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 123, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 966 + self.match(Python3Parser.STAR) + self.state = 967 + self.pattern_capture_target() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 968 + self.match(Python3Parser.STAR) + self.state = 969 + self.wildcard_pattern() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Mapping_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_BRACE(self): + return self.getToken(Python3Parser.OPEN_BRACE, 0) + + def CLOSE_BRACE(self): + return self.getToken(Python3Parser.CLOSE_BRACE, 0) + + def double_star_pattern(self): + return self.getTypedRuleContext(Python3Parser.Double_star_patternContext, 0) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def items_pattern(self): + return self.getTypedRuleContext(Python3Parser.Items_patternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_mapping_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterMapping_pattern"): + listener.enterMapping_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitMapping_pattern"): + listener.exitMapping_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitMapping_pattern"): + return visitor.visitMapping_pattern(self) + else: + return visitor.visitChildren(self) + + def mapping_pattern(self): + + localctx = Python3Parser.Mapping_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_mapping_pattern) + self._la = 0 # Token type + try: + self.state = 997 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 127, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 972 + self.match(Python3Parser.OPEN_BRACE) + self.state = 973 + self.match(Python3Parser.CLOSE_BRACE) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 974 + self.match(Python3Parser.OPEN_BRACE) + self.state = 975 + self.double_star_pattern() + self.state = 977 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 976 + self.match(Python3Parser.COMMA) + + self.state = 979 + self.match(Python3Parser.CLOSE_BRACE) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 981 + self.match(Python3Parser.OPEN_BRACE) + self.state = 982 + self.items_pattern() + self.state = 983 + self.match(Python3Parser.COMMA) + self.state = 984 + self.double_star_pattern() + self.state = 986 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 985 + self.match(Python3Parser.COMMA) + + self.state = 988 + self.match(Python3Parser.CLOSE_BRACE) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 990 + self.match(Python3Parser.OPEN_BRACE) + self.state = 991 + self.items_pattern() + self.state = 993 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 992 + self.match(Python3Parser.COMMA) + + self.state = 995 + self.match(Python3Parser.CLOSE_BRACE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Items_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def key_value_pattern(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Key_value_patternContext) + else: + return self.getTypedRuleContext(Python3Parser.Key_value_patternContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_items_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterItems_pattern"): + listener.enterItems_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitItems_pattern"): + listener.exitItems_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitItems_pattern"): + return visitor.visitItems_pattern(self) + else: + return visitor.visitChildren(self) + + def items_pattern(self): + + localctx = Python3Parser.Items_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_items_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 999 + self.key_value_pattern() + self.state = 1004 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 128, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1000 + self.match(Python3Parser.COMMA) + self.state = 1001 + self.key_value_pattern() + self.state = 1006 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 128, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Key_value_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def pattern(self): + return self.getTypedRuleContext(Python3Parser.PatternContext, 0) + + def literal_expr(self): + return self.getTypedRuleContext(Python3Parser.Literal_exprContext, 0) + + def attr(self): + return self.getTypedRuleContext(Python3Parser.AttrContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_key_value_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterKey_value_pattern"): + listener.enterKey_value_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitKey_value_pattern"): + listener.exitKey_value_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitKey_value_pattern"): + return visitor.visitKey_value_pattern(self) + else: + return visitor.visitChildren(self) + + def key_value_pattern(self): + + localctx = Python3Parser.Key_value_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_key_value_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1009 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 20, 31, 38, 72]: + self.state = 1007 + self.literal_expr() + pass + elif token in [30, 40, 45]: + self.state = 1008 + self.attr() + pass + else: + raise NoViableAltException(self) + + self.state = 1011 + self.match(Python3Parser.COLON) + self.state = 1012 + self.pattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Double_star_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def POWER(self): + return self.getToken(Python3Parser.POWER, 0) + + def pattern_capture_target(self): + return self.getTypedRuleContext(Python3Parser.Pattern_capture_targetContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_double_star_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDouble_star_pattern"): + listener.enterDouble_star_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDouble_star_pattern"): + listener.exitDouble_star_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDouble_star_pattern"): + return visitor.visitDouble_star_pattern(self) + else: + return visitor.visitChildren(self) + + def double_star_pattern(self): + + localctx = Python3Parser.Double_star_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_double_star_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1014 + self.match(Python3Parser.POWER) + self.state = 1015 + self.pattern_capture_target() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Class_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name_or_attr(self): + return self.getTypedRuleContext(Python3Parser.Name_or_attrContext, 0) + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def positional_patterns(self): + return self.getTypedRuleContext(Python3Parser.Positional_patternsContext, 0) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def keyword_patterns(self): + return self.getTypedRuleContext(Python3Parser.Keyword_patternsContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_class_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClass_pattern"): + listener.enterClass_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClass_pattern"): + listener.exitClass_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClass_pattern"): + return visitor.visitClass_pattern(self) + else: + return visitor.visitChildren(self) + + def class_pattern(self): + + localctx = Python3Parser.Class_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_class_pattern) + self._la = 0 # Token type + try: + self.state = 1047 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 133, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1017 + self.name_or_attr() + self.state = 1018 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1019 + self.match(Python3Parser.CLOSE_PAREN) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1021 + self.name_or_attr() + self.state = 1022 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1023 + self.positional_patterns() + self.state = 1025 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1024 + self.match(Python3Parser.COMMA) + + self.state = 1027 + self.match(Python3Parser.CLOSE_PAREN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1029 + self.name_or_attr() + self.state = 1030 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1031 + self.keyword_patterns() + self.state = 1033 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1032 + self.match(Python3Parser.COMMA) + + self.state = 1035 + self.match(Python3Parser.CLOSE_PAREN) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1037 + self.name_or_attr() + self.state = 1038 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1039 + self.positional_patterns() + self.state = 1040 + self.match(Python3Parser.COMMA) + self.state = 1041 + self.keyword_patterns() + self.state = 1043 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1042 + self.match(Python3Parser.COMMA) + + self.state = 1045 + self.match(Python3Parser.CLOSE_PAREN) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Positional_patternsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def pattern(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.PatternContext) + else: + return self.getTypedRuleContext(Python3Parser.PatternContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_positional_patterns + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPositional_patterns"): + listener.enterPositional_patterns(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPositional_patterns"): + listener.exitPositional_patterns(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPositional_patterns"): + return visitor.visitPositional_patterns(self) + else: + return visitor.visitChildren(self) + + def positional_patterns(self): + + localctx = Python3Parser.Positional_patternsContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_positional_patterns) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1049 + self.pattern() + self.state = 1054 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 134, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1050 + self.match(Python3Parser.COMMA) + self.state = 1051 + self.pattern() + self.state = 1056 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 134, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Keyword_patternsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def keyword_pattern(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Keyword_patternContext) + else: + return self.getTypedRuleContext(Python3Parser.Keyword_patternContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_keyword_patterns + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterKeyword_patterns"): + listener.enterKeyword_patterns(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitKeyword_patterns"): + listener.exitKeyword_patterns(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitKeyword_patterns"): + return visitor.visitKeyword_patterns(self) + else: + return visitor.visitChildren(self) + + def keyword_patterns(self): + + localctx = Python3Parser.Keyword_patternsContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_keyword_patterns) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1057 + self.keyword_pattern() + self.state = 1062 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 135, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1058 + self.match(Python3Parser.COMMA) + self.state = 1059 + self.keyword_pattern() + self.state = 1064 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 135, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Keyword_patternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def ASSIGN(self): + return self.getToken(Python3Parser.ASSIGN, 0) + + def pattern(self): + return self.getTypedRuleContext(Python3Parser.PatternContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_keyword_pattern + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterKeyword_pattern"): + listener.enterKeyword_pattern(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitKeyword_pattern"): + listener.exitKeyword_pattern(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitKeyword_pattern"): + return visitor.visitKeyword_pattern(self) + else: + return visitor.visitChildren(self) + + def keyword_pattern(self): + + localctx = Python3Parser.Keyword_patternContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_keyword_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1065 + self.name() + self.state = 1066 + self.match(Python3Parser.ASSIGN) + self.state = 1067 + self.pattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TestContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def or_test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Or_testContext) + else: + return self.getTypedRuleContext(Python3Parser.Or_testContext, i) + + def IF(self): + return self.getToken(Python3Parser.IF, 0) + + def ELSE(self): + return self.getToken(Python3Parser.ELSE, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def lambdef(self): + return self.getTypedRuleContext(Python3Parser.LambdefContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_test + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTest"): + listener.enterTest(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTest"): + listener.exitTest(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTest"): + return visitor.visitTest(self) + else: + return visitor.visitChildren(self) + + def test(self): + + localctx = Python3Parser.TestContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_test) + self._la = 0 # Token type + try: + self.state = 1078 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 1) + self.state = 1069 + self.or_test() + self.state = 1075 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 25: + self.state = 1070 + self.match(Python3Parser.IF) + self.state = 1071 + self.or_test() + self.state = 1072 + self.match(Python3Parser.ELSE) + self.state = 1073 + self.test() + + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 1077 + self.lambdef() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Test_nocondContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def or_test(self): + return self.getTypedRuleContext(Python3Parser.Or_testContext, 0) + + def lambdef_nocond(self): + return self.getTypedRuleContext(Python3Parser.Lambdef_nocondContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_test_nocond + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTest_nocond"): + listener.enterTest_nocond(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTest_nocond"): + listener.exitTest_nocond(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTest_nocond"): + return visitor.visitTest_nocond(self) + else: + return visitor.visitChildren(self) + + def test_nocond(self): + + localctx = Python3Parser.Test_nocondContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_test_nocond) + try: + self.state = 1082 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 1) + self.state = 1080 + self.or_test() + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 1081 + self.lambdef_nocond() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class LambdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LAMBDA(self): + return self.getToken(Python3Parser.LAMBDA, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def varargslist(self): + return self.getTypedRuleContext(Python3Parser.VarargslistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_lambdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdef"): + listener.enterLambdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdef"): + listener.exitLambdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdef"): + return visitor.visitLambdef(self) + else: + return visitor.visitChildren(self) + + def lambdef(self): + + localctx = Python3Parser.LambdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_lambdef) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1084 + self.match(Python3Parser.LAMBDA) + self.state = 1086 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4683779897422774272) != 0): + self.state = 1085 + self.varargslist() + + self.state = 1088 + self.match(Python3Parser.COLON) + self.state = 1089 + self.test() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Lambdef_nocondContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LAMBDA(self): + return self.getToken(Python3Parser.LAMBDA, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def test_nocond(self): + return self.getTypedRuleContext(Python3Parser.Test_nocondContext, 0) + + def varargslist(self): + return self.getTypedRuleContext(Python3Parser.VarargslistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_lambdef_nocond + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterLambdef_nocond"): + listener.enterLambdef_nocond(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitLambdef_nocond"): + listener.exitLambdef_nocond(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitLambdef_nocond"): + return visitor.visitLambdef_nocond(self) + else: + return visitor.visitChildren(self) + + def lambdef_nocond(self): + + localctx = Python3Parser.Lambdef_nocondContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_lambdef_nocond) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1091 + self.match(Python3Parser.LAMBDA) + self.state = 1093 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4683779897422774272) != 0): + self.state = 1092 + self.varargslist() + + self.state = 1095 + self.match(Python3Parser.COLON) + self.state = 1096 + self.test_nocond() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Or_testContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def and_test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.And_testContext) + else: + return self.getTypedRuleContext(Python3Parser.And_testContext, i) + + def OR(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.OR) + else: + return self.getToken(Python3Parser.OR, i) + + def getRuleIndex(self): + return Python3Parser.RULE_or_test + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOr_test"): + listener.enterOr_test(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOr_test"): + listener.exitOr_test(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOr_test"): + return visitor.visitOr_test(self) + else: + return visitor.visitChildren(self) + + def or_test(self): + + localctx = Python3Parser.Or_testContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_or_test) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1098 + self.and_test() + self.state = 1103 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 34: + self.state = 1099 + self.match(Python3Parser.OR) + self.state = 1100 + self.and_test() + self.state = 1105 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class And_testContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def not_test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Not_testContext) + else: + return self.getTypedRuleContext(Python3Parser.Not_testContext, i) + + def AND(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.AND) + else: + return self.getToken(Python3Parser.AND, i) + + def getRuleIndex(self): + return Python3Parser.RULE_and_test + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAnd_test"): + listener.enterAnd_test(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAnd_test"): + listener.exitAnd_test(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAnd_test"): + return visitor.visitAnd_test(self) + else: + return visitor.visitChildren(self) + + def and_test(self): + + localctx = Python3Parser.And_testContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_and_test) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1106 + self.not_test() + self.state = 1111 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 6: + self.state = 1107 + self.match(Python3Parser.AND) + self.state = 1108 + self.not_test() + self.state = 1113 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Not_testContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NOT(self): + return self.getToken(Python3Parser.NOT, 0) + + def not_test(self): + return self.getTypedRuleContext(Python3Parser.Not_testContext, 0) + + def comparison(self): + return self.getTypedRuleContext(Python3Parser.ComparisonContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_not_test + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNot_test"): + listener.enterNot_test(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNot_test"): + listener.exitNot_test(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNot_test"): + return visitor.visitNot_test(self) + else: + return visitor.visitChildren(self) + + def not_test(self): + + localctx = Python3Parser.Not_testContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_not_test) + try: + self.state = 1117 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [33]: + self.enterOuterAlt(localctx, 1) + self.state = 1114 + self.match(Python3Parser.NOT) + self.state = 1115 + self.not_test() + pass + elif token in [3, 4, 10, 20, 30, 31, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 2) + self.state = 1116 + self.comparison() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ComparisonContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.ExprContext) + else: + return self.getTypedRuleContext(Python3Parser.ExprContext, i) + + def comp_op(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Comp_opContext) + else: + return self.getTypedRuleContext(Python3Parser.Comp_opContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_comparison + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComparison"): + listener.enterComparison(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitComparison"): + listener.exitComparison(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComparison"): + return visitor.visitComparison(self) + else: + return visitor.visitChildren(self) + + def comparison(self): + + localctx = Python3Parser.ComparisonContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_comparison) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1119 + self.expr(0) + self.state = 1125 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 144, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1120 + self.comp_op() + self.state = 1121 + self.expr(0) + self.state = 1127 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 144, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Comp_opContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def LESS_THAN(self): + return self.getToken(Python3Parser.LESS_THAN, 0) + + def GREATER_THAN(self): + return self.getToken(Python3Parser.GREATER_THAN, 0) + + def EQUALS(self): + return self.getToken(Python3Parser.EQUALS, 0) + + def GT_EQ(self): + return self.getToken(Python3Parser.GT_EQ, 0) + + def LT_EQ(self): + return self.getToken(Python3Parser.LT_EQ, 0) + + def NOT_EQ_1(self): + return self.getToken(Python3Parser.NOT_EQ_1, 0) + + def NOT_EQ_2(self): + return self.getToken(Python3Parser.NOT_EQ_2, 0) + + def IN(self): + return self.getToken(Python3Parser.IN, 0) + + def NOT(self): + return self.getToken(Python3Parser.NOT, 0) + + def IS(self): + return self.getToken(Python3Parser.IS, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_comp_op + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComp_op"): + listener.enterComp_op(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitComp_op"): + listener.exitComp_op(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComp_op"): + return visitor.visitComp_op(self) + else: + return visitor.visitChildren(self) + + def comp_op(self): + + localctx = Python3Parser.Comp_opContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_comp_op) + try: + self.state = 1141 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 145, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1128 + self.match(Python3Parser.LESS_THAN) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1129 + self.match(Python3Parser.GREATER_THAN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1130 + self.match(Python3Parser.EQUALS) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1131 + self.match(Python3Parser.GT_EQ) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1132 + self.match(Python3Parser.LT_EQ) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1133 + self.match(Python3Parser.NOT_EQ_1) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1134 + self.match(Python3Parser.NOT_EQ_2) + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 1135 + self.match(Python3Parser.IN) + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 1136 + self.match(Python3Parser.NOT) + self.state = 1137 + self.match(Python3Parser.IN) + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 1138 + self.match(Python3Parser.IS) + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 1139 + self.match(Python3Parser.IS) + self.state = 1140 + self.match(Python3Parser.NOT) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Star_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def expr(self): + return self.getTypedRuleContext(Python3Parser.ExprContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_star_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStar_expr"): + listener.enterStar_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStar_expr"): + listener.exitStar_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStar_expr"): + return visitor.visitStar_expr(self) + else: + return visitor.visitChildren(self) + + def star_expr(self): + + localctx = Python3Parser.Star_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_star_expr) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1143 + self.match(Python3Parser.STAR) + self.state = 1144 + self.expr(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def atom_expr(self): + return self.getTypedRuleContext(Python3Parser.Atom_exprContext, 0) + + def expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.ExprContext) + else: + return self.getTypedRuleContext(Python3Parser.ExprContext, i) + + def ADD(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.ADD) + else: + return self.getToken(Python3Parser.ADD, i) + + def MINUS(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.MINUS) + else: + return self.getToken(Python3Parser.MINUS, i) + + def NOT_OP(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.NOT_OP) + else: + return self.getToken(Python3Parser.NOT_OP, i) + + def POWER(self): + return self.getToken(Python3Parser.POWER, 0) + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def AT(self): + return self.getToken(Python3Parser.AT, 0) + + def DIV(self): + return self.getToken(Python3Parser.DIV, 0) + + def MOD(self): + return self.getToken(Python3Parser.MOD, 0) + + def IDIV(self): + return self.getToken(Python3Parser.IDIV, 0) + + def LEFT_SHIFT(self): + return self.getToken(Python3Parser.LEFT_SHIFT, 0) + + def RIGHT_SHIFT(self): + return self.getToken(Python3Parser.RIGHT_SHIFT, 0) + + def AND_OP(self): + return self.getToken(Python3Parser.AND_OP, 0) + + def XOR(self): + return self.getToken(Python3Parser.XOR, 0) + + def OR_OP(self): + return self.getToken(Python3Parser.OR_OP, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExpr"): + listener.enterExpr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExpr"): + listener.exitExpr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExpr"): + return visitor.visitExpr(self) + else: + return visitor.visitChildren(self) + + def expr(self, _p: int = 0): + _parentctx = self._ctx + _parentState = self.state + localctx = Python3Parser.ExprContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 194 + self.enterRecursionRule(localctx, 194, self.RULE_expr, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1154 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 30, 31, 38, 40, 45, 55, 57, 64, 77]: + self.state = 1147 + self.atom_expr() + pass + elif token in [71, 72, 76]: + self.state = 1149 + self._errHandler.sync(self) + _alt = 1 + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1148 + _la = self._input.LA(1) + if not (((((_la - 71)) & ~0x3f) == 0 and ((1 << (_la - 71)) & 35) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + + else: + raise NoViableAltException(self) + self.state = 1151 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 146, self._ctx) + + self.state = 1153 + self.expr(7) + pass + else: + raise NoViableAltException(self) + + self._ctx.stop = self._input.LT(-1) + self.state = 1179 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 149, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 1177 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 148, self._ctx) + if la_ == 1: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1156 + if not self.precpred(self._ctx, 8): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 1157 + self.match(Python3Parser.POWER) + self.state = 1158 + self.expr(9) + pass + + elif la_ == 2: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1159 + if not self.precpred(self._ctx, 6): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 1160 + _la = self._input.LA(1) + if not (((((_la - 56)) & ~0x3f) == 0 and ((1 << (_la - 56)) & 1074659329) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1161 + self.expr(7) + pass + + elif la_ == 3: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1162 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 1163 + _la = self._input.LA(1) + if not (_la == 71 or _la == 72): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1164 + self.expr(6) + pass + + elif la_ == 4: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1165 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 1166 + _la = self._input.LA(1) + if not (_la == 69 or _la == 70): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1167 + self.expr(5) + pass + + elif la_ == 5: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1168 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 1169 + self.match(Python3Parser.AND_OP) + self.state = 1170 + self.expr(4) + pass + + elif la_ == 6: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1171 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 1172 + self.match(Python3Parser.XOR) + self.state = 1173 + self.expr(3) + pass + + elif la_ == 7: + localctx = Python3Parser.ExprContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) + self.state = 1174 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 1175 + self.match(Python3Parser.OR_OP) + self.state = 1176 + self.expr(2) + pass + + self.state = 1181 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 149, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + class Atom_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def atom(self): + return self.getTypedRuleContext(Python3Parser.AtomContext, 0) + + def AWAIT(self): + return self.getToken(Python3Parser.AWAIT, 0) + + def trailer(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TrailerContext) + else: + return self.getTypedRuleContext(Python3Parser.TrailerContext, i) + + def getRuleIndex(self): + return Python3Parser.RULE_atom_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAtom_expr"): + listener.enterAtom_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAtom_expr"): + listener.exitAtom_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAtom_expr"): + return visitor.visitAtom_expr(self) + else: + return visitor.visitChildren(self) + + def atom_expr(self): + + localctx = Python3Parser.Atom_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_atom_expr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1183 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 10: + self.state = 1182 + self.match(Python3Parser.AWAIT) + + self.state = 1185 + self.atom() + self.state = 1189 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 151, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1186 + self.trailer() + self.state = 1191 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 151, self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class AtomContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def yield_expr(self): + return self.getTypedRuleContext(Python3Parser.Yield_exprContext, 0) + + def testlist_comp(self): + return self.getTypedRuleContext(Python3Parser.Testlist_compContext, 0) + + def OPEN_BRACK(self): + return self.getToken(Python3Parser.OPEN_BRACK, 0) + + def CLOSE_BRACK(self): + return self.getToken(Python3Parser.CLOSE_BRACK, 0) + + def OPEN_BRACE(self): + return self.getToken(Python3Parser.OPEN_BRACE, 0) + + def CLOSE_BRACE(self): + return self.getToken(Python3Parser.CLOSE_BRACE, 0) + + def dictorsetmaker(self): + return self.getTypedRuleContext(Python3Parser.DictorsetmakerContext, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def NUMBER(self): + return self.getToken(Python3Parser.NUMBER, 0) + + def STRING(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.STRING) + else: + return self.getToken(Python3Parser.STRING, i) + + def ELLIPSIS(self): + return self.getToken(Python3Parser.ELLIPSIS, 0) + + def NONE(self): + return self.getToken(Python3Parser.NONE, 0) + + def TRUE(self): + return self.getToken(Python3Parser.TRUE, 0) + + def FALSE(self): + return self.getToken(Python3Parser.FALSE, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_atom + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterAtom"): + listener.enterAtom(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitAtom"): + listener.exitAtom(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitAtom"): + return visitor.visitAtom(self) + else: + return visitor.visitChildren(self) + + def atom(self): + + localctx = Python3Parser.AtomContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_atom) + self._la = 0 # Token type + try: + self.state = 1219 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [57]: + self.enterOuterAlt(localctx, 1) + self.state = 1192 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1195 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [43]: + self.state = 1193 + self.yield_expr() + pass + elif token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 56, 57, 64, 71, 72, 76, 77]: + self.state = 1194 + self.testlist_comp() + pass + elif token in [58]: + pass + else: + pass + self.state = 1197 + self.match(Python3Parser.CLOSE_PAREN) + pass + elif token in [64]: + self.enterOuterAlt(localctx, 2) + self.state = 1198 + self.match(Python3Parser.OPEN_BRACK) + self.state = 1200 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 252238150243451928) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1199 + self.testlist_comp() + + self.state = 1202 + self.match(Python3Parser.CLOSE_BRACK) + pass + elif token in [77]: + self.enterOuterAlt(localctx, 3) + self.state = 1203 + self.match(Python3Parser.OPEN_BRACE) + self.state = 1205 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4863924168670839832) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1204 + self.dictorsetmaker() + + self.state = 1207 + self.match(Python3Parser.CLOSE_BRACE) + pass + elif token in [30, 40, 45]: + self.enterOuterAlt(localctx, 4) + self.state = 1208 + self.name() + pass + elif token in [4]: + self.enterOuterAlt(localctx, 5) + self.state = 1209 + self.match(Python3Parser.NUMBER) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 6) + self.state = 1211 + self._errHandler.sync(self) + _alt = 1 + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1210 + self.match(Python3Parser.STRING) + + else: + raise NoViableAltException(self) + self.state = 1213 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 155, self._ctx) + + pass + elif token in [55]: + self.enterOuterAlt(localctx, 7) + self.state = 1215 + self.match(Python3Parser.ELLIPSIS) + pass + elif token in [31]: + self.enterOuterAlt(localctx, 8) + self.state = 1216 + self.match(Python3Parser.NONE) + pass + elif token in [38]: + self.enterOuterAlt(localctx, 9) + self.state = 1217 + self.match(Python3Parser.TRUE) + pass + elif token in [20]: + self.enterOuterAlt(localctx, 10) + self.state = 1218 + self.match(Python3Parser.FALSE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def NAME(self): + return self.getToken(Python3Parser.NAME, 0) + + def UNDERSCORE(self): + return self.getToken(Python3Parser.UNDERSCORE, 0) + + def MATCH(self): + return self.getToken(Python3Parser.MATCH, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterName"): + listener.enterName(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitName"): + listener.exitName(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitName"): + return visitor.visitName(self) + else: + return visitor.visitChildren(self) + + def name(self): + + localctx = Python3Parser.NameContext(self, self._ctx, self.state) + self.enterRule(localctx, 200, self.RULE_name) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1221 + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 36284957458432) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Testlist_compContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def star_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Star_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Star_exprContext, i) + + def comp_for(self): + return self.getTypedRuleContext(Python3Parser.Comp_forContext, 0) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_testlist_comp + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestlist_comp"): + listener.enterTestlist_comp(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestlist_comp"): + listener.exitTestlist_comp(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestlist_comp"): + return visitor.visitTestlist_comp(self) + else: + return visitor.visitChildren(self) + + def testlist_comp(self): + + localctx = Python3Parser.Testlist_compContext(self, self._ctx, self.state) + self.enterRule(localctx, 202, self.RULE_testlist_comp) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1225 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1223 + self.test() + pass + elif token in [56]: + self.state = 1224 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1241 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [9, 22]: + self.state = 1227 + self.comp_for() + pass + elif token in [58, 59, 65]: + self.state = 1235 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 159, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1228 + self.match(Python3Parser.COMMA) + self.state = 1231 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1229 + self.test() + pass + elif token in [56]: + self.state = 1230 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1237 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 159, self._ctx) + + self.state = 1239 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1238 + self.match(Python3Parser.COMMA) + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TrailerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def arglist(self): + return self.getTypedRuleContext(Python3Parser.ArglistContext, 0) + + def OPEN_BRACK(self): + return self.getToken(Python3Parser.OPEN_BRACK, 0) + + def subscriptlist(self): + return self.getTypedRuleContext(Python3Parser.SubscriptlistContext, 0) + + def CLOSE_BRACK(self): + return self.getToken(Python3Parser.CLOSE_BRACK, 0) + + def DOT(self): + return self.getToken(Python3Parser.DOT, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_trailer + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTrailer"): + listener.enterTrailer(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTrailer"): + listener.exitTrailer(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTrailer"): + return visitor.visitTrailer(self) + else: + return visitor.visitChildren(self) + + def trailer(self): + + localctx = Python3Parser.TrailerContext(self, self._ctx, self.state) + self.enterRule(localctx, 204, self.RULE_trailer) + self._la = 0 # Token type + try: + self.state = 1254 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [57]: + self.enterOuterAlt(localctx, 1) + self.state = 1243 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1245 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4863924168670839832) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1244 + self.arglist() + + self.state = 1247 + self.match(Python3Parser.CLOSE_PAREN) + pass + elif token in [64]: + self.enterOuterAlt(localctx, 2) + self.state = 1248 + self.match(Python3Parser.OPEN_BRACK) + self.state = 1249 + self.subscriptlist() + self.state = 1250 + self.match(Python3Parser.CLOSE_BRACK) + pass + elif token in [54]: + self.enterOuterAlt(localctx, 3) + self.state = 1252 + self.match(Python3Parser.DOT) + self.state = 1253 + self.name() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SubscriptlistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def subscript_(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Subscript_Context) + else: + return self.getTypedRuleContext(Python3Parser.Subscript_Context, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_subscriptlist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSubscriptlist"): + listener.enterSubscriptlist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSubscriptlist"): + listener.exitSubscriptlist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSubscriptlist"): + return visitor.visitSubscriptlist(self) + else: + return visitor.visitChildren(self) + + def subscriptlist(self): + + localctx = Python3Parser.SubscriptlistContext(self, self._ctx, self.state) + self.enterRule(localctx, 206, self.RULE_subscriptlist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1256 + self.subscript_() + self.state = 1261 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 164, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1257 + self.match(Python3Parser.COMMA) + self.state = 1258 + self.subscript_() + self.state = 1263 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 164, self._ctx) + + self.state = 1265 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1264 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Subscript_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def sliceop(self): + return self.getTypedRuleContext(Python3Parser.SliceopContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_subscript_ + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSubscript_"): + listener.enterSubscript_(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSubscript_"): + listener.exitSubscript_(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSubscript_"): + return visitor.visitSubscript_(self) + else: + return visitor.visitChildren(self) + + def subscript_(self): + + localctx = Python3Parser.Subscript_Context(self, self._ctx, self.state) + self.enterRule(localctx, 208, self.RULE_subscript_) + self._la = 0 # Token type + try: + self.state = 1278 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 169, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1267 + self.test() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1269 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1268 + self.test() + + self.state = 1271 + self.match(Python3Parser.COLON) + self.state = 1273 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1272 + self.test() + + self.state = 1276 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 60: + self.state = 1275 + self.sliceop() + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SliceopContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_sliceop + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSliceop"): + listener.enterSliceop(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSliceop"): + listener.exitSliceop(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSliceop"): + return visitor.visitSliceop(self) + else: + return visitor.visitChildren(self) + + def sliceop(self): + + localctx = Python3Parser.SliceopContext(self, self._ctx, self.state) + self.enterRule(localctx, 210, self.RULE_sliceop) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1280 + self.match(Python3Parser.COLON) + self.state = 1282 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556205523992) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1281 + self.test() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ExprlistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.ExprContext) + else: + return self.getTypedRuleContext(Python3Parser.ExprContext, i) + + def star_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Star_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Star_exprContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_exprlist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterExprlist"): + listener.enterExprlist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitExprlist"): + listener.exitExprlist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitExprlist"): + return visitor.visitExprlist(self) + else: + return visitor.visitChildren(self) + + def exprlist(self): + + localctx = Python3Parser.ExprlistContext(self, self._ctx, self.state) + self.enterRule(localctx, 212, self.RULE_exprlist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1286 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 30, 31, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1284 + self.expr(0) + pass + elif token in [56]: + self.state = 1285 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1295 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 173, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1288 + self.match(Python3Parser.COMMA) + self.state = 1291 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 30, 31, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1289 + self.expr(0) + pass + elif token in [56]: + self.state = 1290 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1297 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 173, self._ctx) + + self.state = 1299 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1298 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TestlistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_testlist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestlist"): + listener.enterTestlist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestlist"): + listener.exitTestlist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestlist"): + return visitor.visitTestlist(self) + else: + return visitor.visitChildren(self) + + def testlist(self): + + localctx = Python3Parser.TestlistContext(self, self._ctx, self.state) + self.enterRule(localctx, 214, self.RULE_testlist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1301 + self.test() + self.state = 1306 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 175, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1302 + self.match(Python3Parser.COMMA) + self.state = 1303 + self.test() + self.state = 1308 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 175, self._ctx) + + self.state = 1310 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1309 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DictorsetmakerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def COLON(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COLON) + else: + return self.getToken(Python3Parser.COLON, i) + + def POWER(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.POWER) + else: + return self.getToken(Python3Parser.POWER, i) + + def expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.ExprContext) + else: + return self.getTypedRuleContext(Python3Parser.ExprContext, i) + + def comp_for(self): + return self.getTypedRuleContext(Python3Parser.Comp_forContext, 0) + + def star_expr(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.Star_exprContext) + else: + return self.getTypedRuleContext(Python3Parser.Star_exprContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_dictorsetmaker + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDictorsetmaker"): + listener.enterDictorsetmaker(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDictorsetmaker"): + listener.exitDictorsetmaker(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDictorsetmaker"): + return visitor.visitDictorsetmaker(self) + else: + return visitor.visitChildren(self) + + def dictorsetmaker(self): + + localctx = Python3Parser.DictorsetmakerContext(self, self._ctx, self.state) + self.enterRule(localctx, 216, self.RULE_dictorsetmaker) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1360 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 187, self._ctx) + if la_ == 1: + self.state = 1318 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1312 + self.test() + self.state = 1313 + self.match(Python3Parser.COLON) + self.state = 1314 + self.test() + pass + elif token in [62]: + self.state = 1316 + self.match(Python3Parser.POWER) + self.state = 1317 + self.expr(0) + pass + else: + raise NoViableAltException(self) + + self.state = 1338 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [9, 22]: + self.state = 1320 + self.comp_for() + pass + elif token in [59, 78]: + self.state = 1332 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 179, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1321 + self.match(Python3Parser.COMMA) + self.state = 1328 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1322 + self.test() + self.state = 1323 + self.match(Python3Parser.COLON) + self.state = 1324 + self.test() + pass + elif token in [62]: + self.state = 1326 + self.match(Python3Parser.POWER) + self.state = 1327 + self.expr(0) + pass + else: + raise NoViableAltException(self) + + self.state = 1334 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 179, self._ctx) + + self.state = 1336 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1335 + self.match(Python3Parser.COMMA) + + pass + else: + raise NoViableAltException(self) + + pass + + elif la_ == 2: + self.state = 1342 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1340 + self.test() + pass + elif token in [56]: + self.state = 1341 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1358 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [9, 22]: + self.state = 1344 + self.comp_for() + pass + elif token in [59, 78]: + self.state = 1352 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 184, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1345 + self.match(Python3Parser.COMMA) + self.state = 1348 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.state = 1346 + self.test() + pass + elif token in [56]: + self.state = 1347 + self.star_expr() + pass + else: + raise NoViableAltException(self) + + self.state = 1354 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 184, self._ctx) + + self.state = 1356 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1355 + self.match(Python3Parser.COMMA) + + pass + else: + raise NoViableAltException(self) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ClassdefContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def CLASS(self): + return self.getToken(Python3Parser.CLASS, 0) + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def COLON(self): + return self.getToken(Python3Parser.COLON, 0) + + def block(self): + return self.getTypedRuleContext(Python3Parser.BlockContext, 0) + + def OPEN_PAREN(self): + return self.getToken(Python3Parser.OPEN_PAREN, 0) + + def CLOSE_PAREN(self): + return self.getToken(Python3Parser.CLOSE_PAREN, 0) + + def arglist(self): + return self.getTypedRuleContext(Python3Parser.ArglistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_classdef + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterClassdef"): + listener.enterClassdef(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitClassdef"): + listener.exitClassdef(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitClassdef"): + return visitor.visitClassdef(self) + else: + return visitor.visitChildren(self) + + def classdef(self): + + localctx = Python3Parser.ClassdefContext(self, self._ctx, self.state) + self.enterRule(localctx, 218, self.RULE_classdef) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1362 + self.match(Python3Parser.CLASS) + self.state = 1363 + self.name() + self.state = 1369 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 57: + self.state = 1364 + self.match(Python3Parser.OPEN_PAREN) + self.state = 1366 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4863924168670839832) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1365 + self.arglist() + + self.state = 1368 + self.match(Python3Parser.CLOSE_PAREN) + + self.state = 1371 + self.match(Python3Parser.COLON) + self.state = 1372 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArglistContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def argument(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.ArgumentContext) + else: + return self.getTypedRuleContext(Python3Parser.ArgumentContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.COMMA) + else: + return self.getToken(Python3Parser.COMMA, i) + + def getRuleIndex(self): + return Python3Parser.RULE_arglist + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArglist"): + listener.enterArglist(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArglist"): + listener.exitArglist(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArglist"): + return visitor.visitArglist(self) + else: + return visitor.visitChildren(self) + + def arglist(self): + + localctx = Python3Parser.ArglistContext(self, self._ctx, self.state) + self.enterRule(localctx, 220, self.RULE_arglist) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1374 + self.argument() + self.state = 1379 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 190, self._ctx) + while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1375 + self.match(Python3Parser.COMMA) + self.state = 1376 + self.argument() + self.state = 1381 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input, 190, self._ctx) + + self.state = 1383 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 59: + self.state = 1382 + self.match(Python3Parser.COMMA) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def test(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(Python3Parser.TestContext) + else: + return self.getTypedRuleContext(Python3Parser.TestContext, i) + + def ASSIGN(self): + return self.getToken(Python3Parser.ASSIGN, 0) + + def POWER(self): + return self.getToken(Python3Parser.POWER, 0) + + def STAR(self): + return self.getToken(Python3Parser.STAR, 0) + + def comp_for(self): + return self.getTypedRuleContext(Python3Parser.Comp_forContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_argument + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArgument"): + listener.enterArgument(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArgument"): + listener.exitArgument(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArgument"): + return visitor.visitArgument(self) + else: + return visitor.visitChildren(self) + + def argument(self): + + localctx = Python3Parser.ArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 222, self.RULE_argument) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1397 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 193, self._ctx) + if la_ == 1: + self.state = 1385 + self.test() + self.state = 1387 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 9 or _la == 22: + self.state = 1386 + self.comp_for() + + pass + + elif la_ == 2: + self.state = 1389 + self.test() + self.state = 1390 + self.match(Python3Parser.ASSIGN) + self.state = 1391 + self.test() + pass + + elif la_ == 3: + self.state = 1393 + self.match(Python3Parser.POWER) + self.state = 1394 + self.test() + pass + + elif la_ == 4: + self.state = 1395 + self.match(Python3Parser.STAR) + self.state = 1396 + self.test() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Comp_iterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def comp_for(self): + return self.getTypedRuleContext(Python3Parser.Comp_forContext, 0) + + def comp_if(self): + return self.getTypedRuleContext(Python3Parser.Comp_ifContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_comp_iter + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComp_iter"): + listener.enterComp_iter(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitComp_iter"): + listener.exitComp_iter(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComp_iter"): + return visitor.visitComp_iter(self) + else: + return visitor.visitChildren(self) + + def comp_iter(self): + + localctx = Python3Parser.Comp_iterContext(self, self._ctx, self.state) + self.enterRule(localctx, 224, self.RULE_comp_iter) + try: + self.state = 1401 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [9, 22]: + self.enterOuterAlt(localctx, 1) + self.state = 1399 + self.comp_for() + pass + elif token in [25]: + self.enterOuterAlt(localctx, 2) + self.state = 1400 + self.comp_if() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Comp_forContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Python3Parser.FOR, 0) + + def exprlist(self): + return self.getTypedRuleContext(Python3Parser.ExprlistContext, 0) + + def IN(self): + return self.getToken(Python3Parser.IN, 0) + + def or_test(self): + return self.getTypedRuleContext(Python3Parser.Or_testContext, 0) + + def ASYNC(self): + return self.getToken(Python3Parser.ASYNC, 0) + + def comp_iter(self): + return self.getTypedRuleContext(Python3Parser.Comp_iterContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_comp_for + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComp_for"): + listener.enterComp_for(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, +): + listener.exitComp_for(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComp_for"): + return visitor.visitComp_for(self) + else: + return visitor.visitChildren(self) + + def comp_for(self): + + localctx = Python3Parser.Comp_forContext(self, self._ctx, self.state) + self.enterRule(localctx, 226, self.RULE_comp_for) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1404 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 9: + self.state = 1403 + self.match(Python3Parser.ASYNC) + + self.state = 1406 + self.match(Python3Parser.FOR) + self.state = 1407 + self.exprlist() + self.state = 1408 + self.match(Python3Parser.IN) + self.state = 1409 + self.or_test() + self.state = 1411 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 37749248) != 0): + self.state = 1410 + self.comp_iter() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Comp_ifContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Python3Parser.IF, 0) + + def test_nocond(self): + return self.getTypedRuleContext(Python3Parser.Test_nocondContext, 0) + + def comp_iter(self): + return self.getTypedRuleContext(Python3Parser.Comp_iterContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_comp_if + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterComp_if"): + listener.enterComp_if(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitComp_if"): + listener.exitComp_if(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitComp_if"): + return visitor.visitComp_if(self) + else: + return visitor.visitChildren(self) + + def comp_if(self): + + localctx = Python3Parser.Comp_ifContext(self, self._ctx, self.state) + self.enterRule(localctx, 228, self.RULE_comp_if) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1413 + self.match(Python3Parser.IF) + self.state = 1414 + self.test_nocond() + self.state = 1416 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 37749248) != 0): + self.state = 1415 + self.comp_iter() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Encoding_declContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def name(self): + return self.getTypedRuleContext(Python3Parser.NameContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_encoding_decl + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterEncoding_decl"): + listener.enterEncoding_decl(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitEncoding_decl"): + listener.exitEncoding_decl(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitEncoding_decl"): + return visitor.visitEncoding_decl(self) + else: + return visitor.visitChildren(self) + + def encoding_decl(self): + + localctx = Python3Parser.Encoding_declContext(self, self._ctx, self.state) + self.enterRule(localctx, 230, self.RULE_encoding_decl) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1418 + self.name() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Yield_exprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def YIELD(self): + return self.getToken(Python3Parser.YIELD, 0) + + def yield_arg(self): + return self.getTypedRuleContext(Python3Parser.Yield_argContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_yield_expr + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterYield_expr"): + listener.enterYield_expr(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitYield_expr"): + listener.exitYield_expr(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitYield_expr"): + return visitor.visitYield_expr(self) + else: + return visitor.visitChildren(self) + + def yield_expr(self): + + localctx = Python3Parser.Yield_exprContext(self, self._ctx, self.state) + self.enterRule(localctx, 232, self.RULE_yield_expr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1420 + self.match(Python3Parser.YIELD) + self.state = 1422 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 180180556213912600) != 0) or ( + (((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 12673) != 0): + self.state = 1421 + self.yield_arg() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Yield_argContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def FROM(self): + return self.getToken(Python3Parser.FROM, 0) + + def test(self): + return self.getTypedRuleContext(Python3Parser.TestContext, 0) + + def testlist(self): + return self.getTypedRuleContext(Python3Parser.TestlistContext, 0) + + def getRuleIndex(self): + return Python3Parser.RULE_yield_arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterYield_arg"): + listener.enterYield_arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitYield_arg"): + listener.exitYield_arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitYield_arg"): + return visitor.visitYield_arg(self) + else: + return visitor.visitChildren(self) + + def yield_arg(self): + + localctx = Python3Parser.Yield_argContext(self, self._ctx, self.state) + self.enterRule(localctx, 234, self.RULE_yield_arg) + try: + self.state = 1427 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [23]: + self.enterOuterAlt(localctx, 1) + self.state = 1424 + self.match(Python3Parser.FROM) + self.state = 1425 + self.test() + pass + elif token in [3, 4, 10, 20, 29, 30, 31, 33, 38, 40, 45, 55, 57, 64, 71, 72, 76, 77]: + self.enterOuterAlt(localctx, 2) + self.state = 1426 + self.testlist() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StringsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): + super().__init__(parent, invokingState) + self.parser = parser + + def STRING(self, i: int = None): + if i is None: + return self.getTokens(Python3Parser.STRING) + else: + return self.getToken(Python3Parser.STRING, i) + + def getRuleIndex(self): + return Python3Parser.RULE_strings + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStrings"): + listener.enterStrings(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStrings"): + listener.exitStrings(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStrings"): + return visitor.visitStrings(self) + else: + return visitor.visitChildren(self) + + def strings(self): + + localctx = Python3Parser.StringsContext(self, self._ctx, self.state) + self.enterRule(localctx, 236, self.RULE_strings) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1430 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 1429 + self.match(Python3Parser.STRING) + self.state = 1432 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 3): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + def sempred(self, localctx: RuleContext, ruleIndex: int, predIndex: int): + if self._predicates == None: + self._predicates = dict() + self._predicates[60] = self.literal_pattern_sempred + self._predicates[61] = self.literal_expr_sempred + self._predicates[68] = self.pattern_capture_target_sempred + self._predicates[70] = self.value_pattern_sempred + self._predicates[97] = self.expr_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def literal_pattern_sempred(self, localctx: Literal_patternContext, predIndex: int): + if predIndex == 0: + return self.CannotBePlusMinus() + + def literal_expr_sempred(self, localctx: Literal_exprContext, predIndex: int): + if predIndex == 1: + return self.CannotBePlusMinus() + + def pattern_capture_target_sempred(self, localctx: Pattern_capture_targetContext, predIndex: int): + if predIndex == 2: + return self.CannotBeDotLpEq() + + def value_pattern_sempred(self, localctx: Value_patternContext, predIndex: int): + if predIndex == 3: + return self.CannotBeDotLpEq() + + def expr_sempred(self, localctx: ExprContext, predIndex: int): + if predIndex == 4: + return self.precpred(self._ctx, 8) + + if predIndex == 5: + return self.precpred(self._ctx, 6) + + if predIndex == 6: + return self.precpred(self._ctx, 5) + + if predIndex == 7: + return self.precpred(self._ctx, 4) + + if predIndex == 8: + return self.precpred(self._ctx, 3) + + if predIndex == 9: + return self.precpred(self._ctx, 2) + + if predIndex == 10: + return self.precpred(self._ctx, 1) + + + diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserBase.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserBase.py new file mode 100644 index 000000000..ed67f5c29 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserBase.py @@ -0,0 +1,10 @@ +from antlr4 import * + + +class Python3ParserBase(Parser): + + def CannotBePlusMinus(self) -> bool: + return True + + def CannotBeDotLpEq(self) -> bool: + return True diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserListener.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserListener.py new file mode 100644 index 000000000..8117a775d --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserListener.py @@ -0,0 +1,1083 @@ +# Generated from Python3Parser.g4 by ANTLR 4.13.1 +from antlr4 import * +if "." in __name__: + from .Python3Parser import Python3Parser +else: + from Python3Parser import Python3Parser + +# This class defines a complete listener for a parse tree produced by Python3Parser. +class Python3ParserListener(ParseTreeListener): + + # Enter a parse tree produced by Python3Parser#single_input. + def enterSingle_input(self, ctx:Python3Parser.Single_inputContext): + pass + + # Exit a parse tree produced by Python3Parser#single_input. + def exitSingle_input(self, ctx:Python3Parser.Single_inputContext): + pass + + + # Enter a parse tree produced by Python3Parser#file_input. + def enterFile_input(self, ctx:Python3Parser.File_inputContext): + pass + + # Exit a parse tree produced by Python3Parser#file_input. + def exitFile_input(self, ctx:Python3Parser.File_inputContext): + pass + + + # Enter a parse tree produced by Python3Parser#eval_input. + def enterEval_input(self, ctx:Python3Parser.Eval_inputContext): + pass + + # Exit a parse tree produced by Python3Parser#eval_input. + def exitEval_input(self, ctx:Python3Parser.Eval_inputContext): + pass + + + # Enter a parse tree produced by Python3Parser#decorator. + def enterDecorator(self, ctx:Python3Parser.DecoratorContext): + pass + + # Exit a parse tree produced by Python3Parser#decorator. + def exitDecorator(self, ctx:Python3Parser.DecoratorContext): + pass + + + # Enter a parse tree produced by Python3Parser#decorators. + def enterDecorators(self, ctx:Python3Parser.DecoratorsContext): + pass + + # Exit a parse tree produced by Python3Parser#decorators. + def exitDecorators(self, ctx:Python3Parser.DecoratorsContext): + pass + + + # Enter a parse tree produced by Python3Parser#decorated. + def enterDecorated(self, ctx:Python3Parser.DecoratedContext): + pass + + # Exit a parse tree produced by Python3Parser#decorated. + def exitDecorated(self, ctx:Python3Parser.DecoratedContext): + pass + + + # Enter a parse tree produced by Python3Parser#async_funcdef. + def enterAsync_funcdef(self, ctx:Python3Parser.Async_funcdefContext): + pass + + # Exit a parse tree produced by Python3Parser#async_funcdef. + def exitAsync_funcdef(self, ctx:Python3Parser.Async_funcdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#funcdef. + def enterFuncdef(self, ctx:Python3Parser.FuncdefContext): + pass + + # Exit a parse tree produced by Python3Parser#funcdef. + def exitFuncdef(self, ctx:Python3Parser.FuncdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#parameters. + def enterParameters(self, ctx:Python3Parser.ParametersContext): + pass + + # Exit a parse tree produced by Python3Parser#parameters. + def exitParameters(self, ctx:Python3Parser.ParametersContext): + pass + + + # Enter a parse tree produced by Python3Parser#typedargslist. + def enterTypedargslist(self, ctx:Python3Parser.TypedargslistContext): + pass + + # Exit a parse tree produced by Python3Parser#typedargslist. + def exitTypedargslist(self, ctx:Python3Parser.TypedargslistContext): + pass + + + # Enter a parse tree produced by Python3Parser#tfpdef. + def enterTfpdef(self, ctx:Python3Parser.TfpdefContext): + pass + + # Exit a parse tree produced by Python3Parser#tfpdef. + def exitTfpdef(self, ctx:Python3Parser.TfpdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#varargslist. + def enterVarargslist(self, ctx:Python3Parser.VarargslistContext): + pass + + # Exit a parse tree produced by Python3Parser#varargslist. + def exitVarargslist(self, ctx:Python3Parser.VarargslistContext): + pass + + + # Enter a parse tree produced by Python3Parser#vfpdef. + def enterVfpdef(self, ctx:Python3Parser.VfpdefContext): + pass + + # Exit a parse tree produced by Python3Parser#vfpdef. + def exitVfpdef(self, ctx:Python3Parser.VfpdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#stmt. + def enterStmt(self, ctx:Python3Parser.StmtContext): + pass + + # Exit a parse tree produced by Python3Parser#stmt. + def exitStmt(self, ctx:Python3Parser.StmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#simple_stmts. + def enterSimple_stmts(self, ctx:Python3Parser.Simple_stmtsContext): + pass + + # Exit a parse tree produced by Python3Parser#simple_stmts. + def exitSimple_stmts(self, ctx:Python3Parser.Simple_stmtsContext): + pass + + + # Enter a parse tree produced by Python3Parser#simple_stmt. + def enterSimple_stmt(self, ctx:Python3Parser.Simple_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#simple_stmt. + def exitSimple_stmt(self, ctx:Python3Parser.Simple_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#expr_stmt. + def enterExpr_stmt(self, ctx:Python3Parser.Expr_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#expr_stmt. + def exitExpr_stmt(self, ctx:Python3Parser.Expr_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#annassign. + def enterAnnassign(self, ctx:Python3Parser.AnnassignContext): + pass + + # Exit a parse tree produced by Python3Parser#annassign. + def exitAnnassign(self, ctx:Python3Parser.AnnassignContext): + pass + + + # Enter a parse tree produced by Python3Parser#testlist_star_expr. + def enterTestlist_star_expr(self, ctx:Python3Parser.Testlist_star_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#testlist_star_expr. + def exitTestlist_star_expr(self, ctx:Python3Parser.Testlist_star_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#augassign. + def enterAugassign(self, ctx:Python3Parser.AugassignContext): + pass + + # Exit a parse tree produced by Python3Parser#augassign. + def exitAugassign(self, ctx:Python3Parser.AugassignContext): + pass + + + # Enter a parse tree produced by Python3Parser#del_stmt. + def enterDel_stmt(self, ctx:Python3Parser.Del_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#del_stmt. + def exitDel_stmt(self, ctx:Python3Parser.Del_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#pass_stmt. + def enterPass_stmt(self, ctx:Python3Parser.Pass_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#pass_stmt. + def exitPass_stmt(self, ctx:Python3Parser.Pass_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#flow_stmt. + def enterFlow_stmt(self, ctx:Python3Parser.Flow_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#flow_stmt. + def exitFlow_stmt(self, ctx:Python3Parser.Flow_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#break_stmt. + def enterBreak_stmt(self, ctx:Python3Parser.Break_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#break_stmt. + def exitBreak_stmt(self, ctx:Python3Parser.Break_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#continue_stmt. + def enterContinue_stmt(self, ctx:Python3Parser.Continue_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#continue_stmt. + def exitContinue_stmt(self, ctx:Python3Parser.Continue_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#return_stmt. + def enterReturn_stmt(self, ctx:Python3Parser.Return_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#return_stmt. + def exitReturn_stmt(self, ctx:Python3Parser.Return_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#yield_stmt. + def enterYield_stmt(self, ctx:Python3Parser.Yield_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#yield_stmt. + def exitYield_stmt(self, ctx:Python3Parser.Yield_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#raise_stmt. + def enterRaise_stmt(self, ctx:Python3Parser.Raise_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#raise_stmt. + def exitRaise_stmt(self, ctx:Python3Parser.Raise_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#import_stmt. + def enterImport_stmt(self, ctx:Python3Parser.Import_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#import_stmt. + def exitImport_stmt(self, ctx:Python3Parser.Import_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#import_name. + def enterImport_name(self, ctx:Python3Parser.Import_nameContext): + pass + + # Exit a parse tree produced by Python3Parser#import_name. + def exitImport_name(self, ctx:Python3Parser.Import_nameContext): + pass + + + # Enter a parse tree produced by Python3Parser#import_from. + def enterImport_from(self, ctx:Python3Parser.Import_fromContext): + pass + + # Exit a parse tree produced by Python3Parser#import_from. + def exitImport_from(self, ctx:Python3Parser.Import_fromContext): + pass + + + # Enter a parse tree produced by Python3Parser#import_as_name. + def enterImport_as_name(self, ctx:Python3Parser.Import_as_nameContext): + pass + + # Exit a parse tree produced by Python3Parser#import_as_name. + def exitImport_as_name(self, ctx:Python3Parser.Import_as_nameContext): + pass + + + # Enter a parse tree produced by Python3Parser#dotted_as_name. + def enterDotted_as_name(self, ctx:Python3Parser.Dotted_as_nameContext): + pass + + # Exit a parse tree produced by Python3Parser#dotted_as_name. + def exitDotted_as_name(self, ctx:Python3Parser.Dotted_as_nameContext): + pass + + + # Enter a parse tree produced by Python3Parser#import_as_names. + def enterImport_as_names(self, ctx:Python3Parser.Import_as_namesContext): + pass + + # Exit a parse tree produced by Python3Parser#import_as_names. + def exitImport_as_names(self, ctx:Python3Parser.Import_as_namesContext): + pass + + + # Enter a parse tree produced by Python3Parser#dotted_as_names. + def enterDotted_as_names(self, ctx:Python3Parser.Dotted_as_namesContext): + pass + + # Exit a parse tree produced by Python3Parser#dotted_as_names. + def exitDotted_as_names(self, ctx:Python3Parser.Dotted_as_namesContext): + pass + + + # Enter a parse tree produced by Python3Parser#dotted_name. + def enterDotted_name(self, ctx:Python3Parser.Dotted_nameContext): + pass + + # Exit a parse tree produced by Python3Parser#dotted_name. + def exitDotted_name(self, ctx:Python3Parser.Dotted_nameContext): + pass + + + # Enter a parse tree produced by Python3Parser#global_stmt. + def enterGlobal_stmt(self, ctx:Python3Parser.Global_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#global_stmt. + def exitGlobal_stmt(self, ctx:Python3Parser.Global_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#nonlocal_stmt. + def enterNonlocal_stmt(self, ctx:Python3Parser.Nonlocal_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#nonlocal_stmt. + def exitNonlocal_stmt(self, ctx:Python3Parser.Nonlocal_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#assert_stmt. + def enterAssert_stmt(self, ctx:Python3Parser.Assert_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#assert_stmt. + def exitAssert_stmt(self, ctx:Python3Parser.Assert_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#compound_stmt. + def enterCompound_stmt(self, ctx:Python3Parser.Compound_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#compound_stmt. + def exitCompound_stmt(self, ctx:Python3Parser.Compound_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#async_stmt. + def enterAsync_stmt(self, ctx:Python3Parser.Async_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#async_stmt. + def exitAsync_stmt(self, ctx:Python3Parser.Async_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#if_stmt. + def enterIf_stmt(self, ctx:Python3Parser.If_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#if_stmt. + def exitIf_stmt(self, ctx:Python3Parser.If_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#while_stmt. + def enterWhile_stmt(self, ctx:Python3Parser.While_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#while_stmt. + def exitWhile_stmt(self, ctx:Python3Parser.While_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#for_stmt. + def enterFor_stmt(self, ctx:Python3Parser.For_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#for_stmt. + def exitFor_stmt(self, ctx:Python3Parser.For_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#try_stmt. + def enterTry_stmt(self, ctx:Python3Parser.Try_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#try_stmt. + def exitTry_stmt(self, ctx:Python3Parser.Try_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#with_stmt. + def enterWith_stmt(self, ctx:Python3Parser.With_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#with_stmt. + def exitWith_stmt(self, ctx:Python3Parser.With_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#with_item. + def enterWith_item(self, ctx:Python3Parser.With_itemContext): + pass + + # Exit a parse tree produced by Python3Parser#with_item. + def exitWith_item(self, ctx:Python3Parser.With_itemContext): + pass + + + # Enter a parse tree produced by Python3Parser#except_clause. + def enterExcept_clause(self, ctx:Python3Parser.Except_clauseContext): + pass + + # Exit a parse tree produced by Python3Parser#except_clause. + def exitExcept_clause(self, ctx:Python3Parser.Except_clauseContext): + pass + + + # Enter a parse tree produced by Python3Parser#block. + def enterBlock(self, ctx:Python3Parser.BlockContext): + pass + + # Exit a parse tree produced by Python3Parser#block. + def exitBlock(self, ctx:Python3Parser.BlockContext): + pass + + + # Enter a parse tree produced by Python3Parser#match_stmt. + def enterMatch_stmt(self, ctx:Python3Parser.Match_stmtContext): + pass + + # Exit a parse tree produced by Python3Parser#match_stmt. + def exitMatch_stmt(self, ctx:Python3Parser.Match_stmtContext): + pass + + + # Enter a parse tree produced by Python3Parser#subject_expr. + def enterSubject_expr(self, ctx:Python3Parser.Subject_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#subject_expr. + def exitSubject_expr(self, ctx:Python3Parser.Subject_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#star_named_expressions. + def enterStar_named_expressions(self, ctx:Python3Parser.Star_named_expressionsContext): + pass + + # Exit a parse tree produced by Python3Parser#star_named_expressions. + def exitStar_named_expressions(self, ctx:Python3Parser.Star_named_expressionsContext): + pass + + + # Enter a parse tree produced by Python3Parser#star_named_expression. + def enterStar_named_expression(self, ctx:Python3Parser.Star_named_expressionContext): + pass + + # Exit a parse tree produced by Python3Parser#star_named_expression. + def exitStar_named_expression(self, ctx:Python3Parser.Star_named_expressionContext): + pass + + + # Enter a parse tree produced by Python3Parser#case_block. + def enterCase_block(self, ctx:Python3Parser.Case_blockContext): + pass + + # Exit a parse tree produced by Python3Parser#case_block. + def exitCase_block(self, ctx:Python3Parser.Case_blockContext): + pass + + + # Enter a parse tree produced by Python3Parser#guard. + def enterGuard(self, ctx:Python3Parser.GuardContext): + pass + + # Exit a parse tree produced by Python3Parser#guard. + def exitGuard(self, ctx:Python3Parser.GuardContext): + pass + + + # Enter a parse tree produced by Python3Parser#patterns. + def enterPatterns(self, ctx:Python3Parser.PatternsContext): + pass + + # Exit a parse tree produced by Python3Parser#patterns. + def exitPatterns(self, ctx:Python3Parser.PatternsContext): + pass + + + # Enter a parse tree produced by Python3Parser#pattern. + def enterPattern(self, ctx:Python3Parser.PatternContext): + pass + + # Exit a parse tree produced by Python3Parser#pattern. + def exitPattern(self, ctx:Python3Parser.PatternContext): + pass + + + # Enter a parse tree produced by Python3Parser#as_pattern. + def enterAs_pattern(self, ctx:Python3Parser.As_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#as_pattern. + def exitAs_pattern(self, ctx:Python3Parser.As_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#or_pattern. + def enterOr_pattern(self, ctx:Python3Parser.Or_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#or_pattern. + def exitOr_pattern(self, ctx:Python3Parser.Or_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#closed_pattern. + def enterClosed_pattern(self, ctx:Python3Parser.Closed_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#closed_pattern. + def exitClosed_pattern(self, ctx:Python3Parser.Closed_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#literal_pattern. + def enterLiteral_pattern(self, ctx:Python3Parser.Literal_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#literal_pattern. + def exitLiteral_pattern(self, ctx:Python3Parser.Literal_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#literal_expr. + def enterLiteral_expr(self, ctx:Python3Parser.Literal_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#literal_expr. + def exitLiteral_expr(self, ctx:Python3Parser.Literal_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#complex_number. + def enterComplex_number(self, ctx:Python3Parser.Complex_numberContext): + pass + + # Exit a parse tree produced by Python3Parser#complex_number. + def exitComplex_number(self, ctx:Python3Parser.Complex_numberContext): + pass + + + # Enter a parse tree produced by Python3Parser#signed_number. + def enterSigned_number(self, ctx:Python3Parser.Signed_numberContext): + pass + + # Exit a parse tree produced by Python3Parser#signed_number. + def exitSigned_number(self, ctx:Python3Parser.Signed_numberContext): + pass + + + # Enter a parse tree produced by Python3Parser#signed_real_number. + def enterSigned_real_number(self, ctx:Python3Parser.Signed_real_numberContext): + pass + + # Exit a parse tree produced by Python3Parser#signed_real_number. + def exitSigned_real_number(self, ctx:Python3Parser.Signed_real_numberContext): + pass + + + # Enter a parse tree produced by Python3Parser#real_number. + def enterReal_number(self, ctx:Python3Parser.Real_numberContext): + pass + + # Exit a parse tree produced by Python3Parser#real_number. + def exitReal_number(self, ctx:Python3Parser.Real_numberContext): + pass + + + # Enter a parse tree produced by Python3Parser#imaginary_number. + def enterImaginary_number(self, ctx:Python3Parser.Imaginary_numberContext): + pass + + # Exit a parse tree produced by Python3Parser#imaginary_number. + def exitImaginary_number(self, ctx:Python3Parser.Imaginary_numberContext): + pass + + + # Enter a parse tree produced by Python3Parser#capture_pattern. + def enterCapture_pattern(self, ctx:Python3Parser.Capture_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#capture_pattern. + def exitCapture_pattern(self, ctx:Python3Parser.Capture_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#pattern_capture_target. + def enterPattern_capture_target(self, ctx:Python3Parser.Pattern_capture_targetContext): + pass + + # Exit a parse tree produced by Python3Parser#pattern_capture_target. + def exitPattern_capture_target(self, ctx:Python3Parser.Pattern_capture_targetContext): + pass + + + # Enter a parse tree produced by Python3Parser#wildcard_pattern. + def enterWildcard_pattern(self, ctx:Python3Parser.Wildcard_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#wildcard_pattern. + def exitWildcard_pattern(self, ctx:Python3Parser.Wildcard_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#value_pattern. + def enterValue_pattern(self, ctx:Python3Parser.Value_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#value_pattern. + def exitValue_pattern(self, ctx:Python3Parser.Value_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#attr. + def enterAttr(self, ctx:Python3Parser.AttrContext): + pass + + # Exit a parse tree produced by Python3Parser#attr. + def exitAttr(self, ctx:Python3Parser.AttrContext): + pass + + + # Enter a parse tree produced by Python3Parser#name_or_attr. + def enterName_or_attr(self, ctx:Python3Parser.Name_or_attrContext): + pass + + # Exit a parse tree produced by Python3Parser#name_or_attr. + def exitName_or_attr(self, ctx:Python3Parser.Name_or_attrContext): + pass + + + # Enter a parse tree produced by Python3Parser#group_pattern. + def enterGroup_pattern(self, ctx:Python3Parser.Group_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#group_pattern. + def exitGroup_pattern(self, ctx:Python3Parser.Group_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#sequence_pattern. + def enterSequence_pattern(self, ctx:Python3Parser.Sequence_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#sequence_pattern. + def exitSequence_pattern(self, ctx:Python3Parser.Sequence_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#open_sequence_pattern. + def enterOpen_sequence_pattern(self, ctx:Python3Parser.Open_sequence_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#open_sequence_pattern. + def exitOpen_sequence_pattern(self, ctx:Python3Parser.Open_sequence_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#maybe_sequence_pattern. + def enterMaybe_sequence_pattern(self, ctx:Python3Parser.Maybe_sequence_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#maybe_sequence_pattern. + def exitMaybe_sequence_pattern(self, ctx:Python3Parser.Maybe_sequence_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#maybe_star_pattern. + def enterMaybe_star_pattern(self, ctx:Python3Parser.Maybe_star_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#maybe_star_pattern. + def exitMaybe_star_pattern(self, ctx:Python3Parser.Maybe_star_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#star_pattern. + def enterStar_pattern(self, ctx:Python3Parser.Star_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#star_pattern. + def exitStar_pattern(self, ctx:Python3Parser.Star_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#mapping_pattern. + def enterMapping_pattern(self, ctx:Python3Parser.Mapping_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#mapping_pattern. + def exitMapping_pattern(self, ctx:Python3Parser.Mapping_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#items_pattern. + def enterItems_pattern(self, ctx:Python3Parser.Items_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#items_pattern. + def exitItems_pattern(self, ctx:Python3Parser.Items_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#key_value_pattern. + def enterKey_value_pattern(self, ctx:Python3Parser.Key_value_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#key_value_pattern. + def exitKey_value_pattern(self, ctx:Python3Parser.Key_value_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#double_star_pattern. + def enterDouble_star_pattern(self, ctx:Python3Parser.Double_star_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#double_star_pattern. + def exitDouble_star_pattern(self, ctx:Python3Parser.Double_star_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#class_pattern. + def enterClass_pattern(self, ctx:Python3Parser.Class_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#class_pattern. + def exitClass_pattern(self, ctx:Python3Parser.Class_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#positional_patterns. + def enterPositional_patterns(self, ctx:Python3Parser.Positional_patternsContext): + pass + + # Exit a parse tree produced by Python3Parser#positional_patterns. + def exitPositional_patterns(self, ctx:Python3Parser.Positional_patternsContext): + pass + + + # Enter a parse tree produced by Python3Parser#keyword_patterns. + def enterKeyword_patterns(self, ctx:Python3Parser.Keyword_patternsContext): + pass + + # Exit a parse tree produced by Python3Parser#keyword_patterns. + def exitKeyword_patterns(self, ctx:Python3Parser.Keyword_patternsContext): + pass + + + # Enter a parse tree produced by Python3Parser#keyword_pattern. + def enterKeyword_pattern(self, ctx:Python3Parser.Keyword_patternContext): + pass + + # Exit a parse tree produced by Python3Parser#keyword_pattern. + def exitKeyword_pattern(self, ctx:Python3Parser.Keyword_patternContext): + pass + + + # Enter a parse tree produced by Python3Parser#test. + def enterTest(self, ctx:Python3Parser.TestContext): + pass + + # Exit a parse tree produced by Python3Parser#test. + def exitTest(self, ctx:Python3Parser.TestContext): + pass + + + # Enter a parse tree produced by Python3Parser#test_nocond. + def enterTest_nocond(self, ctx:Python3Parser.Test_nocondContext): + pass + + # Exit a parse tree produced by Python3Parser#test_nocond. + def exitTest_nocond(self, ctx:Python3Parser.Test_nocondContext): + pass + + + # Enter a parse tree produced by Python3Parser#lambdef. + def enterLambdef(self, ctx:Python3Parser.LambdefContext): + pass + + # Exit a parse tree produced by Python3Parser#lambdef. + def exitLambdef(self, ctx:Python3Parser.LambdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#lambdef_nocond. + def enterLambdef_nocond(self, ctx:Python3Parser.Lambdef_nocondContext): + pass + + # Exit a parse tree produced by Python3Parser#lambdef_nocond. + def exitLambdef_nocond(self, ctx:Python3Parser.Lambdef_nocondContext): + pass + + + # Enter a parse tree produced by Python3Parser#or_test. + def enterOr_test(self, ctx:Python3Parser.Or_testContext): + pass + + # Exit a parse tree produced by Python3Parser#or_test. + def exitOr_test(self, ctx:Python3Parser.Or_testContext): + pass + + + # Enter a parse tree produced by Python3Parser#and_test. + def enterAnd_test(self, ctx:Python3Parser.And_testContext): + pass + + # Exit a parse tree produced by Python3Parser#and_test. + def exitAnd_test(self, ctx:Python3Parser.And_testContext): + pass + + + # Enter a parse tree produced by Python3Parser#not_test. + def enterNot_test(self, ctx:Python3Parser.Not_testContext): + pass + + # Exit a parse tree produced by Python3Parser#not_test. + def exitNot_test(self, ctx:Python3Parser.Not_testContext): + pass + + + # Enter a parse tree produced by Python3Parser#comparison. + def enterComparison(self, ctx:Python3Parser.ComparisonContext): + pass + + # Exit a parse tree produced by Python3Parser#comparison. + def exitComparison(self, ctx:Python3Parser.ComparisonContext): + pass + + + # Enter a parse tree produced by Python3Parser#comp_op. + def enterComp_op(self, ctx:Python3Parser.Comp_opContext): + pass + + # Exit a parse tree produced by Python3Parser#comp_op. + def exitComp_op(self, ctx:Python3Parser.Comp_opContext): + pass + + + # Enter a parse tree produced by Python3Parser#star_expr. + def enterStar_expr(self, ctx:Python3Parser.Star_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#star_expr. + def exitStar_expr(self, ctx:Python3Parser.Star_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#expr. + def enterExpr(self, ctx:Python3Parser.ExprContext): + pass + + # Exit a parse tree produced by Python3Parser#expr. + def exitExpr(self, ctx:Python3Parser.ExprContext): + pass + + + # Enter a parse tree produced by Python3Parser#atom_expr. + def enterAtom_expr(self, ctx:Python3Parser.Atom_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#atom_expr. + def exitAtom_expr(self, ctx:Python3Parser.Atom_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#atom. + def enterAtom(self, ctx:Python3Parser.AtomContext): + pass + + # Exit a parse tree produced by Python3Parser#atom. + def exitAtom(self, ctx:Python3Parser.AtomContext): + pass + + + # Enter a parse tree produced by Python3Parser#name. + def enterName(self, ctx:Python3Parser.NameContext): + pass + + # Exit a parse tree produced by Python3Parser#name. + def exitName(self, ctx:Python3Parser.NameContext): + pass + + + # Enter a parse tree produced by Python3Parser#testlist_comp. + def enterTestlist_comp(self, ctx:Python3Parser.Testlist_compContext): + pass + + # Exit a parse tree produced by Python3Parser#testlist_comp. + def exitTestlist_comp(self, ctx:Python3Parser.Testlist_compContext): + pass + + + # Enter a parse tree produced by Python3Parser#trailer. + def enterTrailer(self, ctx:Python3Parser.TrailerContext): + pass + + # Exit a parse tree produced by Python3Parser#trailer. + def exitTrailer(self, ctx:Python3Parser.TrailerContext): + pass + + + # Enter a parse tree produced by Python3Parser#subscriptlist. + def enterSubscriptlist(self, ctx:Python3Parser.SubscriptlistContext): + pass + + # Exit a parse tree produced by Python3Parser#subscriptlist. + def exitSubscriptlist(self, ctx:Python3Parser.SubscriptlistContext): + pass + + + # Enter a parse tree produced by Python3Parser#subscript_. + def enterSubscript_(self, ctx:Python3Parser.Subscript_Context): + pass + + # Exit a parse tree produced by Python3Parser#subscript_. + def exitSubscript_(self, ctx:Python3Parser.Subscript_Context): + pass + + + # Enter a parse tree produced by Python3Parser#sliceop. + def enterSliceop(self, ctx:Python3Parser.SliceopContext): + pass + + # Exit a parse tree produced by Python3Parser#sliceop. + def exitSliceop(self, ctx:Python3Parser.SliceopContext): + pass + + + # Enter a parse tree produced by Python3Parser#exprlist. + def enterExprlist(self, ctx:Python3Parser.ExprlistContext): + pass + + # Exit a parse tree produced by Python3Parser#exprlist. + def exitExprlist(self, ctx:Python3Parser.ExprlistContext): + pass + + + # Enter a parse tree produced by Python3Parser#testlist. + def enterTestlist(self, ctx:Python3Parser.TestlistContext): + pass + + # Exit a parse tree produced by Python3Parser#testlist. + def exitTestlist(self, ctx:Python3Parser.TestlistContext): + pass + + + # Enter a parse tree produced by Python3Parser#dictorsetmaker. + def enterDictorsetmaker(self, ctx:Python3Parser.DictorsetmakerContext): + pass + + # Exit a parse tree produced by Python3Parser#dictorsetmaker. + def exitDictorsetmaker(self, ctx:Python3Parser.DictorsetmakerContext): + pass + + + # Enter a parse tree produced by Python3Parser#classdef. + def enterClassdef(self, ctx:Python3Parser.ClassdefContext): + pass + + # Exit a parse tree produced by Python3Parser#classdef. + def exitClassdef(self, ctx:Python3Parser.ClassdefContext): + pass + + + # Enter a parse tree produced by Python3Parser#arglist. + def enterArglist(self, ctx:Python3Parser.ArglistContext): + pass + + # Exit a parse tree produced by Python3Parser#arglist. + def exitArglist(self, ctx:Python3Parser.ArglistContext): + pass + + + # Enter a parse tree produced by Python3Parser#argument. + def enterArgument(self, ctx:Python3Parser.ArgumentContext): + pass + + # Exit a parse tree produced by Python3Parser#argument. + def exitArgument(self, ctx:Python3Parser.ArgumentContext): + pass + + + # Enter a parse tree produced by Python3Parser#comp_iter. + def enterComp_iter(self, ctx:Python3Parser.Comp_iterContext): + pass + + # Exit a parse tree produced by Python3Parser#comp_iter. + def exitComp_iter(self, ctx:Python3Parser.Comp_iterContext): + pass + + + # Enter a parse tree produced by Python3Parser#comp_for. + def enterComp_for(self, ctx:Python3Parser.Comp_forContext): + pass + + # Exit a parse tree produced by Python3Parser#comp_for. + def exitComp_for(self, ctx:Python3Parser.Comp_forContext): + pass + + + # Enter a parse tree produced by Python3Parser#comp_if. + def enterComp_if(self, ctx:Python3Parser.Comp_ifContext): + pass + + # Exit a parse tree produced by Python3Parser#comp_if. + def exitComp_if(self, ctx:Python3Parser.Comp_ifContext): + pass + + + # Enter a parse tree produced by Python3Parser#encoding_decl. + def enterEncoding_decl(self, ctx:Python3Parser.Encoding_declContext): + pass + + # Exit a parse tree produced by Python3Parser#encoding_decl. + def exitEncoding_decl(self, ctx:Python3Parser.Encoding_declContext): + pass + + + # Enter a parse tree produced by Python3Parser#yield_expr. + def enterYield_expr(self, ctx:Python3Parser.Yield_exprContext): + pass + + # Exit a parse tree produced by Python3Parser#yield_expr. + def exitYield_expr(self, ctx:Python3Parser.Yield_exprContext): + pass + + + # Enter a parse tree produced by Python3Parser#yield_arg. + def enterYield_arg(self, ctx:Python3Parser.Yield_argContext): + pass + + # Exit a parse tree produced by Python3Parser#yield_arg. + def exitYield_arg(self, ctx:Python3Parser.Yield_argContext): + pass + + + # Enter a parse tree produced by Python3Parser#strings. + def enterStrings(self, ctx:Python3Parser.StringsContext): + pass + + # Exit a parse tree produced by Python3Parser#strings. + def exitStrings(self, ctx:Python3Parser.StringsContext): + pass + + + +del Python3Parser \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserVisitor.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserVisitor.py new file mode 100644 index 000000000..2baaa2317 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/Python3ParserVisitor.py @@ -0,0 +1,491 @@ +# Generated from Python3Parser.g4 by ANTLR 4.13.1 +from antlr4 import * + +if "." in __name__: + from .Python3Parser import Python3Parser +else: + from Python3Parser import Python3Parser + + +# This class defines a complete generic visitor for a parse tree produced by Python3Parser. + +class Python3ParserVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by Python3Parser#single_input. + def visitSingle_input(self, ctx: Python3Parser.Single_inputContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#file_input. + def visitFile_input(self, ctx: Python3Parser.File_inputContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#eval_input. + def visitEval_input(self, ctx: Python3Parser.Eval_inputContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#decorator. + def visitDecorator(self, ctx: Python3Parser.DecoratorContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#decorators. + def visitDecorators(self, ctx: Python3Parser.DecoratorsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#decorated. + def visitDecorated(self, ctx: Python3Parser.DecoratedContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#async_funcdef. + def visitAsync_funcdef(self, ctx: Python3Parser.Async_funcdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#funcdef. + def visitFuncdef(self, ctx: Python3Parser.FuncdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#parameters. + def visitParameters(self, ctx: Python3Parser.ParametersContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#typedargslist. + def visitTypedargslist(self, ctx: Python3Parser.TypedargslistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#tfpdef. + def visitTfpdef(self, ctx: Python3Parser.TfpdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#varargslist. + def visitVarargslist(self, ctx: Python3Parser.VarargslistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#vfpdef. + def visitVfpdef(self, ctx: Python3Parser.VfpdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#stmt. + def visitStmt(self, ctx: Python3Parser.StmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#simple_stmts. + def visitSimple_stmts(self, ctx: Python3Parser.Simple_stmtsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#simple_stmt. + def visitSimple_stmt(self, ctx: Python3Parser.Simple_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#expr_stmt. + def visitExpr_stmt(self, ctx: Python3Parser.Expr_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#annassign. + def visitAnnassign(self, ctx: Python3Parser.AnnassignContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#testlist_star_expr. + def visitTestlist_star_expr(self, ctx: Python3Parser.Testlist_star_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#augassign. + def visitAugassign(self, ctx: Python3Parser.AugassignContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#del_stmt. + def visitDel_stmt(self, ctx: Python3Parser.Del_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#pass_stmt. + def visitPass_stmt(self, ctx: Python3Parser.Pass_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#flow_stmt. + def visitFlow_stmt(self, ctx: Python3Parser.Flow_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#break_stmt. + def visitBreak_stmt(self, ctx: Python3Parser.Break_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#continue_stmt. + def visitContinue_stmt(self, ctx: Python3Parser.Continue_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#return_stmt. + def visitReturn_stmt(self, ctx: Python3Parser.Return_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#yield_stmt. + def visitYield_stmt(self, ctx: Python3Parser.Yield_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#raise_stmt. + def visitRaise_stmt(self, ctx: Python3Parser.Raise_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#import_stmt. + def visitImport_stmt(self, ctx: Python3Parser.Import_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#import_name. + def visitImport_name(self, ctx: Python3Parser.Import_nameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#import_from. + def visitImport_from(self, ctx: Python3Parser.Import_fromContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#import_as_name. + def visitImport_as_name(self, ctx: Python3Parser.Import_as_nameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#dotted_as_name. + def visitDotted_as_name(self, ctx: Python3Parser.Dotted_as_nameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#import_as_names. + def visitImport_as_names(self, ctx: Python3Parser.Import_as_namesContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#dotted_as_names. + def visitDotted_as_names(self, ctx: Python3Parser.Dotted_as_namesContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#dotted_name. + def visitDotted_name(self, ctx: Python3Parser.Dotted_nameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#global_stmt. + def visitGlobal_stmt(self, ctx: Python3Parser.Global_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#nonlocal_stmt. + def visitNonlocal_stmt(self, ctx: Python3Parser.Nonlocal_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#assert_stmt. + def visitAssert_stmt(self, ctx: Python3Parser.Assert_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#compound_stmt. + def visitCompound_stmt(self, ctx: Python3Parser.Compound_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#async_stmt. + def visitAsync_stmt(self, ctx: Python3Parser.Async_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#if_stmt. + def visitIf_stmt(self, ctx: Python3Parser.If_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#while_stmt. + def visitWhile_stmt(self, ctx: Python3Parser.While_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#for_stmt. + def visitFor_stmt(self, ctx: Python3Parser.For_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#try_stmt. + def visitTry_stmt(self, ctx: Python3Parser.Try_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#with_stmt. + def visitWith_stmt(self, ctx: Python3Parser.With_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#with_item. + def visitWith_item(self, ctx: Python3Parser.With_itemContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#except_clause. + def visitExcept_clause(self, ctx: Python3Parser.Except_clauseContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#block. + def visitBlock(self, ctx: Python3Parser.BlockContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#match_stmt. + def visitMatch_stmt(self, ctx: Python3Parser.Match_stmtContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#subject_expr. + def visitSubject_expr(self, ctx: Python3Parser.Subject_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#star_named_expressions. + def visitStar_named_expressions(self, ctx: Python3Parser.Star_named_expressionsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#star_named_expression. + def visitStar_named_expression(self, ctx: Python3Parser.Star_named_expressionContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#case_block. + def visitCase_block(self, ctx: Python3Parser.Case_blockContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#guard. + def visitGuard(self, ctx: Python3Parser.GuardContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#patterns. + def visitPatterns(self, ctx: Python3Parser.PatternsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#pattern. + def visitPattern(self, ctx: Python3Parser.PatternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#as_pattern. + def visitAs_pattern(self, ctx: Python3Parser.As_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#or_pattern. + def visitOr_pattern(self, ctx: Python3Parser.Or_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#closed_pattern. + def visitClosed_pattern(self, ctx: Python3Parser.Closed_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#literal_pattern. + def visitLiteral_pattern(self, ctx: Python3Parser.Literal_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#literal_expr. + def visitLiteral_expr(self, ctx: Python3Parser.Literal_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#complex_number. + def visitComplex_number(self, ctx: Python3Parser.Complex_numberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#signed_number. + def visitSigned_number(self, ctx: Python3Parser.Signed_numberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#signed_real_number. + def visitSigned_real_number(self, ctx: Python3Parser.Signed_real_numberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#real_number. + def visitReal_number(self, ctx: Python3Parser.Real_numberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#imaginary_number. + def visitImaginary_number(self, ctx: Python3Parser.Imaginary_numberContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#capture_pattern. + def visitCapture_pattern(self, ctx: Python3Parser.Capture_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#pattern_capture_target. + def visitPattern_capture_target(self, ctx: Python3Parser.Pattern_capture_targetContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#wildcard_pattern. + def visitWildcard_pattern(self, ctx: Python3Parser.Wildcard_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#value_pattern. + def visitValue_pattern(self, ctx: Python3Parser.Value_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#attr. + def visitAttr(self, ctx: Python3Parser.AttrContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#name_or_attr. + def visitName_or_attr(self, ctx: Python3Parser.Name_or_attrContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#group_pattern. + def visitGroup_pattern(self, ctx: Python3Parser.Group_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#sequence_pattern. + def visitSequence_pattern(self, ctx: Python3Parser.Sequence_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#open_sequence_pattern. + def visitOpen_sequence_pattern(self, ctx: Python3Parser.Open_sequence_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#maybe_sequence_pattern. + def visitMaybe_sequence_pattern(self, ctx: Python3Parser.Maybe_sequence_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#maybe_star_pattern. + def visitMaybe_star_pattern(self, ctx: Python3Parser.Maybe_star_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#star_pattern. + def visitStar_pattern(self, ctx: Python3Parser.Star_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#mapping_pattern. + def visitMapping_pattern(self, ctx: Python3Parser.Mapping_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#items_pattern. + def visitItems_pattern(self, ctx: Python3Parser.Items_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#key_value_pattern. + def visitKey_value_pattern(self, ctx: Python3Parser.Key_value_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#double_star_pattern. + def visitDouble_star_pattern(self, ctx: Python3Parser.Double_star_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#class_pattern. + def visitClass_pattern(self, ctx: Python3Parser.Class_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#positional_patterns. + def visitPositional_patterns(self, ctx: Python3Parser.Positional_patternsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#keyword_patterns. + def visitKeyword_patterns(self, ctx: Python3Parser.Keyword_patternsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#keyword_pattern. + def visitKeyword_pattern(self, ctx: Python3Parser.Keyword_patternContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#test. + def visitTest(self, ctx: Python3Parser.TestContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#test_nocond. + def visitTest_nocond(self, ctx: Python3Parser.Test_nocondContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#lambdef. + def visitLambdef(self, ctx: Python3Parser.LambdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#lambdef_nocond. + def visitLambdef_nocond(self, ctx: Python3Parser.Lambdef_nocondContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#or_test. + def visitOr_test(self, ctx: Python3Parser.Or_testContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#and_test. + def visitAnd_test(self, ctx: Python3Parser.And_testContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#not_test. + def visitNot_test(self, ctx: Python3Parser.Not_testContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#comparison. + def visitComparison(self, ctx: Python3Parser.ComparisonContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#comp_op. + def visitComp_op(self, ctx: Python3Parser.Comp_opContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#star_expr. + def visitStar_expr(self, ctx: Python3Parser.Star_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#expr. + def visitExpr(self, ctx: Python3Parser.ExprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#atom_expr. + def visitAtom_expr(self, ctx: Python3Parser.Atom_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#atom. + def visitAtom(self, ctx: Python3Parser.AtomContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#name. + def visitName(self, ctx: Python3Parser.NameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#testlist_comp. + def visitTestlist_comp(self, ctx: Python3Parser.Testlist_compContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#trailer. + def visitTrailer(self, ctx: Python3Parser.TrailerContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#subscriptlist. + def visitSubscriptlist(self, ctx: Python3Parser.SubscriptlistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#subscript_. + def visitSubscript_(self, ctx: Python3Parser.Subscript_Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#sliceop. + def visitSliceop(self, ctx: Python3Parser.SliceopContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#exprlist. + def visitExprlist(self, ctx: Python3Parser.ExprlistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#testlist. + def visitTestlist(self, ctx: Python3Parser.TestlistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#dictorsetmaker. + def visitDictorsetmaker(self, ctx: Python3Parser.DictorsetmakerContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#classdef. + def visitClassdef(self, ctx: Python3Parser.ClassdefContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#arglist. + def visitArglist(self, ctx: Python3Parser.ArglistContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#argument. + def visitArgument(self, ctx: Python3Parser.ArgumentContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#comp_iter. + def visitComp_iter(self, ctx: Python3Parser.Comp_iterContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#comp_for. + def visitComp_for(self, ctx: Python3Parser.Comp_forContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#comp_if. + def visitComp_if(self, ctx: Python3Parser.Comp_ifContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#encoding_decl. + def visitEncoding_decl(self, ctx: Python3Parser.Encoding_declContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#yield_expr. + def visitYield_expr(self, ctx: Python3Parser.Yield_exprContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#yield_arg. + def visitYield_arg(self, ctx: Python3Parser.Yield_argContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by Python3Parser#strings. + def visitStrings(self, ctx: Python3Parser.StringsContext): + return self.visitChildren(ctx) + + +del Python3Parser diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/PythonAstVisitor.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/PythonAstVisitor.py new file mode 100644 index 000000000..e8bd60bf1 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/PythonAstVisitor.py @@ -0,0 +1,134 @@ +from antlr4 import * +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Lexer import Python3Lexer +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3Parser import Python3Parser +from module_programming_winnowing.convert_code_to_ast.languages.python.Python3ParserVisitor import Python3ParserVisitor + + +class RemoveVariableNames(Python3ParserVisitor): + def visitAtom(self, ctx): + name_ctx = ctx.name() + if name_ctx: + token = name_ctx.getToken(Python3Parser.NAME, 0) + if token: + token.text = 'x' + return self.visitChildren(ctx) + + +class CustomPythonVisitor(Python3ParserVisitor): + def __init__(self): + self.loop_count = 0 + self.if_count = 0 + self.method_count = 0 + + def visitWhile_stmt(self, ctx): + self.loop_count += 1 + return self.visitChildren(ctx) + + def visitFor_stmt(self, ctx): + self.loop_count += 1 + return self.visitChildren(ctx) + + def visitIf_stmt(self, ctx): + self.if_count += 1 + return self.visitChildren(ctx) + + def visitFuncdef(self, ctx): + self.method_count += 1 + return self.visitChildren(ctx) + + +def mutate(source_code: str): + input_stream = InputStream(source_code) + lexer = Python3Lexer(input_stream) + stream = CommonTokenStream(lexer) + parser = Python3Parser(stream) + tree = parser.file_input() + + # Transform the AST + transformer = RemoveVariableNames() + transformer.visit(tree) + + return tree + + +level0 = [] +level1 = [] +level2 = [] + + +def find_levels(node, parser, level=0): + if level == 0: + level0.append(node.toStringTree(recog=parser)) + elif level == 1: + level1.append(node.toStringTree(recog=parser)) + elif level == 2: + level2.append(node.toStringTree(recog=parser)) + + for child in node.getChildren(): + if isinstance(child, ParserRuleContext): + find_levels(child, parser, level=level + 1) + + +def get_children(node, parser): + parent = node.toStringTree(recog=parser) + children = [child.toStringTree(recog=parser) if isinstance(child, ParserRuleContext) else child.getText() for child + in node.getChildren()] + return parent, children + + +parents1 = [] +parents2 = [] +children1 = [] +children2 = [] + + +def get_parent_children_relation(root, parser, level=0): + for child in root.getChildren(): + if isinstance(child, ParserRuleContext): + p, c = get_children(child, parser) + if level == 0: + parents1.append(p) + children1.append(c) + elif level == 1: + parents2.append(p) + children2.append(c) + get_parent_children_relation(child, parser, level + 1) + + +def analyze(source_code: str): + input_tree = mutate(source_code) + + parser = Python3Parser(CommonTokenStream(Python3Lexer(InputStream(source_code)))) + + visitor = CustomPythonVisitor() + visitor.visit(input_tree) + count_l = visitor.loop_count + count_if = visitor.if_count + count_f = visitor.method_count + + # Finden der Ebenen + find_levels(input_tree, parser) + + # Eltern-Kind-Beziehungen finden + get_parent_children_relation(input_tree, parser) + + counts = [count_l, count_if, count_f] + print(counts) + levels = [level0, level1, level2] + i = 1 + for lev in levels: + print("Level", i) + print(lev) + i += 1 + + return counts, levels + + +if __name__ == "__main__": + code = """ + def sum_first_ten(): + sum = 0 + for i in range (11): + sum += i + return sum""" + counts, levels = analyze(code) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/languages/python/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/method_node.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/method_node.py new file mode 100644 index 000000000..5f2bd6d2b --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/convert_code_to_ast/method_node.py @@ -0,0 +1,15 @@ +from dataclasses import dataclass +from typing import Any + + +#TODO Extract the datanode to here +@dataclass +class MethodNode: + line_start: int + line_end: int + source_code: str + name: str + ast: Any + + def __str__(self): + return f"MethodNode({self.name}, lines {self.line_start} to {self.line_end})" diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/batch.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/batch.py new file mode 100644 index 000000000..8058e47c2 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/batch.py @@ -0,0 +1,12 @@ +from itertools import islice, zip_longest + +# https://docs.python.org/3/library/itertools.html#itertools-recipes +def batched(iterable, n): + """Batch data into lists of length n. The last batch may be shorter.""" + # batched('ABCDEFG', 3) --> ABC DEF G + it = iter(iterable) + while True: + batch = list(islice(it, n)) + if not batch: + return + yield batch \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/code_similarity_computer.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/code_similarity_computer.py new file mode 100644 index 000000000..ca434c4d6 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/code_similarity_computer.py @@ -0,0 +1,133 @@ +from dataclasses import dataclass +from typing import Dict, Tuple, Union, cast +from module_programming_winnowing.feedback_suggestions.winnowing import calculate_similarity + +from module_programming_winnowing.convert_code_to_ast.languages.python.PythonAstVisitor import analyze as analyze_python +from module_programming_winnowing.convert_code_to_ast.languages.java.JavaAstVisitor import analyze as analyze_java + + +def remove_whitespace(s: str) -> str: + return "".join(s.split()) + + +def cache_key(code1: str, code2: str) -> Tuple[str, str]: + return remove_whitespace(code1), remove_whitespace(code2) + + +@dataclass +class UncomputedComparison: + code1: str + counts1: list[int] + levels1: list[list] + code2: str + counts2: list[int] + levels2: list[list] + + +@dataclass +class SimilarityScore: + similarity_score: float + + def __repr__(self): + return f"SimilarityScore(similarity_score={self.similarity_score})" + + def __str__(self): + return f"similarity_score={self.similarity_score}" + + +def create_ast_level_and_counts(code: str, programming_language: str): + if programming_language == "java": + # return analyze_java(code) + return + if programming_language == "python": + return analyze_python(code) + raise ValueError(f"Unsupported programming language: {programming_language}") + + +class CodeSimilarityComputer: + """ + Takes multiple pairs of code snippets and their corresponding tree representations, + and computes their similarity scores using AP-TED. It also caches the similarity + scores for faster computation and auto-assigns a similarity of 0.0 distance to + identical code snippets (ignoring whitespace). + """ + + def __init__(self) -> None: + # keys are with all whitespace removed + self.cache: Dict[Tuple[str, str], Union[SimilarityScore, UncomputedComparison]] = {} + + def add_comparison(self, code1: str, code2: str, programming_language: str): + """Add a comparison to later compute.""" + key = cache_key(code1, code2) + if key in self.cache: + return + if remove_whitespace(code1) == remove_whitespace(code2): + # identical code snippets in almost all cases + self.cache[key] = SimilarityScore(100.0) # perfect match (Similarity Score = 100) + else: + counts1, level1 = create_ast_level_and_counts(code1, programming_language) + counts2, level2 = create_ast_level_and_counts(code2, programming_language) + self.cache[key] = UncomputedComparison(code1, counts1, level1, code2, counts2, level2) + + def compute_similarity_scores(self): + """Compute the similarity scores for all comparisons.""" + wanted_comparisons = [] + + for value in self.cache.values(): + if isinstance(value, UncomputedComparison): + wanted_comparisons.append((value.code1, value.counts1, value.levels1, value.code2, value.counts2, + value.levels2)) + if not wanted_comparisons: + return + + for code1, counts1, levels1, code2, counts2, levels2 in wanted_comparisons: + similarity_score = calculate_similarity(counts1, levels1, counts2, levels2) + self.cache[cache_key(code1, code2)] = SimilarityScore(similarity_score) + + def get_similarity_score(self, code1: str, code2: str) -> SimilarityScore: + """Get the similarity score for a comparison.""" + key = cache_key(code1, code2) + if key not in self.cache: + raise ValueError("Similarity score not yet computed. Call compute_similarity_scores() first.") + if isinstance(self.cache[key], UncomputedComparison): + raise ValueError("Similarity score not yet computed. Call compute_similarity_scores() first.") + return cast(SimilarityScore, self.cache[key]) + + +# TODO: These are test functions; to be deleted when productive later +def test_code_similarity_computer(): + # Beispiel-Code-Snippets + code1 = """ + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, wooorld!"); + int feld = 4; + int test = 5; + + }""" + code2 = """ + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, wooorld!"); + int test = 5; + + }""" + + # Initialisiere den CodeSimilarityComputer + sim_computer = CodeSimilarityComputer() + + # Füge die Code-Vergleiche hinzu + sim_computer.add_comparison(code1, code2, "java") + + # Berechne die Ähnlichkeitspunkte + sim_computer.compute_similarity_scores() + + # Hole die Ähnlichkeitspunkte + similarity = sim_computer.get_similarity_score(code1, code2) + + # Ausgabe der Ähnlichkeit + print(f"Similarity score between code1 and code2: {similarity.similarity_score}") + + +if __name__ == "__main__": + test_code_similarity_computer() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/feedback_suggestions.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/feedback_suggestions.py new file mode 100644 index 000000000..94e7048eb --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/feedback_suggestions.py @@ -0,0 +1,198 @@ +from typing import Dict, Iterable, List, Optional +import gc + +from pydantic import BaseModel, Field + +from athena.helpers.programming.feedback import format_feedback_title +from athena.logger import logger +from athena.programming import Feedback, Submission +from module_programming_winnowing.convert_code_to_ast.extract_method_and_ast import parse +from module_programming_winnowing.convert_code_to_ast.method_node import MethodNode +from module_programming_winnowing.feedback_suggestions.batch import batched +from module_programming_winnowing.feedback_suggestions.code_similarity_computer import CodeSimilarityComputer + +SIMILARITY_THRESHOLD = 95 # TODO Needs to be adapted + + +def make_feedback_suggestion_from(feedback: Feedback, submission: Submission, + submission_method: MethodNode) -> Feedback: + suggestion = feedback.copy(deep=True) + # add meta information for debugging + suggestion.meta["original_feedback_id"] = feedback.id + suggestion.meta["original_method_code"] = suggestion.meta["method_code"] + suggestion.meta["method_code"] = submission_method.source_code + # adjust for submission + suggestion.submission_id = submission.id + suggestion.line_start = submission_method.line_start + suggestion.line_end = submission_method.line_end + # regenerate title from filename and line numbers + suggestion.title = format_feedback_title(suggestion.file_path, suggestion.line_start, suggestion.line_end) + # remove ID + suggestion.id = None + return suggestion + +class CodeComparisonWithCorrespondingSuggestions: + """A pair of code snippets with a corresponding suggestions if their similarity is high enough.""" + + def __init__(self, code1: str, code2: str, suggestion: Feedback) -> None: + self.code1 = code1 + self.code2 = code2 + self.suggestion = suggestion + + def has_same_code(self, other) -> bool: + return self.code1 == other.code1 and self.code2 == other.code2 + + +def group_feedbacks_by_file_path(feedbacks: List[Feedback]) -> Dict[str, List[Feedback]]: + """Groups feedbacks by file path for faster access.""" + feedbacks_by_file_path: Dict[str, List[Feedback]] = {} + for feedback in feedbacks: + if feedback.file_path not in feedbacks_by_file_path: + feedbacks_by_file_path[str(feedback.file_path)] = [] + feedbacks_by_file_path[str(feedback.file_path)].append(feedback) + return feedbacks_by_file_path + + +def create_comparisons_with_suggestions( + submissions: List[Submission], + feedbacks: List[Feedback], + programming_language: str, +) -> Iterable[CodeComparisonWithCorrespondingSuggestions]: + """Creates code comparisons and corresponding feedback suggestions as a generator.""" + if len(feedbacks) == 0: + return + # group feedbacks by file path for faster access + logger.debug("Grouping %d feedbacks by file path", len(feedbacks)) + feedbacks_by_file_path = group_feedbacks_by_file_path(feedbacks) + for submission in submissions: + for file_path, file_feedbacks in feedbacks_by_file_path.items(): + # read file from submission + try: + code = submission.get_code(file_path) + except KeyError: # KeyError is for when the file is not in the zip + logger.debug("File %s not found in submission %d.", file_path, submission.id) + continue + except UnicodeDecodeError: + logger.warning("File %s in submission %d is not UTF-8 encoded.", file_path, submission.id) + continue + # get all methods in the file of the submission + submission_methods = parse(code, programming_language) + # get all feedbacks that match methods in the submission + for s_method in submission_methods: + for feedback in file_feedbacks: + if feedback.submission_id == submission.id: + # don't compare feedback with itself + continue + if feedback.meta["method_name"] == s_method.name: + # compare code (later) and add feedback as a possible suggestion (also later) + suggestion = make_feedback_suggestion_from(feedback, submission, s_method) + yield CodeComparisonWithCorrespondingSuggestions(s_method.source_code, + feedback.meta["method_code"], suggestion) + + +def create_feedback_suggestions( + submissions: List[Submission], + feedbacks: List[Feedback], + programming_language: str, +) -> List[Feedback]: + """ + Get a list of all submissions that the given feedback could also apply to (similar code in same method). + Then generate feedback suggestions for those submissions. + """ + if len(feedbacks) == 0: + return [] # nothing to do + + suggestions: List[Feedback] = [] + + # create code comparisons and corresponding feedback suggestions in batches for less memory usage + for idx, comparisons_with_suggestions in enumerate( + batched(create_comparisons_with_suggestions(submissions, feedbacks, programming_language), 128)): + # compute similarity scores for all comparisons at once + sim_computer = CodeSimilarityComputer() + for s_comp in comparisons_with_suggestions: + sim_computer.add_comparison(s_comp.code1, s_comp.code2, programming_language) + logger.debug("Computing similarity scores for %d code comparisons (batch #%d)", + len(comparisons_with_suggestions), idx) + sim_computer.compute_similarity_scores() # compute all at once, enables vectorization + + # create suggestions + for s_comp in comparisons_with_suggestions: + similarity = sim_computer.get_similarity_score(s_comp.code1, s_comp.code2) + if similarity.similarity_score <= SIMILARITY_THRESHOLD: + # found similar code -> create feedback suggestion + logger.info("Found similar code wih similarity of %d", similarity.similarity_score) + # add meta information for debugging + s_comp.suggestion.meta["similarity_score"] = similarity.similarity_score + # add to suggestions + suggestions.append(s_comp.suggestion) + # clear memory to prevent being killed by OOM killer + del sim_computer + del comparisons_with_suggestions + gc.collect() + + return suggestions + + +# TODO From here on these are just testing functions below: +def extract_methods_from_code(code, programming_language): + # Parsing und AST-Erstellung + methods = parse(code, programming_language) + + # Ausgabe der extrahierten Methoden + print("Extrahierte Methoden:") + for method in methods: + print(f"Method Name: {method.name}") + print(f"Method Source Code:\n{method.source_code}\n") + print(f"Method Start Line: {method.line_start}, End Line: {method.line_end}\n") + + return methods + + +def compare_methods(methods1, methods2, programming_language): + # Initialisiere den CodeSimilarityComputer + sim_computer = CodeSimilarityComputer() + + # Füge die Code-Vergleiche hinzu + for method1 in methods1: + for method2 in methods2: + sim_computer.add_comparison(method1.source_code, method2.source_code, programming_language) + + # Berechne die Ähnlichkeitspunkte + sim_computer.compute_similarity_scores() + + # Ausgabe der Ähnlichkeitspunkte + for method1 in methods1: + for method2 in methods2: + similarity = sim_computer.get_similarity_score(method1.source_code, method2.source_code) + print(f"Similarity score between {method1.name} and {method2.name}: {similarity.similarity_score}") + + +def test_ast_creation_and_code_similarity(): + code1 = """ + def sum_first_ten(): + sum = 0 + return sum + """ + + code2 = """ + def sum_first_ten(): + sum = 0 + for i in range(11): + sum += i + return sum + """ + + programming_language = "python" + + print("Extracting methods from code1...") + methods1 = extract_methods_from_code(code1, programming_language) + + print("Extracting methods from code2...") + methods2 = extract_methods_from_code(code2, programming_language) + + print("Comparing methods from code1 and code2...") + compare_methods(methods1, methods2, programming_language) + + +if __name__ == "__main__": + test_ast_creation_and_code_similarity() diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_overlapping.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_overlapping.py new file mode 100644 index 000000000..03c88e7b2 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_overlapping.py @@ -0,0 +1,40 @@ +""" +Feedback suggestions can overlap each other, which is not ideal. +This module removes overlapping suggestions. +""" + +from typing import List + +from athena.programming import Feedback + + +def is_overlapping(feedback1: Feedback, feedback2: Feedback) -> bool: + """Returns whether the two given feedbacks overlap.""" + if feedback1.file_path != feedback2.file_path: + # feedback in different files + return False + if feedback1.line_start is None or feedback2.line_start is None or feedback1.line_end is None or feedback2.line_end is None: + # unreferenced feedback (both start and end are None because of Schema validation for line_end) + return False + if feedback1.line_start > feedback2.line_end: + return False + if feedback2.line_start > feedback1.line_end: + return False + return True + + +def filter_overlapping_suggestions(suggestions: List[Feedback]) -> List[Feedback]: + """Filters out overlapping suggestions we don't want to suggest to tutors. + + Arguments: + suggestions {list} -- List of suggestions to filter + """ + # sort suggestions by similarity_score to keep the most accurate ones + suggestions.sort(key=lambda s: s.meta.get("similarity_score", 0), reverse=True) + # skip suggestions if they overlap with a suggestion that was already added + added_suggestions: List[Feedback] = [] + for suggestion in suggestions: + if any(is_overlapping(suggestion, added_suggestion) for added_suggestion in added_suggestions): + continue + added_suggestions.append(suggestion) + return added_suggestions diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_suspicious.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_suspicious.py new file mode 100644 index 000000000..32827ed63 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/remove_suspicious.py @@ -0,0 +1,47 @@ +""" +When evaluating Winnowing, we found the following problems with the suggestions: +(1) Sometimes, there was a feedback on something banal like a getter, which was actually meant for another method. + This caused suggestions for almost all the other submissions, which were not helpful. + We therefore classify a suggestion as "suspicious" if it affects too many other submissions (> 10% and > 2). +(2) However, this would also sometimes classify a suggestion as suspicious if it is actually helpful. + Therefore, we make a suggestion non-supicious if there are at least 3 other suggestions for the same method. + This makes a mistake like described above unlikely. +(3) Suggestions are also non-suspicious if they include words that hint at other parts of the code, like + "again", "consequential error", "previous", "later", "earlier", "above", "below" and German equivalents of these words. +""" + +from typing import Dict, List, cast + +from athena.programming import Feedback + + +def filter_suspicious(suggestions: List[Feedback], n_submissions: int) -> List[Feedback]: + """ + Filters out suspicious suggestions we don't want to suggest to tutors. + suggestions: List of suggestions to filter + n_submissions: Number of submissions for the exercise + """ + suspicious: Dict[int, bool] = {} # feedback id: is suspicious + # (1) classify suggestions as suspicious if they affect too many other submissions + for suggestion in suggestions: + n_feedback_suggestions = suggestion.meta.get("n_feedback_suggestions", 999999) + if n_feedback_suggestions > 2 and n_feedback_suggestions > 0.1 * n_submissions: + suspicious[cast(int, suggestion.id)] = True + # find all other suggestions for the same method + other_suggestions: List[Feedback] = [] + for other_suggestion in suggestions: + if other_suggestion.id == suggestion.id: + continue + if other_suggestion.file_path == suggestion.file_path and other_suggestion.meta.get("method_name") == suggestion.meta.get("method_name"): + other_suggestions.append(other_suggestion) + # (2) make suggestion non-suspicious if there are at least 3 other suggestions for the same method + if len(other_suggestions) >= 3: + suspicious[cast(int, suggestion.id)] = False + # (3) classify suggestions as suspicious if they include words that hint at other parts of the code + suspicious_words = ["again", "consequential error", "previous", "later", "earlier", "above", "below"] + for suggestion in suggestions: + for word in suspicious_words: + if word in str(suggestion.description): + suspicious[cast(int, suggestion.id)] = True + # filter out suspicious suggestions + return list(filter(lambda s: not suspicious.get(cast(int, s.id), False), suggestions)) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/winnowing.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/winnowing.py new file mode 100644 index 000000000..511a9c5e2 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/feedback_suggestions/winnowing.py @@ -0,0 +1,170 @@ +# This implementation has been adapted from the algorithm provided in the repository: +# https://github.com/prateksha/Source-Code-Similarity-Measurement/blob/master/generate_ast.py +# The original code has been modified to fit the specific requirements of this project, +# including changes in the caching mechanism and additional functionality to handle +# both Java and Python code (and potentially further programming languages) similarity measurements. + + +import nltk +import math +from nltk.util import ngrams +from collections import Counter +from statistics import mean + +def cosine_similarity(l1, l2): + vec1 = Counter(l1) + vec2 = Counter(l2) + + intersection = set(vec1.keys()) & set(vec2.keys()) + + numerator = sum([vec1[x] * vec2[x] for x in intersection]) + + sum1 = sum([vec1[x] ** 2 for x in vec1.keys()]) + sum2 = sum([vec2[x] ** 2 for x in vec2.keys()]) + denominator = math.sqrt(sum1) * math.sqrt(sum2) + + if not denominator: + return 0.0 + + return float(numerator) / denominator + + +# Could be changed to include rightmost minimum too +def get_min(get_key=lambda x: x): + def rightmost_minimum(l): + minimum = float('inf') + minimum_index = -1 + pos = 0 + + while pos < len(l): + if get_key(l[pos]) < minimum: + minimum = get_key(l[pos]) + minimum_index = pos + pos += 1 + + return l[minimum_index] + + return rightmost_minimum + + +# Have used the inbuilt hash function (Should try a self defined rolling hash function) +def winnowing(kgrams, k, t): + modified_min_func = get_min(lambda key_value: key_value[0]) + + document_fingerprints = [] + + # print(kgrams) + hash_table = [(hash(kgrams[i]), i) for i in range(len(kgrams))] + # print(len(hash_table)) + + window_length = t - k + 1 + window_begin = 0 + window_end = window_length + + minimum_hash = None + + while (window_end < len(hash_table)): + window = hash_table[window_begin:window_end] + window_minimum = modified_min_func(window) + + if (minimum_hash != window_minimum): + # print(window_minimum) + document_fingerprints.append(window_minimum[0]) # not taking positions into consideration + minimum_hash = window_minimum + + window_begin = window_begin + 1 + window_end = window_end + 1 + + return document_fingerprints + + +def generate_kgrams(data, k): + for text in data: + token = nltk.word_tokenize(text) + kgrams = ngrams(token, k) + lst_kgrams = list(kgrams) + # print("Kgrams : ", lst_kgrams) + return lst_kgrams + + +# only conversion to lowercase for now +def preprocess(document): + preprocessed_document = [] + for item in document: + item = item.lower() + preprocessed_document.append(item) + return preprocessed_document + + +def generate_fingerprints(data, k, t): + preprocessed_data = preprocess(data) + kgrams = generate_kgrams(preprocessed_data, k) + # print(len(kgrams)) + document_fingerprints = winnowing(kgrams, k, t) + return document_fingerprints + + +def calculate_similarity(counts1, levels1, counts2, levels2): + lev0s = [] + lev1s = [] + lev2s = [] + + for i in range(10): + fingerprints1_0 = generate_fingerprints(levels1[0], 13, 17) + fingerprints2_0 = generate_fingerprints(levels2[0], 13, 17) + cosine_similarity_lev0 = cosine_similarity(fingerprints1_0, fingerprints2_0) + lev0s.append(cosine_similarity_lev0) + + fingerprints1_1 = generate_fingerprints(levels1[1], 13, 17) + fingerprints2_1 = generate_fingerprints(levels2[1], 13, 17) + cosine_similarity_lev1 = cosine_similarity(fingerprints1_1, fingerprints2_1) + lev1s.append(cosine_similarity_lev1) + + fingerprints1_2 = generate_fingerprints(levels1[2], 13, 17) + fingerprints2_2 = generate_fingerprints(levels2[2], 13, 17) + cosine_similarity_lev2 = cosine_similarity(fingerprints1_2, fingerprints2_2) + lev2s.append(cosine_similarity_lev2) + + final_cosine_similarity_lev0 = round(mean(lev0s), 2) + final_cosine_similarity_lev1 = round(mean(lev1s), 2) + final_cosine_similarity_lev2 = round(mean(lev2s), 2) + + normalization_score = 0 + t = 0 + for c in range(3): + x = counts1[c] + y = counts2[c] + if (x + y) != 0: + t = t + 1 + if x > y: + s = 1 - ((x - y) / (x + y)) + else: + s = 1 - ((y - x) / (x + y)) + normalization_score += (10 * s) + + if t != 0: + normalization_score = normalization_score / (t * 10) + total_similarity_score_win = ((0.5 * final_cosine_similarity_lev0) + (0.3 * final_cosine_similarity_lev1) + ( + 0.2 * final_cosine_similarity_lev2)) + normalization_score = normalization_score + final_score = (total_similarity_score_win * 60) + (normalization_score * 40) + print("Similarity score = : \n", final_score) + else: + total_similarity_score_win = ((0.5 * final_cosine_similarity_lev0) + (0.3 * final_cosine_similarity_lev1) + ( + 0.2 * final_cosine_similarity_lev2)) + final_score = (total_similarity_score_win * 100) + + return final_score + + +if __name__ == "__main__": + from module_programming_winnowing.convert_code_to_ast.languages.python.PythonAstVisitor import analyze + + file_path1 = "1.py" #TODO test with string + file_path2 = "test6b.py" #TODO Test with String + + counts1, levels1 = analyze(file_path1) + counts2, levels2 = analyze(file_path2) + + similarity_score = calculate_similarity(counts1, levels1, counts2, levels2) + print("Similarity score:", similarity_score) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/1.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/1.py new file mode 100644 index 000000000..13e84ece9 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/1.py @@ -0,0 +1,4 @@ +a = 5 +for i in range(a): + for j in range(i): + print("Hi") \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/__init__.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/example_simple_lang.sl b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/example_simple_lang.sl new file mode 100644 index 000000000..a183a1c0a --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/example_simple_lang.sl @@ -0,0 +1,15 @@ +def foo(x, y) do + if x + y > 10 then + z = x + y + endif +endef + +for i in 0 do + while i < 5 do + i = i + 1 + endwhile +endfor + +x = 5 +y = 10 +result = x * y diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/nested_for.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/nested_for.py new file mode 100644 index 000000000..53cc9f233 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/nested_for.py @@ -0,0 +1,3 @@ +for i in range(5): + for j in range(5): + print(i*j) \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1.java b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1.java new file mode 100644 index 000000000..f62c926bc --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1.java @@ -0,0 +1,11 @@ + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, wooorld!"); + int test = 5; + for(int i = 0; i < 5; i++) { + //Das ist ein Kommentar + String foooler = "Test"; + System.out.println(i); + } + } + } \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1a.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1a.py new file mode 100644 index 000000000..cebbe482f --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1a.py @@ -0,0 +1,7 @@ +import math + +p1=input() +p2=input() +p1 = int(p1) +p2 = int(p2) +print (math.sqrt((p1*p1)+(p2*p2))) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1c.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1c.py new file mode 100644 index 000000000..ca3516805 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test1c.py @@ -0,0 +1,10 @@ +import math + +x = input() +y = input() +x = int(x) +y = int(y) +# Square and add terms +res = math.sqrt(pow(x, 2)+pow(y, 2)) + +print (res) diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2.java b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2.java new file mode 100644 index 000000000..2b6873bc4 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2.java @@ -0,0 +1,11 @@ + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, world!"); + int test = 5; + for(int i = 0; i < 10; i++) { + //Das ist ein Kommentar + String foooler = "Test"; + System.out.println(i); + } + } + } \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2a.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2a.py new file mode 100644 index 000000000..7eec08e3a --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2a.py @@ -0,0 +1,12 @@ +a=input() +a=int(a) + + +if(5<=a<18): + print ("child") +elif(a>=18): + print ("adult") +elif(a<5): + print ("infant") + + diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2b.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2b.py new file mode 100644 index 000000000..df18531b7 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test2b.py @@ -0,0 +1,9 @@ +x=input() +x=int(x) + +if(x<5): + print ("infant") +elif(5<=x<18): + print ("child") +elif(x>=18): + print ("adult") diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3a.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3a.py new file mode 100644 index 000000000..fa828bf74 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3a.py @@ -0,0 +1,5 @@ +a=input() +a=int(a) + +for i in range(a): + print ("Hello world!") diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3b.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3b.py new file mode 100644 index 000000000..7767e2386 --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test3b.py @@ -0,0 +1,6 @@ +a=input() +a=int(a) +count=0 +while(count= 1900 and year <= 100000: + if year % 4 == 0: + leap = True + if year % 100 == 0: + leap = False + if year % 400 == 0: + leap = True + return leap diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8a.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8a.py new file mode 100644 index 000000000..96e3a41bf --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8a.py @@ -0,0 +1,10 @@ +a = input() +a = int(a) + + +if(5 <= a < 18): + print("child") +elif(a >= 18): + print("adult") +elif(a < 5): + print("infant") diff --git a/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8b.py b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8b.py new file mode 100644 index 000000000..3c8a12f3f --- /dev/null +++ b/modules/programming/module_programming_winnowing/module_programming_winnowing/test_codes/test8b.py @@ -0,0 +1,12 @@ +a = input() +a = int(a) + + +if(5 <= a < 18): + print("child") +elif(a >= 18): + print("adult") +elif(a < 5): + print("infant") + +print("Finish") \ No newline at end of file diff --git a/modules/programming/module_programming_winnowing/poetry.lock b/modules/programming/module_programming_winnowing/poetry.lock new file mode 100644 index 000000000..5cbf8aeb1 --- /dev/null +++ b/modules/programming/module_programming_winnowing/poetry.lock @@ -0,0 +1,1197 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +description = "ANTLR 4.13.2 runtime for Python 3" +optional = false +python-versions = "*" +files = [ + {file = "antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8"}, + {file = "antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916"}, +] + +[[package]] +name = "anyio" +version = "4.6.2.post1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +files = [ + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "astroid" +version = "3.3.5" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.9.0" +files = [ + {file = "astroid-3.3.5-py3-none-any.whl", hash = "sha256:a9d1c946ada25098d790e079ba2a1b112157278f3fb7e718ae6a9252f5835dc8"}, + {file = "astroid-3.3.5.tar.gz", hash = "sha256:5cfc40ae9f68311075d27ef68a4841bdc5cc7f6cf86671b49f00607d30188e2d"}, +] + +[[package]] +name = "athena" +version = "1.0.0" +description = "This is a helper module for easier development of Athena modules. It provides communication functionality with the Assessment Module manager, as well as helper functions for storage." +optional = false +python-versions = "3.11.*" +files = [] +develop = false + +[package.dependencies] +fastapi = "^0.109.1" +gitpython = "^3.1.41" +httpx = "^0.24.1" +psycopg2 = "^2.9.9" +sqlalchemy = {version = "^2.0.21", extras = ["mypy"]} +uvicorn = "^0.23.0" + +[package.source] +type = "git" +url = "https://github.com/ls1intum/Athena.git" +reference = "bbb2bb0" +resolved_reference = "bbb2bb02480496362647205ab517f202673e9bb2" +subdirectory = "athena" + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "dill" +version = "0.3.9" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "dodgy" +version = "0.2.1" +description = "Dodgy: Searches for dodgy looking lines in Python code" +optional = false +python-versions = "*" +files = [ + {file = "dodgy-0.2.1-py3-none-any.whl", hash = "sha256:51f54c0fd886fa3854387f354b19f429d38c04f984f38bc572558b703c0542a6"}, + {file = "dodgy-0.2.1.tar.gz", hash = "sha256:28323cbfc9352139fdd3d316fa17f325cc0e9ac74438cbba51d70f9b48f86c3a"}, +] + +[[package]] +name = "fastapi" +version = "0.109.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, + {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.36.3,<0.37.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "flake8" +version = "7.1.1" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, + {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "flake8-polyfill" +version = "1.0.2" +description = "Polyfill package for Flake8 plugins" +optional = false +python-versions = "*" +files = [ + {file = "flake8-polyfill-1.0.2.tar.gz", hash = "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda"}, + {file = "flake8_polyfill-1.0.2-py2.py3-none-any.whl", hash = "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9"}, +] + +[package.dependencies] +flake8 = "*" + +[[package]] +name = "gitdb" +version = "4.0.11" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.43" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] + +[[package]] +name = "greenlet" +version = "3.1.1" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, + {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, + {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, + {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, + {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, + {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, + {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, + {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, + {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, + {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, + {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, + {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, + {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, + {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "0.17.3" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, + {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, +] + +[package.dependencies] +anyio = ">=3.0,<5.0" +certifi = "*" +h11 = ">=0.13,<0.15" +sniffio = "==1.*" + +[package.extras] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "httpx" +version = "0.24.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, + {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, +] + +[package.dependencies] +certifi = "*" +httpcore = ">=0.15.0,<0.18.0" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "joblib" +version = "1.4.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy" +version = "1.13.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nltk" +version = "3.9.1" +description = "Natural Language Toolkit" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, + {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, +] + +[package.dependencies] +click = "*" +joblib = "*" +regex = ">=2021.8.3" +tqdm = "*" + +[package.extras] +all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] +corenlp = ["requests"] +machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pep8-naming" +version = "0.10.0" +description = "Check PEP-8 naming conventions, plugin for flake8" +optional = false +python-versions = "*" +files = [ + {file = "pep8-naming-0.10.0.tar.gz", hash = "sha256:f3b4a5f9dd72b991bf7d8e2a341d2e1aa3a884a769b5aaac4f56825c1763bf3a"}, + {file = "pep8_naming-0.10.0-py2.py3-none-any.whl", hash = "sha256:5d9f1056cb9427ce344e98d1a7f5665710e2f20f748438e308995852cfa24164"}, +] + +[package.dependencies] +flake8-polyfill = ">=1.0.2,<2" + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "prospector" +version = "1.13.3" +description = "Prospector is a tool to analyse Python code by aggregating the result of other tools." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "prospector-1.13.3-py3-none-any.whl", hash = "sha256:e7261c222ba54bc8aef8c9e31b2dcf5ed2a656c9b76fc0cceab294cd5ec3db6b"}, + {file = "prospector-1.13.3.tar.gz", hash = "sha256:36ccb13f69aa27c5c4682afd4cc46219b9e0c80723e30dc64ff30c71f7b877a1"}, +] + +[package.dependencies] +dodgy = ">=0.2.1,<0.3.0" +GitPython = ">=3.1.27,<4.0.0" +mccabe = ">=0.7.0,<0.8.0" +packaging = "*" +pep8-naming = ">=0.3.3,<=0.10.0" +pycodestyle = ">=2.9.0" +pydocstyle = ">=2.0.0" +pyflakes = ">=2.2.0" +pylint = ">=3.0" +pylint-celery = "0.3" +pylint-django = ">=2.6.1" +pylint-flask = "0.6" +PyYAML = "*" +requirements-detector = ">=1.3.2" +setoptconf-tmp = ">=0.3.1,<0.4.0" +toml = ">=0.10.2,<0.11.0" + +[package.extras] +with-bandit = ["bandit (>=1.5.1)"] +with-everything = ["bandit (>=1.5.1)", "mypy (>=0.600)", "pyright (>=1.1.3)", "pyroma (>=2.4)", "ruff", "vulture (>=1.5)"] +with-mypy = ["mypy (>=0.600)"] +with-pyright = ["pyright (>=1.1.3)"] +with-pyroma = ["pyroma (>=2.4)"] +with-ruff = ["ruff"] +with-vulture = ["vulture (>=1.5)"] + +[[package]] +name = "psycopg2" +version = "2.9.10" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "psycopg2-2.9.10-cp310-cp310-win32.whl", hash = "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716"}, + {file = "psycopg2-2.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a"}, + {file = "psycopg2-2.9.10-cp311-cp311-win32.whl", hash = "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2"}, + {file = "psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4"}, + {file = "psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067"}, + {file = "psycopg2-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e"}, + {file = "psycopg2-2.9.10-cp39-cp39-win32.whl", hash = "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b"}, + {file = "psycopg2-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442"}, + {file = "psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11"}, +] + +[[package]] +name = "pycodestyle" +version = "2.12.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, +] + +[[package]] +name = "pydantic" +version = "1.10.17" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.17-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fa51175313cc30097660b10eec8ca55ed08bfa07acbfe02f7a42f6c242e9a4b"}, + {file = "pydantic-1.10.17-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7e8988bb16988890c985bd2093df9dd731bfb9d5e0860db054c23034fab8f7a"}, + {file = "pydantic-1.10.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371dcf1831f87c9e217e2b6a0c66842879a14873114ebb9d0861ab22e3b5bb1e"}, + {file = "pydantic-1.10.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4866a1579c0c3ca2c40575398a24d805d4db6cb353ee74df75ddeee3c657f9a7"}, + {file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:543da3c6914795b37785703ffc74ba4d660418620cc273490d42c53949eeeca6"}, + {file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7623b59876f49e61c2e283551cc3647616d2fbdc0b4d36d3d638aae8547ea681"}, + {file = "pydantic-1.10.17-cp310-cp310-win_amd64.whl", hash = "sha256:409b2b36d7d7d19cd8310b97a4ce6b1755ef8bd45b9a2ec5ec2b124db0a0d8f3"}, + {file = "pydantic-1.10.17-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fa43f362b46741df8f201bf3e7dff3569fa92069bcc7b4a740dea3602e27ab7a"}, + {file = "pydantic-1.10.17-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2a72d2a5ff86a3075ed81ca031eac86923d44bc5d42e719d585a8eb547bf0c9b"}, + {file = "pydantic-1.10.17-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4ad32aed3bf5eea5ca5decc3d1bbc3d0ec5d4fbcd72a03cdad849458decbc63"}, + {file = "pydantic-1.10.17-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb4e741782e236ee7dc1fb11ad94dc56aabaf02d21df0e79e0c21fe07c95741"}, + {file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d2f89a719411cb234105735a520b7c077158a81e0fe1cb05a79c01fc5eb59d3c"}, + {file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db3b48d9283d80a314f7a682f7acae8422386de659fffaba454b77a083c3937d"}, + {file = "pydantic-1.10.17-cp311-cp311-win_amd64.whl", hash = "sha256:9c803a5113cfab7bbb912f75faa4fc1e4acff43e452c82560349fff64f852e1b"}, + {file = "pydantic-1.10.17-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:820ae12a390c9cbb26bb44913c87fa2ff431a029a785642c1ff11fed0a095fcb"}, + {file = "pydantic-1.10.17-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c1e51d1af306641b7d1574d6d3307eaa10a4991542ca324f0feb134fee259815"}, + {file = "pydantic-1.10.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e53fb834aae96e7b0dadd6e92c66e7dd9cdf08965340ed04c16813102a47fab"}, + {file = "pydantic-1.10.17-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e2495309b1266e81d259a570dd199916ff34f7f51f1b549a0d37a6d9b17b4dc"}, + {file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:098ad8de840c92ea586bf8efd9e2e90c6339d33ab5c1cfbb85be66e4ecf8213f"}, + {file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:525bbef620dac93c430d5d6bdbc91bdb5521698d434adf4434a7ef6ffd5c4b7f"}, + {file = "pydantic-1.10.17-cp312-cp312-win_amd64.whl", hash = "sha256:6654028d1144df451e1da69a670083c27117d493f16cf83da81e1e50edce72ad"}, + {file = "pydantic-1.10.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c87cedb4680d1614f1d59d13fea353faf3afd41ba5c906a266f3f2e8c245d655"}, + {file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11289fa895bcbc8f18704efa1d8020bb9a86314da435348f59745473eb042e6b"}, + {file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94833612d6fd18b57c359a127cbfd932d9150c1b72fea7c86ab58c2a77edd7c7"}, + {file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d4ecb515fa7cb0e46e163ecd9d52f9147ba57bc3633dca0e586cdb7a232db9e3"}, + {file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7017971ffa7fd7808146880aa41b266e06c1e6e12261768a28b8b41ba55c8076"}, + {file = "pydantic-1.10.17-cp37-cp37m-win_amd64.whl", hash = "sha256:e840e6b2026920fc3f250ea8ebfdedf6ea7a25b77bf04c6576178e681942ae0f"}, + {file = "pydantic-1.10.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bfbb18b616abc4df70591b8c1ff1b3eabd234ddcddb86b7cac82657ab9017e33"}, + {file = "pydantic-1.10.17-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebb249096d873593e014535ab07145498957091aa6ae92759a32d40cb9998e2e"}, + {file = "pydantic-1.10.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c209af63ccd7b22fba94b9024e8b7fd07feffee0001efae50dd99316b27768"}, + {file = "pydantic-1.10.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b40c9e13a0b61583e5599e7950490c700297b4a375b55b2b592774332798b7"}, + {file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c31d281c7485223caf6474fc2b7cf21456289dbaa31401844069b77160cab9c7"}, + {file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae5184e99a060a5c80010a2d53c99aee76a3b0ad683d493e5f0620b5d86eeb75"}, + {file = "pydantic-1.10.17-cp38-cp38-win_amd64.whl", hash = "sha256:ad1e33dc6b9787a6f0f3fd132859aa75626528b49cc1f9e429cdacb2608ad5f0"}, + {file = "pydantic-1.10.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e17c0ee7192e54a10943f245dc79e36d9fe282418ea05b886e1c666063a7b54"}, + {file = "pydantic-1.10.17-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cafb9c938f61d1b182dfc7d44a7021326547b7b9cf695db5b68ec7b590214773"}, + {file = "pydantic-1.10.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95ef534e3c22e5abbdbdd6f66b6ea9dac3ca3e34c5c632894f8625d13d084cbe"}, + {file = "pydantic-1.10.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d96b8799ae3d782df7ec9615cb59fc32c32e1ed6afa1b231b0595f6516e8ab"}, + {file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ab2f976336808fd5d539fdc26eb51f9aafc1f4b638e212ef6b6f05e753c8011d"}, + {file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8ad363330557beac73159acfbeed220d5f1bfcd6b930302a987a375e02f74fd"}, + {file = "pydantic-1.10.17-cp39-cp39-win_amd64.whl", hash = "sha256:48db882e48575ce4b39659558b2f9f37c25b8d348e37a2b4e32971dd5a7d6227"}, + {file = "pydantic-1.10.17-py3-none-any.whl", hash = "sha256:e41b5b973e5c64f674b3b4720286ded184dcc26a691dd55f34391c62c6934688"}, + {file = "pydantic-1.10.17.tar.gz", hash = "sha256:f434160fb14b353caf634149baaf847206406471ba70e64657c1e8330277a991"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pydocstyle" +version = "6.3.0" +description = "Python docstring style checker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, +] + +[package.dependencies] +snowballstemmer = ">=2.2.0" + +[package.extras] +toml = ["tomli (>=1.2.3)"] + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pylint" +version = "3.3.2" +description = "python code static checker" +optional = false +python-versions = ">=3.9.0" +files = [ + {file = "pylint-3.3.2-py3-none-any.whl", hash = "sha256:77f068c287d49b8683cd7c6e624243c74f92890f767f106ffa1ddf3c0a54cb7a"}, + {file = "pylint-3.3.2.tar.gz", hash = "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01"}, +] + +[package.dependencies] +astroid = ">=3.3.5,<=3.4.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = {version = ">=0.3.6", markers = "python_version >= \"3.11\""} +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pylint-celery" +version = "0.3" +description = "pylint-celery is a Pylint plugin to aid Pylint in recognising and understandingerrors caused when using the Celery library" +optional = false +python-versions = "*" +files = [ + {file = "pylint-celery-0.3.tar.gz", hash = "sha256:41e32094e7408d15c044178ea828dd524beedbdbe6f83f712c5e35bde1de4beb"}, +] + +[package.dependencies] +astroid = ">=1.0" +pylint = ">=1.0" +pylint-plugin-utils = ">=0.2.1" + +[[package]] +name = "pylint-django" +version = "2.6.1" +description = "A Pylint plugin to help Pylint understand the Django web framework" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "pylint-django-2.6.1.tar.gz", hash = "sha256:19e8c85a8573a04e3de7be2ba91e9a7c818ebf05e1b617be2bbae67a906b725f"}, + {file = "pylint_django-2.6.1-py3-none-any.whl", hash = "sha256:359f68fe8c810ee6bc8e1ab4c83c19b15a43b234a24b08978f47a23462b5ce28"}, +] + +[package.dependencies] +pylint = ">=3.0,<4" +pylint-plugin-utils = ">=0.8" + +[package.extras] +with-django = ["Django (>=2.2)"] + +[[package]] +name = "pylint-flask" +version = "0.6" +description = "pylint-flask is a Pylint plugin to aid Pylint in recognizing and understanding errors caused when using Flask" +optional = false +python-versions = "*" +files = [ + {file = "pylint-flask-0.6.tar.gz", hash = "sha256:f4d97de2216bf7bfce07c9c08b166e978fe9f2725de2a50a9845a97de7e31517"}, +] + +[package.dependencies] +pylint-plugin-utils = ">=0.2.1" + +[[package]] +name = "pylint-plugin-utils" +version = "0.8.2" +description = "Utilities and helpers for writing Pylint plugins" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylint_plugin_utils-0.8.2-py3-none-any.whl", hash = "sha256:ae11664737aa2effbf26f973a9e0b6779ab7106ec0adc5fe104b0907ca04e507"}, + {file = "pylint_plugin_utils-0.8.2.tar.gz", hash = "sha256:d3cebf68a38ba3fba23a873809155562571386d4c1b03e5b4c4cc26c3eee93e4"}, +] + +[package.dependencies] +pylint = ">=1.7" + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "regex" +version = "2024.11.6" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, +] + +[[package]] +name = "requirements-detector" +version = "1.3.2" +description = "Python tool to find and list requirements of a Python project" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "requirements_detector-1.3.2-py3-none-any.whl", hash = "sha256:e7595a32a21e5273dd54d3727bfef4591bbb96de341f6d95c9671981440876ee"}, + {file = "requirements_detector-1.3.2.tar.gz", hash = "sha256:af5a3ea98ca703d14cf7b66751b2aeb3656d02d9e5fc1c97d7d4da02b057b601"}, +] + +[package.dependencies] +astroid = ">=3.0,<4.0" +packaging = ">=21.3" +semver = ">=3.0.0,<4.0.0" + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + +[[package]] +name = "setoptconf-tmp" +version = "0.3.1" +description = "A module for retrieving program settings from various sources in a consistant method." +optional = false +python-versions = "*" +files = [ + {file = "setoptconf-tmp-0.3.1.tar.gz", hash = "sha256:e0480addd11347ba52f762f3c4d8afa3e10ad0affbc53e3ffddc0ca5f27d5778"}, + {file = "setoptconf_tmp-0.3.1-py3-none-any.whl", hash = "sha256:76035d5cd1593d38b9056ae12d460eca3aaa34ad05c315b69145e138ba80a745"}, +] + +[package.extras] +yaml = ["pyyaml"] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.36" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win32.whl", hash = "sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl", hash = "sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win32.whl", hash = "sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win_amd64.whl", hash = "sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win32.whl", hash = "sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win_amd64.whl", hash = "sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a"}, + {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, + {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +mypy = {version = ">=0.910", optional = true, markers = "extra == \"mypy\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "starlette" +version = "0.36.3" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, + {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[metadata] +lock-version = "2.0" +python-versions = "3.11.*" +content-hash = "b5943cc8ae2e2fe7b1d84126fe323532445afea6680a775ca5415f63b5bd2256" diff --git a/modules/programming/module_programming_winnowing/pyproject.toml b/modules/programming/module_programming_winnowing/pyproject.toml new file mode 100644 index 000000000..c8517b6c2 --- /dev/null +++ b/modules/programming/module_programming_winnowing/pyproject.toml @@ -0,0 +1,25 @@ +[tool.poetry] +name = "module_programming_winnowing" +version = "0.1.0" +description = "Programming assessment Winnowing module." +authors = ["Marlon Bucciarelli "] +license = "MIT" + +[tool.poetry.dependencies] +python = "3.11.*" +# if you have local changes in the common Athena module, use the line below. Otherwise, please use a VCS stable version. Also, a version with tag = "" is possible. +# athena = { path = "../athena", develop = true } +athena = { git = "https://github.com/ls1intum/Athena.git", rev = "bbb2bb0", subdirectory = "athena"} +nltk = "^3.6.5" +antlr4-python3-runtime = "^4.13.1" + +[tool.poetry.group.dev.dependencies] +pydantic = "1.10.17" +prospector = "^1.10.2" + +[tool.poetry.scripts] +module = "athena:run_module" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api"