diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10613383e..a742da0a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,19 +12,43 @@ permissions: contents: read jobs: - release: - runs-on: ubuntu-latest + build-wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] steps: - name: Checkout code uses: actions/checkout@v4 - - name: Install poetry - run: pipx install poetry - - name: Set up Python - uses: actions/setup-python@v5 + + - name: Build wheels + uses: pypa/cibuildwheel@v2.22 + + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-${{ matrix.os }} + path: wheelhouse/*.whl + + publish: + name: Publish to PyPI + needs: [build-wheels] + runs-on: ubuntu-latest + environment: pypi + permissions: + id-token: write + + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 with: - python-version: "3.x" - - name: Build package - run: poetry build + path: dist + merge-multiple: true + - name: Publish to PyPI - run: poetry publish --username=__token__ --password=${{ secrets.PYPI_TOKEN }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_TOKEN }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index d27f87f52..08c669c5a 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -19,7 +19,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] - + steps: - name: Checkout code uses: actions/checkout@v4 @@ -29,8 +29,24 @@ jobs: uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: poetry install --all-extras + cache: poetry + - name: Cache C++ parser wheel + uses: actions/cache@v4 + id: cpp-cache + with: + path: .cpp-wheel + key: cpp-parser-${{ runner.os }}-py${{ matrix.python-version }}-${{ hashFiles('src/vtlengine/AST/Grammar/_cpp_parser/**', 'CMakeLists.txt', 'pyproject.toml', 'scripts/setup_antlr4_runtime.sh') }} + - name: Download ANTLR4 C++ runtime + if: steps.cpp-cache.outputs.cache-hit != 'true' + run: bash scripts/setup_antlr4_runtime.sh + - name: Build C++ parser wheel + if: steps.cpp-cache.outputs.cache-hit != 'true' + run: pip wheel . -w .cpp-wheel --no-deps -v + - name: Install package and dependencies + run: | + poetry install --no-root --all-extras + poetry run pip install .cpp-wheel/*.whl + shell: bash - name: Check compliance with code formatting guidelines run: poetry run ruff format --no-cache --check - name: Run lint checks diff --git a/.github/workflows/ubuntu_test_24_04.yml b/.github/workflows/ubuntu_test_24_04.yml index 296084a01..e2cc66be1 100644 --- a/.github/workflows/ubuntu_test_24_04.yml +++ b/.github/workflows/ubuntu_test_24_04.yml @@ -17,11 +17,17 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Cache C++ parser wheel + uses: actions/cache@v4 + id: cpp-cache + with: + path: .cpp-wheel + key: cpp-parser-ubuntu2404-py3.12-${{ hashFiles('src/vtlengine/AST/Grammar/_cpp_parser/**', 'CMakeLists.txt', 'pyproject.toml', 'scripts/setup_antlr4_runtime.sh') }} + - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ - python3-antlr4 \ python3-pip \ python3-httpx \ python3-pandas \ @@ -31,7 +37,10 @@ jobs: python3-jsonschema \ python3-networkx \ python3-sqlglot \ - python3-pytest + python3-pytest \ + cmake \ + g++ \ + pybind11-dev - name: Install pip-only dependencies run: | @@ -43,18 +52,18 @@ jobs: duckdb==1.1 \ pysdmx==1.9.0 - - name: Install Poetry - run: | - pip install poetry - poetry config virtualenvs.create false + - name: Download ANTLR4 C++ runtime + if: steps.cpp-cache.outputs.cache-hit != 'true' + run: bash scripts/setup_antlr4_runtime.sh - - name: Build wheel - run: | - poetry build -f wheel -o . + - name: Build C++ parser wheel + if: steps.cpp-cache.outputs.cache-hit != 'true' + run: pip wheel . -w .cpp-wheel --no-deps -v + env: + PIP_BREAK_SYSTEM_PACKAGES: "1" - - name: Install built package - run: | - pip install "./vtlengine-$(poetry version -s)-py3-none-any.whl" --no-dependencies --break-system-packages + - name: Install C++ parser + run: pip install --break-system-packages --no-deps .cpp-wheel/*.whl - name: Run tests run: pytest --verbose --tb=short --strict-markers --strict-config --durations=10 diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 748f7a57f..08a8b2359 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -16,33 +16,5 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - - name: Install poetry - run: pipx install poetry - - name: Install dependencies - run: poetry install - - - name: Extract __version__ from module - id: module-version - run: | - echo "MODULE_VERSION=$(poetry run python -c 'import vtlengine; print(vtlengine.__version__)')" >> $GITHUB_OUTPUT - - - name: Extract version from pyproject.toml - id: pyproject-version - run: | - echo "value=$(poetry version --short)" >> $GITHUB_OUTPUT - - name: Compare versions - run: | - if [ "${{ steps.pyproject-version.outputs.value }}" != "${{ steps.module-version.outputs.MODULE_VERSION }}" ]; then - echo "❌ Version mismatch detected!" - echo "pyproject.toml version: ${{ steps.pyproject-version.outputs.value }}" - echo "__version__ value: ${{ steps.module-version.outputs.MODULE_VERSION }}" - exit 1 - else - echo "✅ Versions match (${{ steps.pyproject-version.outputs.value }})" - fi \ No newline at end of file + run: bash scripts/check_version.sh diff --git a/.gitignore b/.gitignore index 870897c51..eb973b49d 100644 --- a/.gitignore +++ b/.gitignore @@ -187,6 +187,10 @@ docs/plans/ !/CONTRIBUTING.md !/SECURITY.md +# C++ parser build artifacts +third_party/ +build/ + # Claude Code settings .claude/* !.claude/CLAUDE.md diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..80ad3a2ba --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.15...3.30) +project(vtlengine_cpp_parser LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# Find pybind11 +find_package(pybind11 CONFIG REQUIRED) + +# ------------------------------------------------------------------- +# ANTLR4 C++ runtime (vendored as static library) +# ------------------------------------------------------------------- +set(ANTLR4_SRC_DIR "${CMAKE_SOURCE_DIR}/third_party/antlr4-cpp-runtime/src") + +# Collect all ANTLR4 runtime .cpp files +file(GLOB_RECURSE ANTLR4_RUNTIME_SOURCES "${ANTLR4_SRC_DIR}/*.cpp") + +add_library(antlr4_runtime STATIC ${ANTLR4_RUNTIME_SOURCES}) +target_include_directories(antlr4_runtime PUBLIC "${ANTLR4_SRC_DIR}") +target_compile_definitions(antlr4_runtime PUBLIC ANTLR4CPP_STATIC) + +# Suppress warnings from third-party code +if(MSVC) + target_compile_options(antlr4_runtime PRIVATE /w) + # Fix missing chrono include in ProfilingATNSimulator on MSVC + target_compile_options(antlr4_runtime PRIVATE /FI"chrono") +else() + target_compile_options(antlr4_runtime PRIVATE -w) +endif() + +# ------------------------------------------------------------------- +# Generated VTL parser (C++ files from ANTLR) +# ------------------------------------------------------------------- +set(VTL_PARSER_DIR "${CMAKE_SOURCE_DIR}/src/vtlengine/AST/Grammar/_cpp_parser") + +set(VTL_PARSER_SOURCES + "${VTL_PARSER_DIR}/VtlLexer.cpp" + "${VTL_PARSER_DIR}/VtlParser.cpp" + "${VTL_PARSER_DIR}/VtlBaseListener.cpp" + "${VTL_PARSER_DIR}/VtlBaseVisitor.cpp" + "${VTL_PARSER_DIR}/VtlListener.cpp" + "${VTL_PARSER_DIR}/VtlVisitor.cpp" +) + +# ------------------------------------------------------------------- +# pybind11 module +# ------------------------------------------------------------------- +pybind11_add_module(vtl_cpp_parser + "${VTL_PARSER_DIR}/bindings.cpp" + ${VTL_PARSER_SOURCES} +) + +target_include_directories(vtl_cpp_parser PRIVATE + "${ANTLR4_SRC_DIR}" + "${VTL_PARSER_DIR}" +) + +target_link_libraries(vtl_cpp_parser PRIVATE antlr4_runtime) + +# Suppress warnings from generated parser code +if(MSVC) + target_compile_options(vtl_cpp_parser PRIVATE /w) +else() + target_compile_options(vtl_cpp_parser PRIVATE -w) +endif() + +# Install the module into the vtlengine._cpp_parser package +install(TARGETS vtl_cpp_parser DESTINATION vtlengine/AST/Grammar/_cpp_parser) diff --git a/poetry.lock b/poetry.lock index 229240c95..183771187 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7,7 +7,7 @@ description = "Async client for aws services using botocore and aiohttp" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "aiobotocore-2.26.0-py3-none-any.whl", hash = "sha256:a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec"}, {file = "aiobotocore-2.26.0.tar.gz", hash = "sha256:50567feaf8dfe2b653570b4491f5bc8c6e7fb9622479d66442462c021db4fadc"}, @@ -34,7 +34,7 @@ description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, @@ -47,7 +47,7 @@ description = "Async http client/server framework (asyncio)" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7"}, {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821"}, @@ -191,7 +191,7 @@ description = "itertools and builtins for AsyncIO and mixed iterables" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "aioitertools-0.13.0-py3-none-any.whl", hash = "sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be"}, {file = "aioitertools-0.13.0.tar.gz", hash = "sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c"}, @@ -207,7 +207,7 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, @@ -229,17 +229,6 @@ files = [ {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] -[[package]] -name = "antlr4-python3-runtime" -version = "4.9.3" -description = "ANTLR 4.9.3 runtime for Python 3.7" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, -] - [[package]] name = "anyio" version = "4.12.0" @@ -267,7 +256,7 @@ description = "Timeout context manager for asyncio programs" optional = true python-versions = ">=3.8" groups = ["main"] -markers = "(extra == \"all\" or extra == \"s3\") and python_version < \"3.11\"" +markers = "(extra == \"s3\" or extra == \"all\") and python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -307,7 +296,7 @@ description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "botocore-1.41.5-py3-none-any.whl", hash = "sha256:3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a"}, {file = "botocore-1.41.5.tar.gz", hash = "sha256:0367622b811597d183bfcaab4a350f0d3ede712031ce792ef183cabdee80d3bf"}, @@ -699,7 +688,7 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, @@ -840,7 +829,7 @@ description = "File-system specification" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.9\" and (extra == \"all\" or extra == \"s3\")" +markers = "python_version == \"3.9\" and (extra == \"s3\" or extra == \"all\")" files = [ {file = "fsspec-2025.10.0-py3-none-any.whl", hash = "sha256:7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d"}, {file = "fsspec-2025.10.0.tar.gz", hash = "sha256:b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59"}, @@ -881,7 +870,7 @@ description = "File-system specification" optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"all\" or extra == \"s3\")" +markers = "python_version >= \"3.10\" and (extra == \"s3\" or extra == \"all\")" files = [ {file = "fsspec-2025.12.0-py3-none-any.whl", hash = "sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b"}, {file = "fsspec-2025.12.0.tar.gz", hash = "sha256:c505de011584597b1060ff778bb664c1bc022e87921b0e4f10cc9c44f9635973"}, @@ -1118,7 +1107,7 @@ description = "JSON Matching Expressions" optional = true python-versions = ">=3.7" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -1668,7 +1657,7 @@ description = "multidict implementation" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349"}, {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e"}, @@ -2229,7 +2218,7 @@ description = "Accelerated property cache" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, @@ -2945,7 +2934,7 @@ description = "Convenient Filesystem interface over S3" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.9\" and (extra == \"all\" or extra == \"s3\")" +markers = "python_version == \"3.9\" and (extra == \"s3\" or extra == \"all\")" files = [ {file = "s3fs-2025.10.0-py3-none-any.whl", hash = "sha256:da7ef25efc1541f5fca8e1116361e49ea1081f83f4e8001fbd77347c625da28a"}, {file = "s3fs-2025.10.0.tar.gz", hash = "sha256:e8be6cddc77aceea1681ece0f472c3a7f8ef71a0d2acddb1cc92bb6afa3e9e4f"}, @@ -2967,7 +2956,7 @@ description = "Convenient Filesystem interface over S3" optional = true python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.10\" and (extra == \"all\" or extra == \"s3\")" +markers = "python_version >= \"3.10\" and (extra == \"s3\" or extra == \"all\")" files = [ {file = "s3fs-2025.12.0-py3-none-any.whl", hash = "sha256:89d51e0744256baad7ae5410304a368ca195affd93a07795bc8ba9c00c9effbb"}, {file = "s3fs-2025.12.0.tar.gz", hash = "sha256:8612885105ce14d609c5b807553f9f9956b45541576a17ff337d9435ed3eb01f"}, @@ -3346,7 +3335,7 @@ files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] -markers = {main = "python_version == \"3.9\" and (extra == \"all\" or extra == \"s3\")", docs = "python_version == \"3.9\""} +markers = {main = "python_version == \"3.9\" and (extra == \"s3\" or extra == \"all\")", docs = "python_version == \"3.9\""} [package.extras] brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] @@ -3364,7 +3353,7 @@ files = [ {file = "urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd"}, {file = "urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797"}, ] -markers = {main = "python_version >= \"3.10\" and (extra == \"all\" or extra == \"s3\")"} +markers = {main = "python_version >= \"3.10\" and (extra == \"s3\" or extra == \"all\")"} [package.extras] brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] @@ -3379,7 +3368,7 @@ description = "Module for decorators, wrappers and monkey patching." optional = true python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04"}, {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2"}, @@ -3486,7 +3475,7 @@ description = "Yet another URL library" optional = true python-versions = ">=3.9" groups = ["main"] -markers = "extra == \"all\" or extra == \"s3\"" +markers = "extra == \"s3\" or extra == \"all\"" files = [ {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, @@ -3653,4 +3642,4 @@ s3 = ["s3fs"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "44f127ea06ae4ebdcd56b245a4f9886dd3cedd5ffd64a38a110e4acc8fd4cc19" +content-hash = "6d728b53d437a17f0919b95a93ca317d901167e33e6748a3a0bc4b70d0c91a8b" diff --git a/pyproject.toml b/pyproject.toml index c4a911e56..9cc2f910a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,6 @@ dependencies = [ # APT-supported dependencies "jsonschema>=3.2.0,<5.0", "sqlglot>=22.2.0,<23.0", - "antlr4-python3-runtime>=4.9,<4.10", "pandas>=2.1.4,<3.0", "networkx>=2.8,<3.0", "pyarrow>=14.0,<20.0", @@ -81,7 +80,7 @@ lint.select = [ lint.ignore = ["B023", "B028", "B904", "C403", "D100", "D101", "D102", "D103", "D104", "D105", "D107", "D200", "D201", "D202", "D203", "D205", "D209", "D212", "D213", "D301", "D400", "D401", "D404", "D411", "D413", "D415", "D419", "E203", "S608"] -lint.exclude = ["*/Grammar/*", "*/main.py", "*/dev.py"] +lint.exclude = ["*/Grammar/*", "*/_cpp_parser/*", "*/main.py", "*/dev.py"] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S101", "PT006", "PT012", "PT013", "E501", "W605"] @@ -105,6 +104,10 @@ enable_error_code = [ ] warn_return_any = false +[[tool.mypy.overrides]] +module = "vtlengine.AST.*" +follow_imports = "silent" + [tool.pytest.ini_options] addopts = "--strict-markers" markers = [ @@ -112,5 +115,28 @@ markers = [ ] [build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" +requires = ["scikit-build-core>=0.10", "pybind11>=2.12"] +build-backend = "scikit_build_core.build" + +[tool.scikit-build] +cmake.build-type = "Release" +wheel.packages = ["src/vtlengine"] +wheel.exclude = ["vtlengine/AST/Grammar/_cpp_parser/*.cpp", "vtlengine/AST/Grammar/_cpp_parser/*.h"] + +[tool.cibuildwheel] +build = "cp39-* cp310-* cp311-* cp312-* cp313-*" +skip = "*-musllinux_*" +test-requires = ["pytest"] +test-command = "pytest {project}/tests -x -q --tb=short -k 'test_1' --strict-markers" + +[tool.cibuildwheel.linux] +archs = ["x86_64", "aarch64"] +before-build = "bash {project}/scripts/setup_antlr4_runtime.sh" + +[tool.cibuildwheel.macos] +archs = ["x86_64", "arm64"] +before-build = "bash {project}/scripts/setup_antlr4_runtime.sh" + +[tool.cibuildwheel.windows] +archs = ["AMD64"] +before-build = "bash {project}/scripts/setup_antlr4_runtime.sh" diff --git a/scripts/check_version.sh b/scripts/check_version.sh new file mode 100755 index 000000000..14237a497 --- /dev/null +++ b/scripts/check_version.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Checks that the version in pyproject.toml matches __version__ in src/vtlengine/__init__.py + +set -euo pipefail + +PYPROJECT_VERSION=$(grep -oP '^version\s*=\s*"\K[^"]+' pyproject.toml) +MODULE_VERSION=$(grep -oP '__version__\s*=\s*"\K[^"]+' src/vtlengine/__init__.py) + +if [ "$PYPROJECT_VERSION" != "$MODULE_VERSION" ]; then + echo "❌ Version mismatch detected!" + echo "pyproject.toml version: $PYPROJECT_VERSION" + echo "__version__ value: $MODULE_VERSION" + exit 1 +else + echo "✅ Versions match ($PYPROJECT_VERSION)" +fi diff --git a/scripts/setup_antlr4_runtime.sh b/scripts/setup_antlr4_runtime.sh new file mode 100755 index 000000000..2a5e64188 --- /dev/null +++ b/scripts/setup_antlr4_runtime.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Downloads and extracts the ANTLR4 C++ runtime source for building the C++ parser extension. +# Run this once before building: ./scripts/setup_antlr4_runtime.sh + +set -euo pipefail + +ANTLR4_VERSION="4.13.1" +TARGET_DIR="third_party/antlr4-cpp-runtime" +TARBALL_URL="https://github.com/antlr/antlr4/archive/refs/tags/${ANTLR4_VERSION}.tar.gz" + +if [ -d "${TARGET_DIR}/src" ]; then + echo "ANTLR4 C++ runtime already exists at ${TARGET_DIR}/src" + exit 0 +fi + +echo "Downloading ANTLR4 ${ANTLR4_VERSION} C++ runtime..." +TMPDIR=$(mktemp -d) +curl -sL "${TARBALL_URL}" -o "${TMPDIR}/antlr4.tar.gz" + +echo "Extracting runtime sources..." +mkdir -p "${TARGET_DIR}" +tar -xzf "${TMPDIR}/antlr4.tar.gz" \ + --strip-components=4 \ + -C "${TARGET_DIR}" \ + "antlr4-${ANTLR4_VERSION}/runtime/Cpp/runtime/src" + +rm -rf "${TMPDIR}" + +echo "Done. ANTLR4 C++ runtime extracted to ${TARGET_DIR}/src/" diff --git a/src/vtlengine/API/__init__.py b/src/vtlengine/API/__init__.py index 33dce44f4..667c87b25 100644 --- a/src/vtlengine/API/__init__.py +++ b/src/vtlengine/API/__init__.py @@ -2,8 +2,6 @@ from typing import Any, Dict, List, Optional, Sequence, Union, cast import pandas as pd -from antlr4 import CommonTokenStream, InputStream # type: ignore[import-untyped] -from antlr4.error.ErrorListener import ErrorListener # type: ignore[import-untyped] from pysdmx.io.pd import PandasDataset from pysdmx.model import TransformationScheme from pysdmx.model.dataflow import Dataflow, DataStructureDefinition, Schema @@ -25,8 +23,7 @@ from vtlengine.AST.ASTConstructor import ASTVisitor from vtlengine.AST.ASTString import ASTString from vtlengine.AST.DAG import DAGAnalyzer -from vtlengine.AST.Grammar.lexer import Lexer -from vtlengine.AST.Grammar.parser import Parser +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser from vtlengine.Exceptions import InputValidationException from vtlengine.files.output._time_period_representation import ( TimePeriodRepresentation, @@ -39,46 +36,6 @@ pd.options.mode.chained_assignment = None -class __VTLSingleErrorListener(ErrorListener): # type: ignore[misc] - """ """ - - def syntaxError( - self, - recognizer: Any, - offendingSymbol: str, - line: str, - column: str, - msg: str, - e: Any, - ) -> None: - raise Exception( - f"Not valid VTL Syntax \n " - f"offendingSymbol: {offendingSymbol} \n " - f"msg: {msg} \n " - f"line: {line}" - ) - - -def _lexer(text: str) -> CommonTokenStream: - """ - Lexing - """ - lexer_ = Lexer(InputStream(text)) - lexer_._listeners = [__VTLSingleErrorListener()] - stream = CommonTokenStream(lexer_) - - return stream - - -def _parser(stream: CommonTokenStream) -> Any: - """ - Parse the expression - """ - vtl_parser = Parser(stream) - vtl_parser._listeners = [__VTLSingleErrorListener()] - return vtl_parser.start() - - def _extract_input_datasets(script: Union[str, TransformationScheme, Path]) -> List[str]: if isinstance(script, TransformationScheme): vtl_script = _check_script(script) @@ -125,8 +82,7 @@ def create_ast(text: str) -> Start: Exception: When the vtl syntax expression is wrong. """ text = text + "\n" - stream = _lexer(text) - cst = _parser(stream) + cst = vtl_cpp_parser.parse(text) visitor = ASTVisitor() ast = visitor.visitStart(cst) DAGAnalyzer.create_dag(ast) diff --git a/src/vtlengine/AST/ASTComment.py b/src/vtlengine/AST/ASTComment.py index 727730613..270e01161 100644 --- a/src/vtlengine/AST/ASTComment.py +++ b/src/vtlengine/AST/ASTComment.py @@ -1,27 +1,38 @@ -from antlr4 import CommonTokenStream, InputStream -from antlr4.Token import CommonToken +from typing import Any, Dict from vtlengine.API import create_ast from vtlengine.AST import Comment, Start -from vtlengine.AST.ASTConstructorModules import extract_token_info -from vtlengine.AST.Grammar.lexer import Lexer +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser -def generate_ast_comment(token: CommonToken) -> Comment: +def generate_ast_comment(comment: Dict[str, Any]) -> Comment: """ - Parses a token belonging to a comment and returns a Comment AST object. + Parses a comment dict from the C++ parser and returns a Comment AST object. Args: - token (str): The comment string to parse. + comment: A dict with keys: type, text, line, column. Returns: Comment: A Comment AST object. """ - token_info = extract_token_info(token) - text = token.text - if token.type == Lexer.SL_COMMENT: - # Usage rstrip("\r\n") instead of [:-1] since SL_COMMENT no longer includes trailing newline - text = token.text.rstrip("\r\n") + text = comment["text"] + line = comment["line"] + column = comment["column"] + token_type = comment["type"] + + line_stop = line + if token_type == vtl_cpp_parser.ML_COMMENT: + line_stop = line + text.count("\n") + else: + # SL_COMMENT + text = text.rstrip("\r\n") + + token_info = { + "column_start": column, + "column_stop": column + len(text), + "line_start": line, + "line_stop": line_stop, + } return Comment(value=text, **token_info) @@ -35,34 +46,24 @@ def create_ast_with_comments(text: str) -> Start: Returns: AST: The generated AST with comments. """ + # Parse with C++ parser (this also collects comments) + text_with_newline = text + "\n" + vtl_cpp_parser.parse(text_with_newline) - # Reading the script on channel 2 to get the comments - # Adding \n at the end to ensure single line comments at the end of the script are captured - lexer_ = Lexer(InputStream(text + "\n")) - stream = CommonTokenStream(lexer_, channel=2) - - # Fill the stream with tokens on the buffer - stream.fill() - - # Extract comments from the stream - comments = [generate_ast_comment(token) for token in stream.tokens if token.channel == 2] + # Get comments from the last parse + comment_tokens = vtl_cpp_parser.get_comments() - EOF = -1 - only_comments = all( - token.type in (EOF, Lexer.WS, Lexer.EOL, Lexer.ML_COMMENT, Lexer.SL_COMMENT) - for token in stream.tokens - ) + comments = [generate_ast_comment(c) for c in comment_tokens] - if not only_comments or not stream.tokens: - # Call the create_ast function to generate the AST from channel 0 + # Try to parse: if no statements, it's only comments + try: ast = create_ast(text) - else: - # If there are only comments or empty lines, create an empty AST + if not ast.children: + ast = Start(line_start=1, line_stop=1, column_start=0, column_stop=0, children=[]) + except Exception: ast = Start(line_start=1, line_stop=1, column_start=0, column_stop=0, children=[]) ast.children.extend(comments) - - # Sort the ast children based on their start line and column ast.children.sort(key=lambda x: (x.line_start, x.column_start)) return ast diff --git a/src/vtlengine/AST/ASTConstructor.py b/src/vtlengine/AST/ASTConstructor.py index 4954cad1c..4971e1f7e 100644 --- a/src/vtlengine/AST/ASTConstructor.py +++ b/src/vtlengine/AST/ASTConstructor.py @@ -7,8 +7,6 @@ Node Creator. """ -from antlr4.tree.Tree import TerminalNodeImpl - from vtlengine.AST import ( Argument, Assignment, @@ -28,8 +26,8 @@ from vtlengine.AST.ASTConstructorModules.ExprComponents import ExprComp from vtlengine.AST.ASTConstructorModules.Terminals import Terminals from vtlengine.AST.ASTDataExchange import de_ruleset_elements -from vtlengine.AST.Grammar.parser import Parser -from vtlengine.AST.VtlVisitor import VtlVisitor +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser +from vtlengine.AST.Grammar._cpp_parser._rule_constants import RC from vtlengine.Exceptions import SemanticError from vtlengine.Model import Component, Dataset, Scalar @@ -37,7 +35,7 @@ # pylint: disable=assignment-from-no-return -class ASTVisitor(VtlVisitor): +class ASTVisitor: """ This class walks the parse tree (CTS) and transform the structure to an AST which nodes are defined at AST.AST.py @@ -50,28 +48,35 @@ class ASTVisitor(VtlVisitor): _______________________________________________________________________________________""" - def visitStart(self, ctx: Parser.StartContext): + def visitStart(self, ctx: vtl_cpp_parser.ParseNode) -> Start: """ start: (statement EOL)* EOF """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children statements_nodes = [] statements = [ - statement for statement in ctx_list if isinstance(statement, Parser.StatementContext) + statement + for statement in ctx_list + if not statement.is_terminal and statement.rule_index == 1 ] if len(statements) != 0: for statement in statements: statements_nodes.append(self.visitStatement(statement)) token_info = extract_token_info(ctx) + # For the Start node, use the last statement's stop position instead of EOF + if statements: + last_stmt_info = extract_token_info(statements[-1]) + token_info["line_stop"] = last_stmt_info["line_stop"] + token_info["column_stop"] = last_stmt_info["column_stop"] start_node = Start(children=statements_nodes, **token_info) return start_node - def visitStatement(self, ctx: Parser.StatementContext): + def visitStatement(self, ctx): """ statement: varID ASSIGN expr # temporaryAssignment @@ -79,26 +84,26 @@ def visitStatement(self, ctx: Parser.StatementContext): | defOperators # defineExpression ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(ctx, Parser.TemporaryAssignmentContext): + if ctx.ctx_id == RC.TEMPORARY_ASSIGNMENT: return self.visitTemporaryAssignment(ctx) - elif isinstance(ctx, Parser.PersistAssignmentContext): + elif ctx.ctx_id == RC.PERSIST_ASSIGNMENT: return self.visitPersistAssignment(ctx) - elif isinstance(ctx, Parser.DefineExpressionContext): + elif ctx.ctx_id == RC.DEFINE_EXPRESSION: return self.visitDefineExpression(c) else: raise NotImplementedError # varID ASSIGN expr # temporaryAssignment - def visitTemporaryAssignment(self, ctx: Parser.TemporaryAssignmentContext): - ctx_list = list(ctx.getChildren()) + def visitTemporaryAssignment(self, ctx): + ctx_list = ctx.children left_node = Terminals().visitVarID(ctx_list[0]) - op_node = ctx_list[1].getSymbol().text + op_node = ctx_list[1].text right_node = Expr().visitExpr(ctx_list[2]) @@ -107,14 +112,14 @@ def visitTemporaryAssignment(self, ctx: Parser.TemporaryAssignmentContext): return assignment_node # | varID PUT_SYMBOL expr # persistAssignment - def visitPersistAssignment(self, ctx: Parser.PersistAssignmentContext): + def visitPersistAssignment(self, ctx): """ persistentAssignment: varID PUT_SYMBOL expr; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children left_node = Terminals().visitVarID(ctx_list[0]) - op_node = ctx_list[1].getSymbol().text + op_node = ctx_list[1].text right_node = Expr().visitExpr(ctx_list[2]) @@ -131,42 +136,44 @@ def visitPersistAssignment(self, ctx: Parser.PersistAssignmentContext): _______________________________________________________________________________________""" - def visitDefineExpression(self, ctx: Parser.DefineExpressionContext): + def visitDefineExpression(self, ctx): """ defExpr: defOperator | defDatapoint | defHierarchical ; """ - if isinstance(ctx, Parser.DefOperatorContext): + if ctx.ctx_id == RC.DEF_OPERATOR: return self.visitDefOperator(ctx) - elif isinstance(ctx, Parser.DefDatapointRulesetContext): + elif ctx.ctx_id == RC.DEF_DATAPOINT_RULESET: return self.visitDefDatapointRuleset(ctx) - elif isinstance(ctx, Parser.DefHierarchicalContext): + elif ctx.ctx_id == RC.DEF_HIERARCHICAL: return self.visitDefHierarchical(ctx) - def visitDefOperator(self, ctx: Parser.DefOperatorContext): + def visitDefOperator(self, ctx): """ DEFINE OPERATOR operatorID LPAREN (parameterItem (COMMA parameterItem)*)? RPAREN (RETURNS outputParameterType)? IS (expr) END OPERATOR # defOperator""" - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children operator = Terminals().visitOperatorID(ctx_list[2]) parameters = [ self.visitParameterItem(parameter) for parameter in ctx_list - if isinstance(parameter, Parser.ParameterItemContext) + if not parameter.is_terminal and parameter.rule_index == 58 ] return_ = [ Terminals().visitOutputParameterType(datatype) for datatype in ctx_list - if isinstance(datatype, Parser.OutputParameterTypeContext) + if not datatype.is_terminal and datatype.rule_index == 59 ] # Here should be modified if we want to include more than one expr per function. expr = [ - Expr().visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + Expr().visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ][0] if len(return_) == 0: @@ -190,13 +197,13 @@ def visitDefOperator(self, ctx: Parser.DefOperatorContext): ----------------------------------- """ - def visitDefDatapointRuleset(self, ctx: Parser.DefDatapointRulesetContext): + def visitDefDatapointRuleset(self, ctx): """ DEFINE DATAPOINT RULESET rulesetID LPAREN rulesetSignature RPAREN IS ruleClauseDatapoint END DATAPOINT RULESET # defDatapointRuleset """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children ruleset_name = Terminals().visitRulesetID(ctx_list[3]) signature_type, ruleset_elements = self.visitRulesetSignature(ctx_list[5]) @@ -212,18 +219,17 @@ def visitDefDatapointRuleset(self, ctx: Parser.DefDatapointRulesetContext): **token_info, ) - def visitRulesetSignature(self, ctx: Parser.RulesetSignatureContext): + def visitRulesetSignature(self, ctx): """ rulesetSignature: (VALUE_DOMAIN|VARIABLE) varSignature (',' varSignature)* ; """ - ctx_list = list(ctx.getChildren()) - signature_type = ctx_list[0].getSymbol().text + ctx_list = ctx.children + signature_type = ctx_list[0].text value_domains = [ value_domain for value_domain in ctx_list - if isinstance(value_domain, TerminalNodeImpl) - and value_domain.getSymbol().type == Parser.VALUE_DOMAIN + if value_domain.is_terminal and value_domain.symbol_type == vtl_cpp_parser.VALUE_DOMAIN ] kind = "" if len(value_domains) != 0: @@ -232,8 +238,7 @@ def visitRulesetSignature(self, ctx: Parser.RulesetSignatureContext): variables = [ variable for variable in ctx_list - if isinstance(variable, TerminalNodeImpl) - and variable.getSymbol().type == Parser.VARIABLE + if variable.is_terminal and variable.symbol_type == vtl_cpp_parser.VARIABLE ] if len(variables) != 0: kind = "ComponentID" @@ -241,40 +246,39 @@ def visitRulesetSignature(self, ctx: Parser.RulesetSignatureContext): component_nodes = [ Terminals().visitSignature(component, kind) for component in ctx_list - if isinstance(component, Parser.SignatureContext) + if not component.is_terminal and component.rule_index == 73 ] return signature_type, component_nodes - def visitRuleClauseDatapoint(self, ctx: Parser.RuleClauseDatapointContext): + def visitRuleClauseDatapoint(self, ctx): """ ruleClauseDatapoint: ruleItemDatapoint (';' ruleItemDatapoint)* ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children ruleset_rules = [ self.visitRuleItemDatapoint(ruleId) for ruleId in ctx_list - if isinstance(ruleId, Parser.RuleItemDatapointContext) + if not ruleId.is_terminal and ruleId.rule_index == 75 ] return ruleset_rules - def visitRuleItemDatapoint(self, ctx: Parser.RuleItemDatapointContext): + def visitRuleItemDatapoint(self, ctx): """ ruleItemDatapoint: (IDENTIFIER ':')? ( WHEN expr THEN )? expr (erCode)? (erLevel)? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children when = [ whens for whens in ctx_list - if isinstance(whens, TerminalNodeImpl) and whens.getSymbol().type == Parser.WHEN + if whens.is_terminal and whens.symbol_type == vtl_cpp_parser.WHEN ] rule_name = [ ( - rule_name.getSymbol().text - if isinstance(rule_name, TerminalNodeImpl) - and rule_name.getSymbol().type == Parser.IDENTIFIER + rule_name.text + if rule_name.is_terminal and rule_name.symbol_type == vtl_cpp_parser.IDENTIFIER else None ) for rule_name in ctx_list @@ -282,13 +286,13 @@ def visitRuleItemDatapoint(self, ctx: Parser.RuleItemDatapointContext): expr_node = [ ExprComp().visitExprComponent(rule_node) for rule_node in ctx_list - if isinstance(rule_node, Parser.ExprComponentContext) + if not rule_node.is_terminal and rule_node.rule_index == 3 ] if len(when) != 0: - token_info = extract_token_info(when[0].getSymbol()) + token_info = extract_token_info(when[0]) rule_node = HRBinOp( - left=expr_node[0], op=when[0].getSymbol().text, right=expr_node[1], **token_info + left=expr_node[0], op=when[0].text, right=expr_node[1], **token_info ) else: @@ -297,13 +301,13 @@ def visitRuleItemDatapoint(self, ctx: Parser.RuleItemDatapointContext): er_code = [ Terminals().visitErCode(erCode_name) for erCode_name in ctx_list - if isinstance(erCode_name, Parser.ErCodeContext) + if not erCode_name.is_terminal and erCode_name.rule_index == 98 ] er_code = None if len(er_code) == 0 else er_code[0] er_level = [ Terminals().visitErLevel(erLevel_name) for erLevel_name in ctx_list - if isinstance(erLevel_name, Parser.ErLevelContext) + if not erLevel_name.is_terminal and erLevel_name.rule_index == 99 ] er_level = None if len(er_level) == 0 else er_level[0] @@ -312,26 +316,26 @@ def visitRuleItemDatapoint(self, ctx: Parser.RuleItemDatapointContext): name=rule_name, rule=rule_node, erCode=er_code, erLevel=er_level, **token_info ) - def visitParameterItem(self, ctx: Parser.ParameterItemContext): + def visitParameterItem(self, ctx): """ parameterItem: varID dataType (DEFAULT constant)? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children argument_name = [ Terminals().visitVarID(element) for element in ctx_list - if isinstance(element, Parser.VarIDContext) + if not element.is_terminal and element.rule_index == 94 ][0] argument_type = [ Terminals().visitInputParameterType(element) for element in ctx_list - if isinstance(element, Parser.InputParameterTypeContext) + if not element.is_terminal and element.rule_index == 61 ][0] argument_default = [ Terminals().visitScalarItem(element) for element in ctx_list - if isinstance(element, Parser.ScalarItemContext) + if not element.is_terminal and element.rule_index == 43 ] argument_default = None if len(argument_default) == 0 else argument_default[0] @@ -348,13 +352,13 @@ def visitParameterItem(self, ctx: Parser.ParameterItemContext): ----------------------------------- """ - def visitDefHierarchical(self, ctx: Parser.DefHierarchicalContext): + def visitDefHierarchical(self, ctx): """ DEFINE DATAPOINT RULESET rulesetID LPAREN rulesetSignature RPAREN IS ruleClauseDatapoint END DATAPOINT RULESET # defDatapointRuleset """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children ruleset_name = Terminals().visitRulesetID(ctx_list[3]) signature_type, ruleset_elements = self.visitHierRuleSignature(ctx_list[5]) @@ -379,33 +383,31 @@ def visitDefHierarchical(self, ctx: Parser.DefHierarchicalContext): ) # TODO Add support for value Domains. - def visitHierRuleSignature(self, ctx: Parser.HierRuleSignatureContext): + def visitHierRuleSignature(self, ctx): """ hierRuleSignature: (VALUE_DOMAIN|VARIABLE) valueDomainSignature? RULE IDENTIFIER ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children - signature_type = ctx_list[0].getSymbol().text + signature_type = ctx_list[0].text value_domain = [ valueDomain for valueDomain in ctx_list - if isinstance(valueDomain, TerminalNodeImpl) - and valueDomain.getSymbol().type == Parser.VALUE_DOMAIN + if valueDomain.is_terminal and valueDomain.symbol_type == vtl_cpp_parser.VALUE_DOMAIN ] kind = "ValuedomainID" if len(value_domain) != 0 else "DatasetID" conditions = [ self.visitValueDomainSignature(vtlsig) for vtlsig in ctx_list - if isinstance(vtlsig, Parser.ValueDomainSignatureContext) + if not vtlsig.is_terminal and vtlsig.rule_index == 79 ] dataset = [ identifier for identifier in ctx_list - if isinstance(identifier, TerminalNodeImpl) - and identifier.getSymbol().type == Parser.IDENTIFIER + if identifier.is_terminal and identifier.symbol_type == vtl_cpp_parser.IDENTIFIER ][0] token_info = extract_token_info(ctx) @@ -418,53 +420,48 @@ def visitHierRuleSignature(self, ctx: Parser.HierRuleSignatureContext): ) for elto in conditions[0] ] - identifiers_list.append( - DefIdentifier(value=dataset.getSymbol().text, kind=kind, **token_info) - ) + identifiers_list.append(DefIdentifier(value=dataset.text, kind=kind, **token_info)) return signature_type, identifiers_list else: - return signature_type, DefIdentifier( - value=dataset.getSymbol().text, kind=kind, **token_info - ) + return signature_type, DefIdentifier(value=dataset.text, kind=kind, **token_info) # TODO Support for valueDomainSignature. - def visitValueDomainSignature(self, ctx: Parser.ValueDomainSignatureContext): + def visitValueDomainSignature(self, ctx): """ valueDomainSignature: CONDITION IDENTIFIER (AS IDENTIFIER)? (',' IDENTIFIER (AS IDENTIFIER)?)* ; """ # noqa E501 # AST_ASTCONSTRUCTOR.7 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children component_nodes = [ Terminals().visitSignature(component) for component in ctx_list - if isinstance(component, Parser.SignatureContext) + if not component.is_terminal and component.rule_index == 73 ] return component_nodes - def visitRuleClauseHierarchical(self, ctx: Parser.RuleClauseHierarchicalContext): + def visitRuleClauseHierarchical(self, ctx): """ ruleClauseHierarchical: ruleItemHierarchical (';' ruleItemHierarchical)* ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children rules_nodes = [ self.visitRuleItemHierarchical(rule) for rule in ctx_list - if isinstance(rule, Parser.RuleItemHierarchicalContext) + if not rule.is_terminal and rule.rule_index == 77 ] return rules_nodes - def visitRuleItemHierarchical(self, ctx: Parser.RuleItemHierarchicalContext): + def visitRuleItemHierarchical(self, ctx): """ ruleItemHierarchical: (ruleName=IDENTIFIER COLON )? codeItemRelation (erCode)? (erLevel)? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children rule_name = [ ( - rule_name.getSymbol().text - if isinstance(rule_name, TerminalNodeImpl) - and rule_name.getSymbol().type == Parser.IDENTIFIER + rule_name.text + if rule_name.is_terminal and rule_name.symbol_type == vtl_cpp_parser.IDENTIFIER else None ) for rule_name in ctx_list @@ -472,19 +469,19 @@ def visitRuleItemHierarchical(self, ctx: Parser.RuleItemHierarchicalContext): rule_node = [ self.visitCodeItemRelation(rule_node) for rule_node in ctx_list - if isinstance(rule_node, Parser.CodeItemRelationContext) + if not rule_node.is_terminal and rule_node.rule_index == 80 ][0] er_code = [ Terminals().visitErCode(erCode_name) for erCode_name in ctx_list - if isinstance(erCode_name, Parser.ErCodeContext) + if not erCode_name.is_terminal and erCode_name.rule_index == 98 ] er_code = None if len(er_code) == 0 else er_code[0] er_level = [ Terminals().visitErLevel(erLevel_name) for erLevel_name in ctx_list - if isinstance(erLevel_name, Parser.ErLevelContext) + if not erLevel_name.is_terminal and erLevel_name.rule_index == 99 ] er_level = None if len(er_level) == 0 else er_level[0] @@ -492,19 +489,19 @@ def visitRuleItemHierarchical(self, ctx: Parser.RuleItemHierarchicalContext): return HRule(name=rule_name, rule=rule_node, erCode=er_code, erLevel=er_level, **token_info) - def visitCodeItemRelation(self, ctx: Parser.CodeItemRelationContext): + def visitCodeItemRelation(self, ctx): """ codeItemRelation: ( WHEN expr THEN )? codeItemRef codeItemRelationClause (codeItemRelationClause)* ; ( WHEN exprComponent THEN )? codetemRef=valueDomainValue comparisonOperand? codeItemRelationClause (codeItemRelationClause)* """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children when = None - if isinstance(ctx_list[0], TerminalNodeImpl): - when = ctx_list[0].getSymbol().text + if ctx_list[0].is_terminal: + when = ctx_list[0].text vd_value = Terminals().visitValueDomainValue(ctx_list[3]) op = Terminals().visitComparisonOperand(ctx_list[4]) token_info_value = extract_token_info(ctx_list[3]) @@ -521,9 +518,7 @@ def visitCodeItemRelation(self, ctx: Parser.CodeItemRelationContext): right=None, **token_info_op, ) - items = [ - item for item in ctx_list if isinstance(item, Parser.CodeItemRelationClauseContext) - ] + items = [item for item in ctx_list if not item.is_terminal and item.rule_index == 81] token_info = extract_token_info(items[0]) # Means that no concatenations of operations is needed for that rule. if len(items) == 1: @@ -557,13 +552,13 @@ def visitCodeItemRelation(self, ctx: Parser.CodeItemRelationContext): return rule_node - def visitCodeItemRelationClause(self, ctx: Parser.CodeItemRelationClauseContext): + def visitCodeItemRelationClause(self, ctx): """ (opAdd=( PLUS | MINUS ))? rightCodeItem=valueDomainValue ( QLPAREN rightCondition=exprComponent QRPAREN )? """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children - expr = [expr for expr in ctx_list if isinstance(expr, Parser.ExprContext)] + expr = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 2] if len(expr) != 0: # AST_ASTCONSTRUCTOR.8 raise NotImplementedError @@ -571,11 +566,11 @@ def visitCodeItemRelationClause(self, ctx: Parser.CodeItemRelationClauseContext) right_condition = [ ExprComp().visitExprComponent(right_condition) for right_condition in ctx_list - if isinstance(right_condition, Parser.ComparisonExprCompContext) + if not right_condition.is_terminal and right_condition.ctx_id == RC.COMPARISON_EXPR_COMP ] - if isinstance(ctx_list[0], TerminalNodeImpl): - op = ctx_list[0].getSymbol().text + if ctx_list[0].is_terminal: + op = ctx_list[0].text value = Terminals().visitValueDomainValue(ctx_list[1]) code_item = DefIdentifier( @@ -584,9 +579,7 @@ def visitCodeItemRelationClause(self, ctx: Parser.CodeItemRelationClauseContext) if right_condition: code_item._right_condition = right_condition[0] - return HRBinOp( - left=None, op=op, right=code_item, **extract_token_info(ctx_list[0].getSymbol()) - ) + return HRBinOp(left=None, op=op, right=code_item, **extract_token_info(ctx_list[0])) else: value = Terminals().visitValueDomainValue(ctx_list[0]) code_item = DefIdentifier( diff --git a/src/vtlengine/AST/ASTConstructorModules/Expr.py b/src/vtlengine/AST/ASTConstructorModules/Expr.py index 1f93d6ac1..14df9a2af 100644 --- a/src/vtlengine/AST/ASTConstructorModules/Expr.py +++ b/src/vtlengine/AST/ASTConstructorModules/Expr.py @@ -2,8 +2,6 @@ from copy import copy from typing import Any, Optional -from antlr4.tree.Tree import TerminalNodeImpl - from vtlengine.AST import ( ID, Aggregation, @@ -41,14 +39,14 @@ from vtlengine.AST.ASTConstructorModules.ExprComponents import ExprComp from vtlengine.AST.ASTConstructorModules.Terminals import Terminals from vtlengine.AST.ASTDataExchange import de_ruleset_elements -from vtlengine.AST.Grammar.parser import Parser +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser +from vtlengine.AST.Grammar._cpp_parser._rule_constants import RC from vtlengine.AST.Grammar.tokens import DATASET_PRIORITY -from vtlengine.AST.VtlVisitor import VtlVisitor from vtlengine.Exceptions import SemanticError from vtlengine.Model import Role -class Expr(VtlVisitor): +class Expr: """______________________________________________________________________________________ @@ -57,7 +55,7 @@ class Expr(VtlVisitor): _______________________________________________________________________________________ """ - def visitExpr(self, ctx: Parser.ExprContext): + def visitExpr(self, ctx: Any) -> Any: """ expr: LPAREN expr RPAREN # parenthesisExpr @@ -77,50 +75,50 @@ def visitExpr(self, ctx: Parser.ExprContext): | varID # varIdExpr ; """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(ctx, Parser.ParenthesisExprContext): + if ctx.ctx_id == RC.PARENTHESIS_EXPR: return self.visitParenthesisExpr(ctx) - elif isinstance(ctx, Parser.MembershipExprContext): + elif ctx.ctx_id == RC.MEMBERSHIP_EXPR: return self.visitMembershipExpr(ctx) # dataset=expr QLPAREN clause=datasetClause QRPAREN # clauseExpr - elif isinstance(ctx, Parser.ClauseExprContext): + elif ctx.ctx_id == RC.CLAUSE_EXPR: return self.visitClauseExpr(ctx) # functions - elif isinstance(ctx, Parser.FunctionsExpressionContext): + elif ctx.ctx_id == RC.FUNCTIONS_EXPRESSION: return self.visitFunctionsExpression(c) # op=(PLUS|MINUS|NOT) right=expr # unary expression - elif isinstance(ctx, Parser.UnaryExprContext): + elif ctx.ctx_id == RC.UNARY_EXPR: return self.visitUnaryExpr(ctx) # | left=expr op=(MUL|DIV) right=expr # arithmeticExpr - elif isinstance(ctx, Parser.ArithmeticExprContext): + elif ctx.ctx_id == RC.ARITHMETIC_EXPR: return self.visitArithmeticExpr(ctx) # | left=expr op=(PLUS|MINUS|CONCAT) right=expr # arithmeticExprOrConcat - elif isinstance(ctx, Parser.ArithmeticExprOrConcatContext): + elif ctx.ctx_id == RC.ARITHMETIC_EXPR_OR_CONCAT: return self.visitArithmeticExprOrConcat(ctx) # | left=expr op=comparisonOperand right=expr # comparisonExpr - elif isinstance(ctx, Parser.ComparisonExprContext): + elif ctx.ctx_id == RC.COMPARISON_EXPR: return self.visitComparisonExpr(ctx) # | left=expr op=(IN|NOT_IN)(lists|valueDomainID) # inNotInExpr - elif isinstance(ctx, Parser.InNotInExprContext): + elif ctx.ctx_id == RC.IN_NOT_IN_EXPR: return self.visitInNotInExpr(ctx) # | left=expr op=AND right=expr # booleanExpr # | left=expr op=(OR|XOR) right=expr - elif isinstance(ctx, Parser.BooleanExprContext): + elif ctx.ctx_id == RC.BOOLEAN_EXPR: return self.visitBooleanExpr(ctx) # IF conditionalExpr=expr THEN thenExpr=expr ELSE elseExpr=expr # ifExpr - elif isinstance(c, TerminalNodeImpl) and (c.getSymbol().type == Parser.IF): + elif ctx.ctx_id == RC.IF_EXPR: condition_node = self.visitExpr(ctx_list[1]) then_op_node = self.visitExpr(ctx_list[3]) else_op_node = self.visitExpr(ctx_list[5]) @@ -135,7 +133,7 @@ def visitExpr(self, ctx: Parser.ExprContext): return if_node # CASE WHEN expr THEN expr ELSE expr END # caseExpr - elif isinstance(c, TerminalNodeImpl) and (c.getSymbol().type == Parser.CASE): + elif ctx.ctx_id == RC.CASE_EXPR: if len(ctx_list) % 4 != 3: raise ValueError("Syntax error.") @@ -156,47 +154,47 @@ def visitExpr(self, ctx: Parser.ExprContext): return case_node # constant - elif isinstance(ctx, Parser.ConstantExprContext): + elif ctx.ctx_id == RC.CONSTANT_EXPR: return Terminals().visitConstant(c) # varID - elif isinstance(ctx, Parser.VarIdExprContext): + elif ctx.ctx_id == RC.VAR_ID_EXPR: return Terminals().visitVarIdExpr(c) else: # AST_ASTCONSTRUCTOR.3 raise NotImplementedError - def bin_op_creator(self, ctx: Parser.ExprContext): - ctx_list = list(ctx.getChildren()) + def bin_op_creator(self, ctx: Any) -> BinOp: + ctx_list = ctx.children left_node = self.visitExpr(ctx_list[0]) - if isinstance(ctx_list[1], Parser.ComparisonOperandContext): - op = list(ctx_list[1].getChildren())[0].getSymbol().text + if not ctx_list[1].is_terminal and ctx_list[1].rule_index == RC.COMPARISON_OPERAND[0]: + op = ctx_list[1].children[0].text else: - op = ctx_list[1].getSymbol().text + op = ctx_list[1].text right_node = self.visitExpr(ctx_list[2]) token_info = extract_token_info(ctx) bin_op_node = BinOp(left=left_node, op=op, right=right_node, **token_info) return bin_op_node - def visitArithmeticExpr(self, ctx: Parser.ArithmeticExprContext): + def visitArithmeticExpr(self, ctx: Any) -> BinOp: return self.bin_op_creator(ctx) - def visitArithmeticExprOrConcat(self, ctx: Parser.ArithmeticExprOrConcatContext): + def visitArithmeticExprOrConcat(self, ctx: Any) -> BinOp: return self.bin_op_creator(ctx) - def visitComparisonExpr(self, ctx: Parser.ComparisonExprContext): + def visitComparisonExpr(self, ctx: Any) -> BinOp: return self.bin_op_creator(ctx) - def visitInNotInExpr(self, ctx: Parser.InNotInExprContext): - ctx_list = list(ctx.getChildren()) + def visitInNotInExpr(self, ctx: Any) -> BinOp: + ctx_list = ctx.children left_node = self.visitExpr(ctx_list[0]) - op = ctx_list[1].symbol.text + op = ctx_list[1].text - if isinstance(ctx_list[2], Parser.ListsContext): + if not ctx_list[2].is_terminal and ctx_list[2].rule_index == RC.LISTS[0]: right_node = Terminals().visitLists(ctx_list[2]) - elif isinstance(ctx_list[2], Parser.ValueDomainIDContext): + elif not ctx_list[2].is_terminal and ctx_list[2].rule_index == RC.VALUE_DOMAIN_ID[0]: right_node = Terminals().visitValueDomainID(ctx_list[2]) else: raise NotImplementedError @@ -204,27 +202,27 @@ def visitInNotInExpr(self, ctx: Parser.InNotInExprContext): return bin_op_node - def visitBooleanExpr(self, ctx: Parser.BooleanExprContext): + def visitBooleanExpr(self, ctx: Any) -> BinOp: return self.bin_op_creator(ctx) - def visitParenthesisExpr(self, ctx: Parser.ParenthesisExprContext): - operand = self.visitExpr(list(ctx.getChildren())[1]) + def visitParenthesisExpr(self, ctx: Any) -> ParFunction: + operand = self.visitExpr(ctx.children[1]) return ParFunction(operand=operand, **extract_token_info(ctx)) - def visitUnaryExpr(self, ctx: Parser.UnaryExprContext): - c_list = list(ctx.getChildren()) - op = c_list[0].getSymbol().text + def visitUnaryExpr(self, ctx: Any) -> UnaryOp: + c_list = ctx.children + op = c_list[0].text right = self.visitExpr(c_list[1]) return UnaryOp(op=op, operand=right, **extract_token_info(ctx)) - def visitMembershipExpr(self, ctx: Parser.MembershipExprContext): - ctx_list = list(ctx.getChildren()) + def visitMembershipExpr(self, ctx: Any) -> Any: + ctx_list = ctx.children c = ctx_list[0] membership = [ componentID for componentID in ctx_list - if isinstance(componentID, Parser.SimpleComponentIdContext) + if not componentID.is_terminal and componentID.rule_index == RC.SIMPLE_COMPONENT_ID[0] ] previous_node = self.visitExpr(c) @@ -240,8 +238,8 @@ def visitMembershipExpr(self, ctx: Parser.MembershipExprContext): return previous_node - def visitClauseExpr(self, ctx: Parser.ClauseExprContext): - ctx_list = list(ctx.getChildren()) + def visitClauseExpr(self, ctx: Any) -> Any: + ctx_list = ctx.children dataset = self.visitExpr(ctx_list[0]) @@ -258,7 +256,7 @@ def visitClauseExpr(self, ctx: Parser.ClauseExprContext): _______________________________________________________________________________________""" - def visitFunctionsExpression(self, ctx: Parser.FunctionsExpressionContext): + def visitFunctionsExpression(self, ctx: Any) -> Any: """ functions: joinOperators # joinFunctions @@ -277,40 +275,40 @@ def visitFunctionsExpression(self, ctx: Parser.FunctionsExpressionContext): """ c = ctx.children[0] - if isinstance(ctx, Parser.JoinFunctionsContext): + if ctx.ctx_id == RC.JOIN_FUNCTIONS: return self.visitJoinFunctions(c) - elif isinstance(ctx, Parser.GenericFunctionsContext): + elif ctx.ctx_id == RC.GENERIC_FUNCTIONS: return self.visitGenericFunctions(c) - elif isinstance(ctx, Parser.StringFunctionsContext): + elif ctx.ctx_id == RC.STRING_FUNCTIONS: return self.visitStringFunctions(c) - elif isinstance(ctx, Parser.NumericFunctionsContext): + elif ctx.ctx_id == RC.NUMERIC_FUNCTIONS: return self.visitNumericFunctions(c) - elif isinstance(ctx, Parser.ComparisonFunctionsContext): + elif ctx.ctx_id == RC.COMPARISON_FUNCTIONS: return self.visitComparisonFunctions(c) - elif isinstance(ctx, Parser.TimeFunctionsContext): + elif ctx.ctx_id == RC.TIME_FUNCTIONS: return self.visitTimeFunctions(c) - elif isinstance(ctx, Parser.SetFunctionsContext): + elif ctx.ctx_id == RC.SET_FUNCTIONS: return self.visitSetFunctions(c) - elif isinstance(ctx, Parser.HierarchyFunctionsContext): + elif ctx.ctx_id == RC.HIERARCHY_FUNCTIONS: return self.visitHierarchyFunctions(c) - elif isinstance(ctx, Parser.ValidationFunctionsContext): + elif ctx.ctx_id == RC.VALIDATION_FUNCTIONS: return self.visitValidationFunctions(c) - elif isinstance(ctx, Parser.ConditionalFunctionsContext): + elif ctx.ctx_id == RC.CONDITIONAL_FUNCTIONS: return self.visitConditionalFunctions(c) - elif isinstance(ctx, Parser.AggregateFunctionsContext): + elif ctx.ctx_id == RC.AGGREGATE_FUNCTIONS: return self.visitAggregateFunctions(c) - elif isinstance(ctx, Parser.AnalyticFunctionsContext): + elif ctx.ctx_id == RC.ANALYTIC_FUNCTIONS: return self.visitAnalyticFunctions(c) else: @@ -322,12 +320,12 @@ def visitFunctionsExpression(self, ctx: Parser.FunctionsExpressionContext): ----------------------------------- """ - def visitJoinFunctions(self, ctx: Parser.JoinFunctionsContext): - ctx_list = list(ctx.getChildren()) + def visitJoinFunctions(self, ctx: Any) -> Any: + ctx_list = ctx.children using_node = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text if op_node in ["inner_join", "left_join"]: clause_node, using_node = self.visitJoinClause(ctx_list[2]) @@ -356,34 +354,40 @@ def visitJoinFunctions(self, ctx: Parser.JoinFunctionsContext): join_node.isLast = True return join_node - def visitJoinClauseItem(self, ctx: Parser.JoinClauseItemContext): - ctx_list = list(ctx.getChildren()) + def visitJoinClauseItem(self, ctx: Any) -> Any: + ctx_list = ctx.children left_node = self.visitExpr(ctx_list[0]) if len(ctx_list) == 1: return left_node token_info = extract_token_info(ctx) - intop_node = ctx_list[1].getSymbol().text + intop_node = ctx_list[1].text right_node = Identifier( value=Terminals().visitAlias(ctx_list[2]), kind="DatasetID", - **extract_token_info(ctx_list[1].getSymbol()), + **extract_token_info(ctx_list[1]), ) return BinOp(left=left_node, op=intop_node, right=right_node, **token_info) - def visitJoinClause(self, ctx: Parser.JoinClauseContext): + def visitJoinClause(self, ctx: Any) -> Any: """ JoinClauseItem (COMMA joinClauseItem)* (USING componentID (COMMA componentID)*)? """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children clause_nodes = [] component_nodes = [] using = None - items = [item for item in ctx_list if isinstance(item, Parser.JoinClauseItemContext)] + items = [ + item + for item in ctx_list + if not item.is_terminal and item.rule_index == RC.JOIN_CLAUSE_ITEM[0] + ] components = [ - component for component in ctx_list if isinstance(component, Parser.ComponentIDContext) + component + for component in ctx_list + if not component.is_terminal and component.rule_index == RC.COMPONENT_ID[0] ] for item in items: @@ -396,41 +400,47 @@ def visitJoinClause(self, ctx: Parser.JoinClauseContext): return clause_nodes, using - def visitJoinClauseWithoutUsing(self, ctx: Parser.JoinClauseWithoutUsingContext): + def visitJoinClauseWithoutUsing(self, ctx: Any) -> Any: """ joinClause: joinClauseItem (COMMA joinClauseItem)* (USING componentID (COMMA componentID)*)? ; """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children clause_nodes = [] - items = [item for item in ctx_list if isinstance(item, Parser.JoinClauseItemContext)] + items = [ + item + for item in ctx_list + if not item.is_terminal and item.rule_index == RC.JOIN_CLAUSE_ITEM[0] + ] for item in items: clause_nodes.append(self.visitJoinClauseItem(item)) return clause_nodes - def visitJoinBody(self, ctx: Parser.JoinBodyContext): + def visitJoinBody(self, ctx: Any) -> Any: """ joinBody: filterClause? (calcClause|joinApplyClause|aggrClause)? (keepOrDropClause)? renameClause? """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children body_nodes = [] for c in ctx_list: - if isinstance(c, Parser.FilterClauseContext): + if c.is_terminal: + raise NotImplementedError + elif c.rule_index == RC.FILTER_CLAUSE[0]: body_nodes.append(self.visitFilterClause(c)) - elif isinstance(c, Parser.CalcClauseContext): + elif c.rule_index == RC.CALC_CLAUSE[0]: body_nodes.append(self.visitCalcClause(c)) - elif isinstance(c, Parser.JoinApplyClauseContext): + elif c.rule_index == RC.JOIN_APPLY_CLAUSE[0]: body_nodes.append(self.visitJoinApplyClause(c)) - elif isinstance(c, Parser.AggrClauseContext): + elif c.rule_index == RC.AGGR_CLAUSE[0]: body_nodes.append(self.visitAggrClause(c)) - elif isinstance(c, Parser.KeepOrDropClauseContext): + elif c.rule_index == RC.KEEP_OR_DROP_CLAUSE[0]: body_nodes.append(self.visitKeepOrDropClause(c)) - elif isinstance(c, Parser.RenameClauseContext): + elif c.rule_index == RC.RENAME_CLAUSE[0]: body_nodes.append(self.visitRenameClause(c)) else: raise NotImplementedError @@ -438,12 +448,12 @@ def visitJoinBody(self, ctx: Parser.JoinBodyContext): return body_nodes # TODO Unary Op here? - def visitJoinApplyClause(self, ctx: Parser.JoinApplyClauseContext): + def visitJoinApplyClause(self, ctx: Any) -> RegularAggregation: """ joinApplyClause: APPLY expr ; """ - ctx_list = list(ctx.getChildren()) - op_node = ctx_list[0].getSymbol().text + ctx_list = ctx.children + op_node = ctx_list[0].text operand_nodes = [self.visitExpr(ctx_list[1])] return RegularAggregation(op=op_node, children=operand_nodes, **extract_token_info(ctx)) @@ -454,37 +464,37 @@ def visitJoinApplyClause(self, ctx: Parser.JoinApplyClauseContext): ----------------------------------- """ - def visitGenericFunctions(self, ctx: Parser.GenericFunctionsContext): - if isinstance(ctx, Parser.CallDatasetContext): + def visitGenericFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.CALL_DATASET: return self.visitCallDataset(ctx) - elif isinstance(ctx, Parser.EvalAtomContext): + elif ctx.ctx_id == RC.EVAL_ATOM: return self.visitEvalAtom(ctx) - elif isinstance(ctx, Parser.CastExprDatasetContext): + elif ctx.ctx_id == RC.CAST_EXPR_DATASET: return self.visitCastExprDataset(ctx) else: raise NotImplementedError - def visitCallDataset(self, ctx: Parser.CallDatasetContext): + def visitCallDataset(self, ctx: Any) -> UDOCall: """ callFunction: operatorID LPAREN (parameter (COMMA parameter)*)? RPAREN ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] op = Terminals().visitOperatorID(c) param_nodes = [ self.visitParameter(element) for element in ctx_list - if isinstance(element, Parser.ParameterContext) + if not element.is_terminal and element.rule_index == RC.PARAMETER[0] ] return UDOCall(op=op, params=param_nodes, **extract_token_info(ctx)) - def visitEvalAtom(self, ctx: Parser.EvalAtomContext): + def visitEvalAtom(self, ctx: Any) -> EvalOp: """ | EVAL LPAREN routineName LPAREN (varID|scalarItem)? (COMMA (varID|scalarItem))* RPAREN (LANGUAGE STRING_CONSTANT)? (RETURNS evalDatasetType)? RPAREN # evalAtom """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children routine_name = Terminals().visitRoutineName(ctx_list[2]) @@ -492,12 +502,12 @@ def visitEvalAtom(self, ctx: Parser.EvalAtomContext): var_ids_nodes = [ Terminals().visitVarID(varID) for varID in ctx_list - if isinstance(varID, Parser.VarIDContext) + if not varID.is_terminal and varID.rule_index == RC.VAR_ID[0] ] constant_nodes = [ Terminals().visitScalarItem(scalar) for scalar in ctx_list - if isinstance(scalar, Parser.ScalarItemContext) + if not scalar.is_terminal and scalar.ctx_id in (RC.SIMPLE_SCALAR, RC.SCALAR_WITH_CAST) ] children_nodes = var_ids_nodes + constant_nodes @@ -505,8 +515,7 @@ def visitEvalAtom(self, ctx: Parser.EvalAtomContext): language_name = [ language for language in ctx_list - if isinstance(language, TerminalNodeImpl) - and language.getSymbol().type == Parser.STRING_CONSTANT + if language.is_terminal and language.symbol_type == vtl_cpp_parser.STRING_CONSTANT ] if len(language_name) == 0: # AST_ASTCONSTRUCTOR.12 @@ -515,7 +524,7 @@ def visitEvalAtom(self, ctx: Parser.EvalAtomContext): output_node = [ Terminals().visitEvalDatasetType(output) for output in ctx_list - if isinstance(output, Parser.EvalDatasetTypeContext) + if not output.is_terminal and output.rule_index == RC.EVAL_DATASET_TYPE[0] ] if len(output_node) == 0: # AST_ASTCONSTRUCTOR.13 @@ -525,45 +534,44 @@ def visitEvalAtom(self, ctx: Parser.EvalAtomContext): name=routine_name, operands=children_nodes, output=output_node[0], - language=language_name[0].getSymbol().text, + language=language_name[0].text, **extract_token_info(ctx), ) - def visitCastExprDataset(self, ctx: Parser.CastExprDatasetContext): + def visitCastExprDataset(self, ctx: Any) -> Any: """ | CAST LPAREN expr COMMA (basicScalarType|valueDomainName) (COMMA STRING_CONSTANT)? RPAREN # castExprDataset """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - - op = token.text + op = c.text expr_node = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] basic_scalar_type = [ Terminals().visitBasicScalarType(type_) for type_ in ctx_list - if isinstance(type_, Parser.BasicScalarTypeContext) + if not type_.is_terminal and type_.rule_index == RC.BASIC_SCALAR_TYPE[0] ] [ Terminals().visitValueDomainName(valueD) for valueD in ctx_list - if isinstance(valueD, Parser.ValueDomainNameContext) + if not valueD.is_terminal and valueD.rule_index == RC.VALUE_DOMAIN_NAME[0] ] if len(ctx_list) > 6: param_node = [ ParamConstant( type_="PARAM_CAST", - value=str_.symbol.text.strip('"'), - **extract_token_info(str_.getSymbol()), + value=str_.text.strip('"'), + **extract_token_info(str_), ) for str_ in ctx_list - if isinstance(str_, TerminalNodeImpl) - and str_.getSymbol().type == Parser.STRING_CONSTANT + if str_.is_terminal and str_.symbol_type == vtl_cpp_parser.STRING_CONSTANT ] else: param_node = [] @@ -579,16 +587,14 @@ def visitCastExprDataset(self, ctx: Parser.CastExprDatasetContext): # AST_ASTCONSTRUCTOR.14 raise NotImplementedError - def visitParameter(self, ctx: Parser.ParameterContext): - ctx_list = list(ctx.getChildren()) + def visitParameter(self, ctx: Any) -> Any: + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ExprContext): + if not c.is_terminal and c.rule_index == 2: return self.visitExpr(c) - elif isinstance(c, TerminalNodeImpl): - return ID( - type_="OPTIONAL", value=c.getSymbol().text, **extract_token_info(c.getSymbol()) - ) + elif c.is_terminal: + return ID(type_="OPTIONAL", value=c.text, **extract_token_info(c)) else: raise NotImplementedError @@ -598,39 +604,41 @@ def visitParameter(self, ctx: Parser.ParameterContext): ----------------------------------- """ - def visitStringFunctions(self, ctx: Parser.StringFunctionsContext): - if isinstance(ctx, Parser.UnaryStringFunctionContext): + def visitStringFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.UNARY_STRING_FUNCTION: return self.visitUnaryStringFunction(ctx) - elif isinstance(ctx, Parser.SubstrAtomContext): + elif ctx.ctx_id == RC.SUBSTR_ATOM: return self.visitSubstrAtom(ctx) - elif isinstance(ctx, Parser.ReplaceAtomContext): + elif ctx.ctx_id == RC.REPLACE_ATOM: return self.visitReplaceAtom(ctx) - elif isinstance(ctx, Parser.InstrAtomContext): + elif ctx.ctx_id == RC.INSTR_ATOM: return self.visitInstrAtom(ctx) else: raise NotImplementedError - def visitUnaryStringFunction(self, ctx: Parser.UnaryStringFunctionContext): - ctx_list = list(ctx.getChildren()) + def visitUnaryStringFunction(self, ctx: Any) -> UnaryOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExpr(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitSubstrAtom(self, ctx: Parser.SubstrAtomContext): - ctx_list = list(ctx.getChildren()) + def visitSubstrAtom(self, ctx: Any) -> ParamOp: + ctx_list = ctx.children c = ctx_list[0] params_nodes = [] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprContext)] - params = [param for param in ctx_list if isinstance(param, Parser.OptionalExprContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 2] + params = [ + param + for param in ctx_list + if not param.is_terminal and param.rule_index == RC.OPTIONAL_EXPR[0] + ] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExpr(children)) @@ -642,21 +650,22 @@ def visitSubstrAtom(self, ctx: Parser.SubstrAtomContext): op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitReplaceAtom(self, ctx: Parser.ReplaceAtomContext): - ctx_list = list(ctx.getChildren()) + def visitReplaceAtom(self, ctx: Any) -> ParamOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() expressions = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] params = [ self.visitOptionalExpr(param) for param in ctx_list - if isinstance(param, Parser.OptionalExprContext) + if not param.is_terminal and param.rule_index == RC.OPTIONAL_EXPR[0] ] - op_node = token.text + op_node = c.text children_nodes = [expressions[0]] params_nodes = [expressions[1]] + params @@ -665,21 +674,22 @@ def visitReplaceAtom(self, ctx: Parser.ReplaceAtomContext): op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitInstrAtom(self, ctx: Parser.InstrAtomContext): - ctx_list = list(ctx.getChildren()) + def visitInstrAtom(self, ctx: Any) -> ParamOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() expressions = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] params = [ self.visitOptionalExpr(param) for param in ctx_list - if isinstance(param, Parser.OptionalExprContext) + if not param.is_terminal and param.rule_index == RC.OPTIONAL_EXPR[0] ] - op_node = token.text + op_node = c.text children_nodes = [expressions[0]] params_nodes = [expressions[1]] + params @@ -694,37 +704,39 @@ def visitInstrAtom(self, ctx: Parser.InstrAtomContext): ----------------------------------- """ - def visitNumericFunctions(self, ctx: Parser.NumericFunctionsContext): - if isinstance(ctx, Parser.UnaryNumericContext): + def visitNumericFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.UNARY_NUMERIC: return self.visitUnaryNumeric(ctx) - elif isinstance(ctx, Parser.UnaryWithOptionalNumericContext): + elif ctx.ctx_id == RC.UNARY_WITH_OPTIONAL_NUMERIC: return self.visitUnaryWithOptionalNumeric(ctx) - elif isinstance(ctx, Parser.BinaryNumericContext): + elif ctx.ctx_id == RC.BINARY_NUMERIC: return self.visitBinaryNumeric(ctx) else: raise NotImplementedError - def visitUnaryNumeric(self, ctx: Parser.UnaryNumericContext): - ctx_list = list(ctx.getChildren()) + def visitUnaryNumeric(self, ctx: Any) -> UnaryOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExpr(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitUnaryWithOptionalNumeric(self, ctx: Parser.UnaryWithOptionalNumericContext): - ctx_list = list(ctx.getChildren()) + def visitUnaryWithOptionalNumeric(self, ctx: Any) -> ParamOp: + ctx_list = ctx.children c = ctx_list[0] params_nodes = [] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprContext)] - params = [param for param in ctx_list if isinstance(param, Parser.OptionalExprContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 2] + params = [ + param + for param in ctx_list + if not param.is_terminal and param.rule_index == RC.OPTIONAL_EXPR[0] + ] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExpr(children)) @@ -736,14 +748,12 @@ def visitUnaryWithOptionalNumeric(self, ctx: Parser.UnaryWithOptionalNumericCont op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitBinaryNumeric(self, ctx: Parser.BinaryNumericContext): - ctx_list = list(ctx.getChildren()) + def visitBinaryNumeric(self, ctx: Any) -> BinOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - left_node = self.visitExpr(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExpr(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) @@ -753,63 +763,61 @@ def visitBinaryNumeric(self, ctx: Parser.BinaryNumericContext): ----------------------------------- """ - def visitComparisonFunctions(self, ctx: Parser.ComparisonFunctionsContext): - if isinstance(ctx, Parser.BetweenAtomContext): + def visitComparisonFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.BETWEEN_ATOM: return self.visitBetweenAtom(ctx) - elif isinstance(ctx, Parser.CharsetMatchAtomContext): + elif ctx.ctx_id == RC.CHARSET_MATCH_ATOM: return self.visitCharsetMatchAtom(ctx) - elif isinstance(ctx, Parser.IsNullAtomContext): + elif ctx.ctx_id == RC.IS_NULL_ATOM: return self.visitIsNullAtom(ctx) - elif isinstance(ctx, Parser.ExistInAtomContext): + elif ctx.ctx_id == RC.EXIST_IN_ATOM: return self.visitExistInAtom(ctx) else: raise NotImplementedError - def visitBetweenAtom(self, ctx: Parser.BetweenAtomContext): - ctx_list = list(ctx.getChildren()) + def visitBetweenAtom(self, ctx: Any) -> MulOp: + ctx_list = ctx.children c = ctx_list[0] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 2] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExpr(children)) return MulOp(op=op_node, children=children_nodes, **extract_token_info(ctx)) - def visitCharsetMatchAtom(self, ctx: Parser.CharsetMatchAtomContext): - ctx_list = list(ctx.getChildren()) + def visitCharsetMatchAtom(self, ctx: Any) -> BinOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() left_node = self.visitExpr(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExpr(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) - def visitIsNullAtom(self, ctx: Parser.IsNullAtomContext): - ctx_list = list(ctx.getChildren()) + def visitIsNullAtom(self, ctx: Any) -> UnaryOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExpr(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitExistInAtom(self, ctx: Parser.ExistInAtomContext): - ctx_list = list(ctx.getChildren()) - token = ctx_list[0].getSymbol() - op = token.text + def visitExistInAtom(self, ctx: Any) -> MulOp: + ctx_list = ctx.children + op = ctx_list[0].text operand_nodes = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] retain_nodes = [ Terminals().visitRetainType(retain) for retain in ctx_list - if isinstance(retain, Parser.RetainTypeContext) + if not retain.is_terminal and retain.rule_index == RC.RETAIN_TYPE[0] ] return MulOp(op=op, children=operand_nodes + retain_nodes, **extract_token_info(ctx)) @@ -820,50 +828,46 @@ def visitExistInAtom(self, ctx: Parser.ExistInAtomContext): ----------------------------------- """ - def visitTimeFunctions(self, ctx: Parser.TimeFunctionsContext): - if isinstance(ctx, Parser.PeriodAtomContext): - # return self.visitPeriodAtom(ctx) + def visitTimeFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.PERIOD_ATOM: return self.visitTimeUnaryAtom(ctx) - elif isinstance(ctx, Parser.FillTimeAtomContext): + elif ctx.ctx_id == RC.FILL_TIME_ATOM: return self.visitFillTimeAtom(ctx) - elif isinstance(ctx, Parser.FlowAtomContext): + elif ctx.ctx_id == RC.FLOW_ATOM: return self.visitFlowAtom(ctx) - elif isinstance(ctx, Parser.TimeShiftAtomContext): + elif ctx.ctx_id == RC.TIME_SHIFT_ATOM: return self.visitTimeShiftAtom(ctx) - elif isinstance(ctx, Parser.TimeAggAtomContext): + elif ctx.ctx_id == RC.TIME_AGG_ATOM: return self.visitTimeAggAtom(ctx) - elif isinstance(ctx, Parser.CurrentDateAtomContext): + elif ctx.ctx_id == RC.CURRENT_DATE_ATOM: return self.visitCurrentDateAtom(ctx) - elif isinstance(ctx, Parser.DateDiffAtomContext): + elif ctx.ctx_id == RC.DATE_DIFF_ATOM: return self.visitTimeDiffAtom(ctx) - elif isinstance(ctx, Parser.DateAddAtomContext): + elif ctx.ctx_id == RC.DATE_ADD_ATOM: return self.visitTimeAddAtom(ctx) - elif isinstance( - ctx, - ( - Parser.YearAtomContext, - Parser.MonthAtomContext, - Parser.DayOfMonthAtomContext, - Parser.DayOfYearAtomContext, - Parser.DayToYearAtomContext, - Parser.DayToMonthAtomContext, - Parser.YearTodayAtomContext, - Parser.MonthTodayAtomContext, - ), + elif ctx.ctx_id in ( + RC.YEAR_ATOM, + RC.MONTH_ATOM, + RC.DAY_OF_MONTH_ATOM, + RC.DAY_OF_YEAR_ATOM, + RC.DAY_TO_YEAR_ATOM, + RC.DAY_TO_MONTH_ATOM, + RC.YEAR_TODAY_ATOM, + RC.MONTH_TODAY_ATOM, ): return self.visitTimeUnaryAtom(ctx) else: raise NotImplementedError - def visitTimeUnaryAtom(self, ctx: Any): - ctx_list = list(ctx.getChildren()) + def visitTimeUnaryAtom(self, ctx: Any) -> UnaryOp: + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text operand_node = [ self.visitExpr(operand) for operand in ctx_list - if isinstance(operand, Parser.ExprContext) + if not operand.is_terminal and operand.rule_index == 2 ] if len(operand_node) == 0: @@ -872,14 +876,14 @@ def visitTimeUnaryAtom(self, ctx: Any): return UnaryOp(op=op, operand=operand_node[0], **extract_token_info(ctx)) - def visitTimeShiftAtom(self, ctx: Parser.TimeShiftAtomContext): + def visitTimeShiftAtom(self, ctx: Any) -> BinOp: """ timeShiftExpr: TIMESHIFT '(' expr ',' INTEGER_CONSTANT ')' ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text left_node = self.visitExpr(ctx_list[2]) right_node = Constant( type_="INTEGER_CONSTANT", @@ -889,22 +893,22 @@ def visitTimeShiftAtom(self, ctx: Parser.TimeShiftAtomContext): return BinOp(left=left_node, op=op, right=right_node, **extract_token_info(ctx)) - def visitFillTimeAtom(self, ctx: Parser.FillTimeAtomContext): + def visitFillTimeAtom(self, ctx: Any) -> ParamOp: """ timeSeriesExpr: FILL_TIME_SERIES '(' expr (',' (SINGLE|ALL))? ')' ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text children_node = [self.visitExpr(ctx_list[2])] if len(ctx_list) > 4: param_constant_node = [ ParamConstant( type_="PARAM_TIMESERIES", - value=ctx_list[4].getSymbol().text, - **extract_token_info(ctx_list[4].getSymbol()), + value=ctx_list[4].text, + **extract_token_info(ctx_list[4]), ) ] else: @@ -914,31 +918,41 @@ def visitFillTimeAtom(self, ctx: Parser.FillTimeAtomContext): op=op, children=children_node, params=param_constant_node, **extract_token_info(ctx) ) - def visitTimeAggAtom(self, ctx: Parser.TimeAggAtomContext): + def visitTimeAggAtom(self, ctx: Any) -> TimeAggregation: """ TIME_AGG LPAREN periodIndTo=STRING_CONSTANT (COMMA periodIndFrom=(STRING_CONSTANT| OPTIONAL ))? (COMMA op=optionalExpr)? (COMMA (FIRST|LAST))? RPAREN # timeAggAtom """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text - period_to = str(ctx.periodIndTo.text)[1:-1] - period_from = None - - if ctx.periodIndFrom is not None and ctx.periodIndFrom.type != Parser.OPTIONAL: - period_from = str(ctx.periodIndFrom.text)[1:-1] - - conf = [ - str_.getSymbol().text - for str_ in ctx_list - if isinstance(str_, TerminalNodeImpl) - and str_.getSymbol().type in [Parser.FIRST, Parser.LAST] - ] - - conf = None if len(conf) == 0 else conf[0] + op = c.text - if ctx.op is not None: - operand_node = self.visitOptionalExpr(ctx.op) + # Find periodIndTo: first STRING_CONSTANT terminal + period_to = None + period_from = None + optional_expr_node = None + conf = None + period_to_found = False + + for child in ctx_list: + if child.is_terminal: + if child.symbol_type == vtl_cpp_parser.STRING_CONSTANT: + if not period_to_found: + period_to = str(child.text)[1:-1] + period_to_found = True + else: + period_from = str(child.text)[1:-1] + elif child.symbol_type == vtl_cpp_parser.OPTIONAL: + pass # periodIndFrom is OPTIONAL, skip + elif child.symbol_type in (vtl_cpp_parser.FIRST, vtl_cpp_parser.LAST): + conf = child.text + elif not child.is_terminal and child.rule_index == RC.OPTIONAL_EXPR[0]: + optional_expr_node = child + + conf_val = None if conf is None else conf + + if optional_expr_node is not None: + operand_node = self.visitOptionalExpr(optional_expr_node) if isinstance(operand_node, ID): operand_node = None elif isinstance(operand_node, Identifier): @@ -953,39 +967,39 @@ def visitTimeAggAtom(self, ctx: Parser.TimeAggAtomContext): operand=operand_node, period_to=period_to, period_from=period_from, - conf=conf, + conf=conf_val, **extract_token_info(ctx), ) - def visitFlowAtom(self, ctx: Parser.FlowAtomContext): - ctx_list = list(ctx.getChildren()) + def visitFlowAtom(self, ctx: Any) -> UnaryOp: + ctx_list = ctx.children - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand_node = self.visitExpr(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitCurrentDateAtom(self, ctx: Parser.CurrentDateAtomContext): - c = list(ctx.getChildren())[0] - return MulOp(op=c.getSymbol().text, children=[], **extract_token_info(ctx)) + def visitCurrentDateAtom(self, ctx: Any) -> MulOp: + c = ctx.children[0] + return MulOp(op=c.text, children=[], **extract_token_info(ctx)) - def visitTimeDiffAtom(self, ctx: Parser.TimeShiftAtomContext): + def visitTimeDiffAtom(self, ctx: Any) -> BinOp: """ """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text left_node = self.visitExpr(ctx_list[2]) right_node = self.visitExpr(ctx_list[4]) return BinOp(left=left_node, op=op, right=right_node, **extract_token_info(ctx)) - def visitTimeAddAtom(self, ctx: Parser.TimeShiftAtomContext): + def visitTimeAddAtom(self, ctx: Any) -> ParamOp: """ """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text children_node = [self.visitExpr(ctx_list[2])] param_constant_node = [] @@ -1005,20 +1019,18 @@ def visitTimeAddAtom(self, ctx: Parser.TimeShiftAtomContext): ----------------------------------- """ - def visitConditionalFunctions(self, ctx: Parser.ConditionalFunctionsContext): - if isinstance(ctx, Parser.NvlAtomContext): + def visitConditionalFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.NVL_ATOM: return self.visitNvlAtom(ctx) else: raise NotImplementedError - def visitNvlAtom(self, ctx: Parser.NvlAtomContext): - ctx_list = list(ctx.getChildren()) + def visitNvlAtom(self, ctx: Any) -> BinOp: + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - left_node = self.visitExpr(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExpr(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) @@ -1028,50 +1040,50 @@ def visitNvlAtom(self, ctx: Parser.NvlAtomContext): ----------------------------------- """ - def visitSetFunctions(self, ctx: Parser.SetFunctionsContext): + def visitSetFunctions(self, ctx: Any) -> Any: """ setExpr: UNION LPAREN left=expr (COMMA expr)+ RPAREN # unionAtom | INTERSECT LPAREN left=expr (COMMA expr)+ RPAREN # intersectAtom | op=(SETDIFF|SYMDIFF) LPAREN left=expr COMMA right=expr RPAREN # setOrSYmDiffAtom """ # noqa E501 - if isinstance(ctx, Parser.UnionAtomContext): + if ctx.ctx_id == RC.UNION_ATOM: return self.visitUnionAtom(ctx) - elif isinstance(ctx, Parser.IntersectAtomContext): + elif ctx.ctx_id == RC.INTERSECT_ATOM: return self.visitIntersectAtom(ctx) - elif isinstance(ctx, Parser.SetOrSYmDiffAtomContext): + elif ctx.ctx_id == RC.SET_OR_SYM_DIFF_ATOM: return self.visitSetOrSYmDiffAtom(ctx) else: raise NotImplementedError - def visitUnionAtom(self, ctx: Parser.UnionAtomContext): - ctx_list = list(ctx.getChildren()) + def visitUnionAtom(self, ctx: Any) -> MulOp: + ctx_list = ctx.children exprs_nodes = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] - return MulOp( - op=ctx_list[0].getSymbol().text, children=exprs_nodes, **extract_token_info(ctx) - ) + return MulOp(op=ctx_list[0].text, children=exprs_nodes, **extract_token_info(ctx)) - def visitIntersectAtom(self, ctx: Parser.IntersectAtomContext): - ctx_list = list(ctx.getChildren()) + def visitIntersectAtom(self, ctx: Any) -> MulOp: + ctx_list = ctx.children exprs_nodes = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] - return MulOp( - op=ctx_list[0].getSymbol().text, children=exprs_nodes, **extract_token_info(ctx) - ) + return MulOp(op=ctx_list[0].text, children=exprs_nodes, **extract_token_info(ctx)) - def visitSetOrSYmDiffAtom(self, ctx: Parser.SetOrSYmDiffAtomContext): - ctx_list = list(ctx.getChildren()) + def visitSetOrSYmDiffAtom(self, ctx: Any) -> MulOp: + ctx_list = ctx.children exprs_nodes = [ - self.visitExpr(expr) for expr in ctx_list if isinstance(expr, Parser.ExprContext) + self.visitExpr(expr) + for expr in ctx_list + if not expr.is_terminal and expr.rule_index == 2 ] - return MulOp( - op=ctx_list[0].getSymbol().text, children=exprs_nodes, **extract_token_info(ctx) - ) + return MulOp(op=ctx_list[0].text, children=exprs_nodes, **extract_token_info(ctx)) """ ----------------------------------- @@ -1079,16 +1091,16 @@ def visitSetOrSYmDiffAtom(self, ctx: Parser.SetOrSYmDiffAtomContext): ----------------------------------- """ - def visitHierarchyFunctions(self, ctx: Parser.HierarchyFunctionsContext): + def visitHierarchyFunctions(self, ctx: Any) -> HROperation: """ HIERARCHY LPAREN op=expr COMMA hrName=IDENTIFIER (conditionClause)? (RULE ruleComponent=componentID)? (validationMode)? (inputModeHierarchy)? outputModeHierarchy? RPAREN """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text dataset_node = self.visitExpr(ctx_list[2]) - ruleset_name = ctx_list[4].getSymbol().text + ruleset_name = ctx_list[4].text conditions = [] validation_mode: Optional[ValidationMode] = None @@ -1097,20 +1109,22 @@ def visitHierarchyFunctions(self, ctx: Parser.HierarchyFunctionsContext): rule_comp = None for c in ctx_list: - if isinstance(c, Parser.ConditionClauseContext): + if c.is_terminal: + continue + if c.rule_index == RC.CONDITION_CLAUSE[0]: conditions.append(Terminals().visitConditionClause(c)) - elif isinstance(c, Parser.ComponentIDContext): + elif c.rule_index == RC.COMPONENT_ID[0]: rule_comp = Terminals().visitComponentID(c) - elif isinstance(c, Parser.ValidationModeContext): + elif c.rule_index == RC.VALIDATION_MODE[0]: mode_str = Terminals().visitValidationMode(c) validation_mode = ValidationMode(mode_str) - elif isinstance(c, Parser.InputModeHierarchyContext): + elif c.rule_index == RC.INPUT_MODE_HIERARCHY[0]: input_str = Terminals().visitInputModeHierarchy(c) if input_str == DATASET_PRIORITY: msg = "Dataset Priority input mode on HR is not implemented" raise NotImplementedError(msg) input_mode = HRInputMode(input_str) - elif isinstance(c, Parser.OutputModeHierarchyContext): + elif c.rule_index == RC.OUTPUT_MODE_HIERARCHY[0]: output_str = Terminals().visitOutputModeHierarchy(c) output = HierarchyOutput(output_str) @@ -1147,27 +1161,27 @@ def visitHierarchyFunctions(self, ctx: Parser.HierarchyFunctionsContext): ----------------------------------- """ - def visitValidationFunctions(self, ctx: Parser.ValidationFunctionsContext): - if isinstance(ctx, Parser.ValidateDPrulesetContext): + def visitValidationFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.VALIDATE_D_PRULESET: return self.visitValidateDPruleset(ctx) - elif isinstance(ctx, Parser.ValidateHRrulesetContext): + elif ctx.ctx_id == RC.VALIDATE_HR_RULESET: return self.visitValidateHRruleset(ctx) - elif isinstance(ctx, Parser.ValidationSimpleContext): + elif ctx.ctx_id == RC.VALIDATION_SIMPLE: return self.visitValidationSimple(ctx) - def visitValidateDPruleset(self, ctx: Parser.ValidateDPrulesetContext): + def visitValidateDPruleset(self, ctx: Any) -> DPValidation: """ validationDatapoint: CHECK_DATAPOINT '(' expr ',' IDENTIFIER (COMPONENTS componentID (',' componentID)*)? (INVALID|ALL_MEASURES|ALL)? ')' ; """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children dataset_node = self.visitExpr(ctx_list[2]) - ruleset_name = ctx_list[4].getSymbol().text + ruleset_name = ctx_list[4].text components = [ Terminals().visitComponentID(comp) for comp in ctx_list - if isinstance(comp, Parser.ComponentIDContext) + if not comp.is_terminal and comp.rule_index == RC.COMPONENT_ID[0] ] component_names = [] for x in components: @@ -1179,7 +1193,7 @@ def visitValidateDPruleset(self, ctx: Parser.ValidateDPrulesetContext): # Default value for output is invalid (None means use default at interpretation) output: Optional[ValidationOutput] = None - if isinstance(ctx_list[-2], Parser.ValidationOutputContext): + if not ctx_list[-2].is_terminal and ctx_list[-2].rule_index == RC.VALIDATION_OUTPUT[0]: output_str = Terminals().visitValidationOutput(ctx_list[-2]) output = ValidationOutput(output_str) @@ -1191,18 +1205,18 @@ def visitValidateDPruleset(self, ctx: Parser.ValidateDPrulesetContext): **extract_token_info(ctx), ) - def visitValidateHRruleset(self, ctx: Parser.ValidateHRrulesetContext): + def visitValidateHRruleset(self, ctx: Any) -> HROperation: """ CHECK_HIERARCHY LPAREN op=expr COMMA hrName=IDENTIFIER conditionClause? (RULE componentID)? validationMode? inputMode? validationOutput? RPAREN # validateHRruleset """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text dataset_node = self.visitExpr(ctx_list[2]) - ruleset_name = ctx_list[4].getSymbol().text + ruleset_name = ctx_list[4].text conditions = [] validation_mode: Optional[ValidationMode] = None @@ -1211,20 +1225,22 @@ def visitValidateHRruleset(self, ctx: Parser.ValidateHRrulesetContext): rule_comp = None for c in ctx_list: - if isinstance(c, Parser.ConditionClauseContext): + if c.is_terminal: + continue + if c.rule_index == RC.CONDITION_CLAUSE[0]: conditions.append(Terminals().visitConditionClause(c)) - elif isinstance(c, Parser.ComponentIDContext): + elif c.rule_index == RC.COMPONENT_ID[0]: rule_comp = Terminals().visitComponentID(c) - elif isinstance(c, Parser.ValidationModeContext): + elif c.rule_index == RC.VALIDATION_MODE[0]: mode_str = Terminals().visitValidationMode(c) validation_mode = ValidationMode(mode_str) - elif isinstance(c, Parser.InputModeContext): + elif c.rule_index == RC.INPUT_MODE[0]: input_str = Terminals().visitInputMode(c) if input_str == DATASET_PRIORITY: msg = "Dataset Priority input mode on HR is not implemented" raise NotImplementedError(msg) input_mode = CHInputMode(input_str) - elif isinstance(c, Parser.ValidationOutputContext): + elif c.rule_index == RC.VALIDATION_OUTPUT[0]: output_str = Terminals().visitValidationOutput(c) output = ValidationOutput(output_str) @@ -1259,13 +1275,12 @@ def visitValidateHRruleset(self, ctx: Parser.ValidateHRrulesetContext): **extract_token_info(ctx), ) - def visitValidationSimple(self, ctx: Parser.ValidationSimpleContext): + def visitValidationSimple(self, ctx: Any) -> Validation: """ | CHECK LPAREN op=expr (codeErr=erCode)? (levelCode=erLevel)? imbalanceExpr? output=(INVALID|ALL)? RPAREN # validationSimple """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() validation_node = self.visitExpr(ctx_list[2]) @@ -1273,18 +1288,20 @@ def visitValidationSimple(self, ctx: Parser.ValidationSimpleContext): error_code = None error_level = None for param in ctx_list: - if isinstance(param, Parser.ErCodeContext): + if param.is_terminal: + continue + if param.rule_index == RC.ER_CODE[0]: error_code = Terminals().visitErCode(param) - elif isinstance(param, Parser.ErLevelContext): + elif param.rule_index == RC.ER_LEVEL[0]: error_level = Terminals().visitErLevel(param) - elif isinstance(param, Parser.ImbalanceExprContext): + elif param.rule_index == RC.IMBALANCE_EXPR[0]: inbalance_node = self.visitImbalanceExpr(param) - invalid = ctx_list[-2] if isinstance(ctx_list[-2], TerminalNodeImpl) else None - invalid_value = False if invalid is None else invalid.getSymbol().text == "invalid" + invalid = ctx_list[-2] if ctx_list[-2].is_terminal else None + invalid_value = False if invalid is None else invalid.text == "invalid" return Validation( - op=token.text, + op=c.text, validation=validation_node, error_code=error_code, error_level=error_level, @@ -1293,8 +1310,8 @@ def visitValidationSimple(self, ctx: Parser.ValidationSimpleContext): **extract_token_info(ctx), ) - def visitImbalanceExpr(self, ctx: Parser.ImbalanceExprContext): - ctx_list = list(ctx.getChildren()) + def visitImbalanceExpr(self, ctx: Any) -> Any: + ctx_list = ctx.children return self.visitExpr(ctx_list[1]) """ @@ -1304,7 +1321,7 @@ def visitImbalanceExpr(self, ctx: Parser.ImbalanceExprContext): """ # TODO Count function count() without parameters. Used at least in aggregations at having. - def visitAggregateFunctions(self, ctx: Parser.AggregateFunctionsContext): + def visitAggregateFunctions(self, ctx: Any) -> Any: """ aggrFunction: SUM '(' expr ')' | AVG '(' expr ')' @@ -1319,23 +1336,31 @@ def visitAggregateFunctions(self, ctx: Parser.AggregateFunctionsContext): | VAR_SAMP '(' expr ')' ; """ - if isinstance(ctx, Parser.AggrDatasetContext): + if ctx.ctx_id == RC.AGGR_DATASET: return self.visitAggrDataset(ctx) else: raise NotImplementedError - def visitAggrDataset(self, ctx: Parser.AggrDatasetContext): - ctx_list = list(ctx.getChildren()) - # c = ctx_list[0] + def visitAggrDataset(self, ctx: Any) -> Aggregation: + ctx_list = ctx.children grouping_op = None group_node = None have_node = None - groups = [group for group in ctx_list if isinstance(group, Parser.GroupingClauseContext)] - haves = [have for have in ctx_list if isinstance(have, Parser.HavingClauseContext)] + groups = [ + group + for group in ctx_list + if not group.is_terminal + and group.rule_index == RC.GROUP_BY_OR_EXCEPT[0] # GroupingClause rule_index = 56 + ] + haves = [ + have + for have in ctx_list + if not have.is_terminal and have.rule_index == RC.HAVING_CLAUSE[0] + ] - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExpr(ctx_list[2]) if len(groups) != 0: @@ -1359,36 +1384,34 @@ def visitAggrDataset(self, ctx: Parser.AggrDatasetContext): ----------------------------------- """ - def visitAnalyticFunctions(self, ctx: Parser.AnalyticFunctionsContext): - # ctx_list = list(ctx.getChildren()) - - if isinstance(ctx, Parser.AnSimpleFunctionContext): + def visitAnalyticFunctions(self, ctx: Any) -> Any: + if ctx.ctx_id == RC.AN_SIMPLE_FUNCTION: return self.visitAnSimpleFunction(ctx) - elif isinstance(ctx, Parser.LagOrLeadAnContext): + elif ctx.ctx_id == RC.LAG_OR_LEAD_AN: return self.visitLagOrLeadAn(ctx) - elif isinstance(ctx, Parser.RatioToReportAnContext): + elif ctx.ctx_id == RC.RATIO_TO_REPORT_AN: return self.visitRatioToReportAn(ctx) else: raise NotImplementedError - def visitAnSimpleFunction(self, ctx: Parser.AnSimpleFunctionContext): - ctx_list = list(ctx.getChildren()) + def visitAnSimpleFunction(self, ctx: Any) -> Analytic: + ctx_list = ctx.children window = None partition_by = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExpr(ctx_list[2]) for c in ctx_list[5:-2]: - if isinstance(c, Parser.PartitionByClauseContext): + if not c.is_terminal and c.rule_index == RC.PARTITION_BY_CLAUSE[0]: partition_by = Terminals().visitPartitionByClause(c) continue - elif isinstance(c, Parser.OrderByClauseContext): + elif not c.is_terminal and c.rule_index == RC.ORDER_BY_CLAUSE[0]: order_by = Terminals().visitOrderByClause(c) continue - elif isinstance(c, Parser.WindowingClauseContext): + elif not c.is_terminal and c.rule_index == RC.WINDOWING_CLAUSE[0]: window = Terminals().visitWindowingClause(c) continue else: @@ -1413,27 +1436,32 @@ def visitAnSimpleFunction(self, ctx: Parser.AnSimpleFunctionContext): **extract_token_info(ctx), ) - def visitLagOrLeadAn(self, ctx: Parser.LagOrLeadAnContext): - ctx_list = list(ctx.getChildren()) + def visitLagOrLeadAn(self, ctx: Any) -> Analytic: + ctx_list = ctx.children params = None partition_by = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExpr(ctx_list[2]) for c in ctx_list[4:-2]: - if isinstance(c, Parser.PartitionByClauseContext): + if c.is_terminal: + continue + if c.rule_index == RC.PARTITION_BY_CLAUSE[0]: partition_by = Terminals().visitPartitionByClause(c) continue - elif isinstance(c, Parser.OrderByClauseContext): + elif c.rule_index == RC.ORDER_BY_CLAUSE[0]: order_by = Terminals().visitOrderByClause(c) continue - elif isinstance(c, (Parser.SignedIntegerContext, Parser.ScalarItemContext)): + elif c.rule_index == RC.SIGNED_INTEGER[0] or c.ctx_id in ( + RC.SIMPLE_SCALAR, + RC.SCALAR_WITH_CAST, + ): if params is None: params = [] - if isinstance(c, Parser.SignedIntegerContext): + if c.rule_index == RC.SIGNED_INTEGER[0]: params.append(Terminals().visitSignedInteger(c)) else: params.append(Terminals().visitScalarItem(c)) @@ -1452,13 +1480,12 @@ def visitLagOrLeadAn(self, ctx: Parser.LagOrLeadAnContext): **extract_token_info(ctx), ) - def visitRatioToReportAn(self, ctx: Parser.RatioToReportAnContext): - ctx_list = list(ctx.getChildren()) + def visitRatioToReportAn(self, ctx: Any) -> Analytic: + ctx_list = ctx.children - # params = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExpr(ctx_list[2]) partition_by = Terminals().visitPartitionByClause(ctx_list[5]) @@ -1478,7 +1505,7 @@ def visitRatioToReportAn(self, ctx: Parser.RatioToReportAnContext): _______________________________________________________________________________________""" - def visitDatasetClause(self, ctx: Parser.DatasetClauseContext): + def visitDatasetClause(self, ctx: Any) -> Any: """ datasetClause: renameClause @@ -1492,35 +1519,35 @@ def visitDatasetClause(self, ctx: Parser.DatasetClauseContext): | subspaceExpr ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] # RENAME renameClause - if isinstance(c, Parser.RenameClauseContext): + if not c.is_terminal and c.rule_index == RC.RENAME_CLAUSE[0]: return self.visitRenameClause(c) # aggrClause - elif isinstance(c, Parser.AggrClauseContext): + elif not c.is_terminal and c.rule_index == RC.AGGR_CLAUSE[0]: return self.visitAggrClause(c) # filterClause - elif isinstance(c, Parser.FilterClauseContext): + elif not c.is_terminal and c.rule_index == RC.FILTER_CLAUSE[0]: return self.visitFilterClause(c) # calcClause - elif isinstance(c, Parser.CalcClauseContext): + elif not c.is_terminal and c.rule_index == RC.CALC_CLAUSE[0]: return self.visitCalcClause(c) # keepClause - elif isinstance(c, Parser.KeepOrDropClauseContext): + elif not c.is_terminal and c.rule_index == RC.KEEP_OR_DROP_CLAUSE[0]: return self.visitKeepOrDropClause(c) # pivotExpr - elif isinstance(c, Parser.PivotOrUnpivotClauseContext): + elif not c.is_terminal and c.rule_index == RC.PIVOT_OR_UNPIVOT_CLAUSE[0]: return self.visitPivotOrUnpivotClause(c) # subspaceExpr - elif isinstance(c, Parser.SubspaceClauseContext): + elif not c.is_terminal and c.rule_index == RC.SUBSPACE_CLAUSE[0]: return self.visitSubspaceClause(c) """ @@ -1529,16 +1556,16 @@ def visitDatasetClause(self, ctx: Parser.DatasetClauseContext): ----------------------------------- """ - def visitRenameClause(self, ctx: Parser.RenameClauseContext): + def visitRenameClause(self, ctx: Any) -> RegularAggregation: """ renameClause: RENAME renameClauseItem (COMMA renameClauseItem)*; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children renames = [ ctx_child for ctx_child in ctx_list - if isinstance(ctx_child, Parser.RenameClauseItemContext) + if not ctx_child.is_terminal and ctx_child.rule_index == RC.RENAME_CLAUSE_ITEM[0] ] rename_nodes = [] @@ -1546,14 +1573,14 @@ def visitRenameClause(self, ctx: Parser.RenameClauseContext): rename_nodes.append(self.visitRenameClauseItem(ctx_rename)) return RegularAggregation( - op=ctx_list[0].getSymbol().text, children=rename_nodes, **extract_token_info(ctx) + op=ctx_list[0].text, children=rename_nodes, **extract_token_info(ctx) ) - def visitRenameClauseItem(self, ctx: Parser.RenameClauseItemContext): + def visitRenameClauseItem(self, ctx: Any) -> RenameNode: """ renameClauseItem: fromName=componentID TO toName=componentID; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children left_node = Terminals().visitComponentID(ctx_list[0]) if isinstance(left_node, BinOp): @@ -1571,18 +1598,18 @@ def visitRenameClauseItem(self, ctx: Parser.RenameClauseItemContext): ----------------------------------- """ - def visitAggregateClause(self, ctx: Parser.AggregateClauseContext): + def visitAggregateClause(self, ctx: Any) -> list: """ aggregateClause: aggrFunctionClause (',' aggrFunctionClause)* ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children aggregates_nodes = [] aggregates = [ aggregate for aggregate in ctx_list - if isinstance(aggregate, Parser.AggrFunctionClauseContext) + if not aggregate.is_terminal and aggregate.rule_index == RC.AGGR_FUNCTION_CLAUSE[0] ] for agg in aggregates: @@ -1590,14 +1617,14 @@ def visitAggregateClause(self, ctx: Parser.AggregateClauseContext): return aggregates_nodes - def visitAggrFunctionClause(self, ctx: Parser.AggrFunctionClauseContext): + def visitAggrFunctionClause(self, ctx: Any) -> Assignment: """ aggrFunctionClause: (componentRole)? componentID ':=' aggrFunction ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ComponentRoleContext): + if not c.is_terminal and c.rule_index == RC.COMPONENT_ROLE[0]: role = Terminals().visitComponentRole(c) base_index = 1 else: @@ -1613,20 +1640,29 @@ def visitAggrFunctionClause(self, ctx: Parser.AggrFunctionClauseContext): return Assignment(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) - def visitAggrClause(self, ctx: Parser.AggrClauseContext): + def visitAggrClause(self, ctx: Any) -> RegularAggregation: """ aggrClause: AGGREGATE aggregateClause (groupingClause havingClause?)? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op_node = c.getSymbol().text + op_node = c.text group_node = None grouping_op = None have_node = None - groups = [group for group in ctx_list if isinstance(group, Parser.GroupingClauseContext)] - haves = [have for have in ctx_list if isinstance(have, Parser.HavingClauseContext)] + groups = [ + group + for group in ctx_list + if not group.is_terminal + and group.rule_index == RC.GROUP_BY_OR_EXCEPT[0] # GroupingClause rule_index = 56 + ] + haves = [ + have + for have in ctx_list + if not have.is_terminal and have.rule_index == RC.HAVING_CLAUSE[0] + ] aggregate_nodes = self.visitAggregateClause(ctx_list[1]) @@ -1650,29 +1686,43 @@ def visitAggrClause(self, ctx: Parser.AggrClauseContext): return RegularAggregation(op=op_node, children=children, **extract_token_info(ctx)) - def visitGroupingClause(self, ctx: Parser.GroupingClauseContext): + def visitGroupingClause(self, ctx: Any) -> Any: """ groupingClause: GROUP op=(BY | EXCEPT) componentID (COMMA componentID)* # groupByOrExcept | GROUP ALL exprComponent # groupAll ; """ - if isinstance(ctx, Parser.GroupByOrExceptContext): + if ctx.ctx_id == RC.GROUP_BY_OR_EXCEPT: return self.visitGroupByOrExcept(ctx) - elif isinstance(ctx, Parser.GroupAllContext): + elif ctx.ctx_id == RC.GROUP_ALL: return self.visitGroupAll(ctx) else: raise NotImplementedError - def visitHavingClause(self, ctx: Parser.HavingClauseContext): + def visitHavingClause(self, ctx: Any) -> Any: """ havingClause: HAVING exprComponent ; """ - ctx_list = list(ctx.getChildren()) - op_node = ctx_list[0].getSymbol().text - - text = ctx_list[1].start.source[1].strdata - expr = re.split("having", text)[1] + ctx_list = ctx.children + op_node = ctx_list[0].text + + strdata = vtl_cpp_parser.get_input_text() + # Extract the relevant substring using position information from the exprComponent node + expr_component = ctx_list[1] + # Use the start position of the having keyword to extract the having clause text + start_line = ctx.start_line + # Find 'having' in strdata and extract from there + lines = strdata.split("\n") + # Build the text from start_line to end + text_from_having = "\n".join(lines[start_line - 1 :]) + # Find 'having' keyword position within that line + line_text = lines[start_line - 1] + having_pos = line_text.lower().find("having") + if having_pos >= 0: + text_from_having = line_text[having_pos:] + "\n" + "\n".join(lines[start_line:]) + + expr = re.split("having", text_from_having)[1] expr = "having " + expr[:-2].strip() if "]" in expr: @@ -1693,12 +1743,12 @@ def visitHavingClause(self, ctx: Parser.HavingClauseContext): if '"' in expr: expr = expr.replace('"', "'") - if isinstance(ctx_list[1], Parser.ComparisonExprCompContext): - param_nodes = ExprComp().visitComparisonExprComp(ctx_list[1]) - elif isinstance(ctx_list[1], Parser.InNotInExprCompContext): - param_nodes = ExprComp().visitInNotInExprComp(ctx_list[1]) - elif isinstance(ctx_list[1], Parser.BooleanExprCompContext): - param_nodes = ExprComp().visitBooleanExprComp(ctx_list[1]) + if expr_component.ctx_id == RC.COMPARISON_EXPR_COMP: + param_nodes = ExprComp().visitComparisonExprComp(expr_component) + elif expr_component.ctx_id == RC.IN_NOT_IN_EXPR_COMP: + param_nodes = ExprComp().visitInNotInExprComp(expr_component) + elif expr_component.ctx_id == RC.BOOLEAN_EXPR_COMP: + param_nodes = ExprComp().visitBooleanExprComp(expr_component) else: raise NotImplementedError @@ -1706,27 +1756,27 @@ def visitHavingClause(self, ctx: Parser.HavingClauseContext): op=op_node, children=None, params=param_nodes, **extract_token_info(ctx) ), expr - def visitGroupByOrExcept(self, ctx: Parser.GroupByOrExceptContext): - ctx_list = list(ctx.getChildren()) + def visitGroupByOrExcept(self, ctx: Any) -> Any: + ctx_list = ctx.children - token_left = ctx_list[0].getSymbol().text - token_right = ctx_list[1].getSymbol().text + token_left = ctx_list[0].text + token_right = ctx_list[1].text op_node = token_left + " " + token_right children_nodes = [ Terminals().visitComponentID(identifier) for identifier in ctx_list - if isinstance(identifier, Parser.ComponentIDContext) + if not identifier.is_terminal and identifier.rule_index == RC.COMPONENT_ID[0] ] return op_node, children_nodes - def visitGroupAll(self, ctx: Parser.GroupAllContext): - ctx_list = list(ctx.getChildren()) + def visitGroupAll(self, ctx: Any) -> Any: + ctx_list = ctx.children - token_left = ctx_list[0].getSymbol().text - token_right = ctx_list[1].getSymbol().text + token_left = ctx_list[0].text + token_right = ctx_list[1].text op_node = token_left + " " + token_right @@ -1740,16 +1790,15 @@ def visitGroupAll(self, ctx: Parser.GroupAllContext): conf = None for child in ctx_list: - if isinstance(child, TerminalNodeImpl): - token = child.getSymbol() - if token.type == Parser.STRING_CONSTANT: + if child.is_terminal: + if child.symbol_type == vtl_cpp_parser.STRING_CONSTANT: if period_to is None: - period_to = token.text[1:-1] + period_to = child.text[1:-1] else: - period_from = token.text[1:-1] - elif token.type in [Parser.FIRST, Parser.LAST]: - conf = token.text - elif isinstance(child, Parser.OptionalExprContext): + period_from = child.text[1:-1] + elif child.symbol_type in (vtl_cpp_parser.FIRST, vtl_cpp_parser.LAST): + conf = child.text + elif not child.is_terminal and child.rule_index == RC.OPTIONAL_EXPR[0]: operand_node = self.visitOptionalExpr(child) if isinstance(operand_node, ID): operand_node = None @@ -1775,15 +1824,14 @@ def visitGroupAll(self, ctx: Parser.GroupAllContext): ----------------------------------- """ - def visitFilterClause(self, ctx: Parser.FilterClauseContext): + def visitFilterClause(self, ctx: Any) -> RegularAggregation: """ filterClause: FILTER expr; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_nodes = [] operand_nodes.append(ExprComp().visitExprComponent(ctx_list[1])) @@ -1795,21 +1843,22 @@ def visitFilterClause(self, ctx: Parser.FilterClauseContext): ----------------------------------- """ - def visitCalcClause(self, ctx: Parser.CalcClauseContext): + def visitCalcClause(self, ctx: Any) -> RegularAggregation: """ calcClause: CALC calcClauseItem (',' calcClauseItem)*; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] calcClauseItems = [ calcClauseItem for calcClauseItem in ctx_list - if isinstance(calcClauseItem, Parser.CalcClauseItemContext) + if not calcClauseItem.is_terminal + and calcClauseItem.rule_index == RC.CALC_CLAUSE_ITEM[0] ] calcClauseItems_nodes = [] - op_node = c.getSymbol().text + op_node = c.text for calcClauseItem in calcClauseItems: result = self.visitCalcClauseItem(calcClauseItem) calcClauseItems_nodes.append(result) @@ -1818,14 +1867,14 @@ def visitCalcClause(self, ctx: Parser.CalcClauseContext): op=op_node, children=calcClauseItems_nodes, **extract_token_info(ctx) ) - def visitCalcClauseItem(self, ctx: Parser.CalcClauseItemContext): + def visitCalcClauseItem(self, ctx: Any) -> UnaryOp: """ calcClauseItem: (componentRole)? componentID ASSIGN exprComponent; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ComponentRoleContext): + if not c.is_terminal and c.rule_index == RC.COMPONENT_ROLE[0]: role = Terminals().visitComponentRole(c) left_node = Terminals().visitComponentID(ctx_list[1]) @@ -1851,18 +1900,22 @@ def visitCalcClauseItem(self, ctx: Parser.CalcClauseItemContext): op=Role.MEASURE.value.lower(), operand=operand_node, **extract_token_info(ctx) ) - def visitKeepOrDropClause(self, ctx: Parser.KeepOrDropClauseContext): + def visitKeepOrDropClause(self, ctx: Any) -> RegularAggregation: """ keepOrDropClause: op = (KEEP | DROP) componentID (COMMA componentID)* ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - items = [item for item in ctx_list if isinstance(item, Parser.ComponentIDContext)] + items = [ + item + for item in ctx_list + if not item.is_terminal and item.rule_index == RC.COMPONENT_ID[0] + ] nodes = [] - op_node = c.getSymbol().text + op_node = c.text for item in items: nodes.append(Terminals().visitComponentID(item)) @@ -1874,15 +1927,14 @@ def visitKeepOrDropClause(self, ctx: Parser.KeepOrDropClauseContext): ----------------------------------- """ - def visitPivotOrUnpivotClause(self, ctx: Parser.PivotOrUnpivotClauseContext): + def visitPivotOrUnpivotClause(self, ctx: Any) -> RegularAggregation: """ pivotOrUnpivotClause: op=(PIVOT|UNPIVOT) id_=componentID COMMA mea=componentID ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text children_nodes = [] children_nodes.append(Terminals().visitComponentID(ctx_list[1])) children_nodes.append(Terminals().visitComponentID(ctx_list[3])) @@ -1895,50 +1947,52 @@ def visitPivotOrUnpivotClause(self, ctx: Parser.PivotOrUnpivotClauseContext): ----------------------------------- """ - def visitSubspaceClause(self, ctx: Parser.SubspaceClauseContext): + def visitSubspaceClause(self, ctx: Any) -> RegularAggregation: """ subspaceClause: SUBSPACE subspaceClauseItem (COMMA subspaceClauseItem)*;""" - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] subspace_nodes = [] subspaces = [ subspace for subspace in ctx_list - if isinstance(subspace, Parser.SubspaceClauseItemContext) + if not subspace.is_terminal and subspace.rule_index == RC.SUBSPACE_CLAUSE_ITEM[0] ] for subspace in subspaces: subspace_nodes.append(self.visitSubspaceClauseItem(subspace)) - op_node = c.getSymbol().text + op_node = c.text return RegularAggregation(op=op_node, children=subspace_nodes, **extract_token_info(ctx)) - def visitSubspaceClauseItem(self, ctx: Parser.SubspaceClauseItemContext): - ctx_list = list(ctx.getChildren()) + def visitSubspaceClauseItem(self, ctx: Any) -> BinOp: + ctx_list = ctx.children left_node = Terminals().visitVarID(ctx_list[0]) - op_node = ctx_list[1].getSymbol().text - if isinstance(ctx_list[2], Parser.ScalarWithCastContext): + op_node = ctx_list[1].text + if not ctx_list[2].is_terminal and ctx_list[2].ctx_id == RC.SCALAR_WITH_CAST: right_node = Terminals().visitScalarWithCast(ctx_list[2]) - elif isinstance(ctx_list[2], Parser.ScalarItemContext): + elif not ctx_list[2].is_terminal and ctx_list[2].ctx_id in ( + RC.SIMPLE_SCALAR, + RC.SCALAR_WITH_CAST, + ): right_node = Terminals().visitScalarItem(ctx_list[2]) else: right_node = Terminals().visitVarID(ctx_list[2]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) - def visitOptionalExpr(self, ctx: Parser.OptionalExprContext): + def visitOptionalExpr(self, ctx: Any) -> Any: """ optionalExpr: expr | OPTIONAL ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ExprContext): + if not c.is_terminal and c.rule_index == 2: return self.visitExpr(c) - elif isinstance(c, TerminalNodeImpl): - token = c.getSymbol() - opt = token.text + elif c.is_terminal: + opt = c.text return ID(type_="OPTIONAL", value=opt, **extract_token_info(ctx)) diff --git a/src/vtlengine/AST/ASTConstructorModules/ExprComponents.py b/src/vtlengine/AST/ASTConstructorModules/ExprComponents.py index 4cf1cfbb2..ac72cd0fd 100644 --- a/src/vtlengine/AST/ASTConstructorModules/ExprComponents.py +++ b/src/vtlengine/AST/ASTConstructorModules/ExprComponents.py @@ -1,5 +1,3 @@ -from antlr4.tree.Tree import TerminalNodeImpl - from vtlengine.AST import ( ID, Aggregation, @@ -22,12 +20,12 @@ ) from vtlengine.AST.ASTConstructorModules import extract_token_info from vtlengine.AST.ASTConstructorModules.Terminals import Terminals -from vtlengine.AST.Grammar.parser import Parser -from vtlengine.AST.VtlVisitor import VtlVisitor +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser +from vtlengine.AST.Grammar._cpp_parser._rule_constants import RC from vtlengine.Exceptions import SemanticError -class ExprComp(VtlVisitor): +class ExprComp: """______________________________________________________________________________________ @@ -36,7 +34,7 @@ class ExprComp(VtlVisitor): _______________________________________________________________________________________ """ - def visitExprComponent(self, ctx: Parser.ExprComponentContext): + def visitExprComponent(self, ctx): # type: ignore[no-untyped-def] """ exprComponent: LPAREN exprComponent RPAREN # parenthesisExprComp @@ -53,100 +51,101 @@ def visitExprComponent(self, ctx: Parser.ExprComponentContext): | componentID # compId ; """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(ctx, Parser.ParenthesisExprCompContext): + if ctx.ctx_id == RC.PARENTHESIS_EXPR_COMP: return self.visitParenthesisExprComp(ctx) # functions - elif isinstance(ctx, Parser.FunctionsExpressionCompContext): + elif ctx.ctx_id == RC.FUNCTIONS_EXPRESSION_COMP: return self.visitFunctionsComponents(c) # op=(PLUS|MINUS|NOT) right=expr # unary expression - elif isinstance(ctx, Parser.UnaryExprCompContext): + elif ctx.ctx_id == RC.UNARY_EXPR_COMP: return self.visitUnaryExprComp(ctx) # | left=expr op=(MUL|DIV) right=expr # arithmeticExpr - elif isinstance(ctx, Parser.ArithmeticExprCompContext): + elif ctx.ctx_id == RC.ARITHMETIC_EXPR_COMP: return self.visitArithmeticExprComp(ctx) # | left=expr op=(PLUS|MINUS|CONCAT) right=expr # arithmeticExprOrConcat - elif isinstance(ctx, Parser.ArithmeticExprOrConcatCompContext): + elif ctx.ctx_id == RC.ARITHMETIC_EXPR_OR_CONCAT_COMP: return self.visitArithmeticExprOrConcatComp(ctx) # | left=expr op=comparisonOperand right=expr # comparisonExpr - elif isinstance(ctx, Parser.ComparisonExprCompContext): + elif ctx.ctx_id == RC.COMPARISON_EXPR_COMP: return self.visitComparisonExprComp(ctx) # | left=expr op=(IN|NOT_IN)(lists|valueDomainID) # inNotInExpr - elif isinstance(ctx, Parser.InNotInExprCompContext): + elif ctx.ctx_id == RC.IN_NOT_IN_EXPR_COMP: return self.visitInNotInExprComp(ctx) # | left=expr op=AND right=expr # booleanExpr # | left=expr op=(OR|XOR) right=expr - elif isinstance(ctx, Parser.BooleanExprCompContext): + elif ctx.ctx_id == RC.BOOLEAN_EXPR_COMP: return self.visitBooleanExprComp(ctx) # IF conditionalExpr=expr THEN thenExpr=expr ELSE elseExpr=expr # ifExpr - elif isinstance(ctx, Parser.IfExprCompContext): + elif ctx.ctx_id == RC.IF_EXPR_COMP: return self.visitIfExprComp(ctx) # CASE WHEN conditionalExpr=expr THEN thenExpr=expr ELSE elseExpr=expr END # caseExpr - elif isinstance(ctx, Parser.CaseExprCompContext): + elif ctx.ctx_id == RC.CASE_EXPR_COMP: return self.visitCaseExprComp(ctx) # constant - elif isinstance(ctx, Parser.ConstantExprCompContext): + elif ctx.ctx_id == RC.CONSTANT_EXPR_COMP: return Terminals().visitConstant(c) # componentID # TODO Changed to pass more tests. Original code: return Terminals().visitComponentID(c) - elif isinstance(ctx, Parser.CompIdContext): + elif ctx.ctx_id == RC.COMP_ID: if len(c.children) > 1: return Terminals().visitComponentID(c) - token = c.children[0].getSymbol() + token = c.children[0] # check token text - has_scaped_char = token.text.find("'") != -1 + token_text = token.text + has_scaped_char = token_text.find("'") != -1 if has_scaped_char: - token.text = str(token.text.replace("'", "")) - var_id_node = VarID(value=token.text, **extract_token_info(ctx)) + token_text = str(token_text.replace("'", "")) + var_id_node = VarID(value=token_text, **extract_token_info(ctx)) return var_id_node else: # AST_ASTCONSTRUCTOR.3 raise NotImplementedError - def bin_op_creator_comp(self, ctx: Parser.ExprComponentContext): - ctx_list = list(ctx.getChildren()) + def bin_op_creator_comp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children left_node = self.visitExprComponent(ctx_list[0]) - if isinstance(ctx_list[1], Parser.ComparisonOperandContext): - op = list(ctx_list[1].getChildren())[0].getSymbol().text + if not ctx_list[1].is_terminal and ctx_list[1].ctx_id == RC.COMPARISON_OPERAND: + op = ctx_list[1].children[0].text else: - op = ctx_list[1].getSymbol().text + op = ctx_list[1].text right_node = self.visitExprComponent(ctx_list[2]) bin_op_node = BinOp(left=left_node, op=op, right=right_node, **extract_token_info(ctx)) return bin_op_node - def visitArithmeticExprComp(self, ctx: Parser.ArithmeticExprContext): + def visitArithmeticExprComp(self, ctx): # type: ignore[no-untyped-def] return self.bin_op_creator_comp(ctx) - def visitArithmeticExprOrConcatComp(self, ctx: Parser.ArithmeticExprOrConcatContext): + def visitArithmeticExprOrConcatComp(self, ctx): # type: ignore[no-untyped-def] return self.bin_op_creator_comp(ctx) - def visitComparisonExprComp(self, ctx: Parser.ComparisonExprContext): + def visitComparisonExprComp(self, ctx): # type: ignore[no-untyped-def] return self.bin_op_creator_comp(ctx) - def visitInNotInExprComp(self, ctx: Parser.InNotInExprContext): - ctx_list = list(ctx.getChildren()) + def visitInNotInExprComp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children left_node = self.visitExprComponent(ctx_list[0]) - op = ctx_list[1].symbol.text + op = ctx_list[1].text - if isinstance(ctx_list[2], Parser.ListsContext): + if not ctx_list[2].is_terminal and ctx_list[2].ctx_id == RC.LISTS: right_node = Terminals().visitLists(ctx_list[2]) - elif isinstance(ctx_list[2], Parser.ValueDomainIDContext): + elif not ctx_list[2].is_terminal and ctx_list[2].ctx_id == RC.VALUE_DOMAIN_ID: right_node = Terminals().visitValueDomainID(ctx_list[2]) else: raise NotImplementedError @@ -154,22 +153,22 @@ def visitInNotInExprComp(self, ctx: Parser.InNotInExprContext): return bin_op_node - def visitBooleanExprComp(self, ctx: Parser.BooleanExprContext): + def visitBooleanExprComp(self, ctx): # type: ignore[no-untyped-def] return self.bin_op_creator_comp(ctx) - def visitParenthesisExprComp(self, ctx: Parser.ParenthesisExprContext): - operand = self.visitExprComponent(list(ctx.getChildren())[1]) + def visitParenthesisExprComp(self, ctx): # type: ignore[no-untyped-def] + operand = self.visitExprComponent(ctx.children[1]) return ParFunction(operand=operand, **extract_token_info(ctx)) - def visitUnaryExprComp(self, ctx: Parser.UnaryExprContext): - c_list = list(ctx.getChildren()) - op = c_list[0].getSymbol().text + def visitUnaryExprComp(self, ctx): # type: ignore[no-untyped-def] + c_list = ctx.children + op = c_list[0].text right = self.visitExprComponent(c_list[1]) return UnaryOp(op=op, operand=right, **extract_token_info(ctx)) - def visitIfExprComp(self, ctx: Parser.IfExprCompContext): - ctx_list = list(ctx.getChildren()) + def visitIfExprComp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children condition_node = self.visitExprComponent(ctx_list[1]) then_op_node = self.visitExprComponent(ctx_list[3]) @@ -184,8 +183,8 @@ def visitIfExprComp(self, ctx: Parser.IfExprCompContext): return if_node - def visitCaseExprComp(self, ctx: Parser.CaseExprCompContext): - ctx_list = list(ctx.getChildren()) + def visitCaseExprComp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children if len(ctx_list) % 4 != 3: raise ValueError("Syntax error.") @@ -206,20 +205,19 @@ def visitCaseExprComp(self, ctx: Parser.CaseExprCompContext): return case_node - def visitOptionalExprComponent(self, ctx: Parser.OptionalExprComponentContext): + def visitOptionalExprComponent(self, ctx): # type: ignore[no-untyped-def] """ optionalExpr: expr | OPTIONAL ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ExprComponentContext): + if not c.is_terminal and c.rule_index == 3: return self.visitExprComponent(c) - elif isinstance(c, TerminalNodeImpl): - token = c.getSymbol() - opt = token.text + elif c.is_terminal: + opt = c.text return ID(type_="OPTIONAL", value=opt, **extract_token_info(ctx)) """____________________________________________________________________________________ @@ -229,7 +227,7 @@ def visitOptionalExprComponent(self, ctx: Parser.OptionalExprComponentContext): _____________________________________________________________________________________""" - def visitFunctionsComponents(self, ctx: Parser.FunctionsComponentsContext): + def visitFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] """ functionsComponents: genericOperatorsComponent # genericFunctionsComponents @@ -243,31 +241,31 @@ def visitFunctionsComponents(self, ctx: Parser.FunctionsComponentsContext): ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(ctx, Parser.GenericFunctionsComponentsContext): + if ctx.ctx_id == RC.GENERIC_FUNCTIONS_COMPONENTS: return self.visitGenericFunctionsComponents(c) - elif isinstance(ctx, Parser.StringFunctionsComponentsContext): + elif ctx.ctx_id == RC.STRING_FUNCTIONS_COMPONENTS: return self.visitStringFunctionsComponents(c) - elif isinstance(ctx, Parser.NumericFunctionsComponentsContext): + elif ctx.ctx_id == RC.NUMERIC_FUNCTIONS_COMPONENTS: return self.visitNumericFunctionsComponents(c) - elif isinstance(ctx, Parser.ComparisonFunctionsComponentsContext): + elif ctx.ctx_id == RC.COMPARISON_FUNCTIONS_COMPONENTS: return self.visitComparisonFunctionsComponents(c) - elif isinstance(ctx, Parser.TimeFunctionsComponentsContext): + elif ctx.ctx_id == RC.TIME_FUNCTIONS_COMPONENTS: return self.visitTimeFunctionsComponents(c) - elif isinstance(ctx, Parser.ConditionalFunctionsComponentsContext): + elif ctx.ctx_id == RC.CONDITIONAL_FUNCTIONS_COMPONENTS: return self.visitConditionalFunctionsComponents(c) - elif isinstance(ctx, Parser.AggregateFunctionsComponentsContext): + elif ctx.ctx_id == RC.AGGREGATE_FUNCTIONS_COMPONENTS: return self.visitAggregateFunctionsComponents(c) - elif isinstance(ctx, Parser.AnalyticFunctionsComponentsContext): + elif ctx.ctx_id == RC.ANALYTIC_FUNCTIONS_COMPONENTS: return self.visitAnalyticFunctionsComponents(c) else: raise NotImplementedError @@ -278,37 +276,37 @@ def visitFunctionsComponents(self, ctx: Parser.FunctionsComponentsContext): ----------------------------------- """ - def visitGenericFunctionsComponents(self, ctx: Parser.GenericFunctionsComponentsContext): - if isinstance(ctx, Parser.CallComponentContext): + def visitGenericFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.CALL_COMPONENT: return self.visitCallComponent(ctx) - elif isinstance(ctx, Parser.EvalAtomComponentContext): + elif ctx.ctx_id == RC.EVAL_ATOM_COMPONENT: return self.visitEvalAtomComponent(ctx) - elif isinstance(ctx, Parser.CastExprComponentContext): + elif ctx.ctx_id == RC.CAST_EXPR_COMPONENT: return self.visitCastExprComponent(ctx) else: raise NotImplementedError - def visitCallComponent(self, ctx: Parser.CallComponentContext): + def visitCallComponent(self, ctx): # type: ignore[no-untyped-def] """ callFunction: operatorID LPAREN (parameterComponent (COMMA parameterComponent)*)? RPAREN # callComponent """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] op = Terminals().visitOperatorID(c) param_nodes = [ self.visitParameterComponent(element) for element in ctx_list - if isinstance(element, Parser.ParameterComponentContext) + if not element.is_terminal and element.ctx_id == RC.PARAMETER_COMPONENT ] return UDOCall(op=op, params=param_nodes, **extract_token_info(ctx)) - def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): + def visitEvalAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ | EVAL LPAREN routineName LPAREN (componentID|scalarItem)? (COMMA (componentID|scalarItem))* RPAREN (LANGUAGE STRING_CONSTANT)? (RETURNS outputParameterTypeComponent)? RPAREN # evalAtomComponent """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children routine_name = Terminals().visitRoutineName(ctx_list[2]) @@ -316,12 +314,12 @@ def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): var_ids_nodes = [ Terminals().visitVarID(varID) for varID in ctx_list - if isinstance(varID, Parser.VarIDContext) + if not varID.is_terminal and varID.ctx_id == RC.VAR_ID ] constant_nodes = [ Terminals().visitScalarItem(scalar) for scalar in ctx_list - if isinstance(scalar, Parser.ScalarItemContext) + if not scalar.is_terminal and scalar.rule_index == 43 ] children_nodes = var_ids_nodes + constant_nodes @@ -332,8 +330,7 @@ def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): language_name = [ language for language in ctx_list - if isinstance(language, TerminalNodeImpl) - and language.getSymbol().type == Parser.STRING_CONSTANT + if language.is_terminal and language.symbol_type == vtl_cpp_parser.STRING_CONSTANT ] if len(language_name) == 0: # AST_ASTCONSTRUCTOR.12 @@ -342,7 +339,7 @@ def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): output_node = [ Terminals().visitOutputParameterTypeComponent(output) for output in ctx_list - if isinstance(output, Parser.OutputParameterTypeComponentContext) + if not output.is_terminal and output.ctx_id == RC.OUTPUT_PARAMETER_TYPE_COMPONENT ] if len(output_node) == 0: # AST_ASTCONSTRUCTOR.13 @@ -352,47 +349,44 @@ def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): name=routine_name, operands=children_nodes[0], output=output_node[0], - language=language_name[0].getSymbol().text, + language=language_name[0].text, **extract_token_info(ctx), ) - def visitCastExprComponent(self, ctx: Parser.CastExprComponentContext): + def visitCastExprComponent(self, ctx): # type: ignore[no-untyped-def] """ | CAST LPAREN exprComponent COMMA (basicScalarType|valueDomainName) (COMMA STRING_CONSTANT)? RPAREN # castExprComponent """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - - op = token.text + op = c.text expr_node = [ self.visitExprComponent(expr) for expr in ctx_list - if isinstance(expr, Parser.ExprComponentContext) + if not expr.is_terminal and expr.rule_index == 3 ] basic_scalar_type = [ Terminals().visitBasicScalarType(type_) for type_ in ctx_list - if isinstance(type_, Parser.BasicScalarTypeContext) + if not type_.is_terminal and type_.ctx_id == RC.BASIC_SCALAR_TYPE ] [ Terminals().visitValueDomainName(valueD) for valueD in ctx_list - if isinstance(valueD, Parser.ValueDomainNameContext) + if not valueD.is_terminal and valueD.ctx_id == RC.VALUE_DOMAIN_NAME ] if len(ctx_list) > 6: param_node = [ ParamConstant( type_="PARAM_CAST", - value=str_.symbol.text.strip('"'), - **extract_token_info(str_.getSymbol()), + value=str_.text.strip('"'), + **extract_token_info(str_), ) for str_ in ctx_list - if isinstance(str_, TerminalNodeImpl) - and str_.getSymbol().type == Parser.STRING_CONSTANT + if str_.is_terminal and str_.symbol_type == vtl_cpp_parser.STRING_CONSTANT ] else: param_node = [] @@ -408,14 +402,14 @@ def visitCastExprComponent(self, ctx: Parser.CastExprComponentContext): # AST_ASTCONSTRUCTOR.14 raise NotImplementedError - def visitParameterComponent(self, ctx: Parser.ParameterComponentContext): - ctx_list = list(ctx.getChildren()) + def visitParameterComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ExprComponentContext): + if not c.is_terminal and c.rule_index == 3: return self.visitExprComponent(c) - elif isinstance(c, TerminalNodeImpl): - return ID(type_="OPTIONAL", value=c.getSymbol().text, **extract_token_info(ctx)) + elif c.is_terminal: + return ID(type_="OPTIONAL", value=c.text, **extract_token_info(ctx)) else: raise NotImplementedError @@ -425,41 +419,41 @@ def visitParameterComponent(self, ctx: Parser.ParameterComponentContext): ----------------------------------- """ - def visitStringFunctionsComponents(self, ctx: Parser.StringFunctionsComponentsContext): - if isinstance(ctx, Parser.UnaryStringFunctionComponentContext): + def visitStringFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.UNARY_STRING_FUNCTION_COMPONENT: return self.visitUnaryStringFunctionComponent(ctx) - elif isinstance(ctx, Parser.SubstrAtomComponentContext): + elif ctx.ctx_id == RC.SUBSTR_ATOM_COMPONENT: return self.visitSubstrAtomComponent(ctx) - elif isinstance(ctx, Parser.ReplaceAtomComponentContext): + elif ctx.ctx_id == RC.REPLACE_ATOM_COMPONENT: return self.visitReplaceAtomComponent(ctx) - elif isinstance(ctx, Parser.InstrAtomComponentContext): + elif ctx.ctx_id == RC.INSTR_ATOM_COMPONENT: return self.visitInstrAtomComponent(ctx) else: raise NotImplementedError - def visitUnaryStringFunctionComponent(self, ctx: Parser.UnaryStringFunctionComponentContext): - ctx_list = list(ctx.getChildren()) + def visitUnaryStringFunctionComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExprComponent(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitSubstrAtomComponent(self, ctx: Parser.SubstrAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitSubstrAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] params_nodes = [] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprComponentContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 3] params = [ - param for param in ctx_list if isinstance(param, Parser.OptionalExprComponentContext) + param + for param in ctx_list + if not param.is_terminal and param.ctx_id == RC.OPTIONAL_EXPR_COMPONENT ] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExprComponent(children)) @@ -471,23 +465,22 @@ def visitSubstrAtomComponent(self, ctx: Parser.SubstrAtomComponentContext): op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitReplaceAtomComponent(self, ctx: Parser.ReplaceAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitReplaceAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() expressions = [ self.visitExprComponent(expr) for expr in ctx_list - if isinstance(expr, Parser.ExprComponentContext) + if not expr.is_terminal and expr.rule_index == 3 ] params = [ self.visitOptionalExprComponent(param) for param in ctx_list - if isinstance(param, Parser.OptionalExprComponentContext) + if not param.is_terminal and param.ctx_id == RC.OPTIONAL_EXPR_COMPONENT ] - op_node = token.text + op_node = c.text children_nodes = [expressions[0]] params_nodes = [expressions[1]] + params @@ -496,23 +489,22 @@ def visitReplaceAtomComponent(self, ctx: Parser.ReplaceAtomComponentContext): op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitInstrAtomComponent(self, ctx: Parser.InstrAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitInstrAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() expressions = [ self.visitExprComponent(expr) for expr in ctx_list - if isinstance(expr, Parser.ExprComponentContext) + if not expr.is_terminal and expr.rule_index == 3 ] params = [ self.visitOptionalExprComponent(param) for param in ctx_list - if isinstance(param, Parser.OptionalExprComponentContext) + if not param.is_terminal and param.ctx_id == RC.OPTIONAL_EXPR_COMPONENT ] - op_node = token.text + op_node = c.text children_nodes = [expressions[0]] params_nodes = [expressions[1]] + params @@ -527,41 +519,39 @@ def visitInstrAtomComponent(self, ctx: Parser.InstrAtomComponentContext): ----------------------------------- """ - def visitNumericFunctionsComponents(self, ctx: Parser.NumericFunctionsComponentsContext): - if isinstance(ctx, Parser.UnaryNumericComponentContext): + def visitNumericFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.UNARY_NUMERIC_COMPONENT: return self.visitUnaryNumericComponent(ctx) - elif isinstance(ctx, Parser.UnaryWithOptionalNumericComponentContext): + elif ctx.ctx_id == RC.UNARY_WITH_OPTIONAL_NUMERIC_COMPONENT: return self.visitUnaryWithOptionalNumericComponent(ctx) - elif isinstance(ctx, Parser.BinaryNumericComponentContext): + elif ctx.ctx_id == RC.BINARY_NUMERIC_COMPONENT: return self.visitBinaryNumericComponent(ctx) else: raise NotImplementedError - def visitUnaryNumericComponent(self, ctx: Parser.UnaryNumericComponentContext): - ctx_list = list(ctx.getChildren()) + def visitUnaryNumericComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExprComponent(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitUnaryWithOptionalNumericComponent( - self, ctx: Parser.UnaryWithOptionalNumericComponentContext - ): - ctx_list = list(ctx.getChildren()) + def visitUnaryWithOptionalNumericComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] params_nodes = [] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprComponentContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 3] params = [ - param for param in ctx_list if isinstance(param, Parser.OptionalExprComponentContext) + param + for param in ctx_list + if not param.is_terminal and param.ctx_id == RC.OPTIONAL_EXPR_COMPONENT ] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExprComponent(children)) @@ -573,14 +563,12 @@ def visitUnaryWithOptionalNumericComponent( op=op_node, children=children_nodes, params=params_nodes, **extract_token_info(ctx) ) - def visitBinaryNumericComponent(self, ctx: Parser.BinaryNumericComponentContext): - ctx_list = list(ctx.getChildren()) + def visitBinaryNumericComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - left_node = self.visitExprComponent(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExprComponent(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) @@ -590,52 +578,49 @@ def visitBinaryNumericComponent(self, ctx: Parser.BinaryNumericComponentContext) ----------------------------------- """ - def visitTimeFunctionsComponents(self, ctx: Parser.TimeFunctionsComponentsContext): - if isinstance(ctx, Parser.PeriodAtomComponentContext): + def visitTimeFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.PERIOD_ATOM_COMPONENT: return self.visitTimeUnaryAtomComponent(ctx) - elif isinstance(ctx, Parser.FillTimeAtomComponentContext): + elif ctx.ctx_id == RC.FILL_TIME_ATOM_COMPONENT: return self.visitFillTimeAtomComponent(ctx) - elif isinstance(ctx, Parser.FlowAtomComponentContext): - raise SemanticError("1-1-19-7", op=ctx.op.text) - elif isinstance(ctx, Parser.TimeShiftAtomComponentContext): + elif ctx.ctx_id == RC.FLOW_ATOM_COMPONENT: + raise SemanticError("1-1-19-7", op=ctx.children[0].text) + elif ctx.ctx_id == RC.TIME_SHIFT_ATOM_COMPONENT: return self.visitTimeShiftAtomComponent(ctx) - elif isinstance(ctx, Parser.TimeAggAtomComponentContext): + elif ctx.ctx_id == RC.TIME_AGG_ATOM_COMPONENT: return self.visitTimeAggAtomComponent(ctx) - elif isinstance(ctx, Parser.CurrentDateAtomComponentContext): + elif ctx.ctx_id == RC.CURRENT_DATE_ATOM_COMPONENT: return self.visitCurrentDateAtomComponent(ctx) - elif isinstance(ctx, Parser.DateDiffAtomComponentContext): + elif ctx.ctx_id == RC.DATE_DIFF_ATOM_COMPONENT: return self.visitDateDiffAtomComponent(ctx) - elif isinstance(ctx, Parser.DateAddAtomComponentContext): + elif ctx.ctx_id == RC.DATE_ADD_ATOM_COMPONENT: return self.visitDateAddAtomComponentContext(ctx) - elif isinstance( - ctx, - ( - Parser.YearAtomComponentContext, - Parser.MonthAtomComponentContext, - Parser.DayOfMonthAtomComponentContext, - Parser.DatOfYearAtomComponentContext, - Parser.DayToYearAtomComponentContext, - Parser.DayToMonthAtomComponentContext, - Parser.YearTodayAtomComponentContext, - Parser.MonthTodayAtomComponentContext, - ), + elif ctx.ctx_id in ( + RC.YEAR_ATOM_COMPONENT, + RC.MONTH_ATOM_COMPONENT, + RC.DAY_OF_MONTH_ATOM_COMPONENT, + RC.DAT_OF_YEAR_ATOM_COMPONENT, + RC.DAY_TO_YEAR_ATOM_COMPONENT, + RC.DAY_TO_MONTH_ATOM_COMPONENT, + RC.YEAR_TODAY_ATOM_COMPONENT, + RC.MONTH_TODAY_ATOM_COMPONENT, ): return self.visitTimeUnaryAtomComponent(ctx) else: raise NotImplementedError - def visitTimeUnaryAtomComponent(self, ctx: Parser.PeriodAtomComponentContext): + def visitTimeUnaryAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ periodExpr: PERIOD_INDICATOR '(' expr? ')' ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text operand_node = [ self.visitExprComponent(operand) for operand in ctx_list - if isinstance(operand, Parser.ExprComponentContext) + if not operand.is_terminal and operand.rule_index == 3 ] if len(operand_node) == 0: @@ -644,38 +629,38 @@ def visitTimeUnaryAtomComponent(self, ctx: Parser.PeriodAtomComponentContext): return UnaryOp(op=op, operand=operand_node[0], **extract_token_info(ctx)) - def visitTimeShiftAtomComponent(self, ctx: Parser.TimeShiftAtomComponentContext): + def visitTimeShiftAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ timeShiftExpr: TIMESHIFT '(' expr ',' INTEGER_CONSTANT ')' ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text left_node = self.visitExprComponent(ctx_list[2]) right_node = Constant( type_="INTEGER_CONSTANT", - value=int(ctx_list[4].getSymbol().text), + value=int(ctx_list[4].text), **extract_token_info(ctx), ) return BinOp(left=left_node, op=op, right=right_node, **extract_token_info(ctx)) - def visitFillTimeAtomComponent(self, ctx: Parser.FillTimeAtomComponentContext): + def visitFillTimeAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ timeSeriesExpr: FILL_TIME_SERIES '(' expr (',' (SINGLE|ALL))? ')' ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text children_node = [self.visitExprComponent(ctx_list[2])] if len(ctx_list) > 4: param_constant_node = [ ParamConstant( type_="PARAM_TIMESERIES", - value=ctx_list[4].getSymbol().text, + value=ctx_list[4].text, **extract_token_info(ctx), ) ] @@ -686,38 +671,70 @@ def visitFillTimeAtomComponent(self, ctx: Parser.FillTimeAtomComponentContext): op=op, children=children_node, params=param_constant_node, **extract_token_info(ctx) ) - def visitTimeAggAtomComponent(self, ctx: Parser.TimeAggAtomComponentContext): + def visitTimeAggAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ TIME_AGG LPAREN periodIndTo=STRING_CONSTANT (COMMA periodIndFrom=(STRING_CONSTANT| OPTIONAL ))? (COMMA op=optionalExprComponent)? (COMMA (FIRST|LAST))? RPAREN # timeAggAtomComponent; """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text - period_to = str(ctx.periodIndTo.text)[1:-1] + op = c.text + + # periodIndTo is always at index 2 (TIME_AGG LPAREN periodIndTo) + period_to = str(ctx_list[2].text)[1:-1] period_from = None - if ctx.periodIndFrom is not None and ctx.periodIndFrom.type != Parser.OPTIONAL: - # raise SemanticError("periodIndFrom is not allowed in Time_agg") - period_from = str(ctx.periodIndFrom.text)[1:-1] + # Find periodIndFrom: look for STRING_CONSTANT or OPTIONAL after the first COMMA + # Grammar: TIME_AGG LPAREN STRING_CONSTANT (COMMA (STRING_CONSTANT|OPTIONAL))? + # (COMMA optionalExprComponent)? (COMMA (FIRST|LAST))? RPAREN + # We need to scan children to find the named elements positionally. + # ctx_list[0]=TIME_AGG, [1]=LPAREN, [2]=periodIndTo + # If there's a periodIndFrom, it's at index 4 (after COMMA at index 3) + idx = 3 # start after periodIndTo + period_ind_from_token = None + + if ( + idx < len(ctx_list) + and ctx_list[idx].is_terminal + and idx + 1 < len(ctx_list) + and ctx_list[idx + 1].is_terminal + and ctx_list[idx + 1].symbol_type + in (vtl_cpp_parser.STRING_CONSTANT, vtl_cpp_parser.OPTIONAL) + ): + period_ind_from_token = ctx_list[idx + 1] + idx = idx + 2 - conf = [ - str_.getSymbol().text + if ( + period_ind_from_token is not None + and period_ind_from_token.symbol_type != vtl_cpp_parser.OPTIONAL + ): + period_from = str(period_ind_from_token.text)[1:-1] + + # Find optionalExprComponent (op) + optional_expr_comp = None + for child in ctx_list: + if not child.is_terminal and child.ctx_id == RC.OPTIONAL_EXPR_COMPONENT: + optional_expr_comp = child + break + + # Find FIRST/LAST + conf_list = [ + str_.text for str_ in ctx_list - if isinstance(str_, TerminalNodeImpl) - and str_.getSymbol().type in [Parser.FIRST, Parser.LAST] + if str_.is_terminal and str_.symbol_type in (vtl_cpp_parser.FIRST, vtl_cpp_parser.LAST) ] - conf = None if len(conf) == 0 else conf[0] + conf = None if len(conf_list) == 0 else conf_list[0] - if ctx.op is not None: - operand_node = self.visitOptionalExprComponent(ctx.op) + if optional_expr_comp is not None: + operand_node = self.visitOptionalExprComponent(optional_expr_comp) if isinstance(operand_node, ID): operand_node = None elif isinstance(operand_node, Identifier): operand_node = VarID( - value=operand_node.value, **extract_token_info(ctx.op) + value=operand_node.value, + **extract_token_info(optional_expr_comp), ) # Converting Identifier to VarID else: operand_node = None @@ -731,30 +748,30 @@ def visitTimeAggAtomComponent(self, ctx: Parser.TimeAggAtomComponentContext): **extract_token_info(ctx), ) - def visitCurrentDateAtomComponent(self, ctx: Parser.CurrentDateAtomComponentContext): - c = list(ctx.getChildren())[0] - return MulOp(op=c.getSymbol().text, children=[], **extract_token_info(ctx)) + def visitCurrentDateAtomComponent(self, ctx): # type: ignore[no-untyped-def] + c = ctx.children[0] + return MulOp(op=c.text, children=[], **extract_token_info(ctx)) - def visitDateDiffAtomComponent(self, ctx: Parser.TimeShiftAtomComponentContext): + def visitDateDiffAtomComponent(self, ctx): # type: ignore[no-untyped-def] """ """ from vtlengine.AST.ASTConstructorModules.Expr import Expr - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text left_node = self.visitExprComponent(ctx_list[2]) # dateTo is 'expr' (not exprComponent) in the new grammar right_node = Expr().visitExpr(ctx_list[4]) return BinOp(left=left_node, op=op, right=right_node, **extract_token_info(ctx)) - def visitDateAddAtomComponentContext(self, ctx: Parser.DateAddAtomComponentContext): + def visitDateAddAtomComponentContext(self, ctx): # type: ignore[no-untyped-def] """ """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - op = c.getSymbol().text + op = c.text children_node = [self.visitExprComponent(ctx_list[2])] param_constant_node = [] @@ -774,22 +791,18 @@ def visitDateAddAtomComponentContext(self, ctx: Parser.DateAddAtomComponentConte ----------------------------------- """ - def visitConditionalFunctionsComponents( - self, ctx: Parser.ConditionalFunctionsComponentsContext - ): - if isinstance(ctx, Parser.NvlAtomComponentContext): + def visitConditionalFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.NVL_ATOM_COMPONENT: return self.visitNvlAtomComponent(ctx) else: raise NotImplementedError - def visitNvlAtomComponent(self, ctx: Parser.NvlAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitNvlAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - left_node = self.visitExprComponent(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExprComponent(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) @@ -799,46 +812,43 @@ def visitNvlAtomComponent(self, ctx: Parser.NvlAtomComponentContext): ----------------------------------- """ - def visitComparisonFunctionsComponents(self, ctx: Parser.ComparisonFunctionsComponentsContext): - if isinstance(ctx, Parser.BetweenAtomComponentContext): + def visitComparisonFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.BETWEEN_ATOM_COMPONENT: return self.visitBetweenAtomComponent(ctx) - elif isinstance(ctx, Parser.CharsetMatchAtomComponentContext): + elif ctx.ctx_id == RC.CHARSET_MATCH_ATOM_COMPONENT: return self.visitCharsetMatchAtomComponent(ctx) - elif isinstance(ctx, Parser.IsNullAtomComponentContext): + elif ctx.ctx_id == RC.IS_NULL_ATOM_COMPONENT: return self.visitIsNullAtomComponent(ctx) else: raise NotImplementedError - def visitBetweenAtomComponent(self, ctx: Parser.BetweenAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitBetweenAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] children_nodes = [] - token = c.getSymbol() - childrens = [expr for expr in ctx_list if isinstance(expr, Parser.ExprComponentContext)] + childrens = [expr for expr in ctx_list if not expr.is_terminal and expr.rule_index == 3] - op_node = token.text + op_node = c.text for children in childrens: children_nodes.append(self.visitExprComponent(children)) return MulOp(op=op_node, children=children_nodes, **extract_token_info(ctx)) - def visitCharsetMatchAtomComponent(self, ctx: Parser.CharsetMatchAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitCharsetMatchAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() left_node = self.visitExprComponent(ctx_list[2]) - op_node = token.text + op_node = c.text right_node = self.visitExprComponent(ctx_list[4]) return BinOp(left=left_node, op=op_node, right=right_node, **extract_token_info(ctx)) - def visitIsNullAtomComponent(self, ctx: Parser.IsNullAtomComponentContext): - ctx_list = list(ctx.getChildren()) + def visitIsNullAtomComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - op_node = token.text + op_node = c.text operand_node = self.visitExprComponent(ctx_list[2]) return UnaryOp(op=op_node, operand=operand_node, **extract_token_info(ctx)) @@ -848,23 +858,23 @@ def visitIsNullAtomComponent(self, ctx: Parser.IsNullAtomComponentContext): ----------------------------------- """ - def visitAggregateFunctionsComponents(self, ctx: Parser.AggregateFunctionsComponentsContext): - if isinstance(ctx, Parser.AggrCompContext): + def visitAggregateFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.AGGR_COMP: return self.visitAggrComp(ctx) - elif isinstance(ctx, Parser.CountAggrCompContext): + elif ctx.ctx_id == RC.COUNT_AGGR_COMP: return self.visitCountAggrComp(ctx) else: raise NotImplementedError - def visitAggrComp(self, ctx: Parser.AggrCompContext): - ctx_list = list(ctx.getChildren()) - op_node = ctx_list[0].getSymbol().text + def visitAggrComp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children + op_node = ctx_list[0].text operand_node = self.visitExprComponent(ctx_list[2]) return Aggregation(op=op_node, operand=operand_node, **extract_token_info(ctx)) - def visitCountAggrComp(self, ctx: Parser.CountAggrCompContext): - ctx_list = list(ctx.getChildren()) - op_node = ctx_list[0].getSymbol().text + def visitCountAggrComp(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children + op_node = ctx_list[0].text return Aggregation(op=op_node, **extract_token_info(ctx)) """ @@ -873,36 +883,36 @@ def visitCountAggrComp(self, ctx: Parser.CountAggrCompContext): ----------------------------------- """ - def visitAnalyticFunctionsComponents(self, ctx: Parser.AnalyticFunctionsComponentsContext): - if isinstance(ctx, Parser.AnSimpleFunctionComponentContext): + def visitAnalyticFunctionsComponents(self, ctx): # type: ignore[no-untyped-def] + if ctx.ctx_id == RC.AN_SIMPLE_FUNCTION_COMPONENT: return self.visitAnSimpleFunctionComponent(ctx) - elif isinstance(ctx, Parser.LagOrLeadAnComponentContext): + elif ctx.ctx_id == RC.LAG_OR_LEAD_AN_COMPONENT: return self.visitLagOrLeadAnComponent(ctx) - elif isinstance(ctx, Parser.RankAnComponentContext): + elif ctx.ctx_id == RC.RANK_AN_COMPONENT: return self.visitRankAnComponent(ctx) - elif isinstance(ctx, Parser.RatioToReportAnComponentContext): + elif ctx.ctx_id == RC.RATIO_TO_REPORT_AN_COMPONENT: return self.visitRatioToReportAnComponent(ctx) else: raise NotImplementedError - def visitAnSimpleFunctionComponent(self, ctx: Parser.AnSimpleFunctionComponentContext): - ctx_list = list(ctx.getChildren()) + def visitAnSimpleFunctionComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children params = None partition_by = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExprComponent(ctx_list[2]) for c in ctx_list[5:-2]: - if isinstance(c, Parser.PartitionByClauseContext): + if not c.is_terminal and c.ctx_id == RC.PARTITION_BY_CLAUSE: partition_by = Terminals().visitPartitionByClause(c) continue - elif isinstance(c, Parser.OrderByClauseContext): + elif not c.is_terminal and c.ctx_id == RC.ORDER_BY_CLAUSE: order_by = Terminals().visitOrderByClause(c) continue - elif isinstance(c, Parser.WindowingClauseContext): + elif not c.is_terminal and c.ctx_id == RC.WINDOWING_CLAUSE: params = Terminals().visitWindowingClause(c) continue else: @@ -917,27 +927,28 @@ def visitAnSimpleFunctionComponent(self, ctx: Parser.AnSimpleFunctionComponentCo **extract_token_info(ctx), ) - def visitLagOrLeadAnComponent(self, ctx: Parser.LagOrLeadAnComponentContext): - ctx_list = list(ctx.getChildren()) + def visitLagOrLeadAnComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children params = None partition_by = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExprComponent(ctx_list[2]) for c in ctx_list[4:-2]: - if isinstance(c, Parser.PartitionByClauseContext): + if not c.is_terminal and c.ctx_id == RC.PARTITION_BY_CLAUSE: partition_by = Terminals().visitPartitionByClause(c) continue - elif isinstance(c, Parser.OrderByClauseContext): + elif not c.is_terminal and c.ctx_id == RC.ORDER_BY_CLAUSE: order_by = Terminals().visitOrderByClause(c) continue - elif isinstance(c, (Parser.SignedIntegerContext, Parser.ScalarItemContext)): + elif not c.is_terminal and c.rule_index in (53, 43): + # SignedInteger (rule 53) or ScalarItem (rule 43) if params is None: params = [] - if isinstance(c, Parser.SignedIntegerContext): + if c.rule_index == 53: params.append(Terminals().visitSignedInteger(c)) else: params.append(Terminals().visitScalarItem(c)) @@ -952,19 +963,19 @@ def visitLagOrLeadAnComponent(self, ctx: Parser.LagOrLeadAnComponentContext): **extract_token_info(ctx), ) - def visitRankAnComponent(self, ctx: Parser.RankAnComponentContext): - ctx_list = list(ctx.getChildren()) + def visitRankAnComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children partition_by = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text for c in ctx_list[4:-2]: - if isinstance(c, Parser.PartitionByClauseContext): + if not c.is_terminal and c.ctx_id == RC.PARTITION_BY_CLAUSE: partition_by = Terminals().visitPartitionByClause(c) continue - elif isinstance(c, Parser.OrderByClauseContext): + elif not c.is_terminal and c.ctx_id == RC.ORDER_BY_CLAUSE: order_by = Terminals().visitOrderByClause(c) continue @@ -977,13 +988,13 @@ def visitRankAnComponent(self, ctx: Parser.RankAnComponentContext): **extract_token_info(ctx), ) - def visitRatioToReportAnComponent(self, ctx: Parser.RatioToReportAnComponentContext): - ctx_list = list(ctx.getChildren()) + def visitRatioToReportAnComponent(self, ctx): # type: ignore[no-untyped-def] + ctx_list = ctx.children params = None order_by = None - op_node = ctx_list[0].getSymbol().text + op_node = ctx_list[0].text operand = self.visitExprComponent(ctx_list[2]) partition_by = Terminals().visitPartitionByClause(ctx_list[5]) diff --git a/src/vtlengine/AST/ASTConstructorModules/Terminals.py b/src/vtlengine/AST/ASTConstructorModules/Terminals.py index 0f0f3d24e..1478a89ae 100644 --- a/src/vtlengine/AST/ASTConstructorModules/Terminals.py +++ b/src/vtlengine/AST/ASTConstructorModules/Terminals.py @@ -1,5 +1,3 @@ -from antlr4.tree.Tree import TerminalNodeImpl - from vtlengine.AST import ( BinOp, Collection, @@ -13,8 +11,8 @@ Windowing, ) from vtlengine.AST.ASTConstructorModules import extract_token_info -from vtlengine.AST.Grammar.parser import Parser -from vtlengine.AST.VtlVisitor import VtlVisitor +from vtlengine.AST.Grammar._cpp_parser import vtl_cpp_parser +from vtlengine.AST.Grammar._cpp_parser._rule_constants import RC from vtlengine.DataTypes import ( Boolean, Date, @@ -35,21 +33,21 @@ def _remove_scaped_characters(text): return text -class Terminals(VtlVisitor): - def visitConstant(self, ctx: Parser.ConstantContext): +class Terminals: + def visitConstant(self, ctx): # constant: signedInteger | signedNumber | BOOLEAN_CONSTANT | # STRING_CONSTANT | NULL_CONSTANT child = ctx.children[0] token_info = extract_token_info(ctx) - if isinstance(child, Parser.SignedIntegerContext): + if not child.is_terminal and child.ctx_id == RC.SIGNED_INTEGER: constant_node = Constant( type_="INTEGER_CONSTANT", value=self.visitSignedInteger(child), **token_info, ) - elif isinstance(child, Parser.SignedNumberContext): + elif not child.is_terminal and child.ctx_id == RC.SIGNED_NUMBER: constant_node = Constant( type_="FLOAT_CONSTANT", value=self.visitSignedNumber(child), @@ -57,21 +55,20 @@ def visitConstant(self, ctx: Parser.ConstantContext): ) else: - token = child.getSymbol() - if token.type == Parser.BOOLEAN_CONSTANT: - if token.text == "true": + if child.symbol_type == vtl_cpp_parser.BOOLEAN_CONSTANT: + if child.text == "true": constant_node = Constant(type_="BOOLEAN_CONSTANT", value=True, **token_info) - elif token.text == "false": + elif child.text == "false": constant_node = Constant(type_="BOOLEAN_CONSTANT", value=False, **token_info) else: raise NotImplementedError - elif token.type == Parser.STRING_CONSTANT: + elif child.symbol_type == vtl_cpp_parser.STRING_CONSTANT: constant_node = Constant( - type_="STRING_CONSTANT", value=token.text[1:-1], **token_info + type_="STRING_CONSTANT", value=child.text[1:-1], **token_info ) - elif token.type == Parser.NULL_CONSTANT: + elif child.symbol_type == vtl_cpp_parser.NULL_CONSTANT: constant_node = Constant(type_="NULL_CONSTANT", value=None, **token_info) else: @@ -79,39 +76,39 @@ def visitConstant(self, ctx: Parser.ConstantContext): return constant_node - def visitVarID(self, ctx: Parser.VarIDContext): - token = ctx.children[0].getSymbol() - token.text = _remove_scaped_characters(token.text) + def visitVarID(self, ctx): + token = ctx.children[0] + text = _remove_scaped_characters(token.text) token_info = extract_token_info(token) - var_id_node = VarID(value=token.text, **token_info) + var_id_node = VarID(value=text, **token_info) return var_id_node - def visitVarIdExpr(self, ctx: Parser.VarIdExprContext): - if isinstance(ctx.children[0], Parser.VarIDContext): + def visitVarIdExpr(self, ctx): + if not ctx.children[0].is_terminal and ctx.children[0].ctx_id == RC.VAR_ID: return self.visitVarID(ctx.children[0]) - token = ctx.children[0].getSymbol() + token = ctx.children[0] # check token text - token.text = _remove_scaped_characters(token.text) + text = _remove_scaped_characters(token.text) token_info = extract_token_info(token) - var_id_node = VarID(value=token.text, **token_info) + var_id_node = VarID(value=text, **token_info) return var_id_node - def visitSimpleComponentId(self, ctx: Parser.SimpleComponentIdContext): + def visitSimpleComponentId(self, ctx): """ componentID: IDENTIFIER ; """ - token = ctx.children[0].getSymbol() + token = ctx.children[0] # check token text - token.text = _remove_scaped_characters(token.text) + text = _remove_scaped_characters(token.text) - return Identifier(value=token.text, kind="ComponentID", **extract_token_info(ctx)) + return Identifier(value=text, kind="ComponentID", **extract_token_info(ctx)) - def visitComponentID(self, ctx: Parser.ComponentIDContext): - ctx_list = list(ctx.getChildren()) + def visitComponentID(self, ctx): + ctx_list = ctx.children if len(ctx_list) == 1: - component_name = ctx_list[0].getSymbol().text + component_name = ctx_list[0].text if component_name.startswith("'") and component_name.endswith( "'" ): # The component could be imbalance, errorcode or errorlevel @@ -119,88 +116,85 @@ def visitComponentID(self, ctx: Parser.ComponentIDContext): return Identifier( value=component_name, kind="ComponentID", - **extract_token_info(ctx_list[0].getSymbol()), + **extract_token_info(ctx_list[0]), ) else: - component_name = ctx_list[2].getSymbol().text + component_name = ctx_list[2].text if component_name.startswith("'") and component_name.endswith( "'" ): # The component could be imbalance, errorcode or errorlevel component_name = component_name[1:-1] - op_node = ctx_list[1].getSymbol().text + op_node = ctx_list[1].text return BinOp( left=Identifier( - value=ctx_list[0].getSymbol().text, + value=ctx_list[0].text, kind="DatasetID", - **extract_token_info(ctx_list[0].getSymbol()), + **extract_token_info(ctx_list[0]), ), op=op_node, right=Identifier( value=component_name, kind="ComponentID", - **extract_token_info(ctx_list[1].getSymbol()), + **extract_token_info(ctx_list[1]), ), **extract_token_info(ctx), ) - def visitOperatorID(self, ctx: Parser.OperatorIDContext): + def visitOperatorID(self, ctx): """ operatorID: IDENTIFIER ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - return token.text + return c.text - def visitValueDomainID(self, ctx: Parser.ValueDomainIDContext): + def visitValueDomainID(self, ctx): """ valueDomainID: IDENTIFIER ; """ return Collection( - name=ctx.children[0].getSymbol().text, + name=ctx.children[0].text, children=[], kind="ValueDomain", type="", **extract_token_info(ctx), ) - def visitRulesetID(self, ctx: Parser.RulesetIDContext): + def visitRulesetID(self, ctx): """ rulesetID: IDENTIFIER ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - return token.text + return c.text - def visitValueDomainName(self, ctx: Parser.ValueDomainNameContext): + def visitValueDomainName(self, ctx): """ valueDomainName: IDENTIFIER ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children # AST_ASTCONSTRUCTOR.48 raise NotImplementedError( "Value Domain '{}' not available for cast operator or scalar type " - "representation or rulesets.".format(ctx_list[0].getSymbol().text) + "representation or rulesets.".format(ctx_list[0].text) ) - def visitValueDomainValue(self, ctx: Parser.ValueDomainValueContext): + def visitValueDomainValue(self, ctx): child = ctx.children[0] - if isinstance(child, (Parser.SignedIntegerContext, Parser.SignedNumberContext)): - return child.getText() - return _remove_scaped_characters(child.getSymbol().text) + if not child.is_terminal and child.ctx_id in (RC.SIGNED_INTEGER, RC.SIGNED_NUMBER): + return child.text + return _remove_scaped_characters(child.text) - def visitRoutineName(self, ctx: Parser.RoutineNameContext): + def visitRoutineName(self, ctx): """ routineName: IDENTIFIER ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - return token.text + return c.text - def visitBasicScalarType(self, ctx: Parser.BasicScalarTypeContext): + def visitBasicScalarType(self, ctx): """ basicScalarType: STRING | INTEGER @@ -213,30 +207,29 @@ def visitBasicScalarType(self, ctx: Parser.BasicScalarTypeContext): | TIME ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - if token.type == Parser.STRING: + if c.symbol_type == vtl_cpp_parser.STRING: return String - elif token.type == Parser.INTEGER: + elif c.symbol_type == vtl_cpp_parser.INTEGER: return Integer - elif token.type == Parser.NUMBER: + elif c.symbol_type == vtl_cpp_parser.NUMBER: return Number - elif token.type == Parser.BOOLEAN: + elif c.symbol_type == vtl_cpp_parser.BOOLEAN: return Boolean - elif token.type == Parser.DATE: + elif c.symbol_type == vtl_cpp_parser.DATE: return Date - elif token.type == Parser.TIME_PERIOD: + elif c.symbol_type == vtl_cpp_parser.TIME_PERIOD: return TimePeriod - elif token.type == Parser.DURATION: + elif c.symbol_type == vtl_cpp_parser.DURATION: return Duration - elif token.type == Parser.SCALAR: + elif c.symbol_type == vtl_cpp_parser.SCALAR: return "Scalar" - elif token.type == Parser.TIME: + elif c.symbol_type == vtl_cpp_parser.TIME: return TimeInterval - def visitComponentRole(self, ctx: Parser.ComponentRoleContext): + def visitComponentRole(self, ctx): """ componentRole: MEASURE |COMPONENT @@ -245,42 +238,46 @@ def visitComponentRole(self, ctx: Parser.ComponentRoleContext): |viralAttribute ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ViralAttributeContext): + if not c.is_terminal and c.ctx_id == RC.VIRAL_ATTRIBUTE: return self.visitViralAttribute(c) else: - token = c.getSymbol() - text = token.text + text = c.text if text == "component": return None # Use upper case on first letter text = text[0].upper() + text[1:].lower() return Role(text) - def visitViralAttribute(self, ctx: Parser.ViralAttributeContext): + def visitViralAttribute(self, ctx): """ viralAttribute: VIRAL ATTRIBUTE; """ - # ctx_list = list(ctx.getChildren()) + # ctx_list = ctx.children # c = ctx_list[0] - # token = c.getSymbol() raise NotImplementedError - def visitLists(self, ctx: Parser.ListsContext): + def visitLists(self, ctx): """ lists: GLPAREN scalarItem (COMMA scalarItem)* GRPAREN """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children scalar_nodes = [] - scalars = [scalar for scalar in ctx_list if isinstance(scalar, Parser.SimpleScalarContext)] + scalars = [ + scalar + for scalar in ctx_list + if not scalar.is_terminal and scalar.ctx_id == RC.SIMPLE_SCALAR + ] scalars_with_cast = [ - scalar for scalar in ctx_list if isinstance(scalar, Parser.ScalarWithCastContext) + scalar + for scalar in ctx_list + if not scalar.is_terminal and scalar.ctx_id == RC.SCALAR_WITH_CAST ] for scalar in scalars: @@ -293,32 +290,32 @@ def visitLists(self, ctx: Parser.ListsContext): name="List", type="Lists", children=scalar_nodes, **extract_token_info(ctx) ) - def visitMultModifier(self, ctx: Parser.MultModifierContext): + def visitMultModifier(self, ctx): """ multModifier: OPTIONAL ( PLUS | MUL )?; """ pass - def visitCompConstraint(self, ctx: Parser.CompConstraintContext): + def visitCompConstraint(self, ctx): """ compConstraint: componentType (componentID|multModifier) ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children component_node = [ self.visitComponentType(component) for component in ctx_list - if isinstance(component, Parser.ComponentTypeContext) + if not component.is_terminal and component.ctx_id == RC.COMPONENT_TYPE ] component_name = [ self.visitComponentID(component).value for component in ctx_list - if isinstance(component, Parser.ComponentIDContext) + if not component.is_terminal and component.ctx_id == RC.COMPONENT_ID ] component_mult = [ self.visitMultModifier(modifier) for modifier in ctx_list - if isinstance(modifier, Parser.MultModifierContext) + if not modifier.is_terminal and modifier.ctx_id == RC.MULT_MODIFIER ] if len(component_mult) != 0: @@ -328,52 +325,58 @@ def visitCompConstraint(self, ctx: Parser.CompConstraintContext): component_node[0].name = component_name[0] return component_node[0] - def visitSimpleScalar(self, ctx: Parser.SimpleScalarContext): - ctx_list = list(ctx.getChildren()) + def visitSimpleScalar(self, ctx): + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ConstantContext): + if not c.is_terminal and c.ctx_id == RC.CONSTANT: return self.visitConstant(c) else: raise NotImplementedError - def visitScalarType(self, ctx: Parser.ScalarTypeContext): + def visitScalarType(self, ctx): """ scalarType: (basicScalarType|valueDomainName)scalarTypeConstraint?((NOT)? NULL_CONSTANT)? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children - types = ( - Parser.BasicScalarTypeContext, - Parser.ValueDomainNameContext, - Parser.ScalarTypeConstraintContext, + type_ctx_ids = ( + RC.BASIC_SCALAR_TYPE, + RC.VALUE_DOMAIN_NAME, + RC.CONDITION_CONSTRAINT, + RC.RANGE_CONSTRAINT, ) - scalartype = [scalartype for scalartype in ctx_list if isinstance(scalartype, types)][0] + scalartype = [ + scalartype + for scalartype in ctx_list + if not scalartype.is_terminal and scalartype.ctx_id in type_ctx_ids + ][0] scalartype_constraint = [ constraint for constraint in ctx_list - if isinstance(constraint, Parser.ScalarTypeConstraintContext) + if not constraint.is_terminal + and constraint.ctx_id in (RC.CONDITION_CONSTRAINT, RC.RANGE_CONSTRAINT) ] not_ = [ - not_.getSymbol().text + not_.text for not_ in ctx_list - if isinstance(not_, TerminalNodeImpl) and not_.getSymbol().type == Parser.NOT + if not_.is_terminal and not_.symbol_type == vtl_cpp_parser.NOT ] null_constant = [ - null.getSymbol().text + null.text for null in ctx_list - if isinstance(null, TerminalNodeImpl) and null.getSymbol().type == Parser.NULL_CONSTANT + if null.is_terminal and null.symbol_type == vtl_cpp_parser.NULL_CONSTANT ] - if isinstance(scalartype, Parser.BasicScalarTypeContext): - if scalartype.children[0].getSymbol().type == Parser.SCALAR: + if not scalartype.is_terminal and scalartype.ctx_id == RC.BASIC_SCALAR_TYPE: + if scalartype.children[0].symbol_type == vtl_cpp_parser.SCALAR: return Scalar(name="", data_type=None, value=None) type_node = self.visitBasicScalarType(scalartype) else: raise SyntaxError( - f"Invalid parameter type definition {scalartype.children[0]} at line " - f"{ctx.start.line}:{ctx.start.column}." + f"Invalid parameter type definition {scalartype.children[0].text} at line " + f"{ctx.start_line}:{ctx.start_column}." ) if len(scalartype_constraint) != 0: @@ -390,22 +393,22 @@ def visitScalarType(self, ctx: Parser.ScalarTypeContext): return type_node - def visitDatasetType(self, ctx: Parser.DatasetTypeContext): + def visitDatasetType(self, ctx): """ datasetType: DATASET ('{'compConstraint (',' compConstraint)* '}' )? ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children components = [ self.visitCompConstraint(constraint) for constraint in ctx_list - if isinstance(constraint, Parser.CompConstraintContext) + if not constraint.is_terminal and constraint.ctx_id == RC.COMP_CONSTRAINT ] components = {component.name: component for component in components} return Dataset(name="Dataset", components=components, data=None) - def visitRulesetType(self, ctx: Parser.RulesetTypeContext): + def visitRulesetType(self, ctx): """ rulesetType: RULESET | dpRuleset @@ -414,7 +417,7 @@ def visitRulesetType(self, ctx: Parser.RulesetTypeContext): """ raise NotImplementedError - def visitDpRuleset(self, ctx: Parser.DpRulesetContext): + def visitDpRuleset(self, ctx): """ DATAPOINT # dataPoint | DATAPOINT_ON_VD (GLPAREN valueDomainName (MUL valueDomainName)* GRPAREN )? # dataPointVd @@ -424,7 +427,7 @@ def visitDpRuleset(self, ctx: Parser.DpRulesetContext): # AST_ASTCONSTRUCTOR.54 raise NotImplementedError - def visitHrRuleset(self, ctx: Parser.HrRulesetContext): + def visitHrRuleset(self, ctx): """ hrRuleset: HIERARCHICAL # hrRulesetType | HIERARCHICAL_ON_VD ( GLPAREN vdName=IDENTIFIER (LPAREN valueDomainName (MUL valueDomainName)* RPAREN)? GRPAREN )? # hrRulesetVdType @@ -434,17 +437,17 @@ def visitHrRuleset(self, ctx: Parser.HrRulesetContext): # AST_ASTCONSTRUCTOR.55 raise NotImplementedError - def visitComponentType(self, ctx: Parser.ComponentTypeContext): + def visitComponentType(self, ctx): """ componentType: componentRole ( LT scalarType MT )? """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children role_node = self.visitComponentRole(ctx_list[0]) data_type = [ self.visitScalarType(constraint) for constraint in ctx_list - if isinstance(constraint, Parser.ScalarTypeContext) + if not constraint.is_terminal and constraint.ctx_id == RC.SCALAR_TYPE ] data_type = data_type[0] if len(data_type) > 0 else String() @@ -452,7 +455,7 @@ def visitComponentType(self, ctx: Parser.ComponentTypeContext): return Component(name="Component", data_type=data_type, role=role_node, nullable=nullable) - def visitInputParameterType(self, ctx: Parser.InputParameterTypeContext): + def visitInputParameterType(self, ctx): """ inputParameterType: scalarType @@ -462,86 +465,82 @@ def visitInputParameterType(self, ctx: Parser.InputParameterTypeContext): | componentType ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ScalarTypeContext): + if not c.is_terminal and c.ctx_id == RC.SCALAR_TYPE: return self.visitScalarType(c) - elif isinstance(c, Parser.DatasetTypeContext): + elif not c.is_terminal and c.ctx_id == RC.DATASET_TYPE: return self.visitDatasetType(c) - elif isinstance(c, Parser.ScalarSetTypeContext): + elif not c.is_terminal and c.ctx_id == RC.SCALAR_SET_TYPE: return self.visitScalarSetType(c) - elif isinstance(c, Parser.RulesetTypeContext): + elif not c.is_terminal and c.ctx_id == RC.RULESET_TYPE: return self.visitRulesetType(c) - elif isinstance(c, Parser.ComponentTypeContext): + elif not c.is_terminal and c.ctx_id == RC.COMPONENT_TYPE: return self.visitComponentType(c) else: raise NotImplementedError - def visitOutputParameterType(self, ctx: Parser.OutputParameterTypeContext): + def visitOutputParameterType(self, ctx): """ outputParameterType: scalarType | datasetType | componentType ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ScalarTypeContext): + if not c.is_terminal and c.ctx_id == RC.SCALAR_TYPE: # return self.visitScalarType(c).__class__.__name__ return "Scalar" - elif isinstance(c, Parser.DatasetTypeContext): + elif not c.is_terminal and c.ctx_id == RC.DATASET_TYPE: return "Dataset" - elif isinstance(c, Parser.ComponentTypeContext): + elif not c.is_terminal and c.ctx_id == RC.COMPONENT_TYPE: return "Component" else: raise NotImplementedError - def visitOutputParameterTypeComponent(self, ctx: Parser.OutputParameterTypeComponentContext): + def visitOutputParameterTypeComponent(self, ctx): """ outputParameterType: scalarType | componentType ; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.ScalarTypeContext): + if not c.is_terminal and c.ctx_id == RC.SCALAR_TYPE: return self.visitScalarType(c) - elif isinstance(c, Parser.ComponentTypeContext): + elif not c.is_terminal and c.ctx_id == RC.COMPONENT_TYPE: return self.visitComponentType(c) else: raise NotImplementedError - def visitScalarItem(self, ctx: Parser.ScalarItemContext): - ctx_list = list(ctx.getChildren()) - c = ctx_list[0] - - if isinstance(c, Parser.ConstantContext): - return self.visitConstant(c) - elif isinstance(c, Parser.ScalarWithCastContext): - return self.visitScalarWithCast(c) + def visitScalarItem(self, ctx): + # ctx is a scalarItem node (either simpleScalar or scalarWithCast alternative) + if ctx.ctx_id == RC.SIMPLE_SCALAR: + return self.visitSimpleScalar(ctx) + elif ctx.ctx_id == RC.SCALAR_WITH_CAST: + return self.visitScalarWithCast(ctx) else: raise NotImplementedError - def visitScalarWithCast(self, ctx: Parser.ScalarWithCastContext): + def visitScalarWithCast(self, ctx): """ | CAST LPAREN constant COMMA (basicScalarType) (COMMA STRING_CONSTANT)? RPAREN #scalarWithCast # noqa E501 """ # noqa E501 - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - token = c.getSymbol() - - op = token.text + op = c.text const_node = self.visitConstant(ctx_list[2]) basic_scalar_type = [self.visitBasicScalarType(ctx_list[4])] @@ -566,22 +565,22 @@ def visitScalarWithCast(self, ctx: Parser.ScalarWithCastContext): # AST_ASTCONSTRUCTOR.14 raise NotImplementedError - def visitScalarSetType(self, ctx: Parser.ScalarSetTypeContext): + def visitScalarSetType(self, ctx): """ scalarSetType: SET ('<' scalarType '>')? ; """ # AST_ASTCONSTRUCTOR.60 raise NotImplementedError - def visitRetainType(self, ctx: Parser.RetainTypeContext): + def visitRetainType(self, ctx): """ retainType: BOOLEAN_CONSTANT | ALL ; """ - token = ctx.children[0].getSymbol() + token = ctx.children[0] - if token.type == Parser.BOOLEAN_CONSTANT: + if token.symbol_type == vtl_cpp_parser.BOOLEAN_CONSTANT: if token.text == "true": param_constant_node = Constant( type_="BOOLEAN_CONSTANT", value=True, **extract_token_info(token) @@ -593,7 +592,7 @@ def visitRetainType(self, ctx: Parser.RetainTypeContext): else: raise NotImplementedError - elif token.type == Parser.ALL: + elif token.symbol_type == vtl_cpp_parser.ALL: param_constant_node = ParamConstant( type_="PARAM_CONSTANT", value=token.text, **extract_token_info(token) ) @@ -603,56 +602,56 @@ def visitRetainType(self, ctx: Parser.RetainTypeContext): return param_constant_node - def visitEvalDatasetType(self, ctx: Parser.EvalDatasetTypeContext): - ctx_list = list(ctx.getChildren()) + def visitEvalDatasetType(self, ctx): + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.DatasetTypeContext): + if not c.is_terminal and c.ctx_id == RC.DATASET_TYPE: return self.visitDatasetType(c) - elif isinstance(c, Parser.ScalarTypeContext): + elif not c.is_terminal and c.ctx_id == RC.SCALAR_TYPE: return self.visitScalarType(c) else: raise NotImplementedError - def visitAlias(self, ctx: Parser.AliasContext): - return ctx.children[0].getSymbol().text + def visitAlias(self, ctx): + return ctx.children[0].text - def visitSignedInteger(self, ctx: Parser.SignedIntegerContext): + def visitSignedInteger(self, ctx): # signedInteger: (MINUS|PLUS)? INTEGER_CONSTANT - return int(ctx.getText()) + return int(ctx.text) - def visitSignedNumber(self, ctx: Parser.SignedNumberContext): + def visitSignedNumber(self, ctx): # signedNumber: (MINUS|PLUS)? NUMBER_CONSTANT - return float(ctx.getText()) + return float(ctx.text) - def visitComparisonOperand(self, ctx: Parser.ComparisonOperandContext): - return ctx.children[0].getSymbol().text + def visitComparisonOperand(self, ctx): + return ctx.children[0].text - def visitErCode(self, ctx: Parser.ErCodeContext): + def visitErCode(self, ctx): """ erCode: ERRORCODE constant; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children try: return str(self.visitConstant(ctx_list[1]).value) except Exception: - raise Exception(f"Error code must be a string, line {ctx_list[1].getSymbol().line}") + raise Exception(f"Error code must be a string, line {ctx_list[1].start_line}") - def visitErLevel(self, ctx: Parser.ErLevelContext): + def visitErLevel(self, ctx): """ erLevel: ERRORLEVEL constant; """ - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children return self.visitConstant(ctx_list[1]).value - def visitSignature(self, ctx: Parser.SignatureContext, kind="ComponentID"): + def visitSignature(self, ctx, kind="ComponentID"): """ VarID (AS alias)? """ token_info = extract_token_info(ctx) - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] node_name = self.visitVarID(c).value @@ -669,54 +668,58 @@ def visitSignature(self, ctx: Parser.SignatureContext, kind="ComponentID"): From Hierarchical """ - def visitConditionClause(self, ctx: Parser.ConditionClauseContext): - ctx_list = list(ctx.getChildren()) + def visitConditionClause(self, ctx): + ctx_list = ctx.children components = [ - self.visitComponentID(c) for c in ctx_list if isinstance(c, Parser.ComponentIDContext) + self.visitComponentID(c) + for c in ctx_list + if not c.is_terminal and c.ctx_id == RC.COMPONENT_ID ] return components - def visitValidationMode(self, ctx: Parser.ValidationModeContext): - return ctx.children[0].getSymbol().text + def visitValidationMode(self, ctx): + return ctx.children[0].text - def visitValidationOutput(self, ctx: Parser.ValidationOutputContext): - return ctx.children[0].getSymbol().text + def visitValidationOutput(self, ctx): + return ctx.children[0].text - def visitInputMode(self, ctx: Parser.InputModeContext): - return ctx.children[0].getSymbol().text + def visitInputMode(self, ctx): + return ctx.children[0].text - def visitInputModeHierarchy(self, ctx: Parser.InputModeHierarchyContext): - return ctx.children[0].getSymbol().text + def visitInputModeHierarchy(self, ctx): + return ctx.children[0].text - def visitOutputModeHierarchy(self, ctx: Parser.OutputModeHierarchyContext): - return ctx.children[0].getSymbol().text + def visitOutputModeHierarchy(self, ctx): + return ctx.children[0].text """ From Analytic """ - def visitPartitionByClause(self, ctx: Parser.PartitionByClauseContext): - ctx_list = list(ctx.getChildren()) + def visitPartitionByClause(self, ctx): + ctx_list = ctx.children return [ self.visitComponentID(compID).value for compID in ctx_list - if isinstance(compID, Parser.ComponentIDContext) + if not compID.is_terminal and compID.ctx_id == RC.COMPONENT_ID ] - def visitOrderByClause(self, ctx: Parser.OrderByClauseContext): - ctx_list = list(ctx.getChildren()) + def visitOrderByClause(self, ctx): + ctx_list = ctx.children return [ - self.visitOrderByItem(c) for c in ctx_list if isinstance(c, Parser.OrderByItemContext) + self.visitOrderByItem(c) + for c in ctx_list + if not c.is_terminal and c.ctx_id == RC.ORDER_BY_ITEM ] - def visitWindowingClause(self, ctx: Parser.WindowingClauseContext): - ctx_list = list(ctx.getChildren()) + def visitWindowingClause(self, ctx): + ctx_list = ctx.children - win_mode = ctx_list[0].getSymbol().text # Windowing mode (data points | range ) + win_mode = ctx_list[0].text # Windowing mode (data points | range ) token_info = extract_token_info(ctx) @@ -738,7 +741,7 @@ def visitWindowingClause(self, ctx: Parser.WindowingClauseContext): ): # preceding and preceding (error) raise Exception( f"Cannot have 2 preceding clauses with unbounded in analytic clause, " - f"line {ctx_list[3].start.line}" + f"line {ctx_list[3].start_line}" ) if ( @@ -746,7 +749,7 @@ def visitWindowingClause(self, ctx: Parser.WindowingClauseContext): ): # following and following (error) raise Exception( f"Cannot have 2 following clauses with unbounded in analytic clause, " - f"line {ctx_list[3].start.line}" + f"line {ctx_list[3].start_line}" ) if mode_1 == mode_2: @@ -761,8 +764,8 @@ def visitWindowingClause(self, ctx: Parser.WindowingClauseContext): return create_windowing(win_mode, [first, second], [mode_1, mode_2], token_info) - def visitOrderByItem(self, ctx: Parser.OrderByItemContext): - ctx_list = list(ctx.getChildren()) + def visitOrderByItem(self, ctx): + ctx_list = ctx.children token_info = extract_token_info(ctx) @@ -773,25 +776,28 @@ def visitOrderByItem(self, ctx: Parser.OrderByItemContext): return OrderBy( component=self.visitComponentID(ctx_list[0]).value, - order=ctx_list[1].getSymbol().text, + order=ctx_list[1].text, **token_info, ) - def visitLimitClauseItem(self, ctx: Parser.LimitClauseItemContext): + def visitLimitClauseItem(self, ctx): # limitClauseItem: signedInteger limitDir=PRECEDING # | signedInteger limitDir=FOLLOWING # | CURRENT DATA POINT # | UNBOUNDED limitDir=PRECEDING # | UNBOUNDED limitDir=FOLLOWING - ctx_list = list(ctx.getChildren()) + ctx_list = ctx.children c = ctx_list[0] - if isinstance(c, Parser.SignedIntegerContext): + if not c.is_terminal and c.ctx_id == RC.SIGNED_INTEGER: result = self.visitSignedInteger(c) - return result, ctx.limitDir.text - elif c.getSymbol().text.lower() == "unbounded": - return -1, ctx.limitDir.text - elif c.getSymbol().text == "current": - return 0, ctx_list[0].getSymbol().text + # limitDir is the last terminal child (PRECEDING or FOLLOWING) + limit_dir = ctx_list[-1].text + return result, limit_dir + elif c.text.lower() == "unbounded": + limit_dir = ctx_list[-1].text + return -1, limit_dir + elif c.text == "current": + return 0, ctx_list[0].text def create_windowing(win_mode, values, modes, token_info): diff --git a/src/vtlengine/AST/ASTConstructorModules/__init__.py b/src/vtlengine/AST/ASTConstructorModules/__init__.py index f4a1e90ad..546241e82 100644 --- a/src/vtlengine/AST/ASTConstructorModules/__init__.py +++ b/src/vtlengine/AST/ASTConstructorModules/__init__.py @@ -1,14 +1,11 @@ -from typing import Dict, Union +from typing import Any, Dict -from antlr4.ParserRuleContext import ParserRuleContext -from antlr4.Token import CommonToken +from vtlengine.AST.Grammar._cpp_parser.vtl_cpp_parser import ParseNode, TerminalNode -from vtlengine.AST.Grammar.lexer import Lexer - -def extract_token_info(token: Union[CommonToken, ParserRuleContext]) -> Dict[str, int]: +def extract_token_info(token: Any) -> Dict[str, int]: """ - Extracts the token information from a token or ParserRuleContext. + Extracts the token information from a C++ parser node. The Token information includes: - column_start: The starting column of the token. @@ -16,35 +13,34 @@ def extract_token_info(token: Union[CommonToken, ParserRuleContext]) -> Dict[str - line_start: The starting line number of the token. - line_stop: The stopping line number of the token. - The overall idea is to provide the information from which line and column, - and to which line and column, the text is referenced by the AST object, including children. - - Important Note: the keys of the dict are the same as the class attributes of the AST Object. - Args: - token (Union[CommonToken, ParserRuleContext]): The token or ParserRuleContext to extract - information from. + token: A ParseNode or TerminalNode from the C++ parser. Returns: Dict[str, int]: A dictionary containing the token information. """ - - if isinstance(token, ParserRuleContext): + if isinstance(token, ParseNode): + stop_text = token.stop_text + # token shouldn't contribute to column_stop calculation + if stop_text == "": + stop_text = "" + return { + "column_start": token.start_column, + "column_stop": token.stop_column + len(stop_text), + "line_start": token.start_line, + "line_stop": token.stop_line, + } + if isinstance(token, TerminalNode): return { - "column_start": token.start.column, - "column_stop": token.stop.column + len(token.stop.text), - "line_start": token.start.line, - "line_stop": token.stop.line, + "column_start": token.column, + "column_stop": token.column + len(token.text), + "line_start": token.line, + "line_stop": token.line, } - line_start = token.line - line_stop = token.line - # For block comments, we need to add the lines inside the block, marked by \n, to the stop line. - # The ML_COMMENT does not take into account the final \n in its grammar. - if token.type == Lexer.ML_COMMENT: - line_stop = token.line + token.text.count("\n") + # Fallback for dict-like comment tokens return { - "column_start": token.column, - "column_stop": token.column + len(token.text), - "line_start": line_start, - "line_stop": line_stop, + "column_start": token.get("column", 0), # type: ignore[union-attr] + "column_stop": token.get("column", 0) + len(token.get("text", "")), # type: ignore[union-attr] + "line_start": token.get("line", 0), # type: ignore[union-attr] + "line_stop": token.get("line", 0), # type: ignore[union-attr] } diff --git a/src/vtlengine/AST/ASTString.py b/src/vtlengine/AST/ASTString.py index 71ad5ccd0..4badca77a 100644 --- a/src/vtlengine/AST/ASTString.py +++ b/src/vtlengine/AST/ASTString.py @@ -9,7 +9,7 @@ TimeAggregation, ) from vtlengine.AST.ASTTemplate import ASTTemplate -from vtlengine.AST.Grammar.lexer import Lexer +from vtlengine.AST.Grammar._cpp_parser import LITERAL_NAMES from vtlengine.AST.Grammar.tokens import ( AGGREGATE, APPLY, @@ -58,7 +58,7 @@ nl = "\n" tab = "\t" -RESERVED_WORDS = {x.replace("'", ""): x for x in Lexer.literalNames} +RESERVED_WORDS = {x.replace("'", ""): x for x in LITERAL_NAMES} def _handle_literal(value: Union[str, int, float, bool]): diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.cpp new file mode 100644 index 000000000..8b513aa39 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.cpp @@ -0,0 +1,7 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlBaseListener.h" + + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.h new file mode 100644 index 000000000..b266b6a5f --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseListener.h @@ -0,0 +1,695 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" +#include "VtlListener.h" + + +/** + * This class provides an empty implementation of VtlListener, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +class VtlBaseListener : public VtlListener { +public: + + virtual void enterStart(VtlParser::StartContext * /*ctx*/) override { } + virtual void exitStart(VtlParser::StartContext * /*ctx*/) override { } + + virtual void enterTemporaryAssignment(VtlParser::TemporaryAssignmentContext * /*ctx*/) override { } + virtual void exitTemporaryAssignment(VtlParser::TemporaryAssignmentContext * /*ctx*/) override { } + + virtual void enterPersistAssignment(VtlParser::PersistAssignmentContext * /*ctx*/) override { } + virtual void exitPersistAssignment(VtlParser::PersistAssignmentContext * /*ctx*/) override { } + + virtual void enterDefineExpression(VtlParser::DefineExpressionContext * /*ctx*/) override { } + virtual void exitDefineExpression(VtlParser::DefineExpressionContext * /*ctx*/) override { } + + virtual void enterVarIdExpr(VtlParser::VarIdExprContext * /*ctx*/) override { } + virtual void exitVarIdExpr(VtlParser::VarIdExprContext * /*ctx*/) override { } + + virtual void enterMembershipExpr(VtlParser::MembershipExprContext * /*ctx*/) override { } + virtual void exitMembershipExpr(VtlParser::MembershipExprContext * /*ctx*/) override { } + + virtual void enterInNotInExpr(VtlParser::InNotInExprContext * /*ctx*/) override { } + virtual void exitInNotInExpr(VtlParser::InNotInExprContext * /*ctx*/) override { } + + virtual void enterBooleanExpr(VtlParser::BooleanExprContext * /*ctx*/) override { } + virtual void exitBooleanExpr(VtlParser::BooleanExprContext * /*ctx*/) override { } + + virtual void enterComparisonExpr(VtlParser::ComparisonExprContext * /*ctx*/) override { } + virtual void exitComparisonExpr(VtlParser::ComparisonExprContext * /*ctx*/) override { } + + virtual void enterUnaryExpr(VtlParser::UnaryExprContext * /*ctx*/) override { } + virtual void exitUnaryExpr(VtlParser::UnaryExprContext * /*ctx*/) override { } + + virtual void enterFunctionsExpression(VtlParser::FunctionsExpressionContext * /*ctx*/) override { } + virtual void exitFunctionsExpression(VtlParser::FunctionsExpressionContext * /*ctx*/) override { } + + virtual void enterIfExpr(VtlParser::IfExprContext * /*ctx*/) override { } + virtual void exitIfExpr(VtlParser::IfExprContext * /*ctx*/) override { } + + virtual void enterClauseExpr(VtlParser::ClauseExprContext * /*ctx*/) override { } + virtual void exitClauseExpr(VtlParser::ClauseExprContext * /*ctx*/) override { } + + virtual void enterCaseExpr(VtlParser::CaseExprContext * /*ctx*/) override { } + virtual void exitCaseExpr(VtlParser::CaseExprContext * /*ctx*/) override { } + + virtual void enterArithmeticExpr(VtlParser::ArithmeticExprContext * /*ctx*/) override { } + virtual void exitArithmeticExpr(VtlParser::ArithmeticExprContext * /*ctx*/) override { } + + virtual void enterParenthesisExpr(VtlParser::ParenthesisExprContext * /*ctx*/) override { } + virtual void exitParenthesisExpr(VtlParser::ParenthesisExprContext * /*ctx*/) override { } + + virtual void enterConstantExpr(VtlParser::ConstantExprContext * /*ctx*/) override { } + virtual void exitConstantExpr(VtlParser::ConstantExprContext * /*ctx*/) override { } + + virtual void enterArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext * /*ctx*/) override { } + virtual void exitArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext * /*ctx*/) override { } + + virtual void enterArithmeticExprComp(VtlParser::ArithmeticExprCompContext * /*ctx*/) override { } + virtual void exitArithmeticExprComp(VtlParser::ArithmeticExprCompContext * /*ctx*/) override { } + + virtual void enterIfExprComp(VtlParser::IfExprCompContext * /*ctx*/) override { } + virtual void exitIfExprComp(VtlParser::IfExprCompContext * /*ctx*/) override { } + + virtual void enterComparisonExprComp(VtlParser::ComparisonExprCompContext * /*ctx*/) override { } + virtual void exitComparisonExprComp(VtlParser::ComparisonExprCompContext * /*ctx*/) override { } + + virtual void enterFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext * /*ctx*/) override { } + virtual void exitFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext * /*ctx*/) override { } + + virtual void enterCompId(VtlParser::CompIdContext * /*ctx*/) override { } + virtual void exitCompId(VtlParser::CompIdContext * /*ctx*/) override { } + + virtual void enterConstantExprComp(VtlParser::ConstantExprCompContext * /*ctx*/) override { } + virtual void exitConstantExprComp(VtlParser::ConstantExprCompContext * /*ctx*/) override { } + + virtual void enterArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext * /*ctx*/) override { } + virtual void exitArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext * /*ctx*/) override { } + + virtual void enterParenthesisExprComp(VtlParser::ParenthesisExprCompContext * /*ctx*/) override { } + virtual void exitParenthesisExprComp(VtlParser::ParenthesisExprCompContext * /*ctx*/) override { } + + virtual void enterInNotInExprComp(VtlParser::InNotInExprCompContext * /*ctx*/) override { } + virtual void exitInNotInExprComp(VtlParser::InNotInExprCompContext * /*ctx*/) override { } + + virtual void enterUnaryExprComp(VtlParser::UnaryExprCompContext * /*ctx*/) override { } + virtual void exitUnaryExprComp(VtlParser::UnaryExprCompContext * /*ctx*/) override { } + + virtual void enterCaseExprComp(VtlParser::CaseExprCompContext * /*ctx*/) override { } + virtual void exitCaseExprComp(VtlParser::CaseExprCompContext * /*ctx*/) override { } + + virtual void enterBooleanExprComp(VtlParser::BooleanExprCompContext * /*ctx*/) override { } + virtual void exitBooleanExprComp(VtlParser::BooleanExprCompContext * /*ctx*/) override { } + + virtual void enterGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext * /*ctx*/) override { } + virtual void exitAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext * /*ctx*/) override { } + + virtual void enterJoinFunctions(VtlParser::JoinFunctionsContext * /*ctx*/) override { } + virtual void exitJoinFunctions(VtlParser::JoinFunctionsContext * /*ctx*/) override { } + + virtual void enterGenericFunctions(VtlParser::GenericFunctionsContext * /*ctx*/) override { } + virtual void exitGenericFunctions(VtlParser::GenericFunctionsContext * /*ctx*/) override { } + + virtual void enterStringFunctions(VtlParser::StringFunctionsContext * /*ctx*/) override { } + virtual void exitStringFunctions(VtlParser::StringFunctionsContext * /*ctx*/) override { } + + virtual void enterNumericFunctions(VtlParser::NumericFunctionsContext * /*ctx*/) override { } + virtual void exitNumericFunctions(VtlParser::NumericFunctionsContext * /*ctx*/) override { } + + virtual void enterComparisonFunctions(VtlParser::ComparisonFunctionsContext * /*ctx*/) override { } + virtual void exitComparisonFunctions(VtlParser::ComparisonFunctionsContext * /*ctx*/) override { } + + virtual void enterTimeFunctions(VtlParser::TimeFunctionsContext * /*ctx*/) override { } + virtual void exitTimeFunctions(VtlParser::TimeFunctionsContext * /*ctx*/) override { } + + virtual void enterSetFunctions(VtlParser::SetFunctionsContext * /*ctx*/) override { } + virtual void exitSetFunctions(VtlParser::SetFunctionsContext * /*ctx*/) override { } + + virtual void enterHierarchyFunctions(VtlParser::HierarchyFunctionsContext * /*ctx*/) override { } + virtual void exitHierarchyFunctions(VtlParser::HierarchyFunctionsContext * /*ctx*/) override { } + + virtual void enterValidationFunctions(VtlParser::ValidationFunctionsContext * /*ctx*/) override { } + virtual void exitValidationFunctions(VtlParser::ValidationFunctionsContext * /*ctx*/) override { } + + virtual void enterConditionalFunctions(VtlParser::ConditionalFunctionsContext * /*ctx*/) override { } + virtual void exitConditionalFunctions(VtlParser::ConditionalFunctionsContext * /*ctx*/) override { } + + virtual void enterAggregateFunctions(VtlParser::AggregateFunctionsContext * /*ctx*/) override { } + virtual void exitAggregateFunctions(VtlParser::AggregateFunctionsContext * /*ctx*/) override { } + + virtual void enterAnalyticFunctions(VtlParser::AnalyticFunctionsContext * /*ctx*/) override { } + virtual void exitAnalyticFunctions(VtlParser::AnalyticFunctionsContext * /*ctx*/) override { } + + virtual void enterDatasetClause(VtlParser::DatasetClauseContext * /*ctx*/) override { } + virtual void exitDatasetClause(VtlParser::DatasetClauseContext * /*ctx*/) override { } + + virtual void enterRenameClause(VtlParser::RenameClauseContext * /*ctx*/) override { } + virtual void exitRenameClause(VtlParser::RenameClauseContext * /*ctx*/) override { } + + virtual void enterAggrClause(VtlParser::AggrClauseContext * /*ctx*/) override { } + virtual void exitAggrClause(VtlParser::AggrClauseContext * /*ctx*/) override { } + + virtual void enterFilterClause(VtlParser::FilterClauseContext * /*ctx*/) override { } + virtual void exitFilterClause(VtlParser::FilterClauseContext * /*ctx*/) override { } + + virtual void enterCalcClause(VtlParser::CalcClauseContext * /*ctx*/) override { } + virtual void exitCalcClause(VtlParser::CalcClauseContext * /*ctx*/) override { } + + virtual void enterKeepOrDropClause(VtlParser::KeepOrDropClauseContext * /*ctx*/) override { } + virtual void exitKeepOrDropClause(VtlParser::KeepOrDropClauseContext * /*ctx*/) override { } + + virtual void enterPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext * /*ctx*/) override { } + virtual void exitPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext * /*ctx*/) override { } + + virtual void enterCustomPivotClause(VtlParser::CustomPivotClauseContext * /*ctx*/) override { } + virtual void exitCustomPivotClause(VtlParser::CustomPivotClauseContext * /*ctx*/) override { } + + virtual void enterSubspaceClause(VtlParser::SubspaceClauseContext * /*ctx*/) override { } + virtual void exitSubspaceClause(VtlParser::SubspaceClauseContext * /*ctx*/) override { } + + virtual void enterJoinExpr(VtlParser::JoinExprContext * /*ctx*/) override { } + virtual void exitJoinExpr(VtlParser::JoinExprContext * /*ctx*/) override { } + + virtual void enterDefOperator(VtlParser::DefOperatorContext * /*ctx*/) override { } + virtual void exitDefOperator(VtlParser::DefOperatorContext * /*ctx*/) override { } + + virtual void enterDefDatapointRuleset(VtlParser::DefDatapointRulesetContext * /*ctx*/) override { } + virtual void exitDefDatapointRuleset(VtlParser::DefDatapointRulesetContext * /*ctx*/) override { } + + virtual void enterDefHierarchical(VtlParser::DefHierarchicalContext * /*ctx*/) override { } + virtual void exitDefHierarchical(VtlParser::DefHierarchicalContext * /*ctx*/) override { } + + virtual void enterCallDataset(VtlParser::CallDatasetContext * /*ctx*/) override { } + virtual void exitCallDataset(VtlParser::CallDatasetContext * /*ctx*/) override { } + + virtual void enterEvalAtom(VtlParser::EvalAtomContext * /*ctx*/) override { } + virtual void exitEvalAtom(VtlParser::EvalAtomContext * /*ctx*/) override { } + + virtual void enterCastExprDataset(VtlParser::CastExprDatasetContext * /*ctx*/) override { } + virtual void exitCastExprDataset(VtlParser::CastExprDatasetContext * /*ctx*/) override { } + + virtual void enterCallComponent(VtlParser::CallComponentContext * /*ctx*/) override { } + virtual void exitCallComponent(VtlParser::CallComponentContext * /*ctx*/) override { } + + virtual void enterCastExprComponent(VtlParser::CastExprComponentContext * /*ctx*/) override { } + virtual void exitCastExprComponent(VtlParser::CastExprComponentContext * /*ctx*/) override { } + + virtual void enterEvalAtomComponent(VtlParser::EvalAtomComponentContext * /*ctx*/) override { } + virtual void exitEvalAtomComponent(VtlParser::EvalAtomComponentContext * /*ctx*/) override { } + + virtual void enterParameterComponent(VtlParser::ParameterComponentContext * /*ctx*/) override { } + virtual void exitParameterComponent(VtlParser::ParameterComponentContext * /*ctx*/) override { } + + virtual void enterParameter(VtlParser::ParameterContext * /*ctx*/) override { } + virtual void exitParameter(VtlParser::ParameterContext * /*ctx*/) override { } + + virtual void enterUnaryStringFunction(VtlParser::UnaryStringFunctionContext * /*ctx*/) override { } + virtual void exitUnaryStringFunction(VtlParser::UnaryStringFunctionContext * /*ctx*/) override { } + + virtual void enterSubstrAtom(VtlParser::SubstrAtomContext * /*ctx*/) override { } + virtual void exitSubstrAtom(VtlParser::SubstrAtomContext * /*ctx*/) override { } + + virtual void enterReplaceAtom(VtlParser::ReplaceAtomContext * /*ctx*/) override { } + virtual void exitReplaceAtom(VtlParser::ReplaceAtomContext * /*ctx*/) override { } + + virtual void enterInstrAtom(VtlParser::InstrAtomContext * /*ctx*/) override { } + virtual void exitInstrAtom(VtlParser::InstrAtomContext * /*ctx*/) override { } + + virtual void enterUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext * /*ctx*/) override { } + virtual void exitUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext * /*ctx*/) override { } + + virtual void enterSubstrAtomComponent(VtlParser::SubstrAtomComponentContext * /*ctx*/) override { } + virtual void exitSubstrAtomComponent(VtlParser::SubstrAtomComponentContext * /*ctx*/) override { } + + virtual void enterReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext * /*ctx*/) override { } + virtual void exitReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext * /*ctx*/) override { } + + virtual void enterInstrAtomComponent(VtlParser::InstrAtomComponentContext * /*ctx*/) override { } + virtual void exitInstrAtomComponent(VtlParser::InstrAtomComponentContext * /*ctx*/) override { } + + virtual void enterUnaryNumeric(VtlParser::UnaryNumericContext * /*ctx*/) override { } + virtual void exitUnaryNumeric(VtlParser::UnaryNumericContext * /*ctx*/) override { } + + virtual void enterUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext * /*ctx*/) override { } + virtual void exitUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext * /*ctx*/) override { } + + virtual void enterBinaryNumeric(VtlParser::BinaryNumericContext * /*ctx*/) override { } + virtual void exitBinaryNumeric(VtlParser::BinaryNumericContext * /*ctx*/) override { } + + virtual void enterUnaryNumericComponent(VtlParser::UnaryNumericComponentContext * /*ctx*/) override { } + virtual void exitUnaryNumericComponent(VtlParser::UnaryNumericComponentContext * /*ctx*/) override { } + + virtual void enterUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext * /*ctx*/) override { } + virtual void exitUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext * /*ctx*/) override { } + + virtual void enterBinaryNumericComponent(VtlParser::BinaryNumericComponentContext * /*ctx*/) override { } + virtual void exitBinaryNumericComponent(VtlParser::BinaryNumericComponentContext * /*ctx*/) override { } + + virtual void enterBetweenAtom(VtlParser::BetweenAtomContext * /*ctx*/) override { } + virtual void exitBetweenAtom(VtlParser::BetweenAtomContext * /*ctx*/) override { } + + virtual void enterCharsetMatchAtom(VtlParser::CharsetMatchAtomContext * /*ctx*/) override { } + virtual void exitCharsetMatchAtom(VtlParser::CharsetMatchAtomContext * /*ctx*/) override { } + + virtual void enterIsNullAtom(VtlParser::IsNullAtomContext * /*ctx*/) override { } + virtual void exitIsNullAtom(VtlParser::IsNullAtomContext * /*ctx*/) override { } + + virtual void enterExistInAtom(VtlParser::ExistInAtomContext * /*ctx*/) override { } + virtual void exitExistInAtom(VtlParser::ExistInAtomContext * /*ctx*/) override { } + + virtual void enterBetweenAtomComponent(VtlParser::BetweenAtomComponentContext * /*ctx*/) override { } + virtual void exitBetweenAtomComponent(VtlParser::BetweenAtomComponentContext * /*ctx*/) override { } + + virtual void enterCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext * /*ctx*/) override { } + virtual void exitCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext * /*ctx*/) override { } + + virtual void enterIsNullAtomComponent(VtlParser::IsNullAtomComponentContext * /*ctx*/) override { } + virtual void exitIsNullAtomComponent(VtlParser::IsNullAtomComponentContext * /*ctx*/) override { } + + virtual void enterPeriodAtom(VtlParser::PeriodAtomContext * /*ctx*/) override { } + virtual void exitPeriodAtom(VtlParser::PeriodAtomContext * /*ctx*/) override { } + + virtual void enterFillTimeAtom(VtlParser::FillTimeAtomContext * /*ctx*/) override { } + virtual void exitFillTimeAtom(VtlParser::FillTimeAtomContext * /*ctx*/) override { } + + virtual void enterFlowAtom(VtlParser::FlowAtomContext * /*ctx*/) override { } + virtual void exitFlowAtom(VtlParser::FlowAtomContext * /*ctx*/) override { } + + virtual void enterTimeShiftAtom(VtlParser::TimeShiftAtomContext * /*ctx*/) override { } + virtual void exitTimeShiftAtom(VtlParser::TimeShiftAtomContext * /*ctx*/) override { } + + virtual void enterTimeAggAtom(VtlParser::TimeAggAtomContext * /*ctx*/) override { } + virtual void exitTimeAggAtom(VtlParser::TimeAggAtomContext * /*ctx*/) override { } + + virtual void enterCurrentDateAtom(VtlParser::CurrentDateAtomContext * /*ctx*/) override { } + virtual void exitCurrentDateAtom(VtlParser::CurrentDateAtomContext * /*ctx*/) override { } + + virtual void enterDateDiffAtom(VtlParser::DateDiffAtomContext * /*ctx*/) override { } + virtual void exitDateDiffAtom(VtlParser::DateDiffAtomContext * /*ctx*/) override { } + + virtual void enterDateAddAtom(VtlParser::DateAddAtomContext * /*ctx*/) override { } + virtual void exitDateAddAtom(VtlParser::DateAddAtomContext * /*ctx*/) override { } + + virtual void enterYearAtom(VtlParser::YearAtomContext * /*ctx*/) override { } + virtual void exitYearAtom(VtlParser::YearAtomContext * /*ctx*/) override { } + + virtual void enterMonthAtom(VtlParser::MonthAtomContext * /*ctx*/) override { } + virtual void exitMonthAtom(VtlParser::MonthAtomContext * /*ctx*/) override { } + + virtual void enterDayOfMonthAtom(VtlParser::DayOfMonthAtomContext * /*ctx*/) override { } + virtual void exitDayOfMonthAtom(VtlParser::DayOfMonthAtomContext * /*ctx*/) override { } + + virtual void enterDayOfYearAtom(VtlParser::DayOfYearAtomContext * /*ctx*/) override { } + virtual void exitDayOfYearAtom(VtlParser::DayOfYearAtomContext * /*ctx*/) override { } + + virtual void enterDayToYearAtom(VtlParser::DayToYearAtomContext * /*ctx*/) override { } + virtual void exitDayToYearAtom(VtlParser::DayToYearAtomContext * /*ctx*/) override { } + + virtual void enterDayToMonthAtom(VtlParser::DayToMonthAtomContext * /*ctx*/) override { } + virtual void exitDayToMonthAtom(VtlParser::DayToMonthAtomContext * /*ctx*/) override { } + + virtual void enterYearTodayAtom(VtlParser::YearTodayAtomContext * /*ctx*/) override { } + virtual void exitYearTodayAtom(VtlParser::YearTodayAtomContext * /*ctx*/) override { } + + virtual void enterMonthTodayAtom(VtlParser::MonthTodayAtomContext * /*ctx*/) override { } + virtual void exitMonthTodayAtom(VtlParser::MonthTodayAtomContext * /*ctx*/) override { } + + virtual void enterPeriodAtomComponent(VtlParser::PeriodAtomComponentContext * /*ctx*/) override { } + virtual void exitPeriodAtomComponent(VtlParser::PeriodAtomComponentContext * /*ctx*/) override { } + + virtual void enterFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext * /*ctx*/) override { } + virtual void exitFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext * /*ctx*/) override { } + + virtual void enterFlowAtomComponent(VtlParser::FlowAtomComponentContext * /*ctx*/) override { } + virtual void exitFlowAtomComponent(VtlParser::FlowAtomComponentContext * /*ctx*/) override { } + + virtual void enterTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext * /*ctx*/) override { } + virtual void exitTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext * /*ctx*/) override { } + + virtual void enterTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext * /*ctx*/) override { } + virtual void exitTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext * /*ctx*/) override { } + + virtual void enterCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext * /*ctx*/) override { } + virtual void exitCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext * /*ctx*/) override { } + + virtual void enterDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext * /*ctx*/) override { } + virtual void exitDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext * /*ctx*/) override { } + + virtual void enterDateAddAtomComponent(VtlParser::DateAddAtomComponentContext * /*ctx*/) override { } + virtual void exitDateAddAtomComponent(VtlParser::DateAddAtomComponentContext * /*ctx*/) override { } + + virtual void enterYearAtomComponent(VtlParser::YearAtomComponentContext * /*ctx*/) override { } + virtual void exitYearAtomComponent(VtlParser::YearAtomComponentContext * /*ctx*/) override { } + + virtual void enterMonthAtomComponent(VtlParser::MonthAtomComponentContext * /*ctx*/) override { } + virtual void exitMonthAtomComponent(VtlParser::MonthAtomComponentContext * /*ctx*/) override { } + + virtual void enterDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext * /*ctx*/) override { } + virtual void exitDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext * /*ctx*/) override { } + + virtual void enterDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext * /*ctx*/) override { } + virtual void exitDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext * /*ctx*/) override { } + + virtual void enterDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext * /*ctx*/) override { } + virtual void exitDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext * /*ctx*/) override { } + + virtual void enterDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext * /*ctx*/) override { } + virtual void exitDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext * /*ctx*/) override { } + + virtual void enterYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext * /*ctx*/) override { } + virtual void exitYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext * /*ctx*/) override { } + + virtual void enterMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext * /*ctx*/) override { } + virtual void exitMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext * /*ctx*/) override { } + + virtual void enterUnionAtom(VtlParser::UnionAtomContext * /*ctx*/) override { } + virtual void exitUnionAtom(VtlParser::UnionAtomContext * /*ctx*/) override { } + + virtual void enterIntersectAtom(VtlParser::IntersectAtomContext * /*ctx*/) override { } + virtual void exitIntersectAtom(VtlParser::IntersectAtomContext * /*ctx*/) override { } + + virtual void enterSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext * /*ctx*/) override { } + virtual void exitSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext * /*ctx*/) override { } + + virtual void enterHierarchyOperators(VtlParser::HierarchyOperatorsContext * /*ctx*/) override { } + virtual void exitHierarchyOperators(VtlParser::HierarchyOperatorsContext * /*ctx*/) override { } + + virtual void enterValidateDPruleset(VtlParser::ValidateDPrulesetContext * /*ctx*/) override { } + virtual void exitValidateDPruleset(VtlParser::ValidateDPrulesetContext * /*ctx*/) override { } + + virtual void enterValidateHRruleset(VtlParser::ValidateHRrulesetContext * /*ctx*/) override { } + virtual void exitValidateHRruleset(VtlParser::ValidateHRrulesetContext * /*ctx*/) override { } + + virtual void enterValidationSimple(VtlParser::ValidationSimpleContext * /*ctx*/) override { } + virtual void exitValidationSimple(VtlParser::ValidationSimpleContext * /*ctx*/) override { } + + virtual void enterNvlAtom(VtlParser::NvlAtomContext * /*ctx*/) override { } + virtual void exitNvlAtom(VtlParser::NvlAtomContext * /*ctx*/) override { } + + virtual void enterNvlAtomComponent(VtlParser::NvlAtomComponentContext * /*ctx*/) override { } + virtual void exitNvlAtomComponent(VtlParser::NvlAtomComponentContext * /*ctx*/) override { } + + virtual void enterAggrComp(VtlParser::AggrCompContext * /*ctx*/) override { } + virtual void exitAggrComp(VtlParser::AggrCompContext * /*ctx*/) override { } + + virtual void enterCountAggrComp(VtlParser::CountAggrCompContext * /*ctx*/) override { } + virtual void exitCountAggrComp(VtlParser::CountAggrCompContext * /*ctx*/) override { } + + virtual void enterAggrDataset(VtlParser::AggrDatasetContext * /*ctx*/) override { } + virtual void exitAggrDataset(VtlParser::AggrDatasetContext * /*ctx*/) override { } + + virtual void enterAnSimpleFunction(VtlParser::AnSimpleFunctionContext * /*ctx*/) override { } + virtual void exitAnSimpleFunction(VtlParser::AnSimpleFunctionContext * /*ctx*/) override { } + + virtual void enterLagOrLeadAn(VtlParser::LagOrLeadAnContext * /*ctx*/) override { } + virtual void exitLagOrLeadAn(VtlParser::LagOrLeadAnContext * /*ctx*/) override { } + + virtual void enterRatioToReportAn(VtlParser::RatioToReportAnContext * /*ctx*/) override { } + virtual void exitRatioToReportAn(VtlParser::RatioToReportAnContext * /*ctx*/) override { } + + virtual void enterAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext * /*ctx*/) override { } + virtual void exitAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext * /*ctx*/) override { } + + virtual void enterLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext * /*ctx*/) override { } + virtual void exitLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext * /*ctx*/) override { } + + virtual void enterRankAnComponent(VtlParser::RankAnComponentContext * /*ctx*/) override { } + virtual void exitRankAnComponent(VtlParser::RankAnComponentContext * /*ctx*/) override { } + + virtual void enterRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext * /*ctx*/) override { } + virtual void exitRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext * /*ctx*/) override { } + + virtual void enterRenameClauseItem(VtlParser::RenameClauseItemContext * /*ctx*/) override { } + virtual void exitRenameClauseItem(VtlParser::RenameClauseItemContext * /*ctx*/) override { } + + virtual void enterAggregateClause(VtlParser::AggregateClauseContext * /*ctx*/) override { } + virtual void exitAggregateClause(VtlParser::AggregateClauseContext * /*ctx*/) override { } + + virtual void enterAggrFunctionClause(VtlParser::AggrFunctionClauseContext * /*ctx*/) override { } + virtual void exitAggrFunctionClause(VtlParser::AggrFunctionClauseContext * /*ctx*/) override { } + + virtual void enterCalcClauseItem(VtlParser::CalcClauseItemContext * /*ctx*/) override { } + virtual void exitCalcClauseItem(VtlParser::CalcClauseItemContext * /*ctx*/) override { } + + virtual void enterSubspaceClauseItem(VtlParser::SubspaceClauseItemContext * /*ctx*/) override { } + virtual void exitSubspaceClauseItem(VtlParser::SubspaceClauseItemContext * /*ctx*/) override { } + + virtual void enterSimpleScalar(VtlParser::SimpleScalarContext * /*ctx*/) override { } + virtual void exitSimpleScalar(VtlParser::SimpleScalarContext * /*ctx*/) override { } + + virtual void enterScalarWithCast(VtlParser::ScalarWithCastContext * /*ctx*/) override { } + virtual void exitScalarWithCast(VtlParser::ScalarWithCastContext * /*ctx*/) override { } + + virtual void enterJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext * /*ctx*/) override { } + virtual void exitJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext * /*ctx*/) override { } + + virtual void enterJoinClause(VtlParser::JoinClauseContext * /*ctx*/) override { } + virtual void exitJoinClause(VtlParser::JoinClauseContext * /*ctx*/) override { } + + virtual void enterJoinClauseItem(VtlParser::JoinClauseItemContext * /*ctx*/) override { } + virtual void exitJoinClauseItem(VtlParser::JoinClauseItemContext * /*ctx*/) override { } + + virtual void enterJoinBody(VtlParser::JoinBodyContext * /*ctx*/) override { } + virtual void exitJoinBody(VtlParser::JoinBodyContext * /*ctx*/) override { } + + virtual void enterJoinApplyClause(VtlParser::JoinApplyClauseContext * /*ctx*/) override { } + virtual void exitJoinApplyClause(VtlParser::JoinApplyClauseContext * /*ctx*/) override { } + + virtual void enterPartitionByClause(VtlParser::PartitionByClauseContext * /*ctx*/) override { } + virtual void exitPartitionByClause(VtlParser::PartitionByClauseContext * /*ctx*/) override { } + + virtual void enterOrderByClause(VtlParser::OrderByClauseContext * /*ctx*/) override { } + virtual void exitOrderByClause(VtlParser::OrderByClauseContext * /*ctx*/) override { } + + virtual void enterOrderByItem(VtlParser::OrderByItemContext * /*ctx*/) override { } + virtual void exitOrderByItem(VtlParser::OrderByItemContext * /*ctx*/) override { } + + virtual void enterWindowingClause(VtlParser::WindowingClauseContext * /*ctx*/) override { } + virtual void exitWindowingClause(VtlParser::WindowingClauseContext * /*ctx*/) override { } + + virtual void enterSignedInteger(VtlParser::SignedIntegerContext * /*ctx*/) override { } + virtual void exitSignedInteger(VtlParser::SignedIntegerContext * /*ctx*/) override { } + + virtual void enterSignedNumber(VtlParser::SignedNumberContext * /*ctx*/) override { } + virtual void exitSignedNumber(VtlParser::SignedNumberContext * /*ctx*/) override { } + + virtual void enterLimitClauseItem(VtlParser::LimitClauseItemContext * /*ctx*/) override { } + virtual void exitLimitClauseItem(VtlParser::LimitClauseItemContext * /*ctx*/) override { } + + virtual void enterGroupByOrExcept(VtlParser::GroupByOrExceptContext * /*ctx*/) override { } + virtual void exitGroupByOrExcept(VtlParser::GroupByOrExceptContext * /*ctx*/) override { } + + virtual void enterGroupAll(VtlParser::GroupAllContext * /*ctx*/) override { } + virtual void exitGroupAll(VtlParser::GroupAllContext * /*ctx*/) override { } + + virtual void enterHavingClause(VtlParser::HavingClauseContext * /*ctx*/) override { } + virtual void exitHavingClause(VtlParser::HavingClauseContext * /*ctx*/) override { } + + virtual void enterParameterItem(VtlParser::ParameterItemContext * /*ctx*/) override { } + virtual void exitParameterItem(VtlParser::ParameterItemContext * /*ctx*/) override { } + + virtual void enterOutputParameterType(VtlParser::OutputParameterTypeContext * /*ctx*/) override { } + virtual void exitOutputParameterType(VtlParser::OutputParameterTypeContext * /*ctx*/) override { } + + virtual void enterOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext * /*ctx*/) override { } + virtual void exitOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext * /*ctx*/) override { } + + virtual void enterInputParameterType(VtlParser::InputParameterTypeContext * /*ctx*/) override { } + virtual void exitInputParameterType(VtlParser::InputParameterTypeContext * /*ctx*/) override { } + + virtual void enterRulesetType(VtlParser::RulesetTypeContext * /*ctx*/) override { } + virtual void exitRulesetType(VtlParser::RulesetTypeContext * /*ctx*/) override { } + + virtual void enterScalarType(VtlParser::ScalarTypeContext * /*ctx*/) override { } + virtual void exitScalarType(VtlParser::ScalarTypeContext * /*ctx*/) override { } + + virtual void enterComponentType(VtlParser::ComponentTypeContext * /*ctx*/) override { } + virtual void exitComponentType(VtlParser::ComponentTypeContext * /*ctx*/) override { } + + virtual void enterDatasetType(VtlParser::DatasetTypeContext * /*ctx*/) override { } + virtual void exitDatasetType(VtlParser::DatasetTypeContext * /*ctx*/) override { } + + virtual void enterEvalDatasetType(VtlParser::EvalDatasetTypeContext * /*ctx*/) override { } + virtual void exitEvalDatasetType(VtlParser::EvalDatasetTypeContext * /*ctx*/) override { } + + virtual void enterScalarSetType(VtlParser::ScalarSetTypeContext * /*ctx*/) override { } + virtual void exitScalarSetType(VtlParser::ScalarSetTypeContext * /*ctx*/) override { } + + virtual void enterDataPoint(VtlParser::DataPointContext * /*ctx*/) override { } + virtual void exitDataPoint(VtlParser::DataPointContext * /*ctx*/) override { } + + virtual void enterDataPointVd(VtlParser::DataPointVdContext * /*ctx*/) override { } + virtual void exitDataPointVd(VtlParser::DataPointVdContext * /*ctx*/) override { } + + virtual void enterDataPointVar(VtlParser::DataPointVarContext * /*ctx*/) override { } + virtual void exitDataPointVar(VtlParser::DataPointVarContext * /*ctx*/) override { } + + virtual void enterHrRulesetType(VtlParser::HrRulesetTypeContext * /*ctx*/) override { } + virtual void exitHrRulesetType(VtlParser::HrRulesetTypeContext * /*ctx*/) override { } + + virtual void enterHrRulesetVdType(VtlParser::HrRulesetVdTypeContext * /*ctx*/) override { } + virtual void exitHrRulesetVdType(VtlParser::HrRulesetVdTypeContext * /*ctx*/) override { } + + virtual void enterHrRulesetVarType(VtlParser::HrRulesetVarTypeContext * /*ctx*/) override { } + virtual void exitHrRulesetVarType(VtlParser::HrRulesetVarTypeContext * /*ctx*/) override { } + + virtual void enterValueDomainName(VtlParser::ValueDomainNameContext * /*ctx*/) override { } + virtual void exitValueDomainName(VtlParser::ValueDomainNameContext * /*ctx*/) override { } + + virtual void enterRulesetID(VtlParser::RulesetIDContext * /*ctx*/) override { } + virtual void exitRulesetID(VtlParser::RulesetIDContext * /*ctx*/) override { } + + virtual void enterRulesetSignature(VtlParser::RulesetSignatureContext * /*ctx*/) override { } + virtual void exitRulesetSignature(VtlParser::RulesetSignatureContext * /*ctx*/) override { } + + virtual void enterSignature(VtlParser::SignatureContext * /*ctx*/) override { } + virtual void exitSignature(VtlParser::SignatureContext * /*ctx*/) override { } + + virtual void enterRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext * /*ctx*/) override { } + virtual void exitRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext * /*ctx*/) override { } + + virtual void enterRuleItemDatapoint(VtlParser::RuleItemDatapointContext * /*ctx*/) override { } + virtual void exitRuleItemDatapoint(VtlParser::RuleItemDatapointContext * /*ctx*/) override { } + + virtual void enterRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext * /*ctx*/) override { } + virtual void exitRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext * /*ctx*/) override { } + + virtual void enterRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext * /*ctx*/) override { } + virtual void exitRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext * /*ctx*/) override { } + + virtual void enterHierRuleSignature(VtlParser::HierRuleSignatureContext * /*ctx*/) override { } + virtual void exitHierRuleSignature(VtlParser::HierRuleSignatureContext * /*ctx*/) override { } + + virtual void enterValueDomainSignature(VtlParser::ValueDomainSignatureContext * /*ctx*/) override { } + virtual void exitValueDomainSignature(VtlParser::ValueDomainSignatureContext * /*ctx*/) override { } + + virtual void enterCodeItemRelation(VtlParser::CodeItemRelationContext * /*ctx*/) override { } + virtual void exitCodeItemRelation(VtlParser::CodeItemRelationContext * /*ctx*/) override { } + + virtual void enterCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext * /*ctx*/) override { } + virtual void exitCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext * /*ctx*/) override { } + + virtual void enterValueDomainValue(VtlParser::ValueDomainValueContext * /*ctx*/) override { } + virtual void exitValueDomainValue(VtlParser::ValueDomainValueContext * /*ctx*/) override { } + + virtual void enterConditionConstraint(VtlParser::ConditionConstraintContext * /*ctx*/) override { } + virtual void exitConditionConstraint(VtlParser::ConditionConstraintContext * /*ctx*/) override { } + + virtual void enterRangeConstraint(VtlParser::RangeConstraintContext * /*ctx*/) override { } + virtual void exitRangeConstraint(VtlParser::RangeConstraintContext * /*ctx*/) override { } + + virtual void enterCompConstraint(VtlParser::CompConstraintContext * /*ctx*/) override { } + virtual void exitCompConstraint(VtlParser::CompConstraintContext * /*ctx*/) override { } + + virtual void enterMultModifier(VtlParser::MultModifierContext * /*ctx*/) override { } + virtual void exitMultModifier(VtlParser::MultModifierContext * /*ctx*/) override { } + + virtual void enterValidationOutput(VtlParser::ValidationOutputContext * /*ctx*/) override { } + virtual void exitValidationOutput(VtlParser::ValidationOutputContext * /*ctx*/) override { } + + virtual void enterValidationMode(VtlParser::ValidationModeContext * /*ctx*/) override { } + virtual void exitValidationMode(VtlParser::ValidationModeContext * /*ctx*/) override { } + + virtual void enterConditionClause(VtlParser::ConditionClauseContext * /*ctx*/) override { } + virtual void exitConditionClause(VtlParser::ConditionClauseContext * /*ctx*/) override { } + + virtual void enterInputMode(VtlParser::InputModeContext * /*ctx*/) override { } + virtual void exitInputMode(VtlParser::InputModeContext * /*ctx*/) override { } + + virtual void enterImbalanceExpr(VtlParser::ImbalanceExprContext * /*ctx*/) override { } + virtual void exitImbalanceExpr(VtlParser::ImbalanceExprContext * /*ctx*/) override { } + + virtual void enterInputModeHierarchy(VtlParser::InputModeHierarchyContext * /*ctx*/) override { } + virtual void exitInputModeHierarchy(VtlParser::InputModeHierarchyContext * /*ctx*/) override { } + + virtual void enterOutputModeHierarchy(VtlParser::OutputModeHierarchyContext * /*ctx*/) override { } + virtual void exitOutputModeHierarchy(VtlParser::OutputModeHierarchyContext * /*ctx*/) override { } + + virtual void enterAlias(VtlParser::AliasContext * /*ctx*/) override { } + virtual void exitAlias(VtlParser::AliasContext * /*ctx*/) override { } + + virtual void enterVarID(VtlParser::VarIDContext * /*ctx*/) override { } + virtual void exitVarID(VtlParser::VarIDContext * /*ctx*/) override { } + + virtual void enterSimpleComponentId(VtlParser::SimpleComponentIdContext * /*ctx*/) override { } + virtual void exitSimpleComponentId(VtlParser::SimpleComponentIdContext * /*ctx*/) override { } + + virtual void enterComponentID(VtlParser::ComponentIDContext * /*ctx*/) override { } + virtual void exitComponentID(VtlParser::ComponentIDContext * /*ctx*/) override { } + + virtual void enterLists(VtlParser::ListsContext * /*ctx*/) override { } + virtual void exitLists(VtlParser::ListsContext * /*ctx*/) override { } + + virtual void enterErCode(VtlParser::ErCodeContext * /*ctx*/) override { } + virtual void exitErCode(VtlParser::ErCodeContext * /*ctx*/) override { } + + virtual void enterErLevel(VtlParser::ErLevelContext * /*ctx*/) override { } + virtual void exitErLevel(VtlParser::ErLevelContext * /*ctx*/) override { } + + virtual void enterComparisonOperand(VtlParser::ComparisonOperandContext * /*ctx*/) override { } + virtual void exitComparisonOperand(VtlParser::ComparisonOperandContext * /*ctx*/) override { } + + virtual void enterOptionalExpr(VtlParser::OptionalExprContext * /*ctx*/) override { } + virtual void exitOptionalExpr(VtlParser::OptionalExprContext * /*ctx*/) override { } + + virtual void enterOptionalExprComponent(VtlParser::OptionalExprComponentContext * /*ctx*/) override { } + virtual void exitOptionalExprComponent(VtlParser::OptionalExprComponentContext * /*ctx*/) override { } + + virtual void enterComponentRole(VtlParser::ComponentRoleContext * /*ctx*/) override { } + virtual void exitComponentRole(VtlParser::ComponentRoleContext * /*ctx*/) override { } + + virtual void enterViralAttribute(VtlParser::ViralAttributeContext * /*ctx*/) override { } + virtual void exitViralAttribute(VtlParser::ViralAttributeContext * /*ctx*/) override { } + + virtual void enterValueDomainID(VtlParser::ValueDomainIDContext * /*ctx*/) override { } + virtual void exitValueDomainID(VtlParser::ValueDomainIDContext * /*ctx*/) override { } + + virtual void enterOperatorID(VtlParser::OperatorIDContext * /*ctx*/) override { } + virtual void exitOperatorID(VtlParser::OperatorIDContext * /*ctx*/) override { } + + virtual void enterRoutineName(VtlParser::RoutineNameContext * /*ctx*/) override { } + virtual void exitRoutineName(VtlParser::RoutineNameContext * /*ctx*/) override { } + + virtual void enterConstant(VtlParser::ConstantContext * /*ctx*/) override { } + virtual void exitConstant(VtlParser::ConstantContext * /*ctx*/) override { } + + virtual void enterBasicScalarType(VtlParser::BasicScalarTypeContext * /*ctx*/) override { } + virtual void exitBasicScalarType(VtlParser::BasicScalarTypeContext * /*ctx*/) override { } + + virtual void enterRetainType(VtlParser::RetainTypeContext * /*ctx*/) override { } + virtual void exitRetainType(VtlParser::RetainTypeContext * /*ctx*/) override { } + + + virtual void enterEveryRule(antlr4::ParserRuleContext * /*ctx*/) override { } + virtual void exitEveryRule(antlr4::ParserRuleContext * /*ctx*/) override { } + virtual void visitTerminal(antlr4::tree::TerminalNode * /*node*/) override { } + virtual void visitErrorNode(antlr4::tree::ErrorNode * /*node*/) override { } + +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.cpp new file mode 100644 index 000000000..9cfffa4c1 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.cpp @@ -0,0 +1,7 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlBaseVisitor.h" + + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.h new file mode 100644 index 000000000..a64188a39 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlBaseVisitor.h @@ -0,0 +1,912 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" +#include "VtlVisitor.h" + + +/** + * This class provides an empty implementation of VtlVisitor, which can be + * extended to create a visitor which only needs to handle a subset of the available methods. + */ +class VtlBaseVisitor : public VtlVisitor { +public: + + virtual std::any visitStart(VtlParser::StartContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTemporaryAssignment(VtlParser::TemporaryAssignmentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitPersistAssignment(VtlParser::PersistAssignmentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDefineExpression(VtlParser::DefineExpressionContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitVarIdExpr(VtlParser::VarIdExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMembershipExpr(VtlParser::MembershipExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInNotInExpr(VtlParser::InNotInExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBooleanExpr(VtlParser::BooleanExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComparisonExpr(VtlParser::ComparisonExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryExpr(VtlParser::UnaryExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFunctionsExpression(VtlParser::FunctionsExpressionContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitIfExpr(VtlParser::IfExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitClauseExpr(VtlParser::ClauseExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCaseExpr(VtlParser::CaseExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitArithmeticExpr(VtlParser::ArithmeticExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitParenthesisExpr(VtlParser::ParenthesisExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConstantExpr(VtlParser::ConstantExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitArithmeticExprComp(VtlParser::ArithmeticExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitIfExprComp(VtlParser::IfExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComparisonExprComp(VtlParser::ComparisonExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCompId(VtlParser::CompIdContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConstantExprComp(VtlParser::ConstantExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitParenthesisExprComp(VtlParser::ParenthesisExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInNotInExprComp(VtlParser::InNotInExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryExprComp(VtlParser::UnaryExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCaseExprComp(VtlParser::CaseExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBooleanExprComp(VtlParser::BooleanExprCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinFunctions(VtlParser::JoinFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitGenericFunctions(VtlParser::GenericFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitStringFunctions(VtlParser::StringFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitNumericFunctions(VtlParser::NumericFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComparisonFunctions(VtlParser::ComparisonFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeFunctions(VtlParser::TimeFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSetFunctions(VtlParser::SetFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHierarchyFunctions(VtlParser::HierarchyFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidationFunctions(VtlParser::ValidationFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConditionalFunctions(VtlParser::ConditionalFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggregateFunctions(VtlParser::AggregateFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAnalyticFunctions(VtlParser::AnalyticFunctionsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDatasetClause(VtlParser::DatasetClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRenameClause(VtlParser::RenameClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggrClause(VtlParser::AggrClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFilterClause(VtlParser::FilterClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCalcClause(VtlParser::CalcClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitKeepOrDropClause(VtlParser::KeepOrDropClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCustomPivotClause(VtlParser::CustomPivotClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSubspaceClause(VtlParser::SubspaceClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinExpr(VtlParser::JoinExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDefOperator(VtlParser::DefOperatorContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDefDatapointRuleset(VtlParser::DefDatapointRulesetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDefHierarchical(VtlParser::DefHierarchicalContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCallDataset(VtlParser::CallDatasetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitEvalAtom(VtlParser::EvalAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCastExprDataset(VtlParser::CastExprDatasetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCallComponent(VtlParser::CallComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCastExprComponent(VtlParser::CastExprComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitEvalAtomComponent(VtlParser::EvalAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitParameterComponent(VtlParser::ParameterComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitParameter(VtlParser::ParameterContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryStringFunction(VtlParser::UnaryStringFunctionContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSubstrAtom(VtlParser::SubstrAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitReplaceAtom(VtlParser::ReplaceAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInstrAtom(VtlParser::InstrAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSubstrAtomComponent(VtlParser::SubstrAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInstrAtomComponent(VtlParser::InstrAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryNumeric(VtlParser::UnaryNumericContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBinaryNumeric(VtlParser::BinaryNumericContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryNumericComponent(VtlParser::UnaryNumericComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBinaryNumericComponent(VtlParser::BinaryNumericComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBetweenAtom(VtlParser::BetweenAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCharsetMatchAtom(VtlParser::CharsetMatchAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitIsNullAtom(VtlParser::IsNullAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitExistInAtom(VtlParser::ExistInAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBetweenAtomComponent(VtlParser::BetweenAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitIsNullAtomComponent(VtlParser::IsNullAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitPeriodAtom(VtlParser::PeriodAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFillTimeAtom(VtlParser::FillTimeAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFlowAtom(VtlParser::FlowAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeShiftAtom(VtlParser::TimeShiftAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeAggAtom(VtlParser::TimeAggAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCurrentDateAtom(VtlParser::CurrentDateAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDateDiffAtom(VtlParser::DateDiffAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDateAddAtom(VtlParser::DateAddAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitYearAtom(VtlParser::YearAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMonthAtom(VtlParser::MonthAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayOfMonthAtom(VtlParser::DayOfMonthAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayOfYearAtom(VtlParser::DayOfYearAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayToYearAtom(VtlParser::DayToYearAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayToMonthAtom(VtlParser::DayToMonthAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitYearTodayAtom(VtlParser::YearTodayAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMonthTodayAtom(VtlParser::MonthTodayAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitPeriodAtomComponent(VtlParser::PeriodAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitFlowAtomComponent(VtlParser::FlowAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDateAddAtomComponent(VtlParser::DateAddAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitYearAtomComponent(VtlParser::YearAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMonthAtomComponent(VtlParser::MonthAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitUnionAtom(VtlParser::UnionAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitIntersectAtom(VtlParser::IntersectAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHierarchyOperators(VtlParser::HierarchyOperatorsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidateDPruleset(VtlParser::ValidateDPrulesetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidateHRruleset(VtlParser::ValidateHRrulesetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidationSimple(VtlParser::ValidationSimpleContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitNvlAtom(VtlParser::NvlAtomContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitNvlAtomComponent(VtlParser::NvlAtomComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggrComp(VtlParser::AggrCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCountAggrComp(VtlParser::CountAggrCompContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggrDataset(VtlParser::AggrDatasetContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAnSimpleFunction(VtlParser::AnSimpleFunctionContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitLagOrLeadAn(VtlParser::LagOrLeadAnContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRatioToReportAn(VtlParser::RatioToReportAnContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRankAnComponent(VtlParser::RankAnComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRenameClauseItem(VtlParser::RenameClauseItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggregateClause(VtlParser::AggregateClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAggrFunctionClause(VtlParser::AggrFunctionClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCalcClauseItem(VtlParser::CalcClauseItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSubspaceClauseItem(VtlParser::SubspaceClauseItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSimpleScalar(VtlParser::SimpleScalarContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitScalarWithCast(VtlParser::ScalarWithCastContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinClause(VtlParser::JoinClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinClauseItem(VtlParser::JoinClauseItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinBody(VtlParser::JoinBodyContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitJoinApplyClause(VtlParser::JoinApplyClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitPartitionByClause(VtlParser::PartitionByClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOrderByClause(VtlParser::OrderByClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOrderByItem(VtlParser::OrderByItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitWindowingClause(VtlParser::WindowingClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSignedInteger(VtlParser::SignedIntegerContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSignedNumber(VtlParser::SignedNumberContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitLimitClauseItem(VtlParser::LimitClauseItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitGroupByOrExcept(VtlParser::GroupByOrExceptContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitGroupAll(VtlParser::GroupAllContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHavingClause(VtlParser::HavingClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitParameterItem(VtlParser::ParameterItemContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOutputParameterType(VtlParser::OutputParameterTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInputParameterType(VtlParser::InputParameterTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRulesetType(VtlParser::RulesetTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitScalarType(VtlParser::ScalarTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComponentType(VtlParser::ComponentTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDatasetType(VtlParser::DatasetTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitEvalDatasetType(VtlParser::EvalDatasetTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitScalarSetType(VtlParser::ScalarSetTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDataPoint(VtlParser::DataPointContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDataPointVd(VtlParser::DataPointVdContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitDataPointVar(VtlParser::DataPointVarContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHrRulesetType(VtlParser::HrRulesetTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHrRulesetVdType(VtlParser::HrRulesetVdTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHrRulesetVarType(VtlParser::HrRulesetVarTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValueDomainName(VtlParser::ValueDomainNameContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRulesetID(VtlParser::RulesetIDContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRulesetSignature(VtlParser::RulesetSignatureContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSignature(VtlParser::SignatureContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRuleItemDatapoint(VtlParser::RuleItemDatapointContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHierRuleSignature(VtlParser::HierRuleSignatureContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValueDomainSignature(VtlParser::ValueDomainSignatureContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCodeItemRelation(VtlParser::CodeItemRelationContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValueDomainValue(VtlParser::ValueDomainValueContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConditionConstraint(VtlParser::ConditionConstraintContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRangeConstraint(VtlParser::RangeConstraintContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitCompConstraint(VtlParser::CompConstraintContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitMultModifier(VtlParser::MultModifierContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidationOutput(VtlParser::ValidationOutputContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValidationMode(VtlParser::ValidationModeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConditionClause(VtlParser::ConditionClauseContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInputMode(VtlParser::InputModeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitImbalanceExpr(VtlParser::ImbalanceExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitInputModeHierarchy(VtlParser::InputModeHierarchyContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOutputModeHierarchy(VtlParser::OutputModeHierarchyContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitAlias(VtlParser::AliasContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitVarID(VtlParser::VarIDContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitSimpleComponentId(VtlParser::SimpleComponentIdContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComponentID(VtlParser::ComponentIDContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitLists(VtlParser::ListsContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitErCode(VtlParser::ErCodeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitErLevel(VtlParser::ErLevelContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComparisonOperand(VtlParser::ComparisonOperandContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOptionalExpr(VtlParser::OptionalExprContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOptionalExprComponent(VtlParser::OptionalExprComponentContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitComponentRole(VtlParser::ComponentRoleContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitViralAttribute(VtlParser::ViralAttributeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitValueDomainID(VtlParser::ValueDomainIDContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitOperatorID(VtlParser::OperatorIDContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRoutineName(VtlParser::RoutineNameContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitConstant(VtlParser::ConstantContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitBasicScalarType(VtlParser::BasicScalarTypeContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitRetainType(VtlParser::RetainTypeContext *ctx) override { + return visitChildren(ctx); + } + + +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.cpp new file mode 100644 index 000000000..eb020f1d2 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.cpp @@ -0,0 +1,1090 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlLexer.h" + + +using namespace antlr4; + + + +using namespace antlr4; + +namespace { + +struct VtlLexerStaticData final { + VtlLexerStaticData(std::vector ruleNames, + std::vector channelNames, + std::vector modeNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)), + modeNames(std::move(modeNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + VtlLexerStaticData(const VtlLexerStaticData&) = delete; + VtlLexerStaticData(VtlLexerStaticData&&) = delete; + VtlLexerStaticData& operator=(const VtlLexerStaticData&) = delete; + VtlLexerStaticData& operator=(VtlLexerStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector channelNames; + const std::vector modeNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag vtllexerLexerOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +VtlLexerStaticData *vtllexerLexerStaticData = nullptr; + +void vtllexerLexerInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (vtllexerLexerStaticData != nullptr) { + return; + } +#else + assert(vtllexerLexerStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "LPAREN", "RPAREN", "QLPAREN", "QRPAREN", "GLPAREN", "GRPAREN", "EQ", + "LT", "MT", "ME", "NEQ", "LE", "PLUS", "MINUS", "MUL", "DIV", "COMMA", + "POINTER", "COLON", "ASSIGN", "MEMBERSHIP", "EVAL", "IF", "CASE", + "THEN", "ELSE", "USING", "WITH", "CURRENT_DATE", "DATEDIFF", "DATEADD", + "YEAR_OP", "MONTH_OP", "DAYOFMONTH", "DAYOFYEAR", "DAYTOYEAR", "DAYTOMONTH", + "YEARTODAY", "MONTHTODAY", "ON", "DROP", "KEEP", "CALC", "ATTRCALC", + "RENAME", "AS", "AND", "OR", "XOR", "NOT", "BETWEEN", "IN", "NOT_IN", + "NULL_CONSTANT", "ISNULL", "EX", "UNION", "DIFF", "SYMDIFF", "INTERSECT", + "RANDOM", "KEYS", "INTYEAR", "INTMONTH", "INTDAY", "CHECK", "EXISTS_IN", + "TO", "RETURN", "IMBALANCE", "ERRORCODE", "ALL", "AGGREGATE", "ERRORLEVEL", + "ORDER", "BY", "RANK", "ASC", "DESC", "MIN", "MAX", "FIRST", "LAST", + "INDEXOF", "ABS", "KEY", "LN", "LOG", "TRUNC", "ROUND", "POWER", "MOD", + "LEN", "CONCAT", "TRIM", "UCASE", "LCASE", "SUBSTR", "SUM", "AVG", + "MEDIAN", "COUNT", "DIMENSION", "MEASURE", "ATTRIBUTE", "FILTER", + "MERGE", "EXP", "ROLE", "VIRAL", "CHARSET_MATCH", "TYPE", "NVL", "HIERARCHY", + "OPTIONAL", "INVALID", "VALUE_DOMAIN", "VARIABLE", "DATA", "STRUCTURE", + "DATASET", "OPERATOR", "DEFINE", "PUT_SYMBOL", "DATAPOINT", "HIERARCHICAL", + "RULESET", "RULE", "END", "ALTER_DATASET", "LTRIM", "RTRIM", "INSTR", + "REPLACE", "CEIL", "FLOOR", "SQRT", "ANY", "SETDIFF", "STDDEV_POP", + "STDDEV_SAMP", "VAR_POP", "VAR_SAMP", "GROUP", "EXCEPT", "HAVING", + "FIRST_VALUE", "LAST_VALUE", "LAG", "LEAD", "RATIO_TO_REPORT", "OVER", + "PRECEDING", "FOLLOWING", "UNBOUNDED", "PARTITION", "ROWS", "RANGE", + "CURRENT", "VALID", "FILL_TIME_SERIES", "FLOW_TO_STOCK", "STOCK_TO_FLOW", + "TIMESHIFT", "MEASURES", "NO_MEASURES", "CONDITION", "BOOLEAN", "DATE", + "TIME_PERIOD", "NUMBER", "STRING", "TIME", "INTEGER", "FLOAT", "LIST", + "RECORD", "RESTRICT", "YYYY", "MM", "DD", "MAX_LENGTH", "REGEXP", + "IS", "WHEN", "FROM", "AGGREGATES", "POINTS", "POINT", "TOTAL", "PARTIAL", + "ALWAYS", "INNER_JOIN", "LEFT_JOIN", "CROSS_JOIN", "FULL_JOIN", "MAPS_FROM", + "MAPS_TO", "MAP_TO", "MAP_FROM", "RETURNS", "PIVOT", "CUSTOMPIVOT", + "UNPIVOT", "SUBSPACE", "APPLY", "CONDITIONED", "PERIOD_INDICATOR", + "SINGLE", "DURATION", "TIME_AGG", "UNIT", "VALUE", "VALUEDOMAINS", + "VARIABLES", "INPUT", "OUTPUT", "CAST", "RULE_PRIORITY", "DATASET_PRIORITY", + "DEFAULT", "CHECK_DATAPOINT", "CHECK_HIERARCHY", "COMPUTED", "NON_NULL", + "NON_ZERO", "PARTIAL_NULL", "PARTIAL_ZERO", "ALWAYS_NULL", "ALWAYS_ZERO", + "COMPONENTS", "ALL_MEASURES", "SCALAR", "COMPONENT", "DATAPOINT_ON_VD", + "DATAPOINT_ON_VAR", "HIERARCHICAL_ON_VD", "HIERARCHICAL_ON_VAR", "SET", + "LANGUAGE", "LETTER", "DIGITS0_9", "INTEGER_CONSTANT", "NUMBER_CONSTANT", + "BOOLEAN_CONSTANT", "STRING_CONSTANT", "IDENTIFIER", "WS", "EOL", + "ML_COMMENT", "SL_COMMENT" + }, + std::vector{ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }, + std::vector{ + "DEFAULT_MODE" + }, + std::vector{ + "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'='", "'<'", "'>'", + "'>='", "'<>'", "'<='", "'+'", "'-'", "'*'", "'/'", "','", "'->'", + "':'", "':='", "'#'", "'eval'", "'if'", "'case'", "'then'", "'else'", + "'using'", "'with'", "'current_date'", "'datediff'", "'dateadd'", + "'getyear'", "'getmonth'", "'dayofmonth'", "'dayofyear'", "'daytoyear'", + "'daytomonth'", "'yeartoday'", "'monthtoday'", "'on'", "'drop'", "'keep'", + "'calc'", "'attrcalc'", "'rename'", "'as'", "'and'", "'or'", "'xor'", + "'not'", "'between'", "'in'", "'not_in'", "'null'", "'isnull'", "'ex'", + "'union'", "'diff'", "'symdiff'", "'intersect'", "'random'", "'keys'", + "'intyear'", "'intmonth'", "'intday'", "'check'", "'exists_in'", "'to'", + "'return'", "'imbalance'", "'errorcode'", "'all'", "'aggr'", "'errorlevel'", + "'order'", "'by'", "'rank'", "'asc'", "'desc'", "'min'", "'max'", + "'first'", "'last'", "'indexof'", "'abs'", "'key'", "'ln'", "'log'", + "'trunc'", "'round'", "'power'", "'mod'", "'length'", "'||'", "'trim'", + "'upper'", "'lower'", "'substr'", "'sum'", "'avg'", "'median'", "'count'", + "'identifier'", "'measure'", "'attribute'", "'filter'", "'merge'", + "'exp'", "'componentRole'", "'viral'", "'match_characters'", "'type'", + "'nvl'", "'hierarchy'", "'_'", "'invalid'", "'valuedomain'", "'variable'", + "'data'", "'structure'", "'dataset'", "'operator'", "'define'", "'<-'", + "'datapoint'", "'hierarchical'", "'ruleset'", "'rule'", "'end'", "'alterDataset'", + "'ltrim'", "'rtrim'", "'instr'", "'replace'", "'ceil'", "'floor'", + "'sqrt'", "'any'", "'setdiff'", "'stddev_pop'", "'stddev_samp'", "'var_pop'", + "'var_samp'", "'group'", "'except'", "'having'", "'first_value'", + "'last_value'", "'lag'", "'lead'", "'ratio_to_report'", "'over'", + "'preceding'", "'following'", "'unbounded'", "'partition'", "'rows'", + "'range'", "'current'", "'valid'", "'fill_time_series'", "'flow_to_stock'", + "'stock_to_flow'", "'timeshift'", "'measures'", "'no_measures'", "'condition'", + "'boolean'", "'date'", "'time_period'", "'number'", "'string'", "'time'", + "'integer'", "'float'", "'list'", "'record'", "'restrict'", "'yyyy'", + "'mm'", "'dd'", "'maxLength'", "'regexp'", "'is'", "'when'", "'from'", + "'aggregates'", "'points'", "'point'", "'total'", "'partial'", "'always'", + "'inner_join'", "'left_join'", "'cross_join'", "'full_join'", "'maps_from'", + "'maps_to'", "'map_to'", "'map_from'", "'returns'", "'pivot'", "'customPivot'", + "'unpivot'", "'sub'", "'apply'", "'conditioned'", "'period_indicator'", + "'single'", "'duration'", "'time_agg'", "'unit'", "'Value'", "'valuedomains'", + "'variables'", "'input'", "'output'", "'cast'", "'rule_priority'", + "'dataset_priority'", "'default'", "'check_datapoint'", "'check_hierarchy'", + "'computed'", "'non_null'", "'non_zero'", "'partial_null'", "'partial_zero'", + "'always_null'", "'always_zero'", "'components'", "'all_measures'", + "'scalar'", "'component'", "'datapoint_on_valuedomains'", "'datapoint_on_variables'", + "'hierarchical_on_valuedomains'", "'hierarchical_on_variables'", "'set'", + "'language'", "", "", "", "", "", "", "';'" + }, + std::vector{ + "", "LPAREN", "RPAREN", "QLPAREN", "QRPAREN", "GLPAREN", "GRPAREN", + "EQ", "LT", "MT", "ME", "NEQ", "LE", "PLUS", "MINUS", "MUL", "DIV", + "COMMA", "POINTER", "COLON", "ASSIGN", "MEMBERSHIP", "EVAL", "IF", + "CASE", "THEN", "ELSE", "USING", "WITH", "CURRENT_DATE", "DATEDIFF", + "DATEADD", "YEAR_OP", "MONTH_OP", "DAYOFMONTH", "DAYOFYEAR", "DAYTOYEAR", + "DAYTOMONTH", "YEARTODAY", "MONTHTODAY", "ON", "DROP", "KEEP", "CALC", + "ATTRCALC", "RENAME", "AS", "AND", "OR", "XOR", "NOT", "BETWEEN", + "IN", "NOT_IN", "NULL_CONSTANT", "ISNULL", "EX", "UNION", "DIFF", + "SYMDIFF", "INTERSECT", "RANDOM", "KEYS", "INTYEAR", "INTMONTH", "INTDAY", + "CHECK", "EXISTS_IN", "TO", "RETURN", "IMBALANCE", "ERRORCODE", "ALL", + "AGGREGATE", "ERRORLEVEL", "ORDER", "BY", "RANK", "ASC", "DESC", "MIN", + "MAX", "FIRST", "LAST", "INDEXOF", "ABS", "KEY", "LN", "LOG", "TRUNC", + "ROUND", "POWER", "MOD", "LEN", "CONCAT", "TRIM", "UCASE", "LCASE", + "SUBSTR", "SUM", "AVG", "MEDIAN", "COUNT", "DIMENSION", "MEASURE", + "ATTRIBUTE", "FILTER", "MERGE", "EXP", "ROLE", "VIRAL", "CHARSET_MATCH", + "TYPE", "NVL", "HIERARCHY", "OPTIONAL", "INVALID", "VALUE_DOMAIN", + "VARIABLE", "DATA", "STRUCTURE", "DATASET", "OPERATOR", "DEFINE", + "PUT_SYMBOL", "DATAPOINT", "HIERARCHICAL", "RULESET", "RULE", "END", + "ALTER_DATASET", "LTRIM", "RTRIM", "INSTR", "REPLACE", "CEIL", "FLOOR", + "SQRT", "ANY", "SETDIFF", "STDDEV_POP", "STDDEV_SAMP", "VAR_POP", + "VAR_SAMP", "GROUP", "EXCEPT", "HAVING", "FIRST_VALUE", "LAST_VALUE", + "LAG", "LEAD", "RATIO_TO_REPORT", "OVER", "PRECEDING", "FOLLOWING", + "UNBOUNDED", "PARTITION", "ROWS", "RANGE", "CURRENT", "VALID", "FILL_TIME_SERIES", + "FLOW_TO_STOCK", "STOCK_TO_FLOW", "TIMESHIFT", "MEASURES", "NO_MEASURES", + "CONDITION", "BOOLEAN", "DATE", "TIME_PERIOD", "NUMBER", "STRING", + "TIME", "INTEGER", "FLOAT", "LIST", "RECORD", "RESTRICT", "YYYY", + "MM", "DD", "MAX_LENGTH", "REGEXP", "IS", "WHEN", "FROM", "AGGREGATES", + "POINTS", "POINT", "TOTAL", "PARTIAL", "ALWAYS", "INNER_JOIN", "LEFT_JOIN", + "CROSS_JOIN", "FULL_JOIN", "MAPS_FROM", "MAPS_TO", "MAP_TO", "MAP_FROM", + "RETURNS", "PIVOT", "CUSTOMPIVOT", "UNPIVOT", "SUBSPACE", "APPLY", + "CONDITIONED", "PERIOD_INDICATOR", "SINGLE", "DURATION", "TIME_AGG", + "UNIT", "VALUE", "VALUEDOMAINS", "VARIABLES", "INPUT", "OUTPUT", "CAST", + "RULE_PRIORITY", "DATASET_PRIORITY", "DEFAULT", "CHECK_DATAPOINT", + "CHECK_HIERARCHY", "COMPUTED", "NON_NULL", "NON_ZERO", "PARTIAL_NULL", + "PARTIAL_ZERO", "ALWAYS_NULL", "ALWAYS_ZERO", "COMPONENTS", "ALL_MEASURES", + "SCALAR", "COMPONENT", "DATAPOINT_ON_VD", "DATAPOINT_ON_VAR", "HIERARCHICAL_ON_VD", + "HIERARCHICAL_ON_VAR", "SET", "LANGUAGE", "INTEGER_CONSTANT", "NUMBER_CONSTANT", + "BOOLEAN_CONSTANT", "STRING_CONSTANT", "IDENTIFIER", "WS", "EOL", + "ML_COMMENT", "SL_COMMENT" + } + ); + static const int32_t serializedATNSegment[] = { + 4,0,249,2385,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,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,2,245,7,245,2,246,7,246,2,247,7,247,2,248, + 7,248,2,249,7,249,2,250,7,250,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4, + 1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11, + 1,11,1,12,1,12,1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,16,1,17,1,17,1,17, + 1,18,1,18,1,19,1,19,1,19,1,20,1,20,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,24,1,24,1,24,1,24,1,24,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,28, + 1,28,1,28,1,28,1,28,1,28,1,28,1,28,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,30,1,30,1,30, + 1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,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,33,1,33, + 1,33,1,34,1,34,1,34,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,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36, + 1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39, + 1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42, + 1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,48, + 1,48,1,48,1,48,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,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,54,1,54,1,54,1,54,1,54,1,54,1,54,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,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,59,1,59,1,59,1,59,1,59,1,60, + 1,60,1,60,1,60,1,60,1,60,1,60,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,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,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,66,1,66,1,66,1,66,1,67,1,67,1,67,1,68,1,68, + 1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69, + 1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71, + 1,71,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73, + 1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76, + 1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,79,1,79, + 1,79,1,79,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82, + 1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84, + 1,84,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,88,1,88, + 1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90, + 1,90,1,90,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93, + 1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,96, + 1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98, + 1,98,1,98,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100, + 1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103, + 1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106, + 1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,112,1,112, + 1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113, + 1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117, + 1,117,1,117,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,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120, + 1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121, + 1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123, + 1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125, + 1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127, + 1,127,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130, + 1,131,1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132, + 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134, + 1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136, + 1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138, + 1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140, + 1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,141, + 1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142, + 1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144, + 1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145, + 1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146, + 1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,148, + 1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150, + 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, + 1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,152,1,152, + 1,152,1,152,1,152,1,153,1,153,1,153,1,153,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,154,1,154,1,155, + 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156, + 1,156,1,156,1,157,1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160, + 1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160, + 1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161, + 1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,162,1,162,1,162, + 1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,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,164, + 1,164,1,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165, + 1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166, + 1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168, + 1,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169, + 1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171, + 1,171,1,171,1,171,1,172,1,172,1,172,1,172,1,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,175,1,175, + 1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177, + 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178, + 1,179,1,179,1,179,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,181,1,181, + 1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,183, + 1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,1,185, + 1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,187, + 1,187,1,187,1,187,1,187,1,187,1,187,1,188,1,188,1,188,1,188,1,188,1,188, + 1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,190, + 1,190,1,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,192,1,192,1,192, + 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,194, + 1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195, + 1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196, + 1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,198,1,198,1,198, + 1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199, + 1,199,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201, + 1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, + 1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,204, + 1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206, + 1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207, + 1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207, + 1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209, + 1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,210, + 1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212, + 1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213,1,213, + 1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214, + 1,214,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,1,216, + 1,216,1,216,1,217,1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218,1,218, + 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219, + 1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219, + 1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,221,1,221, + 1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221, + 1,221,1,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,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223,1,223, + 1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224, + 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226, + 1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227, + 1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,227,1,228, + 1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229, + 1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230, + 1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,231,1,231, + 1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,232, + 1,232,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1,233, + 1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234, + 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234, + 1,234,1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236, + 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236, + 1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1,237,1,237, + 1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237, + 1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237, + 1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239, + 1,239,1,240,1,240,1,241,1,241,1,242,4,242,2301,8,242,11,242,12,242,2302, + 1,243,1,243,1,243,1,243,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244, + 1,244,3,244,2318,8,244,1,245,1,245,5,245,2322,8,245,10,245,12,245,2325, + 9,245,1,245,1,245,1,246,1,246,5,246,2331,8,246,10,246,12,246,2334,9,246, + 1,246,1,246,4,246,2338,8,246,11,246,12,246,2339,1,246,1,246,5,246,2344, + 8,246,10,246,12,246,2347,9,246,1,246,3,246,2350,8,246,1,247,4,247,2353, + 8,247,11,247,12,247,2354,1,247,1,247,1,248,1,248,1,249,1,249,1,249,1, + 249,5,249,2365,8,249,10,249,12,249,2368,9,249,1,249,1,249,1,249,1,249, + 1,249,1,250,1,250,1,250,1,250,5,250,2379,8,250,10,250,12,250,2382,9,250, + 1,250,1,250,2,2345,2366,0,251,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,70,141,71,143,72,145,73,147,74,149, + 75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169, + 85,171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189, + 95,191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207,104, + 209,105,211,106,213,107,215,108,217,109,219,110,221,111,223,112,225,113, + 227,114,229,115,231,116,233,117,235,118,237,119,239,120,241,121,243,122, + 245,123,247,124,249,125,251,126,253,127,255,128,257,129,259,130,261,131, + 263,132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279,140, + 281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148,297,149, + 299,150,301,151,303,152,305,153,307,154,309,155,311,156,313,157,315,158, + 317,159,319,160,321,161,323,162,325,163,327,164,329,165,331,166,333,167, + 335,168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351,176, + 353,177,355,178,357,179,359,180,361,181,363,182,365,183,367,184,369,185, + 371,186,373,187,375,188,377,189,379,190,381,191,383,192,385,193,387,194, + 389,195,391,196,393,197,395,198,397,199,399,200,401,201,403,202,405,203, + 407,204,409,205,411,206,413,207,415,208,417,209,419,210,421,211,423,212, + 425,213,427,214,429,215,431,216,433,217,435,218,437,219,439,220,441,221, + 443,222,445,223,447,224,449,225,451,226,453,227,455,228,457,229,459,230, + 461,231,463,232,465,233,467,234,469,235,471,236,473,237,475,238,477,239, + 479,240,481,0,483,0,485,241,487,242,489,243,491,244,493,245,495,246,497, + 247,499,248,501,249,1,0,5,2,0,65,90,97,122,1,0,34,34,5,0,46,46,48,57, + 65,90,95,95,97,122,3,0,9,10,12,13,32,32,2,0,10,10,13,13,2393,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,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0, + 0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0, + 0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0, + 0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,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,335,1,0,0,0,0,337,1,0,0,0, + 0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0, + 0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0, + 0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0, + 0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0, + 0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0, + 0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0, + 0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0, + 0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0, + 0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0, + 0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0, + 0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0, + 0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0, + 0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0, + 0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0, + 0,479,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0, + 0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0, + 1,503,1,0,0,0,3,505,1,0,0,0,5,507,1,0,0,0,7,509,1,0,0,0,9,511,1,0,0,0, + 11,513,1,0,0,0,13,515,1,0,0,0,15,517,1,0,0,0,17,519,1,0,0,0,19,521,1, + 0,0,0,21,524,1,0,0,0,23,527,1,0,0,0,25,530,1,0,0,0,27,532,1,0,0,0,29, + 534,1,0,0,0,31,536,1,0,0,0,33,538,1,0,0,0,35,540,1,0,0,0,37,543,1,0,0, + 0,39,545,1,0,0,0,41,548,1,0,0,0,43,550,1,0,0,0,45,555,1,0,0,0,47,558, + 1,0,0,0,49,563,1,0,0,0,51,568,1,0,0,0,53,573,1,0,0,0,55,579,1,0,0,0,57, + 584,1,0,0,0,59,597,1,0,0,0,61,606,1,0,0,0,63,614,1,0,0,0,65,622,1,0,0, + 0,67,631,1,0,0,0,69,642,1,0,0,0,71,652,1,0,0,0,73,662,1,0,0,0,75,673, + 1,0,0,0,77,683,1,0,0,0,79,694,1,0,0,0,81,697,1,0,0,0,83,702,1,0,0,0,85, + 707,1,0,0,0,87,712,1,0,0,0,89,721,1,0,0,0,91,728,1,0,0,0,93,731,1,0,0, + 0,95,735,1,0,0,0,97,738,1,0,0,0,99,742,1,0,0,0,101,746,1,0,0,0,103,754, + 1,0,0,0,105,757,1,0,0,0,107,764,1,0,0,0,109,769,1,0,0,0,111,776,1,0,0, + 0,113,779,1,0,0,0,115,785,1,0,0,0,117,790,1,0,0,0,119,798,1,0,0,0,121, + 808,1,0,0,0,123,815,1,0,0,0,125,820,1,0,0,0,127,828,1,0,0,0,129,837,1, + 0,0,0,131,844,1,0,0,0,133,850,1,0,0,0,135,860,1,0,0,0,137,863,1,0,0,0, + 139,870,1,0,0,0,141,880,1,0,0,0,143,890,1,0,0,0,145,894,1,0,0,0,147,899, + 1,0,0,0,149,910,1,0,0,0,151,916,1,0,0,0,153,919,1,0,0,0,155,924,1,0,0, + 0,157,928,1,0,0,0,159,933,1,0,0,0,161,937,1,0,0,0,163,941,1,0,0,0,165, + 947,1,0,0,0,167,952,1,0,0,0,169,960,1,0,0,0,171,964,1,0,0,0,173,968,1, + 0,0,0,175,971,1,0,0,0,177,975,1,0,0,0,179,981,1,0,0,0,181,987,1,0,0,0, + 183,993,1,0,0,0,185,997,1,0,0,0,187,1004,1,0,0,0,189,1007,1,0,0,0,191, + 1012,1,0,0,0,193,1018,1,0,0,0,195,1024,1,0,0,0,197,1031,1,0,0,0,199,1035, + 1,0,0,0,201,1039,1,0,0,0,203,1046,1,0,0,0,205,1052,1,0,0,0,207,1063,1, + 0,0,0,209,1071,1,0,0,0,211,1081,1,0,0,0,213,1088,1,0,0,0,215,1094,1,0, + 0,0,217,1098,1,0,0,0,219,1112,1,0,0,0,221,1118,1,0,0,0,223,1135,1,0,0, + 0,225,1140,1,0,0,0,227,1144,1,0,0,0,229,1154,1,0,0,0,231,1156,1,0,0,0, + 233,1164,1,0,0,0,235,1176,1,0,0,0,237,1185,1,0,0,0,239,1190,1,0,0,0,241, + 1200,1,0,0,0,243,1208,1,0,0,0,245,1217,1,0,0,0,247,1224,1,0,0,0,249,1227, + 1,0,0,0,251,1237,1,0,0,0,253,1250,1,0,0,0,255,1258,1,0,0,0,257,1263,1, + 0,0,0,259,1267,1,0,0,0,261,1280,1,0,0,0,263,1286,1,0,0,0,265,1292,1,0, + 0,0,267,1298,1,0,0,0,269,1306,1,0,0,0,271,1311,1,0,0,0,273,1317,1,0,0, + 0,275,1322,1,0,0,0,277,1326,1,0,0,0,279,1334,1,0,0,0,281,1345,1,0,0,0, + 283,1357,1,0,0,0,285,1365,1,0,0,0,287,1374,1,0,0,0,289,1380,1,0,0,0,291, + 1387,1,0,0,0,293,1394,1,0,0,0,295,1406,1,0,0,0,297,1417,1,0,0,0,299,1421, + 1,0,0,0,301,1426,1,0,0,0,303,1442,1,0,0,0,305,1447,1,0,0,0,307,1457,1, + 0,0,0,309,1467,1,0,0,0,311,1477,1,0,0,0,313,1487,1,0,0,0,315,1492,1,0, + 0,0,317,1498,1,0,0,0,319,1506,1,0,0,0,321,1512,1,0,0,0,323,1529,1,0,0, + 0,325,1543,1,0,0,0,327,1557,1,0,0,0,329,1567,1,0,0,0,331,1576,1,0,0,0, + 333,1588,1,0,0,0,335,1598,1,0,0,0,337,1606,1,0,0,0,339,1611,1,0,0,0,341, + 1623,1,0,0,0,343,1630,1,0,0,0,345,1637,1,0,0,0,347,1642,1,0,0,0,349,1650, + 1,0,0,0,351,1656,1,0,0,0,353,1661,1,0,0,0,355,1668,1,0,0,0,357,1677,1, + 0,0,0,359,1682,1,0,0,0,361,1685,1,0,0,0,363,1688,1,0,0,0,365,1698,1,0, + 0,0,367,1705,1,0,0,0,369,1708,1,0,0,0,371,1713,1,0,0,0,373,1718,1,0,0, + 0,375,1729,1,0,0,0,377,1736,1,0,0,0,379,1742,1,0,0,0,381,1748,1,0,0,0, + 383,1756,1,0,0,0,385,1763,1,0,0,0,387,1774,1,0,0,0,389,1784,1,0,0,0,391, + 1795,1,0,0,0,393,1805,1,0,0,0,395,1815,1,0,0,0,397,1823,1,0,0,0,399,1830, + 1,0,0,0,401,1839,1,0,0,0,403,1847,1,0,0,0,405,1853,1,0,0,0,407,1865,1, + 0,0,0,409,1873,1,0,0,0,411,1877,1,0,0,0,413,1883,1,0,0,0,415,1895,1,0, + 0,0,417,1912,1,0,0,0,419,1919,1,0,0,0,421,1928,1,0,0,0,423,1937,1,0,0, + 0,425,1942,1,0,0,0,427,1948,1,0,0,0,429,1961,1,0,0,0,431,1971,1,0,0,0, + 433,1977,1,0,0,0,435,1984,1,0,0,0,437,1989,1,0,0,0,439,2003,1,0,0,0,441, + 2020,1,0,0,0,443,2028,1,0,0,0,445,2044,1,0,0,0,447,2060,1,0,0,0,449,2069, + 1,0,0,0,451,2078,1,0,0,0,453,2087,1,0,0,0,455,2100,1,0,0,0,457,2113,1, + 0,0,0,459,2125,1,0,0,0,461,2137,1,0,0,0,463,2148,1,0,0,0,465,2161,1,0, + 0,0,467,2168,1,0,0,0,469,2178,1,0,0,0,471,2204,1,0,0,0,473,2227,1,0,0, + 0,475,2256,1,0,0,0,477,2282,1,0,0,0,479,2286,1,0,0,0,481,2295,1,0,0,0, + 483,2297,1,0,0,0,485,2300,1,0,0,0,487,2304,1,0,0,0,489,2317,1,0,0,0,491, + 2319,1,0,0,0,493,2349,1,0,0,0,495,2352,1,0,0,0,497,2358,1,0,0,0,499,2360, + 1,0,0,0,501,2374,1,0,0,0,503,504,5,40,0,0,504,2,1,0,0,0,505,506,5,41, + 0,0,506,4,1,0,0,0,507,508,5,91,0,0,508,6,1,0,0,0,509,510,5,93,0,0,510, + 8,1,0,0,0,511,512,5,123,0,0,512,10,1,0,0,0,513,514,5,125,0,0,514,12,1, + 0,0,0,515,516,5,61,0,0,516,14,1,0,0,0,517,518,5,60,0,0,518,16,1,0,0,0, + 519,520,5,62,0,0,520,18,1,0,0,0,521,522,5,62,0,0,522,523,5,61,0,0,523, + 20,1,0,0,0,524,525,5,60,0,0,525,526,5,62,0,0,526,22,1,0,0,0,527,528,5, + 60,0,0,528,529,5,61,0,0,529,24,1,0,0,0,530,531,5,43,0,0,531,26,1,0,0, + 0,532,533,5,45,0,0,533,28,1,0,0,0,534,535,5,42,0,0,535,30,1,0,0,0,536, + 537,5,47,0,0,537,32,1,0,0,0,538,539,5,44,0,0,539,34,1,0,0,0,540,541,5, + 45,0,0,541,542,5,62,0,0,542,36,1,0,0,0,543,544,5,58,0,0,544,38,1,0,0, + 0,545,546,5,58,0,0,546,547,5,61,0,0,547,40,1,0,0,0,548,549,5,35,0,0,549, + 42,1,0,0,0,550,551,5,101,0,0,551,552,5,118,0,0,552,553,5,97,0,0,553,554, + 5,108,0,0,554,44,1,0,0,0,555,556,5,105,0,0,556,557,5,102,0,0,557,46,1, + 0,0,0,558,559,5,99,0,0,559,560,5,97,0,0,560,561,5,115,0,0,561,562,5,101, + 0,0,562,48,1,0,0,0,563,564,5,116,0,0,564,565,5,104,0,0,565,566,5,101, + 0,0,566,567,5,110,0,0,567,50,1,0,0,0,568,569,5,101,0,0,569,570,5,108, + 0,0,570,571,5,115,0,0,571,572,5,101,0,0,572,52,1,0,0,0,573,574,5,117, + 0,0,574,575,5,115,0,0,575,576,5,105,0,0,576,577,5,110,0,0,577,578,5,103, + 0,0,578,54,1,0,0,0,579,580,5,119,0,0,580,581,5,105,0,0,581,582,5,116, + 0,0,582,583,5,104,0,0,583,56,1,0,0,0,584,585,5,99,0,0,585,586,5,117,0, + 0,586,587,5,114,0,0,587,588,5,114,0,0,588,589,5,101,0,0,589,590,5,110, + 0,0,590,591,5,116,0,0,591,592,5,95,0,0,592,593,5,100,0,0,593,594,5,97, + 0,0,594,595,5,116,0,0,595,596,5,101,0,0,596,58,1,0,0,0,597,598,5,100, + 0,0,598,599,5,97,0,0,599,600,5,116,0,0,600,601,5,101,0,0,601,602,5,100, + 0,0,602,603,5,105,0,0,603,604,5,102,0,0,604,605,5,102,0,0,605,60,1,0, + 0,0,606,607,5,100,0,0,607,608,5,97,0,0,608,609,5,116,0,0,609,610,5,101, + 0,0,610,611,5,97,0,0,611,612,5,100,0,0,612,613,5,100,0,0,613,62,1,0,0, + 0,614,615,5,103,0,0,615,616,5,101,0,0,616,617,5,116,0,0,617,618,5,121, + 0,0,618,619,5,101,0,0,619,620,5,97,0,0,620,621,5,114,0,0,621,64,1,0,0, + 0,622,623,5,103,0,0,623,624,5,101,0,0,624,625,5,116,0,0,625,626,5,109, + 0,0,626,627,5,111,0,0,627,628,5,110,0,0,628,629,5,116,0,0,629,630,5,104, + 0,0,630,66,1,0,0,0,631,632,5,100,0,0,632,633,5,97,0,0,633,634,5,121,0, + 0,634,635,5,111,0,0,635,636,5,102,0,0,636,637,5,109,0,0,637,638,5,111, + 0,0,638,639,5,110,0,0,639,640,5,116,0,0,640,641,5,104,0,0,641,68,1,0, + 0,0,642,643,5,100,0,0,643,644,5,97,0,0,644,645,5,121,0,0,645,646,5,111, + 0,0,646,647,5,102,0,0,647,648,5,121,0,0,648,649,5,101,0,0,649,650,5,97, + 0,0,650,651,5,114,0,0,651,70,1,0,0,0,652,653,5,100,0,0,653,654,5,97,0, + 0,654,655,5,121,0,0,655,656,5,116,0,0,656,657,5,111,0,0,657,658,5,121, + 0,0,658,659,5,101,0,0,659,660,5,97,0,0,660,661,5,114,0,0,661,72,1,0,0, + 0,662,663,5,100,0,0,663,664,5,97,0,0,664,665,5,121,0,0,665,666,5,116, + 0,0,666,667,5,111,0,0,667,668,5,109,0,0,668,669,5,111,0,0,669,670,5,110, + 0,0,670,671,5,116,0,0,671,672,5,104,0,0,672,74,1,0,0,0,673,674,5,121, + 0,0,674,675,5,101,0,0,675,676,5,97,0,0,676,677,5,114,0,0,677,678,5,116, + 0,0,678,679,5,111,0,0,679,680,5,100,0,0,680,681,5,97,0,0,681,682,5,121, + 0,0,682,76,1,0,0,0,683,684,5,109,0,0,684,685,5,111,0,0,685,686,5,110, + 0,0,686,687,5,116,0,0,687,688,5,104,0,0,688,689,5,116,0,0,689,690,5,111, + 0,0,690,691,5,100,0,0,691,692,5,97,0,0,692,693,5,121,0,0,693,78,1,0,0, + 0,694,695,5,111,0,0,695,696,5,110,0,0,696,80,1,0,0,0,697,698,5,100,0, + 0,698,699,5,114,0,0,699,700,5,111,0,0,700,701,5,112,0,0,701,82,1,0,0, + 0,702,703,5,107,0,0,703,704,5,101,0,0,704,705,5,101,0,0,705,706,5,112, + 0,0,706,84,1,0,0,0,707,708,5,99,0,0,708,709,5,97,0,0,709,710,5,108,0, + 0,710,711,5,99,0,0,711,86,1,0,0,0,712,713,5,97,0,0,713,714,5,116,0,0, + 714,715,5,116,0,0,715,716,5,114,0,0,716,717,5,99,0,0,717,718,5,97,0,0, + 718,719,5,108,0,0,719,720,5,99,0,0,720,88,1,0,0,0,721,722,5,114,0,0,722, + 723,5,101,0,0,723,724,5,110,0,0,724,725,5,97,0,0,725,726,5,109,0,0,726, + 727,5,101,0,0,727,90,1,0,0,0,728,729,5,97,0,0,729,730,5,115,0,0,730,92, + 1,0,0,0,731,732,5,97,0,0,732,733,5,110,0,0,733,734,5,100,0,0,734,94,1, + 0,0,0,735,736,5,111,0,0,736,737,5,114,0,0,737,96,1,0,0,0,738,739,5,120, + 0,0,739,740,5,111,0,0,740,741,5,114,0,0,741,98,1,0,0,0,742,743,5,110, + 0,0,743,744,5,111,0,0,744,745,5,116,0,0,745,100,1,0,0,0,746,747,5,98, + 0,0,747,748,5,101,0,0,748,749,5,116,0,0,749,750,5,119,0,0,750,751,5,101, + 0,0,751,752,5,101,0,0,752,753,5,110,0,0,753,102,1,0,0,0,754,755,5,105, + 0,0,755,756,5,110,0,0,756,104,1,0,0,0,757,758,5,110,0,0,758,759,5,111, + 0,0,759,760,5,116,0,0,760,761,5,95,0,0,761,762,5,105,0,0,762,763,5,110, + 0,0,763,106,1,0,0,0,764,765,5,110,0,0,765,766,5,117,0,0,766,767,5,108, + 0,0,767,768,5,108,0,0,768,108,1,0,0,0,769,770,5,105,0,0,770,771,5,115, + 0,0,771,772,5,110,0,0,772,773,5,117,0,0,773,774,5,108,0,0,774,775,5,108, + 0,0,775,110,1,0,0,0,776,777,5,101,0,0,777,778,5,120,0,0,778,112,1,0,0, + 0,779,780,5,117,0,0,780,781,5,110,0,0,781,782,5,105,0,0,782,783,5,111, + 0,0,783,784,5,110,0,0,784,114,1,0,0,0,785,786,5,100,0,0,786,787,5,105, + 0,0,787,788,5,102,0,0,788,789,5,102,0,0,789,116,1,0,0,0,790,791,5,115, + 0,0,791,792,5,121,0,0,792,793,5,109,0,0,793,794,5,100,0,0,794,795,5,105, + 0,0,795,796,5,102,0,0,796,797,5,102,0,0,797,118,1,0,0,0,798,799,5,105, + 0,0,799,800,5,110,0,0,800,801,5,116,0,0,801,802,5,101,0,0,802,803,5,114, + 0,0,803,804,5,115,0,0,804,805,5,101,0,0,805,806,5,99,0,0,806,807,5,116, + 0,0,807,120,1,0,0,0,808,809,5,114,0,0,809,810,5,97,0,0,810,811,5,110, + 0,0,811,812,5,100,0,0,812,813,5,111,0,0,813,814,5,109,0,0,814,122,1,0, + 0,0,815,816,5,107,0,0,816,817,5,101,0,0,817,818,5,121,0,0,818,819,5,115, + 0,0,819,124,1,0,0,0,820,821,5,105,0,0,821,822,5,110,0,0,822,823,5,116, + 0,0,823,824,5,121,0,0,824,825,5,101,0,0,825,826,5,97,0,0,826,827,5,114, + 0,0,827,126,1,0,0,0,828,829,5,105,0,0,829,830,5,110,0,0,830,831,5,116, + 0,0,831,832,5,109,0,0,832,833,5,111,0,0,833,834,5,110,0,0,834,835,5,116, + 0,0,835,836,5,104,0,0,836,128,1,0,0,0,837,838,5,105,0,0,838,839,5,110, + 0,0,839,840,5,116,0,0,840,841,5,100,0,0,841,842,5,97,0,0,842,843,5,121, + 0,0,843,130,1,0,0,0,844,845,5,99,0,0,845,846,5,104,0,0,846,847,5,101, + 0,0,847,848,5,99,0,0,848,849,5,107,0,0,849,132,1,0,0,0,850,851,5,101, + 0,0,851,852,5,120,0,0,852,853,5,105,0,0,853,854,5,115,0,0,854,855,5,116, + 0,0,855,856,5,115,0,0,856,857,5,95,0,0,857,858,5,105,0,0,858,859,5,110, + 0,0,859,134,1,0,0,0,860,861,5,116,0,0,861,862,5,111,0,0,862,136,1,0,0, + 0,863,864,5,114,0,0,864,865,5,101,0,0,865,866,5,116,0,0,866,867,5,117, + 0,0,867,868,5,114,0,0,868,869,5,110,0,0,869,138,1,0,0,0,870,871,5,105, + 0,0,871,872,5,109,0,0,872,873,5,98,0,0,873,874,5,97,0,0,874,875,5,108, + 0,0,875,876,5,97,0,0,876,877,5,110,0,0,877,878,5,99,0,0,878,879,5,101, + 0,0,879,140,1,0,0,0,880,881,5,101,0,0,881,882,5,114,0,0,882,883,5,114, + 0,0,883,884,5,111,0,0,884,885,5,114,0,0,885,886,5,99,0,0,886,887,5,111, + 0,0,887,888,5,100,0,0,888,889,5,101,0,0,889,142,1,0,0,0,890,891,5,97, + 0,0,891,892,5,108,0,0,892,893,5,108,0,0,893,144,1,0,0,0,894,895,5,97, + 0,0,895,896,5,103,0,0,896,897,5,103,0,0,897,898,5,114,0,0,898,146,1,0, + 0,0,899,900,5,101,0,0,900,901,5,114,0,0,901,902,5,114,0,0,902,903,5,111, + 0,0,903,904,5,114,0,0,904,905,5,108,0,0,905,906,5,101,0,0,906,907,5,118, + 0,0,907,908,5,101,0,0,908,909,5,108,0,0,909,148,1,0,0,0,910,911,5,111, + 0,0,911,912,5,114,0,0,912,913,5,100,0,0,913,914,5,101,0,0,914,915,5,114, + 0,0,915,150,1,0,0,0,916,917,5,98,0,0,917,918,5,121,0,0,918,152,1,0,0, + 0,919,920,5,114,0,0,920,921,5,97,0,0,921,922,5,110,0,0,922,923,5,107, + 0,0,923,154,1,0,0,0,924,925,5,97,0,0,925,926,5,115,0,0,926,927,5,99,0, + 0,927,156,1,0,0,0,928,929,5,100,0,0,929,930,5,101,0,0,930,931,5,115,0, + 0,931,932,5,99,0,0,932,158,1,0,0,0,933,934,5,109,0,0,934,935,5,105,0, + 0,935,936,5,110,0,0,936,160,1,0,0,0,937,938,5,109,0,0,938,939,5,97,0, + 0,939,940,5,120,0,0,940,162,1,0,0,0,941,942,5,102,0,0,942,943,5,105,0, + 0,943,944,5,114,0,0,944,945,5,115,0,0,945,946,5,116,0,0,946,164,1,0,0, + 0,947,948,5,108,0,0,948,949,5,97,0,0,949,950,5,115,0,0,950,951,5,116, + 0,0,951,166,1,0,0,0,952,953,5,105,0,0,953,954,5,110,0,0,954,955,5,100, + 0,0,955,956,5,101,0,0,956,957,5,120,0,0,957,958,5,111,0,0,958,959,5,102, + 0,0,959,168,1,0,0,0,960,961,5,97,0,0,961,962,5,98,0,0,962,963,5,115,0, + 0,963,170,1,0,0,0,964,965,5,107,0,0,965,966,5,101,0,0,966,967,5,121,0, + 0,967,172,1,0,0,0,968,969,5,108,0,0,969,970,5,110,0,0,970,174,1,0,0,0, + 971,972,5,108,0,0,972,973,5,111,0,0,973,974,5,103,0,0,974,176,1,0,0,0, + 975,976,5,116,0,0,976,977,5,114,0,0,977,978,5,117,0,0,978,979,5,110,0, + 0,979,980,5,99,0,0,980,178,1,0,0,0,981,982,5,114,0,0,982,983,5,111,0, + 0,983,984,5,117,0,0,984,985,5,110,0,0,985,986,5,100,0,0,986,180,1,0,0, + 0,987,988,5,112,0,0,988,989,5,111,0,0,989,990,5,119,0,0,990,991,5,101, + 0,0,991,992,5,114,0,0,992,182,1,0,0,0,993,994,5,109,0,0,994,995,5,111, + 0,0,995,996,5,100,0,0,996,184,1,0,0,0,997,998,5,108,0,0,998,999,5,101, + 0,0,999,1000,5,110,0,0,1000,1001,5,103,0,0,1001,1002,5,116,0,0,1002,1003, + 5,104,0,0,1003,186,1,0,0,0,1004,1005,5,124,0,0,1005,1006,5,124,0,0,1006, + 188,1,0,0,0,1007,1008,5,116,0,0,1008,1009,5,114,0,0,1009,1010,5,105,0, + 0,1010,1011,5,109,0,0,1011,190,1,0,0,0,1012,1013,5,117,0,0,1013,1014, + 5,112,0,0,1014,1015,5,112,0,0,1015,1016,5,101,0,0,1016,1017,5,114,0,0, + 1017,192,1,0,0,0,1018,1019,5,108,0,0,1019,1020,5,111,0,0,1020,1021,5, + 119,0,0,1021,1022,5,101,0,0,1022,1023,5,114,0,0,1023,194,1,0,0,0,1024, + 1025,5,115,0,0,1025,1026,5,117,0,0,1026,1027,5,98,0,0,1027,1028,5,115, + 0,0,1028,1029,5,116,0,0,1029,1030,5,114,0,0,1030,196,1,0,0,0,1031,1032, + 5,115,0,0,1032,1033,5,117,0,0,1033,1034,5,109,0,0,1034,198,1,0,0,0,1035, + 1036,5,97,0,0,1036,1037,5,118,0,0,1037,1038,5,103,0,0,1038,200,1,0,0, + 0,1039,1040,5,109,0,0,1040,1041,5,101,0,0,1041,1042,5,100,0,0,1042,1043, + 5,105,0,0,1043,1044,5,97,0,0,1044,1045,5,110,0,0,1045,202,1,0,0,0,1046, + 1047,5,99,0,0,1047,1048,5,111,0,0,1048,1049,5,117,0,0,1049,1050,5,110, + 0,0,1050,1051,5,116,0,0,1051,204,1,0,0,0,1052,1053,5,105,0,0,1053,1054, + 5,100,0,0,1054,1055,5,101,0,0,1055,1056,5,110,0,0,1056,1057,5,116,0,0, + 1057,1058,5,105,0,0,1058,1059,5,102,0,0,1059,1060,5,105,0,0,1060,1061, + 5,101,0,0,1061,1062,5,114,0,0,1062,206,1,0,0,0,1063,1064,5,109,0,0,1064, + 1065,5,101,0,0,1065,1066,5,97,0,0,1066,1067,5,115,0,0,1067,1068,5,117, + 0,0,1068,1069,5,114,0,0,1069,1070,5,101,0,0,1070,208,1,0,0,0,1071,1072, + 5,97,0,0,1072,1073,5,116,0,0,1073,1074,5,116,0,0,1074,1075,5,114,0,0, + 1075,1076,5,105,0,0,1076,1077,5,98,0,0,1077,1078,5,117,0,0,1078,1079, + 5,116,0,0,1079,1080,5,101,0,0,1080,210,1,0,0,0,1081,1082,5,102,0,0,1082, + 1083,5,105,0,0,1083,1084,5,108,0,0,1084,1085,5,116,0,0,1085,1086,5,101, + 0,0,1086,1087,5,114,0,0,1087,212,1,0,0,0,1088,1089,5,109,0,0,1089,1090, + 5,101,0,0,1090,1091,5,114,0,0,1091,1092,5,103,0,0,1092,1093,5,101,0,0, + 1093,214,1,0,0,0,1094,1095,5,101,0,0,1095,1096,5,120,0,0,1096,1097,5, + 112,0,0,1097,216,1,0,0,0,1098,1099,5,99,0,0,1099,1100,5,111,0,0,1100, + 1101,5,109,0,0,1101,1102,5,112,0,0,1102,1103,5,111,0,0,1103,1104,5,110, + 0,0,1104,1105,5,101,0,0,1105,1106,5,110,0,0,1106,1107,5,116,0,0,1107, + 1108,5,82,0,0,1108,1109,5,111,0,0,1109,1110,5,108,0,0,1110,1111,5,101, + 0,0,1111,218,1,0,0,0,1112,1113,5,118,0,0,1113,1114,5,105,0,0,1114,1115, + 5,114,0,0,1115,1116,5,97,0,0,1116,1117,5,108,0,0,1117,220,1,0,0,0,1118, + 1119,5,109,0,0,1119,1120,5,97,0,0,1120,1121,5,116,0,0,1121,1122,5,99, + 0,0,1122,1123,5,104,0,0,1123,1124,5,95,0,0,1124,1125,5,99,0,0,1125,1126, + 5,104,0,0,1126,1127,5,97,0,0,1127,1128,5,114,0,0,1128,1129,5,97,0,0,1129, + 1130,5,99,0,0,1130,1131,5,116,0,0,1131,1132,5,101,0,0,1132,1133,5,114, + 0,0,1133,1134,5,115,0,0,1134,222,1,0,0,0,1135,1136,5,116,0,0,1136,1137, + 5,121,0,0,1137,1138,5,112,0,0,1138,1139,5,101,0,0,1139,224,1,0,0,0,1140, + 1141,5,110,0,0,1141,1142,5,118,0,0,1142,1143,5,108,0,0,1143,226,1,0,0, + 0,1144,1145,5,104,0,0,1145,1146,5,105,0,0,1146,1147,5,101,0,0,1147,1148, + 5,114,0,0,1148,1149,5,97,0,0,1149,1150,5,114,0,0,1150,1151,5,99,0,0,1151, + 1152,5,104,0,0,1152,1153,5,121,0,0,1153,228,1,0,0,0,1154,1155,5,95,0, + 0,1155,230,1,0,0,0,1156,1157,5,105,0,0,1157,1158,5,110,0,0,1158,1159, + 5,118,0,0,1159,1160,5,97,0,0,1160,1161,5,108,0,0,1161,1162,5,105,0,0, + 1162,1163,5,100,0,0,1163,232,1,0,0,0,1164,1165,5,118,0,0,1165,1166,5, + 97,0,0,1166,1167,5,108,0,0,1167,1168,5,117,0,0,1168,1169,5,101,0,0,1169, + 1170,5,100,0,0,1170,1171,5,111,0,0,1171,1172,5,109,0,0,1172,1173,5,97, + 0,0,1173,1174,5,105,0,0,1174,1175,5,110,0,0,1175,234,1,0,0,0,1176,1177, + 5,118,0,0,1177,1178,5,97,0,0,1178,1179,5,114,0,0,1179,1180,5,105,0,0, + 1180,1181,5,97,0,0,1181,1182,5,98,0,0,1182,1183,5,108,0,0,1183,1184,5, + 101,0,0,1184,236,1,0,0,0,1185,1186,5,100,0,0,1186,1187,5,97,0,0,1187, + 1188,5,116,0,0,1188,1189,5,97,0,0,1189,238,1,0,0,0,1190,1191,5,115,0, + 0,1191,1192,5,116,0,0,1192,1193,5,114,0,0,1193,1194,5,117,0,0,1194,1195, + 5,99,0,0,1195,1196,5,116,0,0,1196,1197,5,117,0,0,1197,1198,5,114,0,0, + 1198,1199,5,101,0,0,1199,240,1,0,0,0,1200,1201,5,100,0,0,1201,1202,5, + 97,0,0,1202,1203,5,116,0,0,1203,1204,5,97,0,0,1204,1205,5,115,0,0,1205, + 1206,5,101,0,0,1206,1207,5,116,0,0,1207,242,1,0,0,0,1208,1209,5,111,0, + 0,1209,1210,5,112,0,0,1210,1211,5,101,0,0,1211,1212,5,114,0,0,1212,1213, + 5,97,0,0,1213,1214,5,116,0,0,1214,1215,5,111,0,0,1215,1216,5,114,0,0, + 1216,244,1,0,0,0,1217,1218,5,100,0,0,1218,1219,5,101,0,0,1219,1220,5, + 102,0,0,1220,1221,5,105,0,0,1221,1222,5,110,0,0,1222,1223,5,101,0,0,1223, + 246,1,0,0,0,1224,1225,5,60,0,0,1225,1226,5,45,0,0,1226,248,1,0,0,0,1227, + 1228,5,100,0,0,1228,1229,5,97,0,0,1229,1230,5,116,0,0,1230,1231,5,97, + 0,0,1231,1232,5,112,0,0,1232,1233,5,111,0,0,1233,1234,5,105,0,0,1234, + 1235,5,110,0,0,1235,1236,5,116,0,0,1236,250,1,0,0,0,1237,1238,5,104,0, + 0,1238,1239,5,105,0,0,1239,1240,5,101,0,0,1240,1241,5,114,0,0,1241,1242, + 5,97,0,0,1242,1243,5,114,0,0,1243,1244,5,99,0,0,1244,1245,5,104,0,0,1245, + 1246,5,105,0,0,1246,1247,5,99,0,0,1247,1248,5,97,0,0,1248,1249,5,108, + 0,0,1249,252,1,0,0,0,1250,1251,5,114,0,0,1251,1252,5,117,0,0,1252,1253, + 5,108,0,0,1253,1254,5,101,0,0,1254,1255,5,115,0,0,1255,1256,5,101,0,0, + 1256,1257,5,116,0,0,1257,254,1,0,0,0,1258,1259,5,114,0,0,1259,1260,5, + 117,0,0,1260,1261,5,108,0,0,1261,1262,5,101,0,0,1262,256,1,0,0,0,1263, + 1264,5,101,0,0,1264,1265,5,110,0,0,1265,1266,5,100,0,0,1266,258,1,0,0, + 0,1267,1268,5,97,0,0,1268,1269,5,108,0,0,1269,1270,5,116,0,0,1270,1271, + 5,101,0,0,1271,1272,5,114,0,0,1272,1273,5,68,0,0,1273,1274,5,97,0,0,1274, + 1275,5,116,0,0,1275,1276,5,97,0,0,1276,1277,5,115,0,0,1277,1278,5,101, + 0,0,1278,1279,5,116,0,0,1279,260,1,0,0,0,1280,1281,5,108,0,0,1281,1282, + 5,116,0,0,1282,1283,5,114,0,0,1283,1284,5,105,0,0,1284,1285,5,109,0,0, + 1285,262,1,0,0,0,1286,1287,5,114,0,0,1287,1288,5,116,0,0,1288,1289,5, + 114,0,0,1289,1290,5,105,0,0,1290,1291,5,109,0,0,1291,264,1,0,0,0,1292, + 1293,5,105,0,0,1293,1294,5,110,0,0,1294,1295,5,115,0,0,1295,1296,5,116, + 0,0,1296,1297,5,114,0,0,1297,266,1,0,0,0,1298,1299,5,114,0,0,1299,1300, + 5,101,0,0,1300,1301,5,112,0,0,1301,1302,5,108,0,0,1302,1303,5,97,0,0, + 1303,1304,5,99,0,0,1304,1305,5,101,0,0,1305,268,1,0,0,0,1306,1307,5,99, + 0,0,1307,1308,5,101,0,0,1308,1309,5,105,0,0,1309,1310,5,108,0,0,1310, + 270,1,0,0,0,1311,1312,5,102,0,0,1312,1313,5,108,0,0,1313,1314,5,111,0, + 0,1314,1315,5,111,0,0,1315,1316,5,114,0,0,1316,272,1,0,0,0,1317,1318, + 5,115,0,0,1318,1319,5,113,0,0,1319,1320,5,114,0,0,1320,1321,5,116,0,0, + 1321,274,1,0,0,0,1322,1323,5,97,0,0,1323,1324,5,110,0,0,1324,1325,5,121, + 0,0,1325,276,1,0,0,0,1326,1327,5,115,0,0,1327,1328,5,101,0,0,1328,1329, + 5,116,0,0,1329,1330,5,100,0,0,1330,1331,5,105,0,0,1331,1332,5,102,0,0, + 1332,1333,5,102,0,0,1333,278,1,0,0,0,1334,1335,5,115,0,0,1335,1336,5, + 116,0,0,1336,1337,5,100,0,0,1337,1338,5,100,0,0,1338,1339,5,101,0,0,1339, + 1340,5,118,0,0,1340,1341,5,95,0,0,1341,1342,5,112,0,0,1342,1343,5,111, + 0,0,1343,1344,5,112,0,0,1344,280,1,0,0,0,1345,1346,5,115,0,0,1346,1347, + 5,116,0,0,1347,1348,5,100,0,0,1348,1349,5,100,0,0,1349,1350,5,101,0,0, + 1350,1351,5,118,0,0,1351,1352,5,95,0,0,1352,1353,5,115,0,0,1353,1354, + 5,97,0,0,1354,1355,5,109,0,0,1355,1356,5,112,0,0,1356,282,1,0,0,0,1357, + 1358,5,118,0,0,1358,1359,5,97,0,0,1359,1360,5,114,0,0,1360,1361,5,95, + 0,0,1361,1362,5,112,0,0,1362,1363,5,111,0,0,1363,1364,5,112,0,0,1364, + 284,1,0,0,0,1365,1366,5,118,0,0,1366,1367,5,97,0,0,1367,1368,5,114,0, + 0,1368,1369,5,95,0,0,1369,1370,5,115,0,0,1370,1371,5,97,0,0,1371,1372, + 5,109,0,0,1372,1373,5,112,0,0,1373,286,1,0,0,0,1374,1375,5,103,0,0,1375, + 1376,5,114,0,0,1376,1377,5,111,0,0,1377,1378,5,117,0,0,1378,1379,5,112, + 0,0,1379,288,1,0,0,0,1380,1381,5,101,0,0,1381,1382,5,120,0,0,1382,1383, + 5,99,0,0,1383,1384,5,101,0,0,1384,1385,5,112,0,0,1385,1386,5,116,0,0, + 1386,290,1,0,0,0,1387,1388,5,104,0,0,1388,1389,5,97,0,0,1389,1390,5,118, + 0,0,1390,1391,5,105,0,0,1391,1392,5,110,0,0,1392,1393,5,103,0,0,1393, + 292,1,0,0,0,1394,1395,5,102,0,0,1395,1396,5,105,0,0,1396,1397,5,114,0, + 0,1397,1398,5,115,0,0,1398,1399,5,116,0,0,1399,1400,5,95,0,0,1400,1401, + 5,118,0,0,1401,1402,5,97,0,0,1402,1403,5,108,0,0,1403,1404,5,117,0,0, + 1404,1405,5,101,0,0,1405,294,1,0,0,0,1406,1407,5,108,0,0,1407,1408,5, + 97,0,0,1408,1409,5,115,0,0,1409,1410,5,116,0,0,1410,1411,5,95,0,0,1411, + 1412,5,118,0,0,1412,1413,5,97,0,0,1413,1414,5,108,0,0,1414,1415,5,117, + 0,0,1415,1416,5,101,0,0,1416,296,1,0,0,0,1417,1418,5,108,0,0,1418,1419, + 5,97,0,0,1419,1420,5,103,0,0,1420,298,1,0,0,0,1421,1422,5,108,0,0,1422, + 1423,5,101,0,0,1423,1424,5,97,0,0,1424,1425,5,100,0,0,1425,300,1,0,0, + 0,1426,1427,5,114,0,0,1427,1428,5,97,0,0,1428,1429,5,116,0,0,1429,1430, + 5,105,0,0,1430,1431,5,111,0,0,1431,1432,5,95,0,0,1432,1433,5,116,0,0, + 1433,1434,5,111,0,0,1434,1435,5,95,0,0,1435,1436,5,114,0,0,1436,1437, + 5,101,0,0,1437,1438,5,112,0,0,1438,1439,5,111,0,0,1439,1440,5,114,0,0, + 1440,1441,5,116,0,0,1441,302,1,0,0,0,1442,1443,5,111,0,0,1443,1444,5, + 118,0,0,1444,1445,5,101,0,0,1445,1446,5,114,0,0,1446,304,1,0,0,0,1447, + 1448,5,112,0,0,1448,1449,5,114,0,0,1449,1450,5,101,0,0,1450,1451,5,99, + 0,0,1451,1452,5,101,0,0,1452,1453,5,100,0,0,1453,1454,5,105,0,0,1454, + 1455,5,110,0,0,1455,1456,5,103,0,0,1456,306,1,0,0,0,1457,1458,5,102,0, + 0,1458,1459,5,111,0,0,1459,1460,5,108,0,0,1460,1461,5,108,0,0,1461,1462, + 5,111,0,0,1462,1463,5,119,0,0,1463,1464,5,105,0,0,1464,1465,5,110,0,0, + 1465,1466,5,103,0,0,1466,308,1,0,0,0,1467,1468,5,117,0,0,1468,1469,5, + 110,0,0,1469,1470,5,98,0,0,1470,1471,5,111,0,0,1471,1472,5,117,0,0,1472, + 1473,5,110,0,0,1473,1474,5,100,0,0,1474,1475,5,101,0,0,1475,1476,5,100, + 0,0,1476,310,1,0,0,0,1477,1478,5,112,0,0,1478,1479,5,97,0,0,1479,1480, + 5,114,0,0,1480,1481,5,116,0,0,1481,1482,5,105,0,0,1482,1483,5,116,0,0, + 1483,1484,5,105,0,0,1484,1485,5,111,0,0,1485,1486,5,110,0,0,1486,312, + 1,0,0,0,1487,1488,5,114,0,0,1488,1489,5,111,0,0,1489,1490,5,119,0,0,1490, + 1491,5,115,0,0,1491,314,1,0,0,0,1492,1493,5,114,0,0,1493,1494,5,97,0, + 0,1494,1495,5,110,0,0,1495,1496,5,103,0,0,1496,1497,5,101,0,0,1497,316, + 1,0,0,0,1498,1499,5,99,0,0,1499,1500,5,117,0,0,1500,1501,5,114,0,0,1501, + 1502,5,114,0,0,1502,1503,5,101,0,0,1503,1504,5,110,0,0,1504,1505,5,116, + 0,0,1505,318,1,0,0,0,1506,1507,5,118,0,0,1507,1508,5,97,0,0,1508,1509, + 5,108,0,0,1509,1510,5,105,0,0,1510,1511,5,100,0,0,1511,320,1,0,0,0,1512, + 1513,5,102,0,0,1513,1514,5,105,0,0,1514,1515,5,108,0,0,1515,1516,5,108, + 0,0,1516,1517,5,95,0,0,1517,1518,5,116,0,0,1518,1519,5,105,0,0,1519,1520, + 5,109,0,0,1520,1521,5,101,0,0,1521,1522,5,95,0,0,1522,1523,5,115,0,0, + 1523,1524,5,101,0,0,1524,1525,5,114,0,0,1525,1526,5,105,0,0,1526,1527, + 5,101,0,0,1527,1528,5,115,0,0,1528,322,1,0,0,0,1529,1530,5,102,0,0,1530, + 1531,5,108,0,0,1531,1532,5,111,0,0,1532,1533,5,119,0,0,1533,1534,5,95, + 0,0,1534,1535,5,116,0,0,1535,1536,5,111,0,0,1536,1537,5,95,0,0,1537,1538, + 5,115,0,0,1538,1539,5,116,0,0,1539,1540,5,111,0,0,1540,1541,5,99,0,0, + 1541,1542,5,107,0,0,1542,324,1,0,0,0,1543,1544,5,115,0,0,1544,1545,5, + 116,0,0,1545,1546,5,111,0,0,1546,1547,5,99,0,0,1547,1548,5,107,0,0,1548, + 1549,5,95,0,0,1549,1550,5,116,0,0,1550,1551,5,111,0,0,1551,1552,5,95, + 0,0,1552,1553,5,102,0,0,1553,1554,5,108,0,0,1554,1555,5,111,0,0,1555, + 1556,5,119,0,0,1556,326,1,0,0,0,1557,1558,5,116,0,0,1558,1559,5,105,0, + 0,1559,1560,5,109,0,0,1560,1561,5,101,0,0,1561,1562,5,115,0,0,1562,1563, + 5,104,0,0,1563,1564,5,105,0,0,1564,1565,5,102,0,0,1565,1566,5,116,0,0, + 1566,328,1,0,0,0,1567,1568,5,109,0,0,1568,1569,5,101,0,0,1569,1570,5, + 97,0,0,1570,1571,5,115,0,0,1571,1572,5,117,0,0,1572,1573,5,114,0,0,1573, + 1574,5,101,0,0,1574,1575,5,115,0,0,1575,330,1,0,0,0,1576,1577,5,110,0, + 0,1577,1578,5,111,0,0,1578,1579,5,95,0,0,1579,1580,5,109,0,0,1580,1581, + 5,101,0,0,1581,1582,5,97,0,0,1582,1583,5,115,0,0,1583,1584,5,117,0,0, + 1584,1585,5,114,0,0,1585,1586,5,101,0,0,1586,1587,5,115,0,0,1587,332, + 1,0,0,0,1588,1589,5,99,0,0,1589,1590,5,111,0,0,1590,1591,5,110,0,0,1591, + 1592,5,100,0,0,1592,1593,5,105,0,0,1593,1594,5,116,0,0,1594,1595,5,105, + 0,0,1595,1596,5,111,0,0,1596,1597,5,110,0,0,1597,334,1,0,0,0,1598,1599, + 5,98,0,0,1599,1600,5,111,0,0,1600,1601,5,111,0,0,1601,1602,5,108,0,0, + 1602,1603,5,101,0,0,1603,1604,5,97,0,0,1604,1605,5,110,0,0,1605,336,1, + 0,0,0,1606,1607,5,100,0,0,1607,1608,5,97,0,0,1608,1609,5,116,0,0,1609, + 1610,5,101,0,0,1610,338,1,0,0,0,1611,1612,5,116,0,0,1612,1613,5,105,0, + 0,1613,1614,5,109,0,0,1614,1615,5,101,0,0,1615,1616,5,95,0,0,1616,1617, + 5,112,0,0,1617,1618,5,101,0,0,1618,1619,5,114,0,0,1619,1620,5,105,0,0, + 1620,1621,5,111,0,0,1621,1622,5,100,0,0,1622,340,1,0,0,0,1623,1624,5, + 110,0,0,1624,1625,5,117,0,0,1625,1626,5,109,0,0,1626,1627,5,98,0,0,1627, + 1628,5,101,0,0,1628,1629,5,114,0,0,1629,342,1,0,0,0,1630,1631,5,115,0, + 0,1631,1632,5,116,0,0,1632,1633,5,114,0,0,1633,1634,5,105,0,0,1634,1635, + 5,110,0,0,1635,1636,5,103,0,0,1636,344,1,0,0,0,1637,1638,5,116,0,0,1638, + 1639,5,105,0,0,1639,1640,5,109,0,0,1640,1641,5,101,0,0,1641,346,1,0,0, + 0,1642,1643,5,105,0,0,1643,1644,5,110,0,0,1644,1645,5,116,0,0,1645,1646, + 5,101,0,0,1646,1647,5,103,0,0,1647,1648,5,101,0,0,1648,1649,5,114,0,0, + 1649,348,1,0,0,0,1650,1651,5,102,0,0,1651,1652,5,108,0,0,1652,1653,5, + 111,0,0,1653,1654,5,97,0,0,1654,1655,5,116,0,0,1655,350,1,0,0,0,1656, + 1657,5,108,0,0,1657,1658,5,105,0,0,1658,1659,5,115,0,0,1659,1660,5,116, + 0,0,1660,352,1,0,0,0,1661,1662,5,114,0,0,1662,1663,5,101,0,0,1663,1664, + 5,99,0,0,1664,1665,5,111,0,0,1665,1666,5,114,0,0,1666,1667,5,100,0,0, + 1667,354,1,0,0,0,1668,1669,5,114,0,0,1669,1670,5,101,0,0,1670,1671,5, + 115,0,0,1671,1672,5,116,0,0,1672,1673,5,114,0,0,1673,1674,5,105,0,0,1674, + 1675,5,99,0,0,1675,1676,5,116,0,0,1676,356,1,0,0,0,1677,1678,5,121,0, + 0,1678,1679,5,121,0,0,1679,1680,5,121,0,0,1680,1681,5,121,0,0,1681,358, + 1,0,0,0,1682,1683,5,109,0,0,1683,1684,5,109,0,0,1684,360,1,0,0,0,1685, + 1686,5,100,0,0,1686,1687,5,100,0,0,1687,362,1,0,0,0,1688,1689,5,109,0, + 0,1689,1690,5,97,0,0,1690,1691,5,120,0,0,1691,1692,5,76,0,0,1692,1693, + 5,101,0,0,1693,1694,5,110,0,0,1694,1695,5,103,0,0,1695,1696,5,116,0,0, + 1696,1697,5,104,0,0,1697,364,1,0,0,0,1698,1699,5,114,0,0,1699,1700,5, + 101,0,0,1700,1701,5,103,0,0,1701,1702,5,101,0,0,1702,1703,5,120,0,0,1703, + 1704,5,112,0,0,1704,366,1,0,0,0,1705,1706,5,105,0,0,1706,1707,5,115,0, + 0,1707,368,1,0,0,0,1708,1709,5,119,0,0,1709,1710,5,104,0,0,1710,1711, + 5,101,0,0,1711,1712,5,110,0,0,1712,370,1,0,0,0,1713,1714,5,102,0,0,1714, + 1715,5,114,0,0,1715,1716,5,111,0,0,1716,1717,5,109,0,0,1717,372,1,0,0, + 0,1718,1719,5,97,0,0,1719,1720,5,103,0,0,1720,1721,5,103,0,0,1721,1722, + 5,114,0,0,1722,1723,5,101,0,0,1723,1724,5,103,0,0,1724,1725,5,97,0,0, + 1725,1726,5,116,0,0,1726,1727,5,101,0,0,1727,1728,5,115,0,0,1728,374, + 1,0,0,0,1729,1730,5,112,0,0,1730,1731,5,111,0,0,1731,1732,5,105,0,0,1732, + 1733,5,110,0,0,1733,1734,5,116,0,0,1734,1735,5,115,0,0,1735,376,1,0,0, + 0,1736,1737,5,112,0,0,1737,1738,5,111,0,0,1738,1739,5,105,0,0,1739,1740, + 5,110,0,0,1740,1741,5,116,0,0,1741,378,1,0,0,0,1742,1743,5,116,0,0,1743, + 1744,5,111,0,0,1744,1745,5,116,0,0,1745,1746,5,97,0,0,1746,1747,5,108, + 0,0,1747,380,1,0,0,0,1748,1749,5,112,0,0,1749,1750,5,97,0,0,1750,1751, + 5,114,0,0,1751,1752,5,116,0,0,1752,1753,5,105,0,0,1753,1754,5,97,0,0, + 1754,1755,5,108,0,0,1755,382,1,0,0,0,1756,1757,5,97,0,0,1757,1758,5,108, + 0,0,1758,1759,5,119,0,0,1759,1760,5,97,0,0,1760,1761,5,121,0,0,1761,1762, + 5,115,0,0,1762,384,1,0,0,0,1763,1764,5,105,0,0,1764,1765,5,110,0,0,1765, + 1766,5,110,0,0,1766,1767,5,101,0,0,1767,1768,5,114,0,0,1768,1769,5,95, + 0,0,1769,1770,5,106,0,0,1770,1771,5,111,0,0,1771,1772,5,105,0,0,1772, + 1773,5,110,0,0,1773,386,1,0,0,0,1774,1775,5,108,0,0,1775,1776,5,101,0, + 0,1776,1777,5,102,0,0,1777,1778,5,116,0,0,1778,1779,5,95,0,0,1779,1780, + 5,106,0,0,1780,1781,5,111,0,0,1781,1782,5,105,0,0,1782,1783,5,110,0,0, + 1783,388,1,0,0,0,1784,1785,5,99,0,0,1785,1786,5,114,0,0,1786,1787,5,111, + 0,0,1787,1788,5,115,0,0,1788,1789,5,115,0,0,1789,1790,5,95,0,0,1790,1791, + 5,106,0,0,1791,1792,5,111,0,0,1792,1793,5,105,0,0,1793,1794,5,110,0,0, + 1794,390,1,0,0,0,1795,1796,5,102,0,0,1796,1797,5,117,0,0,1797,1798,5, + 108,0,0,1798,1799,5,108,0,0,1799,1800,5,95,0,0,1800,1801,5,106,0,0,1801, + 1802,5,111,0,0,1802,1803,5,105,0,0,1803,1804,5,110,0,0,1804,392,1,0,0, + 0,1805,1806,5,109,0,0,1806,1807,5,97,0,0,1807,1808,5,112,0,0,1808,1809, + 5,115,0,0,1809,1810,5,95,0,0,1810,1811,5,102,0,0,1811,1812,5,114,0,0, + 1812,1813,5,111,0,0,1813,1814,5,109,0,0,1814,394,1,0,0,0,1815,1816,5, + 109,0,0,1816,1817,5,97,0,0,1817,1818,5,112,0,0,1818,1819,5,115,0,0,1819, + 1820,5,95,0,0,1820,1821,5,116,0,0,1821,1822,5,111,0,0,1822,396,1,0,0, + 0,1823,1824,5,109,0,0,1824,1825,5,97,0,0,1825,1826,5,112,0,0,1826,1827, + 5,95,0,0,1827,1828,5,116,0,0,1828,1829,5,111,0,0,1829,398,1,0,0,0,1830, + 1831,5,109,0,0,1831,1832,5,97,0,0,1832,1833,5,112,0,0,1833,1834,5,95, + 0,0,1834,1835,5,102,0,0,1835,1836,5,114,0,0,1836,1837,5,111,0,0,1837, + 1838,5,109,0,0,1838,400,1,0,0,0,1839,1840,5,114,0,0,1840,1841,5,101,0, + 0,1841,1842,5,116,0,0,1842,1843,5,117,0,0,1843,1844,5,114,0,0,1844,1845, + 5,110,0,0,1845,1846,5,115,0,0,1846,402,1,0,0,0,1847,1848,5,112,0,0,1848, + 1849,5,105,0,0,1849,1850,5,118,0,0,1850,1851,5,111,0,0,1851,1852,5,116, + 0,0,1852,404,1,0,0,0,1853,1854,5,99,0,0,1854,1855,5,117,0,0,1855,1856, + 5,115,0,0,1856,1857,5,116,0,0,1857,1858,5,111,0,0,1858,1859,5,109,0,0, + 1859,1860,5,80,0,0,1860,1861,5,105,0,0,1861,1862,5,118,0,0,1862,1863, + 5,111,0,0,1863,1864,5,116,0,0,1864,406,1,0,0,0,1865,1866,5,117,0,0,1866, + 1867,5,110,0,0,1867,1868,5,112,0,0,1868,1869,5,105,0,0,1869,1870,5,118, + 0,0,1870,1871,5,111,0,0,1871,1872,5,116,0,0,1872,408,1,0,0,0,1873,1874, + 5,115,0,0,1874,1875,5,117,0,0,1875,1876,5,98,0,0,1876,410,1,0,0,0,1877, + 1878,5,97,0,0,1878,1879,5,112,0,0,1879,1880,5,112,0,0,1880,1881,5,108, + 0,0,1881,1882,5,121,0,0,1882,412,1,0,0,0,1883,1884,5,99,0,0,1884,1885, + 5,111,0,0,1885,1886,5,110,0,0,1886,1887,5,100,0,0,1887,1888,5,105,0,0, + 1888,1889,5,116,0,0,1889,1890,5,105,0,0,1890,1891,5,111,0,0,1891,1892, + 5,110,0,0,1892,1893,5,101,0,0,1893,1894,5,100,0,0,1894,414,1,0,0,0,1895, + 1896,5,112,0,0,1896,1897,5,101,0,0,1897,1898,5,114,0,0,1898,1899,5,105, + 0,0,1899,1900,5,111,0,0,1900,1901,5,100,0,0,1901,1902,5,95,0,0,1902,1903, + 5,105,0,0,1903,1904,5,110,0,0,1904,1905,5,100,0,0,1905,1906,5,105,0,0, + 1906,1907,5,99,0,0,1907,1908,5,97,0,0,1908,1909,5,116,0,0,1909,1910,5, + 111,0,0,1910,1911,5,114,0,0,1911,416,1,0,0,0,1912,1913,5,115,0,0,1913, + 1914,5,105,0,0,1914,1915,5,110,0,0,1915,1916,5,103,0,0,1916,1917,5,108, + 0,0,1917,1918,5,101,0,0,1918,418,1,0,0,0,1919,1920,5,100,0,0,1920,1921, + 5,117,0,0,1921,1922,5,114,0,0,1922,1923,5,97,0,0,1923,1924,5,116,0,0, + 1924,1925,5,105,0,0,1925,1926,5,111,0,0,1926,1927,5,110,0,0,1927,420, + 1,0,0,0,1928,1929,5,116,0,0,1929,1930,5,105,0,0,1930,1931,5,109,0,0,1931, + 1932,5,101,0,0,1932,1933,5,95,0,0,1933,1934,5,97,0,0,1934,1935,5,103, + 0,0,1935,1936,5,103,0,0,1936,422,1,0,0,0,1937,1938,5,117,0,0,1938,1939, + 5,110,0,0,1939,1940,5,105,0,0,1940,1941,5,116,0,0,1941,424,1,0,0,0,1942, + 1943,5,86,0,0,1943,1944,5,97,0,0,1944,1945,5,108,0,0,1945,1946,5,117, + 0,0,1946,1947,5,101,0,0,1947,426,1,0,0,0,1948,1949,5,118,0,0,1949,1950, + 5,97,0,0,1950,1951,5,108,0,0,1951,1952,5,117,0,0,1952,1953,5,101,0,0, + 1953,1954,5,100,0,0,1954,1955,5,111,0,0,1955,1956,5,109,0,0,1956,1957, + 5,97,0,0,1957,1958,5,105,0,0,1958,1959,5,110,0,0,1959,1960,5,115,0,0, + 1960,428,1,0,0,0,1961,1962,5,118,0,0,1962,1963,5,97,0,0,1963,1964,5,114, + 0,0,1964,1965,5,105,0,0,1965,1966,5,97,0,0,1966,1967,5,98,0,0,1967,1968, + 5,108,0,0,1968,1969,5,101,0,0,1969,1970,5,115,0,0,1970,430,1,0,0,0,1971, + 1972,5,105,0,0,1972,1973,5,110,0,0,1973,1974,5,112,0,0,1974,1975,5,117, + 0,0,1975,1976,5,116,0,0,1976,432,1,0,0,0,1977,1978,5,111,0,0,1978,1979, + 5,117,0,0,1979,1980,5,116,0,0,1980,1981,5,112,0,0,1981,1982,5,117,0,0, + 1982,1983,5,116,0,0,1983,434,1,0,0,0,1984,1985,5,99,0,0,1985,1986,5,97, + 0,0,1986,1987,5,115,0,0,1987,1988,5,116,0,0,1988,436,1,0,0,0,1989,1990, + 5,114,0,0,1990,1991,5,117,0,0,1991,1992,5,108,0,0,1992,1993,5,101,0,0, + 1993,1994,5,95,0,0,1994,1995,5,112,0,0,1995,1996,5,114,0,0,1996,1997, + 5,105,0,0,1997,1998,5,111,0,0,1998,1999,5,114,0,0,1999,2000,5,105,0,0, + 2000,2001,5,116,0,0,2001,2002,5,121,0,0,2002,438,1,0,0,0,2003,2004,5, + 100,0,0,2004,2005,5,97,0,0,2005,2006,5,116,0,0,2006,2007,5,97,0,0,2007, + 2008,5,115,0,0,2008,2009,5,101,0,0,2009,2010,5,116,0,0,2010,2011,5,95, + 0,0,2011,2012,5,112,0,0,2012,2013,5,114,0,0,2013,2014,5,105,0,0,2014, + 2015,5,111,0,0,2015,2016,5,114,0,0,2016,2017,5,105,0,0,2017,2018,5,116, + 0,0,2018,2019,5,121,0,0,2019,440,1,0,0,0,2020,2021,5,100,0,0,2021,2022, + 5,101,0,0,2022,2023,5,102,0,0,2023,2024,5,97,0,0,2024,2025,5,117,0,0, + 2025,2026,5,108,0,0,2026,2027,5,116,0,0,2027,442,1,0,0,0,2028,2029,5, + 99,0,0,2029,2030,5,104,0,0,2030,2031,5,101,0,0,2031,2032,5,99,0,0,2032, + 2033,5,107,0,0,2033,2034,5,95,0,0,2034,2035,5,100,0,0,2035,2036,5,97, + 0,0,2036,2037,5,116,0,0,2037,2038,5,97,0,0,2038,2039,5,112,0,0,2039,2040, + 5,111,0,0,2040,2041,5,105,0,0,2041,2042,5,110,0,0,2042,2043,5,116,0,0, + 2043,444,1,0,0,0,2044,2045,5,99,0,0,2045,2046,5,104,0,0,2046,2047,5,101, + 0,0,2047,2048,5,99,0,0,2048,2049,5,107,0,0,2049,2050,5,95,0,0,2050,2051, + 5,104,0,0,2051,2052,5,105,0,0,2052,2053,5,101,0,0,2053,2054,5,114,0,0, + 2054,2055,5,97,0,0,2055,2056,5,114,0,0,2056,2057,5,99,0,0,2057,2058,5, + 104,0,0,2058,2059,5,121,0,0,2059,446,1,0,0,0,2060,2061,5,99,0,0,2061, + 2062,5,111,0,0,2062,2063,5,109,0,0,2063,2064,5,112,0,0,2064,2065,5,117, + 0,0,2065,2066,5,116,0,0,2066,2067,5,101,0,0,2067,2068,5,100,0,0,2068, + 448,1,0,0,0,2069,2070,5,110,0,0,2070,2071,5,111,0,0,2071,2072,5,110,0, + 0,2072,2073,5,95,0,0,2073,2074,5,110,0,0,2074,2075,5,117,0,0,2075,2076, + 5,108,0,0,2076,2077,5,108,0,0,2077,450,1,0,0,0,2078,2079,5,110,0,0,2079, + 2080,5,111,0,0,2080,2081,5,110,0,0,2081,2082,5,95,0,0,2082,2083,5,122, + 0,0,2083,2084,5,101,0,0,2084,2085,5,114,0,0,2085,2086,5,111,0,0,2086, + 452,1,0,0,0,2087,2088,5,112,0,0,2088,2089,5,97,0,0,2089,2090,5,114,0, + 0,2090,2091,5,116,0,0,2091,2092,5,105,0,0,2092,2093,5,97,0,0,2093,2094, + 5,108,0,0,2094,2095,5,95,0,0,2095,2096,5,110,0,0,2096,2097,5,117,0,0, + 2097,2098,5,108,0,0,2098,2099,5,108,0,0,2099,454,1,0,0,0,2100,2101,5, + 112,0,0,2101,2102,5,97,0,0,2102,2103,5,114,0,0,2103,2104,5,116,0,0,2104, + 2105,5,105,0,0,2105,2106,5,97,0,0,2106,2107,5,108,0,0,2107,2108,5,95, + 0,0,2108,2109,5,122,0,0,2109,2110,5,101,0,0,2110,2111,5,114,0,0,2111, + 2112,5,111,0,0,2112,456,1,0,0,0,2113,2114,5,97,0,0,2114,2115,5,108,0, + 0,2115,2116,5,119,0,0,2116,2117,5,97,0,0,2117,2118,5,121,0,0,2118,2119, + 5,115,0,0,2119,2120,5,95,0,0,2120,2121,5,110,0,0,2121,2122,5,117,0,0, + 2122,2123,5,108,0,0,2123,2124,5,108,0,0,2124,458,1,0,0,0,2125,2126,5, + 97,0,0,2126,2127,5,108,0,0,2127,2128,5,119,0,0,2128,2129,5,97,0,0,2129, + 2130,5,121,0,0,2130,2131,5,115,0,0,2131,2132,5,95,0,0,2132,2133,5,122, + 0,0,2133,2134,5,101,0,0,2134,2135,5,114,0,0,2135,2136,5,111,0,0,2136, + 460,1,0,0,0,2137,2138,5,99,0,0,2138,2139,5,111,0,0,2139,2140,5,109,0, + 0,2140,2141,5,112,0,0,2141,2142,5,111,0,0,2142,2143,5,110,0,0,2143,2144, + 5,101,0,0,2144,2145,5,110,0,0,2145,2146,5,116,0,0,2146,2147,5,115,0,0, + 2147,462,1,0,0,0,2148,2149,5,97,0,0,2149,2150,5,108,0,0,2150,2151,5,108, + 0,0,2151,2152,5,95,0,0,2152,2153,5,109,0,0,2153,2154,5,101,0,0,2154,2155, + 5,97,0,0,2155,2156,5,115,0,0,2156,2157,5,117,0,0,2157,2158,5,114,0,0, + 2158,2159,5,101,0,0,2159,2160,5,115,0,0,2160,464,1,0,0,0,2161,2162,5, + 115,0,0,2162,2163,5,99,0,0,2163,2164,5,97,0,0,2164,2165,5,108,0,0,2165, + 2166,5,97,0,0,2166,2167,5,114,0,0,2167,466,1,0,0,0,2168,2169,5,99,0,0, + 2169,2170,5,111,0,0,2170,2171,5,109,0,0,2171,2172,5,112,0,0,2172,2173, + 5,111,0,0,2173,2174,5,110,0,0,2174,2175,5,101,0,0,2175,2176,5,110,0,0, + 2176,2177,5,116,0,0,2177,468,1,0,0,0,2178,2179,5,100,0,0,2179,2180,5, + 97,0,0,2180,2181,5,116,0,0,2181,2182,5,97,0,0,2182,2183,5,112,0,0,2183, + 2184,5,111,0,0,2184,2185,5,105,0,0,2185,2186,5,110,0,0,2186,2187,5,116, + 0,0,2187,2188,5,95,0,0,2188,2189,5,111,0,0,2189,2190,5,110,0,0,2190,2191, + 5,95,0,0,2191,2192,5,118,0,0,2192,2193,5,97,0,0,2193,2194,5,108,0,0,2194, + 2195,5,117,0,0,2195,2196,5,101,0,0,2196,2197,5,100,0,0,2197,2198,5,111, + 0,0,2198,2199,5,109,0,0,2199,2200,5,97,0,0,2200,2201,5,105,0,0,2201,2202, + 5,110,0,0,2202,2203,5,115,0,0,2203,470,1,0,0,0,2204,2205,5,100,0,0,2205, + 2206,5,97,0,0,2206,2207,5,116,0,0,2207,2208,5,97,0,0,2208,2209,5,112, + 0,0,2209,2210,5,111,0,0,2210,2211,5,105,0,0,2211,2212,5,110,0,0,2212, + 2213,5,116,0,0,2213,2214,5,95,0,0,2214,2215,5,111,0,0,2215,2216,5,110, + 0,0,2216,2217,5,95,0,0,2217,2218,5,118,0,0,2218,2219,5,97,0,0,2219,2220, + 5,114,0,0,2220,2221,5,105,0,0,2221,2222,5,97,0,0,2222,2223,5,98,0,0,2223, + 2224,5,108,0,0,2224,2225,5,101,0,0,2225,2226,5,115,0,0,2226,472,1,0,0, + 0,2227,2228,5,104,0,0,2228,2229,5,105,0,0,2229,2230,5,101,0,0,2230,2231, + 5,114,0,0,2231,2232,5,97,0,0,2232,2233,5,114,0,0,2233,2234,5,99,0,0,2234, + 2235,5,104,0,0,2235,2236,5,105,0,0,2236,2237,5,99,0,0,2237,2238,5,97, + 0,0,2238,2239,5,108,0,0,2239,2240,5,95,0,0,2240,2241,5,111,0,0,2241,2242, + 5,110,0,0,2242,2243,5,95,0,0,2243,2244,5,118,0,0,2244,2245,5,97,0,0,2245, + 2246,5,108,0,0,2246,2247,5,117,0,0,2247,2248,5,101,0,0,2248,2249,5,100, + 0,0,2249,2250,5,111,0,0,2250,2251,5,109,0,0,2251,2252,5,97,0,0,2252,2253, + 5,105,0,0,2253,2254,5,110,0,0,2254,2255,5,115,0,0,2255,474,1,0,0,0,2256, + 2257,5,104,0,0,2257,2258,5,105,0,0,2258,2259,5,101,0,0,2259,2260,5,114, + 0,0,2260,2261,5,97,0,0,2261,2262,5,114,0,0,2262,2263,5,99,0,0,2263,2264, + 5,104,0,0,2264,2265,5,105,0,0,2265,2266,5,99,0,0,2266,2267,5,97,0,0,2267, + 2268,5,108,0,0,2268,2269,5,95,0,0,2269,2270,5,111,0,0,2270,2271,5,110, + 0,0,2271,2272,5,95,0,0,2272,2273,5,118,0,0,2273,2274,5,97,0,0,2274,2275, + 5,114,0,0,2275,2276,5,105,0,0,2276,2277,5,97,0,0,2277,2278,5,98,0,0,2278, + 2279,5,108,0,0,2279,2280,5,101,0,0,2280,2281,5,115,0,0,2281,476,1,0,0, + 0,2282,2283,5,115,0,0,2283,2284,5,101,0,0,2284,2285,5,116,0,0,2285,478, + 1,0,0,0,2286,2287,5,108,0,0,2287,2288,5,97,0,0,2288,2289,5,110,0,0,2289, + 2290,5,103,0,0,2290,2291,5,117,0,0,2291,2292,5,97,0,0,2292,2293,5,103, + 0,0,2293,2294,5,101,0,0,2294,480,1,0,0,0,2295,2296,7,0,0,0,2296,482,1, + 0,0,0,2297,2298,2,48,57,0,2298,484,1,0,0,0,2299,2301,3,483,241,0,2300, + 2299,1,0,0,0,2301,2302,1,0,0,0,2302,2300,1,0,0,0,2302,2303,1,0,0,0,2303, + 486,1,0,0,0,2304,2305,3,485,242,0,2305,2306,5,46,0,0,2306,2307,3,485, + 242,0,2307,488,1,0,0,0,2308,2309,5,116,0,0,2309,2310,5,114,0,0,2310,2311, + 5,117,0,0,2311,2318,5,101,0,0,2312,2313,5,102,0,0,2313,2314,5,97,0,0, + 2314,2315,5,108,0,0,2315,2316,5,115,0,0,2316,2318,5,101,0,0,2317,2308, + 1,0,0,0,2317,2312,1,0,0,0,2318,490,1,0,0,0,2319,2323,5,34,0,0,2320,2322, + 8,1,0,0,2321,2320,1,0,0,0,2322,2325,1,0,0,0,2323,2321,1,0,0,0,2323,2324, + 1,0,0,0,2324,2326,1,0,0,0,2325,2323,1,0,0,0,2326,2327,5,34,0,0,2327,492, + 1,0,0,0,2328,2332,3,481,240,0,2329,2331,7,2,0,0,2330,2329,1,0,0,0,2331, + 2334,1,0,0,0,2332,2330,1,0,0,0,2332,2333,1,0,0,0,2333,2350,1,0,0,0,2334, + 2332,1,0,0,0,2335,2337,3,483,241,0,2336,2338,7,2,0,0,2337,2336,1,0,0, + 0,2338,2339,1,0,0,0,2339,2337,1,0,0,0,2339,2340,1,0,0,0,2340,2350,1,0, + 0,0,2341,2345,5,39,0,0,2342,2344,9,0,0,0,2343,2342,1,0,0,0,2344,2347, + 1,0,0,0,2345,2346,1,0,0,0,2345,2343,1,0,0,0,2346,2348,1,0,0,0,2347,2345, + 1,0,0,0,2348,2350,5,39,0,0,2349,2328,1,0,0,0,2349,2335,1,0,0,0,2349,2341, + 1,0,0,0,2350,494,1,0,0,0,2351,2353,7,3,0,0,2352,2351,1,0,0,0,2353,2354, + 1,0,0,0,2354,2352,1,0,0,0,2354,2355,1,0,0,0,2355,2356,1,0,0,0,2356,2357, + 6,247,0,0,2357,496,1,0,0,0,2358,2359,5,59,0,0,2359,498,1,0,0,0,2360,2361, + 5,47,0,0,2361,2362,5,42,0,0,2362,2366,1,0,0,0,2363,2365,9,0,0,0,2364, + 2363,1,0,0,0,2365,2368,1,0,0,0,2366,2367,1,0,0,0,2366,2364,1,0,0,0,2367, + 2369,1,0,0,0,2368,2366,1,0,0,0,2369,2370,5,42,0,0,2370,2371,5,47,0,0, + 2371,2372,1,0,0,0,2372,2373,6,249,1,0,2373,500,1,0,0,0,2374,2375,5,47, + 0,0,2375,2376,5,47,0,0,2376,2380,1,0,0,0,2377,2379,8,4,0,0,2378,2377, + 1,0,0,0,2379,2382,1,0,0,0,2380,2378,1,0,0,0,2380,2381,1,0,0,0,2381,2383, + 1,0,0,0,2382,2380,1,0,0,0,2383,2384,6,250,1,0,2384,502,1,0,0,0,11,0,2302, + 2317,2323,2332,2339,2345,2349,2354,2366,2380,2,0,1,0,0,2,0 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + vtllexerLexerStaticData = staticData.release(); +} + +} + +VtlLexer::VtlLexer(CharStream *input) : Lexer(input) { + VtlLexer::initialize(); + _interpreter = new atn::LexerATNSimulator(this, *vtllexerLexerStaticData->atn, vtllexerLexerStaticData->decisionToDFA, vtllexerLexerStaticData->sharedContextCache); +} + +VtlLexer::~VtlLexer() { + delete _interpreter; +} + +std::string VtlLexer::getGrammarFileName() const { + return "Vtl.g4"; +} + +const std::vector& VtlLexer::getRuleNames() const { + return vtllexerLexerStaticData->ruleNames; +} + +const std::vector& VtlLexer::getChannelNames() const { + return vtllexerLexerStaticData->channelNames; +} + +const std::vector& VtlLexer::getModeNames() const { + return vtllexerLexerStaticData->modeNames; +} + +const dfa::Vocabulary& VtlLexer::getVocabulary() const { + return vtllexerLexerStaticData->vocabulary; +} + +antlr4::atn::SerializedATNView VtlLexer::getSerializedATN() const { + return vtllexerLexerStaticData->serializedATN; +} + +const atn::ATN& VtlLexer::getATN() const { + return *vtllexerLexerStaticData->atn; +} + + + + +void VtlLexer::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + vtllexerLexerInitialize(); +#else + ::antlr4::internal::call_once(vtllexerLexerOnceFlag, vtllexerLexerInitialize); +#endif +} diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.h new file mode 100644 index 000000000..1dfb9d4ed --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlLexer.h @@ -0,0 +1,97 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" + + + + +class VtlLexer : public antlr4::Lexer { +public: + enum { + LPAREN = 1, RPAREN = 2, QLPAREN = 3, QRPAREN = 4, GLPAREN = 5, GRPAREN = 6, + EQ = 7, LT = 8, MT = 9, ME = 10, NEQ = 11, LE = 12, PLUS = 13, MINUS = 14, + MUL = 15, DIV = 16, COMMA = 17, POINTER = 18, COLON = 19, ASSIGN = 20, + MEMBERSHIP = 21, EVAL = 22, IF = 23, CASE = 24, THEN = 25, ELSE = 26, + USING = 27, WITH = 28, CURRENT_DATE = 29, DATEDIFF = 30, DATEADD = 31, + YEAR_OP = 32, MONTH_OP = 33, DAYOFMONTH = 34, DAYOFYEAR = 35, DAYTOYEAR = 36, + DAYTOMONTH = 37, YEARTODAY = 38, MONTHTODAY = 39, ON = 40, DROP = 41, + KEEP = 42, CALC = 43, ATTRCALC = 44, RENAME = 45, AS = 46, AND = 47, + OR = 48, XOR = 49, NOT = 50, BETWEEN = 51, IN = 52, NOT_IN = 53, NULL_CONSTANT = 54, + ISNULL = 55, EX = 56, UNION = 57, DIFF = 58, SYMDIFF = 59, INTERSECT = 60, + RANDOM = 61, KEYS = 62, INTYEAR = 63, INTMONTH = 64, INTDAY = 65, CHECK = 66, + EXISTS_IN = 67, TO = 68, RETURN = 69, IMBALANCE = 70, ERRORCODE = 71, + ALL = 72, AGGREGATE = 73, ERRORLEVEL = 74, ORDER = 75, BY = 76, RANK = 77, + ASC = 78, DESC = 79, MIN = 80, MAX = 81, FIRST = 82, LAST = 83, INDEXOF = 84, + ABS = 85, KEY = 86, LN = 87, LOG = 88, TRUNC = 89, ROUND = 90, POWER = 91, + MOD = 92, LEN = 93, CONCAT = 94, TRIM = 95, UCASE = 96, LCASE = 97, + SUBSTR = 98, SUM = 99, AVG = 100, MEDIAN = 101, COUNT = 102, DIMENSION = 103, + MEASURE = 104, ATTRIBUTE = 105, FILTER = 106, MERGE = 107, EXP = 108, + ROLE = 109, VIRAL = 110, CHARSET_MATCH = 111, TYPE = 112, NVL = 113, + HIERARCHY = 114, OPTIONAL = 115, INVALID = 116, VALUE_DOMAIN = 117, + VARIABLE = 118, DATA = 119, STRUCTURE = 120, DATASET = 121, OPERATOR = 122, + DEFINE = 123, PUT_SYMBOL = 124, DATAPOINT = 125, HIERARCHICAL = 126, + RULESET = 127, RULE = 128, END = 129, ALTER_DATASET = 130, LTRIM = 131, + RTRIM = 132, INSTR = 133, REPLACE = 134, CEIL = 135, FLOOR = 136, SQRT = 137, + ANY = 138, SETDIFF = 139, STDDEV_POP = 140, STDDEV_SAMP = 141, VAR_POP = 142, + VAR_SAMP = 143, GROUP = 144, EXCEPT = 145, HAVING = 146, FIRST_VALUE = 147, + LAST_VALUE = 148, LAG = 149, LEAD = 150, RATIO_TO_REPORT = 151, OVER = 152, + PRECEDING = 153, FOLLOWING = 154, UNBOUNDED = 155, PARTITION = 156, + ROWS = 157, RANGE = 158, CURRENT = 159, VALID = 160, FILL_TIME_SERIES = 161, + FLOW_TO_STOCK = 162, STOCK_TO_FLOW = 163, TIMESHIFT = 164, MEASURES = 165, + NO_MEASURES = 166, CONDITION = 167, BOOLEAN = 168, DATE = 169, TIME_PERIOD = 170, + NUMBER = 171, STRING = 172, TIME = 173, INTEGER = 174, FLOAT = 175, + LIST = 176, RECORD = 177, RESTRICT = 178, YYYY = 179, MM = 180, DD = 181, + MAX_LENGTH = 182, REGEXP = 183, IS = 184, WHEN = 185, FROM = 186, AGGREGATES = 187, + POINTS = 188, POINT = 189, TOTAL = 190, PARTIAL = 191, ALWAYS = 192, + INNER_JOIN = 193, LEFT_JOIN = 194, CROSS_JOIN = 195, FULL_JOIN = 196, + MAPS_FROM = 197, MAPS_TO = 198, MAP_TO = 199, MAP_FROM = 200, RETURNS = 201, + PIVOT = 202, CUSTOMPIVOT = 203, UNPIVOT = 204, SUBSPACE = 205, APPLY = 206, + CONDITIONED = 207, PERIOD_INDICATOR = 208, SINGLE = 209, DURATION = 210, + TIME_AGG = 211, UNIT = 212, VALUE = 213, VALUEDOMAINS = 214, VARIABLES = 215, + INPUT = 216, OUTPUT = 217, CAST = 218, RULE_PRIORITY = 219, DATASET_PRIORITY = 220, + DEFAULT = 221, CHECK_DATAPOINT = 222, CHECK_HIERARCHY = 223, COMPUTED = 224, + NON_NULL = 225, NON_ZERO = 226, PARTIAL_NULL = 227, PARTIAL_ZERO = 228, + ALWAYS_NULL = 229, ALWAYS_ZERO = 230, COMPONENTS = 231, ALL_MEASURES = 232, + SCALAR = 233, COMPONENT = 234, DATAPOINT_ON_VD = 235, DATAPOINT_ON_VAR = 236, + HIERARCHICAL_ON_VD = 237, HIERARCHICAL_ON_VAR = 238, SET = 239, LANGUAGE = 240, + INTEGER_CONSTANT = 241, NUMBER_CONSTANT = 242, BOOLEAN_CONSTANT = 243, + STRING_CONSTANT = 244, IDENTIFIER = 245, WS = 246, EOL = 247, ML_COMMENT = 248, + SL_COMMENT = 249 + }; + + explicit VtlLexer(antlr4::CharStream *input); + + ~VtlLexer() override; + + + std::string getGrammarFileName() const override; + + const std::vector& getRuleNames() const override; + + const std::vector& getChannelNames() const override; + + const std::vector& getModeNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; + + antlr4::atn::SerializedATNView getSerializedATN() const override; + + const antlr4::atn::ATN& getATN() const override; + + // By default the static state used to implement the lexer is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); + +private: + + // Individual action functions triggered by action() above. + + // Individual semantic predicate functions triggered by sempred() above. + +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.cpp new file mode 100644 index 000000000..e7ce8a0ca --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.cpp @@ -0,0 +1,7 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlListener.h" + + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.h new file mode 100644 index 000000000..687afb4a4 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlListener.h @@ -0,0 +1,688 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" +#include "VtlParser.h" + + +/** + * This interface defines an abstract listener for a parse tree produced by VtlParser. + */ +class VtlListener : public antlr4::tree::ParseTreeListener { +public: + + virtual void enterStart(VtlParser::StartContext *ctx) = 0; + virtual void exitStart(VtlParser::StartContext *ctx) = 0; + + virtual void enterTemporaryAssignment(VtlParser::TemporaryAssignmentContext *ctx) = 0; + virtual void exitTemporaryAssignment(VtlParser::TemporaryAssignmentContext *ctx) = 0; + + virtual void enterPersistAssignment(VtlParser::PersistAssignmentContext *ctx) = 0; + virtual void exitPersistAssignment(VtlParser::PersistAssignmentContext *ctx) = 0; + + virtual void enterDefineExpression(VtlParser::DefineExpressionContext *ctx) = 0; + virtual void exitDefineExpression(VtlParser::DefineExpressionContext *ctx) = 0; + + virtual void enterVarIdExpr(VtlParser::VarIdExprContext *ctx) = 0; + virtual void exitVarIdExpr(VtlParser::VarIdExprContext *ctx) = 0; + + virtual void enterMembershipExpr(VtlParser::MembershipExprContext *ctx) = 0; + virtual void exitMembershipExpr(VtlParser::MembershipExprContext *ctx) = 0; + + virtual void enterInNotInExpr(VtlParser::InNotInExprContext *ctx) = 0; + virtual void exitInNotInExpr(VtlParser::InNotInExprContext *ctx) = 0; + + virtual void enterBooleanExpr(VtlParser::BooleanExprContext *ctx) = 0; + virtual void exitBooleanExpr(VtlParser::BooleanExprContext *ctx) = 0; + + virtual void enterComparisonExpr(VtlParser::ComparisonExprContext *ctx) = 0; + virtual void exitComparisonExpr(VtlParser::ComparisonExprContext *ctx) = 0; + + virtual void enterUnaryExpr(VtlParser::UnaryExprContext *ctx) = 0; + virtual void exitUnaryExpr(VtlParser::UnaryExprContext *ctx) = 0; + + virtual void enterFunctionsExpression(VtlParser::FunctionsExpressionContext *ctx) = 0; + virtual void exitFunctionsExpression(VtlParser::FunctionsExpressionContext *ctx) = 0; + + virtual void enterIfExpr(VtlParser::IfExprContext *ctx) = 0; + virtual void exitIfExpr(VtlParser::IfExprContext *ctx) = 0; + + virtual void enterClauseExpr(VtlParser::ClauseExprContext *ctx) = 0; + virtual void exitClauseExpr(VtlParser::ClauseExprContext *ctx) = 0; + + virtual void enterCaseExpr(VtlParser::CaseExprContext *ctx) = 0; + virtual void exitCaseExpr(VtlParser::CaseExprContext *ctx) = 0; + + virtual void enterArithmeticExpr(VtlParser::ArithmeticExprContext *ctx) = 0; + virtual void exitArithmeticExpr(VtlParser::ArithmeticExprContext *ctx) = 0; + + virtual void enterParenthesisExpr(VtlParser::ParenthesisExprContext *ctx) = 0; + virtual void exitParenthesisExpr(VtlParser::ParenthesisExprContext *ctx) = 0; + + virtual void enterConstantExpr(VtlParser::ConstantExprContext *ctx) = 0; + virtual void exitConstantExpr(VtlParser::ConstantExprContext *ctx) = 0; + + virtual void enterArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext *ctx) = 0; + virtual void exitArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext *ctx) = 0; + + virtual void enterArithmeticExprComp(VtlParser::ArithmeticExprCompContext *ctx) = 0; + virtual void exitArithmeticExprComp(VtlParser::ArithmeticExprCompContext *ctx) = 0; + + virtual void enterIfExprComp(VtlParser::IfExprCompContext *ctx) = 0; + virtual void exitIfExprComp(VtlParser::IfExprCompContext *ctx) = 0; + + virtual void enterComparisonExprComp(VtlParser::ComparisonExprCompContext *ctx) = 0; + virtual void exitComparisonExprComp(VtlParser::ComparisonExprCompContext *ctx) = 0; + + virtual void enterFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext *ctx) = 0; + virtual void exitFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext *ctx) = 0; + + virtual void enterCompId(VtlParser::CompIdContext *ctx) = 0; + virtual void exitCompId(VtlParser::CompIdContext *ctx) = 0; + + virtual void enterConstantExprComp(VtlParser::ConstantExprCompContext *ctx) = 0; + virtual void exitConstantExprComp(VtlParser::ConstantExprCompContext *ctx) = 0; + + virtual void enterArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext *ctx) = 0; + virtual void exitArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext *ctx) = 0; + + virtual void enterParenthesisExprComp(VtlParser::ParenthesisExprCompContext *ctx) = 0; + virtual void exitParenthesisExprComp(VtlParser::ParenthesisExprCompContext *ctx) = 0; + + virtual void enterInNotInExprComp(VtlParser::InNotInExprCompContext *ctx) = 0; + virtual void exitInNotInExprComp(VtlParser::InNotInExprCompContext *ctx) = 0; + + virtual void enterUnaryExprComp(VtlParser::UnaryExprCompContext *ctx) = 0; + virtual void exitUnaryExprComp(VtlParser::UnaryExprCompContext *ctx) = 0; + + virtual void enterCaseExprComp(VtlParser::CaseExprCompContext *ctx) = 0; + virtual void exitCaseExprComp(VtlParser::CaseExprCompContext *ctx) = 0; + + virtual void enterBooleanExprComp(VtlParser::BooleanExprCompContext *ctx) = 0; + virtual void exitBooleanExprComp(VtlParser::BooleanExprCompContext *ctx) = 0; + + virtual void enterGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext *ctx) = 0; + virtual void exitGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext *ctx) = 0; + + virtual void enterStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext *ctx) = 0; + virtual void exitStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext *ctx) = 0; + + virtual void enterNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext *ctx) = 0; + virtual void exitNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext *ctx) = 0; + + virtual void enterComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext *ctx) = 0; + virtual void exitComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext *ctx) = 0; + + virtual void enterTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext *ctx) = 0; + virtual void exitTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext *ctx) = 0; + + virtual void enterConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext *ctx) = 0; + virtual void exitConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext *ctx) = 0; + + virtual void enterAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext *ctx) = 0; + virtual void exitAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext *ctx) = 0; + + virtual void enterAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext *ctx) = 0; + virtual void exitAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext *ctx) = 0; + + virtual void enterJoinFunctions(VtlParser::JoinFunctionsContext *ctx) = 0; + virtual void exitJoinFunctions(VtlParser::JoinFunctionsContext *ctx) = 0; + + virtual void enterGenericFunctions(VtlParser::GenericFunctionsContext *ctx) = 0; + virtual void exitGenericFunctions(VtlParser::GenericFunctionsContext *ctx) = 0; + + virtual void enterStringFunctions(VtlParser::StringFunctionsContext *ctx) = 0; + virtual void exitStringFunctions(VtlParser::StringFunctionsContext *ctx) = 0; + + virtual void enterNumericFunctions(VtlParser::NumericFunctionsContext *ctx) = 0; + virtual void exitNumericFunctions(VtlParser::NumericFunctionsContext *ctx) = 0; + + virtual void enterComparisonFunctions(VtlParser::ComparisonFunctionsContext *ctx) = 0; + virtual void exitComparisonFunctions(VtlParser::ComparisonFunctionsContext *ctx) = 0; + + virtual void enterTimeFunctions(VtlParser::TimeFunctionsContext *ctx) = 0; + virtual void exitTimeFunctions(VtlParser::TimeFunctionsContext *ctx) = 0; + + virtual void enterSetFunctions(VtlParser::SetFunctionsContext *ctx) = 0; + virtual void exitSetFunctions(VtlParser::SetFunctionsContext *ctx) = 0; + + virtual void enterHierarchyFunctions(VtlParser::HierarchyFunctionsContext *ctx) = 0; + virtual void exitHierarchyFunctions(VtlParser::HierarchyFunctionsContext *ctx) = 0; + + virtual void enterValidationFunctions(VtlParser::ValidationFunctionsContext *ctx) = 0; + virtual void exitValidationFunctions(VtlParser::ValidationFunctionsContext *ctx) = 0; + + virtual void enterConditionalFunctions(VtlParser::ConditionalFunctionsContext *ctx) = 0; + virtual void exitConditionalFunctions(VtlParser::ConditionalFunctionsContext *ctx) = 0; + + virtual void enterAggregateFunctions(VtlParser::AggregateFunctionsContext *ctx) = 0; + virtual void exitAggregateFunctions(VtlParser::AggregateFunctionsContext *ctx) = 0; + + virtual void enterAnalyticFunctions(VtlParser::AnalyticFunctionsContext *ctx) = 0; + virtual void exitAnalyticFunctions(VtlParser::AnalyticFunctionsContext *ctx) = 0; + + virtual void enterDatasetClause(VtlParser::DatasetClauseContext *ctx) = 0; + virtual void exitDatasetClause(VtlParser::DatasetClauseContext *ctx) = 0; + + virtual void enterRenameClause(VtlParser::RenameClauseContext *ctx) = 0; + virtual void exitRenameClause(VtlParser::RenameClauseContext *ctx) = 0; + + virtual void enterAggrClause(VtlParser::AggrClauseContext *ctx) = 0; + virtual void exitAggrClause(VtlParser::AggrClauseContext *ctx) = 0; + + virtual void enterFilterClause(VtlParser::FilterClauseContext *ctx) = 0; + virtual void exitFilterClause(VtlParser::FilterClauseContext *ctx) = 0; + + virtual void enterCalcClause(VtlParser::CalcClauseContext *ctx) = 0; + virtual void exitCalcClause(VtlParser::CalcClauseContext *ctx) = 0; + + virtual void enterKeepOrDropClause(VtlParser::KeepOrDropClauseContext *ctx) = 0; + virtual void exitKeepOrDropClause(VtlParser::KeepOrDropClauseContext *ctx) = 0; + + virtual void enterPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext *ctx) = 0; + virtual void exitPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext *ctx) = 0; + + virtual void enterCustomPivotClause(VtlParser::CustomPivotClauseContext *ctx) = 0; + virtual void exitCustomPivotClause(VtlParser::CustomPivotClauseContext *ctx) = 0; + + virtual void enterSubspaceClause(VtlParser::SubspaceClauseContext *ctx) = 0; + virtual void exitSubspaceClause(VtlParser::SubspaceClauseContext *ctx) = 0; + + virtual void enterJoinExpr(VtlParser::JoinExprContext *ctx) = 0; + virtual void exitJoinExpr(VtlParser::JoinExprContext *ctx) = 0; + + virtual void enterDefOperator(VtlParser::DefOperatorContext *ctx) = 0; + virtual void exitDefOperator(VtlParser::DefOperatorContext *ctx) = 0; + + virtual void enterDefDatapointRuleset(VtlParser::DefDatapointRulesetContext *ctx) = 0; + virtual void exitDefDatapointRuleset(VtlParser::DefDatapointRulesetContext *ctx) = 0; + + virtual void enterDefHierarchical(VtlParser::DefHierarchicalContext *ctx) = 0; + virtual void exitDefHierarchical(VtlParser::DefHierarchicalContext *ctx) = 0; + + virtual void enterCallDataset(VtlParser::CallDatasetContext *ctx) = 0; + virtual void exitCallDataset(VtlParser::CallDatasetContext *ctx) = 0; + + virtual void enterEvalAtom(VtlParser::EvalAtomContext *ctx) = 0; + virtual void exitEvalAtom(VtlParser::EvalAtomContext *ctx) = 0; + + virtual void enterCastExprDataset(VtlParser::CastExprDatasetContext *ctx) = 0; + virtual void exitCastExprDataset(VtlParser::CastExprDatasetContext *ctx) = 0; + + virtual void enterCallComponent(VtlParser::CallComponentContext *ctx) = 0; + virtual void exitCallComponent(VtlParser::CallComponentContext *ctx) = 0; + + virtual void enterCastExprComponent(VtlParser::CastExprComponentContext *ctx) = 0; + virtual void exitCastExprComponent(VtlParser::CastExprComponentContext *ctx) = 0; + + virtual void enterEvalAtomComponent(VtlParser::EvalAtomComponentContext *ctx) = 0; + virtual void exitEvalAtomComponent(VtlParser::EvalAtomComponentContext *ctx) = 0; + + virtual void enterParameterComponent(VtlParser::ParameterComponentContext *ctx) = 0; + virtual void exitParameterComponent(VtlParser::ParameterComponentContext *ctx) = 0; + + virtual void enterParameter(VtlParser::ParameterContext *ctx) = 0; + virtual void exitParameter(VtlParser::ParameterContext *ctx) = 0; + + virtual void enterUnaryStringFunction(VtlParser::UnaryStringFunctionContext *ctx) = 0; + virtual void exitUnaryStringFunction(VtlParser::UnaryStringFunctionContext *ctx) = 0; + + virtual void enterSubstrAtom(VtlParser::SubstrAtomContext *ctx) = 0; + virtual void exitSubstrAtom(VtlParser::SubstrAtomContext *ctx) = 0; + + virtual void enterReplaceAtom(VtlParser::ReplaceAtomContext *ctx) = 0; + virtual void exitReplaceAtom(VtlParser::ReplaceAtomContext *ctx) = 0; + + virtual void enterInstrAtom(VtlParser::InstrAtomContext *ctx) = 0; + virtual void exitInstrAtom(VtlParser::InstrAtomContext *ctx) = 0; + + virtual void enterUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext *ctx) = 0; + virtual void exitUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext *ctx) = 0; + + virtual void enterSubstrAtomComponent(VtlParser::SubstrAtomComponentContext *ctx) = 0; + virtual void exitSubstrAtomComponent(VtlParser::SubstrAtomComponentContext *ctx) = 0; + + virtual void enterReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext *ctx) = 0; + virtual void exitReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext *ctx) = 0; + + virtual void enterInstrAtomComponent(VtlParser::InstrAtomComponentContext *ctx) = 0; + virtual void exitInstrAtomComponent(VtlParser::InstrAtomComponentContext *ctx) = 0; + + virtual void enterUnaryNumeric(VtlParser::UnaryNumericContext *ctx) = 0; + virtual void exitUnaryNumeric(VtlParser::UnaryNumericContext *ctx) = 0; + + virtual void enterUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext *ctx) = 0; + virtual void exitUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext *ctx) = 0; + + virtual void enterBinaryNumeric(VtlParser::BinaryNumericContext *ctx) = 0; + virtual void exitBinaryNumeric(VtlParser::BinaryNumericContext *ctx) = 0; + + virtual void enterUnaryNumericComponent(VtlParser::UnaryNumericComponentContext *ctx) = 0; + virtual void exitUnaryNumericComponent(VtlParser::UnaryNumericComponentContext *ctx) = 0; + + virtual void enterUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext *ctx) = 0; + virtual void exitUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext *ctx) = 0; + + virtual void enterBinaryNumericComponent(VtlParser::BinaryNumericComponentContext *ctx) = 0; + virtual void exitBinaryNumericComponent(VtlParser::BinaryNumericComponentContext *ctx) = 0; + + virtual void enterBetweenAtom(VtlParser::BetweenAtomContext *ctx) = 0; + virtual void exitBetweenAtom(VtlParser::BetweenAtomContext *ctx) = 0; + + virtual void enterCharsetMatchAtom(VtlParser::CharsetMatchAtomContext *ctx) = 0; + virtual void exitCharsetMatchAtom(VtlParser::CharsetMatchAtomContext *ctx) = 0; + + virtual void enterIsNullAtom(VtlParser::IsNullAtomContext *ctx) = 0; + virtual void exitIsNullAtom(VtlParser::IsNullAtomContext *ctx) = 0; + + virtual void enterExistInAtom(VtlParser::ExistInAtomContext *ctx) = 0; + virtual void exitExistInAtom(VtlParser::ExistInAtomContext *ctx) = 0; + + virtual void enterBetweenAtomComponent(VtlParser::BetweenAtomComponentContext *ctx) = 0; + virtual void exitBetweenAtomComponent(VtlParser::BetweenAtomComponentContext *ctx) = 0; + + virtual void enterCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext *ctx) = 0; + virtual void exitCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext *ctx) = 0; + + virtual void enterIsNullAtomComponent(VtlParser::IsNullAtomComponentContext *ctx) = 0; + virtual void exitIsNullAtomComponent(VtlParser::IsNullAtomComponentContext *ctx) = 0; + + virtual void enterPeriodAtom(VtlParser::PeriodAtomContext *ctx) = 0; + virtual void exitPeriodAtom(VtlParser::PeriodAtomContext *ctx) = 0; + + virtual void enterFillTimeAtom(VtlParser::FillTimeAtomContext *ctx) = 0; + virtual void exitFillTimeAtom(VtlParser::FillTimeAtomContext *ctx) = 0; + + virtual void enterFlowAtom(VtlParser::FlowAtomContext *ctx) = 0; + virtual void exitFlowAtom(VtlParser::FlowAtomContext *ctx) = 0; + + virtual void enterTimeShiftAtom(VtlParser::TimeShiftAtomContext *ctx) = 0; + virtual void exitTimeShiftAtom(VtlParser::TimeShiftAtomContext *ctx) = 0; + + virtual void enterTimeAggAtom(VtlParser::TimeAggAtomContext *ctx) = 0; + virtual void exitTimeAggAtom(VtlParser::TimeAggAtomContext *ctx) = 0; + + virtual void enterCurrentDateAtom(VtlParser::CurrentDateAtomContext *ctx) = 0; + virtual void exitCurrentDateAtom(VtlParser::CurrentDateAtomContext *ctx) = 0; + + virtual void enterDateDiffAtom(VtlParser::DateDiffAtomContext *ctx) = 0; + virtual void exitDateDiffAtom(VtlParser::DateDiffAtomContext *ctx) = 0; + + virtual void enterDateAddAtom(VtlParser::DateAddAtomContext *ctx) = 0; + virtual void exitDateAddAtom(VtlParser::DateAddAtomContext *ctx) = 0; + + virtual void enterYearAtom(VtlParser::YearAtomContext *ctx) = 0; + virtual void exitYearAtom(VtlParser::YearAtomContext *ctx) = 0; + + virtual void enterMonthAtom(VtlParser::MonthAtomContext *ctx) = 0; + virtual void exitMonthAtom(VtlParser::MonthAtomContext *ctx) = 0; + + virtual void enterDayOfMonthAtom(VtlParser::DayOfMonthAtomContext *ctx) = 0; + virtual void exitDayOfMonthAtom(VtlParser::DayOfMonthAtomContext *ctx) = 0; + + virtual void enterDayOfYearAtom(VtlParser::DayOfYearAtomContext *ctx) = 0; + virtual void exitDayOfYearAtom(VtlParser::DayOfYearAtomContext *ctx) = 0; + + virtual void enterDayToYearAtom(VtlParser::DayToYearAtomContext *ctx) = 0; + virtual void exitDayToYearAtom(VtlParser::DayToYearAtomContext *ctx) = 0; + + virtual void enterDayToMonthAtom(VtlParser::DayToMonthAtomContext *ctx) = 0; + virtual void exitDayToMonthAtom(VtlParser::DayToMonthAtomContext *ctx) = 0; + + virtual void enterYearTodayAtom(VtlParser::YearTodayAtomContext *ctx) = 0; + virtual void exitYearTodayAtom(VtlParser::YearTodayAtomContext *ctx) = 0; + + virtual void enterMonthTodayAtom(VtlParser::MonthTodayAtomContext *ctx) = 0; + virtual void exitMonthTodayAtom(VtlParser::MonthTodayAtomContext *ctx) = 0; + + virtual void enterPeriodAtomComponent(VtlParser::PeriodAtomComponentContext *ctx) = 0; + virtual void exitPeriodAtomComponent(VtlParser::PeriodAtomComponentContext *ctx) = 0; + + virtual void enterFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext *ctx) = 0; + virtual void exitFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext *ctx) = 0; + + virtual void enterFlowAtomComponent(VtlParser::FlowAtomComponentContext *ctx) = 0; + virtual void exitFlowAtomComponent(VtlParser::FlowAtomComponentContext *ctx) = 0; + + virtual void enterTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext *ctx) = 0; + virtual void exitTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext *ctx) = 0; + + virtual void enterTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext *ctx) = 0; + virtual void exitTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext *ctx) = 0; + + virtual void enterCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext *ctx) = 0; + virtual void exitCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext *ctx) = 0; + + virtual void enterDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext *ctx) = 0; + virtual void exitDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext *ctx) = 0; + + virtual void enterDateAddAtomComponent(VtlParser::DateAddAtomComponentContext *ctx) = 0; + virtual void exitDateAddAtomComponent(VtlParser::DateAddAtomComponentContext *ctx) = 0; + + virtual void enterYearAtomComponent(VtlParser::YearAtomComponentContext *ctx) = 0; + virtual void exitYearAtomComponent(VtlParser::YearAtomComponentContext *ctx) = 0; + + virtual void enterMonthAtomComponent(VtlParser::MonthAtomComponentContext *ctx) = 0; + virtual void exitMonthAtomComponent(VtlParser::MonthAtomComponentContext *ctx) = 0; + + virtual void enterDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext *ctx) = 0; + virtual void exitDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext *ctx) = 0; + + virtual void enterDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext *ctx) = 0; + virtual void exitDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext *ctx) = 0; + + virtual void enterDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext *ctx) = 0; + virtual void exitDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext *ctx) = 0; + + virtual void enterDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext *ctx) = 0; + virtual void exitDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext *ctx) = 0; + + virtual void enterYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext *ctx) = 0; + virtual void exitYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext *ctx) = 0; + + virtual void enterMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext *ctx) = 0; + virtual void exitMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext *ctx) = 0; + + virtual void enterUnionAtom(VtlParser::UnionAtomContext *ctx) = 0; + virtual void exitUnionAtom(VtlParser::UnionAtomContext *ctx) = 0; + + virtual void enterIntersectAtom(VtlParser::IntersectAtomContext *ctx) = 0; + virtual void exitIntersectAtom(VtlParser::IntersectAtomContext *ctx) = 0; + + virtual void enterSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext *ctx) = 0; + virtual void exitSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext *ctx) = 0; + + virtual void enterHierarchyOperators(VtlParser::HierarchyOperatorsContext *ctx) = 0; + virtual void exitHierarchyOperators(VtlParser::HierarchyOperatorsContext *ctx) = 0; + + virtual void enterValidateDPruleset(VtlParser::ValidateDPrulesetContext *ctx) = 0; + virtual void exitValidateDPruleset(VtlParser::ValidateDPrulesetContext *ctx) = 0; + + virtual void enterValidateHRruleset(VtlParser::ValidateHRrulesetContext *ctx) = 0; + virtual void exitValidateHRruleset(VtlParser::ValidateHRrulesetContext *ctx) = 0; + + virtual void enterValidationSimple(VtlParser::ValidationSimpleContext *ctx) = 0; + virtual void exitValidationSimple(VtlParser::ValidationSimpleContext *ctx) = 0; + + virtual void enterNvlAtom(VtlParser::NvlAtomContext *ctx) = 0; + virtual void exitNvlAtom(VtlParser::NvlAtomContext *ctx) = 0; + + virtual void enterNvlAtomComponent(VtlParser::NvlAtomComponentContext *ctx) = 0; + virtual void exitNvlAtomComponent(VtlParser::NvlAtomComponentContext *ctx) = 0; + + virtual void enterAggrComp(VtlParser::AggrCompContext *ctx) = 0; + virtual void exitAggrComp(VtlParser::AggrCompContext *ctx) = 0; + + virtual void enterCountAggrComp(VtlParser::CountAggrCompContext *ctx) = 0; + virtual void exitCountAggrComp(VtlParser::CountAggrCompContext *ctx) = 0; + + virtual void enterAggrDataset(VtlParser::AggrDatasetContext *ctx) = 0; + virtual void exitAggrDataset(VtlParser::AggrDatasetContext *ctx) = 0; + + virtual void enterAnSimpleFunction(VtlParser::AnSimpleFunctionContext *ctx) = 0; + virtual void exitAnSimpleFunction(VtlParser::AnSimpleFunctionContext *ctx) = 0; + + virtual void enterLagOrLeadAn(VtlParser::LagOrLeadAnContext *ctx) = 0; + virtual void exitLagOrLeadAn(VtlParser::LagOrLeadAnContext *ctx) = 0; + + virtual void enterRatioToReportAn(VtlParser::RatioToReportAnContext *ctx) = 0; + virtual void exitRatioToReportAn(VtlParser::RatioToReportAnContext *ctx) = 0; + + virtual void enterAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext *ctx) = 0; + virtual void exitAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext *ctx) = 0; + + virtual void enterLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext *ctx) = 0; + virtual void exitLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext *ctx) = 0; + + virtual void enterRankAnComponent(VtlParser::RankAnComponentContext *ctx) = 0; + virtual void exitRankAnComponent(VtlParser::RankAnComponentContext *ctx) = 0; + + virtual void enterRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext *ctx) = 0; + virtual void exitRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext *ctx) = 0; + + virtual void enterRenameClauseItem(VtlParser::RenameClauseItemContext *ctx) = 0; + virtual void exitRenameClauseItem(VtlParser::RenameClauseItemContext *ctx) = 0; + + virtual void enterAggregateClause(VtlParser::AggregateClauseContext *ctx) = 0; + virtual void exitAggregateClause(VtlParser::AggregateClauseContext *ctx) = 0; + + virtual void enterAggrFunctionClause(VtlParser::AggrFunctionClauseContext *ctx) = 0; + virtual void exitAggrFunctionClause(VtlParser::AggrFunctionClauseContext *ctx) = 0; + + virtual void enterCalcClauseItem(VtlParser::CalcClauseItemContext *ctx) = 0; + virtual void exitCalcClauseItem(VtlParser::CalcClauseItemContext *ctx) = 0; + + virtual void enterSubspaceClauseItem(VtlParser::SubspaceClauseItemContext *ctx) = 0; + virtual void exitSubspaceClauseItem(VtlParser::SubspaceClauseItemContext *ctx) = 0; + + virtual void enterSimpleScalar(VtlParser::SimpleScalarContext *ctx) = 0; + virtual void exitSimpleScalar(VtlParser::SimpleScalarContext *ctx) = 0; + + virtual void enterScalarWithCast(VtlParser::ScalarWithCastContext *ctx) = 0; + virtual void exitScalarWithCast(VtlParser::ScalarWithCastContext *ctx) = 0; + + virtual void enterJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext *ctx) = 0; + virtual void exitJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext *ctx) = 0; + + virtual void enterJoinClause(VtlParser::JoinClauseContext *ctx) = 0; + virtual void exitJoinClause(VtlParser::JoinClauseContext *ctx) = 0; + + virtual void enterJoinClauseItem(VtlParser::JoinClauseItemContext *ctx) = 0; + virtual void exitJoinClauseItem(VtlParser::JoinClauseItemContext *ctx) = 0; + + virtual void enterJoinBody(VtlParser::JoinBodyContext *ctx) = 0; + virtual void exitJoinBody(VtlParser::JoinBodyContext *ctx) = 0; + + virtual void enterJoinApplyClause(VtlParser::JoinApplyClauseContext *ctx) = 0; + virtual void exitJoinApplyClause(VtlParser::JoinApplyClauseContext *ctx) = 0; + + virtual void enterPartitionByClause(VtlParser::PartitionByClauseContext *ctx) = 0; + virtual void exitPartitionByClause(VtlParser::PartitionByClauseContext *ctx) = 0; + + virtual void enterOrderByClause(VtlParser::OrderByClauseContext *ctx) = 0; + virtual void exitOrderByClause(VtlParser::OrderByClauseContext *ctx) = 0; + + virtual void enterOrderByItem(VtlParser::OrderByItemContext *ctx) = 0; + virtual void exitOrderByItem(VtlParser::OrderByItemContext *ctx) = 0; + + virtual void enterWindowingClause(VtlParser::WindowingClauseContext *ctx) = 0; + virtual void exitWindowingClause(VtlParser::WindowingClauseContext *ctx) = 0; + + virtual void enterSignedInteger(VtlParser::SignedIntegerContext *ctx) = 0; + virtual void exitSignedInteger(VtlParser::SignedIntegerContext *ctx) = 0; + + virtual void enterSignedNumber(VtlParser::SignedNumberContext *ctx) = 0; + virtual void exitSignedNumber(VtlParser::SignedNumberContext *ctx) = 0; + + virtual void enterLimitClauseItem(VtlParser::LimitClauseItemContext *ctx) = 0; + virtual void exitLimitClauseItem(VtlParser::LimitClauseItemContext *ctx) = 0; + + virtual void enterGroupByOrExcept(VtlParser::GroupByOrExceptContext *ctx) = 0; + virtual void exitGroupByOrExcept(VtlParser::GroupByOrExceptContext *ctx) = 0; + + virtual void enterGroupAll(VtlParser::GroupAllContext *ctx) = 0; + virtual void exitGroupAll(VtlParser::GroupAllContext *ctx) = 0; + + virtual void enterHavingClause(VtlParser::HavingClauseContext *ctx) = 0; + virtual void exitHavingClause(VtlParser::HavingClauseContext *ctx) = 0; + + virtual void enterParameterItem(VtlParser::ParameterItemContext *ctx) = 0; + virtual void exitParameterItem(VtlParser::ParameterItemContext *ctx) = 0; + + virtual void enterOutputParameterType(VtlParser::OutputParameterTypeContext *ctx) = 0; + virtual void exitOutputParameterType(VtlParser::OutputParameterTypeContext *ctx) = 0; + + virtual void enterOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext *ctx) = 0; + virtual void exitOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext *ctx) = 0; + + virtual void enterInputParameterType(VtlParser::InputParameterTypeContext *ctx) = 0; + virtual void exitInputParameterType(VtlParser::InputParameterTypeContext *ctx) = 0; + + virtual void enterRulesetType(VtlParser::RulesetTypeContext *ctx) = 0; + virtual void exitRulesetType(VtlParser::RulesetTypeContext *ctx) = 0; + + virtual void enterScalarType(VtlParser::ScalarTypeContext *ctx) = 0; + virtual void exitScalarType(VtlParser::ScalarTypeContext *ctx) = 0; + + virtual void enterComponentType(VtlParser::ComponentTypeContext *ctx) = 0; + virtual void exitComponentType(VtlParser::ComponentTypeContext *ctx) = 0; + + virtual void enterDatasetType(VtlParser::DatasetTypeContext *ctx) = 0; + virtual void exitDatasetType(VtlParser::DatasetTypeContext *ctx) = 0; + + virtual void enterEvalDatasetType(VtlParser::EvalDatasetTypeContext *ctx) = 0; + virtual void exitEvalDatasetType(VtlParser::EvalDatasetTypeContext *ctx) = 0; + + virtual void enterScalarSetType(VtlParser::ScalarSetTypeContext *ctx) = 0; + virtual void exitScalarSetType(VtlParser::ScalarSetTypeContext *ctx) = 0; + + virtual void enterDataPoint(VtlParser::DataPointContext *ctx) = 0; + virtual void exitDataPoint(VtlParser::DataPointContext *ctx) = 0; + + virtual void enterDataPointVd(VtlParser::DataPointVdContext *ctx) = 0; + virtual void exitDataPointVd(VtlParser::DataPointVdContext *ctx) = 0; + + virtual void enterDataPointVar(VtlParser::DataPointVarContext *ctx) = 0; + virtual void exitDataPointVar(VtlParser::DataPointVarContext *ctx) = 0; + + virtual void enterHrRulesetType(VtlParser::HrRulesetTypeContext *ctx) = 0; + virtual void exitHrRulesetType(VtlParser::HrRulesetTypeContext *ctx) = 0; + + virtual void enterHrRulesetVdType(VtlParser::HrRulesetVdTypeContext *ctx) = 0; + virtual void exitHrRulesetVdType(VtlParser::HrRulesetVdTypeContext *ctx) = 0; + + virtual void enterHrRulesetVarType(VtlParser::HrRulesetVarTypeContext *ctx) = 0; + virtual void exitHrRulesetVarType(VtlParser::HrRulesetVarTypeContext *ctx) = 0; + + virtual void enterValueDomainName(VtlParser::ValueDomainNameContext *ctx) = 0; + virtual void exitValueDomainName(VtlParser::ValueDomainNameContext *ctx) = 0; + + virtual void enterRulesetID(VtlParser::RulesetIDContext *ctx) = 0; + virtual void exitRulesetID(VtlParser::RulesetIDContext *ctx) = 0; + + virtual void enterRulesetSignature(VtlParser::RulesetSignatureContext *ctx) = 0; + virtual void exitRulesetSignature(VtlParser::RulesetSignatureContext *ctx) = 0; + + virtual void enterSignature(VtlParser::SignatureContext *ctx) = 0; + virtual void exitSignature(VtlParser::SignatureContext *ctx) = 0; + + virtual void enterRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext *ctx) = 0; + virtual void exitRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext *ctx) = 0; + + virtual void enterRuleItemDatapoint(VtlParser::RuleItemDatapointContext *ctx) = 0; + virtual void exitRuleItemDatapoint(VtlParser::RuleItemDatapointContext *ctx) = 0; + + virtual void enterRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext *ctx) = 0; + virtual void exitRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext *ctx) = 0; + + virtual void enterRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext *ctx) = 0; + virtual void exitRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext *ctx) = 0; + + virtual void enterHierRuleSignature(VtlParser::HierRuleSignatureContext *ctx) = 0; + virtual void exitHierRuleSignature(VtlParser::HierRuleSignatureContext *ctx) = 0; + + virtual void enterValueDomainSignature(VtlParser::ValueDomainSignatureContext *ctx) = 0; + virtual void exitValueDomainSignature(VtlParser::ValueDomainSignatureContext *ctx) = 0; + + virtual void enterCodeItemRelation(VtlParser::CodeItemRelationContext *ctx) = 0; + virtual void exitCodeItemRelation(VtlParser::CodeItemRelationContext *ctx) = 0; + + virtual void enterCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext *ctx) = 0; + virtual void exitCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext *ctx) = 0; + + virtual void enterValueDomainValue(VtlParser::ValueDomainValueContext *ctx) = 0; + virtual void exitValueDomainValue(VtlParser::ValueDomainValueContext *ctx) = 0; + + virtual void enterConditionConstraint(VtlParser::ConditionConstraintContext *ctx) = 0; + virtual void exitConditionConstraint(VtlParser::ConditionConstraintContext *ctx) = 0; + + virtual void enterRangeConstraint(VtlParser::RangeConstraintContext *ctx) = 0; + virtual void exitRangeConstraint(VtlParser::RangeConstraintContext *ctx) = 0; + + virtual void enterCompConstraint(VtlParser::CompConstraintContext *ctx) = 0; + virtual void exitCompConstraint(VtlParser::CompConstraintContext *ctx) = 0; + + virtual void enterMultModifier(VtlParser::MultModifierContext *ctx) = 0; + virtual void exitMultModifier(VtlParser::MultModifierContext *ctx) = 0; + + virtual void enterValidationOutput(VtlParser::ValidationOutputContext *ctx) = 0; + virtual void exitValidationOutput(VtlParser::ValidationOutputContext *ctx) = 0; + + virtual void enterValidationMode(VtlParser::ValidationModeContext *ctx) = 0; + virtual void exitValidationMode(VtlParser::ValidationModeContext *ctx) = 0; + + virtual void enterConditionClause(VtlParser::ConditionClauseContext *ctx) = 0; + virtual void exitConditionClause(VtlParser::ConditionClauseContext *ctx) = 0; + + virtual void enterInputMode(VtlParser::InputModeContext *ctx) = 0; + virtual void exitInputMode(VtlParser::InputModeContext *ctx) = 0; + + virtual void enterImbalanceExpr(VtlParser::ImbalanceExprContext *ctx) = 0; + virtual void exitImbalanceExpr(VtlParser::ImbalanceExprContext *ctx) = 0; + + virtual void enterInputModeHierarchy(VtlParser::InputModeHierarchyContext *ctx) = 0; + virtual void exitInputModeHierarchy(VtlParser::InputModeHierarchyContext *ctx) = 0; + + virtual void enterOutputModeHierarchy(VtlParser::OutputModeHierarchyContext *ctx) = 0; + virtual void exitOutputModeHierarchy(VtlParser::OutputModeHierarchyContext *ctx) = 0; + + virtual void enterAlias(VtlParser::AliasContext *ctx) = 0; + virtual void exitAlias(VtlParser::AliasContext *ctx) = 0; + + virtual void enterVarID(VtlParser::VarIDContext *ctx) = 0; + virtual void exitVarID(VtlParser::VarIDContext *ctx) = 0; + + virtual void enterSimpleComponentId(VtlParser::SimpleComponentIdContext *ctx) = 0; + virtual void exitSimpleComponentId(VtlParser::SimpleComponentIdContext *ctx) = 0; + + virtual void enterComponentID(VtlParser::ComponentIDContext *ctx) = 0; + virtual void exitComponentID(VtlParser::ComponentIDContext *ctx) = 0; + + virtual void enterLists(VtlParser::ListsContext *ctx) = 0; + virtual void exitLists(VtlParser::ListsContext *ctx) = 0; + + virtual void enterErCode(VtlParser::ErCodeContext *ctx) = 0; + virtual void exitErCode(VtlParser::ErCodeContext *ctx) = 0; + + virtual void enterErLevel(VtlParser::ErLevelContext *ctx) = 0; + virtual void exitErLevel(VtlParser::ErLevelContext *ctx) = 0; + + virtual void enterComparisonOperand(VtlParser::ComparisonOperandContext *ctx) = 0; + virtual void exitComparisonOperand(VtlParser::ComparisonOperandContext *ctx) = 0; + + virtual void enterOptionalExpr(VtlParser::OptionalExprContext *ctx) = 0; + virtual void exitOptionalExpr(VtlParser::OptionalExprContext *ctx) = 0; + + virtual void enterOptionalExprComponent(VtlParser::OptionalExprComponentContext *ctx) = 0; + virtual void exitOptionalExprComponent(VtlParser::OptionalExprComponentContext *ctx) = 0; + + virtual void enterComponentRole(VtlParser::ComponentRoleContext *ctx) = 0; + virtual void exitComponentRole(VtlParser::ComponentRoleContext *ctx) = 0; + + virtual void enterViralAttribute(VtlParser::ViralAttributeContext *ctx) = 0; + virtual void exitViralAttribute(VtlParser::ViralAttributeContext *ctx) = 0; + + virtual void enterValueDomainID(VtlParser::ValueDomainIDContext *ctx) = 0; + virtual void exitValueDomainID(VtlParser::ValueDomainIDContext *ctx) = 0; + + virtual void enterOperatorID(VtlParser::OperatorIDContext *ctx) = 0; + virtual void exitOperatorID(VtlParser::OperatorIDContext *ctx) = 0; + + virtual void enterRoutineName(VtlParser::RoutineNameContext *ctx) = 0; + virtual void exitRoutineName(VtlParser::RoutineNameContext *ctx) = 0; + + virtual void enterConstant(VtlParser::ConstantContext *ctx) = 0; + virtual void exitConstant(VtlParser::ConstantContext *ctx) = 0; + + virtual void enterBasicScalarType(VtlParser::BasicScalarTypeContext *ctx) = 0; + virtual void exitBasicScalarType(VtlParser::BasicScalarTypeContext *ctx) = 0; + + virtual void enterRetainType(VtlParser::RetainTypeContext *ctx) = 0; + virtual void exitRetainType(VtlParser::RetainTypeContext *ctx) = 0; + + +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.cpp new file mode 100644 index 000000000..224afe57d --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.cpp @@ -0,0 +1,19927 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlListener.h" +#include "VtlVisitor.h" + +#include "VtlParser.h" + + +using namespace antlrcpp; + +using namespace antlr4; + +namespace { + +struct VtlParserStaticData final { + VtlParserStaticData(std::vector ruleNames, + std::vector literalNames, + std::vector symbolicNames) + : ruleNames(std::move(ruleNames)), literalNames(std::move(literalNames)), + symbolicNames(std::move(symbolicNames)), + vocabulary(this->literalNames, this->symbolicNames) {} + + VtlParserStaticData(const VtlParserStaticData&) = delete; + VtlParserStaticData(VtlParserStaticData&&) = delete; + VtlParserStaticData& operator=(const VtlParserStaticData&) = delete; + VtlParserStaticData& operator=(VtlParserStaticData&&) = delete; + + std::vector decisionToDFA; + antlr4::atn::PredictionContextCache sharedContextCache; + const std::vector ruleNames; + const std::vector literalNames; + const std::vector symbolicNames; + const antlr4::dfa::Vocabulary vocabulary; + antlr4::atn::SerializedATNView serializedATN; + std::unique_ptr atn; +}; + +::antlr4::internal::OnceFlag vtlParserOnceFlag; +#if ANTLR4_USE_THREAD_LOCAL_CACHE +static thread_local +#endif +VtlParserStaticData *vtlParserStaticData = nullptr; + +void vtlParserInitialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + if (vtlParserStaticData != nullptr) { + return; + } +#else + assert(vtlParserStaticData == nullptr); +#endif + auto staticData = std::make_unique( + std::vector{ + "start", "statement", "expr", "exprComponent", "functionsComponents", + "functions", "datasetClause", "renameClause", "aggrClause", "filterClause", + "calcClause", "keepOrDropClause", "pivotOrUnpivotClause", "customPivotClause", + "subspaceClause", "joinOperators", "defOperators", "genericOperators", + "genericOperatorsComponent", "parameterComponent", "parameter", "stringOperators", + "stringOperatorsComponent", "numericOperators", "numericOperatorsComponent", + "comparisonOperators", "comparisonOperatorsComponent", "timeOperators", + "timeOperatorsComponent", "setOperators", "hierarchyOperators", "validationOperators", + "conditionalOperators", "conditionalOperatorsComponent", "aggrOperators", + "aggrOperatorsGrouping", "anFunction", "anFunctionComponent", "renameClauseItem", + "aggregateClause", "aggrFunctionClause", "calcClauseItem", "subspaceClauseItem", + "scalarItem", "joinClauseWithoutUsing", "joinClause", "joinClauseItem", + "joinBody", "joinApplyClause", "partitionByClause", "orderByClause", + "orderByItem", "windowingClause", "signedInteger", "signedNumber", + "limitClauseItem", "groupingClause", "havingClause", "parameterItem", + "outputParameterType", "outputParameterTypeComponent", "inputParameterType", + "rulesetType", "scalarType", "componentType", "datasetType", "evalDatasetType", + "scalarSetType", "dpRuleset", "hrRuleset", "valueDomainName", "rulesetID", + "rulesetSignature", "signature", "ruleClauseDatapoint", "ruleItemDatapoint", + "ruleClauseHierarchical", "ruleItemHierarchical", "hierRuleSignature", + "valueDomainSignature", "codeItemRelation", "codeItemRelationClause", + "valueDomainValue", "scalarTypeConstraint", "compConstraint", "multModifier", + "validationOutput", "validationMode", "conditionClause", "inputMode", + "imbalanceExpr", "inputModeHierarchy", "outputModeHierarchy", "alias", + "varID", "simpleComponentId", "componentID", "lists", "erCode", "erLevel", + "comparisonOperand", "optionalExpr", "optionalExprComponent", "componentRole", + "viralAttribute", "valueDomainID", "operatorID", "routineName", "constant", + "basicScalarType", "retainType" + }, + std::vector{ + "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'='", "'<'", "'>'", + "'>='", "'<>'", "'<='", "'+'", "'-'", "'*'", "'/'", "','", "'->'", + "':'", "':='", "'#'", "'eval'", "'if'", "'case'", "'then'", "'else'", + "'using'", "'with'", "'current_date'", "'datediff'", "'dateadd'", + "'getyear'", "'getmonth'", "'dayofmonth'", "'dayofyear'", "'daytoyear'", + "'daytomonth'", "'yeartoday'", "'monthtoday'", "'on'", "'drop'", "'keep'", + "'calc'", "'attrcalc'", "'rename'", "'as'", "'and'", "'or'", "'xor'", + "'not'", "'between'", "'in'", "'not_in'", "'null'", "'isnull'", "'ex'", + "'union'", "'diff'", "'symdiff'", "'intersect'", "'random'", "'keys'", + "'intyear'", "'intmonth'", "'intday'", "'check'", "'exists_in'", "'to'", + "'return'", "'imbalance'", "'errorcode'", "'all'", "'aggr'", "'errorlevel'", + "'order'", "'by'", "'rank'", "'asc'", "'desc'", "'min'", "'max'", + "'first'", "'last'", "'indexof'", "'abs'", "'key'", "'ln'", "'log'", + "'trunc'", "'round'", "'power'", "'mod'", "'length'", "'||'", "'trim'", + "'upper'", "'lower'", "'substr'", "'sum'", "'avg'", "'median'", "'count'", + "'identifier'", "'measure'", "'attribute'", "'filter'", "'merge'", + "'exp'", "'componentRole'", "'viral'", "'match_characters'", "'type'", + "'nvl'", "'hierarchy'", "'_'", "'invalid'", "'valuedomain'", "'variable'", + "'data'", "'structure'", "'dataset'", "'operator'", "'define'", "'<-'", + "'datapoint'", "'hierarchical'", "'ruleset'", "'rule'", "'end'", "'alterDataset'", + "'ltrim'", "'rtrim'", "'instr'", "'replace'", "'ceil'", "'floor'", + "'sqrt'", "'any'", "'setdiff'", "'stddev_pop'", "'stddev_samp'", "'var_pop'", + "'var_samp'", "'group'", "'except'", "'having'", "'first_value'", + "'last_value'", "'lag'", "'lead'", "'ratio_to_report'", "'over'", + "'preceding'", "'following'", "'unbounded'", "'partition'", "'rows'", + "'range'", "'current'", "'valid'", "'fill_time_series'", "'flow_to_stock'", + "'stock_to_flow'", "'timeshift'", "'measures'", "'no_measures'", "'condition'", + "'boolean'", "'date'", "'time_period'", "'number'", "'string'", "'time'", + "'integer'", "'float'", "'list'", "'record'", "'restrict'", "'yyyy'", + "'mm'", "'dd'", "'maxLength'", "'regexp'", "'is'", "'when'", "'from'", + "'aggregates'", "'points'", "'point'", "'total'", "'partial'", "'always'", + "'inner_join'", "'left_join'", "'cross_join'", "'full_join'", "'maps_from'", + "'maps_to'", "'map_to'", "'map_from'", "'returns'", "'pivot'", "'customPivot'", + "'unpivot'", "'sub'", "'apply'", "'conditioned'", "'period_indicator'", + "'single'", "'duration'", "'time_agg'", "'unit'", "'Value'", "'valuedomains'", + "'variables'", "'input'", "'output'", "'cast'", "'rule_priority'", + "'dataset_priority'", "'default'", "'check_datapoint'", "'check_hierarchy'", + "'computed'", "'non_null'", "'non_zero'", "'partial_null'", "'partial_zero'", + "'always_null'", "'always_zero'", "'components'", "'all_measures'", + "'scalar'", "'component'", "'datapoint_on_valuedomains'", "'datapoint_on_variables'", + "'hierarchical_on_valuedomains'", "'hierarchical_on_variables'", "'set'", + "'language'", "", "", "", "", "", "", "';'" + }, + std::vector{ + "", "LPAREN", "RPAREN", "QLPAREN", "QRPAREN", "GLPAREN", "GRPAREN", + "EQ", "LT", "MT", "ME", "NEQ", "LE", "PLUS", "MINUS", "MUL", "DIV", + "COMMA", "POINTER", "COLON", "ASSIGN", "MEMBERSHIP", "EVAL", "IF", + "CASE", "THEN", "ELSE", "USING", "WITH", "CURRENT_DATE", "DATEDIFF", + "DATEADD", "YEAR_OP", "MONTH_OP", "DAYOFMONTH", "DAYOFYEAR", "DAYTOYEAR", + "DAYTOMONTH", "YEARTODAY", "MONTHTODAY", "ON", "DROP", "KEEP", "CALC", + "ATTRCALC", "RENAME", "AS", "AND", "OR", "XOR", "NOT", "BETWEEN", + "IN", "NOT_IN", "NULL_CONSTANT", "ISNULL", "EX", "UNION", "DIFF", + "SYMDIFF", "INTERSECT", "RANDOM", "KEYS", "INTYEAR", "INTMONTH", "INTDAY", + "CHECK", "EXISTS_IN", "TO", "RETURN", "IMBALANCE", "ERRORCODE", "ALL", + "AGGREGATE", "ERRORLEVEL", "ORDER", "BY", "RANK", "ASC", "DESC", "MIN", + "MAX", "FIRST", "LAST", "INDEXOF", "ABS", "KEY", "LN", "LOG", "TRUNC", + "ROUND", "POWER", "MOD", "LEN", "CONCAT", "TRIM", "UCASE", "LCASE", + "SUBSTR", "SUM", "AVG", "MEDIAN", "COUNT", "DIMENSION", "MEASURE", + "ATTRIBUTE", "FILTER", "MERGE", "EXP", "ROLE", "VIRAL", "CHARSET_MATCH", + "TYPE", "NVL", "HIERARCHY", "OPTIONAL", "INVALID", "VALUE_DOMAIN", + "VARIABLE", "DATA", "STRUCTURE", "DATASET", "OPERATOR", "DEFINE", + "PUT_SYMBOL", "DATAPOINT", "HIERARCHICAL", "RULESET", "RULE", "END", + "ALTER_DATASET", "LTRIM", "RTRIM", "INSTR", "REPLACE", "CEIL", "FLOOR", + "SQRT", "ANY", "SETDIFF", "STDDEV_POP", "STDDEV_SAMP", "VAR_POP", + "VAR_SAMP", "GROUP", "EXCEPT", "HAVING", "FIRST_VALUE", "LAST_VALUE", + "LAG", "LEAD", "RATIO_TO_REPORT", "OVER", "PRECEDING", "FOLLOWING", + "UNBOUNDED", "PARTITION", "ROWS", "RANGE", "CURRENT", "VALID", "FILL_TIME_SERIES", + "FLOW_TO_STOCK", "STOCK_TO_FLOW", "TIMESHIFT", "MEASURES", "NO_MEASURES", + "CONDITION", "BOOLEAN", "DATE", "TIME_PERIOD", "NUMBER", "STRING", + "TIME", "INTEGER", "FLOAT", "LIST", "RECORD", "RESTRICT", "YYYY", + "MM", "DD", "MAX_LENGTH", "REGEXP", "IS", "WHEN", "FROM", "AGGREGATES", + "POINTS", "POINT", "TOTAL", "PARTIAL", "ALWAYS", "INNER_JOIN", "LEFT_JOIN", + "CROSS_JOIN", "FULL_JOIN", "MAPS_FROM", "MAPS_TO", "MAP_TO", "MAP_FROM", + "RETURNS", "PIVOT", "CUSTOMPIVOT", "UNPIVOT", "SUBSPACE", "APPLY", + "CONDITIONED", "PERIOD_INDICATOR", "SINGLE", "DURATION", "TIME_AGG", + "UNIT", "VALUE", "VALUEDOMAINS", "VARIABLES", "INPUT", "OUTPUT", "CAST", + "RULE_PRIORITY", "DATASET_PRIORITY", "DEFAULT", "CHECK_DATAPOINT", + "CHECK_HIERARCHY", "COMPUTED", "NON_NULL", "NON_ZERO", "PARTIAL_NULL", + "PARTIAL_ZERO", "ALWAYS_NULL", "ALWAYS_ZERO", "COMPONENTS", "ALL_MEASURES", + "SCALAR", "COMPONENT", "DATAPOINT_ON_VD", "DATAPOINT_ON_VAR", "HIERARCHICAL_ON_VD", + "HIERARCHICAL_ON_VAR", "SET", "LANGUAGE", "INTEGER_CONSTANT", "NUMBER_CONSTANT", + "BOOLEAN_CONSTANT", "STRING_CONSTANT", "IDENTIFIER", "WS", "EOL", + "ML_COMMENT", "SL_COMMENT" + } + ); + static const int32_t serializedATNSegment[] = { + 4,1,249,1889,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,1,0,1,0,1,0,5,0,226,8,0,10,0,12,0,229,9,0,1,0,1,0,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,1,242,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,2,265,8,2,11,2,12,2, + 266,1,2,1,2,1,2,1,2,1,2,3,2,274,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,3,2,304,8,2,5,2,306,8,2,10,2,12,2,309,9,2,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,4,3,332, + 8,3,11,3,12,3,333,1,3,1,3,1,3,1,3,1,3,3,3,341,8,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,363,8, + 3,5,3,365,8,3,10,3,12,3,368,9,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,378, + 8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,392,8,5,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,3,6,401,8,6,1,7,1,7,1,7,1,7,5,7,407,8,7,10,7,12, + 7,410,9,7,1,8,1,8,1,8,1,8,3,8,416,8,8,3,8,418,8,8,1,9,1,9,1,9,1,10,1, + 10,1,10,1,10,5,10,427,8,10,10,10,12,10,430,9,10,1,11,1,11,1,11,1,11,5, + 11,436,8,11,10,11,12,11,439,9,11,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1, + 13,1,13,1,13,1,13,1,13,1,13,5,13,454,8,13,10,13,12,13,457,9,13,1,14,1, + 14,1,14,1,14,5,14,463,8,14,10,14,12,14,466,9,14,1,15,1,15,1,15,1,15,1, + 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,480,8,15,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,5,16,489,8,16,10,16,12,16,492,9,16,3,16,494,8,16,1, + 16,1,16,1,16,3,16,499,8,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,532,8,16,1,17,1,17,1, + 17,1,17,1,17,5,17,539,8,17,10,17,12,17,542,9,17,3,17,544,8,17,1,17,1, + 17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,554,8,17,1,17,1,17,1,17,3,17,559, + 8,17,5,17,561,8,17,10,17,12,17,564,9,17,1,17,1,17,1,17,3,17,569,8,17, + 1,17,1,17,3,17,573,8,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,3,17, + 583,8,17,1,17,1,17,3,17,587,8,17,1,17,1,17,3,17,591,8,17,1,18,1,18,1, + 18,1,18,1,18,5,18,598,8,18,10,18,12,18,601,9,18,3,18,603,8,18,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,613,8,18,1,18,1,18,3,18,617,8,18, + 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,627,8,18,1,18,1,18,1,18, + 3,18,632,8,18,5,18,634,8,18,10,18,12,18,637,9,18,1,18,1,18,1,18,3,18, + 642,8,18,1,18,1,18,3,18,646,8,18,1,18,1,18,3,18,650,8,18,1,19,1,19,3, + 19,654,8,19,1,20,1,20,3,20,658,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,674,8,21,1,21,1,21,3,21,678,8, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,689,8,21,1,21,1, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,700,8,21,1,21,1,21,3,21,704, + 8,21,1,21,1,21,3,21,708,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,22,3,22,724,8,22,1,22,1,22,3,22,728,8,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,739,8,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,750,8,22,1,22,1,22,3,22,754,8,22, + 1,22,1,22,3,22,758,8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, + 1,23,3,23,770,8,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23, + 781,8,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,793,8, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,804,8,24,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,3,25,834, + 8,25,1,25,1,25,3,25,838,8,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26, + 861,8,26,1,27,1,27,1,27,3,27,866,8,27,1,27,1,27,1,27,1,27,1,27,1,27,3, + 27,874,8,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1, + 27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,895,8,27,1,27,1,27,3,27,899, + 8,27,1,27,1,27,3,27,903,8,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,965,8,27,1,28, + 1,28,1,28,3,28,970,8,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,978,8,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,3,28,999,8,28,1,28,1,28,3,28,1003,8,28,1,28,1, + 28,3,28,1007,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1069,8,28,1,29,1,29,1,29,1, + 29,1,29,4,29,1076,8,29,11,29,12,29,1077,1,29,1,29,1,29,1,29,1,29,1,29, + 1,29,4,29,1087,8,29,11,29,12,29,1088,1,29,1,29,1,29,1,29,1,29,1,29,1, + 29,1,29,1,29,3,29,1100,8,29,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1108,8, + 30,1,30,1,30,3,30,1112,8,30,1,30,3,30,1115,8,30,1,30,3,30,1118,8,30,1, + 30,3,30,1121,8,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1, + 31,5,31,1134,8,31,10,31,12,31,1137,9,31,3,31,1139,8,31,1,31,3,31,1142, + 8,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,3,31,1152,8,31,1,31,1,31, + 3,31,1156,8,31,1,31,3,31,1159,8,31,1,31,3,31,1162,8,31,1,31,3,31,1165, + 8,31,1,31,1,31,1,31,1,31,1,31,1,31,3,31,1173,8,31,1,31,3,31,1176,8,31, + 1,31,3,31,1179,8,31,1,31,3,31,1182,8,31,1,31,1,31,3,31,1186,8,31,1,32, + 1,32,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,34, + 1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1210,8,34,1,35,1,35,1,35,1,35, + 1,35,3,35,1217,8,35,3,35,1219,8,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36, + 1,36,3,36,1229,8,36,1,36,3,36,1232,8,36,1,36,3,36,1235,8,36,1,36,1,36, + 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,1247,8,36,3,36,1249,8,36, + 1,36,1,36,1,36,3,36,1254,8,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, + 1,36,1,36,1,36,1,36,1,36,1,36,3,36,1270,8,36,1,37,1,37,1,37,1,37,1,37, + 1,37,3,37,1278,8,37,1,37,3,37,1281,8,37,1,37,3,37,1284,8,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,1295,8,37,3,37,1297,8,37,1,37, + 1,37,1,37,3,37,1302,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,3,37,1314,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,3,37,1330,8,37,1,38,1,38,1,38,1,38,1,39,1,39,1,39, + 5,39,1339,8,39,10,39,12,39,1342,9,39,1,40,3,40,1345,8,40,1,40,1,40,1, + 40,1,40,1,41,3,41,1352,8,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1, + 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,3,43,1370,8,43,1,43,1,43,3,43,1374, + 8,43,1,44,1,44,1,44,5,44,1379,8,44,10,44,12,44,1382,9,44,1,45,1,45,1, + 45,5,45,1387,8,45,10,45,12,45,1390,9,45,1,45,1,45,1,45,1,45,5,45,1396, + 8,45,10,45,12,45,1399,9,45,3,45,1401,8,45,1,46,1,46,1,46,3,46,1406,8, + 46,1,47,3,47,1409,8,47,1,47,1,47,1,47,3,47,1414,8,47,1,47,3,47,1417,8, + 47,1,47,3,47,1420,8,47,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,5,49,1430, + 8,49,10,49,12,49,1433,9,49,1,50,1,50,1,50,1,50,1,50,5,50,1440,8,50,10, + 50,12,50,1443,9,50,1,51,1,51,3,51,1447,8,51,1,52,1,52,1,52,3,52,1452, + 8,52,1,52,1,52,1,52,1,52,1,52,1,53,3,53,1460,8,53,1,53,1,53,1,54,3,54, + 1465,8,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55, + 1,55,1,55,1,55,3,55,1482,8,55,1,56,1,56,1,56,1,56,1,56,5,56,1489,8,56, + 10,56,12,56,1492,9,56,1,56,1,56,1,56,1,56,1,56,3,56,1499,8,56,1,56,3, + 56,1502,8,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,1511,8,56,1,56,3, + 56,1514,8,56,3,56,1516,8,56,1,57,1,57,1,57,1,58,1,58,1,58,1,58,3,58,1525, + 8,58,1,59,1,59,1,59,3,59,1530,8,59,1,60,1,60,3,60,1534,8,60,1,61,1,61, + 1,61,1,61,1,61,3,61,1541,8,61,1,62,1,62,1,62,3,62,1546,8,62,1,63,1,63, + 3,63,1550,8,63,1,63,3,63,1553,8,63,1,63,3,63,1556,8,63,1,63,3,63,1559, + 8,63,1,64,1,64,1,64,1,64,1,64,3,64,1566,8,64,1,65,1,65,1,65,1,65,1,65, + 5,65,1573,8,65,10,65,12,65,1576,9,65,1,65,1,65,3,65,1580,8,65,1,66,1, + 66,3,66,1584,8,66,1,67,1,67,1,67,1,67,1,67,3,67,1591,8,67,1,68,1,68,1, + 68,1,68,1,68,1,68,5,68,1599,8,68,10,68,12,68,1602,9,68,1,68,1,68,3,68, + 1606,8,68,1,68,1,68,1,68,1,68,1,68,5,68,1613,8,68,10,68,12,68,1616,9, + 68,1,68,1,68,3,68,1620,8,68,3,68,1622,8,68,1,69,1,69,1,69,1,69,1,69,1, + 69,1,69,1,69,5,69,1632,8,69,10,69,12,69,1635,9,69,1,69,1,69,3,69,1639, + 8,69,1,69,3,69,1642,8,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,5,69,1651, + 8,69,10,69,12,69,1654,9,69,1,69,1,69,3,69,1658,8,69,1,69,1,69,3,69,1662, + 8,69,3,69,1664,8,69,1,70,1,70,1,71,1,71,1,72,1,72,1,72,1,72,5,72,1674, + 8,72,10,72,12,72,1677,9,72,1,73,1,73,1,73,3,73,1682,8,73,1,74,1,74,1, + 74,5,74,1687,8,74,10,74,12,74,1690,9,74,1,75,1,75,3,75,1694,8,75,1,75, + 1,75,1,75,1,75,3,75,1700,8,75,1,75,1,75,3,75,1704,8,75,1,75,3,75,1707, + 8,75,1,76,1,76,1,76,5,76,1712,8,76,10,76,12,76,1715,9,76,1,77,1,77,3, + 77,1719,8,77,1,77,1,77,3,77,1723,8,77,1,77,3,77,1726,8,77,1,78,1,78,1, + 78,3,78,1731,8,78,1,78,1,78,1,78,1,79,1,79,1,79,5,79,1739,8,79,10,79, + 12,79,1742,9,79,1,80,1,80,1,80,1,80,3,80,1748,8,80,1,80,1,80,3,80,1752, + 8,80,1,80,1,80,5,80,1756,8,80,10,80,12,80,1759,9,80,1,81,3,81,1762,8, + 81,1,81,1,81,1,81,1,81,1,81,3,81,1769,8,81,1,82,1,82,1,82,3,82,1774,8, + 82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,5,83,1784,8,83,10,83,12,83, + 1787,9,83,1,83,1,83,3,83,1791,8,83,1,84,1,84,1,84,3,84,1796,8,84,1,85, + 1,85,3,85,1800,8,85,1,86,1,86,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1810, + 8,88,10,88,12,88,1813,9,88,1,89,1,89,1,90,1,90,1,90,1,91,1,91,1,92,1, + 92,1,93,1,93,1,94,1,94,1,95,1,95,1,96,1,96,1,96,3,96,1833,8,96,1,97,1, + 97,1,97,1,97,5,97,1839,8,97,10,97,12,97,1842,9,97,1,97,1,97,1,98,1,98, + 1,98,1,99,1,99,1,99,1,100,1,100,1,101,1,101,3,101,1856,8,101,1,102,1, + 102,3,102,1860,8,102,1,103,1,103,1,103,1,103,1,103,3,103,1867,8,103,1, + 104,1,104,1,104,1,105,1,105,1,106,1,106,1,107,1,107,1,108,1,108,1,108, + 1,108,1,108,3,108,1883,8,108,1,109,1,109,1,110,1,110,1,110,0,2,4,6,111, + 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,0,35,2,0,13,14,50,50,1,0,15,16,2, + 0,13,14,94,94,1,0,48,49,1,0,52,53,1,0,41,42,2,0,202,202,204,204,1,0,193, + 194,1,0,195,196,3,0,93,93,95,97,131,132,4,0,85,85,87,87,108,108,135,137, + 1,0,89,90,3,0,61,61,88,88,91,92,2,0,72,72,209,209,1,0,162,163,2,0,115, + 115,244,244,1,0,82,83,2,0,59,59,139,139,2,0,72,72,116,116,3,0,80,81,99, + 102,140,143,4,0,80,81,99,102,140,143,147,148,1,0,149,150,1,0,78,79,1, + 0,13,14,2,0,76,76,145,145,1,0,117,118,2,0,13,13,15,15,3,0,72,72,116,116, + 232,232,1,0,225,230,2,0,121,121,220,220,3,0,121,121,128,128,219,219,2, + 0,72,72,224,224,1,0,7,12,3,0,168,174,210,210,233,233,2,0,72,72,243,243, + 2087,0,227,1,0,0,0,2,241,1,0,0,0,4,273,1,0,0,0,6,340,1,0,0,0,8,377,1, + 0,0,0,10,391,1,0,0,0,12,400,1,0,0,0,14,402,1,0,0,0,16,411,1,0,0,0,18, + 419,1,0,0,0,20,422,1,0,0,0,22,431,1,0,0,0,24,440,1,0,0,0,26,445,1,0,0, + 0,28,458,1,0,0,0,30,479,1,0,0,0,32,531,1,0,0,0,34,590,1,0,0,0,36,649, + 1,0,0,0,38,653,1,0,0,0,40,657,1,0,0,0,42,707,1,0,0,0,44,757,1,0,0,0,46, + 780,1,0,0,0,48,803,1,0,0,0,50,837,1,0,0,0,52,860,1,0,0,0,54,964,1,0,0, + 0,56,1068,1,0,0,0,58,1099,1,0,0,0,60,1101,1,0,0,0,62,1185,1,0,0,0,64, + 1187,1,0,0,0,66,1194,1,0,0,0,68,1209,1,0,0,0,70,1211,1,0,0,0,72,1269, + 1,0,0,0,74,1329,1,0,0,0,76,1331,1,0,0,0,78,1335,1,0,0,0,80,1344,1,0,0, + 0,82,1351,1,0,0,0,84,1357,1,0,0,0,86,1373,1,0,0,0,88,1375,1,0,0,0,90, + 1383,1,0,0,0,92,1402,1,0,0,0,94,1408,1,0,0,0,96,1421,1,0,0,0,98,1424, + 1,0,0,0,100,1434,1,0,0,0,102,1444,1,0,0,0,104,1451,1,0,0,0,106,1459,1, + 0,0,0,108,1464,1,0,0,0,110,1481,1,0,0,0,112,1515,1,0,0,0,114,1517,1,0, + 0,0,116,1520,1,0,0,0,118,1529,1,0,0,0,120,1533,1,0,0,0,122,1540,1,0,0, + 0,124,1545,1,0,0,0,126,1549,1,0,0,0,128,1560,1,0,0,0,130,1567,1,0,0,0, + 132,1583,1,0,0,0,134,1585,1,0,0,0,136,1621,1,0,0,0,138,1663,1,0,0,0,140, + 1665,1,0,0,0,142,1667,1,0,0,0,144,1669,1,0,0,0,146,1678,1,0,0,0,148,1683, + 1,0,0,0,150,1693,1,0,0,0,152,1708,1,0,0,0,154,1718,1,0,0,0,156,1727,1, + 0,0,0,158,1735,1,0,0,0,160,1747,1,0,0,0,162,1761,1,0,0,0,164,1773,1,0, + 0,0,166,1790,1,0,0,0,168,1792,1,0,0,0,170,1797,1,0,0,0,172,1801,1,0,0, + 0,174,1803,1,0,0,0,176,1805,1,0,0,0,178,1814,1,0,0,0,180,1816,1,0,0,0, + 182,1819,1,0,0,0,184,1821,1,0,0,0,186,1823,1,0,0,0,188,1825,1,0,0,0,190, + 1827,1,0,0,0,192,1829,1,0,0,0,194,1834,1,0,0,0,196,1845,1,0,0,0,198,1848, + 1,0,0,0,200,1851,1,0,0,0,202,1855,1,0,0,0,204,1859,1,0,0,0,206,1866,1, + 0,0,0,208,1868,1,0,0,0,210,1871,1,0,0,0,212,1873,1,0,0,0,214,1875,1,0, + 0,0,216,1882,1,0,0,0,218,1884,1,0,0,0,220,1886,1,0,0,0,222,223,3,2,1, + 0,223,224,5,247,0,0,224,226,1,0,0,0,225,222,1,0,0,0,226,229,1,0,0,0,227, + 225,1,0,0,0,227,228,1,0,0,0,228,230,1,0,0,0,229,227,1,0,0,0,230,231,5, + 0,0,1,231,1,1,0,0,0,232,233,3,188,94,0,233,234,5,20,0,0,234,235,3,4,2, + 0,235,242,1,0,0,0,236,237,3,188,94,0,237,238,5,124,0,0,238,239,3,4,2, + 0,239,242,1,0,0,0,240,242,3,32,16,0,241,232,1,0,0,0,241,236,1,0,0,0,241, + 240,1,0,0,0,242,3,1,0,0,0,243,244,6,2,-1,0,244,245,5,1,0,0,245,246,3, + 4,2,0,246,247,5,2,0,0,247,274,1,0,0,0,248,274,3,10,5,0,249,250,7,0,0, + 0,250,274,3,4,2,11,251,252,5,23,0,0,252,253,3,4,2,0,253,254,5,25,0,0, + 254,255,3,4,2,0,255,256,5,26,0,0,256,257,3,4,2,4,257,274,1,0,0,0,258, + 264,5,24,0,0,259,260,5,185,0,0,260,261,3,4,2,0,261,262,5,25,0,0,262,263, + 3,4,2,0,263,265,1,0,0,0,264,259,1,0,0,0,265,266,1,0,0,0,266,264,1,0,0, + 0,266,267,1,0,0,0,267,268,1,0,0,0,268,269,5,26,0,0,269,270,3,4,2,3,270, + 274,1,0,0,0,271,274,3,216,108,0,272,274,3,188,94,0,273,243,1,0,0,0,273, + 248,1,0,0,0,273,249,1,0,0,0,273,251,1,0,0,0,273,258,1,0,0,0,273,271,1, + 0,0,0,273,272,1,0,0,0,274,307,1,0,0,0,275,276,10,10,0,0,276,277,7,1,0, + 0,277,306,3,4,2,11,278,279,10,9,0,0,279,280,7,2,0,0,280,306,3,4,2,10, + 281,282,10,8,0,0,282,283,3,200,100,0,283,284,3,4,2,9,284,306,1,0,0,0, + 285,286,10,6,0,0,286,287,5,47,0,0,287,306,3,4,2,7,288,289,10,5,0,0,289, + 290,7,3,0,0,290,306,3,4,2,6,291,292,10,13,0,0,292,293,5,3,0,0,293,294, + 3,12,6,0,294,295,5,4,0,0,295,306,1,0,0,0,296,297,10,12,0,0,297,298,5, + 21,0,0,298,306,3,190,95,0,299,300,10,7,0,0,300,303,7,4,0,0,301,304,3, + 194,97,0,302,304,3,210,105,0,303,301,1,0,0,0,303,302,1,0,0,0,304,306, + 1,0,0,0,305,275,1,0,0,0,305,278,1,0,0,0,305,281,1,0,0,0,305,285,1,0,0, + 0,305,288,1,0,0,0,305,291,1,0,0,0,305,296,1,0,0,0,305,299,1,0,0,0,306, + 309,1,0,0,0,307,305,1,0,0,0,307,308,1,0,0,0,308,5,1,0,0,0,309,307,1,0, + 0,0,310,311,6,3,-1,0,311,312,5,1,0,0,312,313,3,6,3,0,313,314,5,2,0,0, + 314,341,1,0,0,0,315,341,3,8,4,0,316,317,7,0,0,0,317,341,3,6,3,11,318, + 319,5,23,0,0,319,320,3,6,3,0,320,321,5,25,0,0,321,322,3,6,3,0,322,323, + 5,26,0,0,323,324,3,6,3,4,324,341,1,0,0,0,325,331,5,24,0,0,326,327,5,185, + 0,0,327,328,3,6,3,0,328,329,5,25,0,0,329,330,3,6,3,0,330,332,1,0,0,0, + 331,326,1,0,0,0,332,333,1,0,0,0,333,331,1,0,0,0,333,334,1,0,0,0,334,335, + 1,0,0,0,335,336,5,26,0,0,336,337,3,6,3,3,337,341,1,0,0,0,338,341,3,216, + 108,0,339,341,3,192,96,0,340,310,1,0,0,0,340,315,1,0,0,0,340,316,1,0, + 0,0,340,318,1,0,0,0,340,325,1,0,0,0,340,338,1,0,0,0,340,339,1,0,0,0,341, + 366,1,0,0,0,342,343,10,10,0,0,343,344,7,1,0,0,344,365,3,6,3,11,345,346, + 10,9,0,0,346,347,7,2,0,0,347,365,3,6,3,10,348,349,10,8,0,0,349,350,3, + 200,100,0,350,351,3,6,3,9,351,365,1,0,0,0,352,353,10,6,0,0,353,354,5, + 47,0,0,354,365,3,6,3,7,355,356,10,5,0,0,356,357,7,3,0,0,357,365,3,6,3, + 6,358,359,10,7,0,0,359,362,7,4,0,0,360,363,3,194,97,0,361,363,3,210,105, + 0,362,360,1,0,0,0,362,361,1,0,0,0,363,365,1,0,0,0,364,342,1,0,0,0,364, + 345,1,0,0,0,364,348,1,0,0,0,364,352,1,0,0,0,364,355,1,0,0,0,364,358,1, + 0,0,0,365,368,1,0,0,0,366,364,1,0,0,0,366,367,1,0,0,0,367,7,1,0,0,0,368, + 366,1,0,0,0,369,378,3,36,18,0,370,378,3,44,22,0,371,378,3,48,24,0,372, + 378,3,52,26,0,373,378,3,56,28,0,374,378,3,66,33,0,375,378,3,68,34,0,376, + 378,3,74,37,0,377,369,1,0,0,0,377,370,1,0,0,0,377,371,1,0,0,0,377,372, + 1,0,0,0,377,373,1,0,0,0,377,374,1,0,0,0,377,375,1,0,0,0,377,376,1,0,0, + 0,378,9,1,0,0,0,379,392,3,30,15,0,380,392,3,34,17,0,381,392,3,42,21,0, + 382,392,3,46,23,0,383,392,3,50,25,0,384,392,3,54,27,0,385,392,3,58,29, + 0,386,392,3,60,30,0,387,392,3,62,31,0,388,392,3,64,32,0,389,392,3,70, + 35,0,390,392,3,72,36,0,391,379,1,0,0,0,391,380,1,0,0,0,391,381,1,0,0, + 0,391,382,1,0,0,0,391,383,1,0,0,0,391,384,1,0,0,0,391,385,1,0,0,0,391, + 386,1,0,0,0,391,387,1,0,0,0,391,388,1,0,0,0,391,389,1,0,0,0,391,390,1, + 0,0,0,392,11,1,0,0,0,393,401,3,14,7,0,394,401,3,16,8,0,395,401,3,18,9, + 0,396,401,3,20,10,0,397,401,3,22,11,0,398,401,3,24,12,0,399,401,3,28, + 14,0,400,393,1,0,0,0,400,394,1,0,0,0,400,395,1,0,0,0,400,396,1,0,0,0, + 400,397,1,0,0,0,400,398,1,0,0,0,400,399,1,0,0,0,401,13,1,0,0,0,402,403, + 5,45,0,0,403,408,3,76,38,0,404,405,5,17,0,0,405,407,3,76,38,0,406,404, + 1,0,0,0,407,410,1,0,0,0,408,406,1,0,0,0,408,409,1,0,0,0,409,15,1,0,0, + 0,410,408,1,0,0,0,411,412,5,73,0,0,412,417,3,78,39,0,413,415,3,112,56, + 0,414,416,3,114,57,0,415,414,1,0,0,0,415,416,1,0,0,0,416,418,1,0,0,0, + 417,413,1,0,0,0,417,418,1,0,0,0,418,17,1,0,0,0,419,420,5,106,0,0,420, + 421,3,6,3,0,421,19,1,0,0,0,422,423,5,43,0,0,423,428,3,82,41,0,424,425, + 5,17,0,0,425,427,3,82,41,0,426,424,1,0,0,0,427,430,1,0,0,0,428,426,1, + 0,0,0,428,429,1,0,0,0,429,21,1,0,0,0,430,428,1,0,0,0,431,432,7,5,0,0, + 432,437,3,192,96,0,433,434,5,17,0,0,434,436,3,192,96,0,435,433,1,0,0, + 0,436,439,1,0,0,0,437,435,1,0,0,0,437,438,1,0,0,0,438,23,1,0,0,0,439, + 437,1,0,0,0,440,441,7,6,0,0,441,442,3,192,96,0,442,443,5,17,0,0,443,444, + 3,192,96,0,444,25,1,0,0,0,445,446,5,203,0,0,446,447,3,192,96,0,447,448, + 5,17,0,0,448,449,3,192,96,0,449,450,5,52,0,0,450,455,3,216,108,0,451, + 452,5,17,0,0,452,454,3,216,108,0,453,451,1,0,0,0,454,457,1,0,0,0,455, + 453,1,0,0,0,455,456,1,0,0,0,456,27,1,0,0,0,457,455,1,0,0,0,458,459,5, + 205,0,0,459,464,3,84,42,0,460,461,5,17,0,0,461,463,3,84,42,0,462,460, + 1,0,0,0,463,466,1,0,0,0,464,462,1,0,0,0,464,465,1,0,0,0,465,29,1,0,0, + 0,466,464,1,0,0,0,467,468,7,7,0,0,468,469,5,1,0,0,469,470,3,90,45,0,470, + 471,3,94,47,0,471,472,5,2,0,0,472,480,1,0,0,0,473,474,7,8,0,0,474,475, + 5,1,0,0,475,476,3,88,44,0,476,477,3,94,47,0,477,478,5,2,0,0,478,480,1, + 0,0,0,479,467,1,0,0,0,479,473,1,0,0,0,480,31,1,0,0,0,481,482,5,123,0, + 0,482,483,5,122,0,0,483,484,3,212,106,0,484,493,5,1,0,0,485,490,3,116, + 58,0,486,487,5,17,0,0,487,489,3,116,58,0,488,486,1,0,0,0,489,492,1,0, + 0,0,490,488,1,0,0,0,490,491,1,0,0,0,491,494,1,0,0,0,492,490,1,0,0,0,493, + 485,1,0,0,0,493,494,1,0,0,0,494,495,1,0,0,0,495,498,5,2,0,0,496,497,5, + 201,0,0,497,499,3,118,59,0,498,496,1,0,0,0,498,499,1,0,0,0,499,500,1, + 0,0,0,500,501,5,184,0,0,501,502,3,4,2,0,502,503,5,129,0,0,503,504,5,122, + 0,0,504,532,1,0,0,0,505,506,5,123,0,0,506,507,5,125,0,0,507,508,5,127, + 0,0,508,509,3,142,71,0,509,510,5,1,0,0,510,511,3,144,72,0,511,512,5,2, + 0,0,512,513,5,184,0,0,513,514,3,148,74,0,514,515,5,129,0,0,515,516,5, + 125,0,0,516,517,5,127,0,0,517,532,1,0,0,0,518,519,5,123,0,0,519,520,5, + 126,0,0,520,521,5,127,0,0,521,522,3,142,71,0,522,523,5,1,0,0,523,524, + 3,156,78,0,524,525,5,2,0,0,525,526,5,184,0,0,526,527,3,152,76,0,527,528, + 5,129,0,0,528,529,5,126,0,0,529,530,5,127,0,0,530,532,1,0,0,0,531,481, + 1,0,0,0,531,505,1,0,0,0,531,518,1,0,0,0,532,33,1,0,0,0,533,534,3,212, + 106,0,534,543,5,1,0,0,535,540,3,40,20,0,536,537,5,17,0,0,537,539,3,40, + 20,0,538,536,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,535,1,0,0,0,543,544,1,0,0,0,544,545, + 1,0,0,0,545,546,5,2,0,0,546,591,1,0,0,0,547,548,5,22,0,0,548,549,5,1, + 0,0,549,550,3,214,107,0,550,553,5,1,0,0,551,554,3,188,94,0,552,554,3, + 86,43,0,553,551,1,0,0,0,553,552,1,0,0,0,553,554,1,0,0,0,554,562,1,0,0, + 0,555,558,5,17,0,0,556,559,3,188,94,0,557,559,3,86,43,0,558,556,1,0,0, + 0,558,557,1,0,0,0,559,561,1,0,0,0,560,555,1,0,0,0,561,564,1,0,0,0,562, + 560,1,0,0,0,562,563,1,0,0,0,563,565,1,0,0,0,564,562,1,0,0,0,565,568,5, + 2,0,0,566,567,5,240,0,0,567,569,5,244,0,0,568,566,1,0,0,0,568,569,1,0, + 0,0,569,572,1,0,0,0,570,571,5,201,0,0,571,573,3,132,66,0,572,570,1,0, + 0,0,572,573,1,0,0,0,573,574,1,0,0,0,574,575,5,2,0,0,575,591,1,0,0,0,576, + 577,5,218,0,0,577,578,5,1,0,0,578,579,3,4,2,0,579,582,5,17,0,0,580,583, + 3,218,109,0,581,583,3,140,70,0,582,580,1,0,0,0,582,581,1,0,0,0,583,586, + 1,0,0,0,584,585,5,17,0,0,585,587,5,244,0,0,586,584,1,0,0,0,586,587,1, + 0,0,0,587,588,1,0,0,0,588,589,5,2,0,0,589,591,1,0,0,0,590,533,1,0,0,0, + 590,547,1,0,0,0,590,576,1,0,0,0,591,35,1,0,0,0,592,593,3,212,106,0,593, + 602,5,1,0,0,594,599,3,38,19,0,595,596,5,17,0,0,596,598,3,38,19,0,597, + 595,1,0,0,0,598,601,1,0,0,0,599,597,1,0,0,0,599,600,1,0,0,0,600,603,1, + 0,0,0,601,599,1,0,0,0,602,594,1,0,0,0,602,603,1,0,0,0,603,604,1,0,0,0, + 604,605,5,2,0,0,605,650,1,0,0,0,606,607,5,218,0,0,607,608,5,1,0,0,608, + 609,3,6,3,0,609,612,5,17,0,0,610,613,3,218,109,0,611,613,3,140,70,0,612, + 610,1,0,0,0,612,611,1,0,0,0,613,616,1,0,0,0,614,615,5,17,0,0,615,617, + 5,244,0,0,616,614,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618,619,5,2, + 0,0,619,650,1,0,0,0,620,621,5,22,0,0,621,622,5,1,0,0,622,623,3,214,107, + 0,623,626,5,1,0,0,624,627,3,192,96,0,625,627,3,86,43,0,626,624,1,0,0, + 0,626,625,1,0,0,0,626,627,1,0,0,0,627,635,1,0,0,0,628,631,5,17,0,0,629, + 632,3,192,96,0,630,632,3,86,43,0,631,629,1,0,0,0,631,630,1,0,0,0,632, + 634,1,0,0,0,633,628,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,641,5,2,0,0,639,640,5,240,0, + 0,640,642,5,244,0,0,641,639,1,0,0,0,641,642,1,0,0,0,642,645,1,0,0,0,643, + 644,5,201,0,0,644,646,3,120,60,0,645,643,1,0,0,0,645,646,1,0,0,0,646, + 647,1,0,0,0,647,648,5,2,0,0,648,650,1,0,0,0,649,592,1,0,0,0,649,606,1, + 0,0,0,649,620,1,0,0,0,650,37,1,0,0,0,651,654,3,6,3,0,652,654,5,115,0, + 0,653,651,1,0,0,0,653,652,1,0,0,0,654,39,1,0,0,0,655,658,3,4,2,0,656, + 658,5,115,0,0,657,655,1,0,0,0,657,656,1,0,0,0,658,41,1,0,0,0,659,660, + 7,9,0,0,660,661,5,1,0,0,661,662,3,4,2,0,662,663,5,2,0,0,663,708,1,0,0, + 0,664,665,5,98,0,0,665,666,5,1,0,0,666,677,3,4,2,0,667,668,5,17,0,0,668, + 669,3,202,101,0,669,670,1,0,0,0,670,671,5,17,0,0,671,672,3,202,101,0, + 672,674,1,0,0,0,673,667,1,0,0,0,673,674,1,0,0,0,674,678,1,0,0,0,675,676, + 5,17,0,0,676,678,3,202,101,0,677,673,1,0,0,0,677,675,1,0,0,0,678,679, + 1,0,0,0,679,680,5,2,0,0,680,708,1,0,0,0,681,682,5,134,0,0,682,683,5,1, + 0,0,683,684,3,4,2,0,684,685,5,17,0,0,685,688,3,4,2,0,686,687,5,17,0,0, + 687,689,3,202,101,0,688,686,1,0,0,0,688,689,1,0,0,0,689,690,1,0,0,0,690, + 691,5,2,0,0,691,708,1,0,0,0,692,693,5,133,0,0,693,694,5,1,0,0,694,695, + 3,4,2,0,695,696,5,17,0,0,696,699,3,4,2,0,697,698,5,17,0,0,698,700,3,202, + 101,0,699,697,1,0,0,0,699,700,1,0,0,0,700,703,1,0,0,0,701,702,5,17,0, + 0,702,704,3,202,101,0,703,701,1,0,0,0,703,704,1,0,0,0,704,705,1,0,0,0, + 705,706,5,2,0,0,706,708,1,0,0,0,707,659,1,0,0,0,707,664,1,0,0,0,707,681, + 1,0,0,0,707,692,1,0,0,0,708,43,1,0,0,0,709,710,7,9,0,0,710,711,5,1,0, + 0,711,712,3,6,3,0,712,713,5,2,0,0,713,758,1,0,0,0,714,715,5,98,0,0,715, + 716,5,1,0,0,716,727,3,6,3,0,717,718,5,17,0,0,718,719,3,204,102,0,719, + 720,1,0,0,0,720,721,5,17,0,0,721,722,3,204,102,0,722,724,1,0,0,0,723, + 717,1,0,0,0,723,724,1,0,0,0,724,728,1,0,0,0,725,726,5,17,0,0,726,728, + 3,204,102,0,727,723,1,0,0,0,727,725,1,0,0,0,728,729,1,0,0,0,729,730,5, + 2,0,0,730,758,1,0,0,0,731,732,5,134,0,0,732,733,5,1,0,0,733,734,3,6,3, + 0,734,735,5,17,0,0,735,738,3,6,3,0,736,737,5,17,0,0,737,739,3,204,102, + 0,738,736,1,0,0,0,738,739,1,0,0,0,739,740,1,0,0,0,740,741,5,2,0,0,741, + 758,1,0,0,0,742,743,5,133,0,0,743,744,5,1,0,0,744,745,3,6,3,0,745,746, + 5,17,0,0,746,749,3,6,3,0,747,748,5,17,0,0,748,750,3,204,102,0,749,747, + 1,0,0,0,749,750,1,0,0,0,750,753,1,0,0,0,751,752,5,17,0,0,752,754,3,204, + 102,0,753,751,1,0,0,0,753,754,1,0,0,0,754,755,1,0,0,0,755,756,5,2,0,0, + 756,758,1,0,0,0,757,709,1,0,0,0,757,714,1,0,0,0,757,731,1,0,0,0,757,742, + 1,0,0,0,758,45,1,0,0,0,759,760,7,10,0,0,760,761,5,1,0,0,761,762,3,4,2, + 0,762,763,5,2,0,0,763,781,1,0,0,0,764,765,7,11,0,0,765,766,5,1,0,0,766, + 769,3,4,2,0,767,768,5,17,0,0,768,770,3,202,101,0,769,767,1,0,0,0,769, + 770,1,0,0,0,770,771,1,0,0,0,771,772,5,2,0,0,772,781,1,0,0,0,773,774,7, + 12,0,0,774,775,5,1,0,0,775,776,3,4,2,0,776,777,5,17,0,0,777,778,3,4,2, + 0,778,779,5,2,0,0,779,781,1,0,0,0,780,759,1,0,0,0,780,764,1,0,0,0,780, + 773,1,0,0,0,781,47,1,0,0,0,782,783,7,10,0,0,783,784,5,1,0,0,784,785,3, + 6,3,0,785,786,5,2,0,0,786,804,1,0,0,0,787,788,7,11,0,0,788,789,5,1,0, + 0,789,792,3,6,3,0,790,791,5,17,0,0,791,793,3,204,102,0,792,790,1,0,0, + 0,792,793,1,0,0,0,793,794,1,0,0,0,794,795,5,2,0,0,795,804,1,0,0,0,796, + 797,7,12,0,0,797,798,5,1,0,0,798,799,3,6,3,0,799,800,5,17,0,0,800,801, + 3,6,3,0,801,802,5,2,0,0,802,804,1,0,0,0,803,782,1,0,0,0,803,787,1,0,0, + 0,803,796,1,0,0,0,804,49,1,0,0,0,805,806,5,51,0,0,806,807,5,1,0,0,807, + 808,3,4,2,0,808,809,5,17,0,0,809,810,3,4,2,0,810,811,5,17,0,0,811,812, + 3,4,2,0,812,813,5,2,0,0,813,838,1,0,0,0,814,815,5,111,0,0,815,816,5,1, + 0,0,816,817,3,4,2,0,817,818,5,17,0,0,818,819,3,4,2,0,819,820,5,2,0,0, + 820,838,1,0,0,0,821,822,5,55,0,0,822,823,5,1,0,0,823,824,3,4,2,0,824, + 825,5,2,0,0,825,838,1,0,0,0,826,827,5,67,0,0,827,828,5,1,0,0,828,829, + 3,4,2,0,829,830,5,17,0,0,830,833,3,4,2,0,831,832,5,17,0,0,832,834,3,220, + 110,0,833,831,1,0,0,0,833,834,1,0,0,0,834,835,1,0,0,0,835,836,5,2,0,0, + 836,838,1,0,0,0,837,805,1,0,0,0,837,814,1,0,0,0,837,821,1,0,0,0,837,826, + 1,0,0,0,838,51,1,0,0,0,839,840,5,51,0,0,840,841,5,1,0,0,841,842,3,6,3, + 0,842,843,5,17,0,0,843,844,3,6,3,0,844,845,5,17,0,0,845,846,3,6,3,0,846, + 847,5,2,0,0,847,861,1,0,0,0,848,849,5,111,0,0,849,850,5,1,0,0,850,851, + 3,6,3,0,851,852,5,17,0,0,852,853,3,6,3,0,853,854,5,2,0,0,854,861,1,0, + 0,0,855,856,5,55,0,0,856,857,5,1,0,0,857,858,3,6,3,0,858,859,5,2,0,0, + 859,861,1,0,0,0,860,839,1,0,0,0,860,848,1,0,0,0,860,855,1,0,0,0,861,53, + 1,0,0,0,862,863,5,208,0,0,863,865,5,1,0,0,864,866,3,4,2,0,865,864,1,0, + 0,0,865,866,1,0,0,0,866,867,1,0,0,0,867,965,5,2,0,0,868,869,5,161,0,0, + 869,870,5,1,0,0,870,873,3,4,2,0,871,872,5,17,0,0,872,874,7,13,0,0,873, + 871,1,0,0,0,873,874,1,0,0,0,874,875,1,0,0,0,875,876,5,2,0,0,876,965,1, + 0,0,0,877,878,7,14,0,0,878,879,5,1,0,0,879,880,3,4,2,0,880,881,5,2,0, + 0,881,965,1,0,0,0,882,883,5,164,0,0,883,884,5,1,0,0,884,885,3,4,2,0,885, + 886,5,17,0,0,886,887,3,106,53,0,887,888,5,2,0,0,888,965,1,0,0,0,889,890, + 5,211,0,0,890,891,5,1,0,0,891,894,5,244,0,0,892,893,5,17,0,0,893,895, + 7,15,0,0,894,892,1,0,0,0,894,895,1,0,0,0,895,898,1,0,0,0,896,897,5,17, + 0,0,897,899,3,202,101,0,898,896,1,0,0,0,898,899,1,0,0,0,899,902,1,0,0, + 0,900,901,5,17,0,0,901,903,7,16,0,0,902,900,1,0,0,0,902,903,1,0,0,0,903, + 904,1,0,0,0,904,965,5,2,0,0,905,906,5,29,0,0,906,907,5,1,0,0,907,965, + 5,2,0,0,908,909,5,30,0,0,909,910,5,1,0,0,910,911,3,4,2,0,911,912,5,17, + 0,0,912,913,3,4,2,0,913,914,5,2,0,0,914,965,1,0,0,0,915,916,5,31,0,0, + 916,917,5,1,0,0,917,918,3,4,2,0,918,919,5,17,0,0,919,920,3,4,2,0,920, + 921,5,17,0,0,921,922,3,4,2,0,922,923,5,2,0,0,923,965,1,0,0,0,924,925, + 5,32,0,0,925,926,5,1,0,0,926,927,3,4,2,0,927,928,5,2,0,0,928,965,1,0, + 0,0,929,930,5,33,0,0,930,931,5,1,0,0,931,932,3,4,2,0,932,933,5,2,0,0, + 933,965,1,0,0,0,934,935,5,34,0,0,935,936,5,1,0,0,936,937,3,4,2,0,937, + 938,5,2,0,0,938,965,1,0,0,0,939,940,5,35,0,0,940,941,5,1,0,0,941,942, + 3,4,2,0,942,943,5,2,0,0,943,965,1,0,0,0,944,945,5,36,0,0,945,946,5,1, + 0,0,946,947,3,4,2,0,947,948,5,2,0,0,948,965,1,0,0,0,949,950,5,37,0,0, + 950,951,5,1,0,0,951,952,3,4,2,0,952,953,5,2,0,0,953,965,1,0,0,0,954,955, + 5,38,0,0,955,956,5,1,0,0,956,957,3,4,2,0,957,958,5,2,0,0,958,965,1,0, + 0,0,959,960,5,39,0,0,960,961,5,1,0,0,961,962,3,4,2,0,962,963,5,2,0,0, + 963,965,1,0,0,0,964,862,1,0,0,0,964,868,1,0,0,0,964,877,1,0,0,0,964,882, + 1,0,0,0,964,889,1,0,0,0,964,905,1,0,0,0,964,908,1,0,0,0,964,915,1,0,0, + 0,964,924,1,0,0,0,964,929,1,0,0,0,964,934,1,0,0,0,964,939,1,0,0,0,964, + 944,1,0,0,0,964,949,1,0,0,0,964,954,1,0,0,0,964,959,1,0,0,0,965,55,1, + 0,0,0,966,967,5,208,0,0,967,969,5,1,0,0,968,970,3,6,3,0,969,968,1,0,0, + 0,969,970,1,0,0,0,970,971,1,0,0,0,971,1069,5,2,0,0,972,973,5,161,0,0, + 973,974,5,1,0,0,974,977,3,6,3,0,975,976,5,17,0,0,976,978,7,13,0,0,977, + 975,1,0,0,0,977,978,1,0,0,0,978,979,1,0,0,0,979,980,5,2,0,0,980,1069, + 1,0,0,0,981,982,7,14,0,0,982,983,5,1,0,0,983,984,3,6,3,0,984,985,5,2, + 0,0,985,1069,1,0,0,0,986,987,5,164,0,0,987,988,5,1,0,0,988,989,3,6,3, + 0,989,990,5,17,0,0,990,991,3,106,53,0,991,992,5,2,0,0,992,1069,1,0,0, + 0,993,994,5,211,0,0,994,995,5,1,0,0,995,998,5,244,0,0,996,997,5,17,0, + 0,997,999,7,15,0,0,998,996,1,0,0,0,998,999,1,0,0,0,999,1002,1,0,0,0,1000, + 1001,5,17,0,0,1001,1003,3,204,102,0,1002,1000,1,0,0,0,1002,1003,1,0,0, + 0,1003,1006,1,0,0,0,1004,1005,5,17,0,0,1005,1007,7,16,0,0,1006,1004,1, + 0,0,0,1006,1007,1,0,0,0,1007,1008,1,0,0,0,1008,1069,5,2,0,0,1009,1010, + 5,29,0,0,1010,1011,5,1,0,0,1011,1069,5,2,0,0,1012,1013,5,30,0,0,1013, + 1014,5,1,0,0,1014,1015,3,6,3,0,1015,1016,5,17,0,0,1016,1017,3,4,2,0,1017, + 1018,5,2,0,0,1018,1069,1,0,0,0,1019,1020,5,31,0,0,1020,1021,5,1,0,0,1021, + 1022,3,6,3,0,1022,1023,5,17,0,0,1023,1024,3,6,3,0,1024,1025,5,17,0,0, + 1025,1026,3,6,3,0,1026,1027,5,2,0,0,1027,1069,1,0,0,0,1028,1029,5,32, + 0,0,1029,1030,5,1,0,0,1030,1031,3,6,3,0,1031,1032,5,2,0,0,1032,1069,1, + 0,0,0,1033,1034,5,33,0,0,1034,1035,5,1,0,0,1035,1036,3,6,3,0,1036,1037, + 5,2,0,0,1037,1069,1,0,0,0,1038,1039,5,34,0,0,1039,1040,5,1,0,0,1040,1041, + 3,6,3,0,1041,1042,5,2,0,0,1042,1069,1,0,0,0,1043,1044,5,35,0,0,1044,1045, + 5,1,0,0,1045,1046,3,6,3,0,1046,1047,5,2,0,0,1047,1069,1,0,0,0,1048,1049, + 5,36,0,0,1049,1050,5,1,0,0,1050,1051,3,6,3,0,1051,1052,5,2,0,0,1052,1069, + 1,0,0,0,1053,1054,5,37,0,0,1054,1055,5,1,0,0,1055,1056,3,6,3,0,1056,1057, + 5,2,0,0,1057,1069,1,0,0,0,1058,1059,5,38,0,0,1059,1060,5,1,0,0,1060,1061, + 3,6,3,0,1061,1062,5,2,0,0,1062,1069,1,0,0,0,1063,1064,5,39,0,0,1064,1065, + 5,1,0,0,1065,1066,3,6,3,0,1066,1067,5,2,0,0,1067,1069,1,0,0,0,1068,966, + 1,0,0,0,1068,972,1,0,0,0,1068,981,1,0,0,0,1068,986,1,0,0,0,1068,993,1, + 0,0,0,1068,1009,1,0,0,0,1068,1012,1,0,0,0,1068,1019,1,0,0,0,1068,1028, + 1,0,0,0,1068,1033,1,0,0,0,1068,1038,1,0,0,0,1068,1043,1,0,0,0,1068,1048, + 1,0,0,0,1068,1053,1,0,0,0,1068,1058,1,0,0,0,1068,1063,1,0,0,0,1069,57, + 1,0,0,0,1070,1071,5,57,0,0,1071,1072,5,1,0,0,1072,1075,3,4,2,0,1073,1074, + 5,17,0,0,1074,1076,3,4,2,0,1075,1073,1,0,0,0,1076,1077,1,0,0,0,1077,1075, + 1,0,0,0,1077,1078,1,0,0,0,1078,1079,1,0,0,0,1079,1080,5,2,0,0,1080,1100, + 1,0,0,0,1081,1082,5,60,0,0,1082,1083,5,1,0,0,1083,1086,3,4,2,0,1084,1085, + 5,17,0,0,1085,1087,3,4,2,0,1086,1084,1,0,0,0,1087,1088,1,0,0,0,1088,1086, + 1,0,0,0,1088,1089,1,0,0,0,1089,1090,1,0,0,0,1090,1091,5,2,0,0,1091,1100, + 1,0,0,0,1092,1093,7,17,0,0,1093,1094,5,1,0,0,1094,1095,3,4,2,0,1095,1096, + 5,17,0,0,1096,1097,3,4,2,0,1097,1098,5,2,0,0,1098,1100,1,0,0,0,1099,1070, + 1,0,0,0,1099,1081,1,0,0,0,1099,1092,1,0,0,0,1100,59,1,0,0,0,1101,1102, + 5,114,0,0,1102,1103,5,1,0,0,1103,1104,3,4,2,0,1104,1105,5,17,0,0,1105, + 1107,5,245,0,0,1106,1108,3,176,88,0,1107,1106,1,0,0,0,1107,1108,1,0,0, + 0,1108,1111,1,0,0,0,1109,1110,5,128,0,0,1110,1112,3,192,96,0,1111,1109, + 1,0,0,0,1111,1112,1,0,0,0,1112,1114,1,0,0,0,1113,1115,3,174,87,0,1114, + 1113,1,0,0,0,1114,1115,1,0,0,0,1115,1117,1,0,0,0,1116,1118,3,182,91,0, + 1117,1116,1,0,0,0,1117,1118,1,0,0,0,1118,1120,1,0,0,0,1119,1121,3,184, + 92,0,1120,1119,1,0,0,0,1120,1121,1,0,0,0,1121,1122,1,0,0,0,1122,1123, + 5,2,0,0,1123,61,1,0,0,0,1124,1125,5,222,0,0,1125,1126,5,1,0,0,1126,1127, + 3,4,2,0,1127,1128,5,17,0,0,1128,1138,5,245,0,0,1129,1130,5,231,0,0,1130, + 1135,3,192,96,0,1131,1132,5,17,0,0,1132,1134,3,192,96,0,1133,1131,1,0, + 0,0,1134,1137,1,0,0,0,1135,1133,1,0,0,0,1135,1136,1,0,0,0,1136,1139,1, + 0,0,0,1137,1135,1,0,0,0,1138,1129,1,0,0,0,1138,1139,1,0,0,0,1139,1141, + 1,0,0,0,1140,1142,3,172,86,0,1141,1140,1,0,0,0,1141,1142,1,0,0,0,1142, + 1143,1,0,0,0,1143,1144,5,2,0,0,1144,1186,1,0,0,0,1145,1146,5,223,0,0, + 1146,1147,5,1,0,0,1147,1148,3,4,2,0,1148,1149,5,17,0,0,1149,1151,5,245, + 0,0,1150,1152,3,176,88,0,1151,1150,1,0,0,0,1151,1152,1,0,0,0,1152,1155, + 1,0,0,0,1153,1154,5,128,0,0,1154,1156,3,192,96,0,1155,1153,1,0,0,0,1155, + 1156,1,0,0,0,1156,1158,1,0,0,0,1157,1159,3,174,87,0,1158,1157,1,0,0,0, + 1158,1159,1,0,0,0,1159,1161,1,0,0,0,1160,1162,3,178,89,0,1161,1160,1, + 0,0,0,1161,1162,1,0,0,0,1162,1164,1,0,0,0,1163,1165,3,172,86,0,1164,1163, + 1,0,0,0,1164,1165,1,0,0,0,1165,1166,1,0,0,0,1166,1167,5,2,0,0,1167,1186, + 1,0,0,0,1168,1169,5,66,0,0,1169,1170,5,1,0,0,1170,1172,3,4,2,0,1171,1173, + 3,196,98,0,1172,1171,1,0,0,0,1172,1173,1,0,0,0,1173,1175,1,0,0,0,1174, + 1176,3,198,99,0,1175,1174,1,0,0,0,1175,1176,1,0,0,0,1176,1178,1,0,0,0, + 1177,1179,3,180,90,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0,1179,1181,1, + 0,0,0,1180,1182,7,18,0,0,1181,1180,1,0,0,0,1181,1182,1,0,0,0,1182,1183, + 1,0,0,0,1183,1184,5,2,0,0,1184,1186,1,0,0,0,1185,1124,1,0,0,0,1185,1145, + 1,0,0,0,1185,1168,1,0,0,0,1186,63,1,0,0,0,1187,1188,5,113,0,0,1188,1189, + 5,1,0,0,1189,1190,3,4,2,0,1190,1191,5,17,0,0,1191,1192,3,4,2,0,1192,1193, + 5,2,0,0,1193,65,1,0,0,0,1194,1195,5,113,0,0,1195,1196,5,1,0,0,1196,1197, + 3,6,3,0,1197,1198,5,17,0,0,1198,1199,3,6,3,0,1199,1200,5,2,0,0,1200,67, + 1,0,0,0,1201,1202,7,19,0,0,1202,1203,5,1,0,0,1203,1204,3,6,3,0,1204,1205, + 5,2,0,0,1205,1210,1,0,0,0,1206,1207,5,102,0,0,1207,1208,5,1,0,0,1208, + 1210,5,2,0,0,1209,1201,1,0,0,0,1209,1206,1,0,0,0,1210,69,1,0,0,0,1211, + 1212,7,19,0,0,1212,1213,5,1,0,0,1213,1218,3,4,2,0,1214,1216,3,112,56, + 0,1215,1217,3,114,57,0,1216,1215,1,0,0,0,1216,1217,1,0,0,0,1217,1219, + 1,0,0,0,1218,1214,1,0,0,0,1218,1219,1,0,0,0,1219,1220,1,0,0,0,1220,1221, + 5,2,0,0,1221,71,1,0,0,0,1222,1223,7,20,0,0,1223,1224,5,1,0,0,1224,1225, + 3,4,2,0,1225,1226,5,152,0,0,1226,1228,5,1,0,0,1227,1229,3,98,49,0,1228, + 1227,1,0,0,0,1228,1229,1,0,0,0,1229,1231,1,0,0,0,1230,1232,3,100,50,0, + 1231,1230,1,0,0,0,1231,1232,1,0,0,0,1232,1234,1,0,0,0,1233,1235,3,104, + 52,0,1234,1233,1,0,0,0,1234,1235,1,0,0,0,1235,1236,1,0,0,0,1236,1237, + 5,2,0,0,1237,1238,5,2,0,0,1238,1270,1,0,0,0,1239,1240,7,21,0,0,1240,1241, + 5,1,0,0,1241,1248,3,4,2,0,1242,1243,5,17,0,0,1243,1246,3,106,53,0,1244, + 1245,5,17,0,0,1245,1247,3,86,43,0,1246,1244,1,0,0,0,1246,1247,1,0,0,0, + 1247,1249,1,0,0,0,1248,1242,1,0,0,0,1248,1249,1,0,0,0,1249,1250,1,0,0, + 0,1250,1251,5,152,0,0,1251,1253,5,1,0,0,1252,1254,3,98,49,0,1253,1252, + 1,0,0,0,1253,1254,1,0,0,0,1254,1255,1,0,0,0,1255,1256,3,100,50,0,1256, + 1257,1,0,0,0,1257,1258,5,2,0,0,1258,1259,5,2,0,0,1259,1270,1,0,0,0,1260, + 1261,5,151,0,0,1261,1262,5,1,0,0,1262,1263,3,4,2,0,1263,1264,5,152,0, + 0,1264,1265,5,1,0,0,1265,1266,3,98,49,0,1266,1267,5,2,0,0,1267,1268,5, + 2,0,0,1268,1270,1,0,0,0,1269,1222,1,0,0,0,1269,1239,1,0,0,0,1269,1260, + 1,0,0,0,1270,73,1,0,0,0,1271,1272,7,20,0,0,1272,1273,5,1,0,0,1273,1274, + 3,6,3,0,1274,1275,5,152,0,0,1275,1277,5,1,0,0,1276,1278,3,98,49,0,1277, + 1276,1,0,0,0,1277,1278,1,0,0,0,1278,1280,1,0,0,0,1279,1281,3,100,50,0, + 1280,1279,1,0,0,0,1280,1281,1,0,0,0,1281,1283,1,0,0,0,1282,1284,3,104, + 52,0,1283,1282,1,0,0,0,1283,1284,1,0,0,0,1284,1285,1,0,0,0,1285,1286, + 5,2,0,0,1286,1287,5,2,0,0,1287,1330,1,0,0,0,1288,1289,7,21,0,0,1289,1290, + 5,1,0,0,1290,1296,3,6,3,0,1291,1292,5,17,0,0,1292,1294,3,106,53,0,1293, + 1295,3,86,43,0,1294,1293,1,0,0,0,1294,1295,1,0,0,0,1295,1297,1,0,0,0, + 1296,1291,1,0,0,0,1296,1297,1,0,0,0,1297,1298,1,0,0,0,1298,1299,5,152, + 0,0,1299,1301,5,1,0,0,1300,1302,3,98,49,0,1301,1300,1,0,0,0,1301,1302, + 1,0,0,0,1302,1303,1,0,0,0,1303,1304,3,100,50,0,1304,1305,1,0,0,0,1305, + 1306,5,2,0,0,1306,1307,5,2,0,0,1307,1330,1,0,0,0,1308,1309,5,77,0,0,1309, + 1310,5,1,0,0,1310,1311,5,152,0,0,1311,1313,5,1,0,0,1312,1314,3,98,49, + 0,1313,1312,1,0,0,0,1313,1314,1,0,0,0,1314,1315,1,0,0,0,1315,1316,3,100, + 50,0,1316,1317,1,0,0,0,1317,1318,5,2,0,0,1318,1319,5,2,0,0,1319,1330, + 1,0,0,0,1320,1321,5,151,0,0,1321,1322,5,1,0,0,1322,1323,3,6,3,0,1323, + 1324,5,152,0,0,1324,1325,5,1,0,0,1325,1326,3,98,49,0,1326,1327,5,2,0, + 0,1327,1328,5,2,0,0,1328,1330,1,0,0,0,1329,1271,1,0,0,0,1329,1288,1,0, + 0,0,1329,1308,1,0,0,0,1329,1320,1,0,0,0,1330,75,1,0,0,0,1331,1332,3,192, + 96,0,1332,1333,5,68,0,0,1333,1334,3,192,96,0,1334,77,1,0,0,0,1335,1340, + 3,80,40,0,1336,1337,5,17,0,0,1337,1339,3,80,40,0,1338,1336,1,0,0,0,1339, + 1342,1,0,0,0,1340,1338,1,0,0,0,1340,1341,1,0,0,0,1341,79,1,0,0,0,1342, + 1340,1,0,0,0,1343,1345,3,206,103,0,1344,1343,1,0,0,0,1344,1345,1,0,0, + 0,1345,1346,1,0,0,0,1346,1347,3,192,96,0,1347,1348,5,20,0,0,1348,1349, + 3,68,34,0,1349,81,1,0,0,0,1350,1352,3,206,103,0,1351,1350,1,0,0,0,1351, + 1352,1,0,0,0,1352,1353,1,0,0,0,1353,1354,3,192,96,0,1354,1355,5,20,0, + 0,1355,1356,3,6,3,0,1356,83,1,0,0,0,1357,1358,3,192,96,0,1358,1359,5, + 7,0,0,1359,1360,3,86,43,0,1360,85,1,0,0,0,1361,1374,3,216,108,0,1362, + 1363,5,218,0,0,1363,1364,5,1,0,0,1364,1365,3,216,108,0,1365,1366,5,17, + 0,0,1366,1369,3,218,109,0,1367,1368,5,17,0,0,1368,1370,5,244,0,0,1369, + 1367,1,0,0,0,1369,1370,1,0,0,0,1370,1371,1,0,0,0,1371,1372,5,2,0,0,1372, + 1374,1,0,0,0,1373,1361,1,0,0,0,1373,1362,1,0,0,0,1374,87,1,0,0,0,1375, + 1380,3,92,46,0,1376,1377,5,17,0,0,1377,1379,3,92,46,0,1378,1376,1,0,0, + 0,1379,1382,1,0,0,0,1380,1378,1,0,0,0,1380,1381,1,0,0,0,1381,89,1,0,0, + 0,1382,1380,1,0,0,0,1383,1388,3,92,46,0,1384,1385,5,17,0,0,1385,1387, + 3,92,46,0,1386,1384,1,0,0,0,1387,1390,1,0,0,0,1388,1386,1,0,0,0,1388, + 1389,1,0,0,0,1389,1400,1,0,0,0,1390,1388,1,0,0,0,1391,1392,5,27,0,0,1392, + 1397,3,192,96,0,1393,1394,5,17,0,0,1394,1396,3,192,96,0,1395,1393,1,0, + 0,0,1396,1399,1,0,0,0,1397,1395,1,0,0,0,1397,1398,1,0,0,0,1398,1401,1, + 0,0,0,1399,1397,1,0,0,0,1400,1391,1,0,0,0,1400,1401,1,0,0,0,1401,91,1, + 0,0,0,1402,1405,3,4,2,0,1403,1404,5,46,0,0,1404,1406,3,186,93,0,1405, + 1403,1,0,0,0,1405,1406,1,0,0,0,1406,93,1,0,0,0,1407,1409,3,18,9,0,1408, + 1407,1,0,0,0,1408,1409,1,0,0,0,1409,1413,1,0,0,0,1410,1414,3,20,10,0, + 1411,1414,3,96,48,0,1412,1414,3,16,8,0,1413,1410,1,0,0,0,1413,1411,1, + 0,0,0,1413,1412,1,0,0,0,1413,1414,1,0,0,0,1414,1416,1,0,0,0,1415,1417, + 3,22,11,0,1416,1415,1,0,0,0,1416,1417,1,0,0,0,1417,1419,1,0,0,0,1418, + 1420,3,14,7,0,1419,1418,1,0,0,0,1419,1420,1,0,0,0,1420,95,1,0,0,0,1421, + 1422,5,206,0,0,1422,1423,3,4,2,0,1423,97,1,0,0,0,1424,1425,5,156,0,0, + 1425,1426,5,76,0,0,1426,1431,3,192,96,0,1427,1428,5,17,0,0,1428,1430, + 3,192,96,0,1429,1427,1,0,0,0,1430,1433,1,0,0,0,1431,1429,1,0,0,0,1431, + 1432,1,0,0,0,1432,99,1,0,0,0,1433,1431,1,0,0,0,1434,1435,5,75,0,0,1435, + 1436,5,76,0,0,1436,1441,3,102,51,0,1437,1438,5,17,0,0,1438,1440,3,102, + 51,0,1439,1437,1,0,0,0,1440,1443,1,0,0,0,1441,1439,1,0,0,0,1441,1442, + 1,0,0,0,1442,101,1,0,0,0,1443,1441,1,0,0,0,1444,1446,3,192,96,0,1445, + 1447,7,22,0,0,1446,1445,1,0,0,0,1446,1447,1,0,0,0,1447,103,1,0,0,0,1448, + 1449,5,119,0,0,1449,1452,5,188,0,0,1450,1452,5,158,0,0,1451,1448,1,0, + 0,0,1451,1450,1,0,0,0,1452,1453,1,0,0,0,1453,1454,5,51,0,0,1454,1455, + 3,110,55,0,1455,1456,5,47,0,0,1456,1457,3,110,55,0,1457,105,1,0,0,0,1458, + 1460,7,23,0,0,1459,1458,1,0,0,0,1459,1460,1,0,0,0,1460,1461,1,0,0,0,1461, + 1462,5,241,0,0,1462,107,1,0,0,0,1463,1465,7,23,0,0,1464,1463,1,0,0,0, + 1464,1465,1,0,0,0,1465,1466,1,0,0,0,1466,1467,5,242,0,0,1467,109,1,0, + 0,0,1468,1469,3,106,53,0,1469,1470,5,153,0,0,1470,1482,1,0,0,0,1471,1472, + 3,106,53,0,1472,1473,5,154,0,0,1473,1482,1,0,0,0,1474,1475,5,159,0,0, + 1475,1476,5,119,0,0,1476,1482,5,189,0,0,1477,1478,5,155,0,0,1478,1482, + 5,153,0,0,1479,1480,5,155,0,0,1480,1482,5,154,0,0,1481,1468,1,0,0,0,1481, + 1471,1,0,0,0,1481,1474,1,0,0,0,1481,1477,1,0,0,0,1481,1479,1,0,0,0,1482, + 111,1,0,0,0,1483,1484,5,144,0,0,1484,1485,7,24,0,0,1485,1490,3,192,96, + 0,1486,1487,5,17,0,0,1487,1489,3,192,96,0,1488,1486,1,0,0,0,1489,1492, + 1,0,0,0,1490,1488,1,0,0,0,1490,1491,1,0,0,0,1491,1501,1,0,0,0,1492,1490, + 1,0,0,0,1493,1494,5,211,0,0,1494,1495,5,1,0,0,1495,1498,5,244,0,0,1496, + 1497,5,17,0,0,1497,1499,7,16,0,0,1498,1496,1,0,0,0,1498,1499,1,0,0,0, + 1499,1500,1,0,0,0,1500,1502,5,2,0,0,1501,1493,1,0,0,0,1501,1502,1,0,0, + 0,1502,1516,1,0,0,0,1503,1504,5,144,0,0,1504,1513,5,72,0,0,1505,1506, + 5,211,0,0,1506,1507,5,1,0,0,1507,1510,5,244,0,0,1508,1509,5,17,0,0,1509, + 1511,7,16,0,0,1510,1508,1,0,0,0,1510,1511,1,0,0,0,1511,1512,1,0,0,0,1512, + 1514,5,2,0,0,1513,1505,1,0,0,0,1513,1514,1,0,0,0,1514,1516,1,0,0,0,1515, + 1483,1,0,0,0,1515,1503,1,0,0,0,1516,113,1,0,0,0,1517,1518,5,146,0,0,1518, + 1519,3,6,3,0,1519,115,1,0,0,0,1520,1521,3,188,94,0,1521,1524,3,122,61, + 0,1522,1523,5,221,0,0,1523,1525,3,86,43,0,1524,1522,1,0,0,0,1524,1525, + 1,0,0,0,1525,117,1,0,0,0,1526,1530,3,126,63,0,1527,1530,3,130,65,0,1528, + 1530,3,128,64,0,1529,1526,1,0,0,0,1529,1527,1,0,0,0,1529,1528,1,0,0,0, + 1530,119,1,0,0,0,1531,1534,3,128,64,0,1532,1534,3,126,63,0,1533,1531, + 1,0,0,0,1533,1532,1,0,0,0,1534,121,1,0,0,0,1535,1541,3,126,63,0,1536, + 1541,3,130,65,0,1537,1541,3,134,67,0,1538,1541,3,124,62,0,1539,1541,3, + 128,64,0,1540,1535,1,0,0,0,1540,1536,1,0,0,0,1540,1537,1,0,0,0,1540,1538, + 1,0,0,0,1540,1539,1,0,0,0,1541,123,1,0,0,0,1542,1546,5,127,0,0,1543,1546, + 3,136,68,0,1544,1546,3,138,69,0,1545,1542,1,0,0,0,1545,1543,1,0,0,0,1545, + 1544,1,0,0,0,1546,125,1,0,0,0,1547,1550,3,218,109,0,1548,1550,3,140,70, + 0,1549,1547,1,0,0,0,1549,1548,1,0,0,0,1550,1552,1,0,0,0,1551,1553,3,166, + 83,0,1552,1551,1,0,0,0,1552,1553,1,0,0,0,1553,1558,1,0,0,0,1554,1556, + 5,50,0,0,1555,1554,1,0,0,0,1555,1556,1,0,0,0,1556,1557,1,0,0,0,1557,1559, + 5,54,0,0,1558,1555,1,0,0,0,1558,1559,1,0,0,0,1559,127,1,0,0,0,1560,1565, + 3,206,103,0,1561,1562,5,8,0,0,1562,1563,3,126,63,0,1563,1564,5,9,0,0, + 1564,1566,1,0,0,0,1565,1561,1,0,0,0,1565,1566,1,0,0,0,1566,129,1,0,0, + 0,1567,1579,5,121,0,0,1568,1569,5,5,0,0,1569,1574,3,168,84,0,1570,1571, + 5,17,0,0,1571,1573,3,168,84,0,1572,1570,1,0,0,0,1573,1576,1,0,0,0,1574, + 1572,1,0,0,0,1574,1575,1,0,0,0,1575,1577,1,0,0,0,1576,1574,1,0,0,0,1577, + 1578,5,6,0,0,1578,1580,1,0,0,0,1579,1568,1,0,0,0,1579,1580,1,0,0,0,1580, + 131,1,0,0,0,1581,1584,3,130,65,0,1582,1584,3,126,63,0,1583,1581,1,0,0, + 0,1583,1582,1,0,0,0,1584,133,1,0,0,0,1585,1590,5,239,0,0,1586,1587,5, + 8,0,0,1587,1588,3,126,63,0,1588,1589,5,9,0,0,1589,1591,1,0,0,0,1590,1586, + 1,0,0,0,1590,1591,1,0,0,0,1591,135,1,0,0,0,1592,1622,5,125,0,0,1593,1605, + 5,235,0,0,1594,1595,5,5,0,0,1595,1600,3,140,70,0,1596,1597,5,15,0,0,1597, + 1599,3,140,70,0,1598,1596,1,0,0,0,1599,1602,1,0,0,0,1600,1598,1,0,0,0, + 1600,1601,1,0,0,0,1601,1603,1,0,0,0,1602,1600,1,0,0,0,1603,1604,5,6,0, + 0,1604,1606,1,0,0,0,1605,1594,1,0,0,0,1605,1606,1,0,0,0,1606,1622,1,0, + 0,0,1607,1619,5,236,0,0,1608,1609,5,5,0,0,1609,1614,3,188,94,0,1610,1611, + 5,15,0,0,1611,1613,3,188,94,0,1612,1610,1,0,0,0,1613,1616,1,0,0,0,1614, + 1612,1,0,0,0,1614,1615,1,0,0,0,1615,1617,1,0,0,0,1616,1614,1,0,0,0,1617, + 1618,5,6,0,0,1618,1620,1,0,0,0,1619,1608,1,0,0,0,1619,1620,1,0,0,0,1620, + 1622,1,0,0,0,1621,1592,1,0,0,0,1621,1593,1,0,0,0,1621,1607,1,0,0,0,1622, + 137,1,0,0,0,1623,1664,5,126,0,0,1624,1641,5,237,0,0,1625,1626,5,5,0,0, + 1626,1638,5,245,0,0,1627,1628,5,1,0,0,1628,1633,3,140,70,0,1629,1630, + 5,15,0,0,1630,1632,3,140,70,0,1631,1629,1,0,0,0,1632,1635,1,0,0,0,1633, + 1631,1,0,0,0,1633,1634,1,0,0,0,1634,1636,1,0,0,0,1635,1633,1,0,0,0,1636, + 1637,5,2,0,0,1637,1639,1,0,0,0,1638,1627,1,0,0,0,1638,1639,1,0,0,0,1639, + 1640,1,0,0,0,1640,1642,5,6,0,0,1641,1625,1,0,0,0,1641,1642,1,0,0,0,1642, + 1664,1,0,0,0,1643,1661,5,238,0,0,1644,1645,5,5,0,0,1645,1657,3,188,94, + 0,1646,1647,5,1,0,0,1647,1652,3,188,94,0,1648,1649,5,15,0,0,1649,1651, + 3,188,94,0,1650,1648,1,0,0,0,1651,1654,1,0,0,0,1652,1650,1,0,0,0,1652, + 1653,1,0,0,0,1653,1655,1,0,0,0,1654,1652,1,0,0,0,1655,1656,5,2,0,0,1656, + 1658,1,0,0,0,1657,1646,1,0,0,0,1657,1658,1,0,0,0,1658,1659,1,0,0,0,1659, + 1660,5,6,0,0,1660,1662,1,0,0,0,1661,1644,1,0,0,0,1661,1662,1,0,0,0,1662, + 1664,1,0,0,0,1663,1623,1,0,0,0,1663,1624,1,0,0,0,1663,1643,1,0,0,0,1664, + 139,1,0,0,0,1665,1666,5,245,0,0,1666,141,1,0,0,0,1667,1668,5,245,0,0, + 1668,143,1,0,0,0,1669,1670,7,25,0,0,1670,1675,3,146,73,0,1671,1672,5, + 17,0,0,1672,1674,3,146,73,0,1673,1671,1,0,0,0,1674,1677,1,0,0,0,1675, + 1673,1,0,0,0,1675,1676,1,0,0,0,1676,145,1,0,0,0,1677,1675,1,0,0,0,1678, + 1681,3,188,94,0,1679,1680,5,46,0,0,1680,1682,3,186,93,0,1681,1679,1,0, + 0,0,1681,1682,1,0,0,0,1682,147,1,0,0,0,1683,1688,3,150,75,0,1684,1685, + 5,247,0,0,1685,1687,3,150,75,0,1686,1684,1,0,0,0,1687,1690,1,0,0,0,1688, + 1686,1,0,0,0,1688,1689,1,0,0,0,1689,149,1,0,0,0,1690,1688,1,0,0,0,1691, + 1692,5,245,0,0,1692,1694,5,19,0,0,1693,1691,1,0,0,0,1693,1694,1,0,0,0, + 1694,1699,1,0,0,0,1695,1696,5,185,0,0,1696,1697,3,6,3,0,1697,1698,5,25, + 0,0,1698,1700,1,0,0,0,1699,1695,1,0,0,0,1699,1700,1,0,0,0,1700,1701,1, + 0,0,0,1701,1703,3,6,3,0,1702,1704,3,196,98,0,1703,1702,1,0,0,0,1703,1704, + 1,0,0,0,1704,1706,1,0,0,0,1705,1707,3,198,99,0,1706,1705,1,0,0,0,1706, + 1707,1,0,0,0,1707,151,1,0,0,0,1708,1713,3,154,77,0,1709,1710,5,247,0, + 0,1710,1712,3,154,77,0,1711,1709,1,0,0,0,1712,1715,1,0,0,0,1713,1711, + 1,0,0,0,1713,1714,1,0,0,0,1714,153,1,0,0,0,1715,1713,1,0,0,0,1716,1717, + 5,245,0,0,1717,1719,5,19,0,0,1718,1716,1,0,0,0,1718,1719,1,0,0,0,1719, + 1720,1,0,0,0,1720,1722,3,160,80,0,1721,1723,3,196,98,0,1722,1721,1,0, + 0,0,1722,1723,1,0,0,0,1723,1725,1,0,0,0,1724,1726,3,198,99,0,1725,1724, + 1,0,0,0,1725,1726,1,0,0,0,1726,155,1,0,0,0,1727,1730,7,25,0,0,1728,1729, + 5,167,0,0,1729,1731,3,158,79,0,1730,1728,1,0,0,0,1730,1731,1,0,0,0,1731, + 1732,1,0,0,0,1732,1733,5,128,0,0,1733,1734,5,245,0,0,1734,157,1,0,0,0, + 1735,1740,3,146,73,0,1736,1737,5,17,0,0,1737,1739,3,146,73,0,1738,1736, + 1,0,0,0,1739,1742,1,0,0,0,1740,1738,1,0,0,0,1740,1741,1,0,0,0,1741,159, + 1,0,0,0,1742,1740,1,0,0,0,1743,1744,5,185,0,0,1744,1745,3,6,3,0,1745, + 1746,5,25,0,0,1746,1748,1,0,0,0,1747,1743,1,0,0,0,1747,1748,1,0,0,0,1748, + 1749,1,0,0,0,1749,1751,3,164,82,0,1750,1752,3,200,100,0,1751,1750,1,0, + 0,0,1751,1752,1,0,0,0,1752,1753,1,0,0,0,1753,1757,3,162,81,0,1754,1756, + 3,162,81,0,1755,1754,1,0,0,0,1756,1759,1,0,0,0,1757,1755,1,0,0,0,1757, + 1758,1,0,0,0,1758,161,1,0,0,0,1759,1757,1,0,0,0,1760,1762,7,23,0,0,1761, + 1760,1,0,0,0,1761,1762,1,0,0,0,1762,1763,1,0,0,0,1763,1768,3,164,82,0, + 1764,1765,5,3,0,0,1765,1766,3,6,3,0,1766,1767,5,4,0,0,1767,1769,1,0,0, + 0,1768,1764,1,0,0,0,1768,1769,1,0,0,0,1769,163,1,0,0,0,1770,1774,5,245, + 0,0,1771,1774,3,106,53,0,1772,1774,3,108,54,0,1773,1770,1,0,0,0,1773, + 1771,1,0,0,0,1773,1772,1,0,0,0,1774,165,1,0,0,0,1775,1776,5,3,0,0,1776, + 1777,3,6,3,0,1777,1778,5,4,0,0,1778,1791,1,0,0,0,1779,1780,5,5,0,0,1780, + 1785,3,86,43,0,1781,1782,5,17,0,0,1782,1784,3,86,43,0,1783,1781,1,0,0, + 0,1784,1787,1,0,0,0,1785,1783,1,0,0,0,1785,1786,1,0,0,0,1786,1788,1,0, + 0,0,1787,1785,1,0,0,0,1788,1789,5,6,0,0,1789,1791,1,0,0,0,1790,1775,1, + 0,0,0,1790,1779,1,0,0,0,1791,167,1,0,0,0,1792,1795,3,128,64,0,1793,1796, + 3,192,96,0,1794,1796,3,170,85,0,1795,1793,1,0,0,0,1795,1794,1,0,0,0,1796, + 169,1,0,0,0,1797,1799,5,115,0,0,1798,1800,7,26,0,0,1799,1798,1,0,0,0, + 1799,1800,1,0,0,0,1800,171,1,0,0,0,1801,1802,7,27,0,0,1802,173,1,0,0, + 0,1803,1804,7,28,0,0,1804,175,1,0,0,0,1805,1806,5,167,0,0,1806,1811,3, + 192,96,0,1807,1808,5,17,0,0,1808,1810,3,192,96,0,1809,1807,1,0,0,0,1810, + 1813,1,0,0,0,1811,1809,1,0,0,0,1811,1812,1,0,0,0,1812,177,1,0,0,0,1813, + 1811,1,0,0,0,1814,1815,7,29,0,0,1815,179,1,0,0,0,1816,1817,5,70,0,0,1817, + 1818,3,4,2,0,1818,181,1,0,0,0,1819,1820,7,30,0,0,1820,183,1,0,0,0,1821, + 1822,7,31,0,0,1822,185,1,0,0,0,1823,1824,5,245,0,0,1824,187,1,0,0,0,1825, + 1826,5,245,0,0,1826,189,1,0,0,0,1827,1828,5,245,0,0,1828,191,1,0,0,0, + 1829,1832,5,245,0,0,1830,1831,5,21,0,0,1831,1833,5,245,0,0,1832,1830, + 1,0,0,0,1832,1833,1,0,0,0,1833,193,1,0,0,0,1834,1835,5,5,0,0,1835,1840, + 3,86,43,0,1836,1837,5,17,0,0,1837,1839,3,86,43,0,1838,1836,1,0,0,0,1839, + 1842,1,0,0,0,1840,1838,1,0,0,0,1840,1841,1,0,0,0,1841,1843,1,0,0,0,1842, + 1840,1,0,0,0,1843,1844,5,6,0,0,1844,195,1,0,0,0,1845,1846,5,71,0,0,1846, + 1847,3,216,108,0,1847,197,1,0,0,0,1848,1849,5,74,0,0,1849,1850,3,216, + 108,0,1850,199,1,0,0,0,1851,1852,7,32,0,0,1852,201,1,0,0,0,1853,1856, + 3,4,2,0,1854,1856,5,115,0,0,1855,1853,1,0,0,0,1855,1854,1,0,0,0,1856, + 203,1,0,0,0,1857,1860,3,6,3,0,1858,1860,5,115,0,0,1859,1857,1,0,0,0,1859, + 1858,1,0,0,0,1860,205,1,0,0,0,1861,1867,5,104,0,0,1862,1867,5,234,0,0, + 1863,1867,5,103,0,0,1864,1867,5,105,0,0,1865,1867,3,208,104,0,1866,1861, + 1,0,0,0,1866,1862,1,0,0,0,1866,1863,1,0,0,0,1866,1864,1,0,0,0,1866,1865, + 1,0,0,0,1867,207,1,0,0,0,1868,1869,5,110,0,0,1869,1870,5,105,0,0,1870, + 209,1,0,0,0,1871,1872,5,245,0,0,1872,211,1,0,0,0,1873,1874,5,245,0,0, + 1874,213,1,0,0,0,1875,1876,5,245,0,0,1876,215,1,0,0,0,1877,1883,3,106, + 53,0,1878,1883,3,108,54,0,1879,1883,5,243,0,0,1880,1883,5,244,0,0,1881, + 1883,5,54,0,0,1882,1877,1,0,0,0,1882,1878,1,0,0,0,1882,1879,1,0,0,0,1882, + 1880,1,0,0,0,1882,1881,1,0,0,0,1883,217,1,0,0,0,1884,1885,7,33,0,0,1885, + 219,1,0,0,0,1886,1887,7,34,0,0,1887,221,1,0,0,0,202,227,241,266,273,303, + 305,307,333,340,362,364,366,377,391,400,408,415,417,428,437,455,464,479, + 490,493,498,531,540,543,553,558,562,568,572,582,586,590,599,602,612,616, + 626,631,635,641,645,649,653,657,673,677,688,699,703,707,723,727,738,749, + 753,757,769,780,792,803,833,837,860,865,873,894,898,902,964,969,977,998, + 1002,1006,1068,1077,1088,1099,1107,1111,1114,1117,1120,1135,1138,1141, + 1151,1155,1158,1161,1164,1172,1175,1178,1181,1185,1209,1216,1218,1228, + 1231,1234,1246,1248,1253,1269,1277,1280,1283,1294,1296,1301,1313,1329, + 1340,1344,1351,1369,1373,1380,1388,1397,1400,1405,1408,1413,1416,1419, + 1431,1441,1446,1451,1459,1464,1481,1490,1498,1501,1510,1513,1515,1524, + 1529,1533,1540,1545,1549,1552,1555,1558,1565,1574,1579,1583,1590,1600, + 1605,1614,1619,1621,1633,1638,1641,1652,1657,1661,1663,1675,1681,1688, + 1693,1699,1703,1706,1713,1718,1722,1725,1730,1740,1747,1751,1757,1761, + 1768,1773,1785,1790,1795,1799,1811,1832,1840,1855,1859,1866,1882 + }; + staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); + + antlr4::atn::ATNDeserializer deserializer; + staticData->atn = deserializer.deserialize(staticData->serializedATN); + + const size_t count = staticData->atn->getNumberOfDecisions(); + staticData->decisionToDFA.reserve(count); + for (size_t i = 0; i < count; i++) { + staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i); + } + vtlParserStaticData = staticData.release(); +} + +} + +VtlParser::VtlParser(TokenStream *input) : VtlParser(input, antlr4::atn::ParserATNSimulatorOptions()) {} + +VtlParser::VtlParser(TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options) : Parser(input) { + VtlParser::initialize(); + _interpreter = new atn::ParserATNSimulator(this, *vtlParserStaticData->atn, vtlParserStaticData->decisionToDFA, vtlParserStaticData->sharedContextCache, options); +} + +VtlParser::~VtlParser() { + delete _interpreter; +} + +const atn::ATN& VtlParser::getATN() const { + return *vtlParserStaticData->atn; +} + +std::string VtlParser::getGrammarFileName() const { + return "Vtl.g4"; +} + +const std::vector& VtlParser::getRuleNames() const { + return vtlParserStaticData->ruleNames; +} + +const dfa::Vocabulary& VtlParser::getVocabulary() const { + return vtlParserStaticData->vocabulary; +} + +antlr4::atn::SerializedATNView VtlParser::getSerializedATN() const { + return vtlParserStaticData->serializedATN; +} + + +//----------------- StartContext ------------------------------------------------------------------ + +VtlParser::StartContext::StartContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::StartContext::EOF() { + return getToken(VtlParser::EOF, 0); +} + +std::vector VtlParser::StartContext::statement() { + return getRuleContexts(); +} + +VtlParser::StatementContext* VtlParser::StartContext::statement(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::StartContext::EOL() { + return getTokens(VtlParser::EOL); +} + +tree::TerminalNode* VtlParser::StartContext::EOL(size_t i) { + return getToken(VtlParser::EOL, i); +} + + +size_t VtlParser::StartContext::getRuleIndex() const { + return VtlParser::RuleStart; +} + +void VtlParser::StartContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterStart(this); +} + +void VtlParser::StartContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitStart(this); +} + + +std::any VtlParser::StartContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitStart(this); + else + return visitor->visitChildren(this); +} + +VtlParser::StartContext* VtlParser::start() { + StartContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 0, VtlParser::RuleStart); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(227); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::DEFINE || _la == VtlParser::IDENTIFIER) { + setState(222); + statement(); + setState(223); + match(VtlParser::EOL); + setState(229); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(230); + match(VtlParser::EOF); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- StatementContext ------------------------------------------------------------------ + +VtlParser::StatementContext::StatementContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::StatementContext::getRuleIndex() const { + return VtlParser::RuleStatement; +} + +void VtlParser::StatementContext::copyFrom(StatementContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- DefineExpressionContext ------------------------------------------------------------------ + +VtlParser::DefOperatorsContext* VtlParser::DefineExpressionContext::defOperators() { + return getRuleContext(0); +} + +VtlParser::DefineExpressionContext::DefineExpressionContext(StatementContext *ctx) { copyFrom(ctx); } + +void VtlParser::DefineExpressionContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDefineExpression(this); +} +void VtlParser::DefineExpressionContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDefineExpression(this); +} + +std::any VtlParser::DefineExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDefineExpression(this); + else + return visitor->visitChildren(this); +} +//----------------- TemporaryAssignmentContext ------------------------------------------------------------------ + +VtlParser::VarIDContext* VtlParser::TemporaryAssignmentContext::varID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TemporaryAssignmentContext::ASSIGN() { + return getToken(VtlParser::ASSIGN, 0); +} + +VtlParser::ExprContext* VtlParser::TemporaryAssignmentContext::expr() { + return getRuleContext(0); +} + +VtlParser::TemporaryAssignmentContext::TemporaryAssignmentContext(StatementContext *ctx) { copyFrom(ctx); } + +void VtlParser::TemporaryAssignmentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTemporaryAssignment(this); +} +void VtlParser::TemporaryAssignmentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTemporaryAssignment(this); +} + +std::any VtlParser::TemporaryAssignmentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTemporaryAssignment(this); + else + return visitor->visitChildren(this); +} +//----------------- PersistAssignmentContext ------------------------------------------------------------------ + +VtlParser::VarIDContext* VtlParser::PersistAssignmentContext::varID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::PersistAssignmentContext::PUT_SYMBOL() { + return getToken(VtlParser::PUT_SYMBOL, 0); +} + +VtlParser::ExprContext* VtlParser::PersistAssignmentContext::expr() { + return getRuleContext(0); +} + +VtlParser::PersistAssignmentContext::PersistAssignmentContext(StatementContext *ctx) { copyFrom(ctx); } + +void VtlParser::PersistAssignmentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterPersistAssignment(this); +} +void VtlParser::PersistAssignmentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitPersistAssignment(this); +} + +std::any VtlParser::PersistAssignmentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPersistAssignment(this); + else + return visitor->visitChildren(this); +} +VtlParser::StatementContext* VtlParser::statement() { + StatementContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 2, VtlParser::RuleStatement); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(241); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 1, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(232); + varID(); + setState(233); + match(VtlParser::ASSIGN); + setState(234); + expr(0); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(236); + varID(); + setState(237); + match(VtlParser::PUT_SYMBOL); + setState(238); + expr(0); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(240); + defOperators(); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ExprContext ------------------------------------------------------------------ + +VtlParser::ExprContext::ExprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ExprContext::getRuleIndex() const { + return VtlParser::RuleExpr; +} + +void VtlParser::ExprContext::copyFrom(ExprContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- VarIdExprContext ------------------------------------------------------------------ + +VtlParser::VarIDContext* VtlParser::VarIdExprContext::varID() { + return getRuleContext(0); +} + +VtlParser::VarIdExprContext::VarIdExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::VarIdExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterVarIdExpr(this); +} +void VtlParser::VarIdExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitVarIdExpr(this); +} + +std::any VtlParser::VarIdExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitVarIdExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- MembershipExprContext ------------------------------------------------------------------ + +VtlParser::ExprContext* VtlParser::MembershipExprContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::MembershipExprContext::MEMBERSHIP() { + return getToken(VtlParser::MEMBERSHIP, 0); +} + +VtlParser::SimpleComponentIdContext* VtlParser::MembershipExprContext::simpleComponentId() { + return getRuleContext(0); +} + +VtlParser::MembershipExprContext::MembershipExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::MembershipExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMembershipExpr(this); +} +void VtlParser::MembershipExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMembershipExpr(this); +} + +std::any VtlParser::MembershipExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMembershipExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- InNotInExprContext ------------------------------------------------------------------ + +VtlParser::ExprContext* VtlParser::InNotInExprContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::InNotInExprContext::IN() { + return getToken(VtlParser::IN, 0); +} + +tree::TerminalNode* VtlParser::InNotInExprContext::NOT_IN() { + return getToken(VtlParser::NOT_IN, 0); +} + +VtlParser::ListsContext* VtlParser::InNotInExprContext::lists() { + return getRuleContext(0); +} + +VtlParser::ValueDomainIDContext* VtlParser::InNotInExprContext::valueDomainID() { + return getRuleContext(0); +} + +VtlParser::InNotInExprContext::InNotInExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::InNotInExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInNotInExpr(this); +} +void VtlParser::InNotInExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInNotInExpr(this); +} + +std::any VtlParser::InNotInExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInNotInExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- BooleanExprContext ------------------------------------------------------------------ + +std::vector VtlParser::BooleanExprContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::BooleanExprContext::expr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::BooleanExprContext::AND() { + return getToken(VtlParser::AND, 0); +} + +tree::TerminalNode* VtlParser::BooleanExprContext::OR() { + return getToken(VtlParser::OR, 0); +} + +tree::TerminalNode* VtlParser::BooleanExprContext::XOR() { + return getToken(VtlParser::XOR, 0); +} + +VtlParser::BooleanExprContext::BooleanExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::BooleanExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBooleanExpr(this); +} +void VtlParser::BooleanExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBooleanExpr(this); +} + +std::any VtlParser::BooleanExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBooleanExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ComparisonExprContext ------------------------------------------------------------------ + +std::vector VtlParser::ComparisonExprContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::ComparisonExprContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::ComparisonOperandContext* VtlParser::ComparisonExprContext::comparisonOperand() { + return getRuleContext(0); +} + +VtlParser::ComparisonExprContext::ComparisonExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ComparisonExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComparisonExpr(this); +} +void VtlParser::ComparisonExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComparisonExpr(this); +} + +std::any VtlParser::ComparisonExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComparisonExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryExprContext ------------------------------------------------------------------ + +VtlParser::ExprContext* VtlParser::UnaryExprContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryExprContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::UnaryExprContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::UnaryExprContext::NOT() { + return getToken(VtlParser::NOT, 0); +} + +VtlParser::UnaryExprContext::UnaryExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryExpr(this); +} +void VtlParser::UnaryExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryExpr(this); +} + +std::any VtlParser::UnaryExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- FunctionsExpressionContext ------------------------------------------------------------------ + +VtlParser::FunctionsContext* VtlParser::FunctionsExpressionContext::functions() { + return getRuleContext(0); +} + +VtlParser::FunctionsExpressionContext::FunctionsExpressionContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::FunctionsExpressionContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFunctionsExpression(this); +} +void VtlParser::FunctionsExpressionContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFunctionsExpression(this); +} + +std::any VtlParser::FunctionsExpressionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFunctionsExpression(this); + else + return visitor->visitChildren(this); +} +//----------------- IfExprContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::IfExprContext::IF() { + return getToken(VtlParser::IF, 0); +} + +tree::TerminalNode* VtlParser::IfExprContext::THEN() { + return getToken(VtlParser::THEN, 0); +} + +tree::TerminalNode* VtlParser::IfExprContext::ELSE() { + return getToken(VtlParser::ELSE, 0); +} + +std::vector VtlParser::IfExprContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::IfExprContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::IfExprContext::IfExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::IfExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterIfExpr(this); +} +void VtlParser::IfExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitIfExpr(this); +} + +std::any VtlParser::IfExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIfExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ClauseExprContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ClauseExprContext::QLPAREN() { + return getToken(VtlParser::QLPAREN, 0); +} + +tree::TerminalNode* VtlParser::ClauseExprContext::QRPAREN() { + return getToken(VtlParser::QRPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::ClauseExprContext::expr() { + return getRuleContext(0); +} + +VtlParser::DatasetClauseContext* VtlParser::ClauseExprContext::datasetClause() { + return getRuleContext(0); +} + +VtlParser::ClauseExprContext::ClauseExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ClauseExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterClauseExpr(this); +} +void VtlParser::ClauseExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitClauseExpr(this); +} + +std::any VtlParser::ClauseExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitClauseExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- CaseExprContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CaseExprContext::CASE() { + return getToken(VtlParser::CASE, 0); +} + +tree::TerminalNode* VtlParser::CaseExprContext::ELSE() { + return getToken(VtlParser::ELSE, 0); +} + +std::vector VtlParser::CaseExprContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::CaseExprContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CaseExprContext::WHEN() { + return getTokens(VtlParser::WHEN); +} + +tree::TerminalNode* VtlParser::CaseExprContext::WHEN(size_t i) { + return getToken(VtlParser::WHEN, i); +} + +std::vector VtlParser::CaseExprContext::THEN() { + return getTokens(VtlParser::THEN); +} + +tree::TerminalNode* VtlParser::CaseExprContext::THEN(size_t i) { + return getToken(VtlParser::THEN, i); +} + +VtlParser::CaseExprContext::CaseExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::CaseExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCaseExpr(this); +} +void VtlParser::CaseExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCaseExpr(this); +} + +std::any VtlParser::CaseExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCaseExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ArithmeticExprContext ------------------------------------------------------------------ + +std::vector VtlParser::ArithmeticExprContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::ArithmeticExprContext::expr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::ArithmeticExprContext::MUL() { + return getToken(VtlParser::MUL, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprContext::DIV() { + return getToken(VtlParser::DIV, 0); +} + +VtlParser::ArithmeticExprContext::ArithmeticExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ArithmeticExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterArithmeticExpr(this); +} +void VtlParser::ArithmeticExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitArithmeticExpr(this); +} + +std::any VtlParser::ArithmeticExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitArithmeticExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ParenthesisExprContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ParenthesisExprContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::ParenthesisExprContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ParenthesisExprContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ParenthesisExprContext::ParenthesisExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ParenthesisExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterParenthesisExpr(this); +} +void VtlParser::ParenthesisExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitParenthesisExpr(this); +} + +std::any VtlParser::ParenthesisExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitParenthesisExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ConstantExprContext ------------------------------------------------------------------ + +VtlParser::ConstantContext* VtlParser::ConstantExprContext::constant() { + return getRuleContext(0); +} + +VtlParser::ConstantExprContext::ConstantExprContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ConstantExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConstantExpr(this); +} +void VtlParser::ConstantExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConstantExpr(this); +} + +std::any VtlParser::ConstantExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConstantExpr(this); + else + return visitor->visitChildren(this); +} +//----------------- ArithmeticExprOrConcatContext ------------------------------------------------------------------ + +std::vector VtlParser::ArithmeticExprOrConcatContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::ArithmeticExprOrConcatContext::expr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatContext::CONCAT() { + return getToken(VtlParser::CONCAT, 0); +} + +VtlParser::ArithmeticExprOrConcatContext::ArithmeticExprOrConcatContext(ExprContext *ctx) { copyFrom(ctx); } + +void VtlParser::ArithmeticExprOrConcatContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterArithmeticExprOrConcat(this); +} +void VtlParser::ArithmeticExprOrConcatContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitArithmeticExprOrConcat(this); +} + +std::any VtlParser::ArithmeticExprOrConcatContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitArithmeticExprOrConcat(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ExprContext* VtlParser::expr() { + return expr(0); +} + +VtlParser::ExprContext* VtlParser::expr(int precedence) { + ParserRuleContext *parentContext = _ctx; + size_t parentState = getState(); + VtlParser::ExprContext *_localctx = _tracker.createInstance(_ctx, parentState); + VtlParser::ExprContext *previousContext = _localctx; + (void)previousContext; // Silence compiler, in case the context is not used by generated code. + size_t startState = 4; + enterRecursionRule(_localctx, 4, VtlParser::RuleExpr, precedence); + + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + unrollRecursionContexts(parentContext); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(273); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 3, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + + setState(244); + match(VtlParser::LPAREN); + setState(245); + expr(0); + setState(246); + match(VtlParser::RPAREN); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(248); + functions(); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(249); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 1125899906867200) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(250); + antlrcpp::downCast(_localctx)->right = expr(11); + break; + } + + case 4: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(251); + match(VtlParser::IF); + setState(252); + antlrcpp::downCast(_localctx)->conditionalExpr = expr(0); + setState(253); + match(VtlParser::THEN); + setState(254); + antlrcpp::downCast(_localctx)->thenExpr = expr(0); + setState(255); + match(VtlParser::ELSE); + setState(256); + antlrcpp::downCast(_localctx)->elseExpr = expr(4); + break; + } + + case 5: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(258); + match(VtlParser::CASE); + setState(264); + _errHandler->sync(this); + _la = _input->LA(1); + do { + setState(259); + match(VtlParser::WHEN); + setState(260); + antlrcpp::downCast(_localctx)->exprContext = expr(0); + antlrcpp::downCast(_localctx)->condExpr.push_back(antlrcpp::downCast(_localctx)->exprContext); + setState(261); + match(VtlParser::THEN); + setState(262); + antlrcpp::downCast(_localctx)->exprContext = expr(0); + antlrcpp::downCast(_localctx)->thenExpr.push_back(antlrcpp::downCast(_localctx)->exprContext); + setState(266); + _errHandler->sync(this); + _la = _input->LA(1); + } while (_la == VtlParser::WHEN); + setState(268); + match(VtlParser::ELSE); + setState(269); + antlrcpp::downCast(_localctx)->elseExpr = expr(3); + break; + } + + case 6: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(271); + constant(); + break; + } + + case 7: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(272); + varID(); + break; + } + + default: + break; + } + _ctx->stop = _input->LT(-1); + setState(307); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 6, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + if (!_parseListeners.empty()) + triggerExitRuleEvent(); + previousContext = _localctx; + setState(305); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 5, _ctx)) { + case 1: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(275); + + if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); + setState(276); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::MUL + + || _la == VtlParser::DIV)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(277); + antlrcpp::downCast(_localctx)->right = expr(11); + break; + } + + case 2: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(278); + + if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(279); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MINUS || _la == VtlParser::CONCAT)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(280); + antlrcpp::downCast(_localctx)->right = expr(10); + break; + } + + case 3: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(281); + + if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(282); + antlrcpp::downCast(_localctx)->op = comparisonOperand(); + setState(283); + antlrcpp::downCast(_localctx)->right = expr(9); + break; + } + + case 4: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(285); + + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(286); + antlrcpp::downCast(_localctx)->op = match(VtlParser::AND); + setState(287); + antlrcpp::downCast(_localctx)->right = expr(7); + break; + } + + case 5: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(288); + + if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(289); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::OR + + || _la == VtlParser::XOR)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(290); + antlrcpp::downCast(_localctx)->right = expr(6); + break; + } + + case 6: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->dataset = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(291); + + if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); + setState(292); + match(VtlParser::QLPAREN); + setState(293); + antlrcpp::downCast(_localctx)->clause = datasetClause(); + setState(294); + match(VtlParser::QRPAREN); + break; + } + + case 7: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(296); + + if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); + setState(297); + match(VtlParser::MEMBERSHIP); + setState(298); + simpleComponentId(); + break; + } + + case 8: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExpr); + setState(299); + + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(300); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::IN + + || _la == VtlParser::NOT_IN)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(303); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::GLPAREN: { + setState(301); + lists(); + break; + } + + case VtlParser::IDENTIFIER: { + setState(302); + valueDomainID(); + break; + } + + default: + throw NoViableAltException(this); + } + break; + } + + default: + break; + } + } + setState(309); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 6, _ctx); + } + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + return _localctx; +} + +//----------------- ExprComponentContext ------------------------------------------------------------------ + +VtlParser::ExprComponentContext::ExprComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ExprComponentContext::getRuleIndex() const { + return VtlParser::RuleExprComponent; +} + +void VtlParser::ExprComponentContext::copyFrom(ExprComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- ArithmeticExprCompContext ------------------------------------------------------------------ + +std::vector VtlParser::ArithmeticExprCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::ArithmeticExprCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::ArithmeticExprCompContext::MUL() { + return getToken(VtlParser::MUL, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprCompContext::DIV() { + return getToken(VtlParser::DIV, 0); +} + +VtlParser::ArithmeticExprCompContext::ArithmeticExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ArithmeticExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterArithmeticExprComp(this); +} +void VtlParser::ArithmeticExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitArithmeticExprComp(this); +} + +std::any VtlParser::ArithmeticExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitArithmeticExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- IfExprCompContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::IfExprCompContext::IF() { + return getToken(VtlParser::IF, 0); +} + +tree::TerminalNode* VtlParser::IfExprCompContext::THEN() { + return getToken(VtlParser::THEN, 0); +} + +tree::TerminalNode* VtlParser::IfExprCompContext::ELSE() { + return getToken(VtlParser::ELSE, 0); +} + +std::vector VtlParser::IfExprCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::IfExprCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::IfExprCompContext::IfExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::IfExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterIfExprComp(this); +} +void VtlParser::IfExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitIfExprComp(this); +} + +std::any VtlParser::IfExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIfExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- ComparisonExprCompContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperandContext* VtlParser::ComparisonExprCompContext::comparisonOperand() { + return getRuleContext(0); +} + +std::vector VtlParser::ComparisonExprCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::ComparisonExprCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::ComparisonExprCompContext::ComparisonExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ComparisonExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComparisonExprComp(this); +} +void VtlParser::ComparisonExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComparisonExprComp(this); +} + +std::any VtlParser::ComparisonExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComparisonExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- FunctionsExpressionCompContext ------------------------------------------------------------------ + +VtlParser::FunctionsComponentsContext* VtlParser::FunctionsExpressionCompContext::functionsComponents() { + return getRuleContext(0); +} + +VtlParser::FunctionsExpressionCompContext::FunctionsExpressionCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::FunctionsExpressionCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFunctionsExpressionComp(this); +} +void VtlParser::FunctionsExpressionCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFunctionsExpressionComp(this); +} + +std::any VtlParser::FunctionsExpressionCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFunctionsExpressionComp(this); + else + return visitor->visitChildren(this); +} +//----------------- CompIdContext ------------------------------------------------------------------ + +VtlParser::ComponentIDContext* VtlParser::CompIdContext::componentID() { + return getRuleContext(0); +} + +VtlParser::CompIdContext::CompIdContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CompIdContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCompId(this); +} +void VtlParser::CompIdContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCompId(this); +} + +std::any VtlParser::CompIdContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCompId(this); + else + return visitor->visitChildren(this); +} +//----------------- ConstantExprCompContext ------------------------------------------------------------------ + +VtlParser::ConstantContext* VtlParser::ConstantExprCompContext::constant() { + return getRuleContext(0); +} + +VtlParser::ConstantExprCompContext::ConstantExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ConstantExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConstantExprComp(this); +} +void VtlParser::ConstantExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConstantExprComp(this); +} + +std::any VtlParser::ConstantExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConstantExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- ArithmeticExprOrConcatCompContext ------------------------------------------------------------------ + +std::vector VtlParser::ArithmeticExprOrConcatCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::ArithmeticExprOrConcatCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatCompContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatCompContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::ArithmeticExprOrConcatCompContext::CONCAT() { + return getToken(VtlParser::CONCAT, 0); +} + +VtlParser::ArithmeticExprOrConcatCompContext::ArithmeticExprOrConcatCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ArithmeticExprOrConcatCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterArithmeticExprOrConcatComp(this); +} +void VtlParser::ArithmeticExprOrConcatCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitArithmeticExprOrConcatComp(this); +} + +std::any VtlParser::ArithmeticExprOrConcatCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitArithmeticExprOrConcatComp(this); + else + return visitor->visitChildren(this); +} +//----------------- ParenthesisExprCompContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ParenthesisExprCompContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::ParenthesisExprCompContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ParenthesisExprCompContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ParenthesisExprCompContext::ParenthesisExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ParenthesisExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterParenthesisExprComp(this); +} +void VtlParser::ParenthesisExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitParenthesisExprComp(this); +} + +std::any VtlParser::ParenthesisExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitParenthesisExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- InNotInExprCompContext ------------------------------------------------------------------ + +VtlParser::ExprComponentContext* VtlParser::InNotInExprCompContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::InNotInExprCompContext::IN() { + return getToken(VtlParser::IN, 0); +} + +tree::TerminalNode* VtlParser::InNotInExprCompContext::NOT_IN() { + return getToken(VtlParser::NOT_IN, 0); +} + +VtlParser::ListsContext* VtlParser::InNotInExprCompContext::lists() { + return getRuleContext(0); +} + +VtlParser::ValueDomainIDContext* VtlParser::InNotInExprCompContext::valueDomainID() { + return getRuleContext(0); +} + +VtlParser::InNotInExprCompContext::InNotInExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::InNotInExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInNotInExprComp(this); +} +void VtlParser::InNotInExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInNotInExprComp(this); +} + +std::any VtlParser::InNotInExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInNotInExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryExprCompContext ------------------------------------------------------------------ + +VtlParser::ExprComponentContext* VtlParser::UnaryExprCompContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryExprCompContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::UnaryExprCompContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::UnaryExprCompContext::NOT() { + return getToken(VtlParser::NOT, 0); +} + +VtlParser::UnaryExprCompContext::UnaryExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryExprComp(this); +} +void VtlParser::UnaryExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryExprComp(this); +} + +std::any VtlParser::UnaryExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- CaseExprCompContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CaseExprCompContext::CASE() { + return getToken(VtlParser::CASE, 0); +} + +tree::TerminalNode* VtlParser::CaseExprCompContext::ELSE() { + return getToken(VtlParser::ELSE, 0); +} + +std::vector VtlParser::CaseExprCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::CaseExprCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CaseExprCompContext::WHEN() { + return getTokens(VtlParser::WHEN); +} + +tree::TerminalNode* VtlParser::CaseExprCompContext::WHEN(size_t i) { + return getToken(VtlParser::WHEN, i); +} + +std::vector VtlParser::CaseExprCompContext::THEN() { + return getTokens(VtlParser::THEN); +} + +tree::TerminalNode* VtlParser::CaseExprCompContext::THEN(size_t i) { + return getToken(VtlParser::THEN, i); +} + +VtlParser::CaseExprCompContext::CaseExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CaseExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCaseExprComp(this); +} +void VtlParser::CaseExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCaseExprComp(this); +} + +std::any VtlParser::CaseExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCaseExprComp(this); + else + return visitor->visitChildren(this); +} +//----------------- BooleanExprCompContext ------------------------------------------------------------------ + +std::vector VtlParser::BooleanExprCompContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::BooleanExprCompContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::BooleanExprCompContext::AND() { + return getToken(VtlParser::AND, 0); +} + +tree::TerminalNode* VtlParser::BooleanExprCompContext::OR() { + return getToken(VtlParser::OR, 0); +} + +tree::TerminalNode* VtlParser::BooleanExprCompContext::XOR() { + return getToken(VtlParser::XOR, 0); +} + +VtlParser::BooleanExprCompContext::BooleanExprCompContext(ExprComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::BooleanExprCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBooleanExprComp(this); +} +void VtlParser::BooleanExprCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBooleanExprComp(this); +} + +std::any VtlParser::BooleanExprCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBooleanExprComp(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ExprComponentContext* VtlParser::exprComponent() { + return exprComponent(0); +} + +VtlParser::ExprComponentContext* VtlParser::exprComponent(int precedence) { + ParserRuleContext *parentContext = _ctx; + size_t parentState = getState(); + VtlParser::ExprComponentContext *_localctx = _tracker.createInstance(_ctx, parentState); + VtlParser::ExprComponentContext *previousContext = _localctx; + (void)previousContext; // Silence compiler, in case the context is not used by generated code. + size_t startState = 6; + enterRecursionRule(_localctx, 6, VtlParser::RuleExprComponent, precedence); + + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + unrollRecursionContexts(parentContext); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(340); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 8, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + + setState(311); + match(VtlParser::LPAREN); + setState(312); + exprComponent(0); + setState(313); + match(VtlParser::RPAREN); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(315); + functionsComponents(); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(316); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 1125899906867200) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(317); + antlrcpp::downCast(_localctx)->right = exprComponent(11); + break; + } + + case 4: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(318); + match(VtlParser::IF); + setState(319); + antlrcpp::downCast(_localctx)->conditionalExpr = exprComponent(0); + setState(320); + match(VtlParser::THEN); + setState(321); + antlrcpp::downCast(_localctx)->thenExpr = exprComponent(0); + setState(322); + match(VtlParser::ELSE); + setState(323); + antlrcpp::downCast(_localctx)->elseExpr = exprComponent(4); + break; + } + + case 5: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(325); + match(VtlParser::CASE); + setState(331); + _errHandler->sync(this); + _la = _input->LA(1); + do { + setState(326); + match(VtlParser::WHEN); + setState(327); + antlrcpp::downCast(_localctx)->exprComponentContext = exprComponent(0); + antlrcpp::downCast(_localctx)->condExpr.push_back(antlrcpp::downCast(_localctx)->exprComponentContext); + setState(328); + match(VtlParser::THEN); + setState(329); + antlrcpp::downCast(_localctx)->exprComponentContext = exprComponent(0); + antlrcpp::downCast(_localctx)->thenExpr.push_back(antlrcpp::downCast(_localctx)->exprComponentContext); + setState(333); + _errHandler->sync(this); + _la = _input->LA(1); + } while (_la == VtlParser::WHEN); + setState(335); + match(VtlParser::ELSE); + setState(336); + antlrcpp::downCast(_localctx)->elseExpr = exprComponent(3); + break; + } + + case 6: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(338); + constant(); + break; + } + + case 7: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(339); + componentID(); + break; + } + + default: + break; + } + _ctx->stop = _input->LT(-1); + setState(366); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 11, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + if (!_parseListeners.empty()) + triggerExitRuleEvent(); + previousContext = _localctx; + setState(364); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 10, _ctx)) { + case 1: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(342); + + if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); + setState(343); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::MUL + + || _la == VtlParser::DIV)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(344); + antlrcpp::downCast(_localctx)->right = exprComponent(11); + break; + } + + case 2: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(345); + + if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(346); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MINUS || _la == VtlParser::CONCAT)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(347); + antlrcpp::downCast(_localctx)->right = exprComponent(10); + break; + } + + case 3: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(348); + + if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(349); + comparisonOperand(); + setState(350); + antlrcpp::downCast(_localctx)->right = exprComponent(9); + break; + } + + case 4: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(352); + + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(353); + antlrcpp::downCast(_localctx)->op = match(VtlParser::AND); + setState(354); + antlrcpp::downCast(_localctx)->right = exprComponent(7); + break; + } + + case 5: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(355); + + if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(356); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::OR + + || _la == VtlParser::XOR)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(357); + antlrcpp::downCast(_localctx)->right = exprComponent(6); + break; + } + + case 6: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + newContext->left = previousContext; + pushNewRecursionContext(newContext, startState, RuleExprComponent); + setState(358); + + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(359); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::IN + + || _la == VtlParser::NOT_IN)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(362); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::GLPAREN: { + setState(360); + lists(); + break; + } + + case VtlParser::IDENTIFIER: { + setState(361); + valueDomainID(); + break; + } + + default: + throw NoViableAltException(this); + } + break; + } + + default: + break; + } + } + setState(368); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 11, _ctx); + } + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + return _localctx; +} + +//----------------- FunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::FunctionsComponentsContext::FunctionsComponentsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::FunctionsComponentsContext::getRuleIndex() const { + return VtlParser::RuleFunctionsComponents; +} + +void VtlParser::FunctionsComponentsContext::copyFrom(FunctionsComponentsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- NumericFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::NumericOperatorsComponentContext* VtlParser::NumericFunctionsComponentsContext::numericOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::NumericFunctionsComponentsContext::NumericFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::NumericFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterNumericFunctionsComponents(this); +} +void VtlParser::NumericFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitNumericFunctionsComponents(this); +} + +std::any VtlParser::NumericFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNumericFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- StringFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::StringOperatorsComponentContext* VtlParser::StringFunctionsComponentsContext::stringOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::StringFunctionsComponentsContext::StringFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::StringFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterStringFunctionsComponents(this); +} +void VtlParser::StringFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitStringFunctionsComponents(this); +} + +std::any VtlParser::StringFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitStringFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- ComparisonFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperatorsComponentContext* VtlParser::ComparisonFunctionsComponentsContext::comparisonOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::ComparisonFunctionsComponentsContext::ComparisonFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ComparisonFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComparisonFunctionsComponents(this); +} +void VtlParser::ComparisonFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComparisonFunctionsComponents(this); +} + +std::any VtlParser::ComparisonFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComparisonFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::TimeOperatorsComponentContext* VtlParser::TimeFunctionsComponentsContext::timeOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::TimeFunctionsComponentsContext::TimeFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeFunctionsComponents(this); +} +void VtlParser::TimeFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeFunctionsComponents(this); +} + +std::any VtlParser::TimeFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- GenericFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::GenericOperatorsComponentContext* VtlParser::GenericFunctionsComponentsContext::genericOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::GenericFunctionsComponentsContext::GenericFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::GenericFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterGenericFunctionsComponents(this); +} +void VtlParser::GenericFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitGenericFunctionsComponents(this); +} + +std::any VtlParser::GenericFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitGenericFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- AnalyticFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::AnFunctionComponentContext* VtlParser::AnalyticFunctionsComponentsContext::anFunctionComponent() { + return getRuleContext(0); +} + +VtlParser::AnalyticFunctionsComponentsContext::AnalyticFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::AnalyticFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAnalyticFunctionsComponents(this); +} +void VtlParser::AnalyticFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAnalyticFunctionsComponents(this); +} + +std::any VtlParser::AnalyticFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAnalyticFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- ConditionalFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::ConditionalOperatorsComponentContext* VtlParser::ConditionalFunctionsComponentsContext::conditionalOperatorsComponent() { + return getRuleContext(0); +} + +VtlParser::ConditionalFunctionsComponentsContext::ConditionalFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ConditionalFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConditionalFunctionsComponents(this); +} +void VtlParser::ConditionalFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConditionalFunctionsComponents(this); +} + +std::any VtlParser::ConditionalFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConditionalFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +//----------------- AggregateFunctionsComponentsContext ------------------------------------------------------------------ + +VtlParser::AggrOperatorsContext* VtlParser::AggregateFunctionsComponentsContext::aggrOperators() { + return getRuleContext(0); +} + +VtlParser::AggregateFunctionsComponentsContext::AggregateFunctionsComponentsContext(FunctionsComponentsContext *ctx) { copyFrom(ctx); } + +void VtlParser::AggregateFunctionsComponentsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggregateFunctionsComponents(this); +} +void VtlParser::AggregateFunctionsComponentsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggregateFunctionsComponents(this); +} + +std::any VtlParser::AggregateFunctionsComponentsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggregateFunctionsComponents(this); + else + return visitor->visitChildren(this); +} +VtlParser::FunctionsComponentsContext* VtlParser::functionsComponents() { + FunctionsComponentsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 8, VtlParser::RuleFunctionsComponents); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(377); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 12, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(369); + genericOperatorsComponent(); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(370); + stringOperatorsComponent(); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(371); + numericOperatorsComponent(); + break; + } + + case 4: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(372); + comparisonOperatorsComponent(); + break; + } + + case 5: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 5); + setState(373); + timeOperatorsComponent(); + break; + } + + case 6: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 6); + setState(374); + conditionalOperatorsComponent(); + break; + } + + case 7: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 7); + setState(375); + aggrOperators(); + break; + } + + case 8: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 8); + setState(376); + anFunctionComponent(); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- FunctionsContext ------------------------------------------------------------------ + +VtlParser::FunctionsContext::FunctionsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::FunctionsContext::getRuleIndex() const { + return VtlParser::RuleFunctions; +} + +void VtlParser::FunctionsContext::copyFrom(FunctionsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- HierarchyFunctionsContext ------------------------------------------------------------------ + +VtlParser::HierarchyOperatorsContext* VtlParser::HierarchyFunctionsContext::hierarchyOperators() { + return getRuleContext(0); +} + +VtlParser::HierarchyFunctionsContext::HierarchyFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::HierarchyFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHierarchyFunctions(this); +} +void VtlParser::HierarchyFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHierarchyFunctions(this); +} + +std::any VtlParser::HierarchyFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHierarchyFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- StringFunctionsContext ------------------------------------------------------------------ + +VtlParser::StringOperatorsContext* VtlParser::StringFunctionsContext::stringOperators() { + return getRuleContext(0); +} + +VtlParser::StringFunctionsContext::StringFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::StringFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterStringFunctions(this); +} +void VtlParser::StringFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitStringFunctions(this); +} + +std::any VtlParser::StringFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitStringFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- ValidationFunctionsContext ------------------------------------------------------------------ + +VtlParser::ValidationOperatorsContext* VtlParser::ValidationFunctionsContext::validationOperators() { + return getRuleContext(0); +} + +VtlParser::ValidationFunctionsContext::ValidationFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ValidationFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidationFunctions(this); +} +void VtlParser::ValidationFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidationFunctions(this); +} + +std::any VtlParser::ValidationFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidationFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- GenericFunctionsContext ------------------------------------------------------------------ + +VtlParser::GenericOperatorsContext* VtlParser::GenericFunctionsContext::genericOperators() { + return getRuleContext(0); +} + +VtlParser::GenericFunctionsContext::GenericFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::GenericFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterGenericFunctions(this); +} +void VtlParser::GenericFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitGenericFunctions(this); +} + +std::any VtlParser::GenericFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitGenericFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- ConditionalFunctionsContext ------------------------------------------------------------------ + +VtlParser::ConditionalOperatorsContext* VtlParser::ConditionalFunctionsContext::conditionalOperators() { + return getRuleContext(0); +} + +VtlParser::ConditionalFunctionsContext::ConditionalFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ConditionalFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConditionalFunctions(this); +} +void VtlParser::ConditionalFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConditionalFunctions(this); +} + +std::any VtlParser::ConditionalFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConditionalFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- AggregateFunctionsContext ------------------------------------------------------------------ + +VtlParser::AggrOperatorsGroupingContext* VtlParser::AggregateFunctionsContext::aggrOperatorsGrouping() { + return getRuleContext(0); +} + +VtlParser::AggregateFunctionsContext::AggregateFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::AggregateFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggregateFunctions(this); +} +void VtlParser::AggregateFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggregateFunctions(this); +} + +std::any VtlParser::AggregateFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggregateFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- JoinFunctionsContext ------------------------------------------------------------------ + +VtlParser::JoinOperatorsContext* VtlParser::JoinFunctionsContext::joinOperators() { + return getRuleContext(0); +} + +VtlParser::JoinFunctionsContext::JoinFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::JoinFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinFunctions(this); +} +void VtlParser::JoinFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinFunctions(this); +} + +std::any VtlParser::JoinFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- ComparisonFunctionsContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperatorsContext* VtlParser::ComparisonFunctionsContext::comparisonOperators() { + return getRuleContext(0); +} + +VtlParser::ComparisonFunctionsContext::ComparisonFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ComparisonFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComparisonFunctions(this); +} +void VtlParser::ComparisonFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComparisonFunctions(this); +} + +std::any VtlParser::ComparisonFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComparisonFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- NumericFunctionsContext ------------------------------------------------------------------ + +VtlParser::NumericOperatorsContext* VtlParser::NumericFunctionsContext::numericOperators() { + return getRuleContext(0); +} + +VtlParser::NumericFunctionsContext::NumericFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::NumericFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterNumericFunctions(this); +} +void VtlParser::NumericFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitNumericFunctions(this); +} + +std::any VtlParser::NumericFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNumericFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeFunctionsContext ------------------------------------------------------------------ + +VtlParser::TimeOperatorsContext* VtlParser::TimeFunctionsContext::timeOperators() { + return getRuleContext(0); +} + +VtlParser::TimeFunctionsContext::TimeFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeFunctions(this); +} +void VtlParser::TimeFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeFunctions(this); +} + +std::any VtlParser::TimeFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- SetFunctionsContext ------------------------------------------------------------------ + +VtlParser::SetOperatorsContext* VtlParser::SetFunctionsContext::setOperators() { + return getRuleContext(0); +} + +VtlParser::SetFunctionsContext::SetFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::SetFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSetFunctions(this); +} +void VtlParser::SetFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSetFunctions(this); +} + +std::any VtlParser::SetFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSetFunctions(this); + else + return visitor->visitChildren(this); +} +//----------------- AnalyticFunctionsContext ------------------------------------------------------------------ + +VtlParser::AnFunctionContext* VtlParser::AnalyticFunctionsContext::anFunction() { + return getRuleContext(0); +} + +VtlParser::AnalyticFunctionsContext::AnalyticFunctionsContext(FunctionsContext *ctx) { copyFrom(ctx); } + +void VtlParser::AnalyticFunctionsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAnalyticFunctions(this); +} +void VtlParser::AnalyticFunctionsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAnalyticFunctions(this); +} + +std::any VtlParser::AnalyticFunctionsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAnalyticFunctions(this); + else + return visitor->visitChildren(this); +} +VtlParser::FunctionsContext* VtlParser::functions() { + FunctionsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 10, VtlParser::RuleFunctions); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(391); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 13, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(379); + joinOperators(); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(380); + genericOperators(); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(381); + stringOperators(); + break; + } + + case 4: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(382); + numericOperators(); + break; + } + + case 5: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 5); + setState(383); + comparisonOperators(); + break; + } + + case 6: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 6); + setState(384); + timeOperators(); + break; + } + + case 7: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 7); + setState(385); + setOperators(); + break; + } + + case 8: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 8); + setState(386); + hierarchyOperators(); + break; + } + + case 9: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 9); + setState(387); + validationOperators(); + break; + } + + case 10: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 10); + setState(388); + conditionalOperators(); + break; + } + + case 11: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 11); + setState(389); + aggrOperatorsGrouping(); + break; + } + + case 12: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 12); + setState(390); + anFunction(); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- DatasetClauseContext ------------------------------------------------------------------ + +VtlParser::DatasetClauseContext::DatasetClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::RenameClauseContext* VtlParser::DatasetClauseContext::renameClause() { + return getRuleContext(0); +} + +VtlParser::AggrClauseContext* VtlParser::DatasetClauseContext::aggrClause() { + return getRuleContext(0); +} + +VtlParser::FilterClauseContext* VtlParser::DatasetClauseContext::filterClause() { + return getRuleContext(0); +} + +VtlParser::CalcClauseContext* VtlParser::DatasetClauseContext::calcClause() { + return getRuleContext(0); +} + +VtlParser::KeepOrDropClauseContext* VtlParser::DatasetClauseContext::keepOrDropClause() { + return getRuleContext(0); +} + +VtlParser::PivotOrUnpivotClauseContext* VtlParser::DatasetClauseContext::pivotOrUnpivotClause() { + return getRuleContext(0); +} + +VtlParser::SubspaceClauseContext* VtlParser::DatasetClauseContext::subspaceClause() { + return getRuleContext(0); +} + + +size_t VtlParser::DatasetClauseContext::getRuleIndex() const { + return VtlParser::RuleDatasetClause; +} + +void VtlParser::DatasetClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDatasetClause(this); +} + +void VtlParser::DatasetClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDatasetClause(this); +} + + +std::any VtlParser::DatasetClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDatasetClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::DatasetClauseContext* VtlParser::datasetClause() { + DatasetClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 12, VtlParser::RuleDatasetClause); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(400); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::RENAME: { + enterOuterAlt(_localctx, 1); + setState(393); + renameClause(); + break; + } + + case VtlParser::AGGREGATE: { + enterOuterAlt(_localctx, 2); + setState(394); + aggrClause(); + break; + } + + case VtlParser::FILTER: { + enterOuterAlt(_localctx, 3); + setState(395); + filterClause(); + break; + } + + case VtlParser::CALC: { + enterOuterAlt(_localctx, 4); + setState(396); + calcClause(); + break; + } + + case VtlParser::DROP: + case VtlParser::KEEP: { + enterOuterAlt(_localctx, 5); + setState(397); + keepOrDropClause(); + break; + } + + case VtlParser::PIVOT: + case VtlParser::UNPIVOT: { + enterOuterAlt(_localctx, 6); + setState(398); + pivotOrUnpivotClause(); + break; + } + + case VtlParser::SUBSPACE: { + enterOuterAlt(_localctx, 7); + setState(399); + subspaceClause(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RenameClauseContext ------------------------------------------------------------------ + +VtlParser::RenameClauseContext::RenameClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RenameClauseContext::RENAME() { + return getToken(VtlParser::RENAME, 0); +} + +std::vector VtlParser::RenameClauseContext::renameClauseItem() { + return getRuleContexts(); +} + +VtlParser::RenameClauseItemContext* VtlParser::RenameClauseContext::renameClauseItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::RenameClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::RenameClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::RenameClauseContext::getRuleIndex() const { + return VtlParser::RuleRenameClause; +} + +void VtlParser::RenameClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRenameClause(this); +} + +void VtlParser::RenameClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRenameClause(this); +} + + +std::any VtlParser::RenameClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRenameClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RenameClauseContext* VtlParser::renameClause() { + RenameClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 14, VtlParser::RuleRenameClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(402); + match(VtlParser::RENAME); + setState(403); + renameClauseItem(); + setState(408); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(404); + match(VtlParser::COMMA); + setState(405); + renameClauseItem(); + setState(410); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AggrClauseContext ------------------------------------------------------------------ + +VtlParser::AggrClauseContext::AggrClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::AggrClauseContext::AGGREGATE() { + return getToken(VtlParser::AGGREGATE, 0); +} + +VtlParser::AggregateClauseContext* VtlParser::AggrClauseContext::aggregateClause() { + return getRuleContext(0); +} + +VtlParser::GroupingClauseContext* VtlParser::AggrClauseContext::groupingClause() { + return getRuleContext(0); +} + +VtlParser::HavingClauseContext* VtlParser::AggrClauseContext::havingClause() { + return getRuleContext(0); +} + + +size_t VtlParser::AggrClauseContext::getRuleIndex() const { + return VtlParser::RuleAggrClause; +} + +void VtlParser::AggrClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggrClause(this); +} + +void VtlParser::AggrClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggrClause(this); +} + + +std::any VtlParser::AggrClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggrClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::AggrClauseContext* VtlParser::aggrClause() { + AggrClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 16, VtlParser::RuleAggrClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(411); + match(VtlParser::AGGREGATE); + setState(412); + aggregateClause(); + setState(417); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GROUP) { + setState(413); + groupingClause(); + setState(415); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::HAVING) { + setState(414); + havingClause(); + } + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- FilterClauseContext ------------------------------------------------------------------ + +VtlParser::FilterClauseContext::FilterClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::FilterClauseContext::FILTER() { + return getToken(VtlParser::FILTER, 0); +} + +VtlParser::ExprComponentContext* VtlParser::FilterClauseContext::exprComponent() { + return getRuleContext(0); +} + + +size_t VtlParser::FilterClauseContext::getRuleIndex() const { + return VtlParser::RuleFilterClause; +} + +void VtlParser::FilterClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFilterClause(this); +} + +void VtlParser::FilterClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFilterClause(this); +} + + +std::any VtlParser::FilterClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFilterClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::FilterClauseContext* VtlParser::filterClause() { + FilterClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 18, VtlParser::RuleFilterClause); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(419); + match(VtlParser::FILTER); + setState(420); + exprComponent(0); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CalcClauseContext ------------------------------------------------------------------ + +VtlParser::CalcClauseContext::CalcClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::CalcClauseContext::CALC() { + return getToken(VtlParser::CALC, 0); +} + +std::vector VtlParser::CalcClauseContext::calcClauseItem() { + return getRuleContexts(); +} + +VtlParser::CalcClauseItemContext* VtlParser::CalcClauseContext::calcClauseItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CalcClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CalcClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::CalcClauseContext::getRuleIndex() const { + return VtlParser::RuleCalcClause; +} + +void VtlParser::CalcClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCalcClause(this); +} + +void VtlParser::CalcClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCalcClause(this); +} + + +std::any VtlParser::CalcClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCalcClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CalcClauseContext* VtlParser::calcClause() { + CalcClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 20, VtlParser::RuleCalcClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(422); + match(VtlParser::CALC); + setState(423); + calcClauseItem(); + setState(428); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(424); + match(VtlParser::COMMA); + setState(425); + calcClauseItem(); + setState(430); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- KeepOrDropClauseContext ------------------------------------------------------------------ + +VtlParser::KeepOrDropClauseContext::KeepOrDropClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::KeepOrDropClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::KeepOrDropClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::KeepOrDropClauseContext::KEEP() { + return getToken(VtlParser::KEEP, 0); +} + +tree::TerminalNode* VtlParser::KeepOrDropClauseContext::DROP() { + return getToken(VtlParser::DROP, 0); +} + +std::vector VtlParser::KeepOrDropClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::KeepOrDropClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::KeepOrDropClauseContext::getRuleIndex() const { + return VtlParser::RuleKeepOrDropClause; +} + +void VtlParser::KeepOrDropClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterKeepOrDropClause(this); +} + +void VtlParser::KeepOrDropClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitKeepOrDropClause(this); +} + + +std::any VtlParser::KeepOrDropClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitKeepOrDropClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::KeepOrDropClauseContext* VtlParser::keepOrDropClause() { + KeepOrDropClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 22, VtlParser::RuleKeepOrDropClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(431); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::DROP + + || _la == VtlParser::KEEP)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(432); + componentID(); + setState(437); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(433); + match(VtlParser::COMMA); + setState(434); + componentID(); + setState(439); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- PivotOrUnpivotClauseContext ------------------------------------------------------------------ + +VtlParser::PivotOrUnpivotClauseContext::PivotOrUnpivotClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::PivotOrUnpivotClauseContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +std::vector VtlParser::PivotOrUnpivotClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::PivotOrUnpivotClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::PivotOrUnpivotClauseContext::PIVOT() { + return getToken(VtlParser::PIVOT, 0); +} + +tree::TerminalNode* VtlParser::PivotOrUnpivotClauseContext::UNPIVOT() { + return getToken(VtlParser::UNPIVOT, 0); +} + + +size_t VtlParser::PivotOrUnpivotClauseContext::getRuleIndex() const { + return VtlParser::RulePivotOrUnpivotClause; +} + +void VtlParser::PivotOrUnpivotClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterPivotOrUnpivotClause(this); +} + +void VtlParser::PivotOrUnpivotClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitPivotOrUnpivotClause(this); +} + + +std::any VtlParser::PivotOrUnpivotClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPivotOrUnpivotClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::PivotOrUnpivotClauseContext* VtlParser::pivotOrUnpivotClause() { + PivotOrUnpivotClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 24, VtlParser::RulePivotOrUnpivotClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(440); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::PIVOT + + || _la == VtlParser::UNPIVOT)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(441); + antlrcpp::downCast(_localctx)->id_ = componentID(); + setState(442); + match(VtlParser::COMMA); + setState(443); + antlrcpp::downCast(_localctx)->mea = componentID(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CustomPivotClauseContext ------------------------------------------------------------------ + +VtlParser::CustomPivotClauseContext::CustomPivotClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::CustomPivotClauseContext::CUSTOMPIVOT() { + return getToken(VtlParser::CUSTOMPIVOT, 0); +} + +std::vector VtlParser::CustomPivotClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CustomPivotClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::CustomPivotClauseContext::IN() { + return getToken(VtlParser::IN, 0); +} + +std::vector VtlParser::CustomPivotClauseContext::constant() { + return getRuleContexts(); +} + +VtlParser::ConstantContext* VtlParser::CustomPivotClauseContext::constant(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CustomPivotClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::CustomPivotClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + + +size_t VtlParser::CustomPivotClauseContext::getRuleIndex() const { + return VtlParser::RuleCustomPivotClause; +} + +void VtlParser::CustomPivotClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCustomPivotClause(this); +} + +void VtlParser::CustomPivotClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCustomPivotClause(this); +} + + +std::any VtlParser::CustomPivotClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCustomPivotClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CustomPivotClauseContext* VtlParser::customPivotClause() { + CustomPivotClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 26, VtlParser::RuleCustomPivotClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(445); + match(VtlParser::CUSTOMPIVOT); + setState(446); + antlrcpp::downCast(_localctx)->id_ = componentID(); + setState(447); + match(VtlParser::COMMA); + setState(448); + antlrcpp::downCast(_localctx)->mea = componentID(); + setState(449); + match(VtlParser::IN); + setState(450); + constant(); + setState(455); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(451); + match(VtlParser::COMMA); + setState(452); + constant(); + setState(457); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SubspaceClauseContext ------------------------------------------------------------------ + +VtlParser::SubspaceClauseContext::SubspaceClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::SubspaceClauseContext::SUBSPACE() { + return getToken(VtlParser::SUBSPACE, 0); +} + +std::vector VtlParser::SubspaceClauseContext::subspaceClauseItem() { + return getRuleContexts(); +} + +VtlParser::SubspaceClauseItemContext* VtlParser::SubspaceClauseContext::subspaceClauseItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::SubspaceClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::SubspaceClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::SubspaceClauseContext::getRuleIndex() const { + return VtlParser::RuleSubspaceClause; +} + +void VtlParser::SubspaceClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSubspaceClause(this); +} + +void VtlParser::SubspaceClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSubspaceClause(this); +} + + +std::any VtlParser::SubspaceClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSubspaceClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SubspaceClauseContext* VtlParser::subspaceClause() { + SubspaceClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 28, VtlParser::RuleSubspaceClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(458); + match(VtlParser::SUBSPACE); + setState(459); + subspaceClauseItem(); + setState(464); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(460); + match(VtlParser::COMMA); + setState(461); + subspaceClauseItem(); + setState(466); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinOperatorsContext ------------------------------------------------------------------ + +VtlParser::JoinOperatorsContext::JoinOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::JoinOperatorsContext::getRuleIndex() const { + return VtlParser::RuleJoinOperators; +} + +void VtlParser::JoinOperatorsContext::copyFrom(JoinOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- JoinExprContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::JoinExprContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::JoinClauseContext* VtlParser::JoinExprContext::joinClause() { + return getRuleContext(0); +} + +VtlParser::JoinBodyContext* VtlParser::JoinExprContext::joinBody() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::JoinExprContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::JoinExprContext::INNER_JOIN() { + return getToken(VtlParser::INNER_JOIN, 0); +} + +tree::TerminalNode* VtlParser::JoinExprContext::LEFT_JOIN() { + return getToken(VtlParser::LEFT_JOIN, 0); +} + +VtlParser::JoinClauseWithoutUsingContext* VtlParser::JoinExprContext::joinClauseWithoutUsing() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::JoinExprContext::FULL_JOIN() { + return getToken(VtlParser::FULL_JOIN, 0); +} + +tree::TerminalNode* VtlParser::JoinExprContext::CROSS_JOIN() { + return getToken(VtlParser::CROSS_JOIN, 0); +} + +VtlParser::JoinExprContext::JoinExprContext(JoinOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::JoinExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinExpr(this); +} +void VtlParser::JoinExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinExpr(this); +} + +std::any VtlParser::JoinExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinExpr(this); + else + return visitor->visitChildren(this); +} +VtlParser::JoinOperatorsContext* VtlParser::joinOperators() { + JoinOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 30, VtlParser::RuleJoinOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(479); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::INNER_JOIN: + case VtlParser::LEFT_JOIN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(467); + antlrcpp::downCast(_localctx)->joinKeyword = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::INNER_JOIN + + || _la == VtlParser::LEFT_JOIN)) { + antlrcpp::downCast(_localctx)->joinKeyword = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(468); + match(VtlParser::LPAREN); + setState(469); + joinClause(); + setState(470); + joinBody(); + setState(471); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CROSS_JOIN: + case VtlParser::FULL_JOIN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(473); + antlrcpp::downCast(_localctx)->joinKeyword = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::CROSS_JOIN + + || _la == VtlParser::FULL_JOIN)) { + antlrcpp::downCast(_localctx)->joinKeyword = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(474); + match(VtlParser::LPAREN); + setState(475); + joinClauseWithoutUsing(); + setState(476); + joinBody(); + setState(477); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- DefOperatorsContext ------------------------------------------------------------------ + +VtlParser::DefOperatorsContext::DefOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::DefOperatorsContext::getRuleIndex() const { + return VtlParser::RuleDefOperators; +} + +void VtlParser::DefOperatorsContext::copyFrom(DefOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- DefOperatorContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DefOperatorContext::DEFINE() { + return getToken(VtlParser::DEFINE, 0); +} + +std::vector VtlParser::DefOperatorContext::OPERATOR() { + return getTokens(VtlParser::OPERATOR); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::OPERATOR(size_t i) { + return getToken(VtlParser::OPERATOR, i); +} + +VtlParser::OperatorIDContext* VtlParser::DefOperatorContext::operatorID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::IS() { + return getToken(VtlParser::IS, 0); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::END() { + return getToken(VtlParser::END, 0); +} + +VtlParser::ExprContext* VtlParser::DefOperatorContext::expr() { + return getRuleContext(0); +} + +std::vector VtlParser::DefOperatorContext::parameterItem() { + return getRuleContexts(); +} + +VtlParser::ParameterItemContext* VtlParser::DefOperatorContext::parameterItem(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::RETURNS() { + return getToken(VtlParser::RETURNS, 0); +} + +VtlParser::OutputParameterTypeContext* VtlParser::DefOperatorContext::outputParameterType() { + return getRuleContext(0); +} + +std::vector VtlParser::DefOperatorContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::DefOperatorContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::DefOperatorContext::DefOperatorContext(DefOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DefOperatorContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDefOperator(this); +} +void VtlParser::DefOperatorContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDefOperator(this); +} + +std::any VtlParser::DefOperatorContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDefOperator(this); + else + return visitor->visitChildren(this); +} +//----------------- DefHierarchicalContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DefHierarchicalContext::DEFINE() { + return getToken(VtlParser::DEFINE, 0); +} + +std::vector VtlParser::DefHierarchicalContext::HIERARCHICAL() { + return getTokens(VtlParser::HIERARCHICAL); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::HIERARCHICAL(size_t i) { + return getToken(VtlParser::HIERARCHICAL, i); +} + +std::vector VtlParser::DefHierarchicalContext::RULESET() { + return getTokens(VtlParser::RULESET); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::RULESET(size_t i) { + return getToken(VtlParser::RULESET, i); +} + +VtlParser::RulesetIDContext* VtlParser::DefHierarchicalContext::rulesetID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::HierRuleSignatureContext* VtlParser::DefHierarchicalContext::hierRuleSignature() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::IS() { + return getToken(VtlParser::IS, 0); +} + +VtlParser::RuleClauseHierarchicalContext* VtlParser::DefHierarchicalContext::ruleClauseHierarchical() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefHierarchicalContext::END() { + return getToken(VtlParser::END, 0); +} + +VtlParser::DefHierarchicalContext::DefHierarchicalContext(DefOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DefHierarchicalContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDefHierarchical(this); +} +void VtlParser::DefHierarchicalContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDefHierarchical(this); +} + +std::any VtlParser::DefHierarchicalContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDefHierarchical(this); + else + return visitor->visitChildren(this); +} +//----------------- DefDatapointRulesetContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::DEFINE() { + return getToken(VtlParser::DEFINE, 0); +} + +std::vector VtlParser::DefDatapointRulesetContext::DATAPOINT() { + return getTokens(VtlParser::DATAPOINT); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::DATAPOINT(size_t i) { + return getToken(VtlParser::DATAPOINT, i); +} + +std::vector VtlParser::DefDatapointRulesetContext::RULESET() { + return getTokens(VtlParser::RULESET); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::RULESET(size_t i) { + return getToken(VtlParser::RULESET, i); +} + +VtlParser::RulesetIDContext* VtlParser::DefDatapointRulesetContext::rulesetID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::RulesetSignatureContext* VtlParser::DefDatapointRulesetContext::rulesetSignature() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::IS() { + return getToken(VtlParser::IS, 0); +} + +VtlParser::RuleClauseDatapointContext* VtlParser::DefDatapointRulesetContext::ruleClauseDatapoint() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DefDatapointRulesetContext::END() { + return getToken(VtlParser::END, 0); +} + +VtlParser::DefDatapointRulesetContext::DefDatapointRulesetContext(DefOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DefDatapointRulesetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDefDatapointRuleset(this); +} +void VtlParser::DefDatapointRulesetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDefDatapointRuleset(this); +} + +std::any VtlParser::DefDatapointRulesetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDefDatapointRuleset(this); + else + return visitor->visitChildren(this); +} +VtlParser::DefOperatorsContext* VtlParser::defOperators() { + DefOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 32, VtlParser::RuleDefOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(531); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 26, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(481); + match(VtlParser::DEFINE); + setState(482); + match(VtlParser::OPERATOR); + setState(483); + operatorID(); + setState(484); + match(VtlParser::LPAREN); + setState(493); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::IDENTIFIER) { + setState(485); + parameterItem(); + setState(490); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(486); + match(VtlParser::COMMA); + setState(487); + parameterItem(); + setState(492); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + setState(495); + match(VtlParser::RPAREN); + setState(498); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::RETURNS) { + setState(496); + match(VtlParser::RETURNS); + setState(497); + outputParameterType(); + } + setState(500); + match(VtlParser::IS); + + setState(501); + expr(0); + setState(502); + match(VtlParser::END); + setState(503); + match(VtlParser::OPERATOR); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(505); + match(VtlParser::DEFINE); + setState(506); + match(VtlParser::DATAPOINT); + setState(507); + match(VtlParser::RULESET); + setState(508); + rulesetID(); + setState(509); + match(VtlParser::LPAREN); + setState(510); + rulesetSignature(); + setState(511); + match(VtlParser::RPAREN); + setState(512); + match(VtlParser::IS); + setState(513); + ruleClauseDatapoint(); + setState(514); + match(VtlParser::END); + setState(515); + match(VtlParser::DATAPOINT); + setState(516); + match(VtlParser::RULESET); + break; + } + + case 3: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(518); + match(VtlParser::DEFINE); + setState(519); + match(VtlParser::HIERARCHICAL); + setState(520); + match(VtlParser::RULESET); + setState(521); + rulesetID(); + setState(522); + match(VtlParser::LPAREN); + setState(523); + hierRuleSignature(); + setState(524); + match(VtlParser::RPAREN); + setState(525); + match(VtlParser::IS); + setState(526); + ruleClauseHierarchical(); + setState(527); + match(VtlParser::END); + setState(528); + match(VtlParser::HIERARCHICAL); + setState(529); + match(VtlParser::RULESET); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- GenericOperatorsContext ------------------------------------------------------------------ + +VtlParser::GenericOperatorsContext::GenericOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::GenericOperatorsContext::getRuleIndex() const { + return VtlParser::RuleGenericOperators; +} + +void VtlParser::GenericOperatorsContext::copyFrom(GenericOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- EvalAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::EvalAtomContext::EVAL() { + return getToken(VtlParser::EVAL, 0); +} + +std::vector VtlParser::EvalAtomContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::RoutineNameContext* VtlParser::EvalAtomContext::routineName() { + return getRuleContext(0); +} + +std::vector VtlParser::EvalAtomContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +std::vector VtlParser::EvalAtomContext::varID() { + return getRuleContexts(); +} + +VtlParser::VarIDContext* VtlParser::EvalAtomContext::varID(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::EvalAtomContext::scalarItem() { + return getRuleContexts(); +} + +VtlParser::ScalarItemContext* VtlParser::EvalAtomContext::scalarItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::EvalAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::LANGUAGE() { + return getToken(VtlParser::LANGUAGE, 0); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::EvalAtomContext::RETURNS() { + return getToken(VtlParser::RETURNS, 0); +} + +VtlParser::EvalDatasetTypeContext* VtlParser::EvalAtomContext::evalDatasetType() { + return getRuleContext(0); +} + +VtlParser::EvalAtomContext::EvalAtomContext(GenericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::EvalAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterEvalAtom(this); +} +void VtlParser::EvalAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitEvalAtom(this); +} + +std::any VtlParser::EvalAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitEvalAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- CastExprDatasetContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CastExprDatasetContext::CAST() { + return getToken(VtlParser::CAST, 0); +} + +tree::TerminalNode* VtlParser::CastExprDatasetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::CastExprDatasetContext::expr() { + return getRuleContext(0); +} + +std::vector VtlParser::CastExprDatasetContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CastExprDatasetContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::CastExprDatasetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::BasicScalarTypeContext* VtlParser::CastExprDatasetContext::basicScalarType() { + return getRuleContext(0); +} + +VtlParser::ValueDomainNameContext* VtlParser::CastExprDatasetContext::valueDomainName() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CastExprDatasetContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +VtlParser::CastExprDatasetContext::CastExprDatasetContext(GenericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::CastExprDatasetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCastExprDataset(this); +} +void VtlParser::CastExprDatasetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCastExprDataset(this); +} + +std::any VtlParser::CastExprDatasetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCastExprDataset(this); + else + return visitor->visitChildren(this); +} +//----------------- CallDatasetContext ------------------------------------------------------------------ + +VtlParser::OperatorIDContext* VtlParser::CallDatasetContext::operatorID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CallDatasetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CallDatasetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::CallDatasetContext::parameter() { + return getRuleContexts(); +} + +VtlParser::ParameterContext* VtlParser::CallDatasetContext::parameter(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CallDatasetContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CallDatasetContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::CallDatasetContext::CallDatasetContext(GenericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::CallDatasetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCallDataset(this); +} +void VtlParser::CallDatasetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCallDataset(this); +} + +std::any VtlParser::CallDatasetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCallDataset(this); + else + return visitor->visitChildren(this); +} +VtlParser::GenericOperatorsContext* VtlParser::genericOperators() { + GenericOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 34, VtlParser::RuleGenericOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(590); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(533); + operatorID(); + setState(534); + match(VtlParser::LPAREN); + setState(543); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 4236762448452935682) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 1024882006081539) != 0) || ((((_la - 131) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 131)) & -4611686002319220865) != 0) || ((((_la - 195) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 195)) & 2181431480623107) != 0)) { + setState(535); + parameter(); + setState(540); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(536); + match(VtlParser::COMMA); + setState(537); + parameter(); + setState(542); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + setState(545); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::EVAL: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(547); + match(VtlParser::EVAL); + setState(548); + match(VtlParser::LPAREN); + setState(549); + routineName(); + setState(550); + match(VtlParser::LPAREN); + setState(553); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + setState(551); + varID(); + break; + } + + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::NULL_CONSTANT: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: { + setState(552); + scalarItem(); + break; + } + + case VtlParser::RPAREN: + case VtlParser::COMMA: { + break; + } + + default: + break; + } + setState(562); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(555); + match(VtlParser::COMMA); + setState(558); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + setState(556); + varID(); + break; + } + + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::NULL_CONSTANT: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: { + setState(557); + scalarItem(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(564); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(565); + match(VtlParser::RPAREN); + setState(568); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LANGUAGE) { + setState(566); + match(VtlParser::LANGUAGE); + setState(567); + match(VtlParser::STRING_CONSTANT); + } + setState(572); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::RETURNS) { + setState(570); + match(VtlParser::RETURNS); + setState(571); + evalDatasetType(); + } + setState(574); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CAST: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(576); + match(VtlParser::CAST); + setState(577); + match(VtlParser::LPAREN); + setState(578); + expr(0); + setState(579); + match(VtlParser::COMMA); + setState(582); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: { + setState(580); + basicScalarType(); + break; + } + + case VtlParser::IDENTIFIER: { + setState(581); + valueDomainName(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(586); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(584); + match(VtlParser::COMMA); + setState(585); + match(VtlParser::STRING_CONSTANT); + } + setState(588); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- GenericOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::GenericOperatorsComponentContext::GenericOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::GenericOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleGenericOperatorsComponent; +} + +void VtlParser::GenericOperatorsComponentContext::copyFrom(GenericOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- EvalAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::EVAL() { + return getToken(VtlParser::EVAL, 0); +} + +std::vector VtlParser::EvalAtomComponentContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::RoutineNameContext* VtlParser::EvalAtomComponentContext::routineName() { + return getRuleContext(0); +} + +std::vector VtlParser::EvalAtomComponentContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +std::vector VtlParser::EvalAtomComponentContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::EvalAtomComponentContext::componentID(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::EvalAtomComponentContext::scalarItem() { + return getRuleContexts(); +} + +VtlParser::ScalarItemContext* VtlParser::EvalAtomComponentContext::scalarItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::EvalAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::LANGUAGE() { + return getToken(VtlParser::LANGUAGE, 0); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::EvalAtomComponentContext::RETURNS() { + return getToken(VtlParser::RETURNS, 0); +} + +VtlParser::OutputParameterTypeComponentContext* VtlParser::EvalAtomComponentContext::outputParameterTypeComponent() { + return getRuleContext(0); +} + +VtlParser::EvalAtomComponentContext::EvalAtomComponentContext(GenericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::EvalAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterEvalAtomComponent(this); +} +void VtlParser::EvalAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitEvalAtomComponent(this); +} + +std::any VtlParser::EvalAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitEvalAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- CastExprComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CastExprComponentContext::CAST() { + return getToken(VtlParser::CAST, 0); +} + +tree::TerminalNode* VtlParser::CastExprComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::CastExprComponentContext::exprComponent() { + return getRuleContext(0); +} + +std::vector VtlParser::CastExprComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CastExprComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::CastExprComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::BasicScalarTypeContext* VtlParser::CastExprComponentContext::basicScalarType() { + return getRuleContext(0); +} + +VtlParser::ValueDomainNameContext* VtlParser::CastExprComponentContext::valueDomainName() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CastExprComponentContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +VtlParser::CastExprComponentContext::CastExprComponentContext(GenericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CastExprComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCastExprComponent(this); +} +void VtlParser::CastExprComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCastExprComponent(this); +} + +std::any VtlParser::CastExprComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCastExprComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- CallComponentContext ------------------------------------------------------------------ + +VtlParser::OperatorIDContext* VtlParser::CallComponentContext::operatorID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CallComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CallComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::CallComponentContext::parameterComponent() { + return getRuleContexts(); +} + +VtlParser::ParameterComponentContext* VtlParser::CallComponentContext::parameterComponent(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::CallComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::CallComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::CallComponentContext::CallComponentContext(GenericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CallComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCallComponent(this); +} +void VtlParser::CallComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCallComponent(this); +} + +std::any VtlParser::CallComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCallComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::GenericOperatorsComponentContext* VtlParser::genericOperatorsComponent() { + GenericOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 36, VtlParser::RuleGenericOperatorsComponent); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(649); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(592); + operatorID(); + setState(593); + match(VtlParser::LPAREN); + setState(602); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 2363265003466809346) != 0) || ((((_la - 77) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 77)) & -6935543063158850279) != 0) || ((((_la - 141) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 141)) & 15730631) != 0) || ((((_la - 208) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 208)) & 266287973385) != 0)) { + setState(594); + parameterComponent(); + setState(599); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(595); + match(VtlParser::COMMA); + setState(596); + parameterComponent(); + setState(601); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + setState(604); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CAST: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(606); + match(VtlParser::CAST); + setState(607); + match(VtlParser::LPAREN); + setState(608); + exprComponent(0); + setState(609); + match(VtlParser::COMMA); + setState(612); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: { + setState(610); + basicScalarType(); + break; + } + + case VtlParser::IDENTIFIER: { + setState(611); + valueDomainName(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(616); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(614); + match(VtlParser::COMMA); + setState(615); + match(VtlParser::STRING_CONSTANT); + } + setState(618); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::EVAL: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(620); + match(VtlParser::EVAL); + setState(621); + match(VtlParser::LPAREN); + setState(622); + routineName(); + setState(623); + match(VtlParser::LPAREN); + setState(626); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + setState(624); + componentID(); + break; + } + + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::NULL_CONSTANT: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: { + setState(625); + scalarItem(); + break; + } + + case VtlParser::RPAREN: + case VtlParser::COMMA: { + break; + } + + default: + break; + } + setState(635); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(628); + match(VtlParser::COMMA); + setState(631); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + setState(629); + componentID(); + break; + } + + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::NULL_CONSTANT: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: { + setState(630); + scalarItem(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(637); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(638); + match(VtlParser::RPAREN); + setState(641); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LANGUAGE) { + setState(639); + match(VtlParser::LANGUAGE); + setState(640); + match(VtlParser::STRING_CONSTANT); + } + setState(645); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::RETURNS) { + setState(643); + match(VtlParser::RETURNS); + setState(644); + outputParameterTypeComponent(); + } + setState(647); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ParameterComponentContext ------------------------------------------------------------------ + +VtlParser::ParameterComponentContext::ParameterComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ExprComponentContext* VtlParser::ParameterComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ParameterComponentContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + + +size_t VtlParser::ParameterComponentContext::getRuleIndex() const { + return VtlParser::RuleParameterComponent; +} + +void VtlParser::ParameterComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterParameterComponent(this); +} + +void VtlParser::ParameterComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitParameterComponent(this); +} + + +std::any VtlParser::ParameterComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitParameterComponent(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ParameterComponentContext* VtlParser::parameterComponent() { + ParameterComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 38, VtlParser::RuleParameterComponent); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(653); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LPAREN: + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::EVAL: + case VtlParser::IF: + case VtlParser::CASE: + case VtlParser::CURRENT_DATE: + case VtlParser::DATEDIFF: + case VtlParser::DATEADD: + case VtlParser::YEAR_OP: + case VtlParser::MONTH_OP: + case VtlParser::DAYOFMONTH: + case VtlParser::DAYOFYEAR: + case VtlParser::DAYTOYEAR: + case VtlParser::DAYTOMONTH: + case VtlParser::YEARTODAY: + case VtlParser::MONTHTODAY: + case VtlParser::NOT: + case VtlParser::BETWEEN: + case VtlParser::NULL_CONSTANT: + case VtlParser::ISNULL: + case VtlParser::RANDOM: + case VtlParser::RANK: + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::LOG: + case VtlParser::TRUNC: + case VtlParser::ROUND: + case VtlParser::POWER: + case VtlParser::MOD: + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::SUBSTR: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::EXP: + case VtlParser::CHARSET_MATCH: + case VtlParser::NVL: + case VtlParser::LTRIM: + case VtlParser::RTRIM: + case VtlParser::INSTR: + case VtlParser::REPLACE: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: + case VtlParser::LAG: + case VtlParser::LEAD: + case VtlParser::RATIO_TO_REPORT: + case VtlParser::FILL_TIME_SERIES: + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: + case VtlParser::TIMESHIFT: + case VtlParser::PERIOD_INDICATOR: + case VtlParser::TIME_AGG: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(651); + exprComponent(0); + break; + } + + case VtlParser::OPTIONAL: { + enterOuterAlt(_localctx, 2); + setState(652); + match(VtlParser::OPTIONAL); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ParameterContext ------------------------------------------------------------------ + +VtlParser::ParameterContext::ParameterContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ExprContext* VtlParser::ParameterContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ParameterContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + + +size_t VtlParser::ParameterContext::getRuleIndex() const { + return VtlParser::RuleParameter; +} + +void VtlParser::ParameterContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterParameter(this); +} + +void VtlParser::ParameterContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitParameter(this); +} + + +std::any VtlParser::ParameterContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitParameter(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ParameterContext* VtlParser::parameter() { + ParameterContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 40, VtlParser::RuleParameter); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(657); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LPAREN: + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::EVAL: + case VtlParser::IF: + case VtlParser::CASE: + case VtlParser::CURRENT_DATE: + case VtlParser::DATEDIFF: + case VtlParser::DATEADD: + case VtlParser::YEAR_OP: + case VtlParser::MONTH_OP: + case VtlParser::DAYOFMONTH: + case VtlParser::DAYOFYEAR: + case VtlParser::DAYTOYEAR: + case VtlParser::DAYTOMONTH: + case VtlParser::YEARTODAY: + case VtlParser::MONTHTODAY: + case VtlParser::NOT: + case VtlParser::BETWEEN: + case VtlParser::NULL_CONSTANT: + case VtlParser::ISNULL: + case VtlParser::UNION: + case VtlParser::SYMDIFF: + case VtlParser::INTERSECT: + case VtlParser::RANDOM: + case VtlParser::CHECK: + case VtlParser::EXISTS_IN: + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::LOG: + case VtlParser::TRUNC: + case VtlParser::ROUND: + case VtlParser::POWER: + case VtlParser::MOD: + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::SUBSTR: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::EXP: + case VtlParser::CHARSET_MATCH: + case VtlParser::NVL: + case VtlParser::HIERARCHY: + case VtlParser::LTRIM: + case VtlParser::RTRIM: + case VtlParser::INSTR: + case VtlParser::REPLACE: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: + case VtlParser::SETDIFF: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: + case VtlParser::LAG: + case VtlParser::LEAD: + case VtlParser::RATIO_TO_REPORT: + case VtlParser::FILL_TIME_SERIES: + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: + case VtlParser::TIMESHIFT: + case VtlParser::INNER_JOIN: + case VtlParser::LEFT_JOIN: + case VtlParser::CROSS_JOIN: + case VtlParser::FULL_JOIN: + case VtlParser::PERIOD_INDICATOR: + case VtlParser::TIME_AGG: + case VtlParser::CAST: + case VtlParser::CHECK_DATAPOINT: + case VtlParser::CHECK_HIERARCHY: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(655); + expr(0); + break; + } + + case VtlParser::OPTIONAL: { + enterOuterAlt(_localctx, 2); + setState(656); + match(VtlParser::OPTIONAL); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- StringOperatorsContext ------------------------------------------------------------------ + +VtlParser::StringOperatorsContext::StringOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::StringOperatorsContext::getRuleIndex() const { + return VtlParser::RuleStringOperators; +} + +void VtlParser::StringOperatorsContext::copyFrom(StringOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- InstrAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::InstrAtomContext::INSTR() { + return getToken(VtlParser::INSTR, 0); +} + +tree::TerminalNode* VtlParser::InstrAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::InstrAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::InstrAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::InstrAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::InstrAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::InstrAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::InstrAtomContext::optionalExpr() { + return getRuleContexts(); +} + +VtlParser::OptionalExprContext* VtlParser::InstrAtomContext::optionalExpr(size_t i) { + return getRuleContext(i); +} + +VtlParser::InstrAtomContext::InstrAtomContext(StringOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::InstrAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInstrAtom(this); +} +void VtlParser::InstrAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInstrAtom(this); +} + +std::any VtlParser::InstrAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInstrAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryStringFunctionContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::UnaryStringFunctionContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::TRIM() { + return getToken(VtlParser::TRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::LTRIM() { + return getToken(VtlParser::LTRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::RTRIM() { + return getToken(VtlParser::RTRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::UCASE() { + return getToken(VtlParser::UCASE, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::LCASE() { + return getToken(VtlParser::LCASE, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionContext::LEN() { + return getToken(VtlParser::LEN, 0); +} + +VtlParser::UnaryStringFunctionContext::UnaryStringFunctionContext(StringOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryStringFunctionContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryStringFunction(this); +} +void VtlParser::UnaryStringFunctionContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryStringFunction(this); +} + +std::any VtlParser::UnaryStringFunctionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryStringFunction(this); + else + return visitor->visitChildren(this); +} +//----------------- SubstrAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::SubstrAtomContext::SUBSTR() { + return getToken(VtlParser::SUBSTR, 0); +} + +tree::TerminalNode* VtlParser::SubstrAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::SubstrAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::SubstrAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::SubstrAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::SubstrAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +std::vector VtlParser::SubstrAtomContext::optionalExpr() { + return getRuleContexts(); +} + +VtlParser::OptionalExprContext* VtlParser::SubstrAtomContext::optionalExpr(size_t i) { + return getRuleContext(i); +} + +VtlParser::SubstrAtomContext::SubstrAtomContext(StringOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::SubstrAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSubstrAtom(this); +} +void VtlParser::SubstrAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSubstrAtom(this); +} + +std::any VtlParser::SubstrAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSubstrAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- ReplaceAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ReplaceAtomContext::REPLACE() { + return getToken(VtlParser::REPLACE, 0); +} + +tree::TerminalNode* VtlParser::ReplaceAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::ReplaceAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::ReplaceAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::ReplaceAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ReplaceAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::ReplaceAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::OptionalExprContext* VtlParser::ReplaceAtomContext::optionalExpr() { + return getRuleContext(0); +} + +VtlParser::ReplaceAtomContext::ReplaceAtomContext(StringOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ReplaceAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterReplaceAtom(this); +} +void VtlParser::ReplaceAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitReplaceAtom(this); +} + +std::any VtlParser::ReplaceAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitReplaceAtom(this); + else + return visitor->visitChildren(this); +} +VtlParser::StringOperatorsContext* VtlParser::stringOperators() { + StringOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 42, VtlParser::RuleStringOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(707); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::LTRIM: + case VtlParser::RTRIM: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(659); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 93) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 93)) & 824633720861) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(660); + match(VtlParser::LPAREN); + setState(661); + expr(0); + setState(662); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::SUBSTR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(664); + match(VtlParser::SUBSTR); + setState(665); + match(VtlParser::LPAREN); + setState(666); + expr(0); + setState(677); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 50, _ctx)) { + case 1: { + setState(673); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(667); + match(VtlParser::COMMA); + setState(668); + antlrcpp::downCast(_localctx)->startParameter = optionalExpr(); + + setState(670); + match(VtlParser::COMMA); + setState(671); + antlrcpp::downCast(_localctx)->endParameter = optionalExpr(); + } + break; + } + + case 2: { + setState(675); + match(VtlParser::COMMA); + setState(676); + antlrcpp::downCast(_localctx)->startParameter = optionalExpr(); + break; + } + + default: + break; + } + setState(679); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::REPLACE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(681); + match(VtlParser::REPLACE); + setState(682); + match(VtlParser::LPAREN); + setState(683); + expr(0); + setState(684); + match(VtlParser::COMMA); + setState(685); + antlrcpp::downCast(_localctx)->param = expr(0); + setState(688); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(686); + match(VtlParser::COMMA); + setState(687); + optionalExpr(); + } + setState(690); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::INSTR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(692); + match(VtlParser::INSTR); + setState(693); + match(VtlParser::LPAREN); + setState(694); + expr(0); + setState(695); + match(VtlParser::COMMA); + setState(696); + antlrcpp::downCast(_localctx)->pattern = expr(0); + setState(699); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 52, _ctx)) { + case 1: { + setState(697); + match(VtlParser::COMMA); + setState(698); + antlrcpp::downCast(_localctx)->startParameter = optionalExpr(); + break; + } + + default: + break; + } + setState(703); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(701); + match(VtlParser::COMMA); + setState(702); + antlrcpp::downCast(_localctx)->occurrenceParameter = optionalExpr(); + } + setState(705); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- StringOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::StringOperatorsComponentContext::StringOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::StringOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleStringOperatorsComponent; +} + +void VtlParser::StringOperatorsComponentContext::copyFrom(StringOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- ReplaceAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ReplaceAtomComponentContext::REPLACE() { + return getToken(VtlParser::REPLACE, 0); +} + +tree::TerminalNode* VtlParser::ReplaceAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::ReplaceAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::ReplaceAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::ReplaceAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ReplaceAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::ReplaceAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::OptionalExprComponentContext* VtlParser::ReplaceAtomComponentContext::optionalExprComponent() { + return getRuleContext(0); +} + +VtlParser::ReplaceAtomComponentContext::ReplaceAtomComponentContext(StringOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::ReplaceAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterReplaceAtomComponent(this); +} +void VtlParser::ReplaceAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitReplaceAtomComponent(this); +} + +std::any VtlParser::ReplaceAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitReplaceAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryStringFunctionComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::UnaryStringFunctionComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::TRIM() { + return getToken(VtlParser::TRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::LTRIM() { + return getToken(VtlParser::LTRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::RTRIM() { + return getToken(VtlParser::RTRIM, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::UCASE() { + return getToken(VtlParser::UCASE, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::LCASE() { + return getToken(VtlParser::LCASE, 0); +} + +tree::TerminalNode* VtlParser::UnaryStringFunctionComponentContext::LEN() { + return getToken(VtlParser::LEN, 0); +} + +VtlParser::UnaryStringFunctionComponentContext::UnaryStringFunctionComponentContext(StringOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryStringFunctionComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryStringFunctionComponent(this); +} +void VtlParser::UnaryStringFunctionComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryStringFunctionComponent(this); +} + +std::any VtlParser::UnaryStringFunctionComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryStringFunctionComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- SubstrAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::SubstrAtomComponentContext::SUBSTR() { + return getToken(VtlParser::SUBSTR, 0); +} + +tree::TerminalNode* VtlParser::SubstrAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::SubstrAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::SubstrAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::SubstrAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::SubstrAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +std::vector VtlParser::SubstrAtomComponentContext::optionalExprComponent() { + return getRuleContexts(); +} + +VtlParser::OptionalExprComponentContext* VtlParser::SubstrAtomComponentContext::optionalExprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::SubstrAtomComponentContext::SubstrAtomComponentContext(StringOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::SubstrAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSubstrAtomComponent(this); +} +void VtlParser::SubstrAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSubstrAtomComponent(this); +} + +std::any VtlParser::SubstrAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSubstrAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- InstrAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::InstrAtomComponentContext::INSTR() { + return getToken(VtlParser::INSTR, 0); +} + +tree::TerminalNode* VtlParser::InstrAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::InstrAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::InstrAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::InstrAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::InstrAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::InstrAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::InstrAtomComponentContext::optionalExprComponent() { + return getRuleContexts(); +} + +VtlParser::OptionalExprComponentContext* VtlParser::InstrAtomComponentContext::optionalExprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::InstrAtomComponentContext::InstrAtomComponentContext(StringOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::InstrAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInstrAtomComponent(this); +} +void VtlParser::InstrAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInstrAtomComponent(this); +} + +std::any VtlParser::InstrAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInstrAtomComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::StringOperatorsComponentContext* VtlParser::stringOperatorsComponent() { + StringOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 44, VtlParser::RuleStringOperatorsComponent); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(757); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::LTRIM: + case VtlParser::RTRIM: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(709); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 93) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 93)) & 824633720861) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(710); + match(VtlParser::LPAREN); + setState(711); + exprComponent(0); + setState(712); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::SUBSTR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(714); + match(VtlParser::SUBSTR); + setState(715); + match(VtlParser::LPAREN); + setState(716); + exprComponent(0); + setState(727); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 56, _ctx)) { + case 1: { + setState(723); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(717); + match(VtlParser::COMMA); + setState(718); + antlrcpp::downCast(_localctx)->startParameter = optionalExprComponent(); + + setState(720); + match(VtlParser::COMMA); + setState(721); + antlrcpp::downCast(_localctx)->endParameter = optionalExprComponent(); + } + break; + } + + case 2: { + setState(725); + match(VtlParser::COMMA); + setState(726); + antlrcpp::downCast(_localctx)->startParameter = optionalExprComponent(); + break; + } + + default: + break; + } + setState(729); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::REPLACE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(731); + match(VtlParser::REPLACE); + setState(732); + match(VtlParser::LPAREN); + setState(733); + exprComponent(0); + setState(734); + match(VtlParser::COMMA); + setState(735); + antlrcpp::downCast(_localctx)->param = exprComponent(0); + setState(738); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(736); + match(VtlParser::COMMA); + setState(737); + optionalExprComponent(); + } + setState(740); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::INSTR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(742); + match(VtlParser::INSTR); + setState(743); + match(VtlParser::LPAREN); + setState(744); + exprComponent(0); + setState(745); + match(VtlParser::COMMA); + setState(746); + antlrcpp::downCast(_localctx)->pattern = exprComponent(0); + setState(749); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 58, _ctx)) { + case 1: { + setState(747); + match(VtlParser::COMMA); + setState(748); + antlrcpp::downCast(_localctx)->startParameter = optionalExprComponent(); + break; + } + + default: + break; + } + setState(753); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(751); + match(VtlParser::COMMA); + setState(752); + antlrcpp::downCast(_localctx)->occurrenceParameter = optionalExprComponent(); + } + setState(755); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- NumericOperatorsContext ------------------------------------------------------------------ + +VtlParser::NumericOperatorsContext::NumericOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::NumericOperatorsContext::getRuleIndex() const { + return VtlParser::RuleNumericOperators; +} + +void VtlParser::NumericOperatorsContext::copyFrom(NumericOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- UnaryNumericContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryNumericContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::UnaryNumericContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::CEIL() { + return getToken(VtlParser::CEIL, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::FLOOR() { + return getToken(VtlParser::FLOOR, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::ABS() { + return getToken(VtlParser::ABS, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::EXP() { + return getToken(VtlParser::EXP, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::LN() { + return getToken(VtlParser::LN, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericContext::SQRT() { + return getToken(VtlParser::SQRT, 0); +} + +VtlParser::UnaryNumericContext::UnaryNumericContext(NumericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryNumericContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryNumeric(this); +} +void VtlParser::UnaryNumericContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryNumeric(this); +} + +std::any VtlParser::UnaryNumericContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryNumeric(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryWithOptionalNumericContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::UnaryWithOptionalNumericContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericContext::ROUND() { + return getToken(VtlParser::ROUND, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericContext::TRUNC() { + return getToken(VtlParser::TRUNC, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +VtlParser::OptionalExprContext* VtlParser::UnaryWithOptionalNumericContext::optionalExpr() { + return getRuleContext(0); +} + +VtlParser::UnaryWithOptionalNumericContext::UnaryWithOptionalNumericContext(NumericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryWithOptionalNumericContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryWithOptionalNumeric(this); +} +void VtlParser::UnaryWithOptionalNumericContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryWithOptionalNumeric(this); +} + +std::any VtlParser::UnaryWithOptionalNumericContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryWithOptionalNumeric(this); + else + return visitor->visitChildren(this); +} +//----------------- BinaryNumericContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::BinaryNumericContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::BinaryNumericContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::BinaryNumericContext::expr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::MOD() { + return getToken(VtlParser::MOD, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::POWER() { + return getToken(VtlParser::POWER, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::LOG() { + return getToken(VtlParser::LOG, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericContext::RANDOM() { + return getToken(VtlParser::RANDOM, 0); +} + +VtlParser::BinaryNumericContext::BinaryNumericContext(NumericOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::BinaryNumericContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBinaryNumeric(this); +} +void VtlParser::BinaryNumericContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBinaryNumeric(this); +} + +std::any VtlParser::BinaryNumericContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBinaryNumeric(this); + else + return visitor->visitChildren(this); +} +VtlParser::NumericOperatorsContext* VtlParser::numericOperators() { + NumericOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 46, VtlParser::RuleNumericOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(780); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::EXP: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(759); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 85) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 85)) & 7881299356286981) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(760); + match(VtlParser::LPAREN); + setState(761); + expr(0); + setState(762); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TRUNC: + case VtlParser::ROUND: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(764); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::TRUNC + + || _la == VtlParser::ROUND)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(765); + match(VtlParser::LPAREN); + setState(766); + expr(0); + setState(769); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(767); + match(VtlParser::COMMA); + setState(768); + optionalExpr(); + } + setState(771); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::RANDOM: + case VtlParser::LOG: + case VtlParser::POWER: + case VtlParser::MOD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(773); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 61) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 61)) & 3355443201) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(774); + match(VtlParser::LPAREN); + setState(775); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(776); + match(VtlParser::COMMA); + setState(777); + antlrcpp::downCast(_localctx)->right = expr(0); + setState(778); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- NumericOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::NumericOperatorsComponentContext::NumericOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::NumericOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleNumericOperatorsComponent; +} + +void VtlParser::NumericOperatorsComponentContext::copyFrom(NumericOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- UnaryNumericComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::UnaryNumericComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::CEIL() { + return getToken(VtlParser::CEIL, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::FLOOR() { + return getToken(VtlParser::FLOOR, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::ABS() { + return getToken(VtlParser::ABS, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::EXP() { + return getToken(VtlParser::EXP, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::LN() { + return getToken(VtlParser::LN, 0); +} + +tree::TerminalNode* VtlParser::UnaryNumericComponentContext::SQRT() { + return getToken(VtlParser::SQRT, 0); +} + +VtlParser::UnaryNumericComponentContext::UnaryNumericComponentContext(NumericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryNumericComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryNumericComponent(this); +} +void VtlParser::UnaryNumericComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryNumericComponent(this); +} + +std::any VtlParser::UnaryNumericComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryNumericComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- BinaryNumericComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::BinaryNumericComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::BinaryNumericComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::MOD() { + return getToken(VtlParser::MOD, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::POWER() { + return getToken(VtlParser::POWER, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::LOG() { + return getToken(VtlParser::LOG, 0); +} + +tree::TerminalNode* VtlParser::BinaryNumericComponentContext::RANDOM() { + return getToken(VtlParser::RANDOM, 0); +} + +VtlParser::BinaryNumericComponentContext::BinaryNumericComponentContext(NumericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::BinaryNumericComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBinaryNumericComponent(this); +} +void VtlParser::BinaryNumericComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBinaryNumericComponent(this); +} + +std::any VtlParser::BinaryNumericComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBinaryNumericComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- UnaryWithOptionalNumericComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::UnaryWithOptionalNumericComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericComponentContext::ROUND() { + return getToken(VtlParser::ROUND, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericComponentContext::TRUNC() { + return getToken(VtlParser::TRUNC, 0); +} + +tree::TerminalNode* VtlParser::UnaryWithOptionalNumericComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +VtlParser::OptionalExprComponentContext* VtlParser::UnaryWithOptionalNumericComponentContext::optionalExprComponent() { + return getRuleContext(0); +} + +VtlParser::UnaryWithOptionalNumericComponentContext::UnaryWithOptionalNumericComponentContext(NumericOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnaryWithOptionalNumericComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnaryWithOptionalNumericComponent(this); +} +void VtlParser::UnaryWithOptionalNumericComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnaryWithOptionalNumericComponent(this); +} + +std::any VtlParser::UnaryWithOptionalNumericComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnaryWithOptionalNumericComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::NumericOperatorsComponentContext* VtlParser::numericOperatorsComponent() { + NumericOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 48, VtlParser::RuleNumericOperatorsComponent); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(803); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::EXP: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(782); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 85) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 85)) & 7881299356286981) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(783); + match(VtlParser::LPAREN); + setState(784); + exprComponent(0); + setState(785); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TRUNC: + case VtlParser::ROUND: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(787); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::TRUNC + + || _la == VtlParser::ROUND)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(788); + match(VtlParser::LPAREN); + setState(789); + exprComponent(0); + setState(792); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(790); + match(VtlParser::COMMA); + setState(791); + optionalExprComponent(); + } + setState(794); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::RANDOM: + case VtlParser::LOG: + case VtlParser::POWER: + case VtlParser::MOD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(796); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 61) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 61)) & 3355443201) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(797); + match(VtlParser::LPAREN); + setState(798); + antlrcpp::downCast(_localctx)->left = exprComponent(0); + setState(799); + match(VtlParser::COMMA); + setState(800); + antlrcpp::downCast(_localctx)->right = exprComponent(0); + setState(801); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComparisonOperatorsContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperatorsContext::ComparisonOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ComparisonOperatorsContext::getRuleIndex() const { + return VtlParser::RuleComparisonOperators; +} + +void VtlParser::ComparisonOperatorsContext::copyFrom(ComparisonOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- BetweenAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::BetweenAtomContext::BETWEEN() { + return getToken(VtlParser::BETWEEN, 0); +} + +tree::TerminalNode* VtlParser::BetweenAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::BetweenAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::BetweenAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::BetweenAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::BetweenAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::BetweenAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::BetweenAtomContext::BetweenAtomContext(ComparisonOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::BetweenAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBetweenAtom(this); +} +void VtlParser::BetweenAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBetweenAtom(this); +} + +std::any VtlParser::BetweenAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBetweenAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- CharsetMatchAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CharsetMatchAtomContext::CHARSET_MATCH() { + return getToken(VtlParser::CHARSET_MATCH, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::CharsetMatchAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::CharsetMatchAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::CharsetMatchAtomContext::CharsetMatchAtomContext(ComparisonOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::CharsetMatchAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCharsetMatchAtom(this); +} +void VtlParser::CharsetMatchAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCharsetMatchAtom(this); +} + +std::any VtlParser::CharsetMatchAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCharsetMatchAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- IsNullAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::IsNullAtomContext::ISNULL() { + return getToken(VtlParser::ISNULL, 0); +} + +tree::TerminalNode* VtlParser::IsNullAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::IsNullAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::IsNullAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::IsNullAtomContext::IsNullAtomContext(ComparisonOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::IsNullAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterIsNullAtom(this); +} +void VtlParser::IsNullAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitIsNullAtom(this); +} + +std::any VtlParser::IsNullAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIsNullAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- ExistInAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ExistInAtomContext::EXISTS_IN() { + return getToken(VtlParser::EXISTS_IN, 0); +} + +tree::TerminalNode* VtlParser::ExistInAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::ExistInAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ExistInAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::ExistInAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::ExistInAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::ExistInAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::RetainTypeContext* VtlParser::ExistInAtomContext::retainType() { + return getRuleContext(0); +} + +VtlParser::ExistInAtomContext::ExistInAtomContext(ComparisonOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ExistInAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterExistInAtom(this); +} +void VtlParser::ExistInAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitExistInAtom(this); +} + +std::any VtlParser::ExistInAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitExistInAtom(this); + else + return visitor->visitChildren(this); +} +VtlParser::ComparisonOperatorsContext* VtlParser::comparisonOperators() { + ComparisonOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 50, VtlParser::RuleComparisonOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(837); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BETWEEN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(805); + match(VtlParser::BETWEEN); + setState(806); + match(VtlParser::LPAREN); + setState(807); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(808); + match(VtlParser::COMMA); + setState(809); + antlrcpp::downCast(_localctx)->from_ = expr(0); + setState(810); + match(VtlParser::COMMA); + setState(811); + antlrcpp::downCast(_localctx)->to_ = expr(0); + setState(812); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CHARSET_MATCH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(814); + match(VtlParser::CHARSET_MATCH); + setState(815); + match(VtlParser::LPAREN); + setState(816); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(817); + match(VtlParser::COMMA); + setState(818); + antlrcpp::downCast(_localctx)->pattern = expr(0); + setState(819); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::ISNULL: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(821); + match(VtlParser::ISNULL); + setState(822); + match(VtlParser::LPAREN); + setState(823); + expr(0); + setState(824); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::EXISTS_IN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(826); + match(VtlParser::EXISTS_IN); + setState(827); + match(VtlParser::LPAREN); + setState(828); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(829); + match(VtlParser::COMMA); + setState(830); + antlrcpp::downCast(_localctx)->right = expr(0); + setState(833); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(831); + match(VtlParser::COMMA); + setState(832); + retainType(); + } + setState(835); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComparisonOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperatorsComponentContext::ComparisonOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ComparisonOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleComparisonOperatorsComponent; +} + +void VtlParser::ComparisonOperatorsComponentContext::copyFrom(ComparisonOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- IsNullAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::IsNullAtomComponentContext::ISNULL() { + return getToken(VtlParser::ISNULL, 0); +} + +tree::TerminalNode* VtlParser::IsNullAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::IsNullAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::IsNullAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::IsNullAtomComponentContext::IsNullAtomComponentContext(ComparisonOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::IsNullAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterIsNullAtomComponent(this); +} +void VtlParser::IsNullAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitIsNullAtomComponent(this); +} + +std::any VtlParser::IsNullAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIsNullAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- CharsetMatchAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CharsetMatchAtomComponentContext::CHARSET_MATCH() { + return getToken(VtlParser::CHARSET_MATCH, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::CharsetMatchAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::CharsetMatchAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::CharsetMatchAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::CharsetMatchAtomComponentContext::CharsetMatchAtomComponentContext(ComparisonOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CharsetMatchAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCharsetMatchAtomComponent(this); +} +void VtlParser::CharsetMatchAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCharsetMatchAtomComponent(this); +} + +std::any VtlParser::CharsetMatchAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCharsetMatchAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- BetweenAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::BetweenAtomComponentContext::BETWEEN() { + return getToken(VtlParser::BETWEEN, 0); +} + +tree::TerminalNode* VtlParser::BetweenAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::BetweenAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::BetweenAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::BetweenAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::BetweenAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::BetweenAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::BetweenAtomComponentContext::BetweenAtomComponentContext(ComparisonOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::BetweenAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBetweenAtomComponent(this); +} +void VtlParser::BetweenAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBetweenAtomComponent(this); +} + +std::any VtlParser::BetweenAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBetweenAtomComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::ComparisonOperatorsComponentContext* VtlParser::comparisonOperatorsComponent() { + ComparisonOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 52, VtlParser::RuleComparisonOperatorsComponent); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(860); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BETWEEN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(839); + match(VtlParser::BETWEEN); + setState(840); + match(VtlParser::LPAREN); + setState(841); + antlrcpp::downCast(_localctx)->op = exprComponent(0); + setState(842); + match(VtlParser::COMMA); + setState(843); + antlrcpp::downCast(_localctx)->from_ = exprComponent(0); + setState(844); + match(VtlParser::COMMA); + setState(845); + antlrcpp::downCast(_localctx)->to_ = exprComponent(0); + setState(846); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CHARSET_MATCH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(848); + match(VtlParser::CHARSET_MATCH); + setState(849); + match(VtlParser::LPAREN); + setState(850); + antlrcpp::downCast(_localctx)->op = exprComponent(0); + setState(851); + match(VtlParser::COMMA); + setState(852); + antlrcpp::downCast(_localctx)->pattern = exprComponent(0); + setState(853); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::ISNULL: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(855); + match(VtlParser::ISNULL); + setState(856); + match(VtlParser::LPAREN); + setState(857); + exprComponent(0); + setState(858); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- TimeOperatorsContext ------------------------------------------------------------------ + +VtlParser::TimeOperatorsContext::TimeOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::TimeOperatorsContext::getRuleIndex() const { + return VtlParser::RuleTimeOperators; +} + +void VtlParser::TimeOperatorsContext::copyFrom(TimeOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- DayToYearAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayToYearAtomContext::DAYTOYEAR() { + return getToken(VtlParser::DAYTOYEAR, 0); +} + +tree::TerminalNode* VtlParser::DayToYearAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::DayToYearAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayToYearAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayToYearAtomContext::DayToYearAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayToYearAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayToYearAtom(this); +} +void VtlParser::DayToYearAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayToYearAtom(this); +} + +std::any VtlParser::DayToYearAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayToYearAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- YearAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::YearAtomContext::YEAR_OP() { + return getToken(VtlParser::YEAR_OP, 0); +} + +tree::TerminalNode* VtlParser::YearAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::YearAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::YearAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::YearAtomContext::YearAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::YearAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterYearAtom(this); +} +void VtlParser::YearAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitYearAtom(this); +} + +std::any VtlParser::YearAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitYearAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- YearTodayAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::YearTodayAtomContext::YEARTODAY() { + return getToken(VtlParser::YEARTODAY, 0); +} + +tree::TerminalNode* VtlParser::YearTodayAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::YearTodayAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::YearTodayAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::YearTodayAtomContext::YearTodayAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::YearTodayAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterYearTodayAtom(this); +} +void VtlParser::YearTodayAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitYearTodayAtom(this); +} + +std::any VtlParser::YearTodayAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitYearTodayAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- DayToMonthAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayToMonthAtomContext::DAYTOMONTH() { + return getToken(VtlParser::DAYTOMONTH, 0); +} + +tree::TerminalNode* VtlParser::DayToMonthAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::DayToMonthAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayToMonthAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayToMonthAtomContext::DayToMonthAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayToMonthAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayToMonthAtom(this); +} +void VtlParser::DayToMonthAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayToMonthAtom(this); +} + +std::any VtlParser::DayToMonthAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayToMonthAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- PeriodAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::PeriodAtomContext::PERIOD_INDICATOR() { + return getToken(VtlParser::PERIOD_INDICATOR, 0); +} + +tree::TerminalNode* VtlParser::PeriodAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::PeriodAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::PeriodAtomContext::expr() { + return getRuleContext(0); +} + +VtlParser::PeriodAtomContext::PeriodAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::PeriodAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterPeriodAtom(this); +} +void VtlParser::PeriodAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitPeriodAtom(this); +} + +std::any VtlParser::PeriodAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPeriodAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- MonthTodayAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::MonthTodayAtomContext::MONTHTODAY() { + return getToken(VtlParser::MONTHTODAY, 0); +} + +tree::TerminalNode* VtlParser::MonthTodayAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::MonthTodayAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::MonthTodayAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::MonthTodayAtomContext::MonthTodayAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::MonthTodayAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMonthTodayAtom(this); +} +void VtlParser::MonthTodayAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMonthTodayAtom(this); +} + +std::any VtlParser::MonthTodayAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMonthTodayAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- FillTimeAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::FillTimeAtomContext::FILL_TIME_SERIES() { + return getToken(VtlParser::FILL_TIME_SERIES, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::FillTimeAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomContext::SINGLE() { + return getToken(VtlParser::SINGLE, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + +VtlParser::FillTimeAtomContext::FillTimeAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::FillTimeAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFillTimeAtom(this); +} +void VtlParser::FillTimeAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFillTimeAtom(this); +} + +std::any VtlParser::FillTimeAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFillTimeAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- MonthAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::MonthAtomContext::MONTH_OP() { + return getToken(VtlParser::MONTH_OP, 0); +} + +tree::TerminalNode* VtlParser::MonthAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::MonthAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::MonthAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::MonthAtomContext::MonthAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::MonthAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMonthAtom(this); +} +void VtlParser::MonthAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMonthAtom(this); +} + +std::any VtlParser::MonthAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMonthAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- DayOfYearAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayOfYearAtomContext::DAYOFYEAR() { + return getToken(VtlParser::DAYOFYEAR, 0); +} + +tree::TerminalNode* VtlParser::DayOfYearAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::DayOfYearAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayOfYearAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayOfYearAtomContext::DayOfYearAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayOfYearAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayOfYearAtom(this); +} +void VtlParser::DayOfYearAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayOfYearAtom(this); +} + +std::any VtlParser::DayOfYearAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayOfYearAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- FlowAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::FlowAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::FlowAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::FlowAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::FlowAtomContext::FLOW_TO_STOCK() { + return getToken(VtlParser::FLOW_TO_STOCK, 0); +} + +tree::TerminalNode* VtlParser::FlowAtomContext::STOCK_TO_FLOW() { + return getToken(VtlParser::STOCK_TO_FLOW, 0); +} + +VtlParser::FlowAtomContext::FlowAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::FlowAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFlowAtom(this); +} +void VtlParser::FlowAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFlowAtom(this); +} + +std::any VtlParser::FlowAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFlowAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeShiftAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::TimeShiftAtomContext::TIMESHIFT() { + return getToken(VtlParser::TIMESHIFT, 0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::TimeShiftAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +VtlParser::SignedIntegerContext* VtlParser::TimeShiftAtomContext::signedInteger() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::TimeShiftAtomContext::TimeShiftAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeShiftAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeShiftAtom(this); +} +void VtlParser::TimeShiftAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeShiftAtom(this); +} + +std::any VtlParser::TimeShiftAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeShiftAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeAggAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::TimeAggAtomContext::TIME_AGG() { + return getToken(VtlParser::TIME_AGG, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::TimeAggAtomContext::STRING_CONSTANT() { + return getTokens(VtlParser::STRING_CONSTANT); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::STRING_CONSTANT(size_t i) { + return getToken(VtlParser::STRING_CONSTANT, i); +} + +std::vector VtlParser::TimeAggAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::OptionalExprContext* VtlParser::TimeAggAtomContext::optionalExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::FIRST() { + return getToken(VtlParser::FIRST, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomContext::LAST() { + return getToken(VtlParser::LAST, 0); +} + +VtlParser::TimeAggAtomContext::TimeAggAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeAggAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeAggAtom(this); +} +void VtlParser::TimeAggAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeAggAtom(this); +} + +std::any VtlParser::TimeAggAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeAggAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- DateDiffAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DateDiffAtomContext::DATEDIFF() { + return getToken(VtlParser::DATEDIFF, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::DateDiffAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::DateDiffAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::DateDiffAtomContext::DateDiffAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DateDiffAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDateDiffAtom(this); +} +void VtlParser::DateDiffAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDateDiffAtom(this); +} + +std::any VtlParser::DateDiffAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDateDiffAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- DateAddAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DateAddAtomContext::DATEADD() { + return getToken(VtlParser::DATEADD, 0); +} + +tree::TerminalNode* VtlParser::DateAddAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::DateAddAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::DateAddAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::DateAddAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::DateAddAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::DateAddAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::DateAddAtomContext::DateAddAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DateAddAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDateAddAtom(this); +} +void VtlParser::DateAddAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDateAddAtom(this); +} + +std::any VtlParser::DateAddAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDateAddAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- DayOfMonthAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayOfMonthAtomContext::DAYOFMONTH() { + return getToken(VtlParser::DAYOFMONTH, 0); +} + +tree::TerminalNode* VtlParser::DayOfMonthAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::DayOfMonthAtomContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayOfMonthAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayOfMonthAtomContext::DayOfMonthAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayOfMonthAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayOfMonthAtom(this); +} +void VtlParser::DayOfMonthAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayOfMonthAtom(this); +} + +std::any VtlParser::DayOfMonthAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayOfMonthAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- CurrentDateAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CurrentDateAtomContext::CURRENT_DATE() { + return getToken(VtlParser::CURRENT_DATE, 0); +} + +tree::TerminalNode* VtlParser::CurrentDateAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CurrentDateAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::CurrentDateAtomContext::CurrentDateAtomContext(TimeOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::CurrentDateAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCurrentDateAtom(this); +} +void VtlParser::CurrentDateAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCurrentDateAtom(this); +} + +std::any VtlParser::CurrentDateAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCurrentDateAtom(this); + else + return visitor->visitChildren(this); +} +VtlParser::TimeOperatorsContext* VtlParser::timeOperators() { + TimeOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 54, VtlParser::RuleTimeOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(964); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::PERIOD_INDICATOR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(862); + match(VtlParser::PERIOD_INDICATOR); + setState(863); + match(VtlParser::LPAREN); + setState(865); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 4236762448452935682) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 66)) & 461932052660227) != 0) || ((((_la - 131) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 131)) & -4611686002319220865) != 0) || ((((_la - 195) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 195)) & 2181431480623107) != 0)) { + setState(864); + expr(0); + } + setState(867); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::FILL_TIME_SERIES: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(868); + match(VtlParser::FILL_TIME_SERIES); + setState(869); + match(VtlParser::LPAREN); + setState(870); + expr(0); + setState(873); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(871); + match(VtlParser::COMMA); + setState(872); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL || _la == VtlParser::SINGLE)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(875); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(877); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FLOW_TO_STOCK + + || _la == VtlParser::STOCK_TO_FLOW)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(878); + match(VtlParser::LPAREN); + setState(879); + expr(0); + setState(880); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TIMESHIFT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(882); + match(VtlParser::TIMESHIFT); + setState(883); + match(VtlParser::LPAREN); + setState(884); + expr(0); + setState(885); + match(VtlParser::COMMA); + setState(886); + signedInteger(); + setState(887); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TIME_AGG: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 5); + setState(889); + match(VtlParser::TIME_AGG); + setState(890); + match(VtlParser::LPAREN); + setState(891); + antlrcpp::downCast(_localctx)->periodIndTo = match(VtlParser::STRING_CONSTANT); + setState(894); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 70, _ctx)) { + case 1: { + setState(892); + match(VtlParser::COMMA); + setState(893); + antlrcpp::downCast(_localctx)->periodIndFrom = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::OPTIONAL || _la == VtlParser::STRING_CONSTANT)) { + antlrcpp::downCast(_localctx)->periodIndFrom = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + break; + } + + default: + break; + } + setState(898); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 71, _ctx)) { + case 1: { + setState(896); + match(VtlParser::COMMA); + setState(897); + antlrcpp::downCast(_localctx)->op = optionalExpr(); + break; + } + + default: + break; + } + setState(902); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(900); + match(VtlParser::COMMA); + setState(901); + antlrcpp::downCast(_localctx)->delim = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FIRST + + || _la == VtlParser::LAST)) { + antlrcpp::downCast(_localctx)->delim = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(904); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CURRENT_DATE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 6); + setState(905); + match(VtlParser::CURRENT_DATE); + setState(906); + match(VtlParser::LPAREN); + setState(907); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DATEDIFF: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 7); + setState(908); + match(VtlParser::DATEDIFF); + setState(909); + match(VtlParser::LPAREN); + setState(910); + antlrcpp::downCast(_localctx)->dateFrom = expr(0); + setState(911); + match(VtlParser::COMMA); + setState(912); + antlrcpp::downCast(_localctx)->dateTo = expr(0); + setState(913); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DATEADD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 8); + setState(915); + match(VtlParser::DATEADD); + setState(916); + match(VtlParser::LPAREN); + setState(917); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(918); + match(VtlParser::COMMA); + setState(919); + antlrcpp::downCast(_localctx)->shiftNumber = expr(0); + setState(920); + match(VtlParser::COMMA); + setState(921); + antlrcpp::downCast(_localctx)->periodInd = expr(0); + setState(922); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::YEAR_OP: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 9); + setState(924); + match(VtlParser::YEAR_OP); + setState(925); + match(VtlParser::LPAREN); + setState(926); + expr(0); + setState(927); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::MONTH_OP: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 10); + setState(929); + match(VtlParser::MONTH_OP); + setState(930); + match(VtlParser::LPAREN); + setState(931); + expr(0); + setState(932); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYOFMONTH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 11); + setState(934); + match(VtlParser::DAYOFMONTH); + setState(935); + match(VtlParser::LPAREN); + setState(936); + expr(0); + setState(937); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYOFYEAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 12); + setState(939); + match(VtlParser::DAYOFYEAR); + setState(940); + match(VtlParser::LPAREN); + setState(941); + expr(0); + setState(942); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYTOYEAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 13); + setState(944); + match(VtlParser::DAYTOYEAR); + setState(945); + match(VtlParser::LPAREN); + setState(946); + expr(0); + setState(947); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYTOMONTH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 14); + setState(949); + match(VtlParser::DAYTOMONTH); + setState(950); + match(VtlParser::LPAREN); + setState(951); + expr(0); + setState(952); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::YEARTODAY: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 15); + setState(954); + match(VtlParser::YEARTODAY); + setState(955); + match(VtlParser::LPAREN); + setState(956); + expr(0); + setState(957); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::MONTHTODAY: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 16); + setState(959); + match(VtlParser::MONTHTODAY); + setState(960); + match(VtlParser::LPAREN); + setState(961); + expr(0); + setState(962); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- TimeOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::TimeOperatorsComponentContext::TimeOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::TimeOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleTimeOperatorsComponent; +} + +void VtlParser::TimeOperatorsComponentContext::copyFrom(TimeOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- PeriodAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::PeriodAtomComponentContext::PERIOD_INDICATOR() { + return getToken(VtlParser::PERIOD_INDICATOR, 0); +} + +tree::TerminalNode* VtlParser::PeriodAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::PeriodAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::PeriodAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +VtlParser::PeriodAtomComponentContext::PeriodAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::PeriodAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterPeriodAtomComponent(this); +} +void VtlParser::PeriodAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitPeriodAtomComponent(this); +} + +std::any VtlParser::PeriodAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPeriodAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeShiftAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::TimeShiftAtomComponentContext::TIMESHIFT() { + return getToken(VtlParser::TIMESHIFT, 0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::TimeShiftAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +VtlParser::SignedIntegerContext* VtlParser::TimeShiftAtomComponentContext::signedInteger() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeShiftAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::TimeShiftAtomComponentContext::TimeShiftAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeShiftAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeShiftAtomComponent(this); +} +void VtlParser::TimeShiftAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeShiftAtomComponent(this); +} + +std::any VtlParser::TimeShiftAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeShiftAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- MonthTodayAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::MonthTodayAtomComponentContext::MONTHTODAY() { + return getToken(VtlParser::MONTHTODAY, 0); +} + +tree::TerminalNode* VtlParser::MonthTodayAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::MonthTodayAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::MonthTodayAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::MonthTodayAtomComponentContext::MonthTodayAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::MonthTodayAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMonthTodayAtomComponent(this); +} +void VtlParser::MonthTodayAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMonthTodayAtomComponent(this); +} + +std::any VtlParser::MonthTodayAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMonthTodayAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- TimeAggAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::TIME_AGG() { + return getToken(VtlParser::TIME_AGG, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::TimeAggAtomComponentContext::STRING_CONSTANT() { + return getTokens(VtlParser::STRING_CONSTANT); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::STRING_CONSTANT(size_t i) { + return getToken(VtlParser::STRING_CONSTANT, i); +} + +std::vector VtlParser::TimeAggAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::OptionalExprComponentContext* VtlParser::TimeAggAtomComponentContext::optionalExprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::FIRST() { + return getToken(VtlParser::FIRST, 0); +} + +tree::TerminalNode* VtlParser::TimeAggAtomComponentContext::LAST() { + return getToken(VtlParser::LAST, 0); +} + +VtlParser::TimeAggAtomComponentContext::TimeAggAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::TimeAggAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterTimeAggAtomComponent(this); +} +void VtlParser::TimeAggAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitTimeAggAtomComponent(this); +} + +std::any VtlParser::TimeAggAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTimeAggAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DayToMonthAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayToMonthAtomComponentContext::DAYTOMONTH() { + return getToken(VtlParser::DAYTOMONTH, 0); +} + +tree::TerminalNode* VtlParser::DayToMonthAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::DayToMonthAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayToMonthAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayToMonthAtomComponentContext::DayToMonthAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayToMonthAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayToMonthAtomComponent(this); +} +void VtlParser::DayToMonthAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayToMonthAtomComponent(this); +} + +std::any VtlParser::DayToMonthAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayToMonthAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DateAddAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DateAddAtomComponentContext::DATEADD() { + return getToken(VtlParser::DATEADD, 0); +} + +tree::TerminalNode* VtlParser::DateAddAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::DateAddAtomComponentContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::DateAddAtomComponentContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::DateAddAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::DateAddAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::DateAddAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::DateAddAtomComponentContext::DateAddAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DateAddAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDateAddAtomComponent(this); +} +void VtlParser::DateAddAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDateAddAtomComponent(this); +} + +std::any VtlParser::DateAddAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDateAddAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- YearTodayAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::YearTodayAtomComponentContext::YEARTODAY() { + return getToken(VtlParser::YEARTODAY, 0); +} + +tree::TerminalNode* VtlParser::YearTodayAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::YearTodayAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::YearTodayAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::YearTodayAtomComponentContext::YearTodayAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::YearTodayAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterYearTodayAtomComponent(this); +} +void VtlParser::YearTodayAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitYearTodayAtomComponent(this); +} + +std::any VtlParser::YearTodayAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitYearTodayAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DayOfMonthAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayOfMonthAtomComponentContext::DAYOFMONTH() { + return getToken(VtlParser::DAYOFMONTH, 0); +} + +tree::TerminalNode* VtlParser::DayOfMonthAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::DayOfMonthAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayOfMonthAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayOfMonthAtomComponentContext::DayOfMonthAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayOfMonthAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayOfMonthAtomComponent(this); +} +void VtlParser::DayOfMonthAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayOfMonthAtomComponent(this); +} + +std::any VtlParser::DayOfMonthAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayOfMonthAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- MonthAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::MonthAtomComponentContext::MONTH_OP() { + return getToken(VtlParser::MONTH_OP, 0); +} + +tree::TerminalNode* VtlParser::MonthAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::MonthAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::MonthAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::MonthAtomComponentContext::MonthAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::MonthAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMonthAtomComponent(this); +} +void VtlParser::MonthAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMonthAtomComponent(this); +} + +std::any VtlParser::MonthAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMonthAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- FillTimeAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::FILL_TIME_SERIES() { + return getToken(VtlParser::FILL_TIME_SERIES, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::FillTimeAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::SINGLE() { + return getToken(VtlParser::SINGLE, 0); +} + +tree::TerminalNode* VtlParser::FillTimeAtomComponentContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + +VtlParser::FillTimeAtomComponentContext::FillTimeAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::FillTimeAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFillTimeAtomComponent(this); +} +void VtlParser::FillTimeAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFillTimeAtomComponent(this); +} + +std::any VtlParser::FillTimeAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFillTimeAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DatOfYearAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DatOfYearAtomComponentContext::DAYOFYEAR() { + return getToken(VtlParser::DAYOFYEAR, 0); +} + +tree::TerminalNode* VtlParser::DatOfYearAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::DatOfYearAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DatOfYearAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DatOfYearAtomComponentContext::DatOfYearAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DatOfYearAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDatOfYearAtomComponent(this); +} +void VtlParser::DatOfYearAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDatOfYearAtomComponent(this); +} + +std::any VtlParser::DatOfYearAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDatOfYearAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DayToYearAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DayToYearAtomComponentContext::DAYTOYEAR() { + return getToken(VtlParser::DAYTOYEAR, 0); +} + +tree::TerminalNode* VtlParser::DayToYearAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::DayToYearAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::DayToYearAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::DayToYearAtomComponentContext::DayToYearAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DayToYearAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDayToYearAtomComponent(this); +} +void VtlParser::DayToYearAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDayToYearAtomComponent(this); +} + +std::any VtlParser::DayToYearAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDayToYearAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- CurrentDateAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CurrentDateAtomComponentContext::CURRENT_DATE() { + return getToken(VtlParser::CURRENT_DATE, 0); +} + +tree::TerminalNode* VtlParser::CurrentDateAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CurrentDateAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::CurrentDateAtomComponentContext::CurrentDateAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::CurrentDateAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCurrentDateAtomComponent(this); +} +void VtlParser::CurrentDateAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCurrentDateAtomComponent(this); +} + +std::any VtlParser::CurrentDateAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCurrentDateAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- FlowAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::FlowAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::FlowAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::FlowAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::FlowAtomComponentContext::FLOW_TO_STOCK() { + return getToken(VtlParser::FLOW_TO_STOCK, 0); +} + +tree::TerminalNode* VtlParser::FlowAtomComponentContext::STOCK_TO_FLOW() { + return getToken(VtlParser::STOCK_TO_FLOW, 0); +} + +VtlParser::FlowAtomComponentContext::FlowAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::FlowAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterFlowAtomComponent(this); +} +void VtlParser::FlowAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitFlowAtomComponent(this); +} + +std::any VtlParser::FlowAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitFlowAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- DateDiffAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DateDiffAtomComponentContext::DATEDIFF() { + return getToken(VtlParser::DATEDIFF, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::DateDiffAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::DateDiffAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +VtlParser::ExprContext* VtlParser::DateDiffAtomComponentContext::expr() { + return getRuleContext(0); +} + +VtlParser::DateDiffAtomComponentContext::DateDiffAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::DateDiffAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDateDiffAtomComponent(this); +} +void VtlParser::DateDiffAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDateDiffAtomComponent(this); +} + +std::any VtlParser::DateDiffAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDateDiffAtomComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- YearAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::YearAtomComponentContext::YEAR_OP() { + return getToken(VtlParser::YEAR_OP, 0); +} + +tree::TerminalNode* VtlParser::YearAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::YearAtomComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::YearAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::YearAtomComponentContext::YearAtomComponentContext(TimeOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::YearAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterYearAtomComponent(this); +} +void VtlParser::YearAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitYearAtomComponent(this); +} + +std::any VtlParser::YearAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitYearAtomComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::TimeOperatorsComponentContext* VtlParser::timeOperatorsComponent() { + TimeOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 56, VtlParser::RuleTimeOperatorsComponent); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1068); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::PERIOD_INDICATOR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(966); + match(VtlParser::PERIOD_INDICATOR); + setState(967); + match(VtlParser::LPAREN); + setState(969); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 2363265003466809346) != 0) || ((((_la - 77) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 77)) & -6935543338036757223) != 0) || ((((_la - 141) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 141)) & 15730631) != 0) || ((((_la - 208) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 208)) & 266287973385) != 0)) { + setState(968); + exprComponent(0); + } + setState(971); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::FILL_TIME_SERIES: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(972); + match(VtlParser::FILL_TIME_SERIES); + setState(973); + match(VtlParser::LPAREN); + setState(974); + exprComponent(0); + setState(977); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(975); + match(VtlParser::COMMA); + setState(976); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL || _la == VtlParser::SINGLE)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(979); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(981); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FLOW_TO_STOCK + + || _la == VtlParser::STOCK_TO_FLOW)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(982); + match(VtlParser::LPAREN); + setState(983); + exprComponent(0); + setState(984); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TIMESHIFT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(986); + match(VtlParser::TIMESHIFT); + setState(987); + match(VtlParser::LPAREN); + setState(988); + exprComponent(0); + setState(989); + match(VtlParser::COMMA); + setState(990); + signedInteger(); + setState(991); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::TIME_AGG: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 5); + setState(993); + match(VtlParser::TIME_AGG); + setState(994); + match(VtlParser::LPAREN); + setState(995); + antlrcpp::downCast(_localctx)->periodIndTo = match(VtlParser::STRING_CONSTANT); + setState(998); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 76, _ctx)) { + case 1: { + setState(996); + match(VtlParser::COMMA); + setState(997); + antlrcpp::downCast(_localctx)->periodIndFrom = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::OPTIONAL || _la == VtlParser::STRING_CONSTANT)) { + antlrcpp::downCast(_localctx)->periodIndFrom = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + break; + } + + default: + break; + } + setState(1002); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 77, _ctx)) { + case 1: { + setState(1000); + match(VtlParser::COMMA); + setState(1001); + antlrcpp::downCast(_localctx)->op = optionalExprComponent(); + break; + } + + default: + break; + } + setState(1006); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1004); + match(VtlParser::COMMA); + setState(1005); + antlrcpp::downCast(_localctx)->delim = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FIRST + + || _la == VtlParser::LAST)) { + antlrcpp::downCast(_localctx)->delim = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1008); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CURRENT_DATE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 6); + setState(1009); + match(VtlParser::CURRENT_DATE); + setState(1010); + match(VtlParser::LPAREN); + setState(1011); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DATEDIFF: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 7); + setState(1012); + match(VtlParser::DATEDIFF); + setState(1013); + match(VtlParser::LPAREN); + setState(1014); + antlrcpp::downCast(_localctx)->dateFrom = exprComponent(0); + setState(1015); + match(VtlParser::COMMA); + setState(1016); + antlrcpp::downCast(_localctx)->dateTo = expr(0); + setState(1017); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DATEADD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 8); + setState(1019); + match(VtlParser::DATEADD); + setState(1020); + match(VtlParser::LPAREN); + setState(1021); + antlrcpp::downCast(_localctx)->op = exprComponent(0); + setState(1022); + match(VtlParser::COMMA); + setState(1023); + antlrcpp::downCast(_localctx)->shiftNumber = exprComponent(0); + setState(1024); + match(VtlParser::COMMA); + setState(1025); + antlrcpp::downCast(_localctx)->periodInd = exprComponent(0); + setState(1026); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::YEAR_OP: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 9); + setState(1028); + match(VtlParser::YEAR_OP); + setState(1029); + match(VtlParser::LPAREN); + setState(1030); + exprComponent(0); + setState(1031); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::MONTH_OP: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 10); + setState(1033); + match(VtlParser::MONTH_OP); + setState(1034); + match(VtlParser::LPAREN); + setState(1035); + exprComponent(0); + setState(1036); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYOFMONTH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 11); + setState(1038); + match(VtlParser::DAYOFMONTH); + setState(1039); + match(VtlParser::LPAREN); + setState(1040); + exprComponent(0); + setState(1041); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYOFYEAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 12); + setState(1043); + match(VtlParser::DAYOFYEAR); + setState(1044); + match(VtlParser::LPAREN); + setState(1045); + exprComponent(0); + setState(1046); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYTOYEAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 13); + setState(1048); + match(VtlParser::DAYTOYEAR); + setState(1049); + match(VtlParser::LPAREN); + setState(1050); + exprComponent(0); + setState(1051); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::DAYTOMONTH: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 14); + setState(1053); + match(VtlParser::DAYTOMONTH); + setState(1054); + match(VtlParser::LPAREN); + setState(1055); + exprComponent(0); + setState(1056); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::YEARTODAY: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 15); + setState(1058); + match(VtlParser::YEARTODAY); + setState(1059); + match(VtlParser::LPAREN); + setState(1060); + exprComponent(0); + setState(1061); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::MONTHTODAY: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 16); + setState(1063); + match(VtlParser::MONTHTODAY); + setState(1064); + match(VtlParser::LPAREN); + setState(1065); + exprComponent(0); + setState(1066); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SetOperatorsContext ------------------------------------------------------------------ + +VtlParser::SetOperatorsContext::SetOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::SetOperatorsContext::getRuleIndex() const { + return VtlParser::RuleSetOperators; +} + +void VtlParser::SetOperatorsContext::copyFrom(SetOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- SetOrSYmDiffAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::SetOrSYmDiffAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::SetOrSYmDiffAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::SetOrSYmDiffAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::SetOrSYmDiffAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::SetOrSYmDiffAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::SetOrSYmDiffAtomContext::SETDIFF() { + return getToken(VtlParser::SETDIFF, 0); +} + +tree::TerminalNode* VtlParser::SetOrSYmDiffAtomContext::SYMDIFF() { + return getToken(VtlParser::SYMDIFF, 0); +} + +VtlParser::SetOrSYmDiffAtomContext::SetOrSYmDiffAtomContext(SetOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::SetOrSYmDiffAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSetOrSYmDiffAtom(this); +} +void VtlParser::SetOrSYmDiffAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSetOrSYmDiffAtom(this); +} + +std::any VtlParser::SetOrSYmDiffAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSetOrSYmDiffAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- IntersectAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::IntersectAtomContext::INTERSECT() { + return getToken(VtlParser::INTERSECT, 0); +} + +tree::TerminalNode* VtlParser::IntersectAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::IntersectAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::IntersectAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::IntersectAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::IntersectAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::IntersectAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::IntersectAtomContext::IntersectAtomContext(SetOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::IntersectAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterIntersectAtom(this); +} +void VtlParser::IntersectAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitIntersectAtom(this); +} + +std::any VtlParser::IntersectAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitIntersectAtom(this); + else + return visitor->visitChildren(this); +} +//----------------- UnionAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::UnionAtomContext::UNION() { + return getToken(VtlParser::UNION, 0); +} + +tree::TerminalNode* VtlParser::UnionAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::UnionAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::UnionAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::UnionAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::UnionAtomContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::UnionAtomContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::UnionAtomContext::UnionAtomContext(SetOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::UnionAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterUnionAtom(this); +} +void VtlParser::UnionAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitUnionAtom(this); +} + +std::any VtlParser::UnionAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitUnionAtom(this); + else + return visitor->visitChildren(this); +} +VtlParser::SetOperatorsContext* VtlParser::setOperators() { + SetOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 58, VtlParser::RuleSetOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1099); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::UNION: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1070); + match(VtlParser::UNION); + setState(1071); + match(VtlParser::LPAREN); + setState(1072); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(1075); + _errHandler->sync(this); + _la = _input->LA(1); + do { + setState(1073); + match(VtlParser::COMMA); + setState(1074); + expr(0); + setState(1077); + _errHandler->sync(this); + _la = _input->LA(1); + } while (_la == VtlParser::COMMA); + setState(1079); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::INTERSECT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1081); + match(VtlParser::INTERSECT); + setState(1082); + match(VtlParser::LPAREN); + setState(1083); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(1086); + _errHandler->sync(this); + _la = _input->LA(1); + do { + setState(1084); + match(VtlParser::COMMA); + setState(1085); + expr(0); + setState(1088); + _errHandler->sync(this); + _la = _input->LA(1); + } while (_la == VtlParser::COMMA); + setState(1090); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::SYMDIFF: + case VtlParser::SETDIFF: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1092); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::SYMDIFF || _la == VtlParser::SETDIFF)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1093); + match(VtlParser::LPAREN); + setState(1094); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(1095); + match(VtlParser::COMMA); + setState(1096); + antlrcpp::downCast(_localctx)->right = expr(0); + setState(1097); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- HierarchyOperatorsContext ------------------------------------------------------------------ + +VtlParser::HierarchyOperatorsContext::HierarchyOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::HIERARCHY() { + return getToken(VtlParser::HIERARCHY, 0); +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::HierarchyOperatorsContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +VtlParser::ConditionClauseContext* VtlParser::HierarchyOperatorsContext::conditionClause() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::HierarchyOperatorsContext::RULE() { + return getToken(VtlParser::RULE, 0); +} + +VtlParser::ValidationModeContext* VtlParser::HierarchyOperatorsContext::validationMode() { + return getRuleContext(0); +} + +VtlParser::InputModeHierarchyContext* VtlParser::HierarchyOperatorsContext::inputModeHierarchy() { + return getRuleContext(0); +} + +VtlParser::OutputModeHierarchyContext* VtlParser::HierarchyOperatorsContext::outputModeHierarchy() { + return getRuleContext(0); +} + +VtlParser::ComponentIDContext* VtlParser::HierarchyOperatorsContext::componentID() { + return getRuleContext(0); +} + + +size_t VtlParser::HierarchyOperatorsContext::getRuleIndex() const { + return VtlParser::RuleHierarchyOperators; +} + +void VtlParser::HierarchyOperatorsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHierarchyOperators(this); +} + +void VtlParser::HierarchyOperatorsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHierarchyOperators(this); +} + + +std::any VtlParser::HierarchyOperatorsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHierarchyOperators(this); + else + return visitor->visitChildren(this); +} + +VtlParser::HierarchyOperatorsContext* VtlParser::hierarchyOperators() { + HierarchyOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 60, VtlParser::RuleHierarchyOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1101); + match(VtlParser::HIERARCHY); + setState(1102); + match(VtlParser::LPAREN); + setState(1103); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(1104); + match(VtlParser::COMMA); + setState(1105); + antlrcpp::downCast(_localctx)->hrName = match(VtlParser::IDENTIFIER); + setState(1107); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::CONDITION) { + setState(1106); + conditionClause(); + } + setState(1111); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { + case 1: { + setState(1109); + match(VtlParser::RULE); + setState(1110); + antlrcpp::downCast(_localctx)->ruleComponent = componentID(); + break; + } + + default: + break; + } + setState(1114); + _errHandler->sync(this); + + _la = _input->LA(1); + if (((((_la - 225) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 225)) & 63) != 0)) { + setState(1113); + validationMode(); + } + setState(1117); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DATASET + + || _la == VtlParser::RULE || _la == VtlParser::RULE_PRIORITY) { + setState(1116); + inputModeHierarchy(); + } + setState(1120); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ALL || _la == VtlParser::COMPUTED) { + setState(1119); + outputModeHierarchy(); + } + setState(1122); + match(VtlParser::RPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValidationOperatorsContext ------------------------------------------------------------------ + +VtlParser::ValidationOperatorsContext::ValidationOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ValidationOperatorsContext::getRuleIndex() const { + return VtlParser::RuleValidationOperators; +} + +void VtlParser::ValidationOperatorsContext::copyFrom(ValidationOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- ValidateHRrulesetContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::CHECK_HIERARCHY() { + return getToken(VtlParser::CHECK_HIERARCHY, 0); +} + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::ValidateHRrulesetContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +VtlParser::ConditionClauseContext* VtlParser::ValidateHRrulesetContext::conditionClause() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ValidateHRrulesetContext::RULE() { + return getToken(VtlParser::RULE, 0); +} + +VtlParser::ComponentIDContext* VtlParser::ValidateHRrulesetContext::componentID() { + return getRuleContext(0); +} + +VtlParser::ValidationModeContext* VtlParser::ValidateHRrulesetContext::validationMode() { + return getRuleContext(0); +} + +VtlParser::InputModeContext* VtlParser::ValidateHRrulesetContext::inputMode() { + return getRuleContext(0); +} + +VtlParser::ValidationOutputContext* VtlParser::ValidateHRrulesetContext::validationOutput() { + return getRuleContext(0); +} + +VtlParser::ValidateHRrulesetContext::ValidateHRrulesetContext(ValidationOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ValidateHRrulesetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidateHRruleset(this); +} +void VtlParser::ValidateHRrulesetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidateHRruleset(this); +} + +std::any VtlParser::ValidateHRrulesetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidateHRruleset(this); + else + return visitor->visitChildren(this); +} +//----------------- ValidateDPrulesetContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::CHECK_DATAPOINT() { + return getToken(VtlParser::CHECK_DATAPOINT, 0); +} + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::ValidateDPrulesetContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::ValidateDPrulesetContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +tree::TerminalNode* VtlParser::ValidateDPrulesetContext::COMPONENTS() { + return getToken(VtlParser::COMPONENTS, 0); +} + +std::vector VtlParser::ValidateDPrulesetContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::ValidateDPrulesetContext::componentID(size_t i) { + return getRuleContext(i); +} + +VtlParser::ValidationOutputContext* VtlParser::ValidateDPrulesetContext::validationOutput() { + return getRuleContext(0); +} + +VtlParser::ValidateDPrulesetContext::ValidateDPrulesetContext(ValidationOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ValidateDPrulesetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidateDPruleset(this); +} +void VtlParser::ValidateDPrulesetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidateDPruleset(this); +} + +std::any VtlParser::ValidateDPrulesetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidateDPruleset(this); + else + return visitor->visitChildren(this); +} +//----------------- ValidationSimpleContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ValidationSimpleContext::CHECK() { + return getToken(VtlParser::CHECK, 0); +} + +tree::TerminalNode* VtlParser::ValidationSimpleContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::ValidationSimpleContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::ValidationSimpleContext::expr() { + return getRuleContext(0); +} + +VtlParser::ImbalanceExprContext* VtlParser::ValidationSimpleContext::imbalanceExpr() { + return getRuleContext(0); +} + +VtlParser::ErCodeContext* VtlParser::ValidationSimpleContext::erCode() { + return getRuleContext(0); +} + +VtlParser::ErLevelContext* VtlParser::ValidationSimpleContext::erLevel() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ValidationSimpleContext::INVALID() { + return getToken(VtlParser::INVALID, 0); +} + +tree::TerminalNode* VtlParser::ValidationSimpleContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + +VtlParser::ValidationSimpleContext::ValidationSimpleContext(ValidationOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::ValidationSimpleContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidationSimple(this); +} +void VtlParser::ValidationSimpleContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidationSimple(this); +} + +std::any VtlParser::ValidationSimpleContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidationSimple(this); + else + return visitor->visitChildren(this); +} +VtlParser::ValidationOperatorsContext* VtlParser::validationOperators() { + ValidationOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 62, VtlParser::RuleValidationOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1185); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::CHECK_DATAPOINT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1124); + match(VtlParser::CHECK_DATAPOINT); + setState(1125); + match(VtlParser::LPAREN); + setState(1126); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(1127); + match(VtlParser::COMMA); + setState(1128); + antlrcpp::downCast(_localctx)->dpName = match(VtlParser::IDENTIFIER); + setState(1138); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMPONENTS) { + setState(1129); + match(VtlParser::COMPONENTS); + setState(1130); + componentID(); + setState(1135); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1131); + match(VtlParser::COMMA); + setState(1132); + componentID(); + setState(1137); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + setState(1141); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ALL + + || _la == VtlParser::INVALID || _la == VtlParser::ALL_MEASURES) { + setState(1140); + validationOutput(); + } + setState(1143); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CHECK_HIERARCHY: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1145); + match(VtlParser::CHECK_HIERARCHY); + setState(1146); + match(VtlParser::LPAREN); + setState(1147); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(1148); + match(VtlParser::COMMA); + setState(1149); + antlrcpp::downCast(_localctx)->hrName = match(VtlParser::IDENTIFIER); + setState(1151); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::CONDITION) { + setState(1150); + conditionClause(); + } + setState(1155); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::RULE) { + setState(1153); + match(VtlParser::RULE); + setState(1154); + componentID(); + } + setState(1158); + _errHandler->sync(this); + + _la = _input->LA(1); + if (((((_la - 225) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 225)) & 63) != 0)) { + setState(1157); + validationMode(); + } + setState(1161); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DATASET || _la == VtlParser::DATASET_PRIORITY) { + setState(1160); + inputMode(); + } + setState(1164); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ALL + + || _la == VtlParser::INVALID || _la == VtlParser::ALL_MEASURES) { + setState(1163); + validationOutput(); + } + setState(1166); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::CHECK: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1168); + match(VtlParser::CHECK); + setState(1169); + match(VtlParser::LPAREN); + setState(1170); + antlrcpp::downCast(_localctx)->op = expr(0); + setState(1172); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORCODE) { + setState(1171); + antlrcpp::downCast(_localctx)->codeErr = erCode(); + } + setState(1175); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORLEVEL) { + setState(1174); + antlrcpp::downCast(_localctx)->levelCode = erLevel(); + } + setState(1178); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::IMBALANCE) { + setState(1177); + imbalanceExpr(); + } + setState(1181); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ALL + + || _la == VtlParser::INVALID) { + setState(1180); + antlrcpp::downCast(_localctx)->output = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL + + || _la == VtlParser::INVALID)) { + antlrcpp::downCast(_localctx)->output = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1183); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ConditionalOperatorsContext ------------------------------------------------------------------ + +VtlParser::ConditionalOperatorsContext::ConditionalOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ConditionalOperatorsContext::getRuleIndex() const { + return VtlParser::RuleConditionalOperators; +} + +void VtlParser::ConditionalOperatorsContext::copyFrom(ConditionalOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- NvlAtomContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::NvlAtomContext::NVL() { + return getToken(VtlParser::NVL, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::NvlAtomContext::expr() { + return getRuleContexts(); +} + +VtlParser::ExprContext* VtlParser::NvlAtomContext::expr(size_t i) { + return getRuleContext(i); +} + +VtlParser::NvlAtomContext::NvlAtomContext(ConditionalOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::NvlAtomContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterNvlAtom(this); +} +void VtlParser::NvlAtomContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitNvlAtom(this); +} + +std::any VtlParser::NvlAtomContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNvlAtom(this); + else + return visitor->visitChildren(this); +} +VtlParser::ConditionalOperatorsContext* VtlParser::conditionalOperators() { + ConditionalOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 64, VtlParser::RuleConditionalOperators); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1187); + match(VtlParser::NVL); + setState(1188); + match(VtlParser::LPAREN); + setState(1189); + antlrcpp::downCast(_localctx)->left = expr(0); + setState(1190); + match(VtlParser::COMMA); + setState(1191); + antlrcpp::downCast(_localctx)->right = expr(0); + setState(1192); + match(VtlParser::RPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ConditionalOperatorsComponentContext ------------------------------------------------------------------ + +VtlParser::ConditionalOperatorsComponentContext::ConditionalOperatorsComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ConditionalOperatorsComponentContext::getRuleIndex() const { + return VtlParser::RuleConditionalOperatorsComponent; +} + +void VtlParser::ConditionalOperatorsComponentContext::copyFrom(ConditionalOperatorsComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- NvlAtomComponentContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::NvlAtomComponentContext::NVL() { + return getToken(VtlParser::NVL, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomComponentContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::NvlAtomComponentContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::NvlAtomComponentContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::NvlAtomComponentContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +VtlParser::NvlAtomComponentContext::NvlAtomComponentContext(ConditionalOperatorsComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::NvlAtomComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterNvlAtomComponent(this); +} +void VtlParser::NvlAtomComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitNvlAtomComponent(this); +} + +std::any VtlParser::NvlAtomComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNvlAtomComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::ConditionalOperatorsComponentContext* VtlParser::conditionalOperatorsComponent() { + ConditionalOperatorsComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 66, VtlParser::RuleConditionalOperatorsComponent); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1194); + match(VtlParser::NVL); + setState(1195); + match(VtlParser::LPAREN); + setState(1196); + antlrcpp::downCast(_localctx)->left = exprComponent(0); + setState(1197); + match(VtlParser::COMMA); + setState(1198); + antlrcpp::downCast(_localctx)->right = exprComponent(0); + setState(1199); + match(VtlParser::RPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AggrOperatorsContext ------------------------------------------------------------------ + +VtlParser::AggrOperatorsContext::AggrOperatorsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::AggrOperatorsContext::getRuleIndex() const { + return VtlParser::RuleAggrOperators; +} + +void VtlParser::AggrOperatorsContext::copyFrom(AggrOperatorsContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- AggrCompContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::AggrCompContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::AggrCompContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::SUM() { + return getToken(VtlParser::SUM, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::AVG() { + return getToken(VtlParser::AVG, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::COUNT() { + return getToken(VtlParser::COUNT, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::MEDIAN() { + return getToken(VtlParser::MEDIAN, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::MIN() { + return getToken(VtlParser::MIN, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::MAX() { + return getToken(VtlParser::MAX, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::STDDEV_POP() { + return getToken(VtlParser::STDDEV_POP, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::STDDEV_SAMP() { + return getToken(VtlParser::STDDEV_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::VAR_POP() { + return getToken(VtlParser::VAR_POP, 0); +} + +tree::TerminalNode* VtlParser::AggrCompContext::VAR_SAMP() { + return getToken(VtlParser::VAR_SAMP, 0); +} + +VtlParser::AggrCompContext::AggrCompContext(AggrOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::AggrCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggrComp(this); +} +void VtlParser::AggrCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggrComp(this); +} + +std::any VtlParser::AggrCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggrComp(this); + else + return visitor->visitChildren(this); +} +//----------------- CountAggrCompContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::CountAggrCompContext::COUNT() { + return getToken(VtlParser::COUNT, 0); +} + +tree::TerminalNode* VtlParser::CountAggrCompContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::CountAggrCompContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::CountAggrCompContext::CountAggrCompContext(AggrOperatorsContext *ctx) { copyFrom(ctx); } + +void VtlParser::CountAggrCompContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCountAggrComp(this); +} +void VtlParser::CountAggrCompContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCountAggrComp(this); +} + +std::any VtlParser::CountAggrCompContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCountAggrComp(this); + else + return visitor->visitChildren(this); +} +VtlParser::AggrOperatorsContext* VtlParser::aggrOperators() { + AggrOperatorsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 68, VtlParser::RuleAggrOperators); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1209); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 101, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1201); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 80) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 80)) & -1152921504598982653) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1202); + match(VtlParser::LPAREN); + setState(1203); + exprComponent(0); + setState(1204); + match(VtlParser::RPAREN); + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1206); + match(VtlParser::COUNT); + setState(1207); + match(VtlParser::LPAREN); + setState(1208); + match(VtlParser::RPAREN); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AggrOperatorsGroupingContext ------------------------------------------------------------------ + +VtlParser::AggrOperatorsGroupingContext::AggrOperatorsGroupingContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::AggrOperatorsGroupingContext::getRuleIndex() const { + return VtlParser::RuleAggrOperatorsGrouping; +} + +void VtlParser::AggrOperatorsGroupingContext::copyFrom(AggrOperatorsGroupingContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- AggrDatasetContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::AggrDatasetContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ExprContext* VtlParser::AggrDatasetContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::SUM() { + return getToken(VtlParser::SUM, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::AVG() { + return getToken(VtlParser::AVG, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::COUNT() { + return getToken(VtlParser::COUNT, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::MEDIAN() { + return getToken(VtlParser::MEDIAN, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::MIN() { + return getToken(VtlParser::MIN, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::MAX() { + return getToken(VtlParser::MAX, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::STDDEV_POP() { + return getToken(VtlParser::STDDEV_POP, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::STDDEV_SAMP() { + return getToken(VtlParser::STDDEV_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::VAR_POP() { + return getToken(VtlParser::VAR_POP, 0); +} + +tree::TerminalNode* VtlParser::AggrDatasetContext::VAR_SAMP() { + return getToken(VtlParser::VAR_SAMP, 0); +} + +VtlParser::GroupingClauseContext* VtlParser::AggrDatasetContext::groupingClause() { + return getRuleContext(0); +} + +VtlParser::HavingClauseContext* VtlParser::AggrDatasetContext::havingClause() { + return getRuleContext(0); +} + +VtlParser::AggrDatasetContext::AggrDatasetContext(AggrOperatorsGroupingContext *ctx) { copyFrom(ctx); } + +void VtlParser::AggrDatasetContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggrDataset(this); +} +void VtlParser::AggrDatasetContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggrDataset(this); +} + +std::any VtlParser::AggrDatasetContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggrDataset(this); + else + return visitor->visitChildren(this); +} +VtlParser::AggrOperatorsGroupingContext* VtlParser::aggrOperatorsGrouping() { + AggrOperatorsGroupingContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 70, VtlParser::RuleAggrOperatorsGrouping); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1211); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 80) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 80)) & -1152921504598982653) != 0))) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1212); + match(VtlParser::LPAREN); + setState(1213); + expr(0); + setState(1218); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GROUP) { + setState(1214); + groupingClause(); + setState(1216); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::HAVING) { + setState(1215); + havingClause(); + } + } + setState(1220); + match(VtlParser::RPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AnFunctionContext ------------------------------------------------------------------ + +VtlParser::AnFunctionContext::AnFunctionContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::AnFunctionContext::getRuleIndex() const { + return VtlParser::RuleAnFunction; +} + +void VtlParser::AnFunctionContext::copyFrom(AnFunctionContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- LagOrLeadAnContext ------------------------------------------------------------------ + +std::vector VtlParser::LagOrLeadAnContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprContext* VtlParser::LagOrLeadAnContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::LagOrLeadAnContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::LAG() { + return getToken(VtlParser::LAG, 0); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::LEAD() { + return getToken(VtlParser::LEAD, 0); +} + +std::vector VtlParser::LagOrLeadAnContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::OrderByClauseContext* VtlParser::LagOrLeadAnContext::orderByClause() { + return getRuleContext(0); +} + +VtlParser::SignedIntegerContext* VtlParser::LagOrLeadAnContext::signedInteger() { + return getRuleContext(0); +} + +VtlParser::PartitionByClauseContext* VtlParser::LagOrLeadAnContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::ScalarItemContext* VtlParser::LagOrLeadAnContext::scalarItem() { + return getRuleContext(0); +} + +VtlParser::LagOrLeadAnContext::LagOrLeadAnContext(AnFunctionContext *ctx) { copyFrom(ctx); } + +void VtlParser::LagOrLeadAnContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterLagOrLeadAn(this); +} +void VtlParser::LagOrLeadAnContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitLagOrLeadAn(this); +} + +std::any VtlParser::LagOrLeadAnContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitLagOrLeadAn(this); + else + return visitor->visitChildren(this); +} +//----------------- RatioToReportAnContext ------------------------------------------------------------------ + +std::vector VtlParser::RatioToReportAnContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::RatioToReportAnContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprContext* VtlParser::RatioToReportAnContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::RatioToReportAnContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::RatioToReportAnContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::RatioToReportAnContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::RatioToReportAnContext::RATIO_TO_REPORT() { + return getToken(VtlParser::RATIO_TO_REPORT, 0); +} + +VtlParser::PartitionByClauseContext* VtlParser::RatioToReportAnContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::RatioToReportAnContext::RatioToReportAnContext(AnFunctionContext *ctx) { copyFrom(ctx); } + +void VtlParser::RatioToReportAnContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRatioToReportAn(this); +} +void VtlParser::RatioToReportAnContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRatioToReportAn(this); +} + +std::any VtlParser::RatioToReportAnContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRatioToReportAn(this); + else + return visitor->visitChildren(this); +} +//----------------- AnSimpleFunctionContext ------------------------------------------------------------------ + +std::vector VtlParser::AnSimpleFunctionContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprContext* VtlParser::AnSimpleFunctionContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::AnSimpleFunctionContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::SUM() { + return getToken(VtlParser::SUM, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::AVG() { + return getToken(VtlParser::AVG, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::COUNT() { + return getToken(VtlParser::COUNT, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::MEDIAN() { + return getToken(VtlParser::MEDIAN, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::MIN() { + return getToken(VtlParser::MIN, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::MAX() { + return getToken(VtlParser::MAX, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::STDDEV_POP() { + return getToken(VtlParser::STDDEV_POP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::STDDEV_SAMP() { + return getToken(VtlParser::STDDEV_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::VAR_POP() { + return getToken(VtlParser::VAR_POP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::VAR_SAMP() { + return getToken(VtlParser::VAR_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::FIRST_VALUE() { + return getToken(VtlParser::FIRST_VALUE, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionContext::LAST_VALUE() { + return getToken(VtlParser::LAST_VALUE, 0); +} + +VtlParser::PartitionByClauseContext* VtlParser::AnSimpleFunctionContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::OrderByClauseContext* VtlParser::AnSimpleFunctionContext::orderByClause() { + return getRuleContext(0); +} + +VtlParser::WindowingClauseContext* VtlParser::AnSimpleFunctionContext::windowingClause() { + return getRuleContext(0); +} + +VtlParser::AnSimpleFunctionContext::AnSimpleFunctionContext(AnFunctionContext *ctx) { copyFrom(ctx); } + +void VtlParser::AnSimpleFunctionContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAnSimpleFunction(this); +} +void VtlParser::AnSimpleFunctionContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAnSimpleFunction(this); +} + +std::any VtlParser::AnSimpleFunctionContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAnSimpleFunction(this); + else + return visitor->visitChildren(this); +} +VtlParser::AnFunctionContext* VtlParser::anFunction() { + AnFunctionContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 72, VtlParser::RuleAnFunction); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1269); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1222); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 80) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 80)) & -1152921504598982653) != 0) || _la == VtlParser::FIRST_VALUE + + || _la == VtlParser::LAST_VALUE)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1223); + match(VtlParser::LPAREN); + setState(1224); + expr(0); + setState(1225); + match(VtlParser::OVER); + setState(1226); + match(VtlParser::LPAREN); + + setState(1228); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PARTITION) { + setState(1227); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + } + setState(1231); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ORDER) { + setState(1230); + antlrcpp::downCast(_localctx)->orderBy = orderByClause(); + } + setState(1234); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DATA + + || _la == VtlParser::RANGE) { + setState(1233); + antlrcpp::downCast(_localctx)->windowing = windowingClause(); + } + setState(1236); + match(VtlParser::RPAREN); + setState(1237); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::LAG: + case VtlParser::LEAD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1239); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::LAG + + || _la == VtlParser::LEAD)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1240); + match(VtlParser::LPAREN); + setState(1241); + expr(0); + setState(1248); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1242); + match(VtlParser::COMMA); + setState(1243); + antlrcpp::downCast(_localctx)->offset = signedInteger(); + setState(1246); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1244); + match(VtlParser::COMMA); + setState(1245); + antlrcpp::downCast(_localctx)->defaultValue = scalarItem(); + } + } + setState(1250); + match(VtlParser::OVER); + setState(1251); + match(VtlParser::LPAREN); + + setState(1253); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PARTITION) { + setState(1252); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + } + setState(1255); + antlrcpp::downCast(_localctx)->orderBy = orderByClause(); + setState(1257); + match(VtlParser::RPAREN); + setState(1258); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::RATIO_TO_REPORT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1260); + antlrcpp::downCast(_localctx)->op = match(VtlParser::RATIO_TO_REPORT); + setState(1261); + match(VtlParser::LPAREN); + setState(1262); + expr(0); + setState(1263); + match(VtlParser::OVER); + setState(1264); + match(VtlParser::LPAREN); + + setState(1265); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + setState(1266); + match(VtlParser::RPAREN); + setState(1267); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AnFunctionComponentContext ------------------------------------------------------------------ + +VtlParser::AnFunctionComponentContext::AnFunctionComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::AnFunctionComponentContext::getRuleIndex() const { + return VtlParser::RuleAnFunctionComponent; +} + +void VtlParser::AnFunctionComponentContext::copyFrom(AnFunctionComponentContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- AnSimpleFunctionComponentContext ------------------------------------------------------------------ + +std::vector VtlParser::AnSimpleFunctionComponentContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprComponentContext* VtlParser::AnSimpleFunctionComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::AnSimpleFunctionComponentContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::SUM() { + return getToken(VtlParser::SUM, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::AVG() { + return getToken(VtlParser::AVG, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::COUNT() { + return getToken(VtlParser::COUNT, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::MEDIAN() { + return getToken(VtlParser::MEDIAN, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::MIN() { + return getToken(VtlParser::MIN, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::MAX() { + return getToken(VtlParser::MAX, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::STDDEV_POP() { + return getToken(VtlParser::STDDEV_POP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::STDDEV_SAMP() { + return getToken(VtlParser::STDDEV_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::VAR_POP() { + return getToken(VtlParser::VAR_POP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::VAR_SAMP() { + return getToken(VtlParser::VAR_SAMP, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::FIRST_VALUE() { + return getToken(VtlParser::FIRST_VALUE, 0); +} + +tree::TerminalNode* VtlParser::AnSimpleFunctionComponentContext::LAST_VALUE() { + return getToken(VtlParser::LAST_VALUE, 0); +} + +VtlParser::PartitionByClauseContext* VtlParser::AnSimpleFunctionComponentContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::OrderByClauseContext* VtlParser::AnSimpleFunctionComponentContext::orderByClause() { + return getRuleContext(0); +} + +VtlParser::WindowingClauseContext* VtlParser::AnSimpleFunctionComponentContext::windowingClause() { + return getRuleContext(0); +} + +VtlParser::AnSimpleFunctionComponentContext::AnSimpleFunctionComponentContext(AnFunctionComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::AnSimpleFunctionComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAnSimpleFunctionComponent(this); +} +void VtlParser::AnSimpleFunctionComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAnSimpleFunctionComponent(this); +} + +std::any VtlParser::AnSimpleFunctionComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAnSimpleFunctionComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- LagOrLeadAnComponentContext ------------------------------------------------------------------ + +std::vector VtlParser::LagOrLeadAnComponentContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprComponentContext* VtlParser::LagOrLeadAnComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::LagOrLeadAnComponentContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::LAG() { + return getToken(VtlParser::LAG, 0); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::LEAD() { + return getToken(VtlParser::LEAD, 0); +} + +tree::TerminalNode* VtlParser::LagOrLeadAnComponentContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +VtlParser::OrderByClauseContext* VtlParser::LagOrLeadAnComponentContext::orderByClause() { + return getRuleContext(0); +} + +VtlParser::SignedIntegerContext* VtlParser::LagOrLeadAnComponentContext::signedInteger() { + return getRuleContext(0); +} + +VtlParser::PartitionByClauseContext* VtlParser::LagOrLeadAnComponentContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::ScalarItemContext* VtlParser::LagOrLeadAnComponentContext::scalarItem() { + return getRuleContext(0); +} + +VtlParser::LagOrLeadAnComponentContext::LagOrLeadAnComponentContext(AnFunctionComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::LagOrLeadAnComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterLagOrLeadAnComponent(this); +} +void VtlParser::LagOrLeadAnComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitLagOrLeadAnComponent(this); +} + +std::any VtlParser::LagOrLeadAnComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitLagOrLeadAnComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- RankAnComponentContext ------------------------------------------------------------------ + +std::vector VtlParser::RankAnComponentContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::RankAnComponentContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +tree::TerminalNode* VtlParser::RankAnComponentContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::RankAnComponentContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::RankAnComponentContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::RankAnComponentContext::RANK() { + return getToken(VtlParser::RANK, 0); +} + +VtlParser::OrderByClauseContext* VtlParser::RankAnComponentContext::orderByClause() { + return getRuleContext(0); +} + +VtlParser::PartitionByClauseContext* VtlParser::RankAnComponentContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::RankAnComponentContext::RankAnComponentContext(AnFunctionComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::RankAnComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRankAnComponent(this); +} +void VtlParser::RankAnComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRankAnComponent(this); +} + +std::any VtlParser::RankAnComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRankAnComponent(this); + else + return visitor->visitChildren(this); +} +//----------------- RatioToReportAnComponentContext ------------------------------------------------------------------ + +std::vector VtlParser::RatioToReportAnComponentContext::LPAREN() { + return getTokens(VtlParser::LPAREN); +} + +tree::TerminalNode* VtlParser::RatioToReportAnComponentContext::LPAREN(size_t i) { + return getToken(VtlParser::LPAREN, i); +} + +VtlParser::ExprComponentContext* VtlParser::RatioToReportAnComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::RatioToReportAnComponentContext::OVER() { + return getToken(VtlParser::OVER, 0); +} + +std::vector VtlParser::RatioToReportAnComponentContext::RPAREN() { + return getTokens(VtlParser::RPAREN); +} + +tree::TerminalNode* VtlParser::RatioToReportAnComponentContext::RPAREN(size_t i) { + return getToken(VtlParser::RPAREN, i); +} + +tree::TerminalNode* VtlParser::RatioToReportAnComponentContext::RATIO_TO_REPORT() { + return getToken(VtlParser::RATIO_TO_REPORT, 0); +} + +VtlParser::PartitionByClauseContext* VtlParser::RatioToReportAnComponentContext::partitionByClause() { + return getRuleContext(0); +} + +VtlParser::RatioToReportAnComponentContext::RatioToReportAnComponentContext(AnFunctionComponentContext *ctx) { copyFrom(ctx); } + +void VtlParser::RatioToReportAnComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRatioToReportAnComponent(this); +} +void VtlParser::RatioToReportAnComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRatioToReportAnComponent(this); +} + +std::any VtlParser::RatioToReportAnComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRatioToReportAnComponent(this); + else + return visitor->visitChildren(this); +} +VtlParser::AnFunctionComponentContext* VtlParser::anFunctionComponent() { + AnFunctionComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 74, VtlParser::RuleAnFunctionComponent); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1329); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1271); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(((((_la - 80) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 80)) & -1152921504598982653) != 0) || _la == VtlParser::FIRST_VALUE + + || _la == VtlParser::LAST_VALUE)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1272); + match(VtlParser::LPAREN); + setState(1273); + exprComponent(0); + setState(1274); + match(VtlParser::OVER); + setState(1275); + match(VtlParser::LPAREN); + + setState(1277); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PARTITION) { + setState(1276); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + } + setState(1280); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ORDER) { + setState(1279); + antlrcpp::downCast(_localctx)->orderBy = orderByClause(); + } + setState(1283); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DATA + + || _la == VtlParser::RANGE) { + setState(1282); + antlrcpp::downCast(_localctx)->windowing = windowingClause(); + } + setState(1285); + match(VtlParser::RPAREN); + setState(1286); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::LAG: + case VtlParser::LEAD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1288); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::LAG + + || _la == VtlParser::LEAD)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1289); + match(VtlParser::LPAREN); + setState(1290); + exprComponent(0); + setState(1296); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1291); + match(VtlParser::COMMA); + setState(1292); + antlrcpp::downCast(_localctx)->offset = signedInteger(); + setState(1294); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 18014398509506560) != 0) || ((((_la - 218) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 218)) & 125829121) != 0)) { + setState(1293); + antlrcpp::downCast(_localctx)->defaultValue = scalarItem(); + } + } + setState(1298); + match(VtlParser::OVER); + setState(1299); + match(VtlParser::LPAREN); + + setState(1301); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PARTITION) { + setState(1300); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + } + setState(1303); + antlrcpp::downCast(_localctx)->orderBy = orderByClause(); + setState(1305); + match(VtlParser::RPAREN); + setState(1306); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::RANK: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1308); + antlrcpp::downCast(_localctx)->op = match(VtlParser::RANK); + setState(1309); + match(VtlParser::LPAREN); + setState(1310); + match(VtlParser::OVER); + setState(1311); + match(VtlParser::LPAREN); + + setState(1313); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PARTITION) { + setState(1312); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + } + setState(1315); + antlrcpp::downCast(_localctx)->orderBy = orderByClause(); + setState(1317); + match(VtlParser::RPAREN); + setState(1318); + match(VtlParser::RPAREN); + break; + } + + case VtlParser::RATIO_TO_REPORT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 4); + setState(1320); + antlrcpp::downCast(_localctx)->op = match(VtlParser::RATIO_TO_REPORT); + setState(1321); + match(VtlParser::LPAREN); + setState(1322); + exprComponent(0); + setState(1323); + match(VtlParser::OVER); + setState(1324); + match(VtlParser::LPAREN); + + setState(1325); + antlrcpp::downCast(_localctx)->partition = partitionByClause(); + setState(1326); + match(VtlParser::RPAREN); + setState(1327); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RenameClauseItemContext ------------------------------------------------------------------ + +VtlParser::RenameClauseItemContext::RenameClauseItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RenameClauseItemContext::TO() { + return getToken(VtlParser::TO, 0); +} + +std::vector VtlParser::RenameClauseItemContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::RenameClauseItemContext::componentID(size_t i) { + return getRuleContext(i); +} + + +size_t VtlParser::RenameClauseItemContext::getRuleIndex() const { + return VtlParser::RuleRenameClauseItem; +} + +void VtlParser::RenameClauseItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRenameClauseItem(this); +} + +void VtlParser::RenameClauseItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRenameClauseItem(this); +} + + +std::any VtlParser::RenameClauseItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRenameClauseItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RenameClauseItemContext* VtlParser::renameClauseItem() { + RenameClauseItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 76, VtlParser::RuleRenameClauseItem); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1331); + antlrcpp::downCast(_localctx)->fromName = componentID(); + setState(1332); + match(VtlParser::TO); + setState(1333); + antlrcpp::downCast(_localctx)->toName = componentID(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AggregateClauseContext ------------------------------------------------------------------ + +VtlParser::AggregateClauseContext::AggregateClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::AggregateClauseContext::aggrFunctionClause() { + return getRuleContexts(); +} + +VtlParser::AggrFunctionClauseContext* VtlParser::AggregateClauseContext::aggrFunctionClause(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::AggregateClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::AggregateClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::AggregateClauseContext::getRuleIndex() const { + return VtlParser::RuleAggregateClause; +} + +void VtlParser::AggregateClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggregateClause(this); +} + +void VtlParser::AggregateClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggregateClause(this); +} + + +std::any VtlParser::AggregateClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggregateClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::AggregateClauseContext* VtlParser::aggregateClause() { + AggregateClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 78, VtlParser::RuleAggregateClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1335); + aggrFunctionClause(); + setState(1340); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1336); + match(VtlParser::COMMA); + setState(1337); + aggrFunctionClause(); + setState(1342); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AggrFunctionClauseContext ------------------------------------------------------------------ + +VtlParser::AggrFunctionClauseContext::AggrFunctionClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentIDContext* VtlParser::AggrFunctionClauseContext::componentID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::AggrFunctionClauseContext::ASSIGN() { + return getToken(VtlParser::ASSIGN, 0); +} + +VtlParser::AggrOperatorsContext* VtlParser::AggrFunctionClauseContext::aggrOperators() { + return getRuleContext(0); +} + +VtlParser::ComponentRoleContext* VtlParser::AggrFunctionClauseContext::componentRole() { + return getRuleContext(0); +} + + +size_t VtlParser::AggrFunctionClauseContext::getRuleIndex() const { + return VtlParser::RuleAggrFunctionClause; +} + +void VtlParser::AggrFunctionClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAggrFunctionClause(this); +} + +void VtlParser::AggrFunctionClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAggrFunctionClause(this); +} + + +std::any VtlParser::AggrFunctionClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAggrFunctionClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::AggrFunctionClauseContext* VtlParser::aggrFunctionClause() { + AggrFunctionClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 80, VtlParser::RuleAggrFunctionClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1344); + _errHandler->sync(this); + + _la = _input->LA(1); + if (((((_la - 103) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 103)) & 135) != 0) || _la == VtlParser::COMPONENT) { + setState(1343); + componentRole(); + } + setState(1346); + componentID(); + setState(1347); + match(VtlParser::ASSIGN); + setState(1348); + aggrOperators(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CalcClauseItemContext ------------------------------------------------------------------ + +VtlParser::CalcClauseItemContext::CalcClauseItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentIDContext* VtlParser::CalcClauseItemContext::componentID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CalcClauseItemContext::ASSIGN() { + return getToken(VtlParser::ASSIGN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::CalcClauseItemContext::exprComponent() { + return getRuleContext(0); +} + +VtlParser::ComponentRoleContext* VtlParser::CalcClauseItemContext::componentRole() { + return getRuleContext(0); +} + + +size_t VtlParser::CalcClauseItemContext::getRuleIndex() const { + return VtlParser::RuleCalcClauseItem; +} + +void VtlParser::CalcClauseItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCalcClauseItem(this); +} + +void VtlParser::CalcClauseItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCalcClauseItem(this); +} + + +std::any VtlParser::CalcClauseItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCalcClauseItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CalcClauseItemContext* VtlParser::calcClauseItem() { + CalcClauseItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 82, VtlParser::RuleCalcClauseItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1351); + _errHandler->sync(this); + + _la = _input->LA(1); + if (((((_la - 103) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 103)) & 135) != 0) || _la == VtlParser::COMPONENT) { + setState(1350); + componentRole(); + } + setState(1353); + componentID(); + setState(1354); + match(VtlParser::ASSIGN); + setState(1355); + exprComponent(0); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SubspaceClauseItemContext ------------------------------------------------------------------ + +VtlParser::SubspaceClauseItemContext::SubspaceClauseItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentIDContext* VtlParser::SubspaceClauseItemContext::componentID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::SubspaceClauseItemContext::EQ() { + return getToken(VtlParser::EQ, 0); +} + +VtlParser::ScalarItemContext* VtlParser::SubspaceClauseItemContext::scalarItem() { + return getRuleContext(0); +} + + +size_t VtlParser::SubspaceClauseItemContext::getRuleIndex() const { + return VtlParser::RuleSubspaceClauseItem; +} + +void VtlParser::SubspaceClauseItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSubspaceClauseItem(this); +} + +void VtlParser::SubspaceClauseItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSubspaceClauseItem(this); +} + + +std::any VtlParser::SubspaceClauseItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSubspaceClauseItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SubspaceClauseItemContext* VtlParser::subspaceClauseItem() { + SubspaceClauseItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 84, VtlParser::RuleSubspaceClauseItem); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1357); + componentID(); + setState(1358); + match(VtlParser::EQ); + setState(1359); + scalarItem(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ScalarItemContext ------------------------------------------------------------------ + +VtlParser::ScalarItemContext::ScalarItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ScalarItemContext::getRuleIndex() const { + return VtlParser::RuleScalarItem; +} + +void VtlParser::ScalarItemContext::copyFrom(ScalarItemContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- ScalarWithCastContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ScalarWithCastContext::CAST() { + return getToken(VtlParser::CAST, 0); +} + +tree::TerminalNode* VtlParser::ScalarWithCastContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +VtlParser::ConstantContext* VtlParser::ScalarWithCastContext::constant() { + return getRuleContext(0); +} + +std::vector VtlParser::ScalarWithCastContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ScalarWithCastContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::ScalarWithCastContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +VtlParser::BasicScalarTypeContext* VtlParser::ScalarWithCastContext::basicScalarType() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ScalarWithCastContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +VtlParser::ScalarWithCastContext::ScalarWithCastContext(ScalarItemContext *ctx) { copyFrom(ctx); } + +void VtlParser::ScalarWithCastContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterScalarWithCast(this); +} +void VtlParser::ScalarWithCastContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitScalarWithCast(this); +} + +std::any VtlParser::ScalarWithCastContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitScalarWithCast(this); + else + return visitor->visitChildren(this); +} +//----------------- SimpleScalarContext ------------------------------------------------------------------ + +VtlParser::ConstantContext* VtlParser::SimpleScalarContext::constant() { + return getRuleContext(0); +} + +VtlParser::SimpleScalarContext::SimpleScalarContext(ScalarItemContext *ctx) { copyFrom(ctx); } + +void VtlParser::SimpleScalarContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSimpleScalar(this); +} +void VtlParser::SimpleScalarContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSimpleScalar(this); +} + +std::any VtlParser::SimpleScalarContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSimpleScalar(this); + else + return visitor->visitChildren(this); +} +VtlParser::ScalarItemContext* VtlParser::scalarItem() { + ScalarItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 86, VtlParser::RuleScalarItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1373); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::NULL_CONSTANT: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1361); + constant(); + break; + } + + case VtlParser::CAST: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1362); + match(VtlParser::CAST); + setState(1363); + match(VtlParser::LPAREN); + setState(1364); + constant(); + setState(1365); + match(VtlParser::COMMA); + + setState(1366); + basicScalarType(); + setState(1369); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1367); + match(VtlParser::COMMA); + setState(1368); + match(VtlParser::STRING_CONSTANT); + } + setState(1371); + match(VtlParser::RPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinClauseWithoutUsingContext ------------------------------------------------------------------ + +VtlParser::JoinClauseWithoutUsingContext::JoinClauseWithoutUsingContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::JoinClauseWithoutUsingContext::joinClauseItem() { + return getRuleContexts(); +} + +VtlParser::JoinClauseItemContext* VtlParser::JoinClauseWithoutUsingContext::joinClauseItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::JoinClauseWithoutUsingContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::JoinClauseWithoutUsingContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::JoinClauseWithoutUsingContext::getRuleIndex() const { + return VtlParser::RuleJoinClauseWithoutUsing; +} + +void VtlParser::JoinClauseWithoutUsingContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinClauseWithoutUsing(this); +} + +void VtlParser::JoinClauseWithoutUsingContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinClauseWithoutUsing(this); +} + + +std::any VtlParser::JoinClauseWithoutUsingContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinClauseWithoutUsing(this); + else + return visitor->visitChildren(this); +} + +VtlParser::JoinClauseWithoutUsingContext* VtlParser::joinClauseWithoutUsing() { + JoinClauseWithoutUsingContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 88, VtlParser::RuleJoinClauseWithoutUsing); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1375); + joinClauseItem(); + setState(1380); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1376); + match(VtlParser::COMMA); + setState(1377); + joinClauseItem(); + setState(1382); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinClauseContext ------------------------------------------------------------------ + +VtlParser::JoinClauseContext::JoinClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::JoinClauseContext::joinClauseItem() { + return getRuleContexts(); +} + +VtlParser::JoinClauseItemContext* VtlParser::JoinClauseContext::joinClauseItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::JoinClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::JoinClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::JoinClauseContext::USING() { + return getToken(VtlParser::USING, 0); +} + +std::vector VtlParser::JoinClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::JoinClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + + +size_t VtlParser::JoinClauseContext::getRuleIndex() const { + return VtlParser::RuleJoinClause; +} + +void VtlParser::JoinClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinClause(this); +} + +void VtlParser::JoinClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinClause(this); +} + + +std::any VtlParser::JoinClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::JoinClauseContext* VtlParser::joinClause() { + JoinClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 90, VtlParser::RuleJoinClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1383); + joinClauseItem(); + setState(1388); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1384); + match(VtlParser::COMMA); + setState(1385); + joinClauseItem(); + setState(1390); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1400); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::USING) { + setState(1391); + match(VtlParser::USING); + setState(1392); + componentID(); + setState(1397); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1393); + match(VtlParser::COMMA); + setState(1394); + componentID(); + setState(1399); + _errHandler->sync(this); + _la = _input->LA(1); + } + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinClauseItemContext ------------------------------------------------------------------ + +VtlParser::JoinClauseItemContext::JoinClauseItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ExprContext* VtlParser::JoinClauseItemContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::JoinClauseItemContext::AS() { + return getToken(VtlParser::AS, 0); +} + +VtlParser::AliasContext* VtlParser::JoinClauseItemContext::alias() { + return getRuleContext(0); +} + + +size_t VtlParser::JoinClauseItemContext::getRuleIndex() const { + return VtlParser::RuleJoinClauseItem; +} + +void VtlParser::JoinClauseItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinClauseItem(this); +} + +void VtlParser::JoinClauseItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinClauseItem(this); +} + + +std::any VtlParser::JoinClauseItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinClauseItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::JoinClauseItemContext* VtlParser::joinClauseItem() { + JoinClauseItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 92, VtlParser::RuleJoinClauseItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1402); + expr(0); + setState(1405); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::AS) { + setState(1403); + match(VtlParser::AS); + setState(1404); + alias(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinBodyContext ------------------------------------------------------------------ + +VtlParser::JoinBodyContext::JoinBodyContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::FilterClauseContext* VtlParser::JoinBodyContext::filterClause() { + return getRuleContext(0); +} + +VtlParser::CalcClauseContext* VtlParser::JoinBodyContext::calcClause() { + return getRuleContext(0); +} + +VtlParser::JoinApplyClauseContext* VtlParser::JoinBodyContext::joinApplyClause() { + return getRuleContext(0); +} + +VtlParser::AggrClauseContext* VtlParser::JoinBodyContext::aggrClause() { + return getRuleContext(0); +} + +VtlParser::KeepOrDropClauseContext* VtlParser::JoinBodyContext::keepOrDropClause() { + return getRuleContext(0); +} + +VtlParser::RenameClauseContext* VtlParser::JoinBodyContext::renameClause() { + return getRuleContext(0); +} + + +size_t VtlParser::JoinBodyContext::getRuleIndex() const { + return VtlParser::RuleJoinBody; +} + +void VtlParser::JoinBodyContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinBody(this); +} + +void VtlParser::JoinBodyContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinBody(this); +} + + +std::any VtlParser::JoinBodyContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinBody(this); + else + return visitor->visitChildren(this); +} + +VtlParser::JoinBodyContext* VtlParser::joinBody() { + JoinBodyContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 94, VtlParser::RuleJoinBody); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1408); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::FILTER) { + setState(1407); + filterClause(); + } + setState(1413); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::CALC: { + setState(1410); + calcClause(); + break; + } + + case VtlParser::APPLY: { + setState(1411); + joinApplyClause(); + break; + } + + case VtlParser::AGGREGATE: { + setState(1412); + aggrClause(); + break; + } + + case VtlParser::RPAREN: + case VtlParser::DROP: + case VtlParser::KEEP: + case VtlParser::RENAME: { + break; + } + + default: + break; + } + setState(1416); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DROP + + || _la == VtlParser::KEEP) { + setState(1415); + keepOrDropClause(); + } + setState(1419); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::RENAME) { + setState(1418); + renameClause(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- JoinApplyClauseContext ------------------------------------------------------------------ + +VtlParser::JoinApplyClauseContext::JoinApplyClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::JoinApplyClauseContext::APPLY() { + return getToken(VtlParser::APPLY, 0); +} + +VtlParser::ExprContext* VtlParser::JoinApplyClauseContext::expr() { + return getRuleContext(0); +} + + +size_t VtlParser::JoinApplyClauseContext::getRuleIndex() const { + return VtlParser::RuleJoinApplyClause; +} + +void VtlParser::JoinApplyClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterJoinApplyClause(this); +} + +void VtlParser::JoinApplyClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitJoinApplyClause(this); +} + + +std::any VtlParser::JoinApplyClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitJoinApplyClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::JoinApplyClauseContext* VtlParser::joinApplyClause() { + JoinApplyClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 96, VtlParser::RuleJoinApplyClause); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1421); + match(VtlParser::APPLY); + setState(1422); + expr(0); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- PartitionByClauseContext ------------------------------------------------------------------ + +VtlParser::PartitionByClauseContext::PartitionByClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::PartitionByClauseContext::PARTITION() { + return getToken(VtlParser::PARTITION, 0); +} + +tree::TerminalNode* VtlParser::PartitionByClauseContext::BY() { + return getToken(VtlParser::BY, 0); +} + +std::vector VtlParser::PartitionByClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::PartitionByClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::PartitionByClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::PartitionByClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::PartitionByClauseContext::getRuleIndex() const { + return VtlParser::RulePartitionByClause; +} + +void VtlParser::PartitionByClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterPartitionByClause(this); +} + +void VtlParser::PartitionByClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitPartitionByClause(this); +} + + +std::any VtlParser::PartitionByClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPartitionByClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::PartitionByClauseContext* VtlParser::partitionByClause() { + PartitionByClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 98, VtlParser::RulePartitionByClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1424); + match(VtlParser::PARTITION); + setState(1425); + match(VtlParser::BY); + setState(1426); + componentID(); + setState(1431); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1427); + match(VtlParser::COMMA); + setState(1428); + componentID(); + setState(1433); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OrderByClauseContext ------------------------------------------------------------------ + +VtlParser::OrderByClauseContext::OrderByClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::OrderByClauseContext::ORDER() { + return getToken(VtlParser::ORDER, 0); +} + +tree::TerminalNode* VtlParser::OrderByClauseContext::BY() { + return getToken(VtlParser::BY, 0); +} + +std::vector VtlParser::OrderByClauseContext::orderByItem() { + return getRuleContexts(); +} + +VtlParser::OrderByItemContext* VtlParser::OrderByClauseContext::orderByItem(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::OrderByClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::OrderByClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::OrderByClauseContext::getRuleIndex() const { + return VtlParser::RuleOrderByClause; +} + +void VtlParser::OrderByClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOrderByClause(this); +} + +void VtlParser::OrderByClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOrderByClause(this); +} + + +std::any VtlParser::OrderByClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOrderByClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OrderByClauseContext* VtlParser::orderByClause() { + OrderByClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 100, VtlParser::RuleOrderByClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1434); + match(VtlParser::ORDER); + setState(1435); + match(VtlParser::BY); + setState(1436); + orderByItem(); + setState(1441); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1437); + match(VtlParser::COMMA); + setState(1438); + orderByItem(); + setState(1443); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OrderByItemContext ------------------------------------------------------------------ + +VtlParser::OrderByItemContext::OrderByItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentIDContext* VtlParser::OrderByItemContext::componentID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::OrderByItemContext::ASC() { + return getToken(VtlParser::ASC, 0); +} + +tree::TerminalNode* VtlParser::OrderByItemContext::DESC() { + return getToken(VtlParser::DESC, 0); +} + + +size_t VtlParser::OrderByItemContext::getRuleIndex() const { + return VtlParser::RuleOrderByItem; +} + +void VtlParser::OrderByItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOrderByItem(this); +} + +void VtlParser::OrderByItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOrderByItem(this); +} + + +std::any VtlParser::OrderByItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOrderByItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OrderByItemContext* VtlParser::orderByItem() { + OrderByItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 102, VtlParser::RuleOrderByItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1444); + componentID(); + setState(1446); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ASC + + || _la == VtlParser::DESC) { + setState(1445); + _la = _input->LA(1); + if (!(_la == VtlParser::ASC + + || _la == VtlParser::DESC)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- WindowingClauseContext ------------------------------------------------------------------ + +VtlParser::WindowingClauseContext::WindowingClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::WindowingClauseContext::BETWEEN() { + return getToken(VtlParser::BETWEEN, 0); +} + +tree::TerminalNode* VtlParser::WindowingClauseContext::AND() { + return getToken(VtlParser::AND, 0); +} + +std::vector VtlParser::WindowingClauseContext::limitClauseItem() { + return getRuleContexts(); +} + +VtlParser::LimitClauseItemContext* VtlParser::WindowingClauseContext::limitClauseItem(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::WindowingClauseContext::RANGE() { + return getToken(VtlParser::RANGE, 0); +} + +tree::TerminalNode* VtlParser::WindowingClauseContext::DATA() { + return getToken(VtlParser::DATA, 0); +} + +tree::TerminalNode* VtlParser::WindowingClauseContext::POINTS() { + return getToken(VtlParser::POINTS, 0); +} + + +size_t VtlParser::WindowingClauseContext::getRuleIndex() const { + return VtlParser::RuleWindowingClause; +} + +void VtlParser::WindowingClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterWindowingClause(this); +} + +void VtlParser::WindowingClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitWindowingClause(this); +} + + +std::any VtlParser::WindowingClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitWindowingClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::WindowingClauseContext* VtlParser::windowingClause() { + WindowingClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 104, VtlParser::RuleWindowingClause); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1451); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::DATA: { + setState(1448); + match(VtlParser::DATA); + setState(1449); + match(VtlParser::POINTS); + break; + } + + case VtlParser::RANGE: { + setState(1450); + match(VtlParser::RANGE); + break; + } + + default: + throw NoViableAltException(this); + } + setState(1453); + match(VtlParser::BETWEEN); + setState(1454); + antlrcpp::downCast(_localctx)->from_ = limitClauseItem(); + setState(1455); + match(VtlParser::AND); + setState(1456); + antlrcpp::downCast(_localctx)->to_ = limitClauseItem(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SignedIntegerContext ------------------------------------------------------------------ + +VtlParser::SignedIntegerContext::SignedIntegerContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::SignedIntegerContext::INTEGER_CONSTANT() { + return getToken(VtlParser::INTEGER_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::SignedIntegerContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::SignedIntegerContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + + +size_t VtlParser::SignedIntegerContext::getRuleIndex() const { + return VtlParser::RuleSignedInteger; +} + +void VtlParser::SignedIntegerContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSignedInteger(this); +} + +void VtlParser::SignedIntegerContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSignedInteger(this); +} + + +std::any VtlParser::SignedIntegerContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSignedInteger(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SignedIntegerContext* VtlParser::signedInteger() { + SignedIntegerContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 106, VtlParser::RuleSignedInteger); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1459); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PLUS + + || _la == VtlParser::MINUS) { + setState(1458); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MINUS)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1461); + match(VtlParser::INTEGER_CONSTANT); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SignedNumberContext ------------------------------------------------------------------ + +VtlParser::SignedNumberContext::SignedNumberContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::SignedNumberContext::NUMBER_CONSTANT() { + return getToken(VtlParser::NUMBER_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::SignedNumberContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + +tree::TerminalNode* VtlParser::SignedNumberContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + + +size_t VtlParser::SignedNumberContext::getRuleIndex() const { + return VtlParser::RuleSignedNumber; +} + +void VtlParser::SignedNumberContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSignedNumber(this); +} + +void VtlParser::SignedNumberContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSignedNumber(this); +} + + +std::any VtlParser::SignedNumberContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSignedNumber(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SignedNumberContext* VtlParser::signedNumber() { + SignedNumberContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 108, VtlParser::RuleSignedNumber); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1464); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PLUS + + || _la == VtlParser::MINUS) { + setState(1463); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MINUS)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1466); + match(VtlParser::NUMBER_CONSTANT); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- LimitClauseItemContext ------------------------------------------------------------------ + +VtlParser::LimitClauseItemContext::LimitClauseItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::SignedIntegerContext* VtlParser::LimitClauseItemContext::signedInteger() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::PRECEDING() { + return getToken(VtlParser::PRECEDING, 0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::FOLLOWING() { + return getToken(VtlParser::FOLLOWING, 0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::CURRENT() { + return getToken(VtlParser::CURRENT, 0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::DATA() { + return getToken(VtlParser::DATA, 0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::POINT() { + return getToken(VtlParser::POINT, 0); +} + +tree::TerminalNode* VtlParser::LimitClauseItemContext::UNBOUNDED() { + return getToken(VtlParser::UNBOUNDED, 0); +} + + +size_t VtlParser::LimitClauseItemContext::getRuleIndex() const { + return VtlParser::RuleLimitClauseItem; +} + +void VtlParser::LimitClauseItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterLimitClauseItem(this); +} + +void VtlParser::LimitClauseItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitLimitClauseItem(this); +} + + +std::any VtlParser::LimitClauseItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitLimitClauseItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::LimitClauseItemContext* VtlParser::limitClauseItem() { + LimitClauseItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 110, VtlParser::RuleLimitClauseItem); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1481); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 139, _ctx)) { + case 1: { + enterOuterAlt(_localctx, 1); + setState(1468); + signedInteger(); + setState(1469); + antlrcpp::downCast(_localctx)->limitDir = match(VtlParser::PRECEDING); + break; + } + + case 2: { + enterOuterAlt(_localctx, 2); + setState(1471); + signedInteger(); + setState(1472); + antlrcpp::downCast(_localctx)->limitDir = match(VtlParser::FOLLOWING); + break; + } + + case 3: { + enterOuterAlt(_localctx, 3); + setState(1474); + match(VtlParser::CURRENT); + setState(1475); + match(VtlParser::DATA); + setState(1476); + match(VtlParser::POINT); + break; + } + + case 4: { + enterOuterAlt(_localctx, 4); + setState(1477); + match(VtlParser::UNBOUNDED); + setState(1478); + antlrcpp::downCast(_localctx)->limitDir = match(VtlParser::PRECEDING); + break; + } + + case 5: { + enterOuterAlt(_localctx, 5); + setState(1479); + match(VtlParser::UNBOUNDED); + setState(1480); + antlrcpp::downCast(_localctx)->limitDir = match(VtlParser::FOLLOWING); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- GroupingClauseContext ------------------------------------------------------------------ + +VtlParser::GroupingClauseContext::GroupingClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::GroupingClauseContext::getRuleIndex() const { + return VtlParser::RuleGroupingClause; +} + +void VtlParser::GroupingClauseContext::copyFrom(GroupingClauseContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- GroupAllContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::GroupAllContext::GROUP() { + return getToken(VtlParser::GROUP, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::TIME_AGG() { + return getToken(VtlParser::TIME_AGG, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::COMMA() { + return getToken(VtlParser::COMMA, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::FIRST() { + return getToken(VtlParser::FIRST, 0); +} + +tree::TerminalNode* VtlParser::GroupAllContext::LAST() { + return getToken(VtlParser::LAST, 0); +} + +VtlParser::GroupAllContext::GroupAllContext(GroupingClauseContext *ctx) { copyFrom(ctx); } + +void VtlParser::GroupAllContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterGroupAll(this); +} +void VtlParser::GroupAllContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitGroupAll(this); +} + +std::any VtlParser::GroupAllContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitGroupAll(this); + else + return visitor->visitChildren(this); +} +//----------------- GroupByOrExceptContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::GROUP() { + return getToken(VtlParser::GROUP, 0); +} + +std::vector VtlParser::GroupByOrExceptContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::GroupByOrExceptContext::componentID(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::BY() { + return getToken(VtlParser::BY, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::EXCEPT() { + return getToken(VtlParser::EXCEPT, 0); +} + +std::vector VtlParser::GroupByOrExceptContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::TIME_AGG() { + return getToken(VtlParser::TIME_AGG, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::FIRST() { + return getToken(VtlParser::FIRST, 0); +} + +tree::TerminalNode* VtlParser::GroupByOrExceptContext::LAST() { + return getToken(VtlParser::LAST, 0); +} + +VtlParser::GroupByOrExceptContext::GroupByOrExceptContext(GroupingClauseContext *ctx) { copyFrom(ctx); } + +void VtlParser::GroupByOrExceptContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterGroupByOrExcept(this); +} +void VtlParser::GroupByOrExceptContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitGroupByOrExcept(this); +} + +std::any VtlParser::GroupByOrExceptContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitGroupByOrExcept(this); + else + return visitor->visitChildren(this); +} +VtlParser::GroupingClauseContext* VtlParser::groupingClause() { + GroupingClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 112, VtlParser::RuleGroupingClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1515); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 145, _ctx)) { + case 1: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1483); + match(VtlParser::GROUP); + setState(1484); + antlrcpp::downCast(_localctx)->op = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::BY || _la == VtlParser::EXCEPT)) { + antlrcpp::downCast(_localctx)->op = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1485); + componentID(); + setState(1490); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1486); + match(VtlParser::COMMA); + setState(1487); + componentID(); + setState(1492); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1501); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::TIME_AGG) { + setState(1493); + match(VtlParser::TIME_AGG); + setState(1494); + match(VtlParser::LPAREN); + setState(1495); + match(VtlParser::STRING_CONSTANT); + setState(1498); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1496); + match(VtlParser::COMMA); + setState(1497); + antlrcpp::downCast(_localctx)->delim = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FIRST + + || _la == VtlParser::LAST)) { + antlrcpp::downCast(_localctx)->delim = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1500); + match(VtlParser::RPAREN); + } + break; + } + + case 2: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1503); + match(VtlParser::GROUP); + setState(1504); + match(VtlParser::ALL); + setState(1513); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::TIME_AGG) { + setState(1505); + match(VtlParser::TIME_AGG); + setState(1506); + match(VtlParser::LPAREN); + setState(1507); + match(VtlParser::STRING_CONSTANT); + setState(1510); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::COMMA) { + setState(1508); + match(VtlParser::COMMA); + setState(1509); + antlrcpp::downCast(_localctx)->delim = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::FIRST + + || _la == VtlParser::LAST)) { + antlrcpp::downCast(_localctx)->delim = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + setState(1512); + match(VtlParser::RPAREN); + } + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- HavingClauseContext ------------------------------------------------------------------ + +VtlParser::HavingClauseContext::HavingClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::HavingClauseContext::HAVING() { + return getToken(VtlParser::HAVING, 0); +} + +VtlParser::ExprComponentContext* VtlParser::HavingClauseContext::exprComponent() { + return getRuleContext(0); +} + + +size_t VtlParser::HavingClauseContext::getRuleIndex() const { + return VtlParser::RuleHavingClause; +} + +void VtlParser::HavingClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHavingClause(this); +} + +void VtlParser::HavingClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHavingClause(this); +} + + +std::any VtlParser::HavingClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHavingClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::HavingClauseContext* VtlParser::havingClause() { + HavingClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 114, VtlParser::RuleHavingClause); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1517); + match(VtlParser::HAVING); + setState(1518); + exprComponent(0); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ParameterItemContext ------------------------------------------------------------------ + +VtlParser::ParameterItemContext::ParameterItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::VarIDContext* VtlParser::ParameterItemContext::varID() { + return getRuleContext(0); +} + +VtlParser::InputParameterTypeContext* VtlParser::ParameterItemContext::inputParameterType() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ParameterItemContext::DEFAULT() { + return getToken(VtlParser::DEFAULT, 0); +} + +VtlParser::ScalarItemContext* VtlParser::ParameterItemContext::scalarItem() { + return getRuleContext(0); +} + + +size_t VtlParser::ParameterItemContext::getRuleIndex() const { + return VtlParser::RuleParameterItem; +} + +void VtlParser::ParameterItemContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterParameterItem(this); +} + +void VtlParser::ParameterItemContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitParameterItem(this); +} + + +std::any VtlParser::ParameterItemContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitParameterItem(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ParameterItemContext* VtlParser::parameterItem() { + ParameterItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 116, VtlParser::RuleParameterItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1520); + varID(); + setState(1521); + inputParameterType(); + setState(1524); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::DEFAULT) { + setState(1522); + match(VtlParser::DEFAULT); + setState(1523); + scalarItem(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OutputParameterTypeContext ------------------------------------------------------------------ + +VtlParser::OutputParameterTypeContext::OutputParameterTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ScalarTypeContext* VtlParser::OutputParameterTypeContext::scalarType() { + return getRuleContext(0); +} + +VtlParser::DatasetTypeContext* VtlParser::OutputParameterTypeContext::datasetType() { + return getRuleContext(0); +} + +VtlParser::ComponentTypeContext* VtlParser::OutputParameterTypeContext::componentType() { + return getRuleContext(0); +} + + +size_t VtlParser::OutputParameterTypeContext::getRuleIndex() const { + return VtlParser::RuleOutputParameterType; +} + +void VtlParser::OutputParameterTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOutputParameterType(this); +} + +void VtlParser::OutputParameterTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOutputParameterType(this); +} + + +std::any VtlParser::OutputParameterTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOutputParameterType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OutputParameterTypeContext* VtlParser::outputParameterType() { + OutputParameterTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 118, VtlParser::RuleOutputParameterType); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1529); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(1526); + scalarType(); + break; + } + + case VtlParser::DATASET: { + enterOuterAlt(_localctx, 2); + setState(1527); + datasetType(); + break; + } + + case VtlParser::DIMENSION: + case VtlParser::MEASURE: + case VtlParser::ATTRIBUTE: + case VtlParser::VIRAL: + case VtlParser::COMPONENT: { + enterOuterAlt(_localctx, 3); + setState(1528); + componentType(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OutputParameterTypeComponentContext ------------------------------------------------------------------ + +VtlParser::OutputParameterTypeComponentContext::OutputParameterTypeComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentTypeContext* VtlParser::OutputParameterTypeComponentContext::componentType() { + return getRuleContext(0); +} + +VtlParser::ScalarTypeContext* VtlParser::OutputParameterTypeComponentContext::scalarType() { + return getRuleContext(0); +} + + +size_t VtlParser::OutputParameterTypeComponentContext::getRuleIndex() const { + return VtlParser::RuleOutputParameterTypeComponent; +} + +void VtlParser::OutputParameterTypeComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOutputParameterTypeComponent(this); +} + +void VtlParser::OutputParameterTypeComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOutputParameterTypeComponent(this); +} + + +std::any VtlParser::OutputParameterTypeComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOutputParameterTypeComponent(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OutputParameterTypeComponentContext* VtlParser::outputParameterTypeComponent() { + OutputParameterTypeComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 120, VtlParser::RuleOutputParameterTypeComponent); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1533); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::DIMENSION: + case VtlParser::MEASURE: + case VtlParser::ATTRIBUTE: + case VtlParser::VIRAL: + case VtlParser::COMPONENT: { + enterOuterAlt(_localctx, 1); + setState(1531); + componentType(); + break; + } + + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 2); + setState(1532); + scalarType(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- InputParameterTypeContext ------------------------------------------------------------------ + +VtlParser::InputParameterTypeContext::InputParameterTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ScalarTypeContext* VtlParser::InputParameterTypeContext::scalarType() { + return getRuleContext(0); +} + +VtlParser::DatasetTypeContext* VtlParser::InputParameterTypeContext::datasetType() { + return getRuleContext(0); +} + +VtlParser::ScalarSetTypeContext* VtlParser::InputParameterTypeContext::scalarSetType() { + return getRuleContext(0); +} + +VtlParser::RulesetTypeContext* VtlParser::InputParameterTypeContext::rulesetType() { + return getRuleContext(0); +} + +VtlParser::ComponentTypeContext* VtlParser::InputParameterTypeContext::componentType() { + return getRuleContext(0); +} + + +size_t VtlParser::InputParameterTypeContext::getRuleIndex() const { + return VtlParser::RuleInputParameterType; +} + +void VtlParser::InputParameterTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInputParameterType(this); +} + +void VtlParser::InputParameterTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInputParameterType(this); +} + + +std::any VtlParser::InputParameterTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInputParameterType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::InputParameterTypeContext* VtlParser::inputParameterType() { + InputParameterTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 122, VtlParser::RuleInputParameterType); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1540); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(1535); + scalarType(); + break; + } + + case VtlParser::DATASET: { + enterOuterAlt(_localctx, 2); + setState(1536); + datasetType(); + break; + } + + case VtlParser::SET: { + enterOuterAlt(_localctx, 3); + setState(1537); + scalarSetType(); + break; + } + + case VtlParser::DATAPOINT: + case VtlParser::HIERARCHICAL: + case VtlParser::RULESET: + case VtlParser::DATAPOINT_ON_VD: + case VtlParser::DATAPOINT_ON_VAR: + case VtlParser::HIERARCHICAL_ON_VD: + case VtlParser::HIERARCHICAL_ON_VAR: { + enterOuterAlt(_localctx, 4); + setState(1538); + rulesetType(); + break; + } + + case VtlParser::DIMENSION: + case VtlParser::MEASURE: + case VtlParser::ATTRIBUTE: + case VtlParser::VIRAL: + case VtlParser::COMPONENT: { + enterOuterAlt(_localctx, 5); + setState(1539); + componentType(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RulesetTypeContext ------------------------------------------------------------------ + +VtlParser::RulesetTypeContext::RulesetTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RulesetTypeContext::RULESET() { + return getToken(VtlParser::RULESET, 0); +} + +VtlParser::DpRulesetContext* VtlParser::RulesetTypeContext::dpRuleset() { + return getRuleContext(0); +} + +VtlParser::HrRulesetContext* VtlParser::RulesetTypeContext::hrRuleset() { + return getRuleContext(0); +} + + +size_t VtlParser::RulesetTypeContext::getRuleIndex() const { + return VtlParser::RuleRulesetType; +} + +void VtlParser::RulesetTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRulesetType(this); +} + +void VtlParser::RulesetTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRulesetType(this); +} + + +std::any VtlParser::RulesetTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRulesetType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RulesetTypeContext* VtlParser::rulesetType() { + RulesetTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 124, VtlParser::RuleRulesetType); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1545); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::RULESET: { + enterOuterAlt(_localctx, 1); + setState(1542); + match(VtlParser::RULESET); + break; + } + + case VtlParser::DATAPOINT: + case VtlParser::DATAPOINT_ON_VD: + case VtlParser::DATAPOINT_ON_VAR: { + enterOuterAlt(_localctx, 2); + setState(1543); + dpRuleset(); + break; + } + + case VtlParser::HIERARCHICAL: + case VtlParser::HIERARCHICAL_ON_VD: + case VtlParser::HIERARCHICAL_ON_VAR: { + enterOuterAlt(_localctx, 3); + setState(1544); + hrRuleset(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ScalarTypeContext ------------------------------------------------------------------ + +VtlParser::ScalarTypeContext::ScalarTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::BasicScalarTypeContext* VtlParser::ScalarTypeContext::basicScalarType() { + return getRuleContext(0); +} + +VtlParser::ValueDomainNameContext* VtlParser::ScalarTypeContext::valueDomainName() { + return getRuleContext(0); +} + +VtlParser::ScalarTypeConstraintContext* VtlParser::ScalarTypeContext::scalarTypeConstraint() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ScalarTypeContext::NULL_CONSTANT() { + return getToken(VtlParser::NULL_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::ScalarTypeContext::NOT() { + return getToken(VtlParser::NOT, 0); +} + + +size_t VtlParser::ScalarTypeContext::getRuleIndex() const { + return VtlParser::RuleScalarType; +} + +void VtlParser::ScalarTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterScalarType(this); +} + +void VtlParser::ScalarTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitScalarType(this); +} + + +std::any VtlParser::ScalarTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitScalarType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ScalarTypeContext* VtlParser::scalarType() { + ScalarTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 126, VtlParser::RuleScalarType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1549); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: { + setState(1547); + basicScalarType(); + break; + } + + case VtlParser::IDENTIFIER: { + setState(1548); + valueDomainName(); + break; + } + + default: + throw NoViableAltException(this); + } + setState(1552); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::QLPAREN + + || _la == VtlParser::GLPAREN) { + setState(1551); + scalarTypeConstraint(); + } + setState(1558); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::NOT + + || _la == VtlParser::NULL_CONSTANT) { + setState(1555); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::NOT) { + setState(1554); + match(VtlParser::NOT); + } + setState(1557); + match(VtlParser::NULL_CONSTANT); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComponentTypeContext ------------------------------------------------------------------ + +VtlParser::ComponentTypeContext::ComponentTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentRoleContext* VtlParser::ComponentTypeContext::componentRole() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ComponentTypeContext::LT() { + return getToken(VtlParser::LT, 0); +} + +VtlParser::ScalarTypeContext* VtlParser::ComponentTypeContext::scalarType() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ComponentTypeContext::MT() { + return getToken(VtlParser::MT, 0); +} + + +size_t VtlParser::ComponentTypeContext::getRuleIndex() const { + return VtlParser::RuleComponentType; +} + +void VtlParser::ComponentTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComponentType(this); +} + +void VtlParser::ComponentTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComponentType(this); +} + + +std::any VtlParser::ComponentTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComponentType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ComponentTypeContext* VtlParser::componentType() { + ComponentTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 128, VtlParser::RuleComponentType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1560); + componentRole(); + setState(1565); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LT) { + setState(1561); + match(VtlParser::LT); + setState(1562); + scalarType(); + setState(1563); + match(VtlParser::MT); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- DatasetTypeContext ------------------------------------------------------------------ + +VtlParser::DatasetTypeContext::DatasetTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::DatasetTypeContext::DATASET() { + return getToken(VtlParser::DATASET, 0); +} + +tree::TerminalNode* VtlParser::DatasetTypeContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +std::vector VtlParser::DatasetTypeContext::compConstraint() { + return getRuleContexts(); +} + +VtlParser::CompConstraintContext* VtlParser::DatasetTypeContext::compConstraint(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::DatasetTypeContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::DatasetTypeContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::DatasetTypeContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::DatasetTypeContext::getRuleIndex() const { + return VtlParser::RuleDatasetType; +} + +void VtlParser::DatasetTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDatasetType(this); +} + +void VtlParser::DatasetTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDatasetType(this); +} + + +std::any VtlParser::DatasetTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDatasetType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::DatasetTypeContext* VtlParser::datasetType() { + DatasetTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 130, VtlParser::RuleDatasetType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1567); + match(VtlParser::DATASET); + setState(1579); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GLPAREN) { + setState(1568); + match(VtlParser::GLPAREN); + setState(1569); + compConstraint(); + setState(1574); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1570); + match(VtlParser::COMMA); + setState(1571); + compConstraint(); + setState(1576); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1577); + match(VtlParser::GRPAREN); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- EvalDatasetTypeContext ------------------------------------------------------------------ + +VtlParser::EvalDatasetTypeContext::EvalDatasetTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::DatasetTypeContext* VtlParser::EvalDatasetTypeContext::datasetType() { + return getRuleContext(0); +} + +VtlParser::ScalarTypeContext* VtlParser::EvalDatasetTypeContext::scalarType() { + return getRuleContext(0); +} + + +size_t VtlParser::EvalDatasetTypeContext::getRuleIndex() const { + return VtlParser::RuleEvalDatasetType; +} + +void VtlParser::EvalDatasetTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterEvalDatasetType(this); +} + +void VtlParser::EvalDatasetTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitEvalDatasetType(this); +} + + +std::any VtlParser::EvalDatasetTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitEvalDatasetType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::EvalDatasetTypeContext* VtlParser::evalDatasetType() { + EvalDatasetTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 132, VtlParser::RuleEvalDatasetType); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1583); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::DATASET: { + enterOuterAlt(_localctx, 1); + setState(1581); + datasetType(); + break; + } + + case VtlParser::BOOLEAN: + case VtlParser::DATE: + case VtlParser::TIME_PERIOD: + case VtlParser::NUMBER: + case VtlParser::STRING: + case VtlParser::TIME: + case VtlParser::INTEGER: + case VtlParser::DURATION: + case VtlParser::SCALAR: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 2); + setState(1582); + scalarType(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ScalarSetTypeContext ------------------------------------------------------------------ + +VtlParser::ScalarSetTypeContext::ScalarSetTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ScalarSetTypeContext::SET() { + return getToken(VtlParser::SET, 0); +} + +tree::TerminalNode* VtlParser::ScalarSetTypeContext::LT() { + return getToken(VtlParser::LT, 0); +} + +VtlParser::ScalarTypeContext* VtlParser::ScalarSetTypeContext::scalarType() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ScalarSetTypeContext::MT() { + return getToken(VtlParser::MT, 0); +} + + +size_t VtlParser::ScalarSetTypeContext::getRuleIndex() const { + return VtlParser::RuleScalarSetType; +} + +void VtlParser::ScalarSetTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterScalarSetType(this); +} + +void VtlParser::ScalarSetTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitScalarSetType(this); +} + + +std::any VtlParser::ScalarSetTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitScalarSetType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ScalarSetTypeContext* VtlParser::scalarSetType() { + ScalarSetTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 134, VtlParser::RuleScalarSetType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1585); + match(VtlParser::SET); + setState(1590); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LT) { + setState(1586); + match(VtlParser::LT); + setState(1587); + scalarType(); + setState(1588); + match(VtlParser::MT); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- DpRulesetContext ------------------------------------------------------------------ + +VtlParser::DpRulesetContext::DpRulesetContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::DpRulesetContext::getRuleIndex() const { + return VtlParser::RuleDpRuleset; +} + +void VtlParser::DpRulesetContext::copyFrom(DpRulesetContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- DataPointVdContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DataPointVdContext::DATAPOINT_ON_VD() { + return getToken(VtlParser::DATAPOINT_ON_VD, 0); +} + +tree::TerminalNode* VtlParser::DataPointVdContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +std::vector VtlParser::DataPointVdContext::valueDomainName() { + return getRuleContexts(); +} + +VtlParser::ValueDomainNameContext* VtlParser::DataPointVdContext::valueDomainName(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::DataPointVdContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::DataPointVdContext::MUL() { + return getTokens(VtlParser::MUL); +} + +tree::TerminalNode* VtlParser::DataPointVdContext::MUL(size_t i) { + return getToken(VtlParser::MUL, i); +} + +VtlParser::DataPointVdContext::DataPointVdContext(DpRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::DataPointVdContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDataPointVd(this); +} +void VtlParser::DataPointVdContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDataPointVd(this); +} + +std::any VtlParser::DataPointVdContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDataPointVd(this); + else + return visitor->visitChildren(this); +} +//----------------- DataPointVarContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DataPointVarContext::DATAPOINT_ON_VAR() { + return getToken(VtlParser::DATAPOINT_ON_VAR, 0); +} + +tree::TerminalNode* VtlParser::DataPointVarContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +std::vector VtlParser::DataPointVarContext::varID() { + return getRuleContexts(); +} + +VtlParser::VarIDContext* VtlParser::DataPointVarContext::varID(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::DataPointVarContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::DataPointVarContext::MUL() { + return getTokens(VtlParser::MUL); +} + +tree::TerminalNode* VtlParser::DataPointVarContext::MUL(size_t i) { + return getToken(VtlParser::MUL, i); +} + +VtlParser::DataPointVarContext::DataPointVarContext(DpRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::DataPointVarContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDataPointVar(this); +} +void VtlParser::DataPointVarContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDataPointVar(this); +} + +std::any VtlParser::DataPointVarContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDataPointVar(this); + else + return visitor->visitChildren(this); +} +//----------------- DataPointContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::DataPointContext::DATAPOINT() { + return getToken(VtlParser::DATAPOINT, 0); +} + +VtlParser::DataPointContext::DataPointContext(DpRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::DataPointContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterDataPoint(this); +} +void VtlParser::DataPointContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitDataPoint(this); +} + +std::any VtlParser::DataPointContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitDataPoint(this); + else + return visitor->visitChildren(this); +} +VtlParser::DpRulesetContext* VtlParser::dpRuleset() { + DpRulesetContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 136, VtlParser::RuleDpRuleset); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1621); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::DATAPOINT: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1592); + match(VtlParser::DATAPOINT); + break; + } + + case VtlParser::DATAPOINT_ON_VD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1593); + match(VtlParser::DATAPOINT_ON_VD); + setState(1605); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GLPAREN) { + setState(1594); + match(VtlParser::GLPAREN); + setState(1595); + valueDomainName(); + setState(1600); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::MUL) { + setState(1596); + match(VtlParser::MUL); + setState(1597); + valueDomainName(); + setState(1602); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1603); + match(VtlParser::GRPAREN); + } + break; + } + + case VtlParser::DATAPOINT_ON_VAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1607); + match(VtlParser::DATAPOINT_ON_VAR); + setState(1619); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GLPAREN) { + setState(1608); + match(VtlParser::GLPAREN); + setState(1609); + varID(); + setState(1614); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::MUL) { + setState(1610); + match(VtlParser::MUL); + setState(1611); + varID(); + setState(1616); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1617); + match(VtlParser::GRPAREN); + } + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- HrRulesetContext ------------------------------------------------------------------ + +VtlParser::HrRulesetContext::HrRulesetContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::HrRulesetContext::getRuleIndex() const { + return VtlParser::RuleHrRuleset; +} + +void VtlParser::HrRulesetContext::copyFrom(HrRulesetContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- HrRulesetVdTypeContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::HIERARCHICAL_ON_VD() { + return getToken(VtlParser::HIERARCHICAL_ON_VD, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +std::vector VtlParser::HrRulesetVdTypeContext::valueDomainName() { + return getRuleContexts(); +} + +VtlParser::ValueDomainNameContext* VtlParser::HrRulesetVdTypeContext::valueDomainName(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::HrRulesetVdTypeContext::MUL() { + return getTokens(VtlParser::MUL); +} + +tree::TerminalNode* VtlParser::HrRulesetVdTypeContext::MUL(size_t i) { + return getToken(VtlParser::MUL, i); +} + +VtlParser::HrRulesetVdTypeContext::HrRulesetVdTypeContext(HrRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::HrRulesetVdTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHrRulesetVdType(this); +} +void VtlParser::HrRulesetVdTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHrRulesetVdType(this); +} + +std::any VtlParser::HrRulesetVdTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHrRulesetVdType(this); + else + return visitor->visitChildren(this); +} +//----------------- HrRulesetVarTypeContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::HIERARCHICAL_ON_VAR() { + return getToken(VtlParser::HIERARCHICAL_ON_VAR, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::HrRulesetVarTypeContext::varID() { + return getRuleContexts(); +} + +VtlParser::VarIDContext* VtlParser::HrRulesetVarTypeContext::varID(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::LPAREN() { + return getToken(VtlParser::LPAREN, 0); +} + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::RPAREN() { + return getToken(VtlParser::RPAREN, 0); +} + +std::vector VtlParser::HrRulesetVarTypeContext::MUL() { + return getTokens(VtlParser::MUL); +} + +tree::TerminalNode* VtlParser::HrRulesetVarTypeContext::MUL(size_t i) { + return getToken(VtlParser::MUL, i); +} + +VtlParser::HrRulesetVarTypeContext::HrRulesetVarTypeContext(HrRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::HrRulesetVarTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHrRulesetVarType(this); +} +void VtlParser::HrRulesetVarTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHrRulesetVarType(this); +} + +std::any VtlParser::HrRulesetVarTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHrRulesetVarType(this); + else + return visitor->visitChildren(this); +} +//----------------- HrRulesetTypeContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::HrRulesetTypeContext::HIERARCHICAL() { + return getToken(VtlParser::HIERARCHICAL, 0); +} + +VtlParser::HrRulesetTypeContext::HrRulesetTypeContext(HrRulesetContext *ctx) { copyFrom(ctx); } + +void VtlParser::HrRulesetTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHrRulesetType(this); +} +void VtlParser::HrRulesetTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHrRulesetType(this); +} + +std::any VtlParser::HrRulesetTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHrRulesetType(this); + else + return visitor->visitChildren(this); +} +VtlParser::HrRulesetContext* VtlParser::hrRuleset() { + HrRulesetContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 138, VtlParser::RuleHrRuleset); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1663); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::HIERARCHICAL: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1623); + match(VtlParser::HIERARCHICAL); + break; + } + + case VtlParser::HIERARCHICAL_ON_VD: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1624); + match(VtlParser::HIERARCHICAL_ON_VD); + setState(1641); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GLPAREN) { + setState(1625); + match(VtlParser::GLPAREN); + setState(1626); + antlrcpp::downCast(_localctx)->vdName = match(VtlParser::IDENTIFIER); + setState(1638); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LPAREN) { + setState(1627); + match(VtlParser::LPAREN); + setState(1628); + valueDomainName(); + setState(1633); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::MUL) { + setState(1629); + match(VtlParser::MUL); + setState(1630); + valueDomainName(); + setState(1635); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1636); + match(VtlParser::RPAREN); + } + setState(1640); + match(VtlParser::GRPAREN); + } + break; + } + + case VtlParser::HIERARCHICAL_ON_VAR: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 3); + setState(1643); + match(VtlParser::HIERARCHICAL_ON_VAR); + setState(1661); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::GLPAREN) { + setState(1644); + match(VtlParser::GLPAREN); + setState(1645); + antlrcpp::downCast(_localctx)->varName = varID(); + setState(1657); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::LPAREN) { + setState(1646); + match(VtlParser::LPAREN); + setState(1647); + varID(); + setState(1652); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::MUL) { + setState(1648); + match(VtlParser::MUL); + setState(1649); + varID(); + setState(1654); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1655); + match(VtlParser::RPAREN); + } + setState(1659); + match(VtlParser::GRPAREN); + } + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValueDomainNameContext ------------------------------------------------------------------ + +VtlParser::ValueDomainNameContext::ValueDomainNameContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ValueDomainNameContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::ValueDomainNameContext::getRuleIndex() const { + return VtlParser::RuleValueDomainName; +} + +void VtlParser::ValueDomainNameContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValueDomainName(this); +} + +void VtlParser::ValueDomainNameContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValueDomainName(this); +} + + +std::any VtlParser::ValueDomainNameContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValueDomainName(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValueDomainNameContext* VtlParser::valueDomainName() { + ValueDomainNameContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 140, VtlParser::RuleValueDomainName); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1665); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RulesetIDContext ------------------------------------------------------------------ + +VtlParser::RulesetIDContext::RulesetIDContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RulesetIDContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::RulesetIDContext::getRuleIndex() const { + return VtlParser::RuleRulesetID; +} + +void VtlParser::RulesetIDContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRulesetID(this); +} + +void VtlParser::RulesetIDContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRulesetID(this); +} + + +std::any VtlParser::RulesetIDContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRulesetID(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RulesetIDContext* VtlParser::rulesetID() { + RulesetIDContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 142, VtlParser::RuleRulesetID); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1667); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RulesetSignatureContext ------------------------------------------------------------------ + +VtlParser::RulesetSignatureContext::RulesetSignatureContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::RulesetSignatureContext::signature() { + return getRuleContexts(); +} + +VtlParser::SignatureContext* VtlParser::RulesetSignatureContext::signature(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::RulesetSignatureContext::VALUE_DOMAIN() { + return getToken(VtlParser::VALUE_DOMAIN, 0); +} + +tree::TerminalNode* VtlParser::RulesetSignatureContext::VARIABLE() { + return getToken(VtlParser::VARIABLE, 0); +} + +std::vector VtlParser::RulesetSignatureContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::RulesetSignatureContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::RulesetSignatureContext::getRuleIndex() const { + return VtlParser::RuleRulesetSignature; +} + +void VtlParser::RulesetSignatureContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRulesetSignature(this); +} + +void VtlParser::RulesetSignatureContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRulesetSignature(this); +} + + +std::any VtlParser::RulesetSignatureContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRulesetSignature(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RulesetSignatureContext* VtlParser::rulesetSignature() { + RulesetSignatureContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 144, VtlParser::RuleRulesetSignature); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1669); + _la = _input->LA(1); + if (!(_la == VtlParser::VALUE_DOMAIN + + || _la == VtlParser::VARIABLE)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1670); + signature(); + setState(1675); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1671); + match(VtlParser::COMMA); + setState(1672); + signature(); + setState(1677); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SignatureContext ------------------------------------------------------------------ + +VtlParser::SignatureContext::SignatureContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::VarIDContext* VtlParser::SignatureContext::varID() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::SignatureContext::AS() { + return getToken(VtlParser::AS, 0); +} + +VtlParser::AliasContext* VtlParser::SignatureContext::alias() { + return getRuleContext(0); +} + + +size_t VtlParser::SignatureContext::getRuleIndex() const { + return VtlParser::RuleSignature; +} + +void VtlParser::SignatureContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSignature(this); +} + +void VtlParser::SignatureContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSignature(this); +} + + +std::any VtlParser::SignatureContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSignature(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SignatureContext* VtlParser::signature() { + SignatureContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 146, VtlParser::RuleSignature); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1678); + varID(); + setState(1681); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::AS) { + setState(1679); + match(VtlParser::AS); + setState(1680); + alias(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RuleClauseDatapointContext ------------------------------------------------------------------ + +VtlParser::RuleClauseDatapointContext::RuleClauseDatapointContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::RuleClauseDatapointContext::ruleItemDatapoint() { + return getRuleContexts(); +} + +VtlParser::RuleItemDatapointContext* VtlParser::RuleClauseDatapointContext::ruleItemDatapoint(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::RuleClauseDatapointContext::EOL() { + return getTokens(VtlParser::EOL); +} + +tree::TerminalNode* VtlParser::RuleClauseDatapointContext::EOL(size_t i) { + return getToken(VtlParser::EOL, i); +} + + +size_t VtlParser::RuleClauseDatapointContext::getRuleIndex() const { + return VtlParser::RuleRuleClauseDatapoint; +} + +void VtlParser::RuleClauseDatapointContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRuleClauseDatapoint(this); +} + +void VtlParser::RuleClauseDatapointContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRuleClauseDatapoint(this); +} + + +std::any VtlParser::RuleClauseDatapointContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRuleClauseDatapoint(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RuleClauseDatapointContext* VtlParser::ruleClauseDatapoint() { + RuleClauseDatapointContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 148, VtlParser::RuleRuleClauseDatapoint); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1683); + ruleItemDatapoint(); + setState(1688); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::EOL) { + setState(1684); + match(VtlParser::EOL); + setState(1685); + ruleItemDatapoint(); + setState(1690); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RuleItemDatapointContext ------------------------------------------------------------------ + +VtlParser::RuleItemDatapointContext::RuleItemDatapointContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::RuleItemDatapointContext::exprComponent() { + return getRuleContexts(); +} + +VtlParser::ExprComponentContext* VtlParser::RuleItemDatapointContext::exprComponent(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::RuleItemDatapointContext::COLON() { + return getToken(VtlParser::COLON, 0); +} + +tree::TerminalNode* VtlParser::RuleItemDatapointContext::WHEN() { + return getToken(VtlParser::WHEN, 0); +} + +tree::TerminalNode* VtlParser::RuleItemDatapointContext::THEN() { + return getToken(VtlParser::THEN, 0); +} + +VtlParser::ErCodeContext* VtlParser::RuleItemDatapointContext::erCode() { + return getRuleContext(0); +} + +VtlParser::ErLevelContext* VtlParser::RuleItemDatapointContext::erLevel() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::RuleItemDatapointContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::RuleItemDatapointContext::getRuleIndex() const { + return VtlParser::RuleRuleItemDatapoint; +} + +void VtlParser::RuleItemDatapointContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRuleItemDatapoint(this); +} + +void VtlParser::RuleItemDatapointContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRuleItemDatapoint(this); +} + + +std::any VtlParser::RuleItemDatapointContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRuleItemDatapoint(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RuleItemDatapointContext* VtlParser::ruleItemDatapoint() { + RuleItemDatapointContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 150, VtlParser::RuleRuleItemDatapoint); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1693); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 175, _ctx)) { + case 1: { + setState(1691); + antlrcpp::downCast(_localctx)->ruleName = match(VtlParser::IDENTIFIER); + setState(1692); + match(VtlParser::COLON); + break; + } + + default: + break; + } + setState(1699); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::WHEN) { + setState(1695); + match(VtlParser::WHEN); + setState(1696); + antlrcpp::downCast(_localctx)->antecedentContiditon = exprComponent(0); + setState(1697); + match(VtlParser::THEN); + } + setState(1701); + antlrcpp::downCast(_localctx)->consequentCondition = exprComponent(0); + setState(1703); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORCODE) { + setState(1702); + erCode(); + } + setState(1706); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORLEVEL) { + setState(1705); + erLevel(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RuleClauseHierarchicalContext ------------------------------------------------------------------ + +VtlParser::RuleClauseHierarchicalContext::RuleClauseHierarchicalContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::RuleClauseHierarchicalContext::ruleItemHierarchical() { + return getRuleContexts(); +} + +VtlParser::RuleItemHierarchicalContext* VtlParser::RuleClauseHierarchicalContext::ruleItemHierarchical(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::RuleClauseHierarchicalContext::EOL() { + return getTokens(VtlParser::EOL); +} + +tree::TerminalNode* VtlParser::RuleClauseHierarchicalContext::EOL(size_t i) { + return getToken(VtlParser::EOL, i); +} + + +size_t VtlParser::RuleClauseHierarchicalContext::getRuleIndex() const { + return VtlParser::RuleRuleClauseHierarchical; +} + +void VtlParser::RuleClauseHierarchicalContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRuleClauseHierarchical(this); +} + +void VtlParser::RuleClauseHierarchicalContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRuleClauseHierarchical(this); +} + + +std::any VtlParser::RuleClauseHierarchicalContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRuleClauseHierarchical(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RuleClauseHierarchicalContext* VtlParser::ruleClauseHierarchical() { + RuleClauseHierarchicalContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 152, VtlParser::RuleRuleClauseHierarchical); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1708); + ruleItemHierarchical(); + setState(1713); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::EOL) { + setState(1709); + match(VtlParser::EOL); + setState(1710); + ruleItemHierarchical(); + setState(1715); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RuleItemHierarchicalContext ------------------------------------------------------------------ + +VtlParser::RuleItemHierarchicalContext::RuleItemHierarchicalContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::CodeItemRelationContext* VtlParser::RuleItemHierarchicalContext::codeItemRelation() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::RuleItemHierarchicalContext::COLON() { + return getToken(VtlParser::COLON, 0); +} + +VtlParser::ErCodeContext* VtlParser::RuleItemHierarchicalContext::erCode() { + return getRuleContext(0); +} + +VtlParser::ErLevelContext* VtlParser::RuleItemHierarchicalContext::erLevel() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::RuleItemHierarchicalContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::RuleItemHierarchicalContext::getRuleIndex() const { + return VtlParser::RuleRuleItemHierarchical; +} + +void VtlParser::RuleItemHierarchicalContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRuleItemHierarchical(this); +} + +void VtlParser::RuleItemHierarchicalContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRuleItemHierarchical(this); +} + + +std::any VtlParser::RuleItemHierarchicalContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRuleItemHierarchical(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RuleItemHierarchicalContext* VtlParser::ruleItemHierarchical() { + RuleItemHierarchicalContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 154, VtlParser::RuleRuleItemHierarchical); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1718); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 180, _ctx)) { + case 1: { + setState(1716); + antlrcpp::downCast(_localctx)->ruleName = match(VtlParser::IDENTIFIER); + setState(1717); + match(VtlParser::COLON); + break; + } + + default: + break; + } + setState(1720); + codeItemRelation(); + setState(1722); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORCODE) { + setState(1721); + erCode(); + } + setState(1725); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::ERRORLEVEL) { + setState(1724); + erLevel(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- HierRuleSignatureContext ------------------------------------------------------------------ + +VtlParser::HierRuleSignatureContext::HierRuleSignatureContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::HierRuleSignatureContext::RULE() { + return getToken(VtlParser::RULE, 0); +} + +tree::TerminalNode* VtlParser::HierRuleSignatureContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +tree::TerminalNode* VtlParser::HierRuleSignatureContext::VALUE_DOMAIN() { + return getToken(VtlParser::VALUE_DOMAIN, 0); +} + +tree::TerminalNode* VtlParser::HierRuleSignatureContext::VARIABLE() { + return getToken(VtlParser::VARIABLE, 0); +} + +tree::TerminalNode* VtlParser::HierRuleSignatureContext::CONDITION() { + return getToken(VtlParser::CONDITION, 0); +} + +VtlParser::ValueDomainSignatureContext* VtlParser::HierRuleSignatureContext::valueDomainSignature() { + return getRuleContext(0); +} + + +size_t VtlParser::HierRuleSignatureContext::getRuleIndex() const { + return VtlParser::RuleHierRuleSignature; +} + +void VtlParser::HierRuleSignatureContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterHierRuleSignature(this); +} + +void VtlParser::HierRuleSignatureContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitHierRuleSignature(this); +} + + +std::any VtlParser::HierRuleSignatureContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHierRuleSignature(this); + else + return visitor->visitChildren(this); +} + +VtlParser::HierRuleSignatureContext* VtlParser::hierRuleSignature() { + HierRuleSignatureContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 156, VtlParser::RuleHierRuleSignature); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1727); + _la = _input->LA(1); + if (!(_la == VtlParser::VALUE_DOMAIN + + || _la == VtlParser::VARIABLE)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + setState(1730); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::CONDITION) { + setState(1728); + match(VtlParser::CONDITION); + setState(1729); + valueDomainSignature(); + } + setState(1732); + match(VtlParser::RULE); + setState(1733); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValueDomainSignatureContext ------------------------------------------------------------------ + +VtlParser::ValueDomainSignatureContext::ValueDomainSignatureContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::ValueDomainSignatureContext::signature() { + return getRuleContexts(); +} + +VtlParser::SignatureContext* VtlParser::ValueDomainSignatureContext::signature(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::ValueDomainSignatureContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ValueDomainSignatureContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::ValueDomainSignatureContext::getRuleIndex() const { + return VtlParser::RuleValueDomainSignature; +} + +void VtlParser::ValueDomainSignatureContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValueDomainSignature(this); +} + +void VtlParser::ValueDomainSignatureContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValueDomainSignature(this); +} + + +std::any VtlParser::ValueDomainSignatureContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValueDomainSignature(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValueDomainSignatureContext* VtlParser::valueDomainSignature() { + ValueDomainSignatureContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 158, VtlParser::RuleValueDomainSignature); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1735); + signature(); + setState(1740); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1736); + match(VtlParser::COMMA); + setState(1737); + signature(); + setState(1742); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CodeItemRelationContext ------------------------------------------------------------------ + +VtlParser::CodeItemRelationContext::CodeItemRelationContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::CodeItemRelationContext::codeItemRelationClause() { + return getRuleContexts(); +} + +VtlParser::CodeItemRelationClauseContext* VtlParser::CodeItemRelationContext::codeItemRelationClause(size_t i) { + return getRuleContext(i); +} + +VtlParser::ValueDomainValueContext* VtlParser::CodeItemRelationContext::valueDomainValue() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationContext::WHEN() { + return getToken(VtlParser::WHEN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::CodeItemRelationContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationContext::THEN() { + return getToken(VtlParser::THEN, 0); +} + +VtlParser::ComparisonOperandContext* VtlParser::CodeItemRelationContext::comparisonOperand() { + return getRuleContext(0); +} + + +size_t VtlParser::CodeItemRelationContext::getRuleIndex() const { + return VtlParser::RuleCodeItemRelation; +} + +void VtlParser::CodeItemRelationContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCodeItemRelation(this); +} + +void VtlParser::CodeItemRelationContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCodeItemRelation(this); +} + + +std::any VtlParser::CodeItemRelationContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCodeItemRelation(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CodeItemRelationContext* VtlParser::codeItemRelation() { + CodeItemRelationContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 160, VtlParser::RuleCodeItemRelation); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1747); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::WHEN) { + setState(1743); + match(VtlParser::WHEN); + setState(1744); + exprComponent(0); + setState(1745); + match(VtlParser::THEN); + } + setState(1749); + antlrcpp::downCast(_localctx)->codetemRef = valueDomainValue(); + setState(1751); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 8064) != 0)) { + setState(1750); + comparisonOperand(); + } + setState(1753); + codeItemRelationClause(); + setState(1757); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::PLUS + + || _la == VtlParser::MINUS || ((((_la - 241) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 241)) & 19) != 0)) { + setState(1754); + codeItemRelationClause(); + setState(1759); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CodeItemRelationClauseContext ------------------------------------------------------------------ + +VtlParser::CodeItemRelationClauseContext::CodeItemRelationClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ValueDomainValueContext* VtlParser::CodeItemRelationClauseContext::valueDomainValue() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationClauseContext::QLPAREN() { + return getToken(VtlParser::QLPAREN, 0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationClauseContext::QRPAREN() { + return getToken(VtlParser::QRPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::CodeItemRelationClauseContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationClauseContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::CodeItemRelationClauseContext::MINUS() { + return getToken(VtlParser::MINUS, 0); +} + + +size_t VtlParser::CodeItemRelationClauseContext::getRuleIndex() const { + return VtlParser::RuleCodeItemRelationClause; +} + +void VtlParser::CodeItemRelationClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCodeItemRelationClause(this); +} + +void VtlParser::CodeItemRelationClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCodeItemRelationClause(this); +} + + +std::any VtlParser::CodeItemRelationClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCodeItemRelationClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CodeItemRelationClauseContext* VtlParser::codeItemRelationClause() { + CodeItemRelationClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 162, VtlParser::RuleCodeItemRelationClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1761); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 188, _ctx)) { + case 1: { + setState(1760); + antlrcpp::downCast(_localctx)->opAdd = _input->LT(1); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MINUS)) { + antlrcpp::downCast(_localctx)->opAdd = _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + break; + } + + default: + break; + } + setState(1763); + antlrcpp::downCast(_localctx)->rightCodeItem = valueDomainValue(); + setState(1768); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::QLPAREN) { + setState(1764); + match(VtlParser::QLPAREN); + setState(1765); + antlrcpp::downCast(_localctx)->rightCondition = exprComponent(0); + setState(1766); + match(VtlParser::QRPAREN); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValueDomainValueContext ------------------------------------------------------------------ + +VtlParser::ValueDomainValueContext::ValueDomainValueContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ValueDomainValueContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + +VtlParser::SignedIntegerContext* VtlParser::ValueDomainValueContext::signedInteger() { + return getRuleContext(0); +} + +VtlParser::SignedNumberContext* VtlParser::ValueDomainValueContext::signedNumber() { + return getRuleContext(0); +} + + +size_t VtlParser::ValueDomainValueContext::getRuleIndex() const { + return VtlParser::RuleValueDomainValue; +} + +void VtlParser::ValueDomainValueContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValueDomainValue(this); +} + +void VtlParser::ValueDomainValueContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValueDomainValue(this); +} + + +std::any VtlParser::ValueDomainValueContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValueDomainValue(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValueDomainValueContext* VtlParser::valueDomainValue() { + ValueDomainValueContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 164, VtlParser::RuleValueDomainValue); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1773); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 190, _ctx)) { + case 1: { + enterOuterAlt(_localctx, 1); + setState(1770); + match(VtlParser::IDENTIFIER); + break; + } + + case 2: { + enterOuterAlt(_localctx, 2); + setState(1771); + signedInteger(); + break; + } + + case 3: { + enterOuterAlt(_localctx, 3); + setState(1772); + signedNumber(); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ScalarTypeConstraintContext ------------------------------------------------------------------ + +VtlParser::ScalarTypeConstraintContext::ScalarTypeConstraintContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + + +size_t VtlParser::ScalarTypeConstraintContext::getRuleIndex() const { + return VtlParser::RuleScalarTypeConstraint; +} + +void VtlParser::ScalarTypeConstraintContext::copyFrom(ScalarTypeConstraintContext *ctx) { + ParserRuleContext::copyFrom(ctx); +} + +//----------------- RangeConstraintContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::RangeConstraintContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +std::vector VtlParser::RangeConstraintContext::scalarItem() { + return getRuleContexts(); +} + +VtlParser::ScalarItemContext* VtlParser::RangeConstraintContext::scalarItem(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::RangeConstraintContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::RangeConstraintContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::RangeConstraintContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + +VtlParser::RangeConstraintContext::RangeConstraintContext(ScalarTypeConstraintContext *ctx) { copyFrom(ctx); } + +void VtlParser::RangeConstraintContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRangeConstraint(this); +} +void VtlParser::RangeConstraintContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRangeConstraint(this); +} + +std::any VtlParser::RangeConstraintContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRangeConstraint(this); + else + return visitor->visitChildren(this); +} +//----------------- ConditionConstraintContext ------------------------------------------------------------------ + +tree::TerminalNode* VtlParser::ConditionConstraintContext::QLPAREN() { + return getToken(VtlParser::QLPAREN, 0); +} + +VtlParser::ExprComponentContext* VtlParser::ConditionConstraintContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ConditionConstraintContext::QRPAREN() { + return getToken(VtlParser::QRPAREN, 0); +} + +VtlParser::ConditionConstraintContext::ConditionConstraintContext(ScalarTypeConstraintContext *ctx) { copyFrom(ctx); } + +void VtlParser::ConditionConstraintContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConditionConstraint(this); +} +void VtlParser::ConditionConstraintContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConditionConstraint(this); +} + +std::any VtlParser::ConditionConstraintContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConditionConstraint(this); + else + return visitor->visitChildren(this); +} +VtlParser::ScalarTypeConstraintContext* VtlParser::scalarTypeConstraint() { + ScalarTypeConstraintContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 166, VtlParser::RuleScalarTypeConstraint); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1790); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::QLPAREN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 1); + setState(1775); + match(VtlParser::QLPAREN); + setState(1776); + exprComponent(0); + setState(1777); + match(VtlParser::QRPAREN); + break; + } + + case VtlParser::GLPAREN: { + _localctx = _tracker.createInstance(_localctx); + enterOuterAlt(_localctx, 2); + setState(1779); + match(VtlParser::GLPAREN); + setState(1780); + scalarItem(); + setState(1785); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1781); + match(VtlParser::COMMA); + setState(1782); + scalarItem(); + setState(1787); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1788); + match(VtlParser::GRPAREN); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- CompConstraintContext ------------------------------------------------------------------ + +VtlParser::CompConstraintContext::CompConstraintContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ComponentTypeContext* VtlParser::CompConstraintContext::componentType() { + return getRuleContext(0); +} + +VtlParser::ComponentIDContext* VtlParser::CompConstraintContext::componentID() { + return getRuleContext(0); +} + +VtlParser::MultModifierContext* VtlParser::CompConstraintContext::multModifier() { + return getRuleContext(0); +} + + +size_t VtlParser::CompConstraintContext::getRuleIndex() const { + return VtlParser::RuleCompConstraint; +} + +void VtlParser::CompConstraintContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterCompConstraint(this); +} + +void VtlParser::CompConstraintContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitCompConstraint(this); +} + + +std::any VtlParser::CompConstraintContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitCompConstraint(this); + else + return visitor->visitChildren(this); +} + +VtlParser::CompConstraintContext* VtlParser::compConstraint() { + CompConstraintContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 168, VtlParser::RuleCompConstraint); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1792); + componentType(); + setState(1795); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::IDENTIFIER: { + setState(1793); + componentID(); + break; + } + + case VtlParser::OPTIONAL: { + setState(1794); + multModifier(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- MultModifierContext ------------------------------------------------------------------ + +VtlParser::MultModifierContext::MultModifierContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::MultModifierContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + +tree::TerminalNode* VtlParser::MultModifierContext::PLUS() { + return getToken(VtlParser::PLUS, 0); +} + +tree::TerminalNode* VtlParser::MultModifierContext::MUL() { + return getToken(VtlParser::MUL, 0); +} + + +size_t VtlParser::MultModifierContext::getRuleIndex() const { + return VtlParser::RuleMultModifier; +} + +void VtlParser::MultModifierContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterMultModifier(this); +} + +void VtlParser::MultModifierContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitMultModifier(this); +} + + +std::any VtlParser::MultModifierContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitMultModifier(this); + else + return visitor->visitChildren(this); +} + +VtlParser::MultModifierContext* VtlParser::multModifier() { + MultModifierContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 170, VtlParser::RuleMultModifier); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1797); + match(VtlParser::OPTIONAL); + setState(1799); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == VtlParser::PLUS + + || _la == VtlParser::MUL) { + setState(1798); + _la = _input->LA(1); + if (!(_la == VtlParser::PLUS + + || _la == VtlParser::MUL)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValidationOutputContext ------------------------------------------------------------------ + +VtlParser::ValidationOutputContext::ValidationOutputContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ValidationOutputContext::INVALID() { + return getToken(VtlParser::INVALID, 0); +} + +tree::TerminalNode* VtlParser::ValidationOutputContext::ALL_MEASURES() { + return getToken(VtlParser::ALL_MEASURES, 0); +} + +tree::TerminalNode* VtlParser::ValidationOutputContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + + +size_t VtlParser::ValidationOutputContext::getRuleIndex() const { + return VtlParser::RuleValidationOutput; +} + +void VtlParser::ValidationOutputContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidationOutput(this); +} + +void VtlParser::ValidationOutputContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidationOutput(this); +} + + +std::any VtlParser::ValidationOutputContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidationOutput(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValidationOutputContext* VtlParser::validationOutput() { + ValidationOutputContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 172, VtlParser::RuleValidationOutput); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1801); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL + + || _la == VtlParser::INVALID || _la == VtlParser::ALL_MEASURES)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValidationModeContext ------------------------------------------------------------------ + +VtlParser::ValidationModeContext::ValidationModeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ValidationModeContext::NON_NULL() { + return getToken(VtlParser::NON_NULL, 0); +} + +tree::TerminalNode* VtlParser::ValidationModeContext::NON_ZERO() { + return getToken(VtlParser::NON_ZERO, 0); +} + +tree::TerminalNode* VtlParser::ValidationModeContext::PARTIAL_NULL() { + return getToken(VtlParser::PARTIAL_NULL, 0); +} + +tree::TerminalNode* VtlParser::ValidationModeContext::PARTIAL_ZERO() { + return getToken(VtlParser::PARTIAL_ZERO, 0); +} + +tree::TerminalNode* VtlParser::ValidationModeContext::ALWAYS_NULL() { + return getToken(VtlParser::ALWAYS_NULL, 0); +} + +tree::TerminalNode* VtlParser::ValidationModeContext::ALWAYS_ZERO() { + return getToken(VtlParser::ALWAYS_ZERO, 0); +} + + +size_t VtlParser::ValidationModeContext::getRuleIndex() const { + return VtlParser::RuleValidationMode; +} + +void VtlParser::ValidationModeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValidationMode(this); +} + +void VtlParser::ValidationModeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValidationMode(this); +} + + +std::any VtlParser::ValidationModeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValidationMode(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValidationModeContext* VtlParser::validationMode() { + ValidationModeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 174, VtlParser::RuleValidationMode); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1803); + _la = _input->LA(1); + if (!(((((_la - 225) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 225)) & 63) != 0))) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ConditionClauseContext ------------------------------------------------------------------ + +VtlParser::ConditionClauseContext::ConditionClauseContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ConditionClauseContext::CONDITION() { + return getToken(VtlParser::CONDITION, 0); +} + +std::vector VtlParser::ConditionClauseContext::componentID() { + return getRuleContexts(); +} + +VtlParser::ComponentIDContext* VtlParser::ConditionClauseContext::componentID(size_t i) { + return getRuleContext(i); +} + +std::vector VtlParser::ConditionClauseContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ConditionClauseContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::ConditionClauseContext::getRuleIndex() const { + return VtlParser::RuleConditionClause; +} + +void VtlParser::ConditionClauseContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConditionClause(this); +} + +void VtlParser::ConditionClauseContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConditionClause(this); +} + + +std::any VtlParser::ConditionClauseContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConditionClause(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ConditionClauseContext* VtlParser::conditionClause() { + ConditionClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 176, VtlParser::RuleConditionClause); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1805); + match(VtlParser::CONDITION); + setState(1806); + componentID(); + setState(1811); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1807); + match(VtlParser::COMMA); + setState(1808); + componentID(); + setState(1813); + _errHandler->sync(this); + _la = _input->LA(1); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- InputModeContext ------------------------------------------------------------------ + +VtlParser::InputModeContext::InputModeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::InputModeContext::DATASET() { + return getToken(VtlParser::DATASET, 0); +} + +tree::TerminalNode* VtlParser::InputModeContext::DATASET_PRIORITY() { + return getToken(VtlParser::DATASET_PRIORITY, 0); +} + + +size_t VtlParser::InputModeContext::getRuleIndex() const { + return VtlParser::RuleInputMode; +} + +void VtlParser::InputModeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInputMode(this); +} + +void VtlParser::InputModeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInputMode(this); +} + + +std::any VtlParser::InputModeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInputMode(this); + else + return visitor->visitChildren(this); +} + +VtlParser::InputModeContext* VtlParser::inputMode() { + InputModeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 178, VtlParser::RuleInputMode); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1814); + _la = _input->LA(1); + if (!(_la == VtlParser::DATASET || _la == VtlParser::DATASET_PRIORITY)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ImbalanceExprContext ------------------------------------------------------------------ + +VtlParser::ImbalanceExprContext::ImbalanceExprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ImbalanceExprContext::IMBALANCE() { + return getToken(VtlParser::IMBALANCE, 0); +} + +VtlParser::ExprContext* VtlParser::ImbalanceExprContext::expr() { + return getRuleContext(0); +} + + +size_t VtlParser::ImbalanceExprContext::getRuleIndex() const { + return VtlParser::RuleImbalanceExpr; +} + +void VtlParser::ImbalanceExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterImbalanceExpr(this); +} + +void VtlParser::ImbalanceExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitImbalanceExpr(this); +} + + +std::any VtlParser::ImbalanceExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitImbalanceExpr(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ImbalanceExprContext* VtlParser::imbalanceExpr() { + ImbalanceExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 180, VtlParser::RuleImbalanceExpr); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1816); + match(VtlParser::IMBALANCE); + setState(1817); + expr(0); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- InputModeHierarchyContext ------------------------------------------------------------------ + +VtlParser::InputModeHierarchyContext::InputModeHierarchyContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::InputModeHierarchyContext::RULE() { + return getToken(VtlParser::RULE, 0); +} + +tree::TerminalNode* VtlParser::InputModeHierarchyContext::DATASET() { + return getToken(VtlParser::DATASET, 0); +} + +tree::TerminalNode* VtlParser::InputModeHierarchyContext::RULE_PRIORITY() { + return getToken(VtlParser::RULE_PRIORITY, 0); +} + + +size_t VtlParser::InputModeHierarchyContext::getRuleIndex() const { + return VtlParser::RuleInputModeHierarchy; +} + +void VtlParser::InputModeHierarchyContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterInputModeHierarchy(this); +} + +void VtlParser::InputModeHierarchyContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitInputModeHierarchy(this); +} + + +std::any VtlParser::InputModeHierarchyContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitInputModeHierarchy(this); + else + return visitor->visitChildren(this); +} + +VtlParser::InputModeHierarchyContext* VtlParser::inputModeHierarchy() { + InputModeHierarchyContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 182, VtlParser::RuleInputModeHierarchy); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1819); + _la = _input->LA(1); + if (!(_la == VtlParser::DATASET + + || _la == VtlParser::RULE || _la == VtlParser::RULE_PRIORITY)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OutputModeHierarchyContext ------------------------------------------------------------------ + +VtlParser::OutputModeHierarchyContext::OutputModeHierarchyContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::OutputModeHierarchyContext::COMPUTED() { + return getToken(VtlParser::COMPUTED, 0); +} + +tree::TerminalNode* VtlParser::OutputModeHierarchyContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + + +size_t VtlParser::OutputModeHierarchyContext::getRuleIndex() const { + return VtlParser::RuleOutputModeHierarchy; +} + +void VtlParser::OutputModeHierarchyContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOutputModeHierarchy(this); +} + +void VtlParser::OutputModeHierarchyContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOutputModeHierarchy(this); +} + + +std::any VtlParser::OutputModeHierarchyContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOutputModeHierarchy(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OutputModeHierarchyContext* VtlParser::outputModeHierarchy() { + OutputModeHierarchyContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 184, VtlParser::RuleOutputModeHierarchy); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1821); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL || _la == VtlParser::COMPUTED)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- AliasContext ------------------------------------------------------------------ + +VtlParser::AliasContext::AliasContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::AliasContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::AliasContext::getRuleIndex() const { + return VtlParser::RuleAlias; +} + +void VtlParser::AliasContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAlias(this); +} + +void VtlParser::AliasContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAlias(this); +} + + +std::any VtlParser::AliasContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAlias(this); + else + return visitor->visitChildren(this); +} + +VtlParser::AliasContext* VtlParser::alias() { + AliasContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 186, VtlParser::RuleAlias); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1823); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- VarIDContext ------------------------------------------------------------------ + +VtlParser::VarIDContext::VarIDContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::VarIDContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::VarIDContext::getRuleIndex() const { + return VtlParser::RuleVarID; +} + +void VtlParser::VarIDContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterVarID(this); +} + +void VtlParser::VarIDContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitVarID(this); +} + + +std::any VtlParser::VarIDContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitVarID(this); + else + return visitor->visitChildren(this); +} + +VtlParser::VarIDContext* VtlParser::varID() { + VarIDContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 188, VtlParser::RuleVarID); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1825); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- SimpleComponentIdContext ------------------------------------------------------------------ + +VtlParser::SimpleComponentIdContext::SimpleComponentIdContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::SimpleComponentIdContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::SimpleComponentIdContext::getRuleIndex() const { + return VtlParser::RuleSimpleComponentId; +} + +void VtlParser::SimpleComponentIdContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterSimpleComponentId(this); +} + +void VtlParser::SimpleComponentIdContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitSimpleComponentId(this); +} + + +std::any VtlParser::SimpleComponentIdContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitSimpleComponentId(this); + else + return visitor->visitChildren(this); +} + +VtlParser::SimpleComponentIdContext* VtlParser::simpleComponentId() { + SimpleComponentIdContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 190, VtlParser::RuleSimpleComponentId); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1827); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComponentIDContext ------------------------------------------------------------------ + +VtlParser::ComponentIDContext::ComponentIDContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +std::vector VtlParser::ComponentIDContext::IDENTIFIER() { + return getTokens(VtlParser::IDENTIFIER); +} + +tree::TerminalNode* VtlParser::ComponentIDContext::IDENTIFIER(size_t i) { + return getToken(VtlParser::IDENTIFIER, i); +} + +tree::TerminalNode* VtlParser::ComponentIDContext::MEMBERSHIP() { + return getToken(VtlParser::MEMBERSHIP, 0); +} + + +size_t VtlParser::ComponentIDContext::getRuleIndex() const { + return VtlParser::RuleComponentID; +} + +void VtlParser::ComponentIDContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComponentID(this); +} + +void VtlParser::ComponentIDContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComponentID(this); +} + + +std::any VtlParser::ComponentIDContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComponentID(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ComponentIDContext* VtlParser::componentID() { + ComponentIDContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 192, VtlParser::RuleComponentID); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1829); + match(VtlParser::IDENTIFIER); + setState(1832); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 196, _ctx)) { + case 1: { + setState(1830); + match(VtlParser::MEMBERSHIP); + setState(1831); + match(VtlParser::IDENTIFIER); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ListsContext ------------------------------------------------------------------ + +VtlParser::ListsContext::ListsContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ListsContext::GLPAREN() { + return getToken(VtlParser::GLPAREN, 0); +} + +std::vector VtlParser::ListsContext::scalarItem() { + return getRuleContexts(); +} + +VtlParser::ScalarItemContext* VtlParser::ListsContext::scalarItem(size_t i) { + return getRuleContext(i); +} + +tree::TerminalNode* VtlParser::ListsContext::GRPAREN() { + return getToken(VtlParser::GRPAREN, 0); +} + +std::vector VtlParser::ListsContext::COMMA() { + return getTokens(VtlParser::COMMA); +} + +tree::TerminalNode* VtlParser::ListsContext::COMMA(size_t i) { + return getToken(VtlParser::COMMA, i); +} + + +size_t VtlParser::ListsContext::getRuleIndex() const { + return VtlParser::RuleLists; +} + +void VtlParser::ListsContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterLists(this); +} + +void VtlParser::ListsContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitLists(this); +} + + +std::any VtlParser::ListsContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitLists(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ListsContext* VtlParser::lists() { + ListsContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 194, VtlParser::RuleLists); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1834); + match(VtlParser::GLPAREN); + setState(1835); + scalarItem(); + setState(1840); + _errHandler->sync(this); + _la = _input->LA(1); + while (_la == VtlParser::COMMA) { + setState(1836); + match(VtlParser::COMMA); + setState(1837); + scalarItem(); + setState(1842); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(1843); + match(VtlParser::GRPAREN); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ErCodeContext ------------------------------------------------------------------ + +VtlParser::ErCodeContext::ErCodeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ErCodeContext::ERRORCODE() { + return getToken(VtlParser::ERRORCODE, 0); +} + +VtlParser::ConstantContext* VtlParser::ErCodeContext::constant() { + return getRuleContext(0); +} + + +size_t VtlParser::ErCodeContext::getRuleIndex() const { + return VtlParser::RuleErCode; +} + +void VtlParser::ErCodeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterErCode(this); +} + +void VtlParser::ErCodeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitErCode(this); +} + + +std::any VtlParser::ErCodeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitErCode(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ErCodeContext* VtlParser::erCode() { + ErCodeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 196, VtlParser::RuleErCode); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1845); + match(VtlParser::ERRORCODE); + setState(1846); + constant(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ErLevelContext ------------------------------------------------------------------ + +VtlParser::ErLevelContext::ErLevelContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ErLevelContext::ERRORLEVEL() { + return getToken(VtlParser::ERRORLEVEL, 0); +} + +VtlParser::ConstantContext* VtlParser::ErLevelContext::constant() { + return getRuleContext(0); +} + + +size_t VtlParser::ErLevelContext::getRuleIndex() const { + return VtlParser::RuleErLevel; +} + +void VtlParser::ErLevelContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterErLevel(this); +} + +void VtlParser::ErLevelContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitErLevel(this); +} + + +std::any VtlParser::ErLevelContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitErLevel(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ErLevelContext* VtlParser::erLevel() { + ErLevelContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 198, VtlParser::RuleErLevel); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1848); + match(VtlParser::ERRORLEVEL); + setState(1849); + constant(); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComparisonOperandContext ------------------------------------------------------------------ + +VtlParser::ComparisonOperandContext::ComparisonOperandContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::MT() { + return getToken(VtlParser::MT, 0); +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::ME() { + return getToken(VtlParser::ME, 0); +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::LE() { + return getToken(VtlParser::LE, 0); +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::LT() { + return getToken(VtlParser::LT, 0); +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::EQ() { + return getToken(VtlParser::EQ, 0); +} + +tree::TerminalNode* VtlParser::ComparisonOperandContext::NEQ() { + return getToken(VtlParser::NEQ, 0); +} + + +size_t VtlParser::ComparisonOperandContext::getRuleIndex() const { + return VtlParser::RuleComparisonOperand; +} + +void VtlParser::ComparisonOperandContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComparisonOperand(this); +} + +void VtlParser::ComparisonOperandContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComparisonOperand(this); +} + + +std::any VtlParser::ComparisonOperandContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComparisonOperand(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ComparisonOperandContext* VtlParser::comparisonOperand() { + ComparisonOperandContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 200, VtlParser::RuleComparisonOperand); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1851); + _la = _input->LA(1); + if (!((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & 8064) != 0))) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OptionalExprContext ------------------------------------------------------------------ + +VtlParser::OptionalExprContext::OptionalExprContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ExprContext* VtlParser::OptionalExprContext::expr() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::OptionalExprContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + + +size_t VtlParser::OptionalExprContext::getRuleIndex() const { + return VtlParser::RuleOptionalExpr; +} + +void VtlParser::OptionalExprContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOptionalExpr(this); +} + +void VtlParser::OptionalExprContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOptionalExpr(this); +} + + +std::any VtlParser::OptionalExprContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOptionalExpr(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OptionalExprContext* VtlParser::optionalExpr() { + OptionalExprContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 202, VtlParser::RuleOptionalExpr); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1855); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LPAREN: + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::EVAL: + case VtlParser::IF: + case VtlParser::CASE: + case VtlParser::CURRENT_DATE: + case VtlParser::DATEDIFF: + case VtlParser::DATEADD: + case VtlParser::YEAR_OP: + case VtlParser::MONTH_OP: + case VtlParser::DAYOFMONTH: + case VtlParser::DAYOFYEAR: + case VtlParser::DAYTOYEAR: + case VtlParser::DAYTOMONTH: + case VtlParser::YEARTODAY: + case VtlParser::MONTHTODAY: + case VtlParser::NOT: + case VtlParser::BETWEEN: + case VtlParser::NULL_CONSTANT: + case VtlParser::ISNULL: + case VtlParser::UNION: + case VtlParser::SYMDIFF: + case VtlParser::INTERSECT: + case VtlParser::RANDOM: + case VtlParser::CHECK: + case VtlParser::EXISTS_IN: + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::LOG: + case VtlParser::TRUNC: + case VtlParser::ROUND: + case VtlParser::POWER: + case VtlParser::MOD: + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::SUBSTR: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::EXP: + case VtlParser::CHARSET_MATCH: + case VtlParser::NVL: + case VtlParser::HIERARCHY: + case VtlParser::LTRIM: + case VtlParser::RTRIM: + case VtlParser::INSTR: + case VtlParser::REPLACE: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: + case VtlParser::SETDIFF: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: + case VtlParser::LAG: + case VtlParser::LEAD: + case VtlParser::RATIO_TO_REPORT: + case VtlParser::FILL_TIME_SERIES: + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: + case VtlParser::TIMESHIFT: + case VtlParser::INNER_JOIN: + case VtlParser::LEFT_JOIN: + case VtlParser::CROSS_JOIN: + case VtlParser::FULL_JOIN: + case VtlParser::PERIOD_INDICATOR: + case VtlParser::TIME_AGG: + case VtlParser::CAST: + case VtlParser::CHECK_DATAPOINT: + case VtlParser::CHECK_HIERARCHY: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(1853); + expr(0); + break; + } + + case VtlParser::OPTIONAL: { + enterOuterAlt(_localctx, 2); + setState(1854); + match(VtlParser::OPTIONAL); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OptionalExprComponentContext ------------------------------------------------------------------ + +VtlParser::OptionalExprComponentContext::OptionalExprComponentContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::ExprComponentContext* VtlParser::OptionalExprComponentContext::exprComponent() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::OptionalExprComponentContext::OPTIONAL() { + return getToken(VtlParser::OPTIONAL, 0); +} + + +size_t VtlParser::OptionalExprComponentContext::getRuleIndex() const { + return VtlParser::RuleOptionalExprComponent; +} + +void VtlParser::OptionalExprComponentContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOptionalExprComponent(this); +} + +void VtlParser::OptionalExprComponentContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOptionalExprComponent(this); +} + + +std::any VtlParser::OptionalExprComponentContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOptionalExprComponent(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OptionalExprComponentContext* VtlParser::optionalExprComponent() { + OptionalExprComponentContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 204, VtlParser::RuleOptionalExprComponent); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1859); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::LPAREN: + case VtlParser::PLUS: + case VtlParser::MINUS: + case VtlParser::EVAL: + case VtlParser::IF: + case VtlParser::CASE: + case VtlParser::CURRENT_DATE: + case VtlParser::DATEDIFF: + case VtlParser::DATEADD: + case VtlParser::YEAR_OP: + case VtlParser::MONTH_OP: + case VtlParser::DAYOFMONTH: + case VtlParser::DAYOFYEAR: + case VtlParser::DAYTOYEAR: + case VtlParser::DAYTOMONTH: + case VtlParser::YEARTODAY: + case VtlParser::MONTHTODAY: + case VtlParser::NOT: + case VtlParser::BETWEEN: + case VtlParser::NULL_CONSTANT: + case VtlParser::ISNULL: + case VtlParser::RANDOM: + case VtlParser::RANK: + case VtlParser::MIN: + case VtlParser::MAX: + case VtlParser::ABS: + case VtlParser::LN: + case VtlParser::LOG: + case VtlParser::TRUNC: + case VtlParser::ROUND: + case VtlParser::POWER: + case VtlParser::MOD: + case VtlParser::LEN: + case VtlParser::TRIM: + case VtlParser::UCASE: + case VtlParser::LCASE: + case VtlParser::SUBSTR: + case VtlParser::SUM: + case VtlParser::AVG: + case VtlParser::MEDIAN: + case VtlParser::COUNT: + case VtlParser::EXP: + case VtlParser::CHARSET_MATCH: + case VtlParser::NVL: + case VtlParser::LTRIM: + case VtlParser::RTRIM: + case VtlParser::INSTR: + case VtlParser::REPLACE: + case VtlParser::CEIL: + case VtlParser::FLOOR: + case VtlParser::SQRT: + case VtlParser::STDDEV_POP: + case VtlParser::STDDEV_SAMP: + case VtlParser::VAR_POP: + case VtlParser::VAR_SAMP: + case VtlParser::FIRST_VALUE: + case VtlParser::LAST_VALUE: + case VtlParser::LAG: + case VtlParser::LEAD: + case VtlParser::RATIO_TO_REPORT: + case VtlParser::FILL_TIME_SERIES: + case VtlParser::FLOW_TO_STOCK: + case VtlParser::STOCK_TO_FLOW: + case VtlParser::TIMESHIFT: + case VtlParser::PERIOD_INDICATOR: + case VtlParser::TIME_AGG: + case VtlParser::CAST: + case VtlParser::INTEGER_CONSTANT: + case VtlParser::NUMBER_CONSTANT: + case VtlParser::BOOLEAN_CONSTANT: + case VtlParser::STRING_CONSTANT: + case VtlParser::IDENTIFIER: { + enterOuterAlt(_localctx, 1); + setState(1857); + exprComponent(0); + break; + } + + case VtlParser::OPTIONAL: { + enterOuterAlt(_localctx, 2); + setState(1858); + match(VtlParser::OPTIONAL); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ComponentRoleContext ------------------------------------------------------------------ + +VtlParser::ComponentRoleContext::ComponentRoleContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ComponentRoleContext::MEASURE() { + return getToken(VtlParser::MEASURE, 0); +} + +tree::TerminalNode* VtlParser::ComponentRoleContext::COMPONENT() { + return getToken(VtlParser::COMPONENT, 0); +} + +tree::TerminalNode* VtlParser::ComponentRoleContext::DIMENSION() { + return getToken(VtlParser::DIMENSION, 0); +} + +tree::TerminalNode* VtlParser::ComponentRoleContext::ATTRIBUTE() { + return getToken(VtlParser::ATTRIBUTE, 0); +} + +VtlParser::ViralAttributeContext* VtlParser::ComponentRoleContext::viralAttribute() { + return getRuleContext(0); +} + + +size_t VtlParser::ComponentRoleContext::getRuleIndex() const { + return VtlParser::RuleComponentRole; +} + +void VtlParser::ComponentRoleContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterComponentRole(this); +} + +void VtlParser::ComponentRoleContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitComponentRole(this); +} + + +std::any VtlParser::ComponentRoleContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitComponentRole(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ComponentRoleContext* VtlParser::componentRole() { + ComponentRoleContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 206, VtlParser::RuleComponentRole); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1866); + _errHandler->sync(this); + switch (_input->LA(1)) { + case VtlParser::MEASURE: { + enterOuterAlt(_localctx, 1); + setState(1861); + match(VtlParser::MEASURE); + break; + } + + case VtlParser::COMPONENT: { + enterOuterAlt(_localctx, 2); + setState(1862); + match(VtlParser::COMPONENT); + break; + } + + case VtlParser::DIMENSION: { + enterOuterAlt(_localctx, 3); + setState(1863); + match(VtlParser::DIMENSION); + break; + } + + case VtlParser::ATTRIBUTE: { + enterOuterAlt(_localctx, 4); + setState(1864); + match(VtlParser::ATTRIBUTE); + break; + } + + case VtlParser::VIRAL: { + enterOuterAlt(_localctx, 5); + setState(1865); + viralAttribute(); + break; + } + + default: + throw NoViableAltException(this); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ViralAttributeContext ------------------------------------------------------------------ + +VtlParser::ViralAttributeContext::ViralAttributeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ViralAttributeContext::VIRAL() { + return getToken(VtlParser::VIRAL, 0); +} + +tree::TerminalNode* VtlParser::ViralAttributeContext::ATTRIBUTE() { + return getToken(VtlParser::ATTRIBUTE, 0); +} + + +size_t VtlParser::ViralAttributeContext::getRuleIndex() const { + return VtlParser::RuleViralAttribute; +} + +void VtlParser::ViralAttributeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterViralAttribute(this); +} + +void VtlParser::ViralAttributeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitViralAttribute(this); +} + + +std::any VtlParser::ViralAttributeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitViralAttribute(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ViralAttributeContext* VtlParser::viralAttribute() { + ViralAttributeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 208, VtlParser::RuleViralAttribute); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1868); + match(VtlParser::VIRAL); + setState(1869); + match(VtlParser::ATTRIBUTE); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ValueDomainIDContext ------------------------------------------------------------------ + +VtlParser::ValueDomainIDContext::ValueDomainIDContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::ValueDomainIDContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::ValueDomainIDContext::getRuleIndex() const { + return VtlParser::RuleValueDomainID; +} + +void VtlParser::ValueDomainIDContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterValueDomainID(this); +} + +void VtlParser::ValueDomainIDContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitValueDomainID(this); +} + + +std::any VtlParser::ValueDomainIDContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitValueDomainID(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ValueDomainIDContext* VtlParser::valueDomainID() { + ValueDomainIDContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 210, VtlParser::RuleValueDomainID); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1871); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- OperatorIDContext ------------------------------------------------------------------ + +VtlParser::OperatorIDContext::OperatorIDContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::OperatorIDContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::OperatorIDContext::getRuleIndex() const { + return VtlParser::RuleOperatorID; +} + +void VtlParser::OperatorIDContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterOperatorID(this); +} + +void VtlParser::OperatorIDContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitOperatorID(this); +} + + +std::any VtlParser::OperatorIDContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitOperatorID(this); + else + return visitor->visitChildren(this); +} + +VtlParser::OperatorIDContext* VtlParser::operatorID() { + OperatorIDContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 212, VtlParser::RuleOperatorID); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1873); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RoutineNameContext ------------------------------------------------------------------ + +VtlParser::RoutineNameContext::RoutineNameContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RoutineNameContext::IDENTIFIER() { + return getToken(VtlParser::IDENTIFIER, 0); +} + + +size_t VtlParser::RoutineNameContext::getRuleIndex() const { + return VtlParser::RuleRoutineName; +} + +void VtlParser::RoutineNameContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRoutineName(this); +} + +void VtlParser::RoutineNameContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRoutineName(this); +} + + +std::any VtlParser::RoutineNameContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRoutineName(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RoutineNameContext* VtlParser::routineName() { + RoutineNameContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 214, VtlParser::RuleRoutineName); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1875); + match(VtlParser::IDENTIFIER); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- ConstantContext ------------------------------------------------------------------ + +VtlParser::ConstantContext::ConstantContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +VtlParser::SignedIntegerContext* VtlParser::ConstantContext::signedInteger() { + return getRuleContext(0); +} + +VtlParser::SignedNumberContext* VtlParser::ConstantContext::signedNumber() { + return getRuleContext(0); +} + +tree::TerminalNode* VtlParser::ConstantContext::BOOLEAN_CONSTANT() { + return getToken(VtlParser::BOOLEAN_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::ConstantContext::STRING_CONSTANT() { + return getToken(VtlParser::STRING_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::ConstantContext::NULL_CONSTANT() { + return getToken(VtlParser::NULL_CONSTANT, 0); +} + + +size_t VtlParser::ConstantContext::getRuleIndex() const { + return VtlParser::RuleConstant; +} + +void VtlParser::ConstantContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterConstant(this); +} + +void VtlParser::ConstantContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitConstant(this); +} + + +std::any VtlParser::ConstantContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitConstant(this); + else + return visitor->visitChildren(this); +} + +VtlParser::ConstantContext* VtlParser::constant() { + ConstantContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 216, VtlParser::RuleConstant); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(1882); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 201, _ctx)) { + case 1: { + enterOuterAlt(_localctx, 1); + setState(1877); + signedInteger(); + break; + } + + case 2: { + enterOuterAlt(_localctx, 2); + setState(1878); + signedNumber(); + break; + } + + case 3: { + enterOuterAlt(_localctx, 3); + setState(1879); + match(VtlParser::BOOLEAN_CONSTANT); + break; + } + + case 4: { + enterOuterAlt(_localctx, 4); + setState(1880); + match(VtlParser::STRING_CONSTANT); + break; + } + + case 5: { + enterOuterAlt(_localctx, 5); + setState(1881); + match(VtlParser::NULL_CONSTANT); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- BasicScalarTypeContext ------------------------------------------------------------------ + +VtlParser::BasicScalarTypeContext::BasicScalarTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::STRING() { + return getToken(VtlParser::STRING, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::INTEGER() { + return getToken(VtlParser::INTEGER, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::NUMBER() { + return getToken(VtlParser::NUMBER, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::BOOLEAN() { + return getToken(VtlParser::BOOLEAN, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::DATE() { + return getToken(VtlParser::DATE, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::TIME() { + return getToken(VtlParser::TIME, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::TIME_PERIOD() { + return getToken(VtlParser::TIME_PERIOD, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::DURATION() { + return getToken(VtlParser::DURATION, 0); +} + +tree::TerminalNode* VtlParser::BasicScalarTypeContext::SCALAR() { + return getToken(VtlParser::SCALAR, 0); +} + + +size_t VtlParser::BasicScalarTypeContext::getRuleIndex() const { + return VtlParser::RuleBasicScalarType; +} + +void VtlParser::BasicScalarTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterBasicScalarType(this); +} + +void VtlParser::BasicScalarTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitBasicScalarType(this); +} + + +std::any VtlParser::BasicScalarTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitBasicScalarType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::BasicScalarTypeContext* VtlParser::basicScalarType() { + BasicScalarTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 218, VtlParser::RuleBasicScalarType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1884); + _la = _input->LA(1); + if (!(((((_la - 168) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 168)) & 4398046511231) != 0) || _la == VtlParser::SCALAR)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- RetainTypeContext ------------------------------------------------------------------ + +VtlParser::RetainTypeContext::RetainTypeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* VtlParser::RetainTypeContext::BOOLEAN_CONSTANT() { + return getToken(VtlParser::BOOLEAN_CONSTANT, 0); +} + +tree::TerminalNode* VtlParser::RetainTypeContext::ALL() { + return getToken(VtlParser::ALL, 0); +} + + +size_t VtlParser::RetainTypeContext::getRuleIndex() const { + return VtlParser::RuleRetainType; +} + +void VtlParser::RetainTypeContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterRetainType(this); +} + +void VtlParser::RetainTypeContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitRetainType(this); +} + + +std::any VtlParser::RetainTypeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitRetainType(this); + else + return visitor->visitChildren(this); +} + +VtlParser::RetainTypeContext* VtlParser::retainType() { + RetainTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 220, VtlParser::RuleRetainType); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1886); + _la = _input->LA(1); + if (!(_la == VtlParser::ALL || _la == VtlParser::BOOLEAN_CONSTANT)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +bool VtlParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { + switch (ruleIndex) { + case 2: return exprSempred(antlrcpp::downCast(context), predicateIndex); + case 3: return exprComponentSempred(antlrcpp::downCast(context), predicateIndex); + + default: + break; + } + return true; +} + +bool VtlParser::exprSempred(ExprContext *_localctx, size_t predicateIndex) { + switch (predicateIndex) { + case 0: return precpred(_ctx, 10); + case 1: return precpred(_ctx, 9); + case 2: return precpred(_ctx, 8); + case 3: return precpred(_ctx, 6); + case 4: return precpred(_ctx, 5); + case 5: return precpred(_ctx, 13); + case 6: return precpred(_ctx, 12); + case 7: return precpred(_ctx, 7); + + default: + break; + } + return true; +} + +bool VtlParser::exprComponentSempred(ExprComponentContext *_localctx, size_t predicateIndex) { + switch (predicateIndex) { + case 8: return precpred(_ctx, 10); + case 9: return precpred(_ctx, 9); + case 10: return precpred(_ctx, 8); + case 11: return precpred(_ctx, 6); + case 12: return precpred(_ctx, 5); + case 13: return precpred(_ctx, 7); + + default: + break; + } + return true; +} + +void VtlParser::initialize() { +#if ANTLR4_USE_THREAD_LOCAL_CACHE + vtlParserInitialize(); +#else + ::antlr4::internal::call_once(vtlParserOnceFlag, vtlParserInitialize); +#endif +} diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.h new file mode 100644 index 000000000..1f75c20ea --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlParser.h @@ -0,0 +1,4573 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" + + + + +class VtlParser : public antlr4::Parser { +public: + enum { + LPAREN = 1, RPAREN = 2, QLPAREN = 3, QRPAREN = 4, GLPAREN = 5, GRPAREN = 6, + EQ = 7, LT = 8, MT = 9, ME = 10, NEQ = 11, LE = 12, PLUS = 13, MINUS = 14, + MUL = 15, DIV = 16, COMMA = 17, POINTER = 18, COLON = 19, ASSIGN = 20, + MEMBERSHIP = 21, EVAL = 22, IF = 23, CASE = 24, THEN = 25, ELSE = 26, + USING = 27, WITH = 28, CURRENT_DATE = 29, DATEDIFF = 30, DATEADD = 31, + YEAR_OP = 32, MONTH_OP = 33, DAYOFMONTH = 34, DAYOFYEAR = 35, DAYTOYEAR = 36, + DAYTOMONTH = 37, YEARTODAY = 38, MONTHTODAY = 39, ON = 40, DROP = 41, + KEEP = 42, CALC = 43, ATTRCALC = 44, RENAME = 45, AS = 46, AND = 47, + OR = 48, XOR = 49, NOT = 50, BETWEEN = 51, IN = 52, NOT_IN = 53, NULL_CONSTANT = 54, + ISNULL = 55, EX = 56, UNION = 57, DIFF = 58, SYMDIFF = 59, INTERSECT = 60, + RANDOM = 61, KEYS = 62, INTYEAR = 63, INTMONTH = 64, INTDAY = 65, CHECK = 66, + EXISTS_IN = 67, TO = 68, RETURN = 69, IMBALANCE = 70, ERRORCODE = 71, + ALL = 72, AGGREGATE = 73, ERRORLEVEL = 74, ORDER = 75, BY = 76, RANK = 77, + ASC = 78, DESC = 79, MIN = 80, MAX = 81, FIRST = 82, LAST = 83, INDEXOF = 84, + ABS = 85, KEY = 86, LN = 87, LOG = 88, TRUNC = 89, ROUND = 90, POWER = 91, + MOD = 92, LEN = 93, CONCAT = 94, TRIM = 95, UCASE = 96, LCASE = 97, + SUBSTR = 98, SUM = 99, AVG = 100, MEDIAN = 101, COUNT = 102, DIMENSION = 103, + MEASURE = 104, ATTRIBUTE = 105, FILTER = 106, MERGE = 107, EXP = 108, + ROLE = 109, VIRAL = 110, CHARSET_MATCH = 111, TYPE = 112, NVL = 113, + HIERARCHY = 114, OPTIONAL = 115, INVALID = 116, VALUE_DOMAIN = 117, + VARIABLE = 118, DATA = 119, STRUCTURE = 120, DATASET = 121, OPERATOR = 122, + DEFINE = 123, PUT_SYMBOL = 124, DATAPOINT = 125, HIERARCHICAL = 126, + RULESET = 127, RULE = 128, END = 129, ALTER_DATASET = 130, LTRIM = 131, + RTRIM = 132, INSTR = 133, REPLACE = 134, CEIL = 135, FLOOR = 136, SQRT = 137, + ANY = 138, SETDIFF = 139, STDDEV_POP = 140, STDDEV_SAMP = 141, VAR_POP = 142, + VAR_SAMP = 143, GROUP = 144, EXCEPT = 145, HAVING = 146, FIRST_VALUE = 147, + LAST_VALUE = 148, LAG = 149, LEAD = 150, RATIO_TO_REPORT = 151, OVER = 152, + PRECEDING = 153, FOLLOWING = 154, UNBOUNDED = 155, PARTITION = 156, + ROWS = 157, RANGE = 158, CURRENT = 159, VALID = 160, FILL_TIME_SERIES = 161, + FLOW_TO_STOCK = 162, STOCK_TO_FLOW = 163, TIMESHIFT = 164, MEASURES = 165, + NO_MEASURES = 166, CONDITION = 167, BOOLEAN = 168, DATE = 169, TIME_PERIOD = 170, + NUMBER = 171, STRING = 172, TIME = 173, INTEGER = 174, FLOAT = 175, + LIST = 176, RECORD = 177, RESTRICT = 178, YYYY = 179, MM = 180, DD = 181, + MAX_LENGTH = 182, REGEXP = 183, IS = 184, WHEN = 185, FROM = 186, AGGREGATES = 187, + POINTS = 188, POINT = 189, TOTAL = 190, PARTIAL = 191, ALWAYS = 192, + INNER_JOIN = 193, LEFT_JOIN = 194, CROSS_JOIN = 195, FULL_JOIN = 196, + MAPS_FROM = 197, MAPS_TO = 198, MAP_TO = 199, MAP_FROM = 200, RETURNS = 201, + PIVOT = 202, CUSTOMPIVOT = 203, UNPIVOT = 204, SUBSPACE = 205, APPLY = 206, + CONDITIONED = 207, PERIOD_INDICATOR = 208, SINGLE = 209, DURATION = 210, + TIME_AGG = 211, UNIT = 212, VALUE = 213, VALUEDOMAINS = 214, VARIABLES = 215, + INPUT = 216, OUTPUT = 217, CAST = 218, RULE_PRIORITY = 219, DATASET_PRIORITY = 220, + DEFAULT = 221, CHECK_DATAPOINT = 222, CHECK_HIERARCHY = 223, COMPUTED = 224, + NON_NULL = 225, NON_ZERO = 226, PARTIAL_NULL = 227, PARTIAL_ZERO = 228, + ALWAYS_NULL = 229, ALWAYS_ZERO = 230, COMPONENTS = 231, ALL_MEASURES = 232, + SCALAR = 233, COMPONENT = 234, DATAPOINT_ON_VD = 235, DATAPOINT_ON_VAR = 236, + HIERARCHICAL_ON_VD = 237, HIERARCHICAL_ON_VAR = 238, SET = 239, LANGUAGE = 240, + INTEGER_CONSTANT = 241, NUMBER_CONSTANT = 242, BOOLEAN_CONSTANT = 243, + STRING_CONSTANT = 244, IDENTIFIER = 245, WS = 246, EOL = 247, ML_COMMENT = 248, + SL_COMMENT = 249 + }; + + enum { + RuleStart = 0, RuleStatement = 1, RuleExpr = 2, RuleExprComponent = 3, + RuleFunctionsComponents = 4, RuleFunctions = 5, RuleDatasetClause = 6, + RuleRenameClause = 7, RuleAggrClause = 8, RuleFilterClause = 9, RuleCalcClause = 10, + RuleKeepOrDropClause = 11, RulePivotOrUnpivotClause = 12, RuleCustomPivotClause = 13, + RuleSubspaceClause = 14, RuleJoinOperators = 15, RuleDefOperators = 16, + RuleGenericOperators = 17, RuleGenericOperatorsComponent = 18, RuleParameterComponent = 19, + RuleParameter = 20, RuleStringOperators = 21, RuleStringOperatorsComponent = 22, + RuleNumericOperators = 23, RuleNumericOperatorsComponent = 24, RuleComparisonOperators = 25, + RuleComparisonOperatorsComponent = 26, RuleTimeOperators = 27, RuleTimeOperatorsComponent = 28, + RuleSetOperators = 29, RuleHierarchyOperators = 30, RuleValidationOperators = 31, + RuleConditionalOperators = 32, RuleConditionalOperatorsComponent = 33, + RuleAggrOperators = 34, RuleAggrOperatorsGrouping = 35, RuleAnFunction = 36, + RuleAnFunctionComponent = 37, RuleRenameClauseItem = 38, RuleAggregateClause = 39, + RuleAggrFunctionClause = 40, RuleCalcClauseItem = 41, RuleSubspaceClauseItem = 42, + RuleScalarItem = 43, RuleJoinClauseWithoutUsing = 44, RuleJoinClause = 45, + RuleJoinClauseItem = 46, RuleJoinBody = 47, RuleJoinApplyClause = 48, + RulePartitionByClause = 49, RuleOrderByClause = 50, RuleOrderByItem = 51, + RuleWindowingClause = 52, RuleSignedInteger = 53, RuleSignedNumber = 54, + RuleLimitClauseItem = 55, RuleGroupingClause = 56, RuleHavingClause = 57, + RuleParameterItem = 58, RuleOutputParameterType = 59, RuleOutputParameterTypeComponent = 60, + RuleInputParameterType = 61, RuleRulesetType = 62, RuleScalarType = 63, + RuleComponentType = 64, RuleDatasetType = 65, RuleEvalDatasetType = 66, + RuleScalarSetType = 67, RuleDpRuleset = 68, RuleHrRuleset = 69, RuleValueDomainName = 70, + RuleRulesetID = 71, RuleRulesetSignature = 72, RuleSignature = 73, RuleRuleClauseDatapoint = 74, + RuleRuleItemDatapoint = 75, RuleRuleClauseHierarchical = 76, RuleRuleItemHierarchical = 77, + RuleHierRuleSignature = 78, RuleValueDomainSignature = 79, RuleCodeItemRelation = 80, + RuleCodeItemRelationClause = 81, RuleValueDomainValue = 82, RuleScalarTypeConstraint = 83, + RuleCompConstraint = 84, RuleMultModifier = 85, RuleValidationOutput = 86, + RuleValidationMode = 87, RuleConditionClause = 88, RuleInputMode = 89, + RuleImbalanceExpr = 90, RuleInputModeHierarchy = 91, RuleOutputModeHierarchy = 92, + RuleAlias = 93, RuleVarID = 94, RuleSimpleComponentId = 95, RuleComponentID = 96, + RuleLists = 97, RuleErCode = 98, RuleErLevel = 99, RuleComparisonOperand = 100, + RuleOptionalExpr = 101, RuleOptionalExprComponent = 102, RuleComponentRole = 103, + RuleViralAttribute = 104, RuleValueDomainID = 105, RuleOperatorID = 106, + RuleRoutineName = 107, RuleConstant = 108, RuleBasicScalarType = 109, + RuleRetainType = 110 + }; + + explicit VtlParser(antlr4::TokenStream *input); + + VtlParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options); + + ~VtlParser() override; + + std::string getGrammarFileName() const override; + + const antlr4::atn::ATN& getATN() const override; + + const std::vector& getRuleNames() const override; + + const antlr4::dfa::Vocabulary& getVocabulary() const override; + + antlr4::atn::SerializedATNView getSerializedATN() const override; + + + class StartContext; + class StatementContext; + class ExprContext; + class ExprComponentContext; + class FunctionsComponentsContext; + class FunctionsContext; + class DatasetClauseContext; + class RenameClauseContext; + class AggrClauseContext; + class FilterClauseContext; + class CalcClauseContext; + class KeepOrDropClauseContext; + class PivotOrUnpivotClauseContext; + class CustomPivotClauseContext; + class SubspaceClauseContext; + class JoinOperatorsContext; + class DefOperatorsContext; + class GenericOperatorsContext; + class GenericOperatorsComponentContext; + class ParameterComponentContext; + class ParameterContext; + class StringOperatorsContext; + class StringOperatorsComponentContext; + class NumericOperatorsContext; + class NumericOperatorsComponentContext; + class ComparisonOperatorsContext; + class ComparisonOperatorsComponentContext; + class TimeOperatorsContext; + class TimeOperatorsComponentContext; + class SetOperatorsContext; + class HierarchyOperatorsContext; + class ValidationOperatorsContext; + class ConditionalOperatorsContext; + class ConditionalOperatorsComponentContext; + class AggrOperatorsContext; + class AggrOperatorsGroupingContext; + class AnFunctionContext; + class AnFunctionComponentContext; + class RenameClauseItemContext; + class AggregateClauseContext; + class AggrFunctionClauseContext; + class CalcClauseItemContext; + class SubspaceClauseItemContext; + class ScalarItemContext; + class JoinClauseWithoutUsingContext; + class JoinClauseContext; + class JoinClauseItemContext; + class JoinBodyContext; + class JoinApplyClauseContext; + class PartitionByClauseContext; + class OrderByClauseContext; + class OrderByItemContext; + class WindowingClauseContext; + class SignedIntegerContext; + class SignedNumberContext; + class LimitClauseItemContext; + class GroupingClauseContext; + class HavingClauseContext; + class ParameterItemContext; + class OutputParameterTypeContext; + class OutputParameterTypeComponentContext; + class InputParameterTypeContext; + class RulesetTypeContext; + class ScalarTypeContext; + class ComponentTypeContext; + class DatasetTypeContext; + class EvalDatasetTypeContext; + class ScalarSetTypeContext; + class DpRulesetContext; + class HrRulesetContext; + class ValueDomainNameContext; + class RulesetIDContext; + class RulesetSignatureContext; + class SignatureContext; + class RuleClauseDatapointContext; + class RuleItemDatapointContext; + class RuleClauseHierarchicalContext; + class RuleItemHierarchicalContext; + class HierRuleSignatureContext; + class ValueDomainSignatureContext; + class CodeItemRelationContext; + class CodeItemRelationClauseContext; + class ValueDomainValueContext; + class ScalarTypeConstraintContext; + class CompConstraintContext; + class MultModifierContext; + class ValidationOutputContext; + class ValidationModeContext; + class ConditionClauseContext; + class InputModeContext; + class ImbalanceExprContext; + class InputModeHierarchyContext; + class OutputModeHierarchyContext; + class AliasContext; + class VarIDContext; + class SimpleComponentIdContext; + class ComponentIDContext; + class ListsContext; + class ErCodeContext; + class ErLevelContext; + class ComparisonOperandContext; + class OptionalExprContext; + class OptionalExprComponentContext; + class ComponentRoleContext; + class ViralAttributeContext; + class ValueDomainIDContext; + class OperatorIDContext; + class RoutineNameContext; + class ConstantContext; + class BasicScalarTypeContext; + class RetainTypeContext; + + class StartContext : public antlr4::ParserRuleContext { + public: + StartContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *EOF(); + std::vector statement(); + StatementContext* statement(size_t i); + std::vector EOL(); + antlr4::tree::TerminalNode* EOL(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + StartContext* start(); + + class StatementContext : public antlr4::ParserRuleContext { + public: + StatementContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + StatementContext() = default; + void copyFrom(StatementContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class DefineExpressionContext : public StatementContext { + public: + DefineExpressionContext(StatementContext *ctx); + + DefOperatorsContext *defOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TemporaryAssignmentContext : public StatementContext { + public: + TemporaryAssignmentContext(StatementContext *ctx); + + VarIDContext *varID(); + antlr4::tree::TerminalNode *ASSIGN(); + ExprContext *expr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class PersistAssignmentContext : public StatementContext { + public: + PersistAssignmentContext(StatementContext *ctx); + + VarIDContext *varID(); + antlr4::tree::TerminalNode *PUT_SYMBOL(); + ExprContext *expr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + StatementContext* statement(); + + class ExprContext : public antlr4::ParserRuleContext { + public: + ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ExprContext() = default; + void copyFrom(ExprContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class VarIdExprContext : public ExprContext { + public: + VarIdExprContext(ExprContext *ctx); + + VarIDContext *varID(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class MembershipExprContext : public ExprContext { + public: + MembershipExprContext(ExprContext *ctx); + + ExprContext *expr(); + antlr4::tree::TerminalNode *MEMBERSHIP(); + SimpleComponentIdContext *simpleComponentId(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class InNotInExprContext : public ExprContext { + public: + InNotInExprContext(ExprContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::Token *op = nullptr; + ExprContext *expr(); + antlr4::tree::TerminalNode *IN(); + antlr4::tree::TerminalNode *NOT_IN(); + ListsContext *lists(); + ValueDomainIDContext *valueDomainID(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class BooleanExprContext : public ExprContext { + public: + BooleanExprContext(ExprContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprContext *right = nullptr; + std::vector expr(); + ExprContext* expr(size_t i); + antlr4::tree::TerminalNode *AND(); + antlr4::tree::TerminalNode *OR(); + antlr4::tree::TerminalNode *XOR(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ComparisonExprContext : public ExprContext { + public: + ComparisonExprContext(ExprContext *ctx); + + VtlParser::ExprContext *left = nullptr; + VtlParser::ComparisonOperandContext *op = nullptr; + VtlParser::ExprContext *right = nullptr; + std::vector expr(); + ExprContext* expr(size_t i); + ComparisonOperandContext *comparisonOperand(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryExprContext : public ExprContext { + public: + UnaryExprContext(ExprContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::ExprContext *right = nullptr; + ExprContext *expr(); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *NOT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FunctionsExpressionContext : public ExprContext { + public: + FunctionsExpressionContext(ExprContext *ctx); + + FunctionsContext *functions(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class IfExprContext : public ExprContext { + public: + IfExprContext(ExprContext *ctx); + + VtlParser::ExprContext *conditionalExpr = nullptr; + VtlParser::ExprContext *thenExpr = nullptr; + VtlParser::ExprContext *elseExpr = nullptr; + antlr4::tree::TerminalNode *IF(); + antlr4::tree::TerminalNode *THEN(); + antlr4::tree::TerminalNode *ELSE(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ClauseExprContext : public ExprContext { + public: + ClauseExprContext(ExprContext *ctx); + + VtlParser::ExprContext *dataset = nullptr; + VtlParser::DatasetClauseContext *clause = nullptr; + antlr4::tree::TerminalNode *QLPAREN(); + antlr4::tree::TerminalNode *QRPAREN(); + ExprContext *expr(); + DatasetClauseContext *datasetClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CaseExprContext : public ExprContext { + public: + CaseExprContext(ExprContext *ctx); + + VtlParser::ExprContext *exprContext = nullptr; + std::vector condExpr; + std::vector thenExpr; + VtlParser::ExprContext *elseExpr = nullptr; + antlr4::tree::TerminalNode *CASE(); + antlr4::tree::TerminalNode *ELSE(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector WHEN(); + antlr4::tree::TerminalNode* WHEN(size_t i); + std::vector THEN(); + antlr4::tree::TerminalNode* THEN(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ArithmeticExprContext : public ExprContext { + public: + ArithmeticExprContext(ExprContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprContext *right = nullptr; + std::vector expr(); + ExprContext* expr(size_t i); + antlr4::tree::TerminalNode *MUL(); + antlr4::tree::TerminalNode *DIV(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ParenthesisExprContext : public ExprContext { + public: + ParenthesisExprContext(ExprContext *ctx); + + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ConstantExprContext : public ExprContext { + public: + ConstantExprContext(ExprContext *ctx); + + ConstantContext *constant(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ArithmeticExprOrConcatContext : public ExprContext { + public: + ArithmeticExprOrConcatContext(ExprContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprContext *right = nullptr; + std::vector expr(); + ExprContext* expr(size_t i); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *CONCAT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ExprContext* expr(); + ExprContext* expr(int precedence); + class ExprComponentContext : public antlr4::ParserRuleContext { + public: + ExprComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ExprComponentContext() = default; + void copyFrom(ExprComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class ArithmeticExprCompContext : public ExprComponentContext { + public: + ArithmeticExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + antlr4::tree::TerminalNode *MUL(); + antlr4::tree::TerminalNode *DIV(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class IfExprCompContext : public ExprComponentContext { + public: + IfExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *conditionalExpr = nullptr; + VtlParser::ExprComponentContext *thenExpr = nullptr; + VtlParser::ExprComponentContext *elseExpr = nullptr; + antlr4::tree::TerminalNode *IF(); + antlr4::tree::TerminalNode *THEN(); + antlr4::tree::TerminalNode *ELSE(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ComparisonExprCompContext : public ExprComponentContext { + public: + ComparisonExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + ComparisonOperandContext *comparisonOperand(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FunctionsExpressionCompContext : public ExprComponentContext { + public: + FunctionsExpressionCompContext(ExprComponentContext *ctx); + + FunctionsComponentsContext *functionsComponents(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CompIdContext : public ExprComponentContext { + public: + CompIdContext(ExprComponentContext *ctx); + + ComponentIDContext *componentID(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ConstantExprCompContext : public ExprComponentContext { + public: + ConstantExprCompContext(ExprComponentContext *ctx); + + ConstantContext *constant(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ArithmeticExprOrConcatCompContext : public ExprComponentContext { + public: + ArithmeticExprOrConcatCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *CONCAT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ParenthesisExprCompContext : public ExprComponentContext { + public: + ParenthesisExprCompContext(ExprComponentContext *ctx); + + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class InNotInExprCompContext : public ExprComponentContext { + public: + InNotInExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + antlr4::Token *op = nullptr; + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *IN(); + antlr4::tree::TerminalNode *NOT_IN(); + ListsContext *lists(); + ValueDomainIDContext *valueDomainID(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryExprCompContext : public ExprComponentContext { + public: + UnaryExprCompContext(ExprComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *NOT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CaseExprCompContext : public ExprComponentContext { + public: + CaseExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *exprComponentContext = nullptr; + std::vector condExpr; + std::vector thenExpr; + VtlParser::ExprComponentContext *elseExpr = nullptr; + antlr4::tree::TerminalNode *CASE(); + antlr4::tree::TerminalNode *ELSE(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + std::vector WHEN(); + antlr4::tree::TerminalNode* WHEN(size_t i); + std::vector THEN(); + antlr4::tree::TerminalNode* THEN(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class BooleanExprCompContext : public ExprComponentContext { + public: + BooleanExprCompContext(ExprComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + antlr4::Token *op = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + antlr4::tree::TerminalNode *AND(); + antlr4::tree::TerminalNode *OR(); + antlr4::tree::TerminalNode *XOR(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ExprComponentContext* exprComponent(); + ExprComponentContext* exprComponent(int precedence); + class FunctionsComponentsContext : public antlr4::ParserRuleContext { + public: + FunctionsComponentsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + FunctionsComponentsContext() = default; + void copyFrom(FunctionsComponentsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class NumericFunctionsComponentsContext : public FunctionsComponentsContext { + public: + NumericFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + NumericOperatorsComponentContext *numericOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class StringFunctionsComponentsContext : public FunctionsComponentsContext { + public: + StringFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + StringOperatorsComponentContext *stringOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ComparisonFunctionsComponentsContext : public FunctionsComponentsContext { + public: + ComparisonFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + ComparisonOperatorsComponentContext *comparisonOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeFunctionsComponentsContext : public FunctionsComponentsContext { + public: + TimeFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + TimeOperatorsComponentContext *timeOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class GenericFunctionsComponentsContext : public FunctionsComponentsContext { + public: + GenericFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + GenericOperatorsComponentContext *genericOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AnalyticFunctionsComponentsContext : public FunctionsComponentsContext { + public: + AnalyticFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + AnFunctionComponentContext *anFunctionComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ConditionalFunctionsComponentsContext : public FunctionsComponentsContext { + public: + ConditionalFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + ConditionalOperatorsComponentContext *conditionalOperatorsComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AggregateFunctionsComponentsContext : public FunctionsComponentsContext { + public: + AggregateFunctionsComponentsContext(FunctionsComponentsContext *ctx); + + AggrOperatorsContext *aggrOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + FunctionsComponentsContext* functionsComponents(); + + class FunctionsContext : public antlr4::ParserRuleContext { + public: + FunctionsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + FunctionsContext() = default; + void copyFrom(FunctionsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class HierarchyFunctionsContext : public FunctionsContext { + public: + HierarchyFunctionsContext(FunctionsContext *ctx); + + HierarchyOperatorsContext *hierarchyOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class StringFunctionsContext : public FunctionsContext { + public: + StringFunctionsContext(FunctionsContext *ctx); + + StringOperatorsContext *stringOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ValidationFunctionsContext : public FunctionsContext { + public: + ValidationFunctionsContext(FunctionsContext *ctx); + + ValidationOperatorsContext *validationOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class GenericFunctionsContext : public FunctionsContext { + public: + GenericFunctionsContext(FunctionsContext *ctx); + + GenericOperatorsContext *genericOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ConditionalFunctionsContext : public FunctionsContext { + public: + ConditionalFunctionsContext(FunctionsContext *ctx); + + ConditionalOperatorsContext *conditionalOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AggregateFunctionsContext : public FunctionsContext { + public: + AggregateFunctionsContext(FunctionsContext *ctx); + + AggrOperatorsGroupingContext *aggrOperatorsGrouping(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class JoinFunctionsContext : public FunctionsContext { + public: + JoinFunctionsContext(FunctionsContext *ctx); + + JoinOperatorsContext *joinOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ComparisonFunctionsContext : public FunctionsContext { + public: + ComparisonFunctionsContext(FunctionsContext *ctx); + + ComparisonOperatorsContext *comparisonOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class NumericFunctionsContext : public FunctionsContext { + public: + NumericFunctionsContext(FunctionsContext *ctx); + + NumericOperatorsContext *numericOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeFunctionsContext : public FunctionsContext { + public: + TimeFunctionsContext(FunctionsContext *ctx); + + TimeOperatorsContext *timeOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class SetFunctionsContext : public FunctionsContext { + public: + SetFunctionsContext(FunctionsContext *ctx); + + SetOperatorsContext *setOperators(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AnalyticFunctionsContext : public FunctionsContext { + public: + AnalyticFunctionsContext(FunctionsContext *ctx); + + AnFunctionContext *anFunction(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + FunctionsContext* functions(); + + class DatasetClauseContext : public antlr4::ParserRuleContext { + public: + DatasetClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + RenameClauseContext *renameClause(); + AggrClauseContext *aggrClause(); + FilterClauseContext *filterClause(); + CalcClauseContext *calcClause(); + KeepOrDropClauseContext *keepOrDropClause(); + PivotOrUnpivotClauseContext *pivotOrUnpivotClause(); + SubspaceClauseContext *subspaceClause(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + DatasetClauseContext* datasetClause(); + + class RenameClauseContext : public antlr4::ParserRuleContext { + public: + RenameClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *RENAME(); + std::vector renameClauseItem(); + RenameClauseItemContext* renameClauseItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RenameClauseContext* renameClause(); + + class AggrClauseContext : public antlr4::ParserRuleContext { + public: + AggrClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *AGGREGATE(); + AggregateClauseContext *aggregateClause(); + GroupingClauseContext *groupingClause(); + HavingClauseContext *havingClause(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + AggrClauseContext* aggrClause(); + + class FilterClauseContext : public antlr4::ParserRuleContext { + public: + FilterClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *FILTER(); + ExprComponentContext *exprComponent(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + FilterClauseContext* filterClause(); + + class CalcClauseContext : public antlr4::ParserRuleContext { + public: + CalcClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *CALC(); + std::vector calcClauseItem(); + CalcClauseItemContext* calcClauseItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CalcClauseContext* calcClause(); + + class KeepOrDropClauseContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *op = nullptr; + KeepOrDropClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + antlr4::tree::TerminalNode *KEEP(); + antlr4::tree::TerminalNode *DROP(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + KeepOrDropClauseContext* keepOrDropClause(); + + class PivotOrUnpivotClauseContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *op = nullptr; + VtlParser::ComponentIDContext *id_ = nullptr; + VtlParser::ComponentIDContext *mea = nullptr; + PivotOrUnpivotClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *COMMA(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + antlr4::tree::TerminalNode *PIVOT(); + antlr4::tree::TerminalNode *UNPIVOT(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + PivotOrUnpivotClauseContext* pivotOrUnpivotClause(); + + class CustomPivotClauseContext : public antlr4::ParserRuleContext { + public: + VtlParser::ComponentIDContext *id_ = nullptr; + VtlParser::ComponentIDContext *mea = nullptr; + CustomPivotClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *CUSTOMPIVOT(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *IN(); + std::vector constant(); + ConstantContext* constant(size_t i); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CustomPivotClauseContext* customPivotClause(); + + class SubspaceClauseContext : public antlr4::ParserRuleContext { + public: + SubspaceClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *SUBSPACE(); + std::vector subspaceClauseItem(); + SubspaceClauseItemContext* subspaceClauseItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SubspaceClauseContext* subspaceClause(); + + class JoinOperatorsContext : public antlr4::ParserRuleContext { + public: + JoinOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + JoinOperatorsContext() = default; + void copyFrom(JoinOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class JoinExprContext : public JoinOperatorsContext { + public: + JoinExprContext(JoinOperatorsContext *ctx); + + antlr4::Token *joinKeyword = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + JoinClauseContext *joinClause(); + JoinBodyContext *joinBody(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *INNER_JOIN(); + antlr4::tree::TerminalNode *LEFT_JOIN(); + JoinClauseWithoutUsingContext *joinClauseWithoutUsing(); + antlr4::tree::TerminalNode *FULL_JOIN(); + antlr4::tree::TerminalNode *CROSS_JOIN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + JoinOperatorsContext* joinOperators(); + + class DefOperatorsContext : public antlr4::ParserRuleContext { + public: + DefOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + DefOperatorsContext() = default; + void copyFrom(DefOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class DefOperatorContext : public DefOperatorsContext { + public: + DefOperatorContext(DefOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DEFINE(); + std::vector OPERATOR(); + antlr4::tree::TerminalNode* OPERATOR(size_t i); + OperatorIDContext *operatorID(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *IS(); + antlr4::tree::TerminalNode *END(); + ExprContext *expr(); + std::vector parameterItem(); + ParameterItemContext* parameterItem(size_t i); + antlr4::tree::TerminalNode *RETURNS(); + OutputParameterTypeContext *outputParameterType(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DefHierarchicalContext : public DefOperatorsContext { + public: + DefHierarchicalContext(DefOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DEFINE(); + std::vector HIERARCHICAL(); + antlr4::tree::TerminalNode* HIERARCHICAL(size_t i); + std::vector RULESET(); + antlr4::tree::TerminalNode* RULESET(size_t i); + RulesetIDContext *rulesetID(); + antlr4::tree::TerminalNode *LPAREN(); + HierRuleSignatureContext *hierRuleSignature(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *IS(); + RuleClauseHierarchicalContext *ruleClauseHierarchical(); + antlr4::tree::TerminalNode *END(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DefDatapointRulesetContext : public DefOperatorsContext { + public: + DefDatapointRulesetContext(DefOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DEFINE(); + std::vector DATAPOINT(); + antlr4::tree::TerminalNode* DATAPOINT(size_t i); + std::vector RULESET(); + antlr4::tree::TerminalNode* RULESET(size_t i); + RulesetIDContext *rulesetID(); + antlr4::tree::TerminalNode *LPAREN(); + RulesetSignatureContext *rulesetSignature(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *IS(); + RuleClauseDatapointContext *ruleClauseDatapoint(); + antlr4::tree::TerminalNode *END(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + DefOperatorsContext* defOperators(); + + class GenericOperatorsContext : public antlr4::ParserRuleContext { + public: + GenericOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + GenericOperatorsContext() = default; + void copyFrom(GenericOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class EvalAtomContext : public GenericOperatorsContext { + public: + EvalAtomContext(GenericOperatorsContext *ctx); + + antlr4::tree::TerminalNode *EVAL(); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + RoutineNameContext *routineName(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + std::vector varID(); + VarIDContext* varID(size_t i); + std::vector scalarItem(); + ScalarItemContext* scalarItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *LANGUAGE(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + antlr4::tree::TerminalNode *RETURNS(); + EvalDatasetTypeContext *evalDatasetType(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CastExprDatasetContext : public GenericOperatorsContext { + public: + CastExprDatasetContext(GenericOperatorsContext *ctx); + + antlr4::tree::TerminalNode *CAST(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + BasicScalarTypeContext *basicScalarType(); + ValueDomainNameContext *valueDomainName(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CallDatasetContext : public GenericOperatorsContext { + public: + CallDatasetContext(GenericOperatorsContext *ctx); + + OperatorIDContext *operatorID(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector parameter(); + ParameterContext* parameter(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + GenericOperatorsContext* genericOperators(); + + class GenericOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + GenericOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + GenericOperatorsComponentContext() = default; + void copyFrom(GenericOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class EvalAtomComponentContext : public GenericOperatorsComponentContext { + public: + EvalAtomComponentContext(GenericOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *EVAL(); + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + RoutineNameContext *routineName(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + std::vector scalarItem(); + ScalarItemContext* scalarItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *LANGUAGE(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + antlr4::tree::TerminalNode *RETURNS(); + OutputParameterTypeComponentContext *outputParameterTypeComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CastExprComponentContext : public GenericOperatorsComponentContext { + public: + CastExprComponentContext(GenericOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *CAST(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + BasicScalarTypeContext *basicScalarType(); + ValueDomainNameContext *valueDomainName(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CallComponentContext : public GenericOperatorsComponentContext { + public: + CallComponentContext(GenericOperatorsComponentContext *ctx); + + OperatorIDContext *operatorID(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector parameterComponent(); + ParameterComponentContext* parameterComponent(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + GenericOperatorsComponentContext* genericOperatorsComponent(); + + class ParameterComponentContext : public antlr4::ParserRuleContext { + public: + ParameterComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *OPTIONAL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ParameterComponentContext* parameterComponent(); + + class ParameterContext : public antlr4::ParserRuleContext { + public: + ParameterContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ExprContext *expr(); + antlr4::tree::TerminalNode *OPTIONAL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ParameterContext* parameter(); + + class StringOperatorsContext : public antlr4::ParserRuleContext { + public: + StringOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + StringOperatorsContext() = default; + void copyFrom(StringOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class InstrAtomContext : public StringOperatorsContext { + public: + InstrAtomContext(StringOperatorsContext *ctx); + + VtlParser::ExprContext *pattern = nullptr; + VtlParser::OptionalExprContext *startParameter = nullptr; + VtlParser::OptionalExprContext *occurrenceParameter = nullptr; + antlr4::tree::TerminalNode *INSTR(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector optionalExpr(); + OptionalExprContext* optionalExpr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryStringFunctionContext : public StringOperatorsContext { + public: + UnaryStringFunctionContext(StringOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *TRIM(); + antlr4::tree::TerminalNode *LTRIM(); + antlr4::tree::TerminalNode *RTRIM(); + antlr4::tree::TerminalNode *UCASE(); + antlr4::tree::TerminalNode *LCASE(); + antlr4::tree::TerminalNode *LEN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class SubstrAtomContext : public StringOperatorsContext { + public: + SubstrAtomContext(StringOperatorsContext *ctx); + + VtlParser::OptionalExprContext *startParameter = nullptr; + VtlParser::OptionalExprContext *endParameter = nullptr; + antlr4::tree::TerminalNode *SUBSTR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + std::vector optionalExpr(); + OptionalExprContext* optionalExpr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ReplaceAtomContext : public StringOperatorsContext { + public: + ReplaceAtomContext(StringOperatorsContext *ctx); + + VtlParser::ExprContext *param = nullptr; + antlr4::tree::TerminalNode *REPLACE(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + OptionalExprContext *optionalExpr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + StringOperatorsContext* stringOperators(); + + class StringOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + StringOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + StringOperatorsComponentContext() = default; + void copyFrom(StringOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class ReplaceAtomComponentContext : public StringOperatorsComponentContext { + public: + ReplaceAtomComponentContext(StringOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *param = nullptr; + antlr4::tree::TerminalNode *REPLACE(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + OptionalExprComponentContext *optionalExprComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryStringFunctionComponentContext : public StringOperatorsComponentContext { + public: + UnaryStringFunctionComponentContext(StringOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *TRIM(); + antlr4::tree::TerminalNode *LTRIM(); + antlr4::tree::TerminalNode *RTRIM(); + antlr4::tree::TerminalNode *UCASE(); + antlr4::tree::TerminalNode *LCASE(); + antlr4::tree::TerminalNode *LEN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class SubstrAtomComponentContext : public StringOperatorsComponentContext { + public: + SubstrAtomComponentContext(StringOperatorsComponentContext *ctx); + + VtlParser::OptionalExprComponentContext *startParameter = nullptr; + VtlParser::OptionalExprComponentContext *endParameter = nullptr; + antlr4::tree::TerminalNode *SUBSTR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + std::vector optionalExprComponent(); + OptionalExprComponentContext* optionalExprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class InstrAtomComponentContext : public StringOperatorsComponentContext { + public: + InstrAtomComponentContext(StringOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *pattern = nullptr; + VtlParser::OptionalExprComponentContext *startParameter = nullptr; + VtlParser::OptionalExprComponentContext *occurrenceParameter = nullptr; + antlr4::tree::TerminalNode *INSTR(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector optionalExprComponent(); + OptionalExprComponentContext* optionalExprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + StringOperatorsComponentContext* stringOperatorsComponent(); + + class NumericOperatorsContext : public antlr4::ParserRuleContext { + public: + NumericOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + NumericOperatorsContext() = default; + void copyFrom(NumericOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class UnaryNumericContext : public NumericOperatorsContext { + public: + UnaryNumericContext(NumericOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *CEIL(); + antlr4::tree::TerminalNode *FLOOR(); + antlr4::tree::TerminalNode *ABS(); + antlr4::tree::TerminalNode *EXP(); + antlr4::tree::TerminalNode *LN(); + antlr4::tree::TerminalNode *SQRT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryWithOptionalNumericContext : public NumericOperatorsContext { + public: + UnaryWithOptionalNumericContext(NumericOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *ROUND(); + antlr4::tree::TerminalNode *TRUNC(); + antlr4::tree::TerminalNode *COMMA(); + OptionalExprContext *optionalExpr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class BinaryNumericContext : public NumericOperatorsContext { + public: + BinaryNumericContext(NumericOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::ExprContext *left = nullptr; + VtlParser::ExprContext *right = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + antlr4::tree::TerminalNode *MOD(); + antlr4::tree::TerminalNode *POWER(); + antlr4::tree::TerminalNode *LOG(); + antlr4::tree::TerminalNode *RANDOM(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + NumericOperatorsContext* numericOperators(); + + class NumericOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + NumericOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + NumericOperatorsComponentContext() = default; + void copyFrom(NumericOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class UnaryNumericComponentContext : public NumericOperatorsComponentContext { + public: + UnaryNumericComponentContext(NumericOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *CEIL(); + antlr4::tree::TerminalNode *FLOOR(); + antlr4::tree::TerminalNode *ABS(); + antlr4::tree::TerminalNode *EXP(); + antlr4::tree::TerminalNode *LN(); + antlr4::tree::TerminalNode *SQRT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class BinaryNumericComponentContext : public NumericOperatorsComponentContext { + public: + BinaryNumericComponentContext(NumericOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::ExprComponentContext *left = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + antlr4::tree::TerminalNode *MOD(); + antlr4::tree::TerminalNode *POWER(); + antlr4::tree::TerminalNode *LOG(); + antlr4::tree::TerminalNode *RANDOM(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnaryWithOptionalNumericComponentContext : public NumericOperatorsComponentContext { + public: + UnaryWithOptionalNumericComponentContext(NumericOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *ROUND(); + antlr4::tree::TerminalNode *TRUNC(); + antlr4::tree::TerminalNode *COMMA(); + OptionalExprComponentContext *optionalExprComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + NumericOperatorsComponentContext* numericOperatorsComponent(); + + class ComparisonOperatorsContext : public antlr4::ParserRuleContext { + public: + ComparisonOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ComparisonOperatorsContext() = default; + void copyFrom(ComparisonOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class BetweenAtomContext : public ComparisonOperatorsContext { + public: + BetweenAtomContext(ComparisonOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + VtlParser::ExprContext *from_ = nullptr; + VtlParser::ExprContext *to_ = nullptr; + antlr4::tree::TerminalNode *BETWEEN(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CharsetMatchAtomContext : public ComparisonOperatorsContext { + public: + CharsetMatchAtomContext(ComparisonOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + VtlParser::ExprContext *pattern = nullptr; + antlr4::tree::TerminalNode *CHARSET_MATCH(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class IsNullAtomContext : public ComparisonOperatorsContext { + public: + IsNullAtomContext(ComparisonOperatorsContext *ctx); + + antlr4::tree::TerminalNode *ISNULL(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ExistInAtomContext : public ComparisonOperatorsContext { + public: + ExistInAtomContext(ComparisonOperatorsContext *ctx); + + VtlParser::ExprContext *left = nullptr; + VtlParser::ExprContext *right = nullptr; + antlr4::tree::TerminalNode *EXISTS_IN(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + RetainTypeContext *retainType(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ComparisonOperatorsContext* comparisonOperators(); + + class ComparisonOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + ComparisonOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ComparisonOperatorsComponentContext() = default; + void copyFrom(ComparisonOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class IsNullAtomComponentContext : public ComparisonOperatorsComponentContext { + public: + IsNullAtomComponentContext(ComparisonOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *ISNULL(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CharsetMatchAtomComponentContext : public ComparisonOperatorsComponentContext { + public: + CharsetMatchAtomComponentContext(ComparisonOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *op = nullptr; + VtlParser::ExprComponentContext *pattern = nullptr; + antlr4::tree::TerminalNode *CHARSET_MATCH(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class BetweenAtomComponentContext : public ComparisonOperatorsComponentContext { + public: + BetweenAtomComponentContext(ComparisonOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *op = nullptr; + VtlParser::ExprComponentContext *from_ = nullptr; + VtlParser::ExprComponentContext *to_ = nullptr; + antlr4::tree::TerminalNode *BETWEEN(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ComparisonOperatorsComponentContext* comparisonOperatorsComponent(); + + class TimeOperatorsContext : public antlr4::ParserRuleContext { + public: + TimeOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + TimeOperatorsContext() = default; + void copyFrom(TimeOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class DayToYearAtomContext : public TimeOperatorsContext { + public: + DayToYearAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DAYTOYEAR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class YearAtomContext : public TimeOperatorsContext { + public: + YearAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *YEAR_OP(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class YearTodayAtomContext : public TimeOperatorsContext { + public: + YearTodayAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *YEARTODAY(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayToMonthAtomContext : public TimeOperatorsContext { + public: + DayToMonthAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DAYTOMONTH(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class PeriodAtomContext : public TimeOperatorsContext { + public: + PeriodAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *PERIOD_INDICATOR(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + ExprContext *expr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class MonthTodayAtomContext : public TimeOperatorsContext { + public: + MonthTodayAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *MONTHTODAY(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FillTimeAtomContext : public TimeOperatorsContext { + public: + FillTimeAtomContext(TimeOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *FILL_TIME_SERIES(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *SINGLE(); + antlr4::tree::TerminalNode *ALL(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class MonthAtomContext : public TimeOperatorsContext { + public: + MonthAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *MONTH_OP(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayOfYearAtomContext : public TimeOperatorsContext { + public: + DayOfYearAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DAYOFYEAR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FlowAtomContext : public TimeOperatorsContext { + public: + FlowAtomContext(TimeOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *FLOW_TO_STOCK(); + antlr4::tree::TerminalNode *STOCK_TO_FLOW(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeShiftAtomContext : public TimeOperatorsContext { + public: + TimeShiftAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *TIMESHIFT(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *COMMA(); + SignedIntegerContext *signedInteger(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeAggAtomContext : public TimeOperatorsContext { + public: + TimeAggAtomContext(TimeOperatorsContext *ctx); + + antlr4::Token *periodIndTo = nullptr; + antlr4::Token *periodIndFrom = nullptr; + VtlParser::OptionalExprContext *op = nullptr; + antlr4::Token *delim = nullptr; + antlr4::tree::TerminalNode *TIME_AGG(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector STRING_CONSTANT(); + antlr4::tree::TerminalNode* STRING_CONSTANT(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + OptionalExprContext *optionalExpr(); + antlr4::tree::TerminalNode *OPTIONAL(); + antlr4::tree::TerminalNode *FIRST(); + antlr4::tree::TerminalNode *LAST(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DateDiffAtomContext : public TimeOperatorsContext { + public: + DateDiffAtomContext(TimeOperatorsContext *ctx); + + VtlParser::ExprContext *dateFrom = nullptr; + VtlParser::ExprContext *dateTo = nullptr; + antlr4::tree::TerminalNode *DATEDIFF(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DateAddAtomContext : public TimeOperatorsContext { + public: + DateAddAtomContext(TimeOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + VtlParser::ExprContext *shiftNumber = nullptr; + VtlParser::ExprContext *periodInd = nullptr; + antlr4::tree::TerminalNode *DATEADD(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayOfMonthAtomContext : public TimeOperatorsContext { + public: + DayOfMonthAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *DAYOFMONTH(); + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CurrentDateAtomContext : public TimeOperatorsContext { + public: + CurrentDateAtomContext(TimeOperatorsContext *ctx); + + antlr4::tree::TerminalNode *CURRENT_DATE(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + TimeOperatorsContext* timeOperators(); + + class TimeOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + TimeOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + TimeOperatorsComponentContext() = default; + void copyFrom(TimeOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class PeriodAtomComponentContext : public TimeOperatorsComponentContext { + public: + PeriodAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *PERIOD_INDICATOR(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + ExprComponentContext *exprComponent(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeShiftAtomComponentContext : public TimeOperatorsComponentContext { + public: + TimeShiftAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *TIMESHIFT(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *COMMA(); + SignedIntegerContext *signedInteger(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class MonthTodayAtomComponentContext : public TimeOperatorsComponentContext { + public: + MonthTodayAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *MONTHTODAY(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class TimeAggAtomComponentContext : public TimeOperatorsComponentContext { + public: + TimeAggAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::Token *periodIndTo = nullptr; + antlr4::Token *periodIndFrom = nullptr; + VtlParser::OptionalExprComponentContext *op = nullptr; + antlr4::Token *delim = nullptr; + antlr4::tree::TerminalNode *TIME_AGG(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector STRING_CONSTANT(); + antlr4::tree::TerminalNode* STRING_CONSTANT(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + OptionalExprComponentContext *optionalExprComponent(); + antlr4::tree::TerminalNode *OPTIONAL(); + antlr4::tree::TerminalNode *FIRST(); + antlr4::tree::TerminalNode *LAST(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayToMonthAtomComponentContext : public TimeOperatorsComponentContext { + public: + DayToMonthAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *DAYTOMONTH(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DateAddAtomComponentContext : public TimeOperatorsComponentContext { + public: + DateAddAtomComponentContext(TimeOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *op = nullptr; + VtlParser::ExprComponentContext *shiftNumber = nullptr; + VtlParser::ExprComponentContext *periodInd = nullptr; + antlr4::tree::TerminalNode *DATEADD(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class YearTodayAtomComponentContext : public TimeOperatorsComponentContext { + public: + YearTodayAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *YEARTODAY(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayOfMonthAtomComponentContext : public TimeOperatorsComponentContext { + public: + DayOfMonthAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *DAYOFMONTH(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class MonthAtomComponentContext : public TimeOperatorsComponentContext { + public: + MonthAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *MONTH_OP(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FillTimeAtomComponentContext : public TimeOperatorsComponentContext { + public: + FillTimeAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *FILL_TIME_SERIES(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *SINGLE(); + antlr4::tree::TerminalNode *ALL(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DatOfYearAtomComponentContext : public TimeOperatorsComponentContext { + public: + DatOfYearAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *DAYOFYEAR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DayToYearAtomComponentContext : public TimeOperatorsComponentContext { + public: + DayToYearAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *DAYTOYEAR(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CurrentDateAtomComponentContext : public TimeOperatorsComponentContext { + public: + CurrentDateAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *CURRENT_DATE(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class FlowAtomComponentContext : public TimeOperatorsComponentContext { + public: + FlowAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *FLOW_TO_STOCK(); + antlr4::tree::TerminalNode *STOCK_TO_FLOW(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DateDiffAtomComponentContext : public TimeOperatorsComponentContext { + public: + DateDiffAtomComponentContext(TimeOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *dateFrom = nullptr; + VtlParser::ExprContext *dateTo = nullptr; + antlr4::tree::TerminalNode *DATEDIFF(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + ExprComponentContext *exprComponent(); + ExprContext *expr(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class YearAtomComponentContext : public TimeOperatorsComponentContext { + public: + YearAtomComponentContext(TimeOperatorsComponentContext *ctx); + + antlr4::tree::TerminalNode *YEAR_OP(); + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + TimeOperatorsComponentContext* timeOperatorsComponent(); + + class SetOperatorsContext : public antlr4::ParserRuleContext { + public: + SetOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + SetOperatorsContext() = default; + void copyFrom(SetOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class SetOrSYmDiffAtomContext : public SetOperatorsContext { + public: + SetOrSYmDiffAtomContext(SetOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::ExprContext *left = nullptr; + VtlParser::ExprContext *right = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + antlr4::tree::TerminalNode *SETDIFF(); + antlr4::tree::TerminalNode *SYMDIFF(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class IntersectAtomContext : public SetOperatorsContext { + public: + IntersectAtomContext(SetOperatorsContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::tree::TerminalNode *INTERSECT(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class UnionAtomContext : public SetOperatorsContext { + public: + UnionAtomContext(SetOperatorsContext *ctx); + + VtlParser::ExprContext *left = nullptr; + antlr4::tree::TerminalNode *UNION(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + SetOperatorsContext* setOperators(); + + class HierarchyOperatorsContext : public antlr4::ParserRuleContext { + public: + VtlParser::ExprContext *op = nullptr; + antlr4::Token *hrName = nullptr; + VtlParser::ComponentIDContext *ruleComponent = nullptr; + HierarchyOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *HIERARCHY(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *IDENTIFIER(); + ConditionClauseContext *conditionClause(); + antlr4::tree::TerminalNode *RULE(); + ValidationModeContext *validationMode(); + InputModeHierarchyContext *inputModeHierarchy(); + OutputModeHierarchyContext *outputModeHierarchy(); + ComponentIDContext *componentID(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + HierarchyOperatorsContext* hierarchyOperators(); + + class ValidationOperatorsContext : public antlr4::ParserRuleContext { + public: + ValidationOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ValidationOperatorsContext() = default; + void copyFrom(ValidationOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class ValidateHRrulesetContext : public ValidationOperatorsContext { + public: + ValidateHRrulesetContext(ValidationOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + antlr4::Token *hrName = nullptr; + antlr4::tree::TerminalNode *CHECK_HIERARCHY(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *IDENTIFIER(); + ConditionClauseContext *conditionClause(); + antlr4::tree::TerminalNode *RULE(); + ComponentIDContext *componentID(); + ValidationModeContext *validationMode(); + InputModeContext *inputMode(); + ValidationOutputContext *validationOutput(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ValidateDPrulesetContext : public ValidationOperatorsContext { + public: + ValidateDPrulesetContext(ValidationOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + antlr4::Token *dpName = nullptr; + antlr4::tree::TerminalNode *CHECK_DATAPOINT(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *IDENTIFIER(); + antlr4::tree::TerminalNode *COMPONENTS(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + ValidationOutputContext *validationOutput(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ValidationSimpleContext : public ValidationOperatorsContext { + public: + ValidationSimpleContext(ValidationOperatorsContext *ctx); + + VtlParser::ExprContext *op = nullptr; + VtlParser::ErCodeContext *codeErr = nullptr; + VtlParser::ErLevelContext *levelCode = nullptr; + antlr4::Token *output = nullptr; + antlr4::tree::TerminalNode *CHECK(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + ExprContext *expr(); + ImbalanceExprContext *imbalanceExpr(); + ErCodeContext *erCode(); + ErLevelContext *erLevel(); + antlr4::tree::TerminalNode *INVALID(); + antlr4::tree::TerminalNode *ALL(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ValidationOperatorsContext* validationOperators(); + + class ConditionalOperatorsContext : public antlr4::ParserRuleContext { + public: + ConditionalOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ConditionalOperatorsContext() = default; + void copyFrom(ConditionalOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class NvlAtomContext : public ConditionalOperatorsContext { + public: + NvlAtomContext(ConditionalOperatorsContext *ctx); + + VtlParser::ExprContext *left = nullptr; + VtlParser::ExprContext *right = nullptr; + antlr4::tree::TerminalNode *NVL(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector expr(); + ExprContext* expr(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ConditionalOperatorsContext* conditionalOperators(); + + class ConditionalOperatorsComponentContext : public antlr4::ParserRuleContext { + public: + ConditionalOperatorsComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ConditionalOperatorsComponentContext() = default; + void copyFrom(ConditionalOperatorsComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class NvlAtomComponentContext : public ConditionalOperatorsComponentContext { + public: + NvlAtomComponentContext(ConditionalOperatorsComponentContext *ctx); + + VtlParser::ExprComponentContext *left = nullptr; + VtlParser::ExprComponentContext *right = nullptr; + antlr4::tree::TerminalNode *NVL(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ConditionalOperatorsComponentContext* conditionalOperatorsComponent(); + + class AggrOperatorsContext : public antlr4::ParserRuleContext { + public: + AggrOperatorsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + AggrOperatorsContext() = default; + void copyFrom(AggrOperatorsContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class AggrCompContext : public AggrOperatorsContext { + public: + AggrCompContext(AggrOperatorsContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *SUM(); + antlr4::tree::TerminalNode *AVG(); + antlr4::tree::TerminalNode *COUNT(); + antlr4::tree::TerminalNode *MEDIAN(); + antlr4::tree::TerminalNode *MIN(); + antlr4::tree::TerminalNode *MAX(); + antlr4::tree::TerminalNode *STDDEV_POP(); + antlr4::tree::TerminalNode *STDDEV_SAMP(); + antlr4::tree::TerminalNode *VAR_POP(); + antlr4::tree::TerminalNode *VAR_SAMP(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class CountAggrCompContext : public AggrOperatorsContext { + public: + CountAggrCompContext(AggrOperatorsContext *ctx); + + antlr4::tree::TerminalNode *COUNT(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + AggrOperatorsContext* aggrOperators(); + + class AggrOperatorsGroupingContext : public antlr4::ParserRuleContext { + public: + AggrOperatorsGroupingContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + AggrOperatorsGroupingContext() = default; + void copyFrom(AggrOperatorsGroupingContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class AggrDatasetContext : public AggrOperatorsGroupingContext { + public: + AggrDatasetContext(AggrOperatorsGroupingContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::tree::TerminalNode *LPAREN(); + ExprContext *expr(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *SUM(); + antlr4::tree::TerminalNode *AVG(); + antlr4::tree::TerminalNode *COUNT(); + antlr4::tree::TerminalNode *MEDIAN(); + antlr4::tree::TerminalNode *MIN(); + antlr4::tree::TerminalNode *MAX(); + antlr4::tree::TerminalNode *STDDEV_POP(); + antlr4::tree::TerminalNode *STDDEV_SAMP(); + antlr4::tree::TerminalNode *VAR_POP(); + antlr4::tree::TerminalNode *VAR_SAMP(); + GroupingClauseContext *groupingClause(); + HavingClauseContext *havingClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + AggrOperatorsGroupingContext* aggrOperatorsGrouping(); + + class AnFunctionContext : public antlr4::ParserRuleContext { + public: + AnFunctionContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + AnFunctionContext() = default; + void copyFrom(AnFunctionContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class LagOrLeadAnContext : public AnFunctionContext { + public: + LagOrLeadAnContext(AnFunctionContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::SignedIntegerContext *offset = nullptr; + VtlParser::ScalarItemContext *defaultValue = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + VtlParser::OrderByClauseContext *orderBy = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprContext *expr(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *LAG(); + antlr4::tree::TerminalNode *LEAD(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + OrderByClauseContext *orderByClause(); + SignedIntegerContext *signedInteger(); + PartitionByClauseContext *partitionByClause(); + ScalarItemContext *scalarItem(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class RatioToReportAnContext : public AnFunctionContext { + public: + RatioToReportAnContext(AnFunctionContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprContext *expr(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *RATIO_TO_REPORT(); + PartitionByClauseContext *partitionByClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class AnSimpleFunctionContext : public AnFunctionContext { + public: + AnSimpleFunctionContext(AnFunctionContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + VtlParser::OrderByClauseContext *orderBy = nullptr; + VtlParser::WindowingClauseContext *windowing = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprContext *expr(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *SUM(); + antlr4::tree::TerminalNode *AVG(); + antlr4::tree::TerminalNode *COUNT(); + antlr4::tree::TerminalNode *MEDIAN(); + antlr4::tree::TerminalNode *MIN(); + antlr4::tree::TerminalNode *MAX(); + antlr4::tree::TerminalNode *STDDEV_POP(); + antlr4::tree::TerminalNode *STDDEV_SAMP(); + antlr4::tree::TerminalNode *VAR_POP(); + antlr4::tree::TerminalNode *VAR_SAMP(); + antlr4::tree::TerminalNode *FIRST_VALUE(); + antlr4::tree::TerminalNode *LAST_VALUE(); + PartitionByClauseContext *partitionByClause(); + OrderByClauseContext *orderByClause(); + WindowingClauseContext *windowingClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + AnFunctionContext* anFunction(); + + class AnFunctionComponentContext : public antlr4::ParserRuleContext { + public: + AnFunctionComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + AnFunctionComponentContext() = default; + void copyFrom(AnFunctionComponentContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class AnSimpleFunctionComponentContext : public AnFunctionComponentContext { + public: + AnSimpleFunctionComponentContext(AnFunctionComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + VtlParser::OrderByClauseContext *orderBy = nullptr; + VtlParser::WindowingClauseContext *windowing = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *SUM(); + antlr4::tree::TerminalNode *AVG(); + antlr4::tree::TerminalNode *COUNT(); + antlr4::tree::TerminalNode *MEDIAN(); + antlr4::tree::TerminalNode *MIN(); + antlr4::tree::TerminalNode *MAX(); + antlr4::tree::TerminalNode *STDDEV_POP(); + antlr4::tree::TerminalNode *STDDEV_SAMP(); + antlr4::tree::TerminalNode *VAR_POP(); + antlr4::tree::TerminalNode *VAR_SAMP(); + antlr4::tree::TerminalNode *FIRST_VALUE(); + antlr4::tree::TerminalNode *LAST_VALUE(); + PartitionByClauseContext *partitionByClause(); + OrderByClauseContext *orderByClause(); + WindowingClauseContext *windowingClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class LagOrLeadAnComponentContext : public AnFunctionComponentContext { + public: + LagOrLeadAnComponentContext(AnFunctionComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::SignedIntegerContext *offset = nullptr; + VtlParser::ScalarItemContext *defaultValue = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + VtlParser::OrderByClauseContext *orderBy = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *LAG(); + antlr4::tree::TerminalNode *LEAD(); + antlr4::tree::TerminalNode *COMMA(); + OrderByClauseContext *orderByClause(); + SignedIntegerContext *signedInteger(); + PartitionByClauseContext *partitionByClause(); + ScalarItemContext *scalarItem(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class RankAnComponentContext : public AnFunctionComponentContext { + public: + RankAnComponentContext(AnFunctionComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + VtlParser::OrderByClauseContext *orderBy = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *RANK(); + OrderByClauseContext *orderByClause(); + PartitionByClauseContext *partitionByClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class RatioToReportAnComponentContext : public AnFunctionComponentContext { + public: + RatioToReportAnComponentContext(AnFunctionComponentContext *ctx); + + antlr4::Token *op = nullptr; + VtlParser::PartitionByClauseContext *partition = nullptr; + std::vector LPAREN(); + antlr4::tree::TerminalNode* LPAREN(size_t i); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *OVER(); + std::vector RPAREN(); + antlr4::tree::TerminalNode* RPAREN(size_t i); + antlr4::tree::TerminalNode *RATIO_TO_REPORT(); + PartitionByClauseContext *partitionByClause(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + AnFunctionComponentContext* anFunctionComponent(); + + class RenameClauseItemContext : public antlr4::ParserRuleContext { + public: + VtlParser::ComponentIDContext *fromName = nullptr; + VtlParser::ComponentIDContext *toName = nullptr; + RenameClauseItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *TO(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RenameClauseItemContext* renameClauseItem(); + + class AggregateClauseContext : public antlr4::ParserRuleContext { + public: + AggregateClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector aggrFunctionClause(); + AggrFunctionClauseContext* aggrFunctionClause(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + AggregateClauseContext* aggregateClause(); + + class AggrFunctionClauseContext : public antlr4::ParserRuleContext { + public: + AggrFunctionClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentIDContext *componentID(); + antlr4::tree::TerminalNode *ASSIGN(); + AggrOperatorsContext *aggrOperators(); + ComponentRoleContext *componentRole(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + AggrFunctionClauseContext* aggrFunctionClause(); + + class CalcClauseItemContext : public antlr4::ParserRuleContext { + public: + CalcClauseItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentIDContext *componentID(); + antlr4::tree::TerminalNode *ASSIGN(); + ExprComponentContext *exprComponent(); + ComponentRoleContext *componentRole(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CalcClauseItemContext* calcClauseItem(); + + class SubspaceClauseItemContext : public antlr4::ParserRuleContext { + public: + SubspaceClauseItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentIDContext *componentID(); + antlr4::tree::TerminalNode *EQ(); + ScalarItemContext *scalarItem(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SubspaceClauseItemContext* subspaceClauseItem(); + + class ScalarItemContext : public antlr4::ParserRuleContext { + public: + ScalarItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ScalarItemContext() = default; + void copyFrom(ScalarItemContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class ScalarWithCastContext : public ScalarItemContext { + public: + ScalarWithCastContext(ScalarItemContext *ctx); + + antlr4::tree::TerminalNode *CAST(); + antlr4::tree::TerminalNode *LPAREN(); + ConstantContext *constant(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + BasicScalarTypeContext *basicScalarType(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class SimpleScalarContext : public ScalarItemContext { + public: + SimpleScalarContext(ScalarItemContext *ctx); + + ConstantContext *constant(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ScalarItemContext* scalarItem(); + + class JoinClauseWithoutUsingContext : public antlr4::ParserRuleContext { + public: + JoinClauseWithoutUsingContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector joinClauseItem(); + JoinClauseItemContext* joinClauseItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + JoinClauseWithoutUsingContext* joinClauseWithoutUsing(); + + class JoinClauseContext : public antlr4::ParserRuleContext { + public: + JoinClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector joinClauseItem(); + JoinClauseItemContext* joinClauseItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *USING(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + JoinClauseContext* joinClause(); + + class JoinClauseItemContext : public antlr4::ParserRuleContext { + public: + JoinClauseItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ExprContext *expr(); + antlr4::tree::TerminalNode *AS(); + AliasContext *alias(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + JoinClauseItemContext* joinClauseItem(); + + class JoinBodyContext : public antlr4::ParserRuleContext { + public: + JoinBodyContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + FilterClauseContext *filterClause(); + CalcClauseContext *calcClause(); + JoinApplyClauseContext *joinApplyClause(); + AggrClauseContext *aggrClause(); + KeepOrDropClauseContext *keepOrDropClause(); + RenameClauseContext *renameClause(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + JoinBodyContext* joinBody(); + + class JoinApplyClauseContext : public antlr4::ParserRuleContext { + public: + JoinApplyClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *APPLY(); + ExprContext *expr(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + JoinApplyClauseContext* joinApplyClause(); + + class PartitionByClauseContext : public antlr4::ParserRuleContext { + public: + PartitionByClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *PARTITION(); + antlr4::tree::TerminalNode *BY(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + PartitionByClauseContext* partitionByClause(); + + class OrderByClauseContext : public antlr4::ParserRuleContext { + public: + OrderByClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *ORDER(); + antlr4::tree::TerminalNode *BY(); + std::vector orderByItem(); + OrderByItemContext* orderByItem(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OrderByClauseContext* orderByClause(); + + class OrderByItemContext : public antlr4::ParserRuleContext { + public: + OrderByItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentIDContext *componentID(); + antlr4::tree::TerminalNode *ASC(); + antlr4::tree::TerminalNode *DESC(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OrderByItemContext* orderByItem(); + + class WindowingClauseContext : public antlr4::ParserRuleContext { + public: + VtlParser::LimitClauseItemContext *from_ = nullptr; + VtlParser::LimitClauseItemContext *to_ = nullptr; + WindowingClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *BETWEEN(); + antlr4::tree::TerminalNode *AND(); + std::vector limitClauseItem(); + LimitClauseItemContext* limitClauseItem(size_t i); + antlr4::tree::TerminalNode *RANGE(); + antlr4::tree::TerminalNode *DATA(); + antlr4::tree::TerminalNode *POINTS(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + WindowingClauseContext* windowingClause(); + + class SignedIntegerContext : public antlr4::ParserRuleContext { + public: + SignedIntegerContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *INTEGER_CONSTANT(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *PLUS(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SignedIntegerContext* signedInteger(); + + class SignedNumberContext : public antlr4::ParserRuleContext { + public: + SignedNumberContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *NUMBER_CONSTANT(); + antlr4::tree::TerminalNode *MINUS(); + antlr4::tree::TerminalNode *PLUS(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SignedNumberContext* signedNumber(); + + class LimitClauseItemContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *limitDir = nullptr; + LimitClauseItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + SignedIntegerContext *signedInteger(); + antlr4::tree::TerminalNode *PRECEDING(); + antlr4::tree::TerminalNode *FOLLOWING(); + antlr4::tree::TerminalNode *CURRENT(); + antlr4::tree::TerminalNode *DATA(); + antlr4::tree::TerminalNode *POINT(); + antlr4::tree::TerminalNode *UNBOUNDED(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + LimitClauseItemContext* limitClauseItem(); + + class GroupingClauseContext : public antlr4::ParserRuleContext { + public: + GroupingClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + GroupingClauseContext() = default; + void copyFrom(GroupingClauseContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class GroupAllContext : public GroupingClauseContext { + public: + GroupAllContext(GroupingClauseContext *ctx); + + antlr4::Token *delim = nullptr; + antlr4::tree::TerminalNode *GROUP(); + antlr4::tree::TerminalNode *ALL(); + antlr4::tree::TerminalNode *TIME_AGG(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *COMMA(); + antlr4::tree::TerminalNode *FIRST(); + antlr4::tree::TerminalNode *LAST(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class GroupByOrExceptContext : public GroupingClauseContext { + public: + GroupByOrExceptContext(GroupingClauseContext *ctx); + + antlr4::Token *op = nullptr; + antlr4::Token *delim = nullptr; + antlr4::tree::TerminalNode *GROUP(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + antlr4::tree::TerminalNode *BY(); + antlr4::tree::TerminalNode *EXCEPT(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + antlr4::tree::TerminalNode *TIME_AGG(); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + antlr4::tree::TerminalNode *RPAREN(); + antlr4::tree::TerminalNode *FIRST(); + antlr4::tree::TerminalNode *LAST(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + GroupingClauseContext* groupingClause(); + + class HavingClauseContext : public antlr4::ParserRuleContext { + public: + HavingClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *HAVING(); + ExprComponentContext *exprComponent(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + HavingClauseContext* havingClause(); + + class ParameterItemContext : public antlr4::ParserRuleContext { + public: + ParameterItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + VarIDContext *varID(); + InputParameterTypeContext *inputParameterType(); + antlr4::tree::TerminalNode *DEFAULT(); + ScalarItemContext *scalarItem(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ParameterItemContext* parameterItem(); + + class OutputParameterTypeContext : public antlr4::ParserRuleContext { + public: + OutputParameterTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ScalarTypeContext *scalarType(); + DatasetTypeContext *datasetType(); + ComponentTypeContext *componentType(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OutputParameterTypeContext* outputParameterType(); + + class OutputParameterTypeComponentContext : public antlr4::ParserRuleContext { + public: + OutputParameterTypeComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentTypeContext *componentType(); + ScalarTypeContext *scalarType(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OutputParameterTypeComponentContext* outputParameterTypeComponent(); + + class InputParameterTypeContext : public antlr4::ParserRuleContext { + public: + InputParameterTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ScalarTypeContext *scalarType(); + DatasetTypeContext *datasetType(); + ScalarSetTypeContext *scalarSetType(); + RulesetTypeContext *rulesetType(); + ComponentTypeContext *componentType(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + InputParameterTypeContext* inputParameterType(); + + class RulesetTypeContext : public antlr4::ParserRuleContext { + public: + RulesetTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *RULESET(); + DpRulesetContext *dpRuleset(); + HrRulesetContext *hrRuleset(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RulesetTypeContext* rulesetType(); + + class ScalarTypeContext : public antlr4::ParserRuleContext { + public: + ScalarTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + BasicScalarTypeContext *basicScalarType(); + ValueDomainNameContext *valueDomainName(); + ScalarTypeConstraintContext *scalarTypeConstraint(); + antlr4::tree::TerminalNode *NULL_CONSTANT(); + antlr4::tree::TerminalNode *NOT(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ScalarTypeContext* scalarType(); + + class ComponentTypeContext : public antlr4::ParserRuleContext { + public: + ComponentTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentRoleContext *componentRole(); + antlr4::tree::TerminalNode *LT(); + ScalarTypeContext *scalarType(); + antlr4::tree::TerminalNode *MT(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ComponentTypeContext* componentType(); + + class DatasetTypeContext : public antlr4::ParserRuleContext { + public: + DatasetTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *DATASET(); + antlr4::tree::TerminalNode *GLPAREN(); + std::vector compConstraint(); + CompConstraintContext* compConstraint(size_t i); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + DatasetTypeContext* datasetType(); + + class EvalDatasetTypeContext : public antlr4::ParserRuleContext { + public: + EvalDatasetTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + DatasetTypeContext *datasetType(); + ScalarTypeContext *scalarType(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + EvalDatasetTypeContext* evalDatasetType(); + + class ScalarSetTypeContext : public antlr4::ParserRuleContext { + public: + ScalarSetTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *SET(); + antlr4::tree::TerminalNode *LT(); + ScalarTypeContext *scalarType(); + antlr4::tree::TerminalNode *MT(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ScalarSetTypeContext* scalarSetType(); + + class DpRulesetContext : public antlr4::ParserRuleContext { + public: + DpRulesetContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + DpRulesetContext() = default; + void copyFrom(DpRulesetContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class DataPointVdContext : public DpRulesetContext { + public: + DataPointVdContext(DpRulesetContext *ctx); + + antlr4::tree::TerminalNode *DATAPOINT_ON_VD(); + antlr4::tree::TerminalNode *GLPAREN(); + std::vector valueDomainName(); + ValueDomainNameContext* valueDomainName(size_t i); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector MUL(); + antlr4::tree::TerminalNode* MUL(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DataPointVarContext : public DpRulesetContext { + public: + DataPointVarContext(DpRulesetContext *ctx); + + antlr4::tree::TerminalNode *DATAPOINT_ON_VAR(); + antlr4::tree::TerminalNode *GLPAREN(); + std::vector varID(); + VarIDContext* varID(size_t i); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector MUL(); + antlr4::tree::TerminalNode* MUL(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class DataPointContext : public DpRulesetContext { + public: + DataPointContext(DpRulesetContext *ctx); + + antlr4::tree::TerminalNode *DATAPOINT(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + DpRulesetContext* dpRuleset(); + + class HrRulesetContext : public antlr4::ParserRuleContext { + public: + HrRulesetContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + HrRulesetContext() = default; + void copyFrom(HrRulesetContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class HrRulesetVdTypeContext : public HrRulesetContext { + public: + HrRulesetVdTypeContext(HrRulesetContext *ctx); + + antlr4::Token *vdName = nullptr; + antlr4::tree::TerminalNode *HIERARCHICAL_ON_VD(); + antlr4::tree::TerminalNode *GLPAREN(); + antlr4::tree::TerminalNode *GRPAREN(); + antlr4::tree::TerminalNode *IDENTIFIER(); + antlr4::tree::TerminalNode *LPAREN(); + std::vector valueDomainName(); + ValueDomainNameContext* valueDomainName(size_t i); + antlr4::tree::TerminalNode *RPAREN(); + std::vector MUL(); + antlr4::tree::TerminalNode* MUL(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class HrRulesetVarTypeContext : public HrRulesetContext { + public: + HrRulesetVarTypeContext(HrRulesetContext *ctx); + + VtlParser::VarIDContext *varName = nullptr; + antlr4::tree::TerminalNode *HIERARCHICAL_ON_VAR(); + antlr4::tree::TerminalNode *GLPAREN(); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector varID(); + VarIDContext* varID(size_t i); + antlr4::tree::TerminalNode *LPAREN(); + antlr4::tree::TerminalNode *RPAREN(); + std::vector MUL(); + antlr4::tree::TerminalNode* MUL(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class HrRulesetTypeContext : public HrRulesetContext { + public: + HrRulesetTypeContext(HrRulesetContext *ctx); + + antlr4::tree::TerminalNode *HIERARCHICAL(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + HrRulesetContext* hrRuleset(); + + class ValueDomainNameContext : public antlr4::ParserRuleContext { + public: + ValueDomainNameContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValueDomainNameContext* valueDomainName(); + + class RulesetIDContext : public antlr4::ParserRuleContext { + public: + RulesetIDContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RulesetIDContext* rulesetID(); + + class RulesetSignatureContext : public antlr4::ParserRuleContext { + public: + RulesetSignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector signature(); + SignatureContext* signature(size_t i); + antlr4::tree::TerminalNode *VALUE_DOMAIN(); + antlr4::tree::TerminalNode *VARIABLE(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RulesetSignatureContext* rulesetSignature(); + + class SignatureContext : public antlr4::ParserRuleContext { + public: + SignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + VarIDContext *varID(); + antlr4::tree::TerminalNode *AS(); + AliasContext *alias(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SignatureContext* signature(); + + class RuleClauseDatapointContext : public antlr4::ParserRuleContext { + public: + RuleClauseDatapointContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector ruleItemDatapoint(); + RuleItemDatapointContext* ruleItemDatapoint(size_t i); + std::vector EOL(); + antlr4::tree::TerminalNode* EOL(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RuleClauseDatapointContext* ruleClauseDatapoint(); + + class RuleItemDatapointContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *ruleName = nullptr; + VtlParser::ExprComponentContext *antecedentContiditon = nullptr; + VtlParser::ExprComponentContext *consequentCondition = nullptr; + RuleItemDatapointContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector exprComponent(); + ExprComponentContext* exprComponent(size_t i); + antlr4::tree::TerminalNode *COLON(); + antlr4::tree::TerminalNode *WHEN(); + antlr4::tree::TerminalNode *THEN(); + ErCodeContext *erCode(); + ErLevelContext *erLevel(); + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RuleItemDatapointContext* ruleItemDatapoint(); + + class RuleClauseHierarchicalContext : public antlr4::ParserRuleContext { + public: + RuleClauseHierarchicalContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector ruleItemHierarchical(); + RuleItemHierarchicalContext* ruleItemHierarchical(size_t i); + std::vector EOL(); + antlr4::tree::TerminalNode* EOL(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RuleClauseHierarchicalContext* ruleClauseHierarchical(); + + class RuleItemHierarchicalContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *ruleName = nullptr; + RuleItemHierarchicalContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + CodeItemRelationContext *codeItemRelation(); + antlr4::tree::TerminalNode *COLON(); + ErCodeContext *erCode(); + ErLevelContext *erLevel(); + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RuleItemHierarchicalContext* ruleItemHierarchical(); + + class HierRuleSignatureContext : public antlr4::ParserRuleContext { + public: + HierRuleSignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *RULE(); + antlr4::tree::TerminalNode *IDENTIFIER(); + antlr4::tree::TerminalNode *VALUE_DOMAIN(); + antlr4::tree::TerminalNode *VARIABLE(); + antlr4::tree::TerminalNode *CONDITION(); + ValueDomainSignatureContext *valueDomainSignature(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + HierRuleSignatureContext* hierRuleSignature(); + + class ValueDomainSignatureContext : public antlr4::ParserRuleContext { + public: + ValueDomainSignatureContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector signature(); + SignatureContext* signature(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValueDomainSignatureContext* valueDomainSignature(); + + class CodeItemRelationContext : public antlr4::ParserRuleContext { + public: + VtlParser::ValueDomainValueContext *codetemRef = nullptr; + CodeItemRelationContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector codeItemRelationClause(); + CodeItemRelationClauseContext* codeItemRelationClause(size_t i); + ValueDomainValueContext *valueDomainValue(); + antlr4::tree::TerminalNode *WHEN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *THEN(); + ComparisonOperandContext *comparisonOperand(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CodeItemRelationContext* codeItemRelation(); + + class CodeItemRelationClauseContext : public antlr4::ParserRuleContext { + public: + antlr4::Token *opAdd = nullptr; + VtlParser::ValueDomainValueContext *rightCodeItem = nullptr; + VtlParser::ExprComponentContext *rightCondition = nullptr; + CodeItemRelationClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ValueDomainValueContext *valueDomainValue(); + antlr4::tree::TerminalNode *QLPAREN(); + antlr4::tree::TerminalNode *QRPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MINUS(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CodeItemRelationClauseContext* codeItemRelationClause(); + + class ValueDomainValueContext : public antlr4::ParserRuleContext { + public: + ValueDomainValueContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + SignedIntegerContext *signedInteger(); + SignedNumberContext *signedNumber(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValueDomainValueContext* valueDomainValue(); + + class ScalarTypeConstraintContext : public antlr4::ParserRuleContext { + public: + ScalarTypeConstraintContext(antlr4::ParserRuleContext *parent, size_t invokingState); + + ScalarTypeConstraintContext() = default; + void copyFrom(ScalarTypeConstraintContext *context); + using antlr4::ParserRuleContext::copyFrom; + + virtual size_t getRuleIndex() const override; + + + }; + + class RangeConstraintContext : public ScalarTypeConstraintContext { + public: + RangeConstraintContext(ScalarTypeConstraintContext *ctx); + + antlr4::tree::TerminalNode *GLPAREN(); + std::vector scalarItem(); + ScalarItemContext* scalarItem(size_t i); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + class ConditionConstraintContext : public ScalarTypeConstraintContext { + public: + ConditionConstraintContext(ScalarTypeConstraintContext *ctx); + + antlr4::tree::TerminalNode *QLPAREN(); + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *QRPAREN(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + + ScalarTypeConstraintContext* scalarTypeConstraint(); + + class CompConstraintContext : public antlr4::ParserRuleContext { + public: + CompConstraintContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ComponentTypeContext *componentType(); + ComponentIDContext *componentID(); + MultModifierContext *multModifier(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + CompConstraintContext* compConstraint(); + + class MultModifierContext : public antlr4::ParserRuleContext { + public: + MultModifierContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *OPTIONAL(); + antlr4::tree::TerminalNode *PLUS(); + antlr4::tree::TerminalNode *MUL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + MultModifierContext* multModifier(); + + class ValidationOutputContext : public antlr4::ParserRuleContext { + public: + ValidationOutputContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *INVALID(); + antlr4::tree::TerminalNode *ALL_MEASURES(); + antlr4::tree::TerminalNode *ALL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValidationOutputContext* validationOutput(); + + class ValidationModeContext : public antlr4::ParserRuleContext { + public: + ValidationModeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *NON_NULL(); + antlr4::tree::TerminalNode *NON_ZERO(); + antlr4::tree::TerminalNode *PARTIAL_NULL(); + antlr4::tree::TerminalNode *PARTIAL_ZERO(); + antlr4::tree::TerminalNode *ALWAYS_NULL(); + antlr4::tree::TerminalNode *ALWAYS_ZERO(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValidationModeContext* validationMode(); + + class ConditionClauseContext : public antlr4::ParserRuleContext { + public: + ConditionClauseContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *CONDITION(); + std::vector componentID(); + ComponentIDContext* componentID(size_t i); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ConditionClauseContext* conditionClause(); + + class InputModeContext : public antlr4::ParserRuleContext { + public: + InputModeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *DATASET(); + antlr4::tree::TerminalNode *DATASET_PRIORITY(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + InputModeContext* inputMode(); + + class ImbalanceExprContext : public antlr4::ParserRuleContext { + public: + ImbalanceExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IMBALANCE(); + ExprContext *expr(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ImbalanceExprContext* imbalanceExpr(); + + class InputModeHierarchyContext : public antlr4::ParserRuleContext { + public: + InputModeHierarchyContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *RULE(); + antlr4::tree::TerminalNode *DATASET(); + antlr4::tree::TerminalNode *RULE_PRIORITY(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + InputModeHierarchyContext* inputModeHierarchy(); + + class OutputModeHierarchyContext : public antlr4::ParserRuleContext { + public: + OutputModeHierarchyContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *COMPUTED(); + antlr4::tree::TerminalNode *ALL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OutputModeHierarchyContext* outputModeHierarchy(); + + class AliasContext : public antlr4::ParserRuleContext { + public: + AliasContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + AliasContext* alias(); + + class VarIDContext : public antlr4::ParserRuleContext { + public: + VarIDContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + VarIDContext* varID(); + + class SimpleComponentIdContext : public antlr4::ParserRuleContext { + public: + SimpleComponentIdContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + SimpleComponentIdContext* simpleComponentId(); + + class ComponentIDContext : public antlr4::ParserRuleContext { + public: + ComponentIDContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + std::vector IDENTIFIER(); + antlr4::tree::TerminalNode* IDENTIFIER(size_t i); + antlr4::tree::TerminalNode *MEMBERSHIP(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ComponentIDContext* componentID(); + + class ListsContext : public antlr4::ParserRuleContext { + public: + ListsContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *GLPAREN(); + std::vector scalarItem(); + ScalarItemContext* scalarItem(size_t i); + antlr4::tree::TerminalNode *GRPAREN(); + std::vector COMMA(); + antlr4::tree::TerminalNode* COMMA(size_t i); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ListsContext* lists(); + + class ErCodeContext : public antlr4::ParserRuleContext { + public: + ErCodeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *ERRORCODE(); + ConstantContext *constant(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ErCodeContext* erCode(); + + class ErLevelContext : public antlr4::ParserRuleContext { + public: + ErLevelContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *ERRORLEVEL(); + ConstantContext *constant(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ErLevelContext* erLevel(); + + class ComparisonOperandContext : public antlr4::ParserRuleContext { + public: + ComparisonOperandContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *MT(); + antlr4::tree::TerminalNode *ME(); + antlr4::tree::TerminalNode *LE(); + antlr4::tree::TerminalNode *LT(); + antlr4::tree::TerminalNode *EQ(); + antlr4::tree::TerminalNode *NEQ(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ComparisonOperandContext* comparisonOperand(); + + class OptionalExprContext : public antlr4::ParserRuleContext { + public: + OptionalExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ExprContext *expr(); + antlr4::tree::TerminalNode *OPTIONAL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OptionalExprContext* optionalExpr(); + + class OptionalExprComponentContext : public antlr4::ParserRuleContext { + public: + OptionalExprComponentContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + ExprComponentContext *exprComponent(); + antlr4::tree::TerminalNode *OPTIONAL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OptionalExprComponentContext* optionalExprComponent(); + + class ComponentRoleContext : public antlr4::ParserRuleContext { + public: + ComponentRoleContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *MEASURE(); + antlr4::tree::TerminalNode *COMPONENT(); + antlr4::tree::TerminalNode *DIMENSION(); + antlr4::tree::TerminalNode *ATTRIBUTE(); + ViralAttributeContext *viralAttribute(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ComponentRoleContext* componentRole(); + + class ViralAttributeContext : public antlr4::ParserRuleContext { + public: + ViralAttributeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *VIRAL(); + antlr4::tree::TerminalNode *ATTRIBUTE(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ViralAttributeContext* viralAttribute(); + + class ValueDomainIDContext : public antlr4::ParserRuleContext { + public: + ValueDomainIDContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ValueDomainIDContext* valueDomainID(); + + class OperatorIDContext : public antlr4::ParserRuleContext { + public: + OperatorIDContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + OperatorIDContext* operatorID(); + + class RoutineNameContext : public antlr4::ParserRuleContext { + public: + RoutineNameContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *IDENTIFIER(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RoutineNameContext* routineName(); + + class ConstantContext : public antlr4::ParserRuleContext { + public: + ConstantContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + SignedIntegerContext *signedInteger(); + SignedNumberContext *signedNumber(); + antlr4::tree::TerminalNode *BOOLEAN_CONSTANT(); + antlr4::tree::TerminalNode *STRING_CONSTANT(); + antlr4::tree::TerminalNode *NULL_CONSTANT(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + ConstantContext* constant(); + + class BasicScalarTypeContext : public antlr4::ParserRuleContext { + public: + BasicScalarTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *STRING(); + antlr4::tree::TerminalNode *INTEGER(); + antlr4::tree::TerminalNode *NUMBER(); + antlr4::tree::TerminalNode *BOOLEAN(); + antlr4::tree::TerminalNode *DATE(); + antlr4::tree::TerminalNode *TIME(); + antlr4::tree::TerminalNode *TIME_PERIOD(); + antlr4::tree::TerminalNode *DURATION(); + antlr4::tree::TerminalNode *SCALAR(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + BasicScalarTypeContext* basicScalarType(); + + class RetainTypeContext : public antlr4::ParserRuleContext { + public: + RetainTypeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *BOOLEAN_CONSTANT(); + antlr4::tree::TerminalNode *ALL(); + + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + RetainTypeContext* retainType(); + + + bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; + + bool exprSempred(ExprContext *_localctx, size_t predicateIndex); + bool exprComponentSempred(ExprComponentContext *_localctx, size_t predicateIndex); + + // By default the static state used to implement the parser is lazily initialized during the first + // call to the constructor. You can call this function if you wish to initialize the static state + // ahead of time. + static void initialize(); + +private: +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.cpp new file mode 100644 index 000000000..2c98af850 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.cpp @@ -0,0 +1,7 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + + +#include "VtlVisitor.h" + + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.h b/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.h new file mode 100644 index 000000000..68e67b168 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/VtlVisitor.h @@ -0,0 +1,470 @@ + +// Generated from /home/javier/Programacion/vtlengine/src/vtlengine/AST/Grammar/Vtl.g4 by ANTLR 4.13.1 + +#pragma once + + +#include "antlr4-runtime.h" +#include "VtlParser.h" + + + +/** + * This class defines an abstract visitor for a parse tree + * produced by VtlParser. + */ +class VtlVisitor : public antlr4::tree::AbstractParseTreeVisitor { +public: + + /** + * Visit parse trees produced by VtlParser. + */ + virtual std::any visitStart(VtlParser::StartContext *context) = 0; + + virtual std::any visitTemporaryAssignment(VtlParser::TemporaryAssignmentContext *context) = 0; + + virtual std::any visitPersistAssignment(VtlParser::PersistAssignmentContext *context) = 0; + + virtual std::any visitDefineExpression(VtlParser::DefineExpressionContext *context) = 0; + + virtual std::any visitVarIdExpr(VtlParser::VarIdExprContext *context) = 0; + + virtual std::any visitMembershipExpr(VtlParser::MembershipExprContext *context) = 0; + + virtual std::any visitInNotInExpr(VtlParser::InNotInExprContext *context) = 0; + + virtual std::any visitBooleanExpr(VtlParser::BooleanExprContext *context) = 0; + + virtual std::any visitComparisonExpr(VtlParser::ComparisonExprContext *context) = 0; + + virtual std::any visitUnaryExpr(VtlParser::UnaryExprContext *context) = 0; + + virtual std::any visitFunctionsExpression(VtlParser::FunctionsExpressionContext *context) = 0; + + virtual std::any visitIfExpr(VtlParser::IfExprContext *context) = 0; + + virtual std::any visitClauseExpr(VtlParser::ClauseExprContext *context) = 0; + + virtual std::any visitCaseExpr(VtlParser::CaseExprContext *context) = 0; + + virtual std::any visitArithmeticExpr(VtlParser::ArithmeticExprContext *context) = 0; + + virtual std::any visitParenthesisExpr(VtlParser::ParenthesisExprContext *context) = 0; + + virtual std::any visitConstantExpr(VtlParser::ConstantExprContext *context) = 0; + + virtual std::any visitArithmeticExprOrConcat(VtlParser::ArithmeticExprOrConcatContext *context) = 0; + + virtual std::any visitArithmeticExprComp(VtlParser::ArithmeticExprCompContext *context) = 0; + + virtual std::any visitIfExprComp(VtlParser::IfExprCompContext *context) = 0; + + virtual std::any visitComparisonExprComp(VtlParser::ComparisonExprCompContext *context) = 0; + + virtual std::any visitFunctionsExpressionComp(VtlParser::FunctionsExpressionCompContext *context) = 0; + + virtual std::any visitCompId(VtlParser::CompIdContext *context) = 0; + + virtual std::any visitConstantExprComp(VtlParser::ConstantExprCompContext *context) = 0; + + virtual std::any visitArithmeticExprOrConcatComp(VtlParser::ArithmeticExprOrConcatCompContext *context) = 0; + + virtual std::any visitParenthesisExprComp(VtlParser::ParenthesisExprCompContext *context) = 0; + + virtual std::any visitInNotInExprComp(VtlParser::InNotInExprCompContext *context) = 0; + + virtual std::any visitUnaryExprComp(VtlParser::UnaryExprCompContext *context) = 0; + + virtual std::any visitCaseExprComp(VtlParser::CaseExprCompContext *context) = 0; + + virtual std::any visitBooleanExprComp(VtlParser::BooleanExprCompContext *context) = 0; + + virtual std::any visitGenericFunctionsComponents(VtlParser::GenericFunctionsComponentsContext *context) = 0; + + virtual std::any visitStringFunctionsComponents(VtlParser::StringFunctionsComponentsContext *context) = 0; + + virtual std::any visitNumericFunctionsComponents(VtlParser::NumericFunctionsComponentsContext *context) = 0; + + virtual std::any visitComparisonFunctionsComponents(VtlParser::ComparisonFunctionsComponentsContext *context) = 0; + + virtual std::any visitTimeFunctionsComponents(VtlParser::TimeFunctionsComponentsContext *context) = 0; + + virtual std::any visitConditionalFunctionsComponents(VtlParser::ConditionalFunctionsComponentsContext *context) = 0; + + virtual std::any visitAggregateFunctionsComponents(VtlParser::AggregateFunctionsComponentsContext *context) = 0; + + virtual std::any visitAnalyticFunctionsComponents(VtlParser::AnalyticFunctionsComponentsContext *context) = 0; + + virtual std::any visitJoinFunctions(VtlParser::JoinFunctionsContext *context) = 0; + + virtual std::any visitGenericFunctions(VtlParser::GenericFunctionsContext *context) = 0; + + virtual std::any visitStringFunctions(VtlParser::StringFunctionsContext *context) = 0; + + virtual std::any visitNumericFunctions(VtlParser::NumericFunctionsContext *context) = 0; + + virtual std::any visitComparisonFunctions(VtlParser::ComparisonFunctionsContext *context) = 0; + + virtual std::any visitTimeFunctions(VtlParser::TimeFunctionsContext *context) = 0; + + virtual std::any visitSetFunctions(VtlParser::SetFunctionsContext *context) = 0; + + virtual std::any visitHierarchyFunctions(VtlParser::HierarchyFunctionsContext *context) = 0; + + virtual std::any visitValidationFunctions(VtlParser::ValidationFunctionsContext *context) = 0; + + virtual std::any visitConditionalFunctions(VtlParser::ConditionalFunctionsContext *context) = 0; + + virtual std::any visitAggregateFunctions(VtlParser::AggregateFunctionsContext *context) = 0; + + virtual std::any visitAnalyticFunctions(VtlParser::AnalyticFunctionsContext *context) = 0; + + virtual std::any visitDatasetClause(VtlParser::DatasetClauseContext *context) = 0; + + virtual std::any visitRenameClause(VtlParser::RenameClauseContext *context) = 0; + + virtual std::any visitAggrClause(VtlParser::AggrClauseContext *context) = 0; + + virtual std::any visitFilterClause(VtlParser::FilterClauseContext *context) = 0; + + virtual std::any visitCalcClause(VtlParser::CalcClauseContext *context) = 0; + + virtual std::any visitKeepOrDropClause(VtlParser::KeepOrDropClauseContext *context) = 0; + + virtual std::any visitPivotOrUnpivotClause(VtlParser::PivotOrUnpivotClauseContext *context) = 0; + + virtual std::any visitCustomPivotClause(VtlParser::CustomPivotClauseContext *context) = 0; + + virtual std::any visitSubspaceClause(VtlParser::SubspaceClauseContext *context) = 0; + + virtual std::any visitJoinExpr(VtlParser::JoinExprContext *context) = 0; + + virtual std::any visitDefOperator(VtlParser::DefOperatorContext *context) = 0; + + virtual std::any visitDefDatapointRuleset(VtlParser::DefDatapointRulesetContext *context) = 0; + + virtual std::any visitDefHierarchical(VtlParser::DefHierarchicalContext *context) = 0; + + virtual std::any visitCallDataset(VtlParser::CallDatasetContext *context) = 0; + + virtual std::any visitEvalAtom(VtlParser::EvalAtomContext *context) = 0; + + virtual std::any visitCastExprDataset(VtlParser::CastExprDatasetContext *context) = 0; + + virtual std::any visitCallComponent(VtlParser::CallComponentContext *context) = 0; + + virtual std::any visitCastExprComponent(VtlParser::CastExprComponentContext *context) = 0; + + virtual std::any visitEvalAtomComponent(VtlParser::EvalAtomComponentContext *context) = 0; + + virtual std::any visitParameterComponent(VtlParser::ParameterComponentContext *context) = 0; + + virtual std::any visitParameter(VtlParser::ParameterContext *context) = 0; + + virtual std::any visitUnaryStringFunction(VtlParser::UnaryStringFunctionContext *context) = 0; + + virtual std::any visitSubstrAtom(VtlParser::SubstrAtomContext *context) = 0; + + virtual std::any visitReplaceAtom(VtlParser::ReplaceAtomContext *context) = 0; + + virtual std::any visitInstrAtom(VtlParser::InstrAtomContext *context) = 0; + + virtual std::any visitUnaryStringFunctionComponent(VtlParser::UnaryStringFunctionComponentContext *context) = 0; + + virtual std::any visitSubstrAtomComponent(VtlParser::SubstrAtomComponentContext *context) = 0; + + virtual std::any visitReplaceAtomComponent(VtlParser::ReplaceAtomComponentContext *context) = 0; + + virtual std::any visitInstrAtomComponent(VtlParser::InstrAtomComponentContext *context) = 0; + + virtual std::any visitUnaryNumeric(VtlParser::UnaryNumericContext *context) = 0; + + virtual std::any visitUnaryWithOptionalNumeric(VtlParser::UnaryWithOptionalNumericContext *context) = 0; + + virtual std::any visitBinaryNumeric(VtlParser::BinaryNumericContext *context) = 0; + + virtual std::any visitUnaryNumericComponent(VtlParser::UnaryNumericComponentContext *context) = 0; + + virtual std::any visitUnaryWithOptionalNumericComponent(VtlParser::UnaryWithOptionalNumericComponentContext *context) = 0; + + virtual std::any visitBinaryNumericComponent(VtlParser::BinaryNumericComponentContext *context) = 0; + + virtual std::any visitBetweenAtom(VtlParser::BetweenAtomContext *context) = 0; + + virtual std::any visitCharsetMatchAtom(VtlParser::CharsetMatchAtomContext *context) = 0; + + virtual std::any visitIsNullAtom(VtlParser::IsNullAtomContext *context) = 0; + + virtual std::any visitExistInAtom(VtlParser::ExistInAtomContext *context) = 0; + + virtual std::any visitBetweenAtomComponent(VtlParser::BetweenAtomComponentContext *context) = 0; + + virtual std::any visitCharsetMatchAtomComponent(VtlParser::CharsetMatchAtomComponentContext *context) = 0; + + virtual std::any visitIsNullAtomComponent(VtlParser::IsNullAtomComponentContext *context) = 0; + + virtual std::any visitPeriodAtom(VtlParser::PeriodAtomContext *context) = 0; + + virtual std::any visitFillTimeAtom(VtlParser::FillTimeAtomContext *context) = 0; + + virtual std::any visitFlowAtom(VtlParser::FlowAtomContext *context) = 0; + + virtual std::any visitTimeShiftAtom(VtlParser::TimeShiftAtomContext *context) = 0; + + virtual std::any visitTimeAggAtom(VtlParser::TimeAggAtomContext *context) = 0; + + virtual std::any visitCurrentDateAtom(VtlParser::CurrentDateAtomContext *context) = 0; + + virtual std::any visitDateDiffAtom(VtlParser::DateDiffAtomContext *context) = 0; + + virtual std::any visitDateAddAtom(VtlParser::DateAddAtomContext *context) = 0; + + virtual std::any visitYearAtom(VtlParser::YearAtomContext *context) = 0; + + virtual std::any visitMonthAtom(VtlParser::MonthAtomContext *context) = 0; + + virtual std::any visitDayOfMonthAtom(VtlParser::DayOfMonthAtomContext *context) = 0; + + virtual std::any visitDayOfYearAtom(VtlParser::DayOfYearAtomContext *context) = 0; + + virtual std::any visitDayToYearAtom(VtlParser::DayToYearAtomContext *context) = 0; + + virtual std::any visitDayToMonthAtom(VtlParser::DayToMonthAtomContext *context) = 0; + + virtual std::any visitYearTodayAtom(VtlParser::YearTodayAtomContext *context) = 0; + + virtual std::any visitMonthTodayAtom(VtlParser::MonthTodayAtomContext *context) = 0; + + virtual std::any visitPeriodAtomComponent(VtlParser::PeriodAtomComponentContext *context) = 0; + + virtual std::any visitFillTimeAtomComponent(VtlParser::FillTimeAtomComponentContext *context) = 0; + + virtual std::any visitFlowAtomComponent(VtlParser::FlowAtomComponentContext *context) = 0; + + virtual std::any visitTimeShiftAtomComponent(VtlParser::TimeShiftAtomComponentContext *context) = 0; + + virtual std::any visitTimeAggAtomComponent(VtlParser::TimeAggAtomComponentContext *context) = 0; + + virtual std::any visitCurrentDateAtomComponent(VtlParser::CurrentDateAtomComponentContext *context) = 0; + + virtual std::any visitDateDiffAtomComponent(VtlParser::DateDiffAtomComponentContext *context) = 0; + + virtual std::any visitDateAddAtomComponent(VtlParser::DateAddAtomComponentContext *context) = 0; + + virtual std::any visitYearAtomComponent(VtlParser::YearAtomComponentContext *context) = 0; + + virtual std::any visitMonthAtomComponent(VtlParser::MonthAtomComponentContext *context) = 0; + + virtual std::any visitDayOfMonthAtomComponent(VtlParser::DayOfMonthAtomComponentContext *context) = 0; + + virtual std::any visitDatOfYearAtomComponent(VtlParser::DatOfYearAtomComponentContext *context) = 0; + + virtual std::any visitDayToYearAtomComponent(VtlParser::DayToYearAtomComponentContext *context) = 0; + + virtual std::any visitDayToMonthAtomComponent(VtlParser::DayToMonthAtomComponentContext *context) = 0; + + virtual std::any visitYearTodayAtomComponent(VtlParser::YearTodayAtomComponentContext *context) = 0; + + virtual std::any visitMonthTodayAtomComponent(VtlParser::MonthTodayAtomComponentContext *context) = 0; + + virtual std::any visitUnionAtom(VtlParser::UnionAtomContext *context) = 0; + + virtual std::any visitIntersectAtom(VtlParser::IntersectAtomContext *context) = 0; + + virtual std::any visitSetOrSYmDiffAtom(VtlParser::SetOrSYmDiffAtomContext *context) = 0; + + virtual std::any visitHierarchyOperators(VtlParser::HierarchyOperatorsContext *context) = 0; + + virtual std::any visitValidateDPruleset(VtlParser::ValidateDPrulesetContext *context) = 0; + + virtual std::any visitValidateHRruleset(VtlParser::ValidateHRrulesetContext *context) = 0; + + virtual std::any visitValidationSimple(VtlParser::ValidationSimpleContext *context) = 0; + + virtual std::any visitNvlAtom(VtlParser::NvlAtomContext *context) = 0; + + virtual std::any visitNvlAtomComponent(VtlParser::NvlAtomComponentContext *context) = 0; + + virtual std::any visitAggrComp(VtlParser::AggrCompContext *context) = 0; + + virtual std::any visitCountAggrComp(VtlParser::CountAggrCompContext *context) = 0; + + virtual std::any visitAggrDataset(VtlParser::AggrDatasetContext *context) = 0; + + virtual std::any visitAnSimpleFunction(VtlParser::AnSimpleFunctionContext *context) = 0; + + virtual std::any visitLagOrLeadAn(VtlParser::LagOrLeadAnContext *context) = 0; + + virtual std::any visitRatioToReportAn(VtlParser::RatioToReportAnContext *context) = 0; + + virtual std::any visitAnSimpleFunctionComponent(VtlParser::AnSimpleFunctionComponentContext *context) = 0; + + virtual std::any visitLagOrLeadAnComponent(VtlParser::LagOrLeadAnComponentContext *context) = 0; + + virtual std::any visitRankAnComponent(VtlParser::RankAnComponentContext *context) = 0; + + virtual std::any visitRatioToReportAnComponent(VtlParser::RatioToReportAnComponentContext *context) = 0; + + virtual std::any visitRenameClauseItem(VtlParser::RenameClauseItemContext *context) = 0; + + virtual std::any visitAggregateClause(VtlParser::AggregateClauseContext *context) = 0; + + virtual std::any visitAggrFunctionClause(VtlParser::AggrFunctionClauseContext *context) = 0; + + virtual std::any visitCalcClauseItem(VtlParser::CalcClauseItemContext *context) = 0; + + virtual std::any visitSubspaceClauseItem(VtlParser::SubspaceClauseItemContext *context) = 0; + + virtual std::any visitSimpleScalar(VtlParser::SimpleScalarContext *context) = 0; + + virtual std::any visitScalarWithCast(VtlParser::ScalarWithCastContext *context) = 0; + + virtual std::any visitJoinClauseWithoutUsing(VtlParser::JoinClauseWithoutUsingContext *context) = 0; + + virtual std::any visitJoinClause(VtlParser::JoinClauseContext *context) = 0; + + virtual std::any visitJoinClauseItem(VtlParser::JoinClauseItemContext *context) = 0; + + virtual std::any visitJoinBody(VtlParser::JoinBodyContext *context) = 0; + + virtual std::any visitJoinApplyClause(VtlParser::JoinApplyClauseContext *context) = 0; + + virtual std::any visitPartitionByClause(VtlParser::PartitionByClauseContext *context) = 0; + + virtual std::any visitOrderByClause(VtlParser::OrderByClauseContext *context) = 0; + + virtual std::any visitOrderByItem(VtlParser::OrderByItemContext *context) = 0; + + virtual std::any visitWindowingClause(VtlParser::WindowingClauseContext *context) = 0; + + virtual std::any visitSignedInteger(VtlParser::SignedIntegerContext *context) = 0; + + virtual std::any visitSignedNumber(VtlParser::SignedNumberContext *context) = 0; + + virtual std::any visitLimitClauseItem(VtlParser::LimitClauseItemContext *context) = 0; + + virtual std::any visitGroupByOrExcept(VtlParser::GroupByOrExceptContext *context) = 0; + + virtual std::any visitGroupAll(VtlParser::GroupAllContext *context) = 0; + + virtual std::any visitHavingClause(VtlParser::HavingClauseContext *context) = 0; + + virtual std::any visitParameterItem(VtlParser::ParameterItemContext *context) = 0; + + virtual std::any visitOutputParameterType(VtlParser::OutputParameterTypeContext *context) = 0; + + virtual std::any visitOutputParameterTypeComponent(VtlParser::OutputParameterTypeComponentContext *context) = 0; + + virtual std::any visitInputParameterType(VtlParser::InputParameterTypeContext *context) = 0; + + virtual std::any visitRulesetType(VtlParser::RulesetTypeContext *context) = 0; + + virtual std::any visitScalarType(VtlParser::ScalarTypeContext *context) = 0; + + virtual std::any visitComponentType(VtlParser::ComponentTypeContext *context) = 0; + + virtual std::any visitDatasetType(VtlParser::DatasetTypeContext *context) = 0; + + virtual std::any visitEvalDatasetType(VtlParser::EvalDatasetTypeContext *context) = 0; + + virtual std::any visitScalarSetType(VtlParser::ScalarSetTypeContext *context) = 0; + + virtual std::any visitDataPoint(VtlParser::DataPointContext *context) = 0; + + virtual std::any visitDataPointVd(VtlParser::DataPointVdContext *context) = 0; + + virtual std::any visitDataPointVar(VtlParser::DataPointVarContext *context) = 0; + + virtual std::any visitHrRulesetType(VtlParser::HrRulesetTypeContext *context) = 0; + + virtual std::any visitHrRulesetVdType(VtlParser::HrRulesetVdTypeContext *context) = 0; + + virtual std::any visitHrRulesetVarType(VtlParser::HrRulesetVarTypeContext *context) = 0; + + virtual std::any visitValueDomainName(VtlParser::ValueDomainNameContext *context) = 0; + + virtual std::any visitRulesetID(VtlParser::RulesetIDContext *context) = 0; + + virtual std::any visitRulesetSignature(VtlParser::RulesetSignatureContext *context) = 0; + + virtual std::any visitSignature(VtlParser::SignatureContext *context) = 0; + + virtual std::any visitRuleClauseDatapoint(VtlParser::RuleClauseDatapointContext *context) = 0; + + virtual std::any visitRuleItemDatapoint(VtlParser::RuleItemDatapointContext *context) = 0; + + virtual std::any visitRuleClauseHierarchical(VtlParser::RuleClauseHierarchicalContext *context) = 0; + + virtual std::any visitRuleItemHierarchical(VtlParser::RuleItemHierarchicalContext *context) = 0; + + virtual std::any visitHierRuleSignature(VtlParser::HierRuleSignatureContext *context) = 0; + + virtual std::any visitValueDomainSignature(VtlParser::ValueDomainSignatureContext *context) = 0; + + virtual std::any visitCodeItemRelation(VtlParser::CodeItemRelationContext *context) = 0; + + virtual std::any visitCodeItemRelationClause(VtlParser::CodeItemRelationClauseContext *context) = 0; + + virtual std::any visitValueDomainValue(VtlParser::ValueDomainValueContext *context) = 0; + + virtual std::any visitConditionConstraint(VtlParser::ConditionConstraintContext *context) = 0; + + virtual std::any visitRangeConstraint(VtlParser::RangeConstraintContext *context) = 0; + + virtual std::any visitCompConstraint(VtlParser::CompConstraintContext *context) = 0; + + virtual std::any visitMultModifier(VtlParser::MultModifierContext *context) = 0; + + virtual std::any visitValidationOutput(VtlParser::ValidationOutputContext *context) = 0; + + virtual std::any visitValidationMode(VtlParser::ValidationModeContext *context) = 0; + + virtual std::any visitConditionClause(VtlParser::ConditionClauseContext *context) = 0; + + virtual std::any visitInputMode(VtlParser::InputModeContext *context) = 0; + + virtual std::any visitImbalanceExpr(VtlParser::ImbalanceExprContext *context) = 0; + + virtual std::any visitInputModeHierarchy(VtlParser::InputModeHierarchyContext *context) = 0; + + virtual std::any visitOutputModeHierarchy(VtlParser::OutputModeHierarchyContext *context) = 0; + + virtual std::any visitAlias(VtlParser::AliasContext *context) = 0; + + virtual std::any visitVarID(VtlParser::VarIDContext *context) = 0; + + virtual std::any visitSimpleComponentId(VtlParser::SimpleComponentIdContext *context) = 0; + + virtual std::any visitComponentID(VtlParser::ComponentIDContext *context) = 0; + + virtual std::any visitLists(VtlParser::ListsContext *context) = 0; + + virtual std::any visitErCode(VtlParser::ErCodeContext *context) = 0; + + virtual std::any visitErLevel(VtlParser::ErLevelContext *context) = 0; + + virtual std::any visitComparisonOperand(VtlParser::ComparisonOperandContext *context) = 0; + + virtual std::any visitOptionalExpr(VtlParser::OptionalExprContext *context) = 0; + + virtual std::any visitOptionalExprComponent(VtlParser::OptionalExprComponentContext *context) = 0; + + virtual std::any visitComponentRole(VtlParser::ComponentRoleContext *context) = 0; + + virtual std::any visitViralAttribute(VtlParser::ViralAttributeContext *context) = 0; + + virtual std::any visitValueDomainID(VtlParser::ValueDomainIDContext *context) = 0; + + virtual std::any visitOperatorID(VtlParser::OperatorIDContext *context) = 0; + + virtual std::any visitRoutineName(VtlParser::RoutineNameContext *context) = 0; + + virtual std::any visitConstant(VtlParser::ConstantContext *context) = 0; + + virtual std::any visitBasicScalarType(VtlParser::BasicScalarTypeContext *context) = 0; + + virtual std::any visitRetainType(VtlParser::RetainTypeContext *context) = 0; + + +}; + diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/__init__.py b/src/vtlengine/AST/Grammar/_cpp_parser/__init__.py new file mode 100644 index 000000000..f5b9d6b4f --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/__init__.py @@ -0,0 +1,262 @@ +from vtlengine.AST.Grammar._cpp_parser.vtl_cpp_parser import ( # type: ignore[import-untyped] + ParseNode, + TerminalNode, + get_comments, + get_input_text, + parse, +) + +__all__ = [ + "ParseNode", + "TerminalNode", + "parse", + "get_input_text", + "get_comments", + "LITERAL_NAMES", +] + +# Static list of literal names from the VTL grammar (matches ANTLR Lexer.literalNames) +LITERAL_NAMES = [ + "", + "'('", + "')'", + "'['", + "']'", + "'{'", + "'}'", + "'='", + "'<'", + "'>'", + "'>='", + "'<>'", + "'<='", + "'+'", + "'-'", + "'*'", + "'/'", + "','", + "'->'", + "':'", + "':='", + "'#'", + "'eval'", + "'if'", + "'case'", + "'then'", + "'else'", + "'using'", + "'with'", + "'current_date'", + "'datediff'", + "'dateadd'", + "'getyear'", + "'getmonth'", + "'dayofmonth'", + "'dayofyear'", + "'daytoyear'", + "'daytomonth'", + "'yeartoday'", + "'monthtoday'", + "'on'", + "'drop'", + "'keep'", + "'calc'", + "'attrcalc'", + "'rename'", + "'as'", + "'and'", + "'or'", + "'xor'", + "'not'", + "'between'", + "'in'", + "'not_in'", + "'null'", + "'isnull'", + "'ex'", + "'union'", + "'diff'", + "'symdiff'", + "'intersect'", + "'random'", + "'keys'", + "'intyear'", + "'intmonth'", + "'intday'", + "'check'", + "'exists_in'", + "'to'", + "'return'", + "'imbalance'", + "'errorcode'", + "'all'", + "'aggr'", + "'errorlevel'", + "'order'", + "'by'", + "'rank'", + "'asc'", + "'desc'", + "'min'", + "'max'", + "'first'", + "'last'", + "'indexof'", + "'abs'", + "'key'", + "'ln'", + "'log'", + "'trunc'", + "'round'", + "'power'", + "'mod'", + "'length'", + "'||'", + "'trim'", + "'upper'", + "'lower'", + "'substr'", + "'sum'", + "'avg'", + "'median'", + "'count'", + "'identifier'", + "'measure'", + "'attribute'", + "'filter'", + "'merge'", + "'exp'", + "'componentRole'", + "'viral'", + "'match_characters'", + "'type'", + "'nvl'", + "'hierarchy'", + "'_'", + "'invalid'", + "'valuedomain'", + "'variable'", + "'data'", + "'structure'", + "'dataset'", + "'operator'", + "'define'", + "'<-'", + "'datapoint'", + "'hierarchical'", + "'ruleset'", + "'rule'", + "'end'", + "'alterDataset'", + "'ltrim'", + "'rtrim'", + "'instr'", + "'replace'", + "'ceil'", + "'floor'", + "'sqrt'", + "'any'", + "'setdiff'", + "'stddev_pop'", + "'stddev_samp'", + "'var_pop'", + "'var_samp'", + "'group'", + "'except'", + "'having'", + "'first_value'", + "'last_value'", + "'lag'", + "'lead'", + "'ratio_to_report'", + "'over'", + "'preceding'", + "'following'", + "'unbounded'", + "'partition'", + "'rows'", + "'range'", + "'current'", + "'valid'", + "'fill_time_series'", + "'flow_to_stock'", + "'stock_to_flow'", + "'timeshift'", + "'measures'", + "'no_measures'", + "'condition'", + "'boolean'", + "'date'", + "'time_period'", + "'number'", + "'string'", + "'time'", + "'integer'", + "'float'", + "'list'", + "'record'", + "'restrict'", + "'yyyy'", + "'mm'", + "'dd'", + "'maxLength'", + "'regexp'", + "'is'", + "'when'", + "'from'", + "'aggregates'", + "'points'", + "'point'", + "'total'", + "'partial'", + "'always'", + "'inner_join'", + "'left_join'", + "'cross_join'", + "'full_join'", + "'maps_from'", + "'maps_to'", + "'map_to'", + "'map_from'", + "'returns'", + "'pivot'", + "'customPivot'", + "'unpivot'", + "'sub'", + "'apply'", + "'conditioned'", + "'period_indicator'", + "'single'", + "'duration'", + "'time_agg'", + "'unit'", + "'Value'", + "'valuedomains'", + "'variables'", + "'input'", + "'output'", + "'cast'", + "'rule_priority'", + "'dataset_priority'", + "'default'", + "'check_datapoint'", + "'check_hierarchy'", + "'computed'", + "'non_null'", + "'non_zero'", + "'partial_null'", + "'partial_zero'", + "'always_null'", + "'always_zero'", + "'components'", + "'all_measures'", + "'scalar'", + "'component'", + "'datapoint_on_valuedomains'", + "'datapoint_on_variables'", + "'hierarchical_on_valuedomains'", + "'hierarchical_on_variables'", + "'set'", + "'language'", + "';'", +] diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/_rule_constants.py b/src/vtlengine/AST/Grammar/_cpp_parser/_rule_constants.py new file mode 100644 index 000000000..0d4d5c097 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/_rule_constants.py @@ -0,0 +1,696 @@ +"""Constants mapping (rule_index, alt_index) tuples for use with the C++ parser. + +Each constant is a tuple of (rule_index, alt_index) where: +- rule_index corresponds to VtlParser::Rule* enum values +- alt_index is the labeled alternative index, or -1 for rules without alternatives + +Generated from the type map in bindings.cpp and rule indices from VtlParser.h. +""" + +from typing import Final + +RuleConstant = tuple[int, int] + +# ============================================================================= +# Rules WITHOUT labeled alternatives (alt_index = -1) +# ============================================================================= + +# RuleStart = 0 +START: Final[RuleConstant] = (0, -1) + +# RuleDatasetClause = 6 +DATASET_CLAUSE: Final[RuleConstant] = (6, -1) + +# RuleRenameClause = 7 +RENAME_CLAUSE: Final[RuleConstant] = (7, -1) + +# RuleAggrClause = 8 +AGGR_CLAUSE: Final[RuleConstant] = (8, -1) + +# RuleFilterClause = 9 +FILTER_CLAUSE: Final[RuleConstant] = (9, -1) + +# RuleCalcClause = 10 +CALC_CLAUSE: Final[RuleConstant] = (10, -1) + +# RuleKeepOrDropClause = 11 +KEEP_OR_DROP_CLAUSE: Final[RuleConstant] = (11, -1) + +# RulePivotOrUnpivotClause = 12 +PIVOT_OR_UNPIVOT_CLAUSE: Final[RuleConstant] = (12, -1) + +# RuleCustomPivotClause = 13 +CUSTOM_PIVOT_CLAUSE: Final[RuleConstant] = (13, -1) + +# RuleSubspaceClause = 14 +SUBSPACE_CLAUSE: Final[RuleConstant] = (14, -1) + +# RuleRenameClauseItem = 38 +RENAME_CLAUSE_ITEM: Final[RuleConstant] = (38, -1) + +# RuleAggregateClause = 39 +AGGREGATE_CLAUSE: Final[RuleConstant] = (39, -1) + +# RuleAggrFunctionClause = 40 +AGGR_FUNCTION_CLAUSE: Final[RuleConstant] = (40, -1) + +# RuleCalcClauseItem = 41 +CALC_CLAUSE_ITEM: Final[RuleConstant] = (41, -1) + +# RuleSubspaceClauseItem = 42 +SUBSPACE_CLAUSE_ITEM: Final[RuleConstant] = (42, -1) + +# RuleJoinClauseWithoutUsing = 44 +JOIN_CLAUSE_WITHOUT_USING: Final[RuleConstant] = (44, -1) + +# RuleJoinClause = 45 +JOIN_CLAUSE: Final[RuleConstant] = (45, -1) + +# RuleJoinClauseItem = 46 +JOIN_CLAUSE_ITEM: Final[RuleConstant] = (46, -1) + +# RuleJoinBody = 47 +JOIN_BODY: Final[RuleConstant] = (47, -1) + +# RuleJoinApplyClause = 48 +JOIN_APPLY_CLAUSE: Final[RuleConstant] = (48, -1) + +# RulePartitionByClause = 49 +PARTITION_BY_CLAUSE: Final[RuleConstant] = (49, -1) + +# RuleOrderByClause = 50 +ORDER_BY_CLAUSE: Final[RuleConstant] = (50, -1) + +# RuleOrderByItem = 51 +ORDER_BY_ITEM: Final[RuleConstant] = (51, -1) + +# RuleWindowingClause = 52 +WINDOWING_CLAUSE: Final[RuleConstant] = (52, -1) + +# RuleSignedInteger = 53 +SIGNED_INTEGER: Final[RuleConstant] = (53, -1) + +# RuleSignedNumber = 54 +SIGNED_NUMBER: Final[RuleConstant] = (54, -1) + +# RuleLimitClauseItem = 55 +LIMIT_CLAUSE_ITEM: Final[RuleConstant] = (55, -1) + +# RuleHavingClause = 57 +HAVING_CLAUSE: Final[RuleConstant] = (57, -1) + +# RuleParameterItem = 58 +PARAMETER_ITEM: Final[RuleConstant] = (58, -1) + +# RuleOutputParameterType = 59 +OUTPUT_PARAMETER_TYPE: Final[RuleConstant] = (59, -1) + +# RuleOutputParameterTypeComponent = 60 +OUTPUT_PARAMETER_TYPE_COMPONENT: Final[RuleConstant] = (60, -1) + +# RuleInputParameterType = 61 +INPUT_PARAMETER_TYPE: Final[RuleConstant] = (61, -1) + +# RuleRulesetType = 62 +RULESET_TYPE: Final[RuleConstant] = (62, -1) + +# RuleScalarType = 63 +SCALAR_TYPE: Final[RuleConstant] = (63, -1) + +# RuleComponentType = 64 +COMPONENT_TYPE: Final[RuleConstant] = (64, -1) + +# RuleDatasetType = 65 +DATASET_TYPE: Final[RuleConstant] = (65, -1) + +# RuleEvalDatasetType = 66 +EVAL_DATASET_TYPE: Final[RuleConstant] = (66, -1) + +# RuleScalarSetType = 67 +SCALAR_SET_TYPE: Final[RuleConstant] = (67, -1) + +# RuleValueDomainName = 70 +VALUE_DOMAIN_NAME: Final[RuleConstant] = (70, -1) + +# RuleRulesetID = 71 +RULESET_ID: Final[RuleConstant] = (71, -1) + +# RuleRulesetSignature = 72 +RULESET_SIGNATURE: Final[RuleConstant] = (72, -1) + +# RuleSignature = 73 +SIGNATURE: Final[RuleConstant] = (73, -1) + +# RuleRuleClauseDatapoint = 74 +RULE_CLAUSE_DATAPOINT: Final[RuleConstant] = (74, -1) + +# RuleRuleItemDatapoint = 75 +RULE_ITEM_DATAPOINT: Final[RuleConstant] = (75, -1) + +# RuleRuleClauseHierarchical = 76 +RULE_CLAUSE_HIERARCHICAL: Final[RuleConstant] = (76, -1) + +# RuleRuleItemHierarchical = 77 +RULE_ITEM_HIERARCHICAL: Final[RuleConstant] = (77, -1) + +# RuleHierRuleSignature = 78 +HIER_RULE_SIGNATURE: Final[RuleConstant] = (78, -1) + +# RuleValueDomainSignature = 79 +VALUE_DOMAIN_SIGNATURE: Final[RuleConstant] = (79, -1) + +# RuleCodeItemRelation = 80 +CODE_ITEM_RELATION: Final[RuleConstant] = (80, -1) + +# RuleCodeItemRelationClause = 81 +CODE_ITEM_RELATION_CLAUSE: Final[RuleConstant] = (81, -1) + +# RuleValueDomainValue = 82 +VALUE_DOMAIN_VALUE: Final[RuleConstant] = (82, -1) + +# RuleCompConstraint = 84 +COMP_CONSTRAINT: Final[RuleConstant] = (84, -1) + +# RuleMultModifier = 85 +MULT_MODIFIER: Final[RuleConstant] = (85, -1) + +# RuleValidationOutput = 86 +VALIDATION_OUTPUT: Final[RuleConstant] = (86, -1) + +# RuleValidationMode = 87 +VALIDATION_MODE: Final[RuleConstant] = (87, -1) + +# RuleConditionClause = 88 +CONDITION_CLAUSE: Final[RuleConstant] = (88, -1) + +# RuleInputMode = 89 +INPUT_MODE: Final[RuleConstant] = (89, -1) + +# RuleImbalanceExpr = 90 +IMBALANCE_EXPR: Final[RuleConstant] = (90, -1) + +# RuleInputModeHierarchy = 91 +INPUT_MODE_HIERARCHY: Final[RuleConstant] = (91, -1) + +# RuleOutputModeHierarchy = 92 +OUTPUT_MODE_HIERARCHY: Final[RuleConstant] = (92, -1) + +# RuleAlias = 93 +ALIAS: Final[RuleConstant] = (93, -1) + +# RuleVarID = 94 +VAR_ID: Final[RuleConstant] = (94, -1) + +# RuleSimpleComponentId = 95 +SIMPLE_COMPONENT_ID: Final[RuleConstant] = (95, -1) + +# RuleComponentID = 96 +COMPONENT_ID: Final[RuleConstant] = (96, -1) + +# RuleLists = 97 +LISTS: Final[RuleConstant] = (97, -1) + +# RuleErCode = 98 +ER_CODE: Final[RuleConstant] = (98, -1) + +# RuleErLevel = 99 +ER_LEVEL: Final[RuleConstant] = (99, -1) + +# RuleComparisonOperand = 100 +COMPARISON_OPERAND: Final[RuleConstant] = (100, -1) + +# RuleOptionalExpr = 101 +OPTIONAL_EXPR: Final[RuleConstant] = (101, -1) + +# RuleOptionalExprComponent = 102 +OPTIONAL_EXPR_COMPONENT: Final[RuleConstant] = (102, -1) + +# RuleComponentRole = 103 +COMPONENT_ROLE: Final[RuleConstant] = (103, -1) + +# RuleViralAttribute = 104 +VIRAL_ATTRIBUTE: Final[RuleConstant] = (104, -1) + +# RuleValueDomainID = 105 +VALUE_DOMAIN_ID: Final[RuleConstant] = (105, -1) + +# RuleOperatorID = 106 +OPERATOR_ID: Final[RuleConstant] = (106, -1) + +# RuleRoutineName = 107 +ROUTINE_NAME: Final[RuleConstant] = (107, -1) + +# RuleConstant = 108 +CONSTANT: Final[RuleConstant] = (108, -1) + +# RuleBasicScalarType = 109 +BASIC_SCALAR_TYPE: Final[RuleConstant] = (109, -1) + +# RuleRetainType = 110 +RETAIN_TYPE: Final[RuleConstant] = (110, -1) + +# RuleParameterComponent = 19 +PARAMETER_COMPONENT: Final[RuleConstant] = (19, -1) + +# RuleParameter = 20 +PARAMETER: Final[RuleConstant] = (20, -1) + +# RuleHierarchyOperators = 30 +HIERARCHY_OPERATORS: Final[RuleConstant] = (30, -1) + +# ============================================================================= +# Rules WITH labeled alternatives +# ============================================================================= + +# --- RuleStatement = 1 --- +TEMPORARY_ASSIGNMENT: Final[RuleConstant] = (1, 0) +PERSIST_ASSIGNMENT: Final[RuleConstant] = (1, 1) +DEFINE_EXPRESSION: Final[RuleConstant] = (1, 2) + +# --- RuleExpr = 2 --- +PARENTHESIS_EXPR: Final[RuleConstant] = (2, 0) +FUNCTIONS_EXPRESSION: Final[RuleConstant] = (2, 1) +CLAUSE_EXPR: Final[RuleConstant] = (2, 2) +MEMBERSHIP_EXPR: Final[RuleConstant] = (2, 3) +UNARY_EXPR: Final[RuleConstant] = (2, 4) +ARITHMETIC_EXPR: Final[RuleConstant] = (2, 5) +ARITHMETIC_EXPR_OR_CONCAT: Final[RuleConstant] = (2, 6) +COMPARISON_EXPR: Final[RuleConstant] = (2, 7) +IN_NOT_IN_EXPR: Final[RuleConstant] = (2, 8) +BOOLEAN_EXPR: Final[RuleConstant] = (2, 9) +IF_EXPR: Final[RuleConstant] = (2, 10) +CASE_EXPR: Final[RuleConstant] = (2, 11) +CONSTANT_EXPR: Final[RuleConstant] = (2, 12) +VAR_ID_EXPR: Final[RuleConstant] = (2, 13) + +# --- RuleExprComponent = 3 --- +PARENTHESIS_EXPR_COMP: Final[RuleConstant] = (3, 0) +FUNCTIONS_EXPRESSION_COMP: Final[RuleConstant] = (3, 1) +UNARY_EXPR_COMP: Final[RuleConstant] = (3, 2) +ARITHMETIC_EXPR_COMP: Final[RuleConstant] = (3, 3) +ARITHMETIC_EXPR_OR_CONCAT_COMP: Final[RuleConstant] = (3, 4) +COMPARISON_EXPR_COMP: Final[RuleConstant] = (3, 5) +IN_NOT_IN_EXPR_COMP: Final[RuleConstant] = (3, 6) +BOOLEAN_EXPR_COMP: Final[RuleConstant] = (3, 7) +IF_EXPR_COMP: Final[RuleConstant] = (3, 8) +CASE_EXPR_COMP: Final[RuleConstant] = (3, 9) +CONSTANT_EXPR_COMP: Final[RuleConstant] = (3, 10) +COMP_ID: Final[RuleConstant] = (3, 11) + +# --- RuleFunctionsComponents = 4 --- +GENERIC_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 0) +STRING_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 1) +NUMERIC_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 2) +COMPARISON_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 3) +TIME_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 4) +CONDITIONAL_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 5) +AGGREGATE_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 6) +ANALYTIC_FUNCTIONS_COMPONENTS: Final[RuleConstant] = (4, 7) + +# --- RuleFunctions = 5 --- +JOIN_FUNCTIONS: Final[RuleConstant] = (5, 0) +GENERIC_FUNCTIONS: Final[RuleConstant] = (5, 1) +STRING_FUNCTIONS: Final[RuleConstant] = (5, 2) +NUMERIC_FUNCTIONS: Final[RuleConstant] = (5, 3) +COMPARISON_FUNCTIONS: Final[RuleConstant] = (5, 4) +TIME_FUNCTIONS: Final[RuleConstant] = (5, 5) +SET_FUNCTIONS: Final[RuleConstant] = (5, 6) +HIERARCHY_FUNCTIONS: Final[RuleConstant] = (5, 7) +VALIDATION_FUNCTIONS: Final[RuleConstant] = (5, 8) +CONDITIONAL_FUNCTIONS: Final[RuleConstant] = (5, 9) +AGGREGATE_FUNCTIONS: Final[RuleConstant] = (5, 10) +ANALYTIC_FUNCTIONS: Final[RuleConstant] = (5, 11) + +# --- RuleJoinOperators = 15 --- +JOIN_EXPR: Final[RuleConstant] = (15, 0) + +# --- RuleDefOperators = 16 --- +DEF_OPERATOR: Final[RuleConstant] = (16, 0) +DEF_DATAPOINT_RULESET: Final[RuleConstant] = (16, 1) +DEF_HIERARCHICAL: Final[RuleConstant] = (16, 2) + +# --- RuleGenericOperators = 17 --- +CALL_DATASET: Final[RuleConstant] = (17, 0) +EVAL_ATOM: Final[RuleConstant] = (17, 1) +CAST_EXPR_DATASET: Final[RuleConstant] = (17, 2) + +# --- RuleGenericOperatorsComponent = 18 --- +CALL_COMPONENT: Final[RuleConstant] = (18, 0) +CAST_EXPR_COMPONENT: Final[RuleConstant] = (18, 1) +EVAL_ATOM_COMPONENT: Final[RuleConstant] = (18, 2) + +# --- RuleStringOperators = 21 --- +UNARY_STRING_FUNCTION: Final[RuleConstant] = (21, 0) +SUBSTR_ATOM: Final[RuleConstant] = (21, 1) +REPLACE_ATOM: Final[RuleConstant] = (21, 2) +INSTR_ATOM: Final[RuleConstant] = (21, 3) + +# --- RuleStringOperatorsComponent = 22 --- +UNARY_STRING_FUNCTION_COMPONENT: Final[RuleConstant] = (22, 0) +SUBSTR_ATOM_COMPONENT: Final[RuleConstant] = (22, 1) +REPLACE_ATOM_COMPONENT: Final[RuleConstant] = (22, 2) +INSTR_ATOM_COMPONENT: Final[RuleConstant] = (22, 3) + +# --- RuleNumericOperators = 23 --- +UNARY_NUMERIC: Final[RuleConstant] = (23, 0) +UNARY_WITH_OPTIONAL_NUMERIC: Final[RuleConstant] = (23, 1) +BINARY_NUMERIC: Final[RuleConstant] = (23, 2) + +# --- RuleNumericOperatorsComponent = 24 --- +UNARY_NUMERIC_COMPONENT: Final[RuleConstant] = (24, 0) +UNARY_WITH_OPTIONAL_NUMERIC_COMPONENT: Final[RuleConstant] = (24, 1) +BINARY_NUMERIC_COMPONENT: Final[RuleConstant] = (24, 2) + +# --- RuleComparisonOperators = 25 --- +BETWEEN_ATOM: Final[RuleConstant] = (25, 0) +CHARSET_MATCH_ATOM: Final[RuleConstant] = (25, 1) +IS_NULL_ATOM: Final[RuleConstant] = (25, 2) +EXIST_IN_ATOM: Final[RuleConstant] = (25, 3) + +# --- RuleComparisonOperatorsComponent = 26 --- +BETWEEN_ATOM_COMPONENT: Final[RuleConstant] = (26, 0) +CHARSET_MATCH_ATOM_COMPONENT: Final[RuleConstant] = (26, 1) +IS_NULL_ATOM_COMPONENT: Final[RuleConstant] = (26, 2) + +# --- RuleTimeOperators = 27 --- +PERIOD_ATOM: Final[RuleConstant] = (27, 0) +FILL_TIME_ATOM: Final[RuleConstant] = (27, 1) +FLOW_ATOM: Final[RuleConstant] = (27, 2) +TIME_SHIFT_ATOM: Final[RuleConstant] = (27, 3) +TIME_AGG_ATOM: Final[RuleConstant] = (27, 4) +CURRENT_DATE_ATOM: Final[RuleConstant] = (27, 5) +DATE_DIFF_ATOM: Final[RuleConstant] = (27, 6) +DATE_ADD_ATOM: Final[RuleConstant] = (27, 7) +YEAR_ATOM: Final[RuleConstant] = (27, 8) +MONTH_ATOM: Final[RuleConstant] = (27, 9) +DAY_OF_MONTH_ATOM: Final[RuleConstant] = (27, 10) +DAY_OF_YEAR_ATOM: Final[RuleConstant] = (27, 11) +DAY_TO_YEAR_ATOM: Final[RuleConstant] = (27, 12) +DAY_TO_MONTH_ATOM: Final[RuleConstant] = (27, 13) +YEAR_TODAY_ATOM: Final[RuleConstant] = (27, 14) +MONTH_TODAY_ATOM: Final[RuleConstant] = (27, 15) + +# --- RuleTimeOperatorsComponent = 28 --- +PERIOD_ATOM_COMPONENT: Final[RuleConstant] = (28, 0) +FILL_TIME_ATOM_COMPONENT: Final[RuleConstant] = (28, 1) +FLOW_ATOM_COMPONENT: Final[RuleConstant] = (28, 2) +TIME_SHIFT_ATOM_COMPONENT: Final[RuleConstant] = (28, 3) +TIME_AGG_ATOM_COMPONENT: Final[RuleConstant] = (28, 4) +CURRENT_DATE_ATOM_COMPONENT: Final[RuleConstant] = (28, 5) +DATE_DIFF_ATOM_COMPONENT: Final[RuleConstant] = (28, 6) +DATE_ADD_ATOM_COMPONENT: Final[RuleConstant] = (28, 7) +YEAR_ATOM_COMPONENT: Final[RuleConstant] = (28, 8) +MONTH_ATOM_COMPONENT: Final[RuleConstant] = (28, 9) +DAY_OF_MONTH_ATOM_COMPONENT: Final[RuleConstant] = (28, 10) +DAT_OF_YEAR_ATOM_COMPONENT: Final[RuleConstant] = (28, 11) +DAY_TO_YEAR_ATOM_COMPONENT: Final[RuleConstant] = (28, 12) +DAY_TO_MONTH_ATOM_COMPONENT: Final[RuleConstant] = (28, 13) +YEAR_TODAY_ATOM_COMPONENT: Final[RuleConstant] = (28, 14) +MONTH_TODAY_ATOM_COMPONENT: Final[RuleConstant] = (28, 15) + +# --- RuleSetOperators = 29 --- +UNION_ATOM: Final[RuleConstant] = (29, 0) +INTERSECT_ATOM: Final[RuleConstant] = (29, 1) +SET_OR_SYM_DIFF_ATOM: Final[RuleConstant] = (29, 2) + +# --- RuleValidationOperators = 31 --- +VALIDATE_D_PRULESET: Final[RuleConstant] = (31, 0) +VALIDATE_HR_RULESET: Final[RuleConstant] = (31, 1) +VALIDATION_SIMPLE: Final[RuleConstant] = (31, 2) + +# --- RuleConditionalOperators = 32 --- +NVL_ATOM: Final[RuleConstant] = (32, 0) + +# --- RuleConditionalOperatorsComponent = 33 --- +NVL_ATOM_COMPONENT: Final[RuleConstant] = (33, 0) + +# --- RuleAggrOperators = 34 --- +AGGR_COMP: Final[RuleConstant] = (34, 0) +COUNT_AGGR_COMP: Final[RuleConstant] = (34, 1) + +# --- RuleAggrOperatorsGrouping = 35 --- +AGGR_DATASET: Final[RuleConstant] = (35, 0) + +# --- RuleAnFunction = 36 --- +AN_SIMPLE_FUNCTION: Final[RuleConstant] = (36, 0) +LAG_OR_LEAD_AN: Final[RuleConstant] = (36, 1) +RATIO_TO_REPORT_AN: Final[RuleConstant] = (36, 2) + +# --- RuleAnFunctionComponent = 37 --- +AN_SIMPLE_FUNCTION_COMPONENT: Final[RuleConstant] = (37, 0) +LAG_OR_LEAD_AN_COMPONENT: Final[RuleConstant] = (37, 1) +RANK_AN_COMPONENT: Final[RuleConstant] = (37, 2) +RATIO_TO_REPORT_AN_COMPONENT: Final[RuleConstant] = (37, 3) + +# --- RuleScalarItem = 43 --- +SIMPLE_SCALAR: Final[RuleConstant] = (43, 0) +SCALAR_WITH_CAST: Final[RuleConstant] = (43, 1) + +# --- RuleGroupingClause = 56 --- +GROUP_BY_OR_EXCEPT: Final[RuleConstant] = (56, 0) +GROUP_ALL: Final[RuleConstant] = (56, 1) + +# --- RuleDpRuleset = 68 --- +DATA_POINT: Final[RuleConstant] = (68, 0) +DATA_POINT_VD: Final[RuleConstant] = (68, 1) +DATA_POINT_VAR: Final[RuleConstant] = (68, 2) + +# --- RuleHrRuleset = 69 --- +HR_RULESET_TYPE: Final[RuleConstant] = (69, 0) +HR_RULESET_VD_TYPE: Final[RuleConstant] = (69, 1) +HR_RULESET_VAR_TYPE: Final[RuleConstant] = (69, 2) + +# --- RuleScalarTypeConstraint = 83 --- +CONDITION_CONSTRAINT: Final[RuleConstant] = (83, 0) +RANGE_CONSTRAINT: Final[RuleConstant] = (83, 1) + + +class RC: + """Namespace for rule constants, for convenient RC.XXX access.""" + + # Rules WITHOUT labeled alternatives + START = START + DATASET_CLAUSE = DATASET_CLAUSE + RENAME_CLAUSE = RENAME_CLAUSE + AGGR_CLAUSE = AGGR_CLAUSE + FILTER_CLAUSE = FILTER_CLAUSE + CALC_CLAUSE = CALC_CLAUSE + KEEP_OR_DROP_CLAUSE = KEEP_OR_DROP_CLAUSE + PIVOT_OR_UNPIVOT_CLAUSE = PIVOT_OR_UNPIVOT_CLAUSE + CUSTOM_PIVOT_CLAUSE = CUSTOM_PIVOT_CLAUSE + SUBSPACE_CLAUSE = SUBSPACE_CLAUSE + RENAME_CLAUSE_ITEM = RENAME_CLAUSE_ITEM + AGGREGATE_CLAUSE = AGGREGATE_CLAUSE + AGGR_FUNCTION_CLAUSE = AGGR_FUNCTION_CLAUSE + CALC_CLAUSE_ITEM = CALC_CLAUSE_ITEM + SUBSPACE_CLAUSE_ITEM = SUBSPACE_CLAUSE_ITEM + JOIN_CLAUSE_WITHOUT_USING = JOIN_CLAUSE_WITHOUT_USING + JOIN_CLAUSE = JOIN_CLAUSE + JOIN_CLAUSE_ITEM = JOIN_CLAUSE_ITEM + JOIN_BODY = JOIN_BODY + JOIN_APPLY_CLAUSE = JOIN_APPLY_CLAUSE + PARTITION_BY_CLAUSE = PARTITION_BY_CLAUSE + ORDER_BY_CLAUSE = ORDER_BY_CLAUSE + ORDER_BY_ITEM = ORDER_BY_ITEM + WINDOWING_CLAUSE = WINDOWING_CLAUSE + SIGNED_INTEGER = SIGNED_INTEGER + SIGNED_NUMBER = SIGNED_NUMBER + LIMIT_CLAUSE_ITEM = LIMIT_CLAUSE_ITEM + HAVING_CLAUSE = HAVING_CLAUSE + PARAMETER_ITEM = PARAMETER_ITEM + OUTPUT_PARAMETER_TYPE = OUTPUT_PARAMETER_TYPE + OUTPUT_PARAMETER_TYPE_COMPONENT = OUTPUT_PARAMETER_TYPE_COMPONENT + INPUT_PARAMETER_TYPE = INPUT_PARAMETER_TYPE + RULESET_TYPE = RULESET_TYPE + SCALAR_TYPE = SCALAR_TYPE + COMPONENT_TYPE = COMPONENT_TYPE + DATASET_TYPE = DATASET_TYPE + EVAL_DATASET_TYPE = EVAL_DATASET_TYPE + SCALAR_SET_TYPE = SCALAR_SET_TYPE + VALUE_DOMAIN_NAME = VALUE_DOMAIN_NAME + RULESET_ID = RULESET_ID + RULESET_SIGNATURE = RULESET_SIGNATURE + SIGNATURE = SIGNATURE + RULE_CLAUSE_DATAPOINT = RULE_CLAUSE_DATAPOINT + RULE_ITEM_DATAPOINT = RULE_ITEM_DATAPOINT + RULE_CLAUSE_HIERARCHICAL = RULE_CLAUSE_HIERARCHICAL + RULE_ITEM_HIERARCHICAL = RULE_ITEM_HIERARCHICAL + HIER_RULE_SIGNATURE = HIER_RULE_SIGNATURE + VALUE_DOMAIN_SIGNATURE = VALUE_DOMAIN_SIGNATURE + CODE_ITEM_RELATION = CODE_ITEM_RELATION + CODE_ITEM_RELATION_CLAUSE = CODE_ITEM_RELATION_CLAUSE + VALUE_DOMAIN_VALUE = VALUE_DOMAIN_VALUE + COMP_CONSTRAINT = COMP_CONSTRAINT + MULT_MODIFIER = MULT_MODIFIER + VALIDATION_OUTPUT = VALIDATION_OUTPUT + VALIDATION_MODE = VALIDATION_MODE + CONDITION_CLAUSE = CONDITION_CLAUSE + INPUT_MODE = INPUT_MODE + IMBALANCE_EXPR = IMBALANCE_EXPR + INPUT_MODE_HIERARCHY = INPUT_MODE_HIERARCHY + OUTPUT_MODE_HIERARCHY = OUTPUT_MODE_HIERARCHY + ALIAS = ALIAS + VAR_ID = VAR_ID + SIMPLE_COMPONENT_ID = SIMPLE_COMPONENT_ID + COMPONENT_ID = COMPONENT_ID + LISTS = LISTS + ER_CODE = ER_CODE + ER_LEVEL = ER_LEVEL + COMPARISON_OPERAND = COMPARISON_OPERAND + OPTIONAL_EXPR = OPTIONAL_EXPR + OPTIONAL_EXPR_COMPONENT = OPTIONAL_EXPR_COMPONENT + COMPONENT_ROLE = COMPONENT_ROLE + VIRAL_ATTRIBUTE = VIRAL_ATTRIBUTE + VALUE_DOMAIN_ID = VALUE_DOMAIN_ID + OPERATOR_ID = OPERATOR_ID + ROUTINE_NAME = ROUTINE_NAME + CONSTANT = CONSTANT + BASIC_SCALAR_TYPE = BASIC_SCALAR_TYPE + RETAIN_TYPE = RETAIN_TYPE + PARAMETER_COMPONENT = PARAMETER_COMPONENT + PARAMETER = PARAMETER + HIERARCHY_OPERATORS = HIERARCHY_OPERATORS + + # Rules WITH labeled alternatives + TEMPORARY_ASSIGNMENT = TEMPORARY_ASSIGNMENT + PERSIST_ASSIGNMENT = PERSIST_ASSIGNMENT + DEFINE_EXPRESSION = DEFINE_EXPRESSION + PARENTHESIS_EXPR = PARENTHESIS_EXPR + FUNCTIONS_EXPRESSION = FUNCTIONS_EXPRESSION + CLAUSE_EXPR = CLAUSE_EXPR + MEMBERSHIP_EXPR = MEMBERSHIP_EXPR + UNARY_EXPR = UNARY_EXPR + ARITHMETIC_EXPR = ARITHMETIC_EXPR + ARITHMETIC_EXPR_OR_CONCAT = ARITHMETIC_EXPR_OR_CONCAT + COMPARISON_EXPR = COMPARISON_EXPR + IN_NOT_IN_EXPR = IN_NOT_IN_EXPR + BOOLEAN_EXPR = BOOLEAN_EXPR + IF_EXPR = IF_EXPR + CASE_EXPR = CASE_EXPR + CONSTANT_EXPR = CONSTANT_EXPR + VAR_ID_EXPR = VAR_ID_EXPR + PARENTHESIS_EXPR_COMP = PARENTHESIS_EXPR_COMP + FUNCTIONS_EXPRESSION_COMP = FUNCTIONS_EXPRESSION_COMP + UNARY_EXPR_COMP = UNARY_EXPR_COMP + ARITHMETIC_EXPR_COMP = ARITHMETIC_EXPR_COMP + ARITHMETIC_EXPR_OR_CONCAT_COMP = ARITHMETIC_EXPR_OR_CONCAT_COMP + COMPARISON_EXPR_COMP = COMPARISON_EXPR_COMP + IN_NOT_IN_EXPR_COMP = IN_NOT_IN_EXPR_COMP + BOOLEAN_EXPR_COMP = BOOLEAN_EXPR_COMP + IF_EXPR_COMP = IF_EXPR_COMP + CASE_EXPR_COMP = CASE_EXPR_COMP + CONSTANT_EXPR_COMP = CONSTANT_EXPR_COMP + COMP_ID = COMP_ID + GENERIC_FUNCTIONS_COMPONENTS = GENERIC_FUNCTIONS_COMPONENTS + STRING_FUNCTIONS_COMPONENTS = STRING_FUNCTIONS_COMPONENTS + NUMERIC_FUNCTIONS_COMPONENTS = NUMERIC_FUNCTIONS_COMPONENTS + COMPARISON_FUNCTIONS_COMPONENTS = COMPARISON_FUNCTIONS_COMPONENTS + TIME_FUNCTIONS_COMPONENTS = TIME_FUNCTIONS_COMPONENTS + CONDITIONAL_FUNCTIONS_COMPONENTS = CONDITIONAL_FUNCTIONS_COMPONENTS + AGGREGATE_FUNCTIONS_COMPONENTS = AGGREGATE_FUNCTIONS_COMPONENTS + ANALYTIC_FUNCTIONS_COMPONENTS = ANALYTIC_FUNCTIONS_COMPONENTS + JOIN_FUNCTIONS = JOIN_FUNCTIONS + GENERIC_FUNCTIONS = GENERIC_FUNCTIONS + STRING_FUNCTIONS = STRING_FUNCTIONS + NUMERIC_FUNCTIONS = NUMERIC_FUNCTIONS + COMPARISON_FUNCTIONS = COMPARISON_FUNCTIONS + TIME_FUNCTIONS = TIME_FUNCTIONS + SET_FUNCTIONS = SET_FUNCTIONS + HIERARCHY_FUNCTIONS = HIERARCHY_FUNCTIONS + VALIDATION_FUNCTIONS = VALIDATION_FUNCTIONS + CONDITIONAL_FUNCTIONS = CONDITIONAL_FUNCTIONS + AGGREGATE_FUNCTIONS = AGGREGATE_FUNCTIONS + ANALYTIC_FUNCTIONS = ANALYTIC_FUNCTIONS + JOIN_EXPR = JOIN_EXPR + DEF_OPERATOR = DEF_OPERATOR + DEF_DATAPOINT_RULESET = DEF_DATAPOINT_RULESET + DEF_HIERARCHICAL = DEF_HIERARCHICAL + CALL_DATASET = CALL_DATASET + EVAL_ATOM = EVAL_ATOM + CAST_EXPR_DATASET = CAST_EXPR_DATASET + CALL_COMPONENT = CALL_COMPONENT + CAST_EXPR_COMPONENT = CAST_EXPR_COMPONENT + EVAL_ATOM_COMPONENT = EVAL_ATOM_COMPONENT + UNARY_STRING_FUNCTION = UNARY_STRING_FUNCTION + SUBSTR_ATOM = SUBSTR_ATOM + REPLACE_ATOM = REPLACE_ATOM + INSTR_ATOM = INSTR_ATOM + UNARY_STRING_FUNCTION_COMPONENT = UNARY_STRING_FUNCTION_COMPONENT + SUBSTR_ATOM_COMPONENT = SUBSTR_ATOM_COMPONENT + REPLACE_ATOM_COMPONENT = REPLACE_ATOM_COMPONENT + INSTR_ATOM_COMPONENT = INSTR_ATOM_COMPONENT + UNARY_NUMERIC = UNARY_NUMERIC + UNARY_WITH_OPTIONAL_NUMERIC = UNARY_WITH_OPTIONAL_NUMERIC + BINARY_NUMERIC = BINARY_NUMERIC + UNARY_NUMERIC_COMPONENT = UNARY_NUMERIC_COMPONENT + UNARY_WITH_OPTIONAL_NUMERIC_COMPONENT = UNARY_WITH_OPTIONAL_NUMERIC_COMPONENT + BINARY_NUMERIC_COMPONENT = BINARY_NUMERIC_COMPONENT + BETWEEN_ATOM = BETWEEN_ATOM + CHARSET_MATCH_ATOM = CHARSET_MATCH_ATOM + IS_NULL_ATOM = IS_NULL_ATOM + EXIST_IN_ATOM = EXIST_IN_ATOM + BETWEEN_ATOM_COMPONENT = BETWEEN_ATOM_COMPONENT + CHARSET_MATCH_ATOM_COMPONENT = CHARSET_MATCH_ATOM_COMPONENT + IS_NULL_ATOM_COMPONENT = IS_NULL_ATOM_COMPONENT + PERIOD_ATOM = PERIOD_ATOM + FILL_TIME_ATOM = FILL_TIME_ATOM + FLOW_ATOM = FLOW_ATOM + TIME_SHIFT_ATOM = TIME_SHIFT_ATOM + TIME_AGG_ATOM = TIME_AGG_ATOM + CURRENT_DATE_ATOM = CURRENT_DATE_ATOM + DATE_DIFF_ATOM = DATE_DIFF_ATOM + DATE_ADD_ATOM = DATE_ADD_ATOM + YEAR_ATOM = YEAR_ATOM + MONTH_ATOM = MONTH_ATOM + DAY_OF_MONTH_ATOM = DAY_OF_MONTH_ATOM + DAY_OF_YEAR_ATOM = DAY_OF_YEAR_ATOM + DAY_TO_YEAR_ATOM = DAY_TO_YEAR_ATOM + DAY_TO_MONTH_ATOM = DAY_TO_MONTH_ATOM + YEAR_TODAY_ATOM = YEAR_TODAY_ATOM + MONTH_TODAY_ATOM = MONTH_TODAY_ATOM + PERIOD_ATOM_COMPONENT = PERIOD_ATOM_COMPONENT + FILL_TIME_ATOM_COMPONENT = FILL_TIME_ATOM_COMPONENT + FLOW_ATOM_COMPONENT = FLOW_ATOM_COMPONENT + TIME_SHIFT_ATOM_COMPONENT = TIME_SHIFT_ATOM_COMPONENT + TIME_AGG_ATOM_COMPONENT = TIME_AGG_ATOM_COMPONENT + CURRENT_DATE_ATOM_COMPONENT = CURRENT_DATE_ATOM_COMPONENT + DATE_DIFF_ATOM_COMPONENT = DATE_DIFF_ATOM_COMPONENT + DATE_ADD_ATOM_COMPONENT = DATE_ADD_ATOM_COMPONENT + YEAR_ATOM_COMPONENT = YEAR_ATOM_COMPONENT + MONTH_ATOM_COMPONENT = MONTH_ATOM_COMPONENT + DAY_OF_MONTH_ATOM_COMPONENT = DAY_OF_MONTH_ATOM_COMPONENT + DAT_OF_YEAR_ATOM_COMPONENT = DAT_OF_YEAR_ATOM_COMPONENT + DAY_TO_YEAR_ATOM_COMPONENT = DAY_TO_YEAR_ATOM_COMPONENT + DAY_TO_MONTH_ATOM_COMPONENT = DAY_TO_MONTH_ATOM_COMPONENT + YEAR_TODAY_ATOM_COMPONENT = YEAR_TODAY_ATOM_COMPONENT + MONTH_TODAY_ATOM_COMPONENT = MONTH_TODAY_ATOM_COMPONENT + UNION_ATOM = UNION_ATOM + INTERSECT_ATOM = INTERSECT_ATOM + SET_OR_SYM_DIFF_ATOM = SET_OR_SYM_DIFF_ATOM + VALIDATE_D_PRULESET = VALIDATE_D_PRULESET + VALIDATE_HR_RULESET = VALIDATE_HR_RULESET + VALIDATION_SIMPLE = VALIDATION_SIMPLE + NVL_ATOM = NVL_ATOM + NVL_ATOM_COMPONENT = NVL_ATOM_COMPONENT + AGGR_COMP = AGGR_COMP + COUNT_AGGR_COMP = COUNT_AGGR_COMP + AGGR_DATASET = AGGR_DATASET + AN_SIMPLE_FUNCTION = AN_SIMPLE_FUNCTION + LAG_OR_LEAD_AN = LAG_OR_LEAD_AN + RATIO_TO_REPORT_AN = RATIO_TO_REPORT_AN + AN_SIMPLE_FUNCTION_COMPONENT = AN_SIMPLE_FUNCTION_COMPONENT + LAG_OR_LEAD_AN_COMPONENT = LAG_OR_LEAD_AN_COMPONENT + RANK_AN_COMPONENT = RANK_AN_COMPONENT + RATIO_TO_REPORT_AN_COMPONENT = RATIO_TO_REPORT_AN_COMPONENT + SIMPLE_SCALAR = SIMPLE_SCALAR + SCALAR_WITH_CAST = SCALAR_WITH_CAST + GROUP_BY_OR_EXCEPT = GROUP_BY_OR_EXCEPT + GROUP_ALL = GROUP_ALL + DATA_POINT = DATA_POINT + DATA_POINT_VD = DATA_POINT_VD + DATA_POINT_VAR = DATA_POINT_VAR + HR_RULESET_TYPE = HR_RULESET_TYPE + HR_RULESET_VD_TYPE = HR_RULESET_VD_TYPE + HR_RULESET_VAR_TYPE = HR_RULESET_VAR_TYPE + CONDITION_CONSTRAINT = CONDITION_CONSTRAINT + RANGE_CONSTRAINT = RANGE_CONSTRAINT diff --git a/src/vtlengine/AST/Grammar/_cpp_parser/bindings.cpp b/src/vtlengine/AST/Grammar/_cpp_parser/bindings.cpp new file mode 100644 index 000000000..c87340154 --- /dev/null +++ b/src/vtlengine/AST/Grammar/_cpp_parser/bindings.cpp @@ -0,0 +1,843 @@ +/** + * vtl_cpp_parser - pybind11 bindings for ANTLR4 C++ VTL parser + * + * Exposes two lightweight wrapper classes (ParseNode, TerminalNode) plus + * a parse() function that lexes + parses VTL text in C++ and returns + * a wrapped parse tree to Python. + * + * Uses LAZY wrapping: ParseNode holds a raw pointer to the C++ parse tree + * context. Children are only wrapped into Python objects when .children is + * accessed. This avoids creating ~611K Python objects eagerly. + */ + +#include +#include + +#include "antlr4-runtime.h" +#include "VtlLexer.h" +#include "VtlParser.h" + +#include +#include +#include +#include +#include + +namespace py = pybind11; + +// ============================================================ +// Type → (rule_index, alt_index) mapping +// ============================================================ +static std::unordered_map> g_type_map; + +static void init_type_map() { + if (!g_type_map.empty()) return; + + // Rules without labeled alternatives: alt_index = -1 + g_type_map[typeid(VtlParser::StartContext)] = {VtlParser::RuleStart, -1}; + g_type_map[typeid(VtlParser::DatasetClauseContext)] = {VtlParser::RuleDatasetClause, -1}; + g_type_map[typeid(VtlParser::RenameClauseContext)] = {VtlParser::RuleRenameClause, -1}; + g_type_map[typeid(VtlParser::AggrClauseContext)] = {VtlParser::RuleAggrClause, -1}; + g_type_map[typeid(VtlParser::FilterClauseContext)] = {VtlParser::RuleFilterClause, -1}; + g_type_map[typeid(VtlParser::CalcClauseContext)] = {VtlParser::RuleCalcClause, -1}; + g_type_map[typeid(VtlParser::KeepOrDropClauseContext)] = {VtlParser::RuleKeepOrDropClause, -1}; + g_type_map[typeid(VtlParser::PivotOrUnpivotClauseContext)] = {VtlParser::RulePivotOrUnpivotClause, -1}; + g_type_map[typeid(VtlParser::CustomPivotClauseContext)] = {VtlParser::RuleCustomPivotClause, -1}; + g_type_map[typeid(VtlParser::SubspaceClauseContext)] = {VtlParser::RuleSubspaceClause, -1}; + g_type_map[typeid(VtlParser::RenameClauseItemContext)] = {VtlParser::RuleRenameClauseItem, -1}; + g_type_map[typeid(VtlParser::AggregateClauseContext)] = {VtlParser::RuleAggregateClause, -1}; + g_type_map[typeid(VtlParser::AggrFunctionClauseContext)] = {VtlParser::RuleAggrFunctionClause, -1}; + g_type_map[typeid(VtlParser::CalcClauseItemContext)] = {VtlParser::RuleCalcClauseItem, -1}; + g_type_map[typeid(VtlParser::SubspaceClauseItemContext)] = {VtlParser::RuleSubspaceClauseItem, -1}; + g_type_map[typeid(VtlParser::JoinClauseWithoutUsingContext)] = {VtlParser::RuleJoinClauseWithoutUsing, -1}; + g_type_map[typeid(VtlParser::JoinClauseContext)] = {VtlParser::RuleJoinClause, -1}; + g_type_map[typeid(VtlParser::JoinClauseItemContext)] = {VtlParser::RuleJoinClauseItem, -1}; + g_type_map[typeid(VtlParser::JoinBodyContext)] = {VtlParser::RuleJoinBody, -1}; + g_type_map[typeid(VtlParser::JoinApplyClauseContext)] = {VtlParser::RuleJoinApplyClause, -1}; + g_type_map[typeid(VtlParser::PartitionByClauseContext)] = {VtlParser::RulePartitionByClause, -1}; + g_type_map[typeid(VtlParser::OrderByClauseContext)] = {VtlParser::RuleOrderByClause, -1}; + g_type_map[typeid(VtlParser::OrderByItemContext)] = {VtlParser::RuleOrderByItem, -1}; + g_type_map[typeid(VtlParser::WindowingClauseContext)] = {VtlParser::RuleWindowingClause, -1}; + g_type_map[typeid(VtlParser::SignedIntegerContext)] = {VtlParser::RuleSignedInteger, -1}; + g_type_map[typeid(VtlParser::SignedNumberContext)] = {VtlParser::RuleSignedNumber, -1}; + g_type_map[typeid(VtlParser::LimitClauseItemContext)] = {VtlParser::RuleLimitClauseItem, -1}; + g_type_map[typeid(VtlParser::HavingClauseContext)] = {VtlParser::RuleHavingClause, -1}; + g_type_map[typeid(VtlParser::ParameterItemContext)] = {VtlParser::RuleParameterItem, -1}; + g_type_map[typeid(VtlParser::OutputParameterTypeContext)] = {VtlParser::RuleOutputParameterType, -1}; + g_type_map[typeid(VtlParser::OutputParameterTypeComponentContext)] = {VtlParser::RuleOutputParameterTypeComponent, -1}; + g_type_map[typeid(VtlParser::InputParameterTypeContext)] = {VtlParser::RuleInputParameterType, -1}; + g_type_map[typeid(VtlParser::RulesetTypeContext)] = {VtlParser::RuleRulesetType, -1}; + g_type_map[typeid(VtlParser::ScalarTypeContext)] = {VtlParser::RuleScalarType, -1}; + g_type_map[typeid(VtlParser::ComponentTypeContext)] = {VtlParser::RuleComponentType, -1}; + g_type_map[typeid(VtlParser::DatasetTypeContext)] = {VtlParser::RuleDatasetType, -1}; + g_type_map[typeid(VtlParser::EvalDatasetTypeContext)] = {VtlParser::RuleEvalDatasetType, -1}; + g_type_map[typeid(VtlParser::ScalarSetTypeContext)] = {VtlParser::RuleScalarSetType, -1}; + g_type_map[typeid(VtlParser::ValueDomainNameContext)] = {VtlParser::RuleValueDomainName, -1}; + g_type_map[typeid(VtlParser::RulesetIDContext)] = {VtlParser::RuleRulesetID, -1}; + g_type_map[typeid(VtlParser::RulesetSignatureContext)] = {VtlParser::RuleRulesetSignature, -1}; + g_type_map[typeid(VtlParser::SignatureContext)] = {VtlParser::RuleSignature, -1}; + g_type_map[typeid(VtlParser::RuleClauseDatapointContext)] = {VtlParser::RuleRuleClauseDatapoint, -1}; + g_type_map[typeid(VtlParser::RuleItemDatapointContext)] = {VtlParser::RuleRuleItemDatapoint, -1}; + g_type_map[typeid(VtlParser::RuleClauseHierarchicalContext)] = {VtlParser::RuleRuleClauseHierarchical, -1}; + g_type_map[typeid(VtlParser::RuleItemHierarchicalContext)] = {VtlParser::RuleRuleItemHierarchical, -1}; + g_type_map[typeid(VtlParser::HierRuleSignatureContext)] = {VtlParser::RuleHierRuleSignature, -1}; + g_type_map[typeid(VtlParser::ValueDomainSignatureContext)] = {VtlParser::RuleValueDomainSignature, -1}; + g_type_map[typeid(VtlParser::CodeItemRelationContext)] = {VtlParser::RuleCodeItemRelation, -1}; + g_type_map[typeid(VtlParser::CodeItemRelationClauseContext)] = {VtlParser::RuleCodeItemRelationClause, -1}; + g_type_map[typeid(VtlParser::ValueDomainValueContext)] = {VtlParser::RuleValueDomainValue, -1}; + g_type_map[typeid(VtlParser::CompConstraintContext)] = {VtlParser::RuleCompConstraint, -1}; + g_type_map[typeid(VtlParser::MultModifierContext)] = {VtlParser::RuleMultModifier, -1}; + g_type_map[typeid(VtlParser::ValidationOutputContext)] = {VtlParser::RuleValidationOutput, -1}; + g_type_map[typeid(VtlParser::ValidationModeContext)] = {VtlParser::RuleValidationMode, -1}; + g_type_map[typeid(VtlParser::ConditionClauseContext)] = {VtlParser::RuleConditionClause, -1}; + g_type_map[typeid(VtlParser::InputModeContext)] = {VtlParser::RuleInputMode, -1}; + g_type_map[typeid(VtlParser::ImbalanceExprContext)] = {VtlParser::RuleImbalanceExpr, -1}; + g_type_map[typeid(VtlParser::InputModeHierarchyContext)] = {VtlParser::RuleInputModeHierarchy, -1}; + g_type_map[typeid(VtlParser::OutputModeHierarchyContext)] = {VtlParser::RuleOutputModeHierarchy, -1}; + g_type_map[typeid(VtlParser::AliasContext)] = {VtlParser::RuleAlias, -1}; + g_type_map[typeid(VtlParser::VarIDContext)] = {VtlParser::RuleVarID, -1}; + g_type_map[typeid(VtlParser::SimpleComponentIdContext)] = {VtlParser::RuleSimpleComponentId, -1}; + g_type_map[typeid(VtlParser::ComponentIDContext)] = {VtlParser::RuleComponentID, -1}; + g_type_map[typeid(VtlParser::ListsContext)] = {VtlParser::RuleLists, -1}; + g_type_map[typeid(VtlParser::ErCodeContext)] = {VtlParser::RuleErCode, -1}; + g_type_map[typeid(VtlParser::ErLevelContext)] = {VtlParser::RuleErLevel, -1}; + g_type_map[typeid(VtlParser::ComparisonOperandContext)] = {VtlParser::RuleComparisonOperand, -1}; + g_type_map[typeid(VtlParser::OptionalExprContext)] = {VtlParser::RuleOptionalExpr, -1}; + g_type_map[typeid(VtlParser::OptionalExprComponentContext)] = {VtlParser::RuleOptionalExprComponent, -1}; + g_type_map[typeid(VtlParser::ComponentRoleContext)] = {VtlParser::RuleComponentRole, -1}; + g_type_map[typeid(VtlParser::ViralAttributeContext)] = {VtlParser::RuleViralAttribute, -1}; + g_type_map[typeid(VtlParser::ValueDomainIDContext)] = {VtlParser::RuleValueDomainID, -1}; + g_type_map[typeid(VtlParser::OperatorIDContext)] = {VtlParser::RuleOperatorID, -1}; + g_type_map[typeid(VtlParser::RoutineNameContext)] = {VtlParser::RuleRoutineName, -1}; + g_type_map[typeid(VtlParser::ConstantContext)] = {VtlParser::RuleConstant, -1}; + g_type_map[typeid(VtlParser::BasicScalarTypeContext)] = {VtlParser::RuleBasicScalarType, -1}; + g_type_map[typeid(VtlParser::RetainTypeContext)] = {VtlParser::RuleRetainType, -1}; + g_type_map[typeid(VtlParser::ParameterComponentContext)] = {VtlParser::RuleParameterComponent, -1}; + g_type_map[typeid(VtlParser::ParameterContext)] = {VtlParser::RuleParameter, -1}; + g_type_map[typeid(VtlParser::HierarchyOperatorsContext)] = {VtlParser::RuleHierarchyOperators, -1}; + + // Statement alternatives + g_type_map[typeid(VtlParser::TemporaryAssignmentContext)] = {VtlParser::RuleStatement, 0}; + g_type_map[typeid(VtlParser::PersistAssignmentContext)] = {VtlParser::RuleStatement, 1}; + g_type_map[typeid(VtlParser::DefineExpressionContext)] = {VtlParser::RuleStatement, 2}; + + // Expr alternatives + g_type_map[typeid(VtlParser::ParenthesisExprContext)] = {VtlParser::RuleExpr, 0}; + g_type_map[typeid(VtlParser::FunctionsExpressionContext)] = {VtlParser::RuleExpr, 1}; + g_type_map[typeid(VtlParser::ClauseExprContext)] = {VtlParser::RuleExpr, 2}; + g_type_map[typeid(VtlParser::MembershipExprContext)] = {VtlParser::RuleExpr, 3}; + g_type_map[typeid(VtlParser::UnaryExprContext)] = {VtlParser::RuleExpr, 4}; + g_type_map[typeid(VtlParser::ArithmeticExprContext)] = {VtlParser::RuleExpr, 5}; + g_type_map[typeid(VtlParser::ArithmeticExprOrConcatContext)] = {VtlParser::RuleExpr, 6}; + g_type_map[typeid(VtlParser::ComparisonExprContext)] = {VtlParser::RuleExpr, 7}; + g_type_map[typeid(VtlParser::InNotInExprContext)] = {VtlParser::RuleExpr, 8}; + g_type_map[typeid(VtlParser::BooleanExprContext)] = {VtlParser::RuleExpr, 9}; + g_type_map[typeid(VtlParser::IfExprContext)] = {VtlParser::RuleExpr, 10}; + g_type_map[typeid(VtlParser::CaseExprContext)] = {VtlParser::RuleExpr, 11}; + g_type_map[typeid(VtlParser::ConstantExprContext)] = {VtlParser::RuleExpr, 12}; + g_type_map[typeid(VtlParser::VarIdExprContext)] = {VtlParser::RuleExpr, 13}; + + // ExprComponent alternatives + g_type_map[typeid(VtlParser::ParenthesisExprCompContext)] = {VtlParser::RuleExprComponent, 0}; + g_type_map[typeid(VtlParser::FunctionsExpressionCompContext)] = {VtlParser::RuleExprComponent, 1}; + g_type_map[typeid(VtlParser::UnaryExprCompContext)] = {VtlParser::RuleExprComponent, 2}; + g_type_map[typeid(VtlParser::ArithmeticExprCompContext)] = {VtlParser::RuleExprComponent, 3}; + g_type_map[typeid(VtlParser::ArithmeticExprOrConcatCompContext)] = {VtlParser::RuleExprComponent, 4}; + g_type_map[typeid(VtlParser::ComparisonExprCompContext)] = {VtlParser::RuleExprComponent, 5}; + g_type_map[typeid(VtlParser::InNotInExprCompContext)] = {VtlParser::RuleExprComponent, 6}; + g_type_map[typeid(VtlParser::BooleanExprCompContext)] = {VtlParser::RuleExprComponent, 7}; + g_type_map[typeid(VtlParser::IfExprCompContext)] = {VtlParser::RuleExprComponent, 8}; + g_type_map[typeid(VtlParser::CaseExprCompContext)] = {VtlParser::RuleExprComponent, 9}; + g_type_map[typeid(VtlParser::ConstantExprCompContext)] = {VtlParser::RuleExprComponent, 10}; + g_type_map[typeid(VtlParser::CompIdContext)] = {VtlParser::RuleExprComponent, 11}; + + // FunctionsComponents alternatives + g_type_map[typeid(VtlParser::GenericFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 0}; + g_type_map[typeid(VtlParser::StringFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 1}; + g_type_map[typeid(VtlParser::NumericFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 2}; + g_type_map[typeid(VtlParser::ComparisonFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 3}; + g_type_map[typeid(VtlParser::TimeFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 4}; + g_type_map[typeid(VtlParser::ConditionalFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 5}; + g_type_map[typeid(VtlParser::AggregateFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 6}; + g_type_map[typeid(VtlParser::AnalyticFunctionsComponentsContext)] = {VtlParser::RuleFunctionsComponents, 7}; + + // Functions alternatives + g_type_map[typeid(VtlParser::JoinFunctionsContext)] = {VtlParser::RuleFunctions, 0}; + g_type_map[typeid(VtlParser::GenericFunctionsContext)] = {VtlParser::RuleFunctions, 1}; + g_type_map[typeid(VtlParser::StringFunctionsContext)] = {VtlParser::RuleFunctions, 2}; + g_type_map[typeid(VtlParser::NumericFunctionsContext)] = {VtlParser::RuleFunctions, 3}; + g_type_map[typeid(VtlParser::ComparisonFunctionsContext)] = {VtlParser::RuleFunctions, 4}; + g_type_map[typeid(VtlParser::TimeFunctionsContext)] = {VtlParser::RuleFunctions, 5}; + g_type_map[typeid(VtlParser::SetFunctionsContext)] = {VtlParser::RuleFunctions, 6}; + g_type_map[typeid(VtlParser::HierarchyFunctionsContext)] = {VtlParser::RuleFunctions, 7}; + g_type_map[typeid(VtlParser::ValidationFunctionsContext)] = {VtlParser::RuleFunctions, 8}; + g_type_map[typeid(VtlParser::ConditionalFunctionsContext)] = {VtlParser::RuleFunctions, 9}; + g_type_map[typeid(VtlParser::AggregateFunctionsContext)] = {VtlParser::RuleFunctions, 10}; + g_type_map[typeid(VtlParser::AnalyticFunctionsContext)] = {VtlParser::RuleFunctions, 11}; + + // JoinOperators alternatives + g_type_map[typeid(VtlParser::JoinExprContext)] = {VtlParser::RuleJoinOperators, 0}; + + // DefOperators alternatives + g_type_map[typeid(VtlParser::DefOperatorContext)] = {VtlParser::RuleDefOperators, 0}; + g_type_map[typeid(VtlParser::DefDatapointRulesetContext)] = {VtlParser::RuleDefOperators, 1}; + g_type_map[typeid(VtlParser::DefHierarchicalContext)] = {VtlParser::RuleDefOperators, 2}; + + // GenericOperators alternatives + g_type_map[typeid(VtlParser::CallDatasetContext)] = {VtlParser::RuleGenericOperators, 0}; + g_type_map[typeid(VtlParser::EvalAtomContext)] = {VtlParser::RuleGenericOperators, 1}; + g_type_map[typeid(VtlParser::CastExprDatasetContext)] = {VtlParser::RuleGenericOperators, 2}; + + // GenericOperatorsComponent alternatives + g_type_map[typeid(VtlParser::CallComponentContext)] = {VtlParser::RuleGenericOperatorsComponent, 0}; + g_type_map[typeid(VtlParser::CastExprComponentContext)] = {VtlParser::RuleGenericOperatorsComponent, 1}; + g_type_map[typeid(VtlParser::EvalAtomComponentContext)] = {VtlParser::RuleGenericOperatorsComponent, 2}; + + // StringOperators alternatives + g_type_map[typeid(VtlParser::UnaryStringFunctionContext)] = {VtlParser::RuleStringOperators, 0}; + g_type_map[typeid(VtlParser::SubstrAtomContext)] = {VtlParser::RuleStringOperators, 1}; + g_type_map[typeid(VtlParser::ReplaceAtomContext)] = {VtlParser::RuleStringOperators, 2}; + g_type_map[typeid(VtlParser::InstrAtomContext)] = {VtlParser::RuleStringOperators, 3}; + + // StringOperatorsComponent alternatives + g_type_map[typeid(VtlParser::UnaryStringFunctionComponentContext)] = {VtlParser::RuleStringOperatorsComponent, 0}; + g_type_map[typeid(VtlParser::SubstrAtomComponentContext)] = {VtlParser::RuleStringOperatorsComponent, 1}; + g_type_map[typeid(VtlParser::ReplaceAtomComponentContext)] = {VtlParser::RuleStringOperatorsComponent, 2}; + g_type_map[typeid(VtlParser::InstrAtomComponentContext)] = {VtlParser::RuleStringOperatorsComponent, 3}; + + // NumericOperators alternatives + g_type_map[typeid(VtlParser::UnaryNumericContext)] = {VtlParser::RuleNumericOperators, 0}; + g_type_map[typeid(VtlParser::UnaryWithOptionalNumericContext)] = {VtlParser::RuleNumericOperators, 1}; + g_type_map[typeid(VtlParser::BinaryNumericContext)] = {VtlParser::RuleNumericOperators, 2}; + + // NumericOperatorsComponent alternatives + g_type_map[typeid(VtlParser::UnaryNumericComponentContext)] = {VtlParser::RuleNumericOperatorsComponent, 0}; + g_type_map[typeid(VtlParser::UnaryWithOptionalNumericComponentContext)] = {VtlParser::RuleNumericOperatorsComponent, 1}; + g_type_map[typeid(VtlParser::BinaryNumericComponentContext)] = {VtlParser::RuleNumericOperatorsComponent, 2}; + + // ComparisonOperators alternatives + g_type_map[typeid(VtlParser::BetweenAtomContext)] = {VtlParser::RuleComparisonOperators, 0}; + g_type_map[typeid(VtlParser::CharsetMatchAtomContext)] = {VtlParser::RuleComparisonOperators, 1}; + g_type_map[typeid(VtlParser::IsNullAtomContext)] = {VtlParser::RuleComparisonOperators, 2}; + g_type_map[typeid(VtlParser::ExistInAtomContext)] = {VtlParser::RuleComparisonOperators, 3}; + + // ComparisonOperatorsComponent alternatives + g_type_map[typeid(VtlParser::BetweenAtomComponentContext)] = {VtlParser::RuleComparisonOperatorsComponent, 0}; + g_type_map[typeid(VtlParser::CharsetMatchAtomComponentContext)] = {VtlParser::RuleComparisonOperatorsComponent, 1}; + g_type_map[typeid(VtlParser::IsNullAtomComponentContext)] = {VtlParser::RuleComparisonOperatorsComponent, 2}; + + // TimeOperators alternatives + g_type_map[typeid(VtlParser::PeriodAtomContext)] = {VtlParser::RuleTimeOperators, 0}; + g_type_map[typeid(VtlParser::FillTimeAtomContext)] = {VtlParser::RuleTimeOperators, 1}; + g_type_map[typeid(VtlParser::FlowAtomContext)] = {VtlParser::RuleTimeOperators, 2}; + g_type_map[typeid(VtlParser::TimeShiftAtomContext)] = {VtlParser::RuleTimeOperators, 3}; + g_type_map[typeid(VtlParser::TimeAggAtomContext)] = {VtlParser::RuleTimeOperators, 4}; + g_type_map[typeid(VtlParser::CurrentDateAtomContext)] = {VtlParser::RuleTimeOperators, 5}; + g_type_map[typeid(VtlParser::DateDiffAtomContext)] = {VtlParser::RuleTimeOperators, 6}; + g_type_map[typeid(VtlParser::DateAddAtomContext)] = {VtlParser::RuleTimeOperators, 7}; + g_type_map[typeid(VtlParser::YearAtomContext)] = {VtlParser::RuleTimeOperators, 8}; + g_type_map[typeid(VtlParser::MonthAtomContext)] = {VtlParser::RuleTimeOperators, 9}; + g_type_map[typeid(VtlParser::DayOfMonthAtomContext)] = {VtlParser::RuleTimeOperators, 10}; + g_type_map[typeid(VtlParser::DayOfYearAtomContext)] = {VtlParser::RuleTimeOperators, 11}; + g_type_map[typeid(VtlParser::DayToYearAtomContext)] = {VtlParser::RuleTimeOperators, 12}; + g_type_map[typeid(VtlParser::DayToMonthAtomContext)] = {VtlParser::RuleTimeOperators, 13}; + g_type_map[typeid(VtlParser::YearTodayAtomContext)] = {VtlParser::RuleTimeOperators, 14}; + g_type_map[typeid(VtlParser::MonthTodayAtomContext)] = {VtlParser::RuleTimeOperators, 15}; + + // TimeOperatorsComponent alternatives + g_type_map[typeid(VtlParser::PeriodAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 0}; + g_type_map[typeid(VtlParser::FillTimeAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 1}; + g_type_map[typeid(VtlParser::FlowAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 2}; + g_type_map[typeid(VtlParser::TimeShiftAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 3}; + g_type_map[typeid(VtlParser::TimeAggAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 4}; + g_type_map[typeid(VtlParser::CurrentDateAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 5}; + g_type_map[typeid(VtlParser::DateDiffAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 6}; + g_type_map[typeid(VtlParser::DateAddAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 7}; + g_type_map[typeid(VtlParser::YearAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 8}; + g_type_map[typeid(VtlParser::MonthAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 9}; + g_type_map[typeid(VtlParser::DayOfMonthAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 10}; + g_type_map[typeid(VtlParser::DatOfYearAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 11}; + g_type_map[typeid(VtlParser::DayToYearAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 12}; + g_type_map[typeid(VtlParser::DayToMonthAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 13}; + g_type_map[typeid(VtlParser::YearTodayAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 14}; + g_type_map[typeid(VtlParser::MonthTodayAtomComponentContext)] = {VtlParser::RuleTimeOperatorsComponent, 15}; + + // SetOperators alternatives + g_type_map[typeid(VtlParser::UnionAtomContext)] = {VtlParser::RuleSetOperators, 0}; + g_type_map[typeid(VtlParser::IntersectAtomContext)] = {VtlParser::RuleSetOperators, 1}; + g_type_map[typeid(VtlParser::SetOrSYmDiffAtomContext)] = {VtlParser::RuleSetOperators, 2}; + + // ValidationOperators alternatives + g_type_map[typeid(VtlParser::ValidateDPrulesetContext)] = {VtlParser::RuleValidationOperators, 0}; + g_type_map[typeid(VtlParser::ValidateHRrulesetContext)] = {VtlParser::RuleValidationOperators, 1}; + g_type_map[typeid(VtlParser::ValidationSimpleContext)] = {VtlParser::RuleValidationOperators, 2}; + + // ConditionalOperators alternatives + g_type_map[typeid(VtlParser::NvlAtomContext)] = {VtlParser::RuleConditionalOperators, 0}; + + // ConditionalOperatorsComponent alternatives + g_type_map[typeid(VtlParser::NvlAtomComponentContext)] = {VtlParser::RuleConditionalOperatorsComponent, 0}; + + // AggrOperators alternatives + g_type_map[typeid(VtlParser::AggrCompContext)] = {VtlParser::RuleAggrOperators, 0}; + g_type_map[typeid(VtlParser::CountAggrCompContext)] = {VtlParser::RuleAggrOperators, 1}; + + // AggrOperatorsGrouping alternatives + g_type_map[typeid(VtlParser::AggrDatasetContext)] = {VtlParser::RuleAggrOperatorsGrouping, 0}; + + // AnFunction alternatives + g_type_map[typeid(VtlParser::AnSimpleFunctionContext)] = {VtlParser::RuleAnFunction, 0}; + g_type_map[typeid(VtlParser::LagOrLeadAnContext)] = {VtlParser::RuleAnFunction, 1}; + g_type_map[typeid(VtlParser::RatioToReportAnContext)] = {VtlParser::RuleAnFunction, 2}; + + // AnFunctionComponent alternatives + g_type_map[typeid(VtlParser::AnSimpleFunctionComponentContext)] = {VtlParser::RuleAnFunctionComponent, 0}; + g_type_map[typeid(VtlParser::LagOrLeadAnComponentContext)] = {VtlParser::RuleAnFunctionComponent, 1}; + g_type_map[typeid(VtlParser::RankAnComponentContext)] = {VtlParser::RuleAnFunctionComponent, 2}; + g_type_map[typeid(VtlParser::RatioToReportAnComponentContext)] = {VtlParser::RuleAnFunctionComponent, 3}; + + // ScalarItem alternatives + g_type_map[typeid(VtlParser::SimpleScalarContext)] = {VtlParser::RuleScalarItem, 0}; + g_type_map[typeid(VtlParser::ScalarWithCastContext)] = {VtlParser::RuleScalarItem, 1}; + + // GroupingClause alternatives + g_type_map[typeid(VtlParser::GroupByOrExceptContext)] = {VtlParser::RuleGroupingClause, 0}; + g_type_map[typeid(VtlParser::GroupAllContext)] = {VtlParser::RuleGroupingClause, 1}; + + // DpRuleset alternatives + g_type_map[typeid(VtlParser::DataPointContext)] = {VtlParser::RuleDpRuleset, 0}; + g_type_map[typeid(VtlParser::DataPointVdContext)] = {VtlParser::RuleDpRuleset, 1}; + g_type_map[typeid(VtlParser::DataPointVarContext)] = {VtlParser::RuleDpRuleset, 2}; + + // HrRuleset alternatives + g_type_map[typeid(VtlParser::HrRulesetTypeContext)] = {VtlParser::RuleHrRuleset, 0}; + g_type_map[typeid(VtlParser::HrRulesetVdTypeContext)] = {VtlParser::RuleHrRuleset, 1}; + g_type_map[typeid(VtlParser::HrRulesetVarTypeContext)] = {VtlParser::RuleHrRuleset, 2}; + + // ScalarTypeConstraint alternatives + g_type_map[typeid(VtlParser::ConditionConstraintContext)] = {VtlParser::RuleScalarTypeConstraint, 0}; + g_type_map[typeid(VtlParser::RangeConstraintContext)] = {VtlParser::RuleScalarTypeConstraint, 1}; +} + + +// ============================================================ +// Module state: holds parser objects alive for the last parse +// ============================================================ +struct ParserState { + std::unique_ptr input; + std::unique_ptr lexer; + std::unique_ptr tokens; + std::unique_ptr parser; + std::string input_text; + + struct CommentInfo { + int type; + std::string text; + int line; + int column; + }; + std::vector comments; +}; + +static ParserState g_state; + + +// ============================================================ +// Forward declarations for lazy wrapper classes +// ============================================================ +class LazyParseNode; +class LazyTerminalNode; + +// Helper to wrap a single ANTLR tree node into a py::object +static py::object wrap_node(antlr4::tree::ParseTree* node); + + +// ============================================================ +// LazyTerminalNode: wraps an antlr4::tree::TerminalNode* +// Properties are computed eagerly (terminals are cheap - just 4 fields) +// ============================================================ +class LazyTerminalNode { +public: + int symbol_type; + std::string text; + int line; + int column; + + LazyTerminalNode(antlr4::tree::TerminalNode* t) { + auto* tok = t->getSymbol(); + symbol_type = static_cast(tok->getType()); + text = tok->getText(); + line = static_cast(tok->getLine()); + column = static_cast(tok->getCharPositionInLine()); + } +}; + + +// ============================================================ +// LazyParseNode: wraps an antlr4::ParserRuleContext* +// Children list is built lazily on first .children access +// ============================================================ +class LazyParseNode { +public: + antlr4::ParserRuleContext* ctx; // raw pointer - kept alive by g_state + int rule_index; + int alt_index; + + // Cached properties (computed lazily) + mutable bool children_built = false; + mutable py::list children_cache; + + LazyParseNode(antlr4::ParserRuleContext* c) : ctx(c) { + auto it = g_type_map.find(typeid(*c)); + if (it != g_type_map.end()) { + rule_index = it->second.first; + alt_index = it->second.second; + } else { + rule_index = static_cast(c->getRuleIndex()); + alt_index = -1; + } + } + + py::list get_children() const { + if (!children_built) { + children_built = true; + children_cache = py::list(); + for (auto* child : ctx->children) { + children_cache.append(wrap_node(child)); + } + } + return children_cache; + } + + int get_start_line() const { + return ctx->start ? static_cast(ctx->start->getLine()) : 0; + } + + int get_start_column() const { + return ctx->start ? static_cast(ctx->start->getCharPositionInLine()) : 0; + } + + int get_stop_line() const { + return ctx->stop ? static_cast(ctx->stop->getLine()) : 0; + } + + int get_stop_column() const { + return ctx->stop ? static_cast(ctx->stop->getCharPositionInLine()) : 0; + } + + std::string get_stop_text() const { + return ctx->stop ? ctx->stop->getText() : ""; + } + + std::string getText() const { + return ctx->getText(); + } + + py::tuple ctx_id() const { + return py::make_tuple(rule_index, alt_index); + } +}; + + +// ============================================================ +// wrap_node: creates LazyParseNode or LazyTerminalNode +// ============================================================ +static py::object wrap_node(antlr4::tree::ParseTree* node) { + if (auto* terminal = dynamic_cast(node)) { + return py::cast(LazyTerminalNode(terminal)); + } + auto* ctx = dynamic_cast(node); + if (!ctx) { + // Shouldn't happen + auto tn = LazyTerminalNode(nullptr); + tn.symbol_type = -1; + tn.text = node->getText(); + tn.line = 0; + tn.column = 0; + return py::cast(tn); + } + return py::cast(LazyParseNode(ctx)); +} + + +// ============================================================ +// parse() function +// ============================================================ +static py::object do_parse(const std::string& text) { + init_type_map(); + + g_state.input_text = text; + g_state.comments.clear(); + + g_state.input = std::make_unique(text); + g_state.lexer = std::make_unique(g_state.input.get()); + g_state.tokens = std::make_unique(g_state.lexer.get()); + g_state.parser = std::make_unique(g_state.tokens.get()); + + // SLL mode for speed + g_state.parser->getInterpreter() + ->setPredictionMode(antlr4::atn::PredictionMode::SLL); + + // Remove default error listeners for cleaner output + g_state.parser->removeErrorListeners(); + + // Parse + auto* tree = g_state.parser->start(); + + // Collect comment tokens + g_state.tokens->fill(); + for (auto* tok : g_state.tokens->getTokens()) { + int type = static_cast(tok->getType()); + if (type == VtlParser::ML_COMMENT || type == VtlParser::SL_COMMENT) { + g_state.comments.push_back({ + type, + tok->getText(), + static_cast(tok->getLine()), + static_cast(tok->getCharPositionInLine()) + }); + } + } + + // Return lazy root node — children are NOT wrapped yet + return py::cast(LazyParseNode(tree)); +} + +static std::string get_input_text() { + return g_state.input_text; +} + +static py::list get_comments() { + py::list result; + for (auto& c : g_state.comments) { + py::dict d; + d["type"] = c.type; + d["text"] = c.text; + d["line"] = c.line; + d["column"] = c.column; + result.append(d); + } + return result; +} + + +// ============================================================ +// pybind11 module definition +// ============================================================ +PYBIND11_MODULE(vtl_cpp_parser, m) { + m.doc() = "C++ ANTLR4 VTL parser with pybind11 bindings (lazy wrapping)"; + + py::class_(m, "TerminalNode") + .def_readonly("symbol_type", &LazyTerminalNode::symbol_type) + .def_readonly("text", &LazyTerminalNode::text) + .def_readonly("line", &LazyTerminalNode::line) + .def_readonly("column", &LazyTerminalNode::column) + .def_property_readonly("is_terminal", [](const LazyTerminalNode&) { return true; }); + + py::class_(m, "ParseNode") + .def_readonly("rule_index", &LazyParseNode::rule_index) + .def_readonly("alt_index", &LazyParseNode::alt_index) + .def_property_readonly("children", &LazyParseNode::get_children) + .def_property_readonly("start_line", &LazyParseNode::get_start_line) + .def_property_readonly("start_column", &LazyParseNode::get_start_column) + .def_property_readonly("stop_line", &LazyParseNode::get_stop_line) + .def_property_readonly("stop_column", &LazyParseNode::get_stop_column) + .def_property_readonly("stop_text", &LazyParseNode::get_stop_text) + .def_property_readonly("is_terminal", [](const LazyParseNode&) { return false; }) + .def_property_readonly("text", &LazyParseNode::getText) + .def_property_readonly("ctx_id", &LazyParseNode::ctx_id); + + m.def("parse", &do_parse, py::arg("text"), + "Parse VTL text and return the parse tree root node"); + m.def("get_input_text", &get_input_text, + "Get the input text from the last parse() call"); + m.def("get_comments", &get_comments, + "Get comment tokens from the last parse() call"); + + // Token type constants + m.attr("LPAREN") = static_cast(VtlParser::LPAREN); + m.attr("RPAREN") = static_cast(VtlParser::RPAREN); + m.attr("QLPAREN") = static_cast(VtlParser::QLPAREN); + m.attr("QRPAREN") = static_cast(VtlParser::QRPAREN); + m.attr("GLPAREN") = static_cast(VtlParser::GLPAREN); + m.attr("GRPAREN") = static_cast(VtlParser::GRPAREN); + m.attr("EQ") = static_cast(VtlParser::EQ); + m.attr("LT") = static_cast(VtlParser::LT); + m.attr("MT") = static_cast(VtlParser::MT); + m.attr("ME") = static_cast(VtlParser::ME); + m.attr("NEQ") = static_cast(VtlParser::NEQ); + m.attr("LE") = static_cast(VtlParser::LE); + m.attr("PLUS") = static_cast(VtlParser::PLUS); + m.attr("MINUS") = static_cast(VtlParser::MINUS); + m.attr("MUL") = static_cast(VtlParser::MUL); + m.attr("DIV") = static_cast(VtlParser::DIV); + m.attr("COMMA") = static_cast(VtlParser::COMMA); + m.attr("POINTER") = static_cast(VtlParser::POINTER); + m.attr("COLON") = static_cast(VtlParser::COLON); + m.attr("ASSIGN") = static_cast(VtlParser::ASSIGN); + m.attr("MEMBERSHIP") = static_cast(VtlParser::MEMBERSHIP); + m.attr("EVAL") = static_cast(VtlParser::EVAL); + m.attr("IF") = static_cast(VtlParser::IF); + m.attr("CASE") = static_cast(VtlParser::CASE); + m.attr("THEN") = static_cast(VtlParser::THEN); + m.attr("ELSE") = static_cast(VtlParser::ELSE); + m.attr("USING") = static_cast(VtlParser::USING); + m.attr("WITH") = static_cast(VtlParser::WITH); + m.attr("CURRENT_DATE") = static_cast(VtlParser::CURRENT_DATE); + m.attr("ON") = static_cast(VtlParser::ON); + m.attr("DROP") = static_cast(VtlParser::DROP); + m.attr("KEEP") = static_cast(VtlParser::KEEP); + m.attr("CALC") = static_cast(VtlParser::CALC); + m.attr("RENAME") = static_cast(VtlParser::RENAME); + m.attr("AS") = static_cast(VtlParser::AS); + m.attr("AND") = static_cast(VtlParser::AND); + m.attr("OR") = static_cast(VtlParser::OR); + m.attr("XOR") = static_cast(VtlParser::XOR); + m.attr("NOT") = static_cast(VtlParser::NOT); + m.attr("BETWEEN") = static_cast(VtlParser::BETWEEN); + m.attr("IN") = static_cast(VtlParser::IN); + m.attr("NOT_IN") = static_cast(VtlParser::NOT_IN); + m.attr("NULL_CONSTANT") = static_cast(VtlParser::NULL_CONSTANT); + m.attr("ISNULL") = static_cast(VtlParser::ISNULL); + m.attr("UNION") = static_cast(VtlParser::UNION); + m.attr("INTERSECT") = static_cast(VtlParser::INTERSECT); + m.attr("CHECK") = static_cast(VtlParser::CHECK); + m.attr("EXISTS_IN") = static_cast(VtlParser::EXISTS_IN); + m.attr("TO") = static_cast(VtlParser::TO); + m.attr("IMBALANCE") = static_cast(VtlParser::IMBALANCE); + m.attr("ERRORCODE") = static_cast(VtlParser::ERRORCODE); + m.attr("ALL") = static_cast(VtlParser::ALL); + m.attr("AGGREGATE") = static_cast(VtlParser::AGGREGATE); + m.attr("ERRORLEVEL") = static_cast(VtlParser::ERRORLEVEL); + m.attr("ORDER") = static_cast(VtlParser::ORDER); + m.attr("BY") = static_cast(VtlParser::BY); + m.attr("RANK") = static_cast(VtlParser::RANK); + m.attr("ASC") = static_cast(VtlParser::ASC); + m.attr("DESC") = static_cast(VtlParser::DESC); + m.attr("MIN") = static_cast(VtlParser::MIN); + m.attr("MAX") = static_cast(VtlParser::MAX); + m.attr("FIRST") = static_cast(VtlParser::FIRST); + m.attr("LAST") = static_cast(VtlParser::LAST); + m.attr("ABS") = static_cast(VtlParser::ABS); + m.attr("LN") = static_cast(VtlParser::LN); + m.attr("LOG") = static_cast(VtlParser::LOG); + m.attr("TRUNC") = static_cast(VtlParser::TRUNC); + m.attr("ROUND") = static_cast(VtlParser::ROUND); + m.attr("POWER") = static_cast(VtlParser::POWER); + m.attr("MOD") = static_cast(VtlParser::MOD); + m.attr("LEN") = static_cast(VtlParser::LEN); + m.attr("CONCAT") = static_cast(VtlParser::CONCAT); + m.attr("TRIM") = static_cast(VtlParser::TRIM); + m.attr("UCASE") = static_cast(VtlParser::UCASE); + m.attr("LCASE") = static_cast(VtlParser::LCASE); + m.attr("SUBSTR") = static_cast(VtlParser::SUBSTR); + m.attr("SUM") = static_cast(VtlParser::SUM); + m.attr("AVG") = static_cast(VtlParser::AVG); + m.attr("MEDIAN") = static_cast(VtlParser::MEDIAN); + m.attr("COUNT") = static_cast(VtlParser::COUNT); + m.attr("DIMENSION") = static_cast(VtlParser::DIMENSION); + m.attr("MEASURE") = static_cast(VtlParser::MEASURE); + m.attr("ATTRIBUTE") = static_cast(VtlParser::ATTRIBUTE); + m.attr("FILTER") = static_cast(VtlParser::FILTER); + m.attr("EXP") = static_cast(VtlParser::EXP); + m.attr("VIRAL") = static_cast(VtlParser::VIRAL); + m.attr("CHARSET_MATCH") = static_cast(VtlParser::CHARSET_MATCH); + m.attr("NVL") = static_cast(VtlParser::NVL); + m.attr("HIERARCHY") = static_cast(VtlParser::HIERARCHY); + m.attr("OPTIONAL") = static_cast(VtlParser::OPTIONAL); + m.attr("INVALID") = static_cast(VtlParser::INVALID); + m.attr("VALUE_DOMAIN") = static_cast(VtlParser::VALUE_DOMAIN); + m.attr("VARIABLE") = static_cast(VtlParser::VARIABLE); + m.attr("DATA") = static_cast(VtlParser::DATA); + m.attr("DATASET") = static_cast(VtlParser::DATASET); + m.attr("OPERATOR") = static_cast(VtlParser::OPERATOR); + m.attr("DEFINE") = static_cast(VtlParser::DEFINE); + m.attr("PUT_SYMBOL") = static_cast(VtlParser::PUT_SYMBOL); + m.attr("DATAPOINT") = static_cast(VtlParser::DATAPOINT); + m.attr("HIERARCHICAL") = static_cast(VtlParser::HIERARCHICAL); + m.attr("RULESET") = static_cast(VtlParser::RULESET); + m.attr("RULE") = static_cast(VtlParser::RULE); + m.attr("END") = static_cast(VtlParser::END); + m.attr("LTRIM") = static_cast(VtlParser::LTRIM); + m.attr("RTRIM") = static_cast(VtlParser::RTRIM); + m.attr("INSTR") = static_cast(VtlParser::INSTR); + m.attr("REPLACE") = static_cast(VtlParser::REPLACE); + m.attr("CEIL") = static_cast(VtlParser::CEIL); + m.attr("FLOOR") = static_cast(VtlParser::FLOOR); + m.attr("SQRT") = static_cast(VtlParser::SQRT); + m.attr("SETDIFF") = static_cast(VtlParser::SETDIFF); + m.attr("STDDEV_POP") = static_cast(VtlParser::STDDEV_POP); + m.attr("STDDEV_SAMP") = static_cast(VtlParser::STDDEV_SAMP); + m.attr("VAR_POP") = static_cast(VtlParser::VAR_POP); + m.attr("VAR_SAMP") = static_cast(VtlParser::VAR_SAMP); + m.attr("GROUP") = static_cast(VtlParser::GROUP); + m.attr("EXCEPT") = static_cast(VtlParser::EXCEPT); + m.attr("HAVING") = static_cast(VtlParser::HAVING); + m.attr("FIRST_VALUE") = static_cast(VtlParser::FIRST_VALUE); + m.attr("LAST_VALUE") = static_cast(VtlParser::LAST_VALUE); + m.attr("LAG") = static_cast(VtlParser::LAG); + m.attr("LEAD") = static_cast(VtlParser::LEAD); + m.attr("RATIO_TO_REPORT") = static_cast(VtlParser::RATIO_TO_REPORT); + m.attr("OVER") = static_cast(VtlParser::OVER); + m.attr("PRECEDING") = static_cast(VtlParser::PRECEDING); + m.attr("FOLLOWING") = static_cast(VtlParser::FOLLOWING); + m.attr("UNBOUNDED") = static_cast(VtlParser::UNBOUNDED); + m.attr("PARTITION") = static_cast(VtlParser::PARTITION); + m.attr("RANGE") = static_cast(VtlParser::RANGE); + m.attr("CURRENT") = static_cast(VtlParser::CURRENT); + m.attr("FILL_TIME_SERIES") = static_cast(VtlParser::FILL_TIME_SERIES); + m.attr("FLOW_TO_STOCK") = static_cast(VtlParser::FLOW_TO_STOCK); + m.attr("STOCK_TO_FLOW") = static_cast(VtlParser::STOCK_TO_FLOW); + m.attr("TIMESHIFT") = static_cast(VtlParser::TIMESHIFT); + m.attr("CONDITION") = static_cast(VtlParser::CONDITION); + m.attr("BOOLEAN") = static_cast(VtlParser::BOOLEAN); + m.attr("DATE") = static_cast(VtlParser::DATE); + m.attr("TIME_PERIOD") = static_cast(VtlParser::TIME_PERIOD); + m.attr("NUMBER") = static_cast(VtlParser::NUMBER); + m.attr("STRING") = static_cast(VtlParser::STRING); + m.attr("TIME") = static_cast(VtlParser::TIME); + m.attr("INTEGER") = static_cast(VtlParser::INTEGER); + m.attr("IS") = static_cast(VtlParser::IS); + m.attr("WHEN") = static_cast(VtlParser::WHEN); + m.attr("POINTS") = static_cast(VtlParser::POINTS); + m.attr("POINT") = static_cast(VtlParser::POINT); + m.attr("INNER_JOIN") = static_cast(VtlParser::INNER_JOIN); + m.attr("LEFT_JOIN") = static_cast(VtlParser::LEFT_JOIN); + m.attr("CROSS_JOIN") = static_cast(VtlParser::CROSS_JOIN); + m.attr("FULL_JOIN") = static_cast(VtlParser::FULL_JOIN); + m.attr("RETURNS") = static_cast(VtlParser::RETURNS); + m.attr("PIVOT") = static_cast(VtlParser::PIVOT); + m.attr("UNPIVOT") = static_cast(VtlParser::UNPIVOT); + m.attr("SUBSPACE") = static_cast(VtlParser::SUBSPACE); + m.attr("APPLY") = static_cast(VtlParser::APPLY); + m.attr("PERIOD_INDICATOR") = static_cast(VtlParser::PERIOD_INDICATOR); + m.attr("SINGLE") = static_cast(VtlParser::SINGLE); + m.attr("DURATION") = static_cast(VtlParser::DURATION); + m.attr("TIME_AGG") = static_cast(VtlParser::TIME_AGG); + m.attr("CAST") = static_cast(VtlParser::CAST); + m.attr("RULE_PRIORITY") = static_cast(VtlParser::RULE_PRIORITY); + m.attr("DATASET_PRIORITY") = static_cast(VtlParser::DATASET_PRIORITY); + m.attr("DEFAULT") = static_cast(VtlParser::DEFAULT); + m.attr("CHECK_DATAPOINT") = static_cast(VtlParser::CHECK_DATAPOINT); + m.attr("CHECK_HIERARCHY") = static_cast(VtlParser::CHECK_HIERARCHY); + m.attr("COMPUTED") = static_cast(VtlParser::COMPUTED); + m.attr("NON_NULL") = static_cast(VtlParser::NON_NULL); + m.attr("NON_ZERO") = static_cast(VtlParser::NON_ZERO); + m.attr("PARTIAL_NULL") = static_cast(VtlParser::PARTIAL_NULL); + m.attr("PARTIAL_ZERO") = static_cast(VtlParser::PARTIAL_ZERO); + m.attr("ALWAYS_NULL") = static_cast(VtlParser::ALWAYS_NULL); + m.attr("ALWAYS_ZERO") = static_cast(VtlParser::ALWAYS_ZERO); + m.attr("COMPONENTS") = static_cast(VtlParser::COMPONENTS); + m.attr("ALL_MEASURES") = static_cast(VtlParser::ALL_MEASURES); + m.attr("SCALAR") = static_cast(VtlParser::SCALAR); + m.attr("COMPONENT") = static_cast(VtlParser::COMPONENT); + m.attr("DATAPOINT_ON_VD") = static_cast(VtlParser::DATAPOINT_ON_VD); + m.attr("DATAPOINT_ON_VAR") = static_cast(VtlParser::DATAPOINT_ON_VAR); + m.attr("HIERARCHICAL_ON_VD") = static_cast(VtlParser::HIERARCHICAL_ON_VD); + m.attr("HIERARCHICAL_ON_VAR") = static_cast(VtlParser::HIERARCHICAL_ON_VAR); + m.attr("SET") = static_cast(VtlParser::SET); + m.attr("LANGUAGE") = static_cast(VtlParser::LANGUAGE); + m.attr("INTEGER_CONSTANT") = static_cast(VtlParser::INTEGER_CONSTANT); + m.attr("NUMBER_CONSTANT") = static_cast(VtlParser::NUMBER_CONSTANT); + m.attr("BOOLEAN_CONSTANT") = static_cast(VtlParser::BOOLEAN_CONSTANT); + m.attr("STRING_CONSTANT") = static_cast(VtlParser::STRING_CONSTANT); + m.attr("IDENTIFIER") = static_cast(VtlParser::IDENTIFIER); + m.attr("WS") = static_cast(VtlParser::WS); + m.attr("EOL") = static_cast(VtlParser::EOL); + m.attr("ML_COMMENT") = static_cast(VtlParser::ML_COMMENT); + m.attr("SL_COMMENT") = static_cast(VtlParser::SL_COMMENT); + m.attr("TOKEN_EOF") = static_cast(antlr4::Token::EOF); + + // Rule index constants + m.attr("RULE_START") = static_cast(VtlParser::RuleStart); + m.attr("RULE_STATEMENT") = static_cast(VtlParser::RuleStatement); + m.attr("RULE_EXPR") = static_cast(VtlParser::RuleExpr); + m.attr("RULE_EXPR_COMPONENT") = static_cast(VtlParser::RuleExprComponent); + m.attr("RULE_FUNCTIONS_COMPONENTS") = static_cast(VtlParser::RuleFunctionsComponents); + m.attr("RULE_FUNCTIONS") = static_cast(VtlParser::RuleFunctions); + m.attr("RULE_DATASET_CLAUSE") = static_cast(VtlParser::RuleDatasetClause); + m.attr("RULE_RENAME_CLAUSE") = static_cast(VtlParser::RuleRenameClause); + m.attr("RULE_AGGR_CLAUSE") = static_cast(VtlParser::RuleAggrClause); + m.attr("RULE_FILTER_CLAUSE") = static_cast(VtlParser::RuleFilterClause); + m.attr("RULE_CALC_CLAUSE") = static_cast(VtlParser::RuleCalcClause); + m.attr("RULE_KEEP_OR_DROP_CLAUSE") = static_cast(VtlParser::RuleKeepOrDropClause); + m.attr("RULE_PIVOT_OR_UNPIVOT_CLAUSE") = static_cast(VtlParser::RulePivotOrUnpivotClause); + m.attr("RULE_SUBSPACE_CLAUSE") = static_cast(VtlParser::RuleSubspaceClause); + m.attr("RULE_JOIN_OPERATORS") = static_cast(VtlParser::RuleJoinOperators); + m.attr("RULE_DEF_OPERATORS") = static_cast(VtlParser::RuleDefOperators); + m.attr("RULE_GENERIC_OPERATORS") = static_cast(VtlParser::RuleGenericOperators); + m.attr("RULE_GENERIC_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleGenericOperatorsComponent); + m.attr("RULE_STRING_OPERATORS") = static_cast(VtlParser::RuleStringOperators); + m.attr("RULE_STRING_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleStringOperatorsComponent); + m.attr("RULE_NUMERIC_OPERATORS") = static_cast(VtlParser::RuleNumericOperators); + m.attr("RULE_NUMERIC_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleNumericOperatorsComponent); + m.attr("RULE_COMPARISON_OPERATORS") = static_cast(VtlParser::RuleComparisonOperators); + m.attr("RULE_COMPARISON_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleComparisonOperatorsComponent); + m.attr("RULE_TIME_OPERATORS") = static_cast(VtlParser::RuleTimeOperators); + m.attr("RULE_TIME_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleTimeOperatorsComponent); + m.attr("RULE_SET_OPERATORS") = static_cast(VtlParser::RuleSetOperators); + m.attr("RULE_HIERARCHY_OPERATORS") = static_cast(VtlParser::RuleHierarchyOperators); + m.attr("RULE_VALIDATION_OPERATORS") = static_cast(VtlParser::RuleValidationOperators); + m.attr("RULE_CONDITIONAL_OPERATORS") = static_cast(VtlParser::RuleConditionalOperators); + m.attr("RULE_CONDITIONAL_OPERATORS_COMPONENT") = static_cast(VtlParser::RuleConditionalOperatorsComponent); + m.attr("RULE_AGGR_OPERATORS") = static_cast(VtlParser::RuleAggrOperators); + m.attr("RULE_AGGR_OPERATORS_GROUPING") = static_cast(VtlParser::RuleAggrOperatorsGrouping); + m.attr("RULE_AN_FUNCTION") = static_cast(VtlParser::RuleAnFunction); + m.attr("RULE_AN_FUNCTION_COMPONENT") = static_cast(VtlParser::RuleAnFunctionComponent); + m.attr("RULE_SCALAR_ITEM") = static_cast(VtlParser::RuleScalarItem); + m.attr("RULE_JOIN_CLAUSE") = static_cast(VtlParser::RuleJoinClause); + m.attr("RULE_JOIN_CLAUSE_ITEM") = static_cast(VtlParser::RuleJoinClauseItem); + m.attr("RULE_JOIN_BODY") = static_cast(VtlParser::RuleJoinBody); + m.attr("RULE_PARTITION_BY_CLAUSE") = static_cast(VtlParser::RulePartitionByClause); + m.attr("RULE_ORDER_BY_CLAUSE") = static_cast(VtlParser::RuleOrderByClause); + m.attr("RULE_ORDER_BY_ITEM") = static_cast(VtlParser::RuleOrderByItem); + m.attr("RULE_WINDOWING_CLAUSE") = static_cast(VtlParser::RuleWindowingClause); + m.attr("RULE_SIGNED_INTEGER") = static_cast(VtlParser::RuleSignedInteger); + m.attr("RULE_SIGNED_NUMBER") = static_cast(VtlParser::RuleSignedNumber); + m.attr("RULE_LIMIT_CLAUSE_ITEM") = static_cast(VtlParser::RuleLimitClauseItem); + m.attr("RULE_GROUPING_CLAUSE") = static_cast(VtlParser::RuleGroupingClause); + m.attr("RULE_HAVING_CLAUSE") = static_cast(VtlParser::RuleHavingClause); + m.attr("RULE_PARAMETER_ITEM") = static_cast(VtlParser::RuleParameterItem); + m.attr("RULE_OUTPUT_PARAMETER_TYPE") = static_cast(VtlParser::RuleOutputParameterType); + m.attr("RULE_INPUT_PARAMETER_TYPE") = static_cast(VtlParser::RuleInputParameterType); + m.attr("RULE_RULESET_TYPE") = static_cast(VtlParser::RuleRulesetType); + m.attr("RULE_SCALAR_TYPE") = static_cast(VtlParser::RuleScalarType); + m.attr("RULE_COMPONENT_TYPE") = static_cast(VtlParser::RuleComponentType); + m.attr("RULE_DATASET_TYPE") = static_cast(VtlParser::RuleDatasetType); + m.attr("RULE_SCALAR_SET_TYPE") = static_cast(VtlParser::RuleScalarSetType); + m.attr("RULE_DP_RULESET") = static_cast(VtlParser::RuleDpRuleset); + m.attr("RULE_HR_RULESET") = static_cast(VtlParser::RuleHrRuleset); + m.attr("RULE_VALUE_DOMAIN_NAME") = static_cast(VtlParser::RuleValueDomainName); + m.attr("RULE_RULESET_ID") = static_cast(VtlParser::RuleRulesetID); + m.attr("RULE_RULESET_SIGNATURE") = static_cast(VtlParser::RuleRulesetSignature); + m.attr("RULE_SIGNATURE") = static_cast(VtlParser::RuleSignature); + m.attr("RULE_RULE_ITEM_DATAPOINT") = static_cast(VtlParser::RuleRuleItemDatapoint); + m.attr("RULE_RULE_ITEM_HIERARCHICAL") = static_cast(VtlParser::RuleRuleItemHierarchical); + m.attr("RULE_HIER_RULE_SIGNATURE") = static_cast(VtlParser::RuleHierRuleSignature); + m.attr("RULE_CODE_ITEM_RELATION") = static_cast(VtlParser::RuleCodeItemRelation); + m.attr("RULE_CODE_ITEM_RELATION_CLAUSE") = static_cast(VtlParser::RuleCodeItemRelationClause); + m.attr("RULE_VALUE_DOMAIN_VALUE") = static_cast(VtlParser::RuleValueDomainValue); + m.attr("RULE_SCALAR_TYPE_CONSTRAINT") = static_cast(VtlParser::RuleScalarTypeConstraint); + m.attr("RULE_COMP_CONSTRAINT") = static_cast(VtlParser::RuleCompConstraint); + m.attr("RULE_VALIDATION_OUTPUT") = static_cast(VtlParser::RuleValidationOutput); + m.attr("RULE_VALIDATION_MODE") = static_cast(VtlParser::RuleValidationMode); + m.attr("RULE_CONDITION_CLAUSE") = static_cast(VtlParser::RuleConditionClause); + m.attr("RULE_INPUT_MODE") = static_cast(VtlParser::RuleInputMode); + m.attr("RULE_INPUT_MODE_HIERARCHY") = static_cast(VtlParser::RuleInputModeHierarchy); + m.attr("RULE_OUTPUT_MODE_HIERARCHY") = static_cast(VtlParser::RuleOutputModeHierarchy); + m.attr("RULE_VAR_ID") = static_cast(VtlParser::RuleVarID); + m.attr("RULE_SIMPLE_COMPONENT_ID") = static_cast(VtlParser::RuleSimpleComponentId); + m.attr("RULE_COMPONENT_ID") = static_cast(VtlParser::RuleComponentID); + m.attr("RULE_COMPARISON_OPERAND") = static_cast(VtlParser::RuleComparisonOperand); + m.attr("RULE_OPTIONAL_EXPR") = static_cast(VtlParser::RuleOptionalExpr); + m.attr("RULE_COMPONENT_ROLE") = static_cast(VtlParser::RuleComponentRole); + m.attr("RULE_VIRAL_ATTRIBUTE") = static_cast(VtlParser::RuleViralAttribute); + m.attr("RULE_VALUE_DOMAIN_ID") = static_cast(VtlParser::RuleValueDomainID); + m.attr("RULE_OPERATOR_ID") = static_cast(VtlParser::RuleOperatorID); + m.attr("RULE_CONSTANT") = static_cast(VtlParser::RuleConstant); + m.attr("RULE_BASIC_SCALAR_TYPE") = static_cast(VtlParser::RuleBasicScalarType); + m.attr("RULE_RETAIN_TYPE") = static_cast(VtlParser::RuleRetainType); + m.attr("RULE_ER_CODE") = static_cast(VtlParser::RuleErCode); + m.attr("RULE_ER_LEVEL") = static_cast(VtlParser::RuleErLevel); + m.attr("RULE_ALIAS") = static_cast(VtlParser::RuleAlias); + m.attr("RULE_LISTS") = static_cast(VtlParser::RuleLists); +} diff --git a/src/vtlengine/AST/Grammar/lexer.py b/src/vtlengine/AST/Grammar/lexer.py deleted file mode 100644 index fa3d00b98..000000000 --- a/src/vtlengine/AST/Grammar/lexer.py +++ /dev/null @@ -1,2140 +0,0 @@ -# Generated from Vtl.g4 by ANTLR 4.9.3 -import sys -from io import StringIO -from typing import TextIO - -from antlr4 import ( - DFA, - ATNDeserializer, - LexerATNSimulator, - PredictionContextCache, -) -from antlr4 import ( - Lexer as ANTLRLexer, -) - - -def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u00fb") - buf.write("\u0953\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") - buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") - buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") - buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") - buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") - buf.write('\t\36\4\37\t\37\4 \t \4!\t!\4"\t"\4#\t#\4$\t$\4%\t%') - buf.write("\4&\t&\4'\t'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") - buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") - buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\t") - buf.write("C\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\t") - buf.write("L\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\t") - buf.write("U\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4") - buf.write("^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4") - buf.write("g\tg\4h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4") - buf.write("p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4w\tw\4x\tx\4") - buf.write("y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080") - buf.write("\t\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083") - buf.write("\4\u0084\t\u0084\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087") - buf.write("\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089\4\u008a\t\u008a") - buf.write("\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e") - buf.write("\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091") - buf.write("\4\u0092\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095") - buf.write("\t\u0095\4\u0096\t\u0096\4\u0097\t\u0097\4\u0098\t\u0098") - buf.write("\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b\t\u009b\4\u009c") - buf.write("\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f") - buf.write("\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3") - buf.write("\t\u00a3\4\u00a4\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6") - buf.write("\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9\t\u00a9\4\u00aa") - buf.write("\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad") - buf.write("\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1") - buf.write("\t\u00b1\4\u00b2\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4") - buf.write("\4\u00b5\t\u00b5\4\u00b6\t\u00b6\4\u00b7\t\u00b7\4\u00b8") - buf.write("\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba\4\u00bb\t\u00bb") - buf.write("\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\4\u00bf") - buf.write("\t\u00bf\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2") - buf.write("\4\u00c3\t\u00c3\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6") - buf.write("\t\u00c6\4\u00c7\t\u00c7\4\u00c8\t\u00c8\4\u00c9\t\u00c9") - buf.write("\4\u00ca\t\u00ca\4\u00cb\t\u00cb\4\u00cc\t\u00cc\4\u00cd") - buf.write("\t\u00cd\4\u00ce\t\u00ce\4\u00cf\t\u00cf\4\u00d0\t\u00d0") - buf.write("\4\u00d1\t\u00d1\4\u00d2\t\u00d2\4\u00d3\t\u00d3\4\u00d4") - buf.write("\t\u00d4\4\u00d5\t\u00d5\4\u00d6\t\u00d6\4\u00d7\t\u00d7") - buf.write("\4\u00d8\t\u00d8\4\u00d9\t\u00d9\4\u00da\t\u00da\4\u00db") - buf.write("\t\u00db\4\u00dc\t\u00dc\4\u00dd\t\u00dd\4\u00de\t\u00de") - buf.write("\4\u00df\t\u00df\4\u00e0\t\u00e0\4\u00e1\t\u00e1\4\u00e2") - buf.write("\t\u00e2\4\u00e3\t\u00e3\4\u00e4\t\u00e4\4\u00e5\t\u00e5") - buf.write("\4\u00e6\t\u00e6\4\u00e7\t\u00e7\4\u00e8\t\u00e8\4\u00e9") - buf.write("\t\u00e9\4\u00ea\t\u00ea\4\u00eb\t\u00eb\4\u00ec\t\u00ec") - buf.write("\4\u00ed\t\u00ed\4\u00ee\t\u00ee\4\u00ef\t\u00ef\4\u00f0") - buf.write("\t\u00f0\4\u00f1\t\u00f1\4\u00f2\t\u00f2\4\u00f3\t\u00f3") - buf.write("\4\u00f4\t\u00f4\4\u00f5\t\u00f5\4\u00f6\t\u00f6\4\u00f7") - buf.write("\t\u00f7\4\u00f8\t\u00f8\4\u00f9\t\u00f9\4\u00fa\t\u00fa") - buf.write("\4\u00fb\t\u00fb\4\u00fc\t\u00fc\3\2\3\2\3\3\3\3\3\4\3") - buf.write("\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13") - buf.write("\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17") - buf.write("\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24") - buf.write("\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30") - buf.write("\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32") - buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37") - buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3") - buf.write(' \3!\3!\3!\3!\3!\3!\3!\3!\3"\3"\3"\3"\3"\3"\3"') - buf.write('\3"\3"\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$') - buf.write("\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3&\3") - buf.write("&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3'\3'\3'\3'\3'\3'\3") - buf.write("'\3'\3'\3'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)") - buf.write("\3)\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3") - buf.write("-\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3") - buf.write("\60\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\62") - buf.write("\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64") - buf.write("\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66") - buf.write("\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\39\39\3") - buf.write("9\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3") - buf.write("<\3<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3") - buf.write(">\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3") - buf.write("A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3") - buf.write("D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3") - buf.write("H\3H\3H\3H\3I\3I\3I\3I\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3") - buf.write("K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3M\3M\3M\3N\3N\3N\3") - buf.write("N\3N\3O\3O\3O\3O\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3R\3R\3R\3") - buf.write("R\3S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3") - buf.write("U\3U\3V\3V\3V\3V\3W\3W\3W\3W\3X\3X\3X\3Y\3Y\3Y\3Y\3Z\3") - buf.write("Z\3Z\3Z\3Z\3Z\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3") - buf.write("\\\3]\3]\3]\3]\3^\3^\3^\3^\3^\3^\3^\3_\3_\3_\3`\3`\3`") - buf.write("\3`\3`\3a\3a\3a\3a\3a\3a\3b\3b\3b\3b\3b\3b\3c\3c\3c\3") - buf.write("c\3c\3c\3c\3d\3d\3d\3d\3e\3e\3e\3e\3f\3f\3f\3f\3f\3f\3") - buf.write("f\3g\3g\3g\3g\3g\3g\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3") - buf.write("i\3i\3i\3i\3i\3i\3i\3i\3j\3j\3j\3j\3j\3j\3j\3j\3j\3j\3") - buf.write("k\3k\3k\3k\3k\3k\3k\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3n\3") - buf.write("n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\3") - buf.write("o\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3p\3") - buf.write("q\3q\3q\3q\3q\3r\3r\3r\3r\3s\3s\3s\3s\3s\3s\3s\3s\3s\3") - buf.write("s\3t\3t\3u\3u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3") - buf.write("v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3w\3w\3w\3w\3x\3x\3x\3x\3") - buf.write("x\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3z\3z\3z\3z\3z\3z\3z\3") - buf.write("z\3{\3{\3{\3{\3{\3{\3{\3{\3{\3|\3|\3|\3|\3|\3|\3|\3}\3") - buf.write("}\3}\3~\3~\3~\3~\3~\3~\3~\3~\3~\3~\3\177\3\177\3\177\3") - buf.write("\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3") - buf.write("\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3") - buf.write("\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081") - buf.write("\3\u0082\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083") - buf.write("\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083") - buf.write("\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0084") - buf.write("\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085") - buf.write("\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086") - buf.write("\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087") - buf.write("\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0089") - buf.write("\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a") - buf.write("\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b") - buf.write("\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c") - buf.write("\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d") - buf.write("\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e") - buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e") - buf.write("\3\u008e\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f\3\u008f") - buf.write("\3\u008f\3\u008f\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090") - buf.write("\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091") - buf.write("\3\u0091\3\u0091\3\u0091\3\u0091\3\u0091\3\u0092\3\u0092") - buf.write("\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0093\3\u0093") - buf.write("\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0094\3\u0094") - buf.write("\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094") - buf.write("\3\u0094\3\u0094\3\u0094\3\u0095\3\u0095\3\u0095\3\u0095") - buf.write("\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095") - buf.write("\3\u0096\3\u0096\3\u0096\3\u0096\3\u0097\3\u0097\3\u0097") - buf.write("\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098") - buf.write("\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098") - buf.write("\3\u0098\3\u0098\3\u0098\3\u0098\3\u0099\3\u0099\3\u0099") - buf.write("\3\u0099\3\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a") - buf.write("\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009b\3\u009b") - buf.write("\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b") - buf.write("\3\u009b\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c") - buf.write("\3\u009c\3\u009c\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d") - buf.write("\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d") - buf.write("\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f") - buf.write("\3\u009f\3\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a1\3\u00a1") - buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2") - buf.write("\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2") - buf.write("\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2") - buf.write("\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3") - buf.write("\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3") - buf.write("\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4") - buf.write("\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4") - buf.write("\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5") - buf.write("\3\u00a5\3\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a6") - buf.write("\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a7\3\u00a7") - buf.write("\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7") - buf.write("\3\u00a7\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a8\3\u00a8") - buf.write("\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a9") - buf.write("\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9") - buf.write("\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab") - buf.write("\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab") - buf.write("\3\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac") - buf.write("\3\u00ac\3\u00ac\3\u00ac\3\u00ad\3\u00ad\3\u00ad\3\u00ad") - buf.write("\3\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae\3\u00ae\3\u00ae") - buf.write("\3\u00ae\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af") - buf.write("\3\u00af\3\u00af\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0") - buf.write("\3\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b2") - buf.write("\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b3") - buf.write("\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3") - buf.write("\3\u00b3\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b5") - buf.write("\3\u00b5\3\u00b5\3\u00b6\3\u00b6\3\u00b6\3\u00b7\3\u00b7") - buf.write("\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b7") - buf.write("\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8") - buf.write("\3\u00b8\3\u00b9\3\u00b9\3\u00b9\3\u00ba\3\u00ba\3\u00ba") - buf.write("\3\u00ba\3\u00ba\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb") - buf.write("\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc") - buf.write("\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bd\3\u00bd\3\u00bd") - buf.write("\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00be\3\u00be\3\u00be") - buf.write("\3\u00be\3\u00be\3\u00be\3\u00bf\3\u00bf\3\u00bf\3\u00bf") - buf.write("\3\u00bf\3\u00bf\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c0") - buf.write("\3\u00c0\3\u00c0\3\u00c0\3\u00c1\3\u00c1\3\u00c1\3\u00c1") - buf.write("\3\u00c1\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2") - buf.write("\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2") - buf.write("\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3") - buf.write("\3\u00c3\3\u00c3\3\u00c3\3\u00c4\3\u00c4\3\u00c4\3\u00c4") - buf.write("\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4") - buf.write("\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5") - buf.write("\3\u00c5\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6") - buf.write("\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c7") - buf.write("\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7") - buf.write("\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8") - buf.write("\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9") - buf.write("\3\u00c9\3\u00c9\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca") - buf.write("\3\u00ca\3\u00ca\3\u00ca\3\u00cb\3\u00cb\3\u00cb\3\u00cb") - buf.write("\3\u00cb\3\u00cb\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc") - buf.write("\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc") - buf.write("\3\u00cd\3\u00cd\3\u00cd\3\u00cd\3\u00cd\3\u00cd\3\u00cd") - buf.write("\3\u00cd\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00cf\3\u00cf") - buf.write("\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00d0\3\u00d0\3\u00d0") - buf.write("\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0") - buf.write("\3\u00d0\3\u00d0\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1") - buf.write("\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1") - buf.write("\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d2\3\u00d2") - buf.write("\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d3\3\u00d3") - buf.write("\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3") - buf.write("\3\u00d4\3\u00d4\3\u00d4\3\u00d4\3\u00d4\3\u00d4\3\u00d4") - buf.write("\3\u00d4\3\u00d4\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5") - buf.write("\3\u00d6\3\u00d6\3\u00d6\3\u00d6\3\u00d6\3\u00d6\3\u00d7") - buf.write("\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7") - buf.write("\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d8\3\u00d8") - buf.write("\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8") - buf.write("\3\u00d8\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9") - buf.write("\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da") - buf.write("\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00dc\3\u00dc") - buf.write("\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc") - buf.write("\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dd\3\u00dd") - buf.write("\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd") - buf.write("\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd") - buf.write("\3\u00dd\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de") - buf.write("\3\u00de\3\u00de\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df") - buf.write("\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df") - buf.write("\3\u00df\3\u00df\3\u00df\3\u00df\3\u00e0\3\u00e0\3\u00e0") - buf.write("\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0") - buf.write("\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e1") - buf.write("\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1") - buf.write("\3\u00e1\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2") - buf.write("\3\u00e2\3\u00e2\3\u00e2\3\u00e3\3\u00e3\3\u00e3\3\u00e3") - buf.write("\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e4\3\u00e4") - buf.write("\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e4") - buf.write("\3\u00e4\3\u00e4\3\u00e4\3\u00e4\3\u00e5\3\u00e5\3\u00e5") - buf.write("\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e5") - buf.write("\3\u00e5\3\u00e5\3\u00e5\3\u00e6\3\u00e6\3\u00e6\3\u00e6") - buf.write("\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e6") - buf.write("\3\u00e6\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7") - buf.write("\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e7\3\u00e8") - buf.write("\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e8") - buf.write("\3\u00e8\3\u00e8\3\u00e8\3\u00e9\3\u00e9\3\u00e9\3\u00e9") - buf.write("\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9\3\u00e9") - buf.write("\3\u00e9\3\u00e9\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00ea") - buf.write("\3\u00ea\3\u00ea\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb") - buf.write("\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00eb\3\u00ec\3\u00ec") - buf.write("\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec") - buf.write("\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec") - buf.write("\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ec") - buf.write("\3\u00ec\3\u00ec\3\u00ec\3\u00ed\3\u00ed\3\u00ed\3\u00ed") - buf.write("\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed") - buf.write("\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed") - buf.write("\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ed\3\u00ee\3\u00ee") - buf.write("\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee") - buf.write("\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee") - buf.write("\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee") - buf.write("\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ef") - buf.write("\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef") - buf.write("\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef") - buf.write("\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00ef") - buf.write("\3\u00ef\3\u00ef\3\u00ef\3\u00ef\3\u00f0\3\u00f0\3\u00f0") - buf.write("\3\u00f0\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1\3\u00f1") - buf.write("\3\u00f1\3\u00f1\3\u00f1\3\u00f2\3\u00f2\3\u00f3\3\u00f3") - buf.write("\3\u00f4\6\u00f4\u08ff\n\u00f4\r\u00f4\16\u00f4\u0900") - buf.write("\3\u00f5\3\u00f5\3\u00f5\3\u00f5\3\u00f6\3\u00f6\3\u00f6") - buf.write("\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f6\3\u00f6\5\u00f6") - buf.write("\u0910\n\u00f6\3\u00f7\3\u00f7\7\u00f7\u0914\n\u00f7\f") - buf.write("\u00f7\16\u00f7\u0917\13\u00f7\3\u00f7\3\u00f7\3\u00f8") - buf.write("\3\u00f8\7\u00f8\u091d\n\u00f8\f\u00f8\16\u00f8\u0920") - buf.write("\13\u00f8\3\u00f8\3\u00f8\6\u00f8\u0924\n\u00f8\r\u00f8") - buf.write("\16\u00f8\u0925\3\u00f8\3\u00f8\7\u00f8\u092a\n\u00f8") - buf.write("\f\u00f8\16\u00f8\u092d\13\u00f8\3\u00f8\5\u00f8\u0930") - buf.write("\n\u00f8\3\u00f9\6\u00f9\u0933\n\u00f9\r\u00f9\16\u00f9") - buf.write("\u0934\3\u00f9\3\u00f9\3\u00fa\3\u00fa\3\u00fb\3\u00fb") - buf.write("\3\u00fb\3\u00fb\7\u00fb\u093f\n\u00fb\f\u00fb\16\u00fb") - buf.write("\u0942\13\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb") - buf.write("\3\u00fc\3\u00fc\3\u00fc\3\u00fc\7\u00fc\u094d\n\u00fc") - buf.write("\f\u00fc\16\u00fc\u0950\13\u00fc\3\u00fc\3\u00fc\4\u092b") - buf.write("\u0940\2\u00fd\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13") - buf.write("\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24'\25)\26") - buf.write('+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A"C#') - buf.write("E$G%I&K'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66") - buf.write("k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087") - buf.write("E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097") - buf.write("M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7") - buf.write("U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7") - buf.write("]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7") - buf.write("e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7") - buf.write("m\u00d9n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7") - buf.write("u\u00e9v\u00ebw\u00edx\u00efy\u00f1z\u00f3{\u00f5|\u00f7") - buf.write("}\u00f9~\u00fb\177\u00fd\u0080\u00ff\u0081\u0101\u0082") - buf.write("\u0103\u0083\u0105\u0084\u0107\u0085\u0109\u0086\u010b") - buf.write("\u0087\u010d\u0088\u010f\u0089\u0111\u008a\u0113\u008b") - buf.write("\u0115\u008c\u0117\u008d\u0119\u008e\u011b\u008f\u011d") - buf.write("\u0090\u011f\u0091\u0121\u0092\u0123\u0093\u0125\u0094") - buf.write("\u0127\u0095\u0129\u0096\u012b\u0097\u012d\u0098\u012f") - buf.write("\u0099\u0131\u009a\u0133\u009b\u0135\u009c\u0137\u009d") - buf.write("\u0139\u009e\u013b\u009f\u013d\u00a0\u013f\u00a1\u0141") - buf.write("\u00a2\u0143\u00a3\u0145\u00a4\u0147\u00a5\u0149\u00a6") - buf.write("\u014b\u00a7\u014d\u00a8\u014f\u00a9\u0151\u00aa\u0153") - buf.write("\u00ab\u0155\u00ac\u0157\u00ad\u0159\u00ae\u015b\u00af") - buf.write("\u015d\u00b0\u015f\u00b1\u0161\u00b2\u0163\u00b3\u0165") - buf.write("\u00b4\u0167\u00b5\u0169\u00b6\u016b\u00b7\u016d\u00b8") - buf.write("\u016f\u00b9\u0171\u00ba\u0173\u00bb\u0175\u00bc\u0177") - buf.write("\u00bd\u0179\u00be\u017b\u00bf\u017d\u00c0\u017f\u00c1") - buf.write("\u0181\u00c2\u0183\u00c3\u0185\u00c4\u0187\u00c5\u0189") - buf.write("\u00c6\u018b\u00c7\u018d\u00c8\u018f\u00c9\u0191\u00ca") - buf.write("\u0193\u00cb\u0195\u00cc\u0197\u00cd\u0199\u00ce\u019b") - buf.write("\u00cf\u019d\u00d0\u019f\u00d1\u01a1\u00d2\u01a3\u00d3") - buf.write("\u01a5\u00d4\u01a7\u00d5\u01a9\u00d6\u01ab\u00d7\u01ad") - buf.write("\u00d8\u01af\u00d9\u01b1\u00da\u01b3\u00db\u01b5\u00dc") - buf.write("\u01b7\u00dd\u01b9\u00de\u01bb\u00df\u01bd\u00e0\u01bf") - buf.write("\u00e1\u01c1\u00e2\u01c3\u00e3\u01c5\u00e4\u01c7\u00e5") - buf.write("\u01c9\u00e6\u01cb\u00e7\u01cd\u00e8\u01cf\u00e9\u01d1") - buf.write("\u00ea\u01d3\u00eb\u01d5\u00ec\u01d7\u00ed\u01d9\u00ee") - buf.write("\u01db\u00ef\u01dd\u00f0\u01df\u00f1\u01e1\u00f2\u01e3") - buf.write("\2\u01e5\2\u01e7\u00f3\u01e9\u00f4\u01eb\u00f5\u01ed\u00f6") - buf.write("\u01ef\u00f7\u01f1\u00f8\u01f3\u00f9\u01f5\u00fa\u01f7") - buf.write("\u00fb\3\2\7\4\2C\\c|\3\2$$\7\2\60\60\62;C\\aac|\5\2\13") - buf.write('\f\16\17""\4\2\f\f\17\17\2\u095b\2\3\3\2\2\2\2\5\3\2') - buf.write("\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2") - buf.write("\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2") - buf.write("\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37") - buf.write("\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2'\3\2\2\2") - buf.write("\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2") - buf.write("\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2") - buf.write("\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2") - buf.write("\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2") - buf.write("\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3") - buf.write("\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a") - buf.write("\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2") - buf.write("k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2") - buf.write("\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2") - buf.write("\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085") - buf.write("\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2") - buf.write("\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093") - buf.write("\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2") - buf.write("\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1") - buf.write("\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2") - buf.write("\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af") - buf.write("\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2") - buf.write("\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd") - buf.write("\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2") - buf.write("\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb") - buf.write("\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2") - buf.write("\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9") - buf.write("\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2") - buf.write("\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7") - buf.write("\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2") - buf.write("\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5") - buf.write("\3\2\2\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2") - buf.write("\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2\2\2\u0101\3\2\2\2\2\u0103") - buf.write("\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109\3\2\2") - buf.write("\2\2\u010b\3\2\2\2\2\u010d\3\2\2\2\2\u010f\3\2\2\2\2\u0111") - buf.write("\3\2\2\2\2\u0113\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2") - buf.write("\2\2\u0119\3\2\2\2\2\u011b\3\2\2\2\2\u011d\3\2\2\2\2\u011f") - buf.write("\3\2\2\2\2\u0121\3\2\2\2\2\u0123\3\2\2\2\2\u0125\3\2\2") - buf.write("\2\2\u0127\3\2\2\2\2\u0129\3\2\2\2\2\u012b\3\2\2\2\2\u012d") - buf.write("\3\2\2\2\2\u012f\3\2\2\2\2\u0131\3\2\2\2\2\u0133\3\2\2") - buf.write("\2\2\u0135\3\2\2\2\2\u0137\3\2\2\2\2\u0139\3\2\2\2\2\u013b") - buf.write("\3\2\2\2\2\u013d\3\2\2\2\2\u013f\3\2\2\2\2\u0141\3\2\2") - buf.write("\2\2\u0143\3\2\2\2\2\u0145\3\2\2\2\2\u0147\3\2\2\2\2\u0149") - buf.write("\3\2\2\2\2\u014b\3\2\2\2\2\u014d\3\2\2\2\2\u014f\3\2\2") - buf.write("\2\2\u0151\3\2\2\2\2\u0153\3\2\2\2\2\u0155\3\2\2\2\2\u0157") - buf.write("\3\2\2\2\2\u0159\3\2\2\2\2\u015b\3\2\2\2\2\u015d\3\2\2") - buf.write("\2\2\u015f\3\2\2\2\2\u0161\3\2\2\2\2\u0163\3\2\2\2\2\u0165") - buf.write("\3\2\2\2\2\u0167\3\2\2\2\2\u0169\3\2\2\2\2\u016b\3\2\2") - buf.write("\2\2\u016d\3\2\2\2\2\u016f\3\2\2\2\2\u0171\3\2\2\2\2\u0173") - buf.write("\3\2\2\2\2\u0175\3\2\2\2\2\u0177\3\2\2\2\2\u0179\3\2\2") - buf.write("\2\2\u017b\3\2\2\2\2\u017d\3\2\2\2\2\u017f\3\2\2\2\2\u0181") - buf.write("\3\2\2\2\2\u0183\3\2\2\2\2\u0185\3\2\2\2\2\u0187\3\2\2") - buf.write("\2\2\u0189\3\2\2\2\2\u018b\3\2\2\2\2\u018d\3\2\2\2\2\u018f") - buf.write("\3\2\2\2\2\u0191\3\2\2\2\2\u0193\3\2\2\2\2\u0195\3\2\2") - buf.write("\2\2\u0197\3\2\2\2\2\u0199\3\2\2\2\2\u019b\3\2\2\2\2\u019d") - buf.write("\3\2\2\2\2\u019f\3\2\2\2\2\u01a1\3\2\2\2\2\u01a3\3\2\2") - buf.write("\2\2\u01a5\3\2\2\2\2\u01a7\3\2\2\2\2\u01a9\3\2\2\2\2\u01ab") - buf.write("\3\2\2\2\2\u01ad\3\2\2\2\2\u01af\3\2\2\2\2\u01b1\3\2\2") - buf.write("\2\2\u01b3\3\2\2\2\2\u01b5\3\2\2\2\2\u01b7\3\2\2\2\2\u01b9") - buf.write("\3\2\2\2\2\u01bb\3\2\2\2\2\u01bd\3\2\2\2\2\u01bf\3\2\2") - buf.write("\2\2\u01c1\3\2\2\2\2\u01c3\3\2\2\2\2\u01c5\3\2\2\2\2\u01c7") - buf.write("\3\2\2\2\2\u01c9\3\2\2\2\2\u01cb\3\2\2\2\2\u01cd\3\2\2") - buf.write("\2\2\u01cf\3\2\2\2\2\u01d1\3\2\2\2\2\u01d3\3\2\2\2\2\u01d5") - buf.write("\3\2\2\2\2\u01d7\3\2\2\2\2\u01d9\3\2\2\2\2\u01db\3\2\2") - buf.write("\2\2\u01dd\3\2\2\2\2\u01df\3\2\2\2\2\u01e1\3\2\2\2\2\u01e7") - buf.write("\3\2\2\2\2\u01e9\3\2\2\2\2\u01eb\3\2\2\2\2\u01ed\3\2\2") - buf.write("\2\2\u01ef\3\2\2\2\2\u01f1\3\2\2\2\2\u01f3\3\2\2\2\2\u01f5") - buf.write("\3\2\2\2\2\u01f7\3\2\2\2\3\u01f9\3\2\2\2\5\u01fb\3\2\2") - buf.write("\2\7\u01fd\3\2\2\2\t\u01ff\3\2\2\2\13\u0201\3\2\2\2\r") - buf.write("\u0203\3\2\2\2\17\u0205\3\2\2\2\21\u0207\3\2\2\2\23\u0209") - buf.write("\3\2\2\2\25\u020b\3\2\2\2\27\u020e\3\2\2\2\31\u0211\3") - buf.write("\2\2\2\33\u0214\3\2\2\2\35\u0216\3\2\2\2\37\u0218\3\2") - buf.write("\2\2!\u021a\3\2\2\2#\u021c\3\2\2\2%\u021e\3\2\2\2'\u0221") - buf.write("\3\2\2\2)\u0223\3\2\2\2+\u0226\3\2\2\2-\u0228\3\2\2\2") - buf.write("/\u022d\3\2\2\2\61\u0230\3\2\2\2\63\u0235\3\2\2\2\65\u023a") - buf.write("\3\2\2\2\67\u023f\3\2\2\29\u0245\3\2\2\2;\u024a\3\2\2") - buf.write("\2=\u0257\3\2\2\2?\u0260\3\2\2\2A\u0268\3\2\2\2C\u0270") - buf.write("\3\2\2\2E\u0279\3\2\2\2G\u0284\3\2\2\2I\u028e\3\2\2\2") - buf.write("K\u0298\3\2\2\2M\u02a3\3\2\2\2O\u02ad\3\2\2\2Q\u02b8\3") - buf.write("\2\2\2S\u02bb\3\2\2\2U\u02c0\3\2\2\2W\u02c5\3\2\2\2Y\u02ca") - buf.write("\3\2\2\2[\u02d3\3\2\2\2]\u02da\3\2\2\2_\u02dd\3\2\2\2") - buf.write("a\u02e1\3\2\2\2c\u02e4\3\2\2\2e\u02e8\3\2\2\2g\u02ec\3") - buf.write("\2\2\2i\u02f4\3\2\2\2k\u02f7\3\2\2\2m\u02fe\3\2\2\2o\u0303") - buf.write("\3\2\2\2q\u030a\3\2\2\2s\u030d\3\2\2\2u\u0313\3\2\2\2") - buf.write("w\u0318\3\2\2\2y\u0320\3\2\2\2{\u032a\3\2\2\2}\u0331\3") - buf.write("\2\2\2\177\u0336\3\2\2\2\u0081\u033e\3\2\2\2\u0083\u0347") - buf.write("\3\2\2\2\u0085\u034e\3\2\2\2\u0087\u0354\3\2\2\2\u0089") - buf.write("\u035e\3\2\2\2\u008b\u0361\3\2\2\2\u008d\u0368\3\2\2\2") - buf.write("\u008f\u0372\3\2\2\2\u0091\u037c\3\2\2\2\u0093\u0380\3") - buf.write("\2\2\2\u0095\u0385\3\2\2\2\u0097\u0390\3\2\2\2\u0099\u0396") - buf.write("\3\2\2\2\u009b\u0399\3\2\2\2\u009d\u039e\3\2\2\2\u009f") - buf.write("\u03a2\3\2\2\2\u00a1\u03a7\3\2\2\2\u00a3\u03ab\3\2\2\2") - buf.write("\u00a5\u03af\3\2\2\2\u00a7\u03b5\3\2\2\2\u00a9\u03ba\3") - buf.write("\2\2\2\u00ab\u03c2\3\2\2\2\u00ad\u03c6\3\2\2\2\u00af\u03ca") - buf.write("\3\2\2\2\u00b1\u03cd\3\2\2\2\u00b3\u03d1\3\2\2\2\u00b5") - buf.write("\u03d7\3\2\2\2\u00b7\u03dd\3\2\2\2\u00b9\u03e3\3\2\2\2") - buf.write("\u00bb\u03e7\3\2\2\2\u00bd\u03ee\3\2\2\2\u00bf\u03f1\3") - buf.write("\2\2\2\u00c1\u03f6\3\2\2\2\u00c3\u03fc\3\2\2\2\u00c5\u0402") - buf.write("\3\2\2\2\u00c7\u0409\3\2\2\2\u00c9\u040d\3\2\2\2\u00cb") - buf.write("\u0411\3\2\2\2\u00cd\u0418\3\2\2\2\u00cf\u041e\3\2\2\2") - buf.write("\u00d1\u0429\3\2\2\2\u00d3\u0431\3\2\2\2\u00d5\u043b\3") - buf.write("\2\2\2\u00d7\u0442\3\2\2\2\u00d9\u0448\3\2\2\2\u00db\u044c") - buf.write("\3\2\2\2\u00dd\u045a\3\2\2\2\u00df\u0460\3\2\2\2\u00e1") - buf.write("\u0471\3\2\2\2\u00e3\u0476\3\2\2\2\u00e5\u047a\3\2\2\2") - buf.write("\u00e7\u0484\3\2\2\2\u00e9\u0486\3\2\2\2\u00eb\u048e\3") - buf.write("\2\2\2\u00ed\u049a\3\2\2\2\u00ef\u04a3\3\2\2\2\u00f1\u04a8") - buf.write("\3\2\2\2\u00f3\u04b2\3\2\2\2\u00f5\u04ba\3\2\2\2\u00f7") - buf.write("\u04c3\3\2\2\2\u00f9\u04ca\3\2\2\2\u00fb\u04cd\3\2\2\2") - buf.write("\u00fd\u04d7\3\2\2\2\u00ff\u04e4\3\2\2\2\u0101\u04ec\3") - buf.write("\2\2\2\u0103\u04f1\3\2\2\2\u0105\u04f5\3\2\2\2\u0107\u0502") - buf.write("\3\2\2\2\u0109\u0508\3\2\2\2\u010b\u050e\3\2\2\2\u010d") - buf.write("\u0514\3\2\2\2\u010f\u051c\3\2\2\2\u0111\u0521\3\2\2\2") - buf.write("\u0113\u0527\3\2\2\2\u0115\u052c\3\2\2\2\u0117\u0530\3") - buf.write("\2\2\2\u0119\u0538\3\2\2\2\u011b\u0543\3\2\2\2\u011d\u054f") - buf.write("\3\2\2\2\u011f\u0557\3\2\2\2\u0121\u0560\3\2\2\2\u0123") - buf.write("\u0566\3\2\2\2\u0125\u056d\3\2\2\2\u0127\u0574\3\2\2\2") - buf.write("\u0129\u0580\3\2\2\2\u012b\u058b\3\2\2\2\u012d\u058f\3") - buf.write("\2\2\2\u012f\u0594\3\2\2\2\u0131\u05a4\3\2\2\2\u0133\u05a9") - buf.write("\3\2\2\2\u0135\u05b3\3\2\2\2\u0137\u05bd\3\2\2\2\u0139") - buf.write("\u05c7\3\2\2\2\u013b\u05d1\3\2\2\2\u013d\u05d6\3\2\2\2") - buf.write("\u013f\u05dc\3\2\2\2\u0141\u05e4\3\2\2\2\u0143\u05ea\3") - buf.write("\2\2\2\u0145\u05fb\3\2\2\2\u0147\u0609\3\2\2\2\u0149\u0617") - buf.write("\3\2\2\2\u014b\u0621\3\2\2\2\u014d\u062a\3\2\2\2\u014f") - buf.write("\u0636\3\2\2\2\u0151\u0640\3\2\2\2\u0153\u0648\3\2\2\2") - buf.write("\u0155\u064d\3\2\2\2\u0157\u0659\3\2\2\2\u0159\u0660\3") - buf.write("\2\2\2\u015b\u0667\3\2\2\2\u015d\u066c\3\2\2\2\u015f\u0674") - buf.write("\3\2\2\2\u0161\u067a\3\2\2\2\u0163\u067f\3\2\2\2\u0165") - buf.write("\u0686\3\2\2\2\u0167\u068f\3\2\2\2\u0169\u0694\3\2\2\2") - buf.write("\u016b\u0697\3\2\2\2\u016d\u069a\3\2\2\2\u016f\u06a4\3") - buf.write("\2\2\2\u0171\u06ab\3\2\2\2\u0173\u06ae\3\2\2\2\u0175\u06b3") - buf.write("\3\2\2\2\u0177\u06b8\3\2\2\2\u0179\u06c3\3\2\2\2\u017b") - buf.write("\u06ca\3\2\2\2\u017d\u06d0\3\2\2\2\u017f\u06d6\3\2\2\2") - buf.write("\u0181\u06de\3\2\2\2\u0183\u06e5\3\2\2\2\u0185\u06f0\3") - buf.write("\2\2\2\u0187\u06fa\3\2\2\2\u0189\u0705\3\2\2\2\u018b\u070f") - buf.write("\3\2\2\2\u018d\u0719\3\2\2\2\u018f\u0721\3\2\2\2\u0191") - buf.write("\u0728\3\2\2\2\u0193\u0731\3\2\2\2\u0195\u0739\3\2\2\2") - buf.write("\u0197\u073f\3\2\2\2\u0199\u074b\3\2\2\2\u019b\u0753\3") - buf.write("\2\2\2\u019d\u0757\3\2\2\2\u019f\u075d\3\2\2\2\u01a1\u0769") - buf.write("\3\2\2\2\u01a3\u077a\3\2\2\2\u01a5\u0781\3\2\2\2\u01a7") - buf.write("\u078a\3\2\2\2\u01a9\u0793\3\2\2\2\u01ab\u0798\3\2\2\2") - buf.write("\u01ad\u079e\3\2\2\2\u01af\u07ab\3\2\2\2\u01b1\u07b5\3") - buf.write("\2\2\2\u01b3\u07bb\3\2\2\2\u01b5\u07c2\3\2\2\2\u01b7\u07c7") - buf.write("\3\2\2\2\u01b9\u07d5\3\2\2\2\u01bb\u07e6\3\2\2\2\u01bd") - buf.write("\u07ee\3\2\2\2\u01bf\u07fe\3\2\2\2\u01c1\u080e\3\2\2\2") - buf.write("\u01c3\u0817\3\2\2\2\u01c5\u0820\3\2\2\2\u01c7\u0829\3") - buf.write("\2\2\2\u01c9\u0836\3\2\2\2\u01cb\u0843\3\2\2\2\u01cd\u084f") - buf.write("\3\2\2\2\u01cf\u085b\3\2\2\2\u01d1\u0866\3\2\2\2\u01d3") - buf.write("\u0873\3\2\2\2\u01d5\u087a\3\2\2\2\u01d7\u0884\3\2\2\2") - buf.write("\u01d9\u089e\3\2\2\2\u01db\u08b5\3\2\2\2\u01dd\u08d2\3") - buf.write("\2\2\2\u01df\u08ec\3\2\2\2\u01e1\u08f0\3\2\2\2\u01e3\u08f9") - buf.write("\3\2\2\2\u01e5\u08fb\3\2\2\2\u01e7\u08fe\3\2\2\2\u01e9") - buf.write("\u0902\3\2\2\2\u01eb\u090f\3\2\2\2\u01ed\u0911\3\2\2\2") - buf.write("\u01ef\u092f\3\2\2\2\u01f1\u0932\3\2\2\2\u01f3\u0938\3") - buf.write("\2\2\2\u01f5\u093a\3\2\2\2\u01f7\u0948\3\2\2\2\u01f9\u01fa") - buf.write("\7*\2\2\u01fa\4\3\2\2\2\u01fb\u01fc\7+\2\2\u01fc\6\3\2") - buf.write("\2\2\u01fd\u01fe\7]\2\2\u01fe\b\3\2\2\2\u01ff\u0200\7") - buf.write("_\2\2\u0200\n\3\2\2\2\u0201\u0202\7}\2\2\u0202\f\3\2\2") - buf.write("\2\u0203\u0204\7\177\2\2\u0204\16\3\2\2\2\u0205\u0206") - buf.write("\7?\2\2\u0206\20\3\2\2\2\u0207\u0208\7>\2\2\u0208\22\3") - buf.write("\2\2\2\u0209\u020a\7@\2\2\u020a\24\3\2\2\2\u020b\u020c") - buf.write("\7@\2\2\u020c\u020d\7?\2\2\u020d\26\3\2\2\2\u020e\u020f") - buf.write("\7>\2\2\u020f\u0210\7@\2\2\u0210\30\3\2\2\2\u0211\u0212") - buf.write("\7>\2\2\u0212\u0213\7?\2\2\u0213\32\3\2\2\2\u0214\u0215") - buf.write("\7-\2\2\u0215\34\3\2\2\2\u0216\u0217\7/\2\2\u0217\36\3") - buf.write("\2\2\2\u0218\u0219\7,\2\2\u0219 \3\2\2\2\u021a\u021b\7") - buf.write('\61\2\2\u021b"\3\2\2\2\u021c\u021d\7.\2\2\u021d$\3\2') - buf.write("\2\2\u021e\u021f\7/\2\2\u021f\u0220\7@\2\2\u0220&\3\2") - buf.write("\2\2\u0221\u0222\7<\2\2\u0222(\3\2\2\2\u0223\u0224\7<") - buf.write("\2\2\u0224\u0225\7?\2\2\u0225*\3\2\2\2\u0226\u0227\7%") - buf.write("\2\2\u0227,\3\2\2\2\u0228\u0229\7g\2\2\u0229\u022a\7x") - buf.write("\2\2\u022a\u022b\7c\2\2\u022b\u022c\7n\2\2\u022c.\3\2") - buf.write("\2\2\u022d\u022e\7k\2\2\u022e\u022f\7h\2\2\u022f\60\3") - buf.write("\2\2\2\u0230\u0231\7e\2\2\u0231\u0232\7c\2\2\u0232\u0233") - buf.write("\7u\2\2\u0233\u0234\7g\2\2\u0234\62\3\2\2\2\u0235\u0236") - buf.write("\7v\2\2\u0236\u0237\7j\2\2\u0237\u0238\7g\2\2\u0238\u0239") - buf.write("\7p\2\2\u0239\64\3\2\2\2\u023a\u023b\7g\2\2\u023b\u023c") - buf.write("\7n\2\2\u023c\u023d\7u\2\2\u023d\u023e\7g\2\2\u023e\66") - buf.write("\3\2\2\2\u023f\u0240\7w\2\2\u0240\u0241\7u\2\2\u0241\u0242") - buf.write("\7k\2\2\u0242\u0243\7p\2\2\u0243\u0244\7i\2\2\u02448\3") - buf.write("\2\2\2\u0245\u0246\7y\2\2\u0246\u0247\7k\2\2\u0247\u0248") - buf.write("\7v\2\2\u0248\u0249\7j\2\2\u0249:\3\2\2\2\u024a\u024b") - buf.write("\7e\2\2\u024b\u024c\7w\2\2\u024c\u024d\7t\2\2\u024d\u024e") - buf.write("\7t\2\2\u024e\u024f\7g\2\2\u024f\u0250\7p\2\2\u0250\u0251") - buf.write("\7v\2\2\u0251\u0252\7a\2\2\u0252\u0253\7f\2\2\u0253\u0254") - buf.write("\7c\2\2\u0254\u0255\7v\2\2\u0255\u0256\7g\2\2\u0256<\3") - buf.write("\2\2\2\u0257\u0258\7f\2\2\u0258\u0259\7c\2\2\u0259\u025a") - buf.write("\7v\2\2\u025a\u025b\7g\2\2\u025b\u025c\7f\2\2\u025c\u025d") - buf.write("\7k\2\2\u025d\u025e\7h\2\2\u025e\u025f\7h\2\2\u025f>\3") - buf.write("\2\2\2\u0260\u0261\7f\2\2\u0261\u0262\7c\2\2\u0262\u0263") - buf.write("\7v\2\2\u0263\u0264\7g\2\2\u0264\u0265\7c\2\2\u0265\u0266") - buf.write("\7f\2\2\u0266\u0267\7f\2\2\u0267@\3\2\2\2\u0268\u0269") - buf.write("\7i\2\2\u0269\u026a\7g\2\2\u026a\u026b\7v\2\2\u026b\u026c") - buf.write("\7{\2\2\u026c\u026d\7g\2\2\u026d\u026e\7c\2\2\u026e\u026f") - buf.write("\7t\2\2\u026fB\3\2\2\2\u0270\u0271\7i\2\2\u0271\u0272") - buf.write("\7g\2\2\u0272\u0273\7v\2\2\u0273\u0274\7o\2\2\u0274\u0275") - buf.write("\7q\2\2\u0275\u0276\7p\2\2\u0276\u0277\7v\2\2\u0277\u0278") - buf.write("\7j\2\2\u0278D\3\2\2\2\u0279\u027a\7f\2\2\u027a\u027b") - buf.write("\7c\2\2\u027b\u027c\7{\2\2\u027c\u027d\7q\2\2\u027d\u027e") - buf.write("\7h\2\2\u027e\u027f\7o\2\2\u027f\u0280\7q\2\2\u0280\u0281") - buf.write("\7p\2\2\u0281\u0282\7v\2\2\u0282\u0283\7j\2\2\u0283F\3") - buf.write("\2\2\2\u0284\u0285\7f\2\2\u0285\u0286\7c\2\2\u0286\u0287") - buf.write("\7{\2\2\u0287\u0288\7q\2\2\u0288\u0289\7h\2\2\u0289\u028a") - buf.write("\7{\2\2\u028a\u028b\7g\2\2\u028b\u028c\7c\2\2\u028c\u028d") - buf.write("\7t\2\2\u028dH\3\2\2\2\u028e\u028f\7f\2\2\u028f\u0290") - buf.write("\7c\2\2\u0290\u0291\7{\2\2\u0291\u0292\7v\2\2\u0292\u0293") - buf.write("\7q\2\2\u0293\u0294\7{\2\2\u0294\u0295\7g\2\2\u0295\u0296") - buf.write("\7c\2\2\u0296\u0297\7t\2\2\u0297J\3\2\2\2\u0298\u0299") - buf.write("\7f\2\2\u0299\u029a\7c\2\2\u029a\u029b\7{\2\2\u029b\u029c") - buf.write("\7v\2\2\u029c\u029d\7q\2\2\u029d\u029e\7o\2\2\u029e\u029f") - buf.write("\7q\2\2\u029f\u02a0\7p\2\2\u02a0\u02a1\7v\2\2\u02a1\u02a2") - buf.write("\7j\2\2\u02a2L\3\2\2\2\u02a3\u02a4\7{\2\2\u02a4\u02a5") - buf.write("\7g\2\2\u02a5\u02a6\7c\2\2\u02a6\u02a7\7t\2\2\u02a7\u02a8") - buf.write("\7v\2\2\u02a8\u02a9\7q\2\2\u02a9\u02aa\7f\2\2\u02aa\u02ab") - buf.write("\7c\2\2\u02ab\u02ac\7{\2\2\u02acN\3\2\2\2\u02ad\u02ae") - buf.write("\7o\2\2\u02ae\u02af\7q\2\2\u02af\u02b0\7p\2\2\u02b0\u02b1") - buf.write("\7v\2\2\u02b1\u02b2\7j\2\2\u02b2\u02b3\7v\2\2\u02b3\u02b4") - buf.write("\7q\2\2\u02b4\u02b5\7f\2\2\u02b5\u02b6\7c\2\2\u02b6\u02b7") - buf.write("\7{\2\2\u02b7P\3\2\2\2\u02b8\u02b9\7q\2\2\u02b9\u02ba") - buf.write("\7p\2\2\u02baR\3\2\2\2\u02bb\u02bc\7f\2\2\u02bc\u02bd") - buf.write("\7t\2\2\u02bd\u02be\7q\2\2\u02be\u02bf\7r\2\2\u02bfT\3") - buf.write("\2\2\2\u02c0\u02c1\7m\2\2\u02c1\u02c2\7g\2\2\u02c2\u02c3") - buf.write("\7g\2\2\u02c3\u02c4\7r\2\2\u02c4V\3\2\2\2\u02c5\u02c6") - buf.write("\7e\2\2\u02c6\u02c7\7c\2\2\u02c7\u02c8\7n\2\2\u02c8\u02c9") - buf.write("\7e\2\2\u02c9X\3\2\2\2\u02ca\u02cb\7c\2\2\u02cb\u02cc") - buf.write("\7v\2\2\u02cc\u02cd\7v\2\2\u02cd\u02ce\7t\2\2\u02ce\u02cf") - buf.write("\7e\2\2\u02cf\u02d0\7c\2\2\u02d0\u02d1\7n\2\2\u02d1\u02d2") - buf.write("\7e\2\2\u02d2Z\3\2\2\2\u02d3\u02d4\7t\2\2\u02d4\u02d5") - buf.write("\7g\2\2\u02d5\u02d6\7p\2\2\u02d6\u02d7\7c\2\2\u02d7\u02d8") - buf.write("\7o\2\2\u02d8\u02d9\7g\2\2\u02d9\\\3\2\2\2\u02da\u02db") - buf.write("\7c\2\2\u02db\u02dc\7u\2\2\u02dc^\3\2\2\2\u02dd\u02de") - buf.write("\7c\2\2\u02de\u02df\7p\2\2\u02df\u02e0\7f\2\2\u02e0`\3") - buf.write("\2\2\2\u02e1\u02e2\7q\2\2\u02e2\u02e3\7t\2\2\u02e3b\3") - buf.write("\2\2\2\u02e4\u02e5\7z\2\2\u02e5\u02e6\7q\2\2\u02e6\u02e7") - buf.write("\7t\2\2\u02e7d\3\2\2\2\u02e8\u02e9\7p\2\2\u02e9\u02ea") - buf.write("\7q\2\2\u02ea\u02eb\7v\2\2\u02ebf\3\2\2\2\u02ec\u02ed") - buf.write("\7d\2\2\u02ed\u02ee\7g\2\2\u02ee\u02ef\7v\2\2\u02ef\u02f0") - buf.write("\7y\2\2\u02f0\u02f1\7g\2\2\u02f1\u02f2\7g\2\2\u02f2\u02f3") - buf.write("\7p\2\2\u02f3h\3\2\2\2\u02f4\u02f5\7k\2\2\u02f5\u02f6") - buf.write("\7p\2\2\u02f6j\3\2\2\2\u02f7\u02f8\7p\2\2\u02f8\u02f9") - buf.write("\7q\2\2\u02f9\u02fa\7v\2\2\u02fa\u02fb\7a\2\2\u02fb\u02fc") - buf.write("\7k\2\2\u02fc\u02fd\7p\2\2\u02fdl\3\2\2\2\u02fe\u02ff") - buf.write("\7p\2\2\u02ff\u0300\7w\2\2\u0300\u0301\7n\2\2\u0301\u0302") - buf.write("\7n\2\2\u0302n\3\2\2\2\u0303\u0304\7k\2\2\u0304\u0305") - buf.write("\7u\2\2\u0305\u0306\7p\2\2\u0306\u0307\7w\2\2\u0307\u0308") - buf.write("\7n\2\2\u0308\u0309\7n\2\2\u0309p\3\2\2\2\u030a\u030b") - buf.write("\7g\2\2\u030b\u030c\7z\2\2\u030cr\3\2\2\2\u030d\u030e") - buf.write("\7w\2\2\u030e\u030f\7p\2\2\u030f\u0310\7k\2\2\u0310\u0311") - buf.write("\7q\2\2\u0311\u0312\7p\2\2\u0312t\3\2\2\2\u0313\u0314") - buf.write("\7f\2\2\u0314\u0315\7k\2\2\u0315\u0316\7h\2\2\u0316\u0317") - buf.write("\7h\2\2\u0317v\3\2\2\2\u0318\u0319\7u\2\2\u0319\u031a") - buf.write("\7{\2\2\u031a\u031b\7o\2\2\u031b\u031c\7f\2\2\u031c\u031d") - buf.write("\7k\2\2\u031d\u031e\7h\2\2\u031e\u031f\7h\2\2\u031fx\3") - buf.write("\2\2\2\u0320\u0321\7k\2\2\u0321\u0322\7p\2\2\u0322\u0323") - buf.write("\7v\2\2\u0323\u0324\7g\2\2\u0324\u0325\7t\2\2\u0325\u0326") - buf.write("\7u\2\2\u0326\u0327\7g\2\2\u0327\u0328\7e\2\2\u0328\u0329") - buf.write("\7v\2\2\u0329z\3\2\2\2\u032a\u032b\7t\2\2\u032b\u032c") - buf.write("\7c\2\2\u032c\u032d\7p\2\2\u032d\u032e\7f\2\2\u032e\u032f") - buf.write("\7q\2\2\u032f\u0330\7o\2\2\u0330|\3\2\2\2\u0331\u0332") - buf.write("\7m\2\2\u0332\u0333\7g\2\2\u0333\u0334\7{\2\2\u0334\u0335") - buf.write("\7u\2\2\u0335~\3\2\2\2\u0336\u0337\7k\2\2\u0337\u0338") - buf.write("\7p\2\2\u0338\u0339\7v\2\2\u0339\u033a\7{\2\2\u033a\u033b") - buf.write("\7g\2\2\u033b\u033c\7c\2\2\u033c\u033d\7t\2\2\u033d\u0080") - buf.write("\3\2\2\2\u033e\u033f\7k\2\2\u033f\u0340\7p\2\2\u0340\u0341") - buf.write("\7v\2\2\u0341\u0342\7o\2\2\u0342\u0343\7q\2\2\u0343\u0344") - buf.write("\7p\2\2\u0344\u0345\7v\2\2\u0345\u0346\7j\2\2\u0346\u0082") - buf.write("\3\2\2\2\u0347\u0348\7k\2\2\u0348\u0349\7p\2\2\u0349\u034a") - buf.write("\7v\2\2\u034a\u034b\7f\2\2\u034b\u034c\7c\2\2\u034c\u034d") - buf.write("\7{\2\2\u034d\u0084\3\2\2\2\u034e\u034f\7e\2\2\u034f\u0350") - buf.write("\7j\2\2\u0350\u0351\7g\2\2\u0351\u0352\7e\2\2\u0352\u0353") - buf.write("\7m\2\2\u0353\u0086\3\2\2\2\u0354\u0355\7g\2\2\u0355\u0356") - buf.write("\7z\2\2\u0356\u0357\7k\2\2\u0357\u0358\7u\2\2\u0358\u0359") - buf.write("\7v\2\2\u0359\u035a\7u\2\2\u035a\u035b\7a\2\2\u035b\u035c") - buf.write("\7k\2\2\u035c\u035d\7p\2\2\u035d\u0088\3\2\2\2\u035e\u035f") - buf.write("\7v\2\2\u035f\u0360\7q\2\2\u0360\u008a\3\2\2\2\u0361\u0362") - buf.write("\7t\2\2\u0362\u0363\7g\2\2\u0363\u0364\7v\2\2\u0364\u0365") - buf.write("\7w\2\2\u0365\u0366\7t\2\2\u0366\u0367\7p\2\2\u0367\u008c") - buf.write("\3\2\2\2\u0368\u0369\7k\2\2\u0369\u036a\7o\2\2\u036a\u036b") - buf.write("\7d\2\2\u036b\u036c\7c\2\2\u036c\u036d\7n\2\2\u036d\u036e") - buf.write("\7c\2\2\u036e\u036f\7p\2\2\u036f\u0370\7e\2\2\u0370\u0371") - buf.write("\7g\2\2\u0371\u008e\3\2\2\2\u0372\u0373\7g\2\2\u0373\u0374") - buf.write("\7t\2\2\u0374\u0375\7t\2\2\u0375\u0376\7q\2\2\u0376\u0377") - buf.write("\7t\2\2\u0377\u0378\7e\2\2\u0378\u0379\7q\2\2\u0379\u037a") - buf.write("\7f\2\2\u037a\u037b\7g\2\2\u037b\u0090\3\2\2\2\u037c\u037d") - buf.write("\7c\2\2\u037d\u037e\7n\2\2\u037e\u037f\7n\2\2\u037f\u0092") - buf.write("\3\2\2\2\u0380\u0381\7c\2\2\u0381\u0382\7i\2\2\u0382\u0383") - buf.write("\7i\2\2\u0383\u0384\7t\2\2\u0384\u0094\3\2\2\2\u0385\u0386") - buf.write("\7g\2\2\u0386\u0387\7t\2\2\u0387\u0388\7t\2\2\u0388\u0389") - buf.write("\7q\2\2\u0389\u038a\7t\2\2\u038a\u038b\7n\2\2\u038b\u038c") - buf.write("\7g\2\2\u038c\u038d\7x\2\2\u038d\u038e\7g\2\2\u038e\u038f") - buf.write("\7n\2\2\u038f\u0096\3\2\2\2\u0390\u0391\7q\2\2\u0391\u0392") - buf.write("\7t\2\2\u0392\u0393\7f\2\2\u0393\u0394\7g\2\2\u0394\u0395") - buf.write("\7t\2\2\u0395\u0098\3\2\2\2\u0396\u0397\7d\2\2\u0397\u0398") - buf.write("\7{\2\2\u0398\u009a\3\2\2\2\u0399\u039a\7t\2\2\u039a\u039b") - buf.write("\7c\2\2\u039b\u039c\7p\2\2\u039c\u039d\7m\2\2\u039d\u009c") - buf.write("\3\2\2\2\u039e\u039f\7c\2\2\u039f\u03a0\7u\2\2\u03a0\u03a1") - buf.write("\7e\2\2\u03a1\u009e\3\2\2\2\u03a2\u03a3\7f\2\2\u03a3\u03a4") - buf.write("\7g\2\2\u03a4\u03a5\7u\2\2\u03a5\u03a6\7e\2\2\u03a6\u00a0") - buf.write("\3\2\2\2\u03a7\u03a8\7o\2\2\u03a8\u03a9\7k\2\2\u03a9\u03aa") - buf.write("\7p\2\2\u03aa\u00a2\3\2\2\2\u03ab\u03ac\7o\2\2\u03ac\u03ad") - buf.write("\7c\2\2\u03ad\u03ae\7z\2\2\u03ae\u00a4\3\2\2\2\u03af\u03b0") - buf.write("\7h\2\2\u03b0\u03b1\7k\2\2\u03b1\u03b2\7t\2\2\u03b2\u03b3") - buf.write("\7u\2\2\u03b3\u03b4\7v\2\2\u03b4\u00a6\3\2\2\2\u03b5\u03b6") - buf.write("\7n\2\2\u03b6\u03b7\7c\2\2\u03b7\u03b8\7u\2\2\u03b8\u03b9") - buf.write("\7v\2\2\u03b9\u00a8\3\2\2\2\u03ba\u03bb\7k\2\2\u03bb\u03bc") - buf.write("\7p\2\2\u03bc\u03bd\7f\2\2\u03bd\u03be\7g\2\2\u03be\u03bf") - buf.write("\7z\2\2\u03bf\u03c0\7q\2\2\u03c0\u03c1\7h\2\2\u03c1\u00aa") - buf.write("\3\2\2\2\u03c2\u03c3\7c\2\2\u03c3\u03c4\7d\2\2\u03c4\u03c5") - buf.write("\7u\2\2\u03c5\u00ac\3\2\2\2\u03c6\u03c7\7m\2\2\u03c7\u03c8") - buf.write("\7g\2\2\u03c8\u03c9\7{\2\2\u03c9\u00ae\3\2\2\2\u03ca\u03cb") - buf.write("\7n\2\2\u03cb\u03cc\7p\2\2\u03cc\u00b0\3\2\2\2\u03cd\u03ce") - buf.write("\7n\2\2\u03ce\u03cf\7q\2\2\u03cf\u03d0\7i\2\2\u03d0\u00b2") - buf.write("\3\2\2\2\u03d1\u03d2\7v\2\2\u03d2\u03d3\7t\2\2\u03d3\u03d4") - buf.write("\7w\2\2\u03d4\u03d5\7p\2\2\u03d5\u03d6\7e\2\2\u03d6\u00b4") - buf.write("\3\2\2\2\u03d7\u03d8\7t\2\2\u03d8\u03d9\7q\2\2\u03d9\u03da") - buf.write("\7w\2\2\u03da\u03db\7p\2\2\u03db\u03dc\7f\2\2\u03dc\u00b6") - buf.write("\3\2\2\2\u03dd\u03de\7r\2\2\u03de\u03df\7q\2\2\u03df\u03e0") - buf.write("\7y\2\2\u03e0\u03e1\7g\2\2\u03e1\u03e2\7t\2\2\u03e2\u00b8") - buf.write("\3\2\2\2\u03e3\u03e4\7o\2\2\u03e4\u03e5\7q\2\2\u03e5\u03e6") - buf.write("\7f\2\2\u03e6\u00ba\3\2\2\2\u03e7\u03e8\7n\2\2\u03e8\u03e9") - buf.write("\7g\2\2\u03e9\u03ea\7p\2\2\u03ea\u03eb\7i\2\2\u03eb\u03ec") - buf.write("\7v\2\2\u03ec\u03ed\7j\2\2\u03ed\u00bc\3\2\2\2\u03ee\u03ef") - buf.write("\7~\2\2\u03ef\u03f0\7~\2\2\u03f0\u00be\3\2\2\2\u03f1\u03f2") - buf.write("\7v\2\2\u03f2\u03f3\7t\2\2\u03f3\u03f4\7k\2\2\u03f4\u03f5") - buf.write("\7o\2\2\u03f5\u00c0\3\2\2\2\u03f6\u03f7\7w\2\2\u03f7\u03f8") - buf.write("\7r\2\2\u03f8\u03f9\7r\2\2\u03f9\u03fa\7g\2\2\u03fa\u03fb") - buf.write("\7t\2\2\u03fb\u00c2\3\2\2\2\u03fc\u03fd\7n\2\2\u03fd\u03fe") - buf.write("\7q\2\2\u03fe\u03ff\7y\2\2\u03ff\u0400\7g\2\2\u0400\u0401") - buf.write("\7t\2\2\u0401\u00c4\3\2\2\2\u0402\u0403\7u\2\2\u0403\u0404") - buf.write("\7w\2\2\u0404\u0405\7d\2\2\u0405\u0406\7u\2\2\u0406\u0407") - buf.write("\7v\2\2\u0407\u0408\7t\2\2\u0408\u00c6\3\2\2\2\u0409\u040a") - buf.write("\7u\2\2\u040a\u040b\7w\2\2\u040b\u040c\7o\2\2\u040c\u00c8") - buf.write("\3\2\2\2\u040d\u040e\7c\2\2\u040e\u040f\7x\2\2\u040f\u0410") - buf.write("\7i\2\2\u0410\u00ca\3\2\2\2\u0411\u0412\7o\2\2\u0412\u0413") - buf.write("\7g\2\2\u0413\u0414\7f\2\2\u0414\u0415\7k\2\2\u0415\u0416") - buf.write("\7c\2\2\u0416\u0417\7p\2\2\u0417\u00cc\3\2\2\2\u0418\u0419") - buf.write("\7e\2\2\u0419\u041a\7q\2\2\u041a\u041b\7w\2\2\u041b\u041c") - buf.write("\7p\2\2\u041c\u041d\7v\2\2\u041d\u00ce\3\2\2\2\u041e\u041f") - buf.write("\7k\2\2\u041f\u0420\7f\2\2\u0420\u0421\7g\2\2\u0421\u0422") - buf.write("\7p\2\2\u0422\u0423\7v\2\2\u0423\u0424\7k\2\2\u0424\u0425") - buf.write("\7h\2\2\u0425\u0426\7k\2\2\u0426\u0427\7g\2\2\u0427\u0428") - buf.write("\7t\2\2\u0428\u00d0\3\2\2\2\u0429\u042a\7o\2\2\u042a\u042b") - buf.write("\7g\2\2\u042b\u042c\7c\2\2\u042c\u042d\7u\2\2\u042d\u042e") - buf.write("\7w\2\2\u042e\u042f\7t\2\2\u042f\u0430\7g\2\2\u0430\u00d2") - buf.write("\3\2\2\2\u0431\u0432\7c\2\2\u0432\u0433\7v\2\2\u0433\u0434") - buf.write("\7v\2\2\u0434\u0435\7t\2\2\u0435\u0436\7k\2\2\u0436\u0437") - buf.write("\7d\2\2\u0437\u0438\7w\2\2\u0438\u0439\7v\2\2\u0439\u043a") - buf.write("\7g\2\2\u043a\u00d4\3\2\2\2\u043b\u043c\7h\2\2\u043c\u043d") - buf.write("\7k\2\2\u043d\u043e\7n\2\2\u043e\u043f\7v\2\2\u043f\u0440") - buf.write("\7g\2\2\u0440\u0441\7t\2\2\u0441\u00d6\3\2\2\2\u0442\u0443") - buf.write("\7o\2\2\u0443\u0444\7g\2\2\u0444\u0445\7t\2\2\u0445\u0446") - buf.write("\7i\2\2\u0446\u0447\7g\2\2\u0447\u00d8\3\2\2\2\u0448\u0449") - buf.write("\7g\2\2\u0449\u044a\7z\2\2\u044a\u044b\7r\2\2\u044b\u00da") - buf.write("\3\2\2\2\u044c\u044d\7e\2\2\u044d\u044e\7q\2\2\u044e\u044f") - buf.write("\7o\2\2\u044f\u0450\7r\2\2\u0450\u0451\7q\2\2\u0451\u0452") - buf.write("\7p\2\2\u0452\u0453\7g\2\2\u0453\u0454\7p\2\2\u0454\u0455") - buf.write("\7v\2\2\u0455\u0456\7T\2\2\u0456\u0457\7q\2\2\u0457\u0458") - buf.write("\7n\2\2\u0458\u0459\7g\2\2\u0459\u00dc\3\2\2\2\u045a\u045b") - buf.write("\7x\2\2\u045b\u045c\7k\2\2\u045c\u045d\7t\2\2\u045d\u045e") - buf.write("\7c\2\2\u045e\u045f\7n\2\2\u045f\u00de\3\2\2\2\u0460\u0461") - buf.write("\7o\2\2\u0461\u0462\7c\2\2\u0462\u0463\7v\2\2\u0463\u0464") - buf.write("\7e\2\2\u0464\u0465\7j\2\2\u0465\u0466\7a\2\2\u0466\u0467") - buf.write("\7e\2\2\u0467\u0468\7j\2\2\u0468\u0469\7c\2\2\u0469\u046a") - buf.write("\7t\2\2\u046a\u046b\7c\2\2\u046b\u046c\7e\2\2\u046c\u046d") - buf.write("\7v\2\2\u046d\u046e\7g\2\2\u046e\u046f\7t\2\2\u046f\u0470") - buf.write("\7u\2\2\u0470\u00e0\3\2\2\2\u0471\u0472\7v\2\2\u0472\u0473") - buf.write("\7{\2\2\u0473\u0474\7r\2\2\u0474\u0475\7g\2\2\u0475\u00e2") - buf.write("\3\2\2\2\u0476\u0477\7p\2\2\u0477\u0478\7x\2\2\u0478\u0479") - buf.write("\7n\2\2\u0479\u00e4\3\2\2\2\u047a\u047b\7j\2\2\u047b\u047c") - buf.write("\7k\2\2\u047c\u047d\7g\2\2\u047d\u047e\7t\2\2\u047e\u047f") - buf.write("\7c\2\2\u047f\u0480\7t\2\2\u0480\u0481\7e\2\2\u0481\u0482") - buf.write("\7j\2\2\u0482\u0483\7{\2\2\u0483\u00e6\3\2\2\2\u0484\u0485") - buf.write("\7a\2\2\u0485\u00e8\3\2\2\2\u0486\u0487\7k\2\2\u0487\u0488") - buf.write("\7p\2\2\u0488\u0489\7x\2\2\u0489\u048a\7c\2\2\u048a\u048b") - buf.write("\7n\2\2\u048b\u048c\7k\2\2\u048c\u048d\7f\2\2\u048d\u00ea") - buf.write("\3\2\2\2\u048e\u048f\7x\2\2\u048f\u0490\7c\2\2\u0490\u0491") - buf.write("\7n\2\2\u0491\u0492\7w\2\2\u0492\u0493\7g\2\2\u0493\u0494") - buf.write("\7f\2\2\u0494\u0495\7q\2\2\u0495\u0496\7o\2\2\u0496\u0497") - buf.write("\7c\2\2\u0497\u0498\7k\2\2\u0498\u0499\7p\2\2\u0499\u00ec") - buf.write("\3\2\2\2\u049a\u049b\7x\2\2\u049b\u049c\7c\2\2\u049c\u049d") - buf.write("\7t\2\2\u049d\u049e\7k\2\2\u049e\u049f\7c\2\2\u049f\u04a0") - buf.write("\7d\2\2\u04a0\u04a1\7n\2\2\u04a1\u04a2\7g\2\2\u04a2\u00ee") - buf.write("\3\2\2\2\u04a3\u04a4\7f\2\2\u04a4\u04a5\7c\2\2\u04a5\u04a6") - buf.write("\7v\2\2\u04a6\u04a7\7c\2\2\u04a7\u00f0\3\2\2\2\u04a8\u04a9") - buf.write("\7u\2\2\u04a9\u04aa\7v\2\2\u04aa\u04ab\7t\2\2\u04ab\u04ac") - buf.write("\7w\2\2\u04ac\u04ad\7e\2\2\u04ad\u04ae\7v\2\2\u04ae\u04af") - buf.write("\7w\2\2\u04af\u04b0\7t\2\2\u04b0\u04b1\7g\2\2\u04b1\u00f2") - buf.write("\3\2\2\2\u04b2\u04b3\7f\2\2\u04b3\u04b4\7c\2\2\u04b4\u04b5") - buf.write("\7v\2\2\u04b5\u04b6\7c\2\2\u04b6\u04b7\7u\2\2\u04b7\u04b8") - buf.write("\7g\2\2\u04b8\u04b9\7v\2\2\u04b9\u00f4\3\2\2\2\u04ba\u04bb") - buf.write("\7q\2\2\u04bb\u04bc\7r\2\2\u04bc\u04bd\7g\2\2\u04bd\u04be") - buf.write("\7t\2\2\u04be\u04bf\7c\2\2\u04bf\u04c0\7v\2\2\u04c0\u04c1") - buf.write("\7q\2\2\u04c1\u04c2\7t\2\2\u04c2\u00f6\3\2\2\2\u04c3\u04c4") - buf.write("\7f\2\2\u04c4\u04c5\7g\2\2\u04c5\u04c6\7h\2\2\u04c6\u04c7") - buf.write("\7k\2\2\u04c7\u04c8\7p\2\2\u04c8\u04c9\7g\2\2\u04c9\u00f8") - buf.write("\3\2\2\2\u04ca\u04cb\7>\2\2\u04cb\u04cc\7/\2\2\u04cc\u00fa") - buf.write("\3\2\2\2\u04cd\u04ce\7f\2\2\u04ce\u04cf\7c\2\2\u04cf\u04d0") - buf.write("\7v\2\2\u04d0\u04d1\7c\2\2\u04d1\u04d2\7r\2\2\u04d2\u04d3") - buf.write("\7q\2\2\u04d3\u04d4\7k\2\2\u04d4\u04d5\7p\2\2\u04d5\u04d6") - buf.write("\7v\2\2\u04d6\u00fc\3\2\2\2\u04d7\u04d8\7j\2\2\u04d8\u04d9") - buf.write("\7k\2\2\u04d9\u04da\7g\2\2\u04da\u04db\7t\2\2\u04db\u04dc") - buf.write("\7c\2\2\u04dc\u04dd\7t\2\2\u04dd\u04de\7e\2\2\u04de\u04df") - buf.write("\7j\2\2\u04df\u04e0\7k\2\2\u04e0\u04e1\7e\2\2\u04e1\u04e2") - buf.write("\7c\2\2\u04e2\u04e3\7n\2\2\u04e3\u00fe\3\2\2\2\u04e4\u04e5") - buf.write("\7t\2\2\u04e5\u04e6\7w\2\2\u04e6\u04e7\7n\2\2\u04e7\u04e8") - buf.write("\7g\2\2\u04e8\u04e9\7u\2\2\u04e9\u04ea\7g\2\2\u04ea\u04eb") - buf.write("\7v\2\2\u04eb\u0100\3\2\2\2\u04ec\u04ed\7t\2\2\u04ed\u04ee") - buf.write("\7w\2\2\u04ee\u04ef\7n\2\2\u04ef\u04f0\7g\2\2\u04f0\u0102") - buf.write("\3\2\2\2\u04f1\u04f2\7g\2\2\u04f2\u04f3\7p\2\2\u04f3\u04f4") - buf.write("\7f\2\2\u04f4\u0104\3\2\2\2\u04f5\u04f6\7c\2\2\u04f6\u04f7") - buf.write("\7n\2\2\u04f7\u04f8\7v\2\2\u04f8\u04f9\7g\2\2\u04f9\u04fa") - buf.write("\7t\2\2\u04fa\u04fb\7F\2\2\u04fb\u04fc\7c\2\2\u04fc\u04fd") - buf.write("\7v\2\2\u04fd\u04fe\7c\2\2\u04fe\u04ff\7u\2\2\u04ff\u0500") - buf.write("\7g\2\2\u0500\u0501\7v\2\2\u0501\u0106\3\2\2\2\u0502\u0503") - buf.write("\7n\2\2\u0503\u0504\7v\2\2\u0504\u0505\7t\2\2\u0505\u0506") - buf.write("\7k\2\2\u0506\u0507\7o\2\2\u0507\u0108\3\2\2\2\u0508\u0509") - buf.write("\7t\2\2\u0509\u050a\7v\2\2\u050a\u050b\7t\2\2\u050b\u050c") - buf.write("\7k\2\2\u050c\u050d\7o\2\2\u050d\u010a\3\2\2\2\u050e\u050f") - buf.write("\7k\2\2\u050f\u0510\7p\2\2\u0510\u0511\7u\2\2\u0511\u0512") - buf.write("\7v\2\2\u0512\u0513\7t\2\2\u0513\u010c\3\2\2\2\u0514\u0515") - buf.write("\7t\2\2\u0515\u0516\7g\2\2\u0516\u0517\7r\2\2\u0517\u0518") - buf.write("\7n\2\2\u0518\u0519\7c\2\2\u0519\u051a\7e\2\2\u051a\u051b") - buf.write("\7g\2\2\u051b\u010e\3\2\2\2\u051c\u051d\7e\2\2\u051d\u051e") - buf.write("\7g\2\2\u051e\u051f\7k\2\2\u051f\u0520\7n\2\2\u0520\u0110") - buf.write("\3\2\2\2\u0521\u0522\7h\2\2\u0522\u0523\7n\2\2\u0523\u0524") - buf.write("\7q\2\2\u0524\u0525\7q\2\2\u0525\u0526\7t\2\2\u0526\u0112") - buf.write("\3\2\2\2\u0527\u0528\7u\2\2\u0528\u0529\7s\2\2\u0529\u052a") - buf.write("\7t\2\2\u052a\u052b\7v\2\2\u052b\u0114\3\2\2\2\u052c\u052d") - buf.write("\7c\2\2\u052d\u052e\7p\2\2\u052e\u052f\7{\2\2\u052f\u0116") - buf.write("\3\2\2\2\u0530\u0531\7u\2\2\u0531\u0532\7g\2\2\u0532\u0533") - buf.write("\7v\2\2\u0533\u0534\7f\2\2\u0534\u0535\7k\2\2\u0535\u0536") - buf.write("\7h\2\2\u0536\u0537\7h\2\2\u0537\u0118\3\2\2\2\u0538\u0539") - buf.write("\7u\2\2\u0539\u053a\7v\2\2\u053a\u053b\7f\2\2\u053b\u053c") - buf.write("\7f\2\2\u053c\u053d\7g\2\2\u053d\u053e\7x\2\2\u053e\u053f") - buf.write("\7a\2\2\u053f\u0540\7r\2\2\u0540\u0541\7q\2\2\u0541\u0542") - buf.write("\7r\2\2\u0542\u011a\3\2\2\2\u0543\u0544\7u\2\2\u0544\u0545") - buf.write("\7v\2\2\u0545\u0546\7f\2\2\u0546\u0547\7f\2\2\u0547\u0548") - buf.write("\7g\2\2\u0548\u0549\7x\2\2\u0549\u054a\7a\2\2\u054a\u054b") - buf.write("\7u\2\2\u054b\u054c\7c\2\2\u054c\u054d\7o\2\2\u054d\u054e") - buf.write("\7r\2\2\u054e\u011c\3\2\2\2\u054f\u0550\7x\2\2\u0550\u0551") - buf.write("\7c\2\2\u0551\u0552\7t\2\2\u0552\u0553\7a\2\2\u0553\u0554") - buf.write("\7r\2\2\u0554\u0555\7q\2\2\u0555\u0556\7r\2\2\u0556\u011e") - buf.write("\3\2\2\2\u0557\u0558\7x\2\2\u0558\u0559\7c\2\2\u0559\u055a") - buf.write("\7t\2\2\u055a\u055b\7a\2\2\u055b\u055c\7u\2\2\u055c\u055d") - buf.write("\7c\2\2\u055d\u055e\7o\2\2\u055e\u055f\7r\2\2\u055f\u0120") - buf.write("\3\2\2\2\u0560\u0561\7i\2\2\u0561\u0562\7t\2\2\u0562\u0563") - buf.write("\7q\2\2\u0563\u0564\7w\2\2\u0564\u0565\7r\2\2\u0565\u0122") - buf.write("\3\2\2\2\u0566\u0567\7g\2\2\u0567\u0568\7z\2\2\u0568\u0569") - buf.write("\7e\2\2\u0569\u056a\7g\2\2\u056a\u056b\7r\2\2\u056b\u056c") - buf.write("\7v\2\2\u056c\u0124\3\2\2\2\u056d\u056e\7j\2\2\u056e\u056f") - buf.write("\7c\2\2\u056f\u0570\7x\2\2\u0570\u0571\7k\2\2\u0571\u0572") - buf.write("\7p\2\2\u0572\u0573\7i\2\2\u0573\u0126\3\2\2\2\u0574\u0575") - buf.write("\7h\2\2\u0575\u0576\7k\2\2\u0576\u0577\7t\2\2\u0577\u0578") - buf.write("\7u\2\2\u0578\u0579\7v\2\2\u0579\u057a\7a\2\2\u057a\u057b") - buf.write("\7x\2\2\u057b\u057c\7c\2\2\u057c\u057d\7n\2\2\u057d\u057e") - buf.write("\7w\2\2\u057e\u057f\7g\2\2\u057f\u0128\3\2\2\2\u0580\u0581") - buf.write("\7n\2\2\u0581\u0582\7c\2\2\u0582\u0583\7u\2\2\u0583\u0584") - buf.write("\7v\2\2\u0584\u0585\7a\2\2\u0585\u0586\7x\2\2\u0586\u0587") - buf.write("\7c\2\2\u0587\u0588\7n\2\2\u0588\u0589\7w\2\2\u0589\u058a") - buf.write("\7g\2\2\u058a\u012a\3\2\2\2\u058b\u058c\7n\2\2\u058c\u058d") - buf.write("\7c\2\2\u058d\u058e\7i\2\2\u058e\u012c\3\2\2\2\u058f\u0590") - buf.write("\7n\2\2\u0590\u0591\7g\2\2\u0591\u0592\7c\2\2\u0592\u0593") - buf.write("\7f\2\2\u0593\u012e\3\2\2\2\u0594\u0595\7t\2\2\u0595\u0596") - buf.write("\7c\2\2\u0596\u0597\7v\2\2\u0597\u0598\7k\2\2\u0598\u0599") - buf.write("\7q\2\2\u0599\u059a\7a\2\2\u059a\u059b\7v\2\2\u059b\u059c") - buf.write("\7q\2\2\u059c\u059d\7a\2\2\u059d\u059e\7t\2\2\u059e\u059f") - buf.write("\7g\2\2\u059f\u05a0\7r\2\2\u05a0\u05a1\7q\2\2\u05a1\u05a2") - buf.write("\7t\2\2\u05a2\u05a3\7v\2\2\u05a3\u0130\3\2\2\2\u05a4\u05a5") - buf.write("\7q\2\2\u05a5\u05a6\7x\2\2\u05a6\u05a7\7g\2\2\u05a7\u05a8") - buf.write("\7t\2\2\u05a8\u0132\3\2\2\2\u05a9\u05aa\7r\2\2\u05aa\u05ab") - buf.write("\7t\2\2\u05ab\u05ac\7g\2\2\u05ac\u05ad\7e\2\2\u05ad\u05ae") - buf.write("\7g\2\2\u05ae\u05af\7f\2\2\u05af\u05b0\7k\2\2\u05b0\u05b1") - buf.write("\7p\2\2\u05b1\u05b2\7i\2\2\u05b2\u0134\3\2\2\2\u05b3\u05b4") - buf.write("\7h\2\2\u05b4\u05b5\7q\2\2\u05b5\u05b6\7n\2\2\u05b6\u05b7") - buf.write("\7n\2\2\u05b7\u05b8\7q\2\2\u05b8\u05b9\7y\2\2\u05b9\u05ba") - buf.write("\7k\2\2\u05ba\u05bb\7p\2\2\u05bb\u05bc\7i\2\2\u05bc\u0136") - buf.write("\3\2\2\2\u05bd\u05be\7w\2\2\u05be\u05bf\7p\2\2\u05bf\u05c0") - buf.write("\7d\2\2\u05c0\u05c1\7q\2\2\u05c1\u05c2\7w\2\2\u05c2\u05c3") - buf.write("\7p\2\2\u05c3\u05c4\7f\2\2\u05c4\u05c5\7g\2\2\u05c5\u05c6") - buf.write("\7f\2\2\u05c6\u0138\3\2\2\2\u05c7\u05c8\7r\2\2\u05c8\u05c9") - buf.write("\7c\2\2\u05c9\u05ca\7t\2\2\u05ca\u05cb\7v\2\2\u05cb\u05cc") - buf.write("\7k\2\2\u05cc\u05cd\7v\2\2\u05cd\u05ce\7k\2\2\u05ce\u05cf") - buf.write("\7q\2\2\u05cf\u05d0\7p\2\2\u05d0\u013a\3\2\2\2\u05d1\u05d2") - buf.write("\7t\2\2\u05d2\u05d3\7q\2\2\u05d3\u05d4\7y\2\2\u05d4\u05d5") - buf.write("\7u\2\2\u05d5\u013c\3\2\2\2\u05d6\u05d7\7t\2\2\u05d7\u05d8") - buf.write("\7c\2\2\u05d8\u05d9\7p\2\2\u05d9\u05da\7i\2\2\u05da\u05db") - buf.write("\7g\2\2\u05db\u013e\3\2\2\2\u05dc\u05dd\7e\2\2\u05dd\u05de") - buf.write("\7w\2\2\u05de\u05df\7t\2\2\u05df\u05e0\7t\2\2\u05e0\u05e1") - buf.write("\7g\2\2\u05e1\u05e2\7p\2\2\u05e2\u05e3\7v\2\2\u05e3\u0140") - buf.write("\3\2\2\2\u05e4\u05e5\7x\2\2\u05e5\u05e6\7c\2\2\u05e6\u05e7") - buf.write("\7n\2\2\u05e7\u05e8\7k\2\2\u05e8\u05e9\7f\2\2\u05e9\u0142") - buf.write("\3\2\2\2\u05ea\u05eb\7h\2\2\u05eb\u05ec\7k\2\2\u05ec\u05ed") - buf.write("\7n\2\2\u05ed\u05ee\7n\2\2\u05ee\u05ef\7a\2\2\u05ef\u05f0") - buf.write("\7v\2\2\u05f0\u05f1\7k\2\2\u05f1\u05f2\7o\2\2\u05f2\u05f3") - buf.write("\7g\2\2\u05f3\u05f4\7a\2\2\u05f4\u05f5\7u\2\2\u05f5\u05f6") - buf.write("\7g\2\2\u05f6\u05f7\7t\2\2\u05f7\u05f8\7k\2\2\u05f8\u05f9") - buf.write("\7g\2\2\u05f9\u05fa\7u\2\2\u05fa\u0144\3\2\2\2\u05fb\u05fc") - buf.write("\7h\2\2\u05fc\u05fd\7n\2\2\u05fd\u05fe\7q\2\2\u05fe\u05ff") - buf.write("\7y\2\2\u05ff\u0600\7a\2\2\u0600\u0601\7v\2\2\u0601\u0602") - buf.write("\7q\2\2\u0602\u0603\7a\2\2\u0603\u0604\7u\2\2\u0604\u0605") - buf.write("\7v\2\2\u0605\u0606\7q\2\2\u0606\u0607\7e\2\2\u0607\u0608") - buf.write("\7m\2\2\u0608\u0146\3\2\2\2\u0609\u060a\7u\2\2\u060a\u060b") - buf.write("\7v\2\2\u060b\u060c\7q\2\2\u060c\u060d\7e\2\2\u060d\u060e") - buf.write("\7m\2\2\u060e\u060f\7a\2\2\u060f\u0610\7v\2\2\u0610\u0611") - buf.write("\7q\2\2\u0611\u0612\7a\2\2\u0612\u0613\7h\2\2\u0613\u0614") - buf.write("\7n\2\2\u0614\u0615\7q\2\2\u0615\u0616\7y\2\2\u0616\u0148") - buf.write("\3\2\2\2\u0617\u0618\7v\2\2\u0618\u0619\7k\2\2\u0619\u061a") - buf.write("\7o\2\2\u061a\u061b\7g\2\2\u061b\u061c\7u\2\2\u061c\u061d") - buf.write("\7j\2\2\u061d\u061e\7k\2\2\u061e\u061f\7h\2\2\u061f\u0620") - buf.write("\7v\2\2\u0620\u014a\3\2\2\2\u0621\u0622\7o\2\2\u0622\u0623") - buf.write("\7g\2\2\u0623\u0624\7c\2\2\u0624\u0625\7u\2\2\u0625\u0626") - buf.write("\7w\2\2\u0626\u0627\7t\2\2\u0627\u0628\7g\2\2\u0628\u0629") - buf.write("\7u\2\2\u0629\u014c\3\2\2\2\u062a\u062b\7p\2\2\u062b\u062c") - buf.write("\7q\2\2\u062c\u062d\7a\2\2\u062d\u062e\7o\2\2\u062e\u062f") - buf.write("\7g\2\2\u062f\u0630\7c\2\2\u0630\u0631\7u\2\2\u0631\u0632") - buf.write("\7w\2\2\u0632\u0633\7t\2\2\u0633\u0634\7g\2\2\u0634\u0635") - buf.write("\7u\2\2\u0635\u014e\3\2\2\2\u0636\u0637\7e\2\2\u0637\u0638") - buf.write("\7q\2\2\u0638\u0639\7p\2\2\u0639\u063a\7f\2\2\u063a\u063b") - buf.write("\7k\2\2\u063b\u063c\7v\2\2\u063c\u063d\7k\2\2\u063d\u063e") - buf.write("\7q\2\2\u063e\u063f\7p\2\2\u063f\u0150\3\2\2\2\u0640\u0641") - buf.write("\7d\2\2\u0641\u0642\7q\2\2\u0642\u0643\7q\2\2\u0643\u0644") - buf.write("\7n\2\2\u0644\u0645\7g\2\2\u0645\u0646\7c\2\2\u0646\u0647") - buf.write("\7p\2\2\u0647\u0152\3\2\2\2\u0648\u0649\7f\2\2\u0649\u064a") - buf.write("\7c\2\2\u064a\u064b\7v\2\2\u064b\u064c\7g\2\2\u064c\u0154") - buf.write("\3\2\2\2\u064d\u064e\7v\2\2\u064e\u064f\7k\2\2\u064f\u0650") - buf.write("\7o\2\2\u0650\u0651\7g\2\2\u0651\u0652\7a\2\2\u0652\u0653") - buf.write("\7r\2\2\u0653\u0654\7g\2\2\u0654\u0655\7t\2\2\u0655\u0656") - buf.write("\7k\2\2\u0656\u0657\7q\2\2\u0657\u0658\7f\2\2\u0658\u0156") - buf.write("\3\2\2\2\u0659\u065a\7p\2\2\u065a\u065b\7w\2\2\u065b\u065c") - buf.write("\7o\2\2\u065c\u065d\7d\2\2\u065d\u065e\7g\2\2\u065e\u065f") - buf.write("\7t\2\2\u065f\u0158\3\2\2\2\u0660\u0661\7u\2\2\u0661\u0662") - buf.write("\7v\2\2\u0662\u0663\7t\2\2\u0663\u0664\7k\2\2\u0664\u0665") - buf.write("\7p\2\2\u0665\u0666\7i\2\2\u0666\u015a\3\2\2\2\u0667\u0668") - buf.write("\7v\2\2\u0668\u0669\7k\2\2\u0669\u066a\7o\2\2\u066a\u066b") - buf.write("\7g\2\2\u066b\u015c\3\2\2\2\u066c\u066d\7k\2\2\u066d\u066e") - buf.write("\7p\2\2\u066e\u066f\7v\2\2\u066f\u0670\7g\2\2\u0670\u0671") - buf.write("\7i\2\2\u0671\u0672\7g\2\2\u0672\u0673\7t\2\2\u0673\u015e") - buf.write("\3\2\2\2\u0674\u0675\7h\2\2\u0675\u0676\7n\2\2\u0676\u0677") - buf.write("\7q\2\2\u0677\u0678\7c\2\2\u0678\u0679\7v\2\2\u0679\u0160") - buf.write("\3\2\2\2\u067a\u067b\7n\2\2\u067b\u067c\7k\2\2\u067c\u067d") - buf.write("\7u\2\2\u067d\u067e\7v\2\2\u067e\u0162\3\2\2\2\u067f\u0680") - buf.write("\7t\2\2\u0680\u0681\7g\2\2\u0681\u0682\7e\2\2\u0682\u0683") - buf.write("\7q\2\2\u0683\u0684\7t\2\2\u0684\u0685\7f\2\2\u0685\u0164") - buf.write("\3\2\2\2\u0686\u0687\7t\2\2\u0687\u0688\7g\2\2\u0688\u0689") - buf.write("\7u\2\2\u0689\u068a\7v\2\2\u068a\u068b\7t\2\2\u068b\u068c") - buf.write("\7k\2\2\u068c\u068d\7e\2\2\u068d\u068e\7v\2\2\u068e\u0166") - buf.write("\3\2\2\2\u068f\u0690\7{\2\2\u0690\u0691\7{\2\2\u0691\u0692") - buf.write("\7{\2\2\u0692\u0693\7{\2\2\u0693\u0168\3\2\2\2\u0694\u0695") - buf.write("\7o\2\2\u0695\u0696\7o\2\2\u0696\u016a\3\2\2\2\u0697\u0698") - buf.write("\7f\2\2\u0698\u0699\7f\2\2\u0699\u016c\3\2\2\2\u069a\u069b") - buf.write("\7o\2\2\u069b\u069c\7c\2\2\u069c\u069d\7z\2\2\u069d\u069e") - buf.write("\7N\2\2\u069e\u069f\7g\2\2\u069f\u06a0\7p\2\2\u06a0\u06a1") - buf.write("\7i\2\2\u06a1\u06a2\7v\2\2\u06a2\u06a3\7j\2\2\u06a3\u016e") - buf.write("\3\2\2\2\u06a4\u06a5\7t\2\2\u06a5\u06a6\7g\2\2\u06a6\u06a7") - buf.write("\7i\2\2\u06a7\u06a8\7g\2\2\u06a8\u06a9\7z\2\2\u06a9\u06aa") - buf.write("\7r\2\2\u06aa\u0170\3\2\2\2\u06ab\u06ac\7k\2\2\u06ac\u06ad") - buf.write("\7u\2\2\u06ad\u0172\3\2\2\2\u06ae\u06af\7y\2\2\u06af\u06b0") - buf.write("\7j\2\2\u06b0\u06b1\7g\2\2\u06b1\u06b2\7p\2\2\u06b2\u0174") - buf.write("\3\2\2\2\u06b3\u06b4\7h\2\2\u06b4\u06b5\7t\2\2\u06b5\u06b6") - buf.write("\7q\2\2\u06b6\u06b7\7o\2\2\u06b7\u0176\3\2\2\2\u06b8\u06b9") - buf.write("\7c\2\2\u06b9\u06ba\7i\2\2\u06ba\u06bb\7i\2\2\u06bb\u06bc") - buf.write("\7t\2\2\u06bc\u06bd\7g\2\2\u06bd\u06be\7i\2\2\u06be\u06bf") - buf.write("\7c\2\2\u06bf\u06c0\7v\2\2\u06c0\u06c1\7g\2\2\u06c1\u06c2") - buf.write("\7u\2\2\u06c2\u0178\3\2\2\2\u06c3\u06c4\7r\2\2\u06c4\u06c5") - buf.write("\7q\2\2\u06c5\u06c6\7k\2\2\u06c6\u06c7\7p\2\2\u06c7\u06c8") - buf.write("\7v\2\2\u06c8\u06c9\7u\2\2\u06c9\u017a\3\2\2\2\u06ca\u06cb") - buf.write("\7r\2\2\u06cb\u06cc\7q\2\2\u06cc\u06cd\7k\2\2\u06cd\u06ce") - buf.write("\7p\2\2\u06ce\u06cf\7v\2\2\u06cf\u017c\3\2\2\2\u06d0\u06d1") - buf.write("\7v\2\2\u06d1\u06d2\7q\2\2\u06d2\u06d3\7v\2\2\u06d3\u06d4") - buf.write("\7c\2\2\u06d4\u06d5\7n\2\2\u06d5\u017e\3\2\2\2\u06d6\u06d7") - buf.write("\7r\2\2\u06d7\u06d8\7c\2\2\u06d8\u06d9\7t\2\2\u06d9\u06da") - buf.write("\7v\2\2\u06da\u06db\7k\2\2\u06db\u06dc\7c\2\2\u06dc\u06dd") - buf.write("\7n\2\2\u06dd\u0180\3\2\2\2\u06de\u06df\7c\2\2\u06df\u06e0") - buf.write("\7n\2\2\u06e0\u06e1\7y\2\2\u06e1\u06e2\7c\2\2\u06e2\u06e3") - buf.write("\7{\2\2\u06e3\u06e4\7u\2\2\u06e4\u0182\3\2\2\2\u06e5\u06e6") - buf.write("\7k\2\2\u06e6\u06e7\7p\2\2\u06e7\u06e8\7p\2\2\u06e8\u06e9") - buf.write("\7g\2\2\u06e9\u06ea\7t\2\2\u06ea\u06eb\7a\2\2\u06eb\u06ec") - buf.write("\7l\2\2\u06ec\u06ed\7q\2\2\u06ed\u06ee\7k\2\2\u06ee\u06ef") - buf.write("\7p\2\2\u06ef\u0184\3\2\2\2\u06f0\u06f1\7n\2\2\u06f1\u06f2") - buf.write("\7g\2\2\u06f2\u06f3\7h\2\2\u06f3\u06f4\7v\2\2\u06f4\u06f5") - buf.write("\7a\2\2\u06f5\u06f6\7l\2\2\u06f6\u06f7\7q\2\2\u06f7\u06f8") - buf.write("\7k\2\2\u06f8\u06f9\7p\2\2\u06f9\u0186\3\2\2\2\u06fa\u06fb") - buf.write("\7e\2\2\u06fb\u06fc\7t\2\2\u06fc\u06fd\7q\2\2\u06fd\u06fe") - buf.write("\7u\2\2\u06fe\u06ff\7u\2\2\u06ff\u0700\7a\2\2\u0700\u0701") - buf.write("\7l\2\2\u0701\u0702\7q\2\2\u0702\u0703\7k\2\2\u0703\u0704") - buf.write("\7p\2\2\u0704\u0188\3\2\2\2\u0705\u0706\7h\2\2\u0706\u0707") - buf.write("\7w\2\2\u0707\u0708\7n\2\2\u0708\u0709\7n\2\2\u0709\u070a") - buf.write("\7a\2\2\u070a\u070b\7l\2\2\u070b\u070c\7q\2\2\u070c\u070d") - buf.write("\7k\2\2\u070d\u070e\7p\2\2\u070e\u018a\3\2\2\2\u070f\u0710") - buf.write("\7o\2\2\u0710\u0711\7c\2\2\u0711\u0712\7r\2\2\u0712\u0713") - buf.write("\7u\2\2\u0713\u0714\7a\2\2\u0714\u0715\7h\2\2\u0715\u0716") - buf.write("\7t\2\2\u0716\u0717\7q\2\2\u0717\u0718\7o\2\2\u0718\u018c") - buf.write("\3\2\2\2\u0719\u071a\7o\2\2\u071a\u071b\7c\2\2\u071b\u071c") - buf.write("\7r\2\2\u071c\u071d\7u\2\2\u071d\u071e\7a\2\2\u071e\u071f") - buf.write("\7v\2\2\u071f\u0720\7q\2\2\u0720\u018e\3\2\2\2\u0721\u0722") - buf.write("\7o\2\2\u0722\u0723\7c\2\2\u0723\u0724\7r\2\2\u0724\u0725") - buf.write("\7a\2\2\u0725\u0726\7v\2\2\u0726\u0727\7q\2\2\u0727\u0190") - buf.write("\3\2\2\2\u0728\u0729\7o\2\2\u0729\u072a\7c\2\2\u072a\u072b") - buf.write("\7r\2\2\u072b\u072c\7a\2\2\u072c\u072d\7h\2\2\u072d\u072e") - buf.write("\7t\2\2\u072e\u072f\7q\2\2\u072f\u0730\7o\2\2\u0730\u0192") - buf.write("\3\2\2\2\u0731\u0732\7t\2\2\u0732\u0733\7g\2\2\u0733\u0734") - buf.write("\7v\2\2\u0734\u0735\7w\2\2\u0735\u0736\7t\2\2\u0736\u0737") - buf.write("\7p\2\2\u0737\u0738\7u\2\2\u0738\u0194\3\2\2\2\u0739\u073a") - buf.write("\7r\2\2\u073a\u073b\7k\2\2\u073b\u073c\7x\2\2\u073c\u073d") - buf.write("\7q\2\2\u073d\u073e\7v\2\2\u073e\u0196\3\2\2\2\u073f\u0740") - buf.write("\7e\2\2\u0740\u0741\7w\2\2\u0741\u0742\7u\2\2\u0742\u0743") - buf.write("\7v\2\2\u0743\u0744\7q\2\2\u0744\u0745\7o\2\2\u0745\u0746") - buf.write("\7R\2\2\u0746\u0747\7k\2\2\u0747\u0748\7x\2\2\u0748\u0749") - buf.write("\7q\2\2\u0749\u074a\7v\2\2\u074a\u0198\3\2\2\2\u074b\u074c") - buf.write("\7w\2\2\u074c\u074d\7p\2\2\u074d\u074e\7r\2\2\u074e\u074f") - buf.write("\7k\2\2\u074f\u0750\7x\2\2\u0750\u0751\7q\2\2\u0751\u0752") - buf.write("\7v\2\2\u0752\u019a\3\2\2\2\u0753\u0754\7u\2\2\u0754\u0755") - buf.write("\7w\2\2\u0755\u0756\7d\2\2\u0756\u019c\3\2\2\2\u0757\u0758") - buf.write("\7c\2\2\u0758\u0759\7r\2\2\u0759\u075a\7r\2\2\u075a\u075b") - buf.write("\7n\2\2\u075b\u075c\7{\2\2\u075c\u019e\3\2\2\2\u075d\u075e") - buf.write("\7e\2\2\u075e\u075f\7q\2\2\u075f\u0760\7p\2\2\u0760\u0761") - buf.write("\7f\2\2\u0761\u0762\7k\2\2\u0762\u0763\7v\2\2\u0763\u0764") - buf.write("\7k\2\2\u0764\u0765\7q\2\2\u0765\u0766\7p\2\2\u0766\u0767") - buf.write("\7g\2\2\u0767\u0768\7f\2\2\u0768\u01a0\3\2\2\2\u0769\u076a") - buf.write("\7r\2\2\u076a\u076b\7g\2\2\u076b\u076c\7t\2\2\u076c\u076d") - buf.write("\7k\2\2\u076d\u076e\7q\2\2\u076e\u076f\7f\2\2\u076f\u0770") - buf.write("\7a\2\2\u0770\u0771\7k\2\2\u0771\u0772\7p\2\2\u0772\u0773") - buf.write("\7f\2\2\u0773\u0774\7k\2\2\u0774\u0775\7e\2\2\u0775\u0776") - buf.write("\7c\2\2\u0776\u0777\7v\2\2\u0777\u0778\7q\2\2\u0778\u0779") - buf.write("\7t\2\2\u0779\u01a2\3\2\2\2\u077a\u077b\7u\2\2\u077b\u077c") - buf.write("\7k\2\2\u077c\u077d\7p\2\2\u077d\u077e\7i\2\2\u077e\u077f") - buf.write("\7n\2\2\u077f\u0780\7g\2\2\u0780\u01a4\3\2\2\2\u0781\u0782") - buf.write("\7f\2\2\u0782\u0783\7w\2\2\u0783\u0784\7t\2\2\u0784\u0785") - buf.write("\7c\2\2\u0785\u0786\7v\2\2\u0786\u0787\7k\2\2\u0787\u0788") - buf.write("\7q\2\2\u0788\u0789\7p\2\2\u0789\u01a6\3\2\2\2\u078a\u078b") - buf.write("\7v\2\2\u078b\u078c\7k\2\2\u078c\u078d\7o\2\2\u078d\u078e") - buf.write("\7g\2\2\u078e\u078f\7a\2\2\u078f\u0790\7c\2\2\u0790\u0791") - buf.write("\7i\2\2\u0791\u0792\7i\2\2\u0792\u01a8\3\2\2\2\u0793\u0794") - buf.write("\7w\2\2\u0794\u0795\7p\2\2\u0795\u0796\7k\2\2\u0796\u0797") - buf.write("\7v\2\2\u0797\u01aa\3\2\2\2\u0798\u0799\7X\2\2\u0799\u079a") - buf.write("\7c\2\2\u079a\u079b\7n\2\2\u079b\u079c\7w\2\2\u079c\u079d") - buf.write("\7g\2\2\u079d\u01ac\3\2\2\2\u079e\u079f\7x\2\2\u079f\u07a0") - buf.write("\7c\2\2\u07a0\u07a1\7n\2\2\u07a1\u07a2\7w\2\2\u07a2\u07a3") - buf.write("\7g\2\2\u07a3\u07a4\7f\2\2\u07a4\u07a5\7q\2\2\u07a5\u07a6") - buf.write("\7o\2\2\u07a6\u07a7\7c\2\2\u07a7\u07a8\7k\2\2\u07a8\u07a9") - buf.write("\7p\2\2\u07a9\u07aa\7u\2\2\u07aa\u01ae\3\2\2\2\u07ab\u07ac") - buf.write("\7x\2\2\u07ac\u07ad\7c\2\2\u07ad\u07ae\7t\2\2\u07ae\u07af") - buf.write("\7k\2\2\u07af\u07b0\7c\2\2\u07b0\u07b1\7d\2\2\u07b1\u07b2") - buf.write("\7n\2\2\u07b2\u07b3\7g\2\2\u07b3\u07b4\7u\2\2\u07b4\u01b0") - buf.write("\3\2\2\2\u07b5\u07b6\7k\2\2\u07b6\u07b7\7p\2\2\u07b7\u07b8") - buf.write("\7r\2\2\u07b8\u07b9\7w\2\2\u07b9\u07ba\7v\2\2\u07ba\u01b2") - buf.write("\3\2\2\2\u07bb\u07bc\7q\2\2\u07bc\u07bd\7w\2\2\u07bd\u07be") - buf.write("\7v\2\2\u07be\u07bf\7r\2\2\u07bf\u07c0\7w\2\2\u07c0\u07c1") - buf.write("\7v\2\2\u07c1\u01b4\3\2\2\2\u07c2\u07c3\7e\2\2\u07c3\u07c4") - buf.write("\7c\2\2\u07c4\u07c5\7u\2\2\u07c5\u07c6\7v\2\2\u07c6\u01b6") - buf.write("\3\2\2\2\u07c7\u07c8\7t\2\2\u07c8\u07c9\7w\2\2\u07c9\u07ca") - buf.write("\7n\2\2\u07ca\u07cb\7g\2\2\u07cb\u07cc\7a\2\2\u07cc\u07cd") - buf.write("\7r\2\2\u07cd\u07ce\7t\2\2\u07ce\u07cf\7k\2\2\u07cf\u07d0") - buf.write("\7q\2\2\u07d0\u07d1\7t\2\2\u07d1\u07d2\7k\2\2\u07d2\u07d3") - buf.write("\7v\2\2\u07d3\u07d4\7{\2\2\u07d4\u01b8\3\2\2\2\u07d5\u07d6") - buf.write("\7f\2\2\u07d6\u07d7\7c\2\2\u07d7\u07d8\7v\2\2\u07d8\u07d9") - buf.write("\7c\2\2\u07d9\u07da\7u\2\2\u07da\u07db\7g\2\2\u07db\u07dc") - buf.write("\7v\2\2\u07dc\u07dd\7a\2\2\u07dd\u07de\7r\2\2\u07de\u07df") - buf.write("\7t\2\2\u07df\u07e0\7k\2\2\u07e0\u07e1\7q\2\2\u07e1\u07e2") - buf.write("\7t\2\2\u07e2\u07e3\7k\2\2\u07e3\u07e4\7v\2\2\u07e4\u07e5") - buf.write("\7{\2\2\u07e5\u01ba\3\2\2\2\u07e6\u07e7\7f\2\2\u07e7\u07e8") - buf.write("\7g\2\2\u07e8\u07e9\7h\2\2\u07e9\u07ea\7c\2\2\u07ea\u07eb") - buf.write("\7w\2\2\u07eb\u07ec\7n\2\2\u07ec\u07ed\7v\2\2\u07ed\u01bc") - buf.write("\3\2\2\2\u07ee\u07ef\7e\2\2\u07ef\u07f0\7j\2\2\u07f0\u07f1") - buf.write("\7g\2\2\u07f1\u07f2\7e\2\2\u07f2\u07f3\7m\2\2\u07f3\u07f4") - buf.write("\7a\2\2\u07f4\u07f5\7f\2\2\u07f5\u07f6\7c\2\2\u07f6\u07f7") - buf.write("\7v\2\2\u07f7\u07f8\7c\2\2\u07f8\u07f9\7r\2\2\u07f9\u07fa") - buf.write("\7q\2\2\u07fa\u07fb\7k\2\2\u07fb\u07fc\7p\2\2\u07fc\u07fd") - buf.write("\7v\2\2\u07fd\u01be\3\2\2\2\u07fe\u07ff\7e\2\2\u07ff\u0800") - buf.write("\7j\2\2\u0800\u0801\7g\2\2\u0801\u0802\7e\2\2\u0802\u0803") - buf.write("\7m\2\2\u0803\u0804\7a\2\2\u0804\u0805\7j\2\2\u0805\u0806") - buf.write("\7k\2\2\u0806\u0807\7g\2\2\u0807\u0808\7t\2\2\u0808\u0809") - buf.write("\7c\2\2\u0809\u080a\7t\2\2\u080a\u080b\7e\2\2\u080b\u080c") - buf.write("\7j\2\2\u080c\u080d\7{\2\2\u080d\u01c0\3\2\2\2\u080e\u080f") - buf.write("\7e\2\2\u080f\u0810\7q\2\2\u0810\u0811\7o\2\2\u0811\u0812") - buf.write("\7r\2\2\u0812\u0813\7w\2\2\u0813\u0814\7v\2\2\u0814\u0815") - buf.write("\7g\2\2\u0815\u0816\7f\2\2\u0816\u01c2\3\2\2\2\u0817\u0818") - buf.write("\7p\2\2\u0818\u0819\7q\2\2\u0819\u081a\7p\2\2\u081a\u081b") - buf.write("\7a\2\2\u081b\u081c\7p\2\2\u081c\u081d\7w\2\2\u081d\u081e") - buf.write("\7n\2\2\u081e\u081f\7n\2\2\u081f\u01c4\3\2\2\2\u0820\u0821") - buf.write("\7p\2\2\u0821\u0822\7q\2\2\u0822\u0823\7p\2\2\u0823\u0824") - buf.write("\7a\2\2\u0824\u0825\7|\2\2\u0825\u0826\7g\2\2\u0826\u0827") - buf.write("\7t\2\2\u0827\u0828\7q\2\2\u0828\u01c6\3\2\2\2\u0829\u082a") - buf.write("\7r\2\2\u082a\u082b\7c\2\2\u082b\u082c\7t\2\2\u082c\u082d") - buf.write("\7v\2\2\u082d\u082e\7k\2\2\u082e\u082f\7c\2\2\u082f\u0830") - buf.write("\7n\2\2\u0830\u0831\7a\2\2\u0831\u0832\7p\2\2\u0832\u0833") - buf.write("\7w\2\2\u0833\u0834\7n\2\2\u0834\u0835\7n\2\2\u0835\u01c8") - buf.write("\3\2\2\2\u0836\u0837\7r\2\2\u0837\u0838\7c\2\2\u0838\u0839") - buf.write("\7t\2\2\u0839\u083a\7v\2\2\u083a\u083b\7k\2\2\u083b\u083c") - buf.write("\7c\2\2\u083c\u083d\7n\2\2\u083d\u083e\7a\2\2\u083e\u083f") - buf.write("\7|\2\2\u083f\u0840\7g\2\2\u0840\u0841\7t\2\2\u0841\u0842") - buf.write("\7q\2\2\u0842\u01ca\3\2\2\2\u0843\u0844\7c\2\2\u0844\u0845") - buf.write("\7n\2\2\u0845\u0846\7y\2\2\u0846\u0847\7c\2\2\u0847\u0848") - buf.write("\7{\2\2\u0848\u0849\7u\2\2\u0849\u084a\7a\2\2\u084a\u084b") - buf.write("\7p\2\2\u084b\u084c\7w\2\2\u084c\u084d\7n\2\2\u084d\u084e") - buf.write("\7n\2\2\u084e\u01cc\3\2\2\2\u084f\u0850\7c\2\2\u0850\u0851") - buf.write("\7n\2\2\u0851\u0852\7y\2\2\u0852\u0853\7c\2\2\u0853\u0854") - buf.write("\7{\2\2\u0854\u0855\7u\2\2\u0855\u0856\7a\2\2\u0856\u0857") - buf.write("\7|\2\2\u0857\u0858\7g\2\2\u0858\u0859\7t\2\2\u0859\u085a") - buf.write("\7q\2\2\u085a\u01ce\3\2\2\2\u085b\u085c\7e\2\2\u085c\u085d") - buf.write("\7q\2\2\u085d\u085e\7o\2\2\u085e\u085f\7r\2\2\u085f\u0860") - buf.write("\7q\2\2\u0860\u0861\7p\2\2\u0861\u0862\7g\2\2\u0862\u0863") - buf.write("\7p\2\2\u0863\u0864\7v\2\2\u0864\u0865\7u\2\2\u0865\u01d0") - buf.write("\3\2\2\2\u0866\u0867\7c\2\2\u0867\u0868\7n\2\2\u0868\u0869") - buf.write("\7n\2\2\u0869\u086a\7a\2\2\u086a\u086b\7o\2\2\u086b\u086c") - buf.write("\7g\2\2\u086c\u086d\7c\2\2\u086d\u086e\7u\2\2\u086e\u086f") - buf.write("\7w\2\2\u086f\u0870\7t\2\2\u0870\u0871\7g\2\2\u0871\u0872") - buf.write("\7u\2\2\u0872\u01d2\3\2\2\2\u0873\u0874\7u\2\2\u0874\u0875") - buf.write("\7e\2\2\u0875\u0876\7c\2\2\u0876\u0877\7n\2\2\u0877\u0878") - buf.write("\7c\2\2\u0878\u0879\7t\2\2\u0879\u01d4\3\2\2\2\u087a\u087b") - buf.write("\7e\2\2\u087b\u087c\7q\2\2\u087c\u087d\7o\2\2\u087d\u087e") - buf.write("\7r\2\2\u087e\u087f\7q\2\2\u087f\u0880\7p\2\2\u0880\u0881") - buf.write("\7g\2\2\u0881\u0882\7p\2\2\u0882\u0883\7v\2\2\u0883\u01d6") - buf.write("\3\2\2\2\u0884\u0885\7f\2\2\u0885\u0886\7c\2\2\u0886\u0887") - buf.write("\7v\2\2\u0887\u0888\7c\2\2\u0888\u0889\7r\2\2\u0889\u088a") - buf.write("\7q\2\2\u088a\u088b\7k\2\2\u088b\u088c\7p\2\2\u088c\u088d") - buf.write("\7v\2\2\u088d\u088e\7a\2\2\u088e\u088f\7q\2\2\u088f\u0890") - buf.write("\7p\2\2\u0890\u0891\7a\2\2\u0891\u0892\7x\2\2\u0892\u0893") - buf.write("\7c\2\2\u0893\u0894\7n\2\2\u0894\u0895\7w\2\2\u0895\u0896") - buf.write("\7g\2\2\u0896\u0897\7f\2\2\u0897\u0898\7q\2\2\u0898\u0899") - buf.write("\7o\2\2\u0899\u089a\7c\2\2\u089a\u089b\7k\2\2\u089b\u089c") - buf.write("\7p\2\2\u089c\u089d\7u\2\2\u089d\u01d8\3\2\2\2\u089e\u089f") - buf.write("\7f\2\2\u089f\u08a0\7c\2\2\u08a0\u08a1\7v\2\2\u08a1\u08a2") - buf.write("\7c\2\2\u08a2\u08a3\7r\2\2\u08a3\u08a4\7q\2\2\u08a4\u08a5") - buf.write("\7k\2\2\u08a5\u08a6\7p\2\2\u08a6\u08a7\7v\2\2\u08a7\u08a8") - buf.write("\7a\2\2\u08a8\u08a9\7q\2\2\u08a9\u08aa\7p\2\2\u08aa\u08ab") - buf.write("\7a\2\2\u08ab\u08ac\7x\2\2\u08ac\u08ad\7c\2\2\u08ad\u08ae") - buf.write("\7t\2\2\u08ae\u08af\7k\2\2\u08af\u08b0\7c\2\2\u08b0\u08b1") - buf.write("\7d\2\2\u08b1\u08b2\7n\2\2\u08b2\u08b3\7g\2\2\u08b3\u08b4") - buf.write("\7u\2\2\u08b4\u01da\3\2\2\2\u08b5\u08b6\7j\2\2\u08b6\u08b7") - buf.write("\7k\2\2\u08b7\u08b8\7g\2\2\u08b8\u08b9\7t\2\2\u08b9\u08ba") - buf.write("\7c\2\2\u08ba\u08bb\7t\2\2\u08bb\u08bc\7e\2\2\u08bc\u08bd") - buf.write("\7j\2\2\u08bd\u08be\7k\2\2\u08be\u08bf\7e\2\2\u08bf\u08c0") - buf.write("\7c\2\2\u08c0\u08c1\7n\2\2\u08c1\u08c2\7a\2\2\u08c2\u08c3") - buf.write("\7q\2\2\u08c3\u08c4\7p\2\2\u08c4\u08c5\7a\2\2\u08c5\u08c6") - buf.write("\7x\2\2\u08c6\u08c7\7c\2\2\u08c7\u08c8\7n\2\2\u08c8\u08c9") - buf.write("\7w\2\2\u08c9\u08ca\7g\2\2\u08ca\u08cb\7f\2\2\u08cb\u08cc") - buf.write("\7q\2\2\u08cc\u08cd\7o\2\2\u08cd\u08ce\7c\2\2\u08ce\u08cf") - buf.write("\7k\2\2\u08cf\u08d0\7p\2\2\u08d0\u08d1\7u\2\2\u08d1\u01dc") - buf.write("\3\2\2\2\u08d2\u08d3\7j\2\2\u08d3\u08d4\7k\2\2\u08d4\u08d5") - buf.write("\7g\2\2\u08d5\u08d6\7t\2\2\u08d6\u08d7\7c\2\2\u08d7\u08d8") - buf.write("\7t\2\2\u08d8\u08d9\7e\2\2\u08d9\u08da\7j\2\2\u08da\u08db") - buf.write("\7k\2\2\u08db\u08dc\7e\2\2\u08dc\u08dd\7c\2\2\u08dd\u08de") - buf.write("\7n\2\2\u08de\u08df\7a\2\2\u08df\u08e0\7q\2\2\u08e0\u08e1") - buf.write("\7p\2\2\u08e1\u08e2\7a\2\2\u08e2\u08e3\7x\2\2\u08e3\u08e4") - buf.write("\7c\2\2\u08e4\u08e5\7t\2\2\u08e5\u08e6\7k\2\2\u08e6\u08e7") - buf.write("\7c\2\2\u08e7\u08e8\7d\2\2\u08e8\u08e9\7n\2\2\u08e9\u08ea") - buf.write("\7g\2\2\u08ea\u08eb\7u\2\2\u08eb\u01de\3\2\2\2\u08ec\u08ed") - buf.write("\7u\2\2\u08ed\u08ee\7g\2\2\u08ee\u08ef\7v\2\2\u08ef\u01e0") - buf.write("\3\2\2\2\u08f0\u08f1\7n\2\2\u08f1\u08f2\7c\2\2\u08f2\u08f3") - buf.write("\7p\2\2\u08f3\u08f4\7i\2\2\u08f4\u08f5\7w\2\2\u08f5\u08f6") - buf.write("\7c\2\2\u08f6\u08f7\7i\2\2\u08f7\u08f8\7g\2\2\u08f8\u01e2") - buf.write("\3\2\2\2\u08f9\u08fa\t\2\2\2\u08fa\u01e4\3\2\2\2\u08fb") - buf.write("\u08fc\4\62;\2\u08fc\u01e6\3\2\2\2\u08fd\u08ff\5\u01e5") - buf.write("\u00f3\2\u08fe\u08fd\3\2\2\2\u08ff\u0900\3\2\2\2\u0900") - buf.write("\u08fe\3\2\2\2\u0900\u0901\3\2\2\2\u0901\u01e8\3\2\2\2") - buf.write("\u0902\u0903\5\u01e7\u00f4\2\u0903\u0904\7\60\2\2\u0904") - buf.write("\u0905\5\u01e7\u00f4\2\u0905\u01ea\3\2\2\2\u0906\u0907") - buf.write("\7v\2\2\u0907\u0908\7t\2\2\u0908\u0909\7w\2\2\u0909\u0910") - buf.write("\7g\2\2\u090a\u090b\7h\2\2\u090b\u090c\7c\2\2\u090c\u090d") - buf.write("\7n\2\2\u090d\u090e\7u\2\2\u090e\u0910\7g\2\2\u090f\u0906") - buf.write("\3\2\2\2\u090f\u090a\3\2\2\2\u0910\u01ec\3\2\2\2\u0911") - buf.write("\u0915\7$\2\2\u0912\u0914\n\3\2\2\u0913\u0912\3\2\2\2") - buf.write("\u0914\u0917\3\2\2\2\u0915\u0913\3\2\2\2\u0915\u0916\3") - buf.write("\2\2\2\u0916\u0918\3\2\2\2\u0917\u0915\3\2\2\2\u0918\u0919") - buf.write("\7$\2\2\u0919\u01ee\3\2\2\2\u091a\u091e\5\u01e3\u00f2") - buf.write("\2\u091b\u091d\t\4\2\2\u091c\u091b\3\2\2\2\u091d\u0920") - buf.write("\3\2\2\2\u091e\u091c\3\2\2\2\u091e\u091f\3\2\2\2\u091f") - buf.write("\u0930\3\2\2\2\u0920\u091e\3\2\2\2\u0921\u0923\5\u01e5") - buf.write("\u00f3\2\u0922\u0924\t\4\2\2\u0923\u0922\3\2\2\2\u0924") - buf.write("\u0925\3\2\2\2\u0925\u0923\3\2\2\2\u0925\u0926\3\2\2\2") - buf.write("\u0926\u0930\3\2\2\2\u0927\u092b\7)\2\2\u0928\u092a\13") - buf.write("\2\2\2\u0929\u0928\3\2\2\2\u092a\u092d\3\2\2\2\u092b\u092c") - buf.write("\3\2\2\2\u092b\u0929\3\2\2\2\u092c\u092e\3\2\2\2\u092d") - buf.write("\u092b\3\2\2\2\u092e\u0930\7)\2\2\u092f\u091a\3\2\2\2") - buf.write("\u092f\u0921\3\2\2\2\u092f\u0927\3\2\2\2\u0930\u01f0\3") - buf.write("\2\2\2\u0931\u0933\t\5\2\2\u0932\u0931\3\2\2\2\u0933\u0934") - buf.write("\3\2\2\2\u0934\u0932\3\2\2\2\u0934\u0935\3\2\2\2\u0935") - buf.write("\u0936\3\2\2\2\u0936\u0937\b\u00f9\2\2\u0937\u01f2\3\2") - buf.write("\2\2\u0938\u0939\7=\2\2\u0939\u01f4\3\2\2\2\u093a\u093b") - buf.write("\7\61\2\2\u093b\u093c\7,\2\2\u093c\u0940\3\2\2\2\u093d") - buf.write("\u093f\13\2\2\2\u093e\u093d\3\2\2\2\u093f\u0942\3\2\2") - buf.write("\2\u0940\u0941\3\2\2\2\u0940\u093e\3\2\2\2\u0941\u0943") - buf.write("\3\2\2\2\u0942\u0940\3\2\2\2\u0943\u0944\7,\2\2\u0944") - buf.write("\u0945\7\61\2\2\u0945\u0946\3\2\2\2\u0946\u0947\b\u00fb") - buf.write("\3\2\u0947\u01f6\3\2\2\2\u0948\u0949\7\61\2\2\u0949\u094a") - buf.write("\7\61\2\2\u094a\u094e\3\2\2\2\u094b\u094d\n\6\2\2\u094c") - buf.write("\u094b\3\2\2\2\u094d\u0950\3\2\2\2\u094e\u094c\3\2\2\2") - buf.write("\u094e\u094f\3\2\2\2\u094f\u0951\3\2\2\2\u0950\u094e\3") - buf.write("\2\2\2\u0951\u0952\b\u00fc\3\2\u0952\u01f8\3\2\2\2\r\2") - buf.write("\u0900\u090f\u0915\u091e\u0925\u092b\u092f\u0934\u0940") - buf.write("\u094e\4\2\3\2\2\4\2") - return buf.getvalue() - - -class Lexer(ANTLRLexer): - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] - - LPAREN = 1 - RPAREN = 2 - QLPAREN = 3 - QRPAREN = 4 - GLPAREN = 5 - GRPAREN = 6 - EQ = 7 - LT = 8 - MT = 9 - ME = 10 - NEQ = 11 - LE = 12 - PLUS = 13 - MINUS = 14 - MUL = 15 - DIV = 16 - COMMA = 17 - POINTER = 18 - COLON = 19 - ASSIGN = 20 - MEMBERSHIP = 21 - EVAL = 22 - IF = 23 - CASE = 24 - THEN = 25 - ELSE = 26 - USING = 27 - WITH = 28 - CURRENT_DATE = 29 - DATEDIFF = 30 - DATEADD = 31 - YEAR_OP = 32 - MONTH_OP = 33 - DAYOFMONTH = 34 - DAYOFYEAR = 35 - DAYTOYEAR = 36 - DAYTOMONTH = 37 - YEARTODAY = 38 - MONTHTODAY = 39 - ON = 40 - DROP = 41 - KEEP = 42 - CALC = 43 - ATTRCALC = 44 - RENAME = 45 - AS = 46 - AND = 47 - OR = 48 - XOR = 49 - NOT = 50 - BETWEEN = 51 - IN = 52 - NOT_IN = 53 - NULL_CONSTANT = 54 - ISNULL = 55 - EX = 56 - UNION = 57 - DIFF = 58 - SYMDIFF = 59 - INTERSECT = 60 - RANDOM = 61 - KEYS = 62 - INTYEAR = 63 - INTMONTH = 64 - INTDAY = 65 - CHECK = 66 - EXISTS_IN = 67 - TO = 68 - RETURN = 69 - IMBALANCE = 70 - ERRORCODE = 71 - ALL = 72 - AGGREGATE = 73 - ERRORLEVEL = 74 - ORDER = 75 - BY = 76 - RANK = 77 - ASC = 78 - DESC = 79 - MIN = 80 - MAX = 81 - FIRST = 82 - LAST = 83 - INDEXOF = 84 - ABS = 85 - KEY = 86 - LN = 87 - LOG = 88 - TRUNC = 89 - ROUND = 90 - POWER = 91 - MOD = 92 - LEN = 93 - CONCAT = 94 - TRIM = 95 - UCASE = 96 - LCASE = 97 - SUBSTR = 98 - SUM = 99 - AVG = 100 - MEDIAN = 101 - COUNT = 102 - DIMENSION = 103 - MEASURE = 104 - ATTRIBUTE = 105 - FILTER = 106 - MERGE = 107 - EXP = 108 - ROLE = 109 - VIRAL = 110 - CHARSET_MATCH = 111 - TYPE = 112 - NVL = 113 - HIERARCHY = 114 - OPTIONAL = 115 - INVALID = 116 - VALUE_DOMAIN = 117 - VARIABLE = 118 - DATA = 119 - STRUCTURE = 120 - DATASET = 121 - OPERATOR = 122 - DEFINE = 123 - PUT_SYMBOL = 124 - DATAPOINT = 125 - HIERARCHICAL = 126 - RULESET = 127 - RULE = 128 - END = 129 - ALTER_DATASET = 130 - LTRIM = 131 - RTRIM = 132 - INSTR = 133 - REPLACE = 134 - CEIL = 135 - FLOOR = 136 - SQRT = 137 - ANY = 138 - SETDIFF = 139 - STDDEV_POP = 140 - STDDEV_SAMP = 141 - VAR_POP = 142 - VAR_SAMP = 143 - GROUP = 144 - EXCEPT = 145 - HAVING = 146 - FIRST_VALUE = 147 - LAST_VALUE = 148 - LAG = 149 - LEAD = 150 - RATIO_TO_REPORT = 151 - OVER = 152 - PRECEDING = 153 - FOLLOWING = 154 - UNBOUNDED = 155 - PARTITION = 156 - ROWS = 157 - RANGE = 158 - CURRENT = 159 - VALID = 160 - FILL_TIME_SERIES = 161 - FLOW_TO_STOCK = 162 - STOCK_TO_FLOW = 163 - TIMESHIFT = 164 - MEASURES = 165 - NO_MEASURES = 166 - CONDITION = 167 - BOOLEAN = 168 - DATE = 169 - TIME_PERIOD = 170 - NUMBER = 171 - STRING = 172 - TIME = 173 - INTEGER = 174 - FLOAT = 175 - LIST = 176 - RECORD = 177 - RESTRICT = 178 - YYYY = 179 - MM = 180 - DD = 181 - MAX_LENGTH = 182 - REGEXP = 183 - IS = 184 - WHEN = 185 - FROM = 186 - AGGREGATES = 187 - POINTS = 188 - POINT = 189 - TOTAL = 190 - PARTIAL = 191 - ALWAYS = 192 - INNER_JOIN = 193 - LEFT_JOIN = 194 - CROSS_JOIN = 195 - FULL_JOIN = 196 - MAPS_FROM = 197 - MAPS_TO = 198 - MAP_TO = 199 - MAP_FROM = 200 - RETURNS = 201 - PIVOT = 202 - CUSTOMPIVOT = 203 - UNPIVOT = 204 - SUBSPACE = 205 - APPLY = 206 - CONDITIONED = 207 - PERIOD_INDICATOR = 208 - SINGLE = 209 - DURATION = 210 - TIME_AGG = 211 - UNIT = 212 - VALUE = 213 - VALUEDOMAINS = 214 - VARIABLES = 215 - INPUT = 216 - OUTPUT = 217 - CAST = 218 - RULE_PRIORITY = 219 - DATASET_PRIORITY = 220 - DEFAULT = 221 - CHECK_DATAPOINT = 222 - CHECK_HIERARCHY = 223 - COMPUTED = 224 - NON_NULL = 225 - NON_ZERO = 226 - PARTIAL_NULL = 227 - PARTIAL_ZERO = 228 - ALWAYS_NULL = 229 - ALWAYS_ZERO = 230 - COMPONENTS = 231 - ALL_MEASURES = 232 - SCALAR = 233 - COMPONENT = 234 - DATAPOINT_ON_VD = 235 - DATAPOINT_ON_VAR = 236 - HIERARCHICAL_ON_VD = 237 - HIERARCHICAL_ON_VAR = 238 - SET = 239 - LANGUAGE = 240 - INTEGER_CONSTANT = 241 - NUMBER_CONSTANT = 242 - BOOLEAN_CONSTANT = 243 - STRING_CONSTANT = 244 - IDENTIFIER = 245 - WS = 246 - EOL = 247 - ML_COMMENT = 248 - SL_COMMENT = 249 - - channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] - - modeNames = ["DEFAULT_MODE"] - - literalNames = [ - "", - "'('", - "')'", - "'['", - "']'", - "'{'", - "'}'", - "'='", - "'<'", - "'>'", - "'>='", - "'<>'", - "'<='", - "'+'", - "'-'", - "'*'", - "'/'", - "','", - "'->'", - "':'", - "':='", - "'#'", - "'eval'", - "'if'", - "'case'", - "'then'", - "'else'", - "'using'", - "'with'", - "'current_date'", - "'datediff'", - "'dateadd'", - "'getyear'", - "'getmonth'", - "'dayofmonth'", - "'dayofyear'", - "'daytoyear'", - "'daytomonth'", - "'yeartoday'", - "'monthtoday'", - "'on'", - "'drop'", - "'keep'", - "'calc'", - "'attrcalc'", - "'rename'", - "'as'", - "'and'", - "'or'", - "'xor'", - "'not'", - "'between'", - "'in'", - "'not_in'", - "'null'", - "'isnull'", - "'ex'", - "'union'", - "'diff'", - "'symdiff'", - "'intersect'", - "'random'", - "'keys'", - "'intyear'", - "'intmonth'", - "'intday'", - "'check'", - "'exists_in'", - "'to'", - "'return'", - "'imbalance'", - "'errorcode'", - "'all'", - "'aggr'", - "'errorlevel'", - "'order'", - "'by'", - "'rank'", - "'asc'", - "'desc'", - "'min'", - "'max'", - "'first'", - "'last'", - "'indexof'", - "'abs'", - "'key'", - "'ln'", - "'log'", - "'trunc'", - "'round'", - "'power'", - "'mod'", - "'length'", - "'||'", - "'trim'", - "'upper'", - "'lower'", - "'substr'", - "'sum'", - "'avg'", - "'median'", - "'count'", - "'identifier'", - "'measure'", - "'attribute'", - "'filter'", - "'merge'", - "'exp'", - "'componentRole'", - "'viral'", - "'match_characters'", - "'type'", - "'nvl'", - "'hierarchy'", - "'_'", - "'invalid'", - "'valuedomain'", - "'variable'", - "'data'", - "'structure'", - "'dataset'", - "'operator'", - "'define'", - "'<-'", - "'datapoint'", - "'hierarchical'", - "'ruleset'", - "'rule'", - "'end'", - "'alterDataset'", - "'ltrim'", - "'rtrim'", - "'instr'", - "'replace'", - "'ceil'", - "'floor'", - "'sqrt'", - "'any'", - "'setdiff'", - "'stddev_pop'", - "'stddev_samp'", - "'var_pop'", - "'var_samp'", - "'group'", - "'except'", - "'having'", - "'first_value'", - "'last_value'", - "'lag'", - "'lead'", - "'ratio_to_report'", - "'over'", - "'preceding'", - "'following'", - "'unbounded'", - "'partition'", - "'rows'", - "'range'", - "'current'", - "'valid'", - "'fill_time_series'", - "'flow_to_stock'", - "'stock_to_flow'", - "'timeshift'", - "'measures'", - "'no_measures'", - "'condition'", - "'boolean'", - "'date'", - "'time_period'", - "'number'", - "'string'", - "'time'", - "'integer'", - "'float'", - "'list'", - "'record'", - "'restrict'", - "'yyyy'", - "'mm'", - "'dd'", - "'maxLength'", - "'regexp'", - "'is'", - "'when'", - "'from'", - "'aggregates'", - "'points'", - "'point'", - "'total'", - "'partial'", - "'always'", - "'inner_join'", - "'left_join'", - "'cross_join'", - "'full_join'", - "'maps_from'", - "'maps_to'", - "'map_to'", - "'map_from'", - "'returns'", - "'pivot'", - "'customPivot'", - "'unpivot'", - "'sub'", - "'apply'", - "'conditioned'", - "'period_indicator'", - "'single'", - "'duration'", - "'time_agg'", - "'unit'", - "'Value'", - "'valuedomains'", - "'variables'", - "'input'", - "'output'", - "'cast'", - "'rule_priority'", - "'dataset_priority'", - "'default'", - "'check_datapoint'", - "'check_hierarchy'", - "'computed'", - "'non_null'", - "'non_zero'", - "'partial_null'", - "'partial_zero'", - "'always_null'", - "'always_zero'", - "'components'", - "'all_measures'", - "'scalar'", - "'component'", - "'datapoint_on_valuedomains'", - "'datapoint_on_variables'", - "'hierarchical_on_valuedomains'", - "'hierarchical_on_variables'", - "'set'", - "'language'", - "';'", - ] - - symbolicNames = [ - "", - "LPAREN", - "RPAREN", - "QLPAREN", - "QRPAREN", - "GLPAREN", - "GRPAREN", - "EQ", - "LT", - "MT", - "ME", - "NEQ", - "LE", - "PLUS", - "MINUS", - "MUL", - "DIV", - "COMMA", - "POINTER", - "COLON", - "ASSIGN", - "MEMBERSHIP", - "EVAL", - "IF", - "CASE", - "THEN", - "ELSE", - "USING", - "WITH", - "CURRENT_DATE", - "DATEDIFF", - "DATEADD", - "YEAR_OP", - "MONTH_OP", - "DAYOFMONTH", - "DAYOFYEAR", - "DAYTOYEAR", - "DAYTOMONTH", - "YEARTODAY", - "MONTHTODAY", - "ON", - "DROP", - "KEEP", - "CALC", - "ATTRCALC", - "RENAME", - "AS", - "AND", - "OR", - "XOR", - "NOT", - "BETWEEN", - "IN", - "NOT_IN", - "NULL_CONSTANT", - "ISNULL", - "EX", - "UNION", - "DIFF", - "SYMDIFF", - "INTERSECT", - "RANDOM", - "KEYS", - "INTYEAR", - "INTMONTH", - "INTDAY", - "CHECK", - "EXISTS_IN", - "TO", - "RETURN", - "IMBALANCE", - "ERRORCODE", - "ALL", - "AGGREGATE", - "ERRORLEVEL", - "ORDER", - "BY", - "RANK", - "ASC", - "DESC", - "MIN", - "MAX", - "FIRST", - "LAST", - "INDEXOF", - "ABS", - "KEY", - "LN", - "LOG", - "TRUNC", - "ROUND", - "POWER", - "MOD", - "LEN", - "CONCAT", - "TRIM", - "UCASE", - "LCASE", - "SUBSTR", - "SUM", - "AVG", - "MEDIAN", - "COUNT", - "DIMENSION", - "MEASURE", - "ATTRIBUTE", - "FILTER", - "MERGE", - "EXP", - "ROLE", - "VIRAL", - "CHARSET_MATCH", - "TYPE", - "NVL", - "HIERARCHY", - "OPTIONAL", - "INVALID", - "VALUE_DOMAIN", - "VARIABLE", - "DATA", - "STRUCTURE", - "DATASET", - "OPERATOR", - "DEFINE", - "PUT_SYMBOL", - "DATAPOINT", - "HIERARCHICAL", - "RULESET", - "RULE", - "END", - "ALTER_DATASET", - "LTRIM", - "RTRIM", - "INSTR", - "REPLACE", - "CEIL", - "FLOOR", - "SQRT", - "ANY", - "SETDIFF", - "STDDEV_POP", - "STDDEV_SAMP", - "VAR_POP", - "VAR_SAMP", - "GROUP", - "EXCEPT", - "HAVING", - "FIRST_VALUE", - "LAST_VALUE", - "LAG", - "LEAD", - "RATIO_TO_REPORT", - "OVER", - "PRECEDING", - "FOLLOWING", - "UNBOUNDED", - "PARTITION", - "ROWS", - "RANGE", - "CURRENT", - "VALID", - "FILL_TIME_SERIES", - "FLOW_TO_STOCK", - "STOCK_TO_FLOW", - "TIMESHIFT", - "MEASURES", - "NO_MEASURES", - "CONDITION", - "BOOLEAN", - "DATE", - "TIME_PERIOD", - "NUMBER", - "STRING", - "TIME", - "INTEGER", - "FLOAT", - "LIST", - "RECORD", - "RESTRICT", - "YYYY", - "MM", - "DD", - "MAX_LENGTH", - "REGEXP", - "IS", - "WHEN", - "FROM", - "AGGREGATES", - "POINTS", - "POINT", - "TOTAL", - "PARTIAL", - "ALWAYS", - "INNER_JOIN", - "LEFT_JOIN", - "CROSS_JOIN", - "FULL_JOIN", - "MAPS_FROM", - "MAPS_TO", - "MAP_TO", - "MAP_FROM", - "RETURNS", - "PIVOT", - "CUSTOMPIVOT", - "UNPIVOT", - "SUBSPACE", - "APPLY", - "CONDITIONED", - "PERIOD_INDICATOR", - "SINGLE", - "DURATION", - "TIME_AGG", - "UNIT", - "VALUE", - "VALUEDOMAINS", - "VARIABLES", - "INPUT", - "OUTPUT", - "CAST", - "RULE_PRIORITY", - "DATASET_PRIORITY", - "DEFAULT", - "CHECK_DATAPOINT", - "CHECK_HIERARCHY", - "COMPUTED", - "NON_NULL", - "NON_ZERO", - "PARTIAL_NULL", - "PARTIAL_ZERO", - "ALWAYS_NULL", - "ALWAYS_ZERO", - "COMPONENTS", - "ALL_MEASURES", - "SCALAR", - "COMPONENT", - "DATAPOINT_ON_VD", - "DATAPOINT_ON_VAR", - "HIERARCHICAL_ON_VD", - "HIERARCHICAL_ON_VAR", - "SET", - "LANGUAGE", - "INTEGER_CONSTANT", - "NUMBER_CONSTANT", - "BOOLEAN_CONSTANT", - "STRING_CONSTANT", - "IDENTIFIER", - "WS", - "EOL", - "ML_COMMENT", - "SL_COMMENT", - ] - - ruleNames = [ - "LPAREN", - "RPAREN", - "QLPAREN", - "QRPAREN", - "GLPAREN", - "GRPAREN", - "EQ", - "LT", - "MT", - "ME", - "NEQ", - "LE", - "PLUS", - "MINUS", - "MUL", - "DIV", - "COMMA", - "POINTER", - "COLON", - "ASSIGN", - "MEMBERSHIP", - "EVAL", - "IF", - "CASE", - "THEN", - "ELSE", - "USING", - "WITH", - "CURRENT_DATE", - "DATEDIFF", - "DATEADD", - "YEAR_OP", - "MONTH_OP", - "DAYOFMONTH", - "DAYOFYEAR", - "DAYTOYEAR", - "DAYTOMONTH", - "YEARTODAY", - "MONTHTODAY", - "ON", - "DROP", - "KEEP", - "CALC", - "ATTRCALC", - "RENAME", - "AS", - "AND", - "OR", - "XOR", - "NOT", - "BETWEEN", - "IN", - "NOT_IN", - "NULL_CONSTANT", - "ISNULL", - "EX", - "UNION", - "DIFF", - "SYMDIFF", - "INTERSECT", - "RANDOM", - "KEYS", - "INTYEAR", - "INTMONTH", - "INTDAY", - "CHECK", - "EXISTS_IN", - "TO", - "RETURN", - "IMBALANCE", - "ERRORCODE", - "ALL", - "AGGREGATE", - "ERRORLEVEL", - "ORDER", - "BY", - "RANK", - "ASC", - "DESC", - "MIN", - "MAX", - "FIRST", - "LAST", - "INDEXOF", - "ABS", - "KEY", - "LN", - "LOG", - "TRUNC", - "ROUND", - "POWER", - "MOD", - "LEN", - "CONCAT", - "TRIM", - "UCASE", - "LCASE", - "SUBSTR", - "SUM", - "AVG", - "MEDIAN", - "COUNT", - "DIMENSION", - "MEASURE", - "ATTRIBUTE", - "FILTER", - "MERGE", - "EXP", - "ROLE", - "VIRAL", - "CHARSET_MATCH", - "TYPE", - "NVL", - "HIERARCHY", - "OPTIONAL", - "INVALID", - "VALUE_DOMAIN", - "VARIABLE", - "DATA", - "STRUCTURE", - "DATASET", - "OPERATOR", - "DEFINE", - "PUT_SYMBOL", - "DATAPOINT", - "HIERARCHICAL", - "RULESET", - "RULE", - "END", - "ALTER_DATASET", - "LTRIM", - "RTRIM", - "INSTR", - "REPLACE", - "CEIL", - "FLOOR", - "SQRT", - "ANY", - "SETDIFF", - "STDDEV_POP", - "STDDEV_SAMP", - "VAR_POP", - "VAR_SAMP", - "GROUP", - "EXCEPT", - "HAVING", - "FIRST_VALUE", - "LAST_VALUE", - "LAG", - "LEAD", - "RATIO_TO_REPORT", - "OVER", - "PRECEDING", - "FOLLOWING", - "UNBOUNDED", - "PARTITION", - "ROWS", - "RANGE", - "CURRENT", - "VALID", - "FILL_TIME_SERIES", - "FLOW_TO_STOCK", - "STOCK_TO_FLOW", - "TIMESHIFT", - "MEASURES", - "NO_MEASURES", - "CONDITION", - "BOOLEAN", - "DATE", - "TIME_PERIOD", - "NUMBER", - "STRING", - "TIME", - "INTEGER", - "FLOAT", - "LIST", - "RECORD", - "RESTRICT", - "YYYY", - "MM", - "DD", - "MAX_LENGTH", - "REGEXP", - "IS", - "WHEN", - "FROM", - "AGGREGATES", - "POINTS", - "POINT", - "TOTAL", - "PARTIAL", - "ALWAYS", - "INNER_JOIN", - "LEFT_JOIN", - "CROSS_JOIN", - "FULL_JOIN", - "MAPS_FROM", - "MAPS_TO", - "MAP_TO", - "MAP_FROM", - "RETURNS", - "PIVOT", - "CUSTOMPIVOT", - "UNPIVOT", - "SUBSPACE", - "APPLY", - "CONDITIONED", - "PERIOD_INDICATOR", - "SINGLE", - "DURATION", - "TIME_AGG", - "UNIT", - "VALUE", - "VALUEDOMAINS", - "VARIABLES", - "INPUT", - "OUTPUT", - "CAST", - "RULE_PRIORITY", - "DATASET_PRIORITY", - "DEFAULT", - "CHECK_DATAPOINT", - "CHECK_HIERARCHY", - "COMPUTED", - "NON_NULL", - "NON_ZERO", - "PARTIAL_NULL", - "PARTIAL_ZERO", - "ALWAYS_NULL", - "ALWAYS_ZERO", - "COMPONENTS", - "ALL_MEASURES", - "SCALAR", - "COMPONENT", - "DATAPOINT_ON_VD", - "DATAPOINT_ON_VAR", - "HIERARCHICAL_ON_VD", - "HIERARCHICAL_ON_VAR", - "SET", - "LANGUAGE", - "LETTER", - "DIGITS0_9", - "INTEGER_CONSTANT", - "NUMBER_CONSTANT", - "BOOLEAN_CONSTANT", - "STRING_CONSTANT", - "IDENTIFIER", - "WS", - "EOL", - "ML_COMMENT", - "SL_COMMENT", - ] - - grammarFileName = "Vtl.g4" - - def __init__(self, input=None, output: TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.9.3") - self._interp = LexerATNSimulator( - self, self.atn, self.decisionsToDFA, PredictionContextCache() - ) - self._actions = None - self._predicates = None diff --git a/src/vtlengine/AST/Grammar/parser.py b/src/vtlengine/AST/Grammar/parser.py deleted file mode 100644 index f73f1314b..000000000 --- a/src/vtlengine/AST/Grammar/parser.py +++ /dev/null @@ -1,16415 +0,0 @@ -# Generated from Vtl.g4 by ANTLR 4.9.3 -# encoding: utf-8 -import sys -from io import StringIO -from typing import Any, TextIO - -from antlr4 import * -from antlr4 import Parser as ANTLRParser -from antlr4.atn.ATN import ATN - - -def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u00fb") - buf.write("\u0763\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") - buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") - buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") - buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") - buf.write("\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36") - buf.write('\4\37\t\37\4 \t \4!\t!\4"\t"\4#\t#\4$\t$\4%\t%\4&\t') - buf.write("&\4'\t'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4") - buf.write("/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t\64") - buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t") - buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t") - buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\t") - buf.write("M\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT\4U\tU\4V\t") - buf.write("V\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4") - buf.write("_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4") - buf.write("h\th\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\3") - buf.write("\2\3\2\3\2\7\2\u00e4\n\2\f\2\16\2\u00e7\13\2\3\2\3\2\3") - buf.write("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\u00f4\n\3\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\6\4\u010b\n\4\r\4\16\4\u010c") - buf.write("\3\4\3\4\3\4\3\4\3\4\5\4\u0114\n\4\3\4\3\4\3\4\3\4\3\4") - buf.write("\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u0132\n\4\7") - buf.write("\4\u0134\n\4\f\4\16\4\u0137\13\4\3\5\3\5\3\5\3\5\3\5\3") - buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5") - buf.write("\3\5\3\5\6\5\u014e\n\5\r\5\16\5\u014f\3\5\3\5\3\5\3\5") - buf.write("\3\5\5\5\u0157\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5") - buf.write("\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5\u016d") - buf.write("\n\5\7\5\u016f\n\5\f\5\16\5\u0172\13\5\3\6\3\6\3\6\3\6") - buf.write("\3\6\3\6\3\6\3\6\5\6\u017c\n\6\3\7\3\7\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u018a\n\7\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\5\b\u0193\n\b\3\t\3\t\3\t\3\t\7\t\u0199\n") - buf.write("\t\f\t\16\t\u019c\13\t\3\n\3\n\3\n\3\n\5\n\u01a2\n\n\5") - buf.write("\n\u01a4\n\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\7\f\u01ad") - buf.write("\n\f\f\f\16\f\u01b0\13\f\3\r\3\r\3\r\3\r\7\r\u01b6\n\r") - buf.write("\f\r\16\r\u01b9\13\r\3\16\3\16\3\16\3\16\3\16\3\17\3\17") - buf.write("\3\17\3\17\3\17\3\17\3\17\3\17\7\17\u01c8\n\17\f\17\16") - buf.write("\17\u01cb\13\17\3\20\3\20\3\20\3\20\7\20\u01d1\n\20\f") - buf.write("\20\16\20\u01d4\13\20\3\21\3\21\3\21\3\21\3\21\3\21\3") - buf.write("\21\3\21\3\21\3\21\3\21\3\21\5\21\u01e2\n\21\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\7\22\u01eb\n\22\f\22\16\22\u01ee") - buf.write("\13\22\5\22\u01f0\n\22\3\22\3\22\3\22\5\22\u01f5\n\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0216") - buf.write("\n\22\3\23\3\23\3\23\3\23\3\23\7\23\u021d\n\23\f\23\16") - buf.write("\23\u0220\13\23\5\23\u0222\n\23\3\23\3\23\3\23\3\23\3") - buf.write("\23\3\23\3\23\3\23\5\23\u022c\n\23\3\23\3\23\3\23\5\23") - buf.write("\u0231\n\23\7\23\u0233\n\23\f\23\16\23\u0236\13\23\3\23") - buf.write("\3\23\3\23\5\23\u023b\n\23\3\23\3\23\5\23\u023f\n\23\3") - buf.write("\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0249\n\23") - buf.write("\3\23\3\23\5\23\u024d\n\23\3\23\3\23\5\23\u0251\n\23\3") - buf.write("\24\3\24\3\24\3\24\3\24\7\24\u0258\n\24\f\24\16\24\u025b") - buf.write("\13\24\5\24\u025d\n\24\3\24\3\24\3\24\3\24\3\24\3\24\3") - buf.write("\24\3\24\5\24\u0267\n\24\3\24\3\24\5\24\u026b\n\24\3\24") - buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0275\n\24\3") - buf.write("\24\3\24\3\24\5\24\u027a\n\24\7\24\u027c\n\24\f\24\16") - buf.write("\24\u027f\13\24\3\24\3\24\3\24\5\24\u0284\n\24\3\24\3") - buf.write("\24\5\24\u0288\n\24\3\24\3\24\5\24\u028c\n\24\3\25\3\25") - buf.write("\5\25\u0290\n\25\3\26\3\26\5\26\u0294\n\26\3\27\3\27\3") - buf.write("\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27") - buf.write("\3\27\5\27\u02a4\n\27\3\27\3\27\5\27\u02a8\n\27\3\27\3") - buf.write("\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u02b3\n\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u02be") - buf.write("\n\27\3\27\3\27\5\27\u02c2\n\27\3\27\3\27\5\27\u02c6\n") - buf.write("\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\5\30\u02d6\n\30\3\30\3\30\5\30\u02da") - buf.write("\n\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30") - buf.write("\u02e5\n\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3") - buf.write("\30\5\30\u02f0\n\30\3\30\3\30\5\30\u02f4\n\30\3\30\3\30") - buf.write("\5\30\u02f8\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3") - buf.write("\31\3\31\3\31\5\31\u0304\n\31\3\31\3\31\3\31\3\31\3\31") - buf.write("\3\31\3\31\3\31\3\31\5\31\u030f\n\31\3\32\3\32\3\32\3") - buf.write("\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u031b\n\32\3\32") - buf.write("\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u0326\n") - buf.write("\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33") - buf.write("\3\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u0344\n\33\3") - buf.write("\33\3\33\5\33\u0348\n\33\3\34\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\34\3\34\3\34\3\34\5\34\u035f\n\34\3\35\3\35\3\35\5") - buf.write("\35\u0364\n\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u036c") - buf.write("\n\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u0381") - buf.write("\n\35\3\35\3\35\5\35\u0385\n\35\3\35\3\35\5\35\u0389\n") - buf.write("\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u03c7\n\35\3\36\3") - buf.write("\36\3\36\5\36\u03cc\n\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\5\36\u03d4\n\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3") - buf.write("\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\5\36\u03e9\n\36\3\36\3\36\5\36\u03ed\n\36\3\36\3") - buf.write("\36\5\36\u03f1\n\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u042f") - buf.write("\n\36\3\37\3\37\3\37\3\37\3\37\6\37\u0436\n\37\r\37\16") - buf.write("\37\u0437\3\37\3\37\3\37\3\37\3\37\3\37\3\37\6\37\u0441") - buf.write("\n\37\r\37\16\37\u0442\3\37\3\37\3\37\3\37\3\37\3\37\3") - buf.write("\37\3\37\3\37\5\37\u044e\n\37\3 \3 \3 \3 \3 \3 \5 \u0456") - buf.write("\n \3 \3 \5 \u045a\n \3 \5 \u045d\n \3 \5 \u0460\n \3") - buf.write(" \5 \u0463\n \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u0470") - buf.write("\n!\f!\16!\u0473\13!\5!\u0475\n!\3!\5!\u0478\n!\3!\3!") - buf.write("\3!\3!\3!\3!\3!\3!\5!\u0482\n!\3!\3!\5!\u0486\n!\3!\5") - buf.write("!\u0489\n!\3!\5!\u048c\n!\3!\5!\u048f\n!\3!\3!\3!\3!\3") - buf.write("!\3!\5!\u0497\n!\3!\5!\u049a\n!\3!\5!\u049d\n!\3!\5!\u04a0") - buf.write('\n!\3!\3!\5!\u04a4\n!\3"\3"\3"\3"\3"\3"\3"\3#\3') - buf.write("#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\5$\u04bc\n$\3") - buf.write("%\3%\3%\3%\3%\5%\u04c3\n%\5%\u04c5\n%\3%\3%\3&\3&\3&\3") - buf.write("&\3&\3&\5&\u04cf\n&\3&\5&\u04d2\n&\3&\5&\u04d5\n&\3&\3") - buf.write("&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u04e1\n&\5&\u04e3\n&\3&\3") - buf.write("&\3&\5&\u04e8\n&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3") - buf.write("&\3&\5&\u04f8\n&\3'\3'\3'\3'\3'\3'\5'\u0500\n'") - buf.write("\3'\5'\u0503\n'\3'\5'\u0506\n'\3'\3'\3'\3'\3") - buf.write("'\3'\3'\3'\3'\5'\u0511\n'\5'\u0513\n'\3'\3'") - buf.write("\3'\5'\u0518\n'\3'\3'\3'\3'\3'\3'\3'\3'\3'") - buf.write("\3'\5'\u0524\n'\3'\3'\3'\3'\3'\3'\3'\3'\3'") - buf.write("\3'\3'\3'\3'\3'\5'\u0534\n'\3(\3(\3(\3(\3)\3)\3") - buf.write(")\7)\u053d\n)\f)\16)\u0540\13)\3*\5*\u0543\n*\3*\3*\3") - buf.write("*\3*\3+\5+\u054a\n+\3+\3+\3+\3+\3,\3,\3,\3,\3-\3-\3-\3") - buf.write("-\3-\3-\3-\3-\5-\u055c\n-\3-\3-\5-\u0560\n-\3.\3.\3.\7") - buf.write(".\u0565\n.\f.\16.\u0568\13.\3/\3/\3/\7/\u056d\n/\f/\16") - buf.write("/\u0570\13/\3/\3/\3/\3/\7/\u0576\n/\f/\16/\u0579\13/\5") - buf.write("/\u057b\n/\3\60\3\60\3\60\5\60\u0580\n\60\3\61\5\61\u0583") - buf.write("\n\61\3\61\3\61\3\61\5\61\u0588\n\61\3\61\5\61\u058b\n") - buf.write("\61\3\61\5\61\u058e\n\61\3\62\3\62\3\62\3\63\3\63\3\63") - buf.write("\3\63\3\63\7\63\u0598\n\63\f\63\16\63\u059b\13\63\3\64") - buf.write("\3\64\3\64\3\64\3\64\7\64\u05a2\n\64\f\64\16\64\u05a5") - buf.write("\13\64\3\65\3\65\5\65\u05a9\n\65\3\66\3\66\3\66\5\66\u05ae") - buf.write("\n\66\3\66\3\66\3\66\3\66\3\66\3\67\5\67\u05b6\n\67\3") - buf.write("\67\3\67\38\58\u05bb\n8\38\38\39\39\39\39\39\39\39\39") - buf.write("\39\39\39\39\39\59\u05cc\n9\3:\3:\3:\3:\3:\7:\u05d3\n") - buf.write(":\f:\16:\u05d6\13:\3:\3:\3:\3:\3:\5:\u05dd\n:\3:\5:\u05e0") - buf.write("\n:\3:\3:\3:\3:\3:\3:\3:\5:\u05e9\n:\3:\5:\u05ec\n:\5") - buf.write(":\u05ee\n:\3;\3;\3;\3<\3<\3<\3<\5<\u05f7\n<\3=\3=\3=\5") - buf.write("=\u05fc\n=\3>\3>\5>\u0600\n>\3?\3?\3?\3?\3?\5?\u0607\n") - buf.write("?\3@\3@\3@\5@\u060c\n@\3A\3A\5A\u0610\nA\3A\5A\u0613\n") - buf.write("A\3A\5A\u0616\nA\3A\5A\u0619\nA\3B\3B\3B\3B\3B\5B\u0620") - buf.write("\nB\3C\3C\3C\3C\3C\7C\u0627\nC\fC\16C\u062a\13C\3C\3C") - buf.write("\5C\u062e\nC\3D\3D\5D\u0632\nD\3E\3E\3E\3E\3E\5E\u0639") - buf.write("\nE\3F\3F\3F\3F\3F\3F\7F\u0641\nF\fF\16F\u0644\13F\3F") - buf.write("\3F\5F\u0648\nF\3F\3F\3F\3F\3F\7F\u064f\nF\fF\16F\u0652") - buf.write("\13F\3F\3F\5F\u0656\nF\5F\u0658\nF\3G\3G\3G\3G\3G\3G\3") - buf.write("G\3G\7G\u0662\nG\fG\16G\u0665\13G\3G\3G\5G\u0669\nG\3") - buf.write("G\5G\u066c\nG\3G\3G\3G\3G\3G\3G\3G\7G\u0675\nG\fG\16G") - buf.write("\u0678\13G\3G\3G\5G\u067c\nG\3G\3G\5G\u0680\nG\5G\u0682") - buf.write("\nG\3H\3H\3I\3I\3J\3J\3J\3J\7J\u068c\nJ\fJ\16J\u068f\13") - buf.write("J\3K\3K\3K\5K\u0694\nK\3L\3L\3L\7L\u0699\nL\fL\16L\u069c") - buf.write("\13L\3M\3M\5M\u06a0\nM\3M\3M\3M\3M\5M\u06a6\nM\3M\3M\5") - buf.write("M\u06aa\nM\3M\5M\u06ad\nM\3N\3N\3N\7N\u06b2\nN\fN\16N") - buf.write("\u06b5\13N\3O\3O\5O\u06b9\nO\3O\3O\5O\u06bd\nO\3O\5O\u06c0") - buf.write("\nO\3P\3P\3P\5P\u06c5\nP\3P\3P\3P\3Q\3Q\3Q\7Q\u06cd\n") - buf.write("Q\fQ\16Q\u06d0\13Q\3R\3R\3R\3R\5R\u06d6\nR\3R\3R\5R\u06da") - buf.write("\nR\3R\3R\7R\u06de\nR\fR\16R\u06e1\13R\3S\5S\u06e4\nS") - buf.write("\3S\3S\3S\3S\3S\5S\u06eb\nS\3T\3T\3T\5T\u06f0\nT\3U\3") - buf.write("U\3U\3U\3U\3U\3U\3U\7U\u06fa\nU\fU\16U\u06fd\13U\3U\3") - buf.write("U\5U\u0701\nU\3V\3V\3V\5V\u0706\nV\3W\3W\5W\u070a\nW\3") - buf.write("X\3X\3Y\3Y\3Z\3Z\3Z\3Z\7Z\u0714\nZ\fZ\16Z\u0717\13Z\3") - buf.write("[\3[\3\\\3\\\3\\\3]\3]\3^\3^\3_\3_\3`\3`\3a\3a\3b\3b\3") - buf.write("b\5b\u072b\nb\3c\3c\3c\3c\7c\u0731\nc\fc\16c\u0734\13") - buf.write("c\3c\3c\3d\3d\3d\3e\3e\3e\3f\3f\3g\3g\5g\u0742\ng\3h\3") - buf.write("h\5h\u0746\nh\3i\3i\3i\3i\3i\5i\u074d\ni\3j\3j\3j\3k\3") - buf.write("k\3l\3l\3m\3m\3n\3n\3n\3n\3n\5n\u075d\nn\3o\3o\3p\3p\3") - buf.write('p\2\4\6\bq\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 "$') - buf.write("&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|") - buf.write("~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090") - buf.write("\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2") - buf.write("\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4") - buf.write("\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6") - buf.write("\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8") - buf.write("\u00da\u00dc\u00de\2%\4\2\17\20\64\64\3\2\21\22\4\2\17") - buf.write("\20``\3\2\62\63\3\2\66\67\3\2+,\4\2\u00cc\u00cc\u00ce") - buf.write("\u00ce\3\2\u00c3\u00c4\3\2\u00c5\u00c6\5\2__ac\u0085\u0086") - buf.write("\6\2WWYYnn\u0089\u008b\3\2[\\\5\2??ZZ]^\4\2JJ\u00d3\u00d3") - buf.write("\3\2\u00a4\u00a5\4\2uu\u00f6\u00f6\3\2TU\4\2==\u008d\u008d") - buf.write("\4\2JJvv\5\2RSeh\u008e\u0091\6\2RSeh\u008e\u0091\u0095") - buf.write("\u0096\3\2\u0097\u0098\3\2PQ\3\2\17\20\4\2NN\u0093\u0093") - buf.write("\3\2wx\4\2\17\17\21\21\5\2JJvv\u00ea\u00ea\3\2\u00e3\u00e8") - buf.write("\4\2{{\u00de\u00de\5\2{{\u0082\u0082\u00dd\u00dd\4\2J") - buf.write("J\u00e2\u00e2\3\2\t\16\5\2\u00aa\u00b0\u00d4\u00d4\u00eb") - buf.write("\u00eb\4\2JJ\u00f5\u00f5\2\u0829\2\u00e5\3\2\2\2\4\u00f3") - buf.write("\3\2\2\2\6\u0113\3\2\2\2\b\u0156\3\2\2\2\n\u017b\3\2\2") - buf.write("\2\f\u0189\3\2\2\2\16\u0192\3\2\2\2\20\u0194\3\2\2\2\22") - buf.write("\u019d\3\2\2\2\24\u01a5\3\2\2\2\26\u01a8\3\2\2\2\30\u01b1") - buf.write("\3\2\2\2\32\u01ba\3\2\2\2\34\u01bf\3\2\2\2\36\u01cc\3") - buf.write('\2\2\2 \u01e1\3\2\2\2"\u0215\3\2\2\2$\u0250\3\2\2\2&') - buf.write("\u028b\3\2\2\2(\u028f\3\2\2\2*\u0293\3\2\2\2,\u02c5\3") - buf.write("\2\2\2.\u02f7\3\2\2\2\60\u030e\3\2\2\2\62\u0325\3\2\2") - buf.write("\2\64\u0347\3\2\2\2\66\u035e\3\2\2\28\u03c6\3\2\2\2:\u042e") - buf.write("\3\2\2\2<\u044d\3\2\2\2>\u044f\3\2\2\2@\u04a3\3\2\2\2") - buf.write("B\u04a5\3\2\2\2D\u04ac\3\2\2\2F\u04bb\3\2\2\2H\u04bd\3") - buf.write("\2\2\2J\u04f7\3\2\2\2L\u0533\3\2\2\2N\u0535\3\2\2\2P\u0539") - buf.write("\3\2\2\2R\u0542\3\2\2\2T\u0549\3\2\2\2V\u054f\3\2\2\2") - buf.write("X\u055f\3\2\2\2Z\u0561\3\2\2\2\\\u0569\3\2\2\2^\u057c") - buf.write("\3\2\2\2`\u0582\3\2\2\2b\u058f\3\2\2\2d\u0592\3\2\2\2") - buf.write("f\u059c\3\2\2\2h\u05a6\3\2\2\2j\u05ad\3\2\2\2l\u05b5\3") - buf.write("\2\2\2n\u05ba\3\2\2\2p\u05cb\3\2\2\2r\u05ed\3\2\2\2t\u05ef") - buf.write("\3\2\2\2v\u05f2\3\2\2\2x\u05fb\3\2\2\2z\u05ff\3\2\2\2") - buf.write("|\u0606\3\2\2\2~\u060b\3\2\2\2\u0080\u060f\3\2\2\2\u0082") - buf.write("\u061a\3\2\2\2\u0084\u0621\3\2\2\2\u0086\u0631\3\2\2\2") - buf.write("\u0088\u0633\3\2\2\2\u008a\u0657\3\2\2\2\u008c\u0681\3") - buf.write("\2\2\2\u008e\u0683\3\2\2\2\u0090\u0685\3\2\2\2\u0092\u0687") - buf.write("\3\2\2\2\u0094\u0690\3\2\2\2\u0096\u0695\3\2\2\2\u0098") - buf.write("\u069f\3\2\2\2\u009a\u06ae\3\2\2\2\u009c\u06b8\3\2\2\2") - buf.write("\u009e\u06c1\3\2\2\2\u00a0\u06c9\3\2\2\2\u00a2\u06d5\3") - buf.write("\2\2\2\u00a4\u06e3\3\2\2\2\u00a6\u06ef\3\2\2\2\u00a8\u0700") - buf.write("\3\2\2\2\u00aa\u0702\3\2\2\2\u00ac\u0707\3\2\2\2\u00ae") - buf.write("\u070b\3\2\2\2\u00b0\u070d\3\2\2\2\u00b2\u070f\3\2\2\2") - buf.write("\u00b4\u0718\3\2\2\2\u00b6\u071a\3\2\2\2\u00b8\u071d\3") - buf.write("\2\2\2\u00ba\u071f\3\2\2\2\u00bc\u0721\3\2\2\2\u00be\u0723") - buf.write("\3\2\2\2\u00c0\u0725\3\2\2\2\u00c2\u0727\3\2\2\2\u00c4") - buf.write("\u072c\3\2\2\2\u00c6\u0737\3\2\2\2\u00c8\u073a\3\2\2\2") - buf.write("\u00ca\u073d\3\2\2\2\u00cc\u0741\3\2\2\2\u00ce\u0745\3") - buf.write("\2\2\2\u00d0\u074c\3\2\2\2\u00d2\u074e\3\2\2\2\u00d4\u0751") - buf.write("\3\2\2\2\u00d6\u0753\3\2\2\2\u00d8\u0755\3\2\2\2\u00da") - buf.write("\u075c\3\2\2\2\u00dc\u075e\3\2\2\2\u00de\u0760\3\2\2\2") - buf.write("\u00e0\u00e1\5\4\3\2\u00e1\u00e2\7\u00f9\2\2\u00e2\u00e4") - buf.write("\3\2\2\2\u00e3\u00e0\3\2\2\2\u00e4\u00e7\3\2\2\2\u00e5") - buf.write("\u00e3\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e8\3\2\2\2") - buf.write("\u00e7\u00e5\3\2\2\2\u00e8\u00e9\7\2\2\3\u00e9\3\3\2\2") - buf.write("\2\u00ea\u00eb\5\u00be`\2\u00eb\u00ec\7\26\2\2\u00ec\u00ed") - buf.write("\5\6\4\2\u00ed\u00f4\3\2\2\2\u00ee\u00ef\5\u00be`\2\u00ef") - buf.write("\u00f0\7~\2\2\u00f0\u00f1\5\6\4\2\u00f1\u00f4\3\2\2\2") - buf.write('\u00f2\u00f4\5"\22\2\u00f3\u00ea\3\2\2\2\u00f3\u00ee') - buf.write("\3\2\2\2\u00f3\u00f2\3\2\2\2\u00f4\5\3\2\2\2\u00f5\u00f6") - buf.write("\b\4\1\2\u00f6\u00f7\7\3\2\2\u00f7\u00f8\5\6\4\2\u00f8") - buf.write("\u00f9\7\4\2\2\u00f9\u0114\3\2\2\2\u00fa\u0114\5\f\7\2") - buf.write("\u00fb\u00fc\t\2\2\2\u00fc\u0114\5\6\4\r\u00fd\u00fe\7") - buf.write("\31\2\2\u00fe\u00ff\5\6\4\2\u00ff\u0100\7\33\2\2\u0100") - buf.write("\u0101\5\6\4\2\u0101\u0102\7\34\2\2\u0102\u0103\5\6\4") - buf.write("\6\u0103\u0114\3\2\2\2\u0104\u010a\7\32\2\2\u0105\u0106") - buf.write("\7\u00bb\2\2\u0106\u0107\5\6\4\2\u0107\u0108\7\33\2\2") - buf.write("\u0108\u0109\5\6\4\2\u0109\u010b\3\2\2\2\u010a\u0105\3") - buf.write("\2\2\2\u010b\u010c\3\2\2\2\u010c\u010a\3\2\2\2\u010c\u010d") - buf.write("\3\2\2\2\u010d\u010e\3\2\2\2\u010e\u010f\7\34\2\2\u010f") - buf.write("\u0110\5\6\4\5\u0110\u0114\3\2\2\2\u0111\u0114\5\u00da") - buf.write("n\2\u0112\u0114\5\u00be`\2\u0113\u00f5\3\2\2\2\u0113\u00fa") - buf.write("\3\2\2\2\u0113\u00fb\3\2\2\2\u0113\u00fd\3\2\2\2\u0113") - buf.write("\u0104\3\2\2\2\u0113\u0111\3\2\2\2\u0113\u0112\3\2\2\2") - buf.write("\u0114\u0135\3\2\2\2\u0115\u0116\f\f\2\2\u0116\u0117\t") - buf.write("\3\2\2\u0117\u0134\5\6\4\r\u0118\u0119\f\13\2\2\u0119") - buf.write("\u011a\t\4\2\2\u011a\u0134\5\6\4\f\u011b\u011c\f\n\2\2") - buf.write("\u011c\u011d\5\u00caf\2\u011d\u011e\5\6\4\13\u011e\u0134") - buf.write("\3\2\2\2\u011f\u0120\f\b\2\2\u0120\u0121\7\61\2\2\u0121") - buf.write("\u0134\5\6\4\t\u0122\u0123\f\7\2\2\u0123\u0124\t\5\2\2") - buf.write("\u0124\u0134\5\6\4\b\u0125\u0126\f\17\2\2\u0126\u0127") - buf.write("\7\5\2\2\u0127\u0128\5\16\b\2\u0128\u0129\7\6\2\2\u0129") - buf.write("\u0134\3\2\2\2\u012a\u012b\f\16\2\2\u012b\u012c\7\27\2") - buf.write("\2\u012c\u0134\5\u00c0a\2\u012d\u012e\f\t\2\2\u012e\u0131") - buf.write("\t\6\2\2\u012f\u0132\5\u00c4c\2\u0130\u0132\5\u00d4k\2") - buf.write("\u0131\u012f\3\2\2\2\u0131\u0130\3\2\2\2\u0132\u0134\3") - buf.write("\2\2\2\u0133\u0115\3\2\2\2\u0133\u0118\3\2\2\2\u0133\u011b") - buf.write("\3\2\2\2\u0133\u011f\3\2\2\2\u0133\u0122\3\2\2\2\u0133") - buf.write("\u0125\3\2\2\2\u0133\u012a\3\2\2\2\u0133\u012d\3\2\2\2") - buf.write("\u0134\u0137\3\2\2\2\u0135\u0133\3\2\2\2\u0135\u0136\3") - buf.write("\2\2\2\u0136\7\3\2\2\2\u0137\u0135\3\2\2\2\u0138\u0139") - buf.write("\b\5\1\2\u0139\u013a\7\3\2\2\u013a\u013b\5\b\5\2\u013b") - buf.write("\u013c\7\4\2\2\u013c\u0157\3\2\2\2\u013d\u0157\5\n\6\2") - buf.write("\u013e\u013f\t\2\2\2\u013f\u0157\5\b\5\r\u0140\u0141\7") - buf.write("\31\2\2\u0141\u0142\5\b\5\2\u0142\u0143\7\33\2\2\u0143") - buf.write("\u0144\5\b\5\2\u0144\u0145\7\34\2\2\u0145\u0146\5\b\5") - buf.write("\6\u0146\u0157\3\2\2\2\u0147\u014d\7\32\2\2\u0148\u0149") - buf.write("\7\u00bb\2\2\u0149\u014a\5\b\5\2\u014a\u014b\7\33\2\2") - buf.write("\u014b\u014c\5\b\5\2\u014c\u014e\3\2\2\2\u014d\u0148\3") - buf.write("\2\2\2\u014e\u014f\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150") - buf.write("\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152\7\34\2\2\u0152") - buf.write("\u0153\5\b\5\5\u0153\u0157\3\2\2\2\u0154\u0157\5\u00da") - buf.write("n\2\u0155\u0157\5\u00c2b\2\u0156\u0138\3\2\2\2\u0156\u013d") - buf.write("\3\2\2\2\u0156\u013e\3\2\2\2\u0156\u0140\3\2\2\2\u0156") - buf.write("\u0147\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0155\3\2\2\2") - buf.write("\u0157\u0170\3\2\2\2\u0158\u0159\f\f\2\2\u0159\u015a\t") - buf.write("\3\2\2\u015a\u016f\5\b\5\r\u015b\u015c\f\13\2\2\u015c") - buf.write("\u015d\t\4\2\2\u015d\u016f\5\b\5\f\u015e\u015f\f\n\2\2") - buf.write("\u015f\u0160\5\u00caf\2\u0160\u0161\5\b\5\13\u0161\u016f") - buf.write("\3\2\2\2\u0162\u0163\f\b\2\2\u0163\u0164\7\61\2\2\u0164") - buf.write("\u016f\5\b\5\t\u0165\u0166\f\7\2\2\u0166\u0167\t\5\2\2") - buf.write("\u0167\u016f\5\b\5\b\u0168\u0169\f\t\2\2\u0169\u016c\t") - buf.write("\6\2\2\u016a\u016d\5\u00c4c\2\u016b\u016d\5\u00d4k\2\u016c") - buf.write("\u016a\3\2\2\2\u016c\u016b\3\2\2\2\u016d\u016f\3\2\2\2") - buf.write("\u016e\u0158\3\2\2\2\u016e\u015b\3\2\2\2\u016e\u015e\3") - buf.write("\2\2\2\u016e\u0162\3\2\2\2\u016e\u0165\3\2\2\2\u016e\u0168") - buf.write("\3\2\2\2\u016f\u0172\3\2\2\2\u0170\u016e\3\2\2\2\u0170") - buf.write("\u0171\3\2\2\2\u0171\t\3\2\2\2\u0172\u0170\3\2\2\2\u0173") - buf.write("\u017c\5&\24\2\u0174\u017c\5.\30\2\u0175\u017c\5\62\32") - buf.write("\2\u0176\u017c\5\66\34\2\u0177\u017c\5:\36\2\u0178\u017c") - buf.write("\5D#\2\u0179\u017c\5F$\2\u017a\u017c\5L'\2\u017b\u0173") - buf.write("\3\2\2\2\u017b\u0174\3\2\2\2\u017b\u0175\3\2\2\2\u017b") - buf.write("\u0176\3\2\2\2\u017b\u0177\3\2\2\2\u017b\u0178\3\2\2\2") - buf.write("\u017b\u0179\3\2\2\2\u017b\u017a\3\2\2\2\u017c\13\3\2") - buf.write("\2\2\u017d\u018a\5 \21\2\u017e\u018a\5$\23\2\u017f\u018a") - buf.write("\5,\27\2\u0180\u018a\5\60\31\2\u0181\u018a\5\64\33\2\u0182") - buf.write("\u018a\58\35\2\u0183\u018a\5<\37\2\u0184\u018a\5> \2\u0185") - buf.write('\u018a\5@!\2\u0186\u018a\5B"\2\u0187\u018a\5H%\2\u0188') - buf.write("\u018a\5J&\2\u0189\u017d\3\2\2\2\u0189\u017e\3\2\2\2\u0189") - buf.write("\u017f\3\2\2\2\u0189\u0180\3\2\2\2\u0189\u0181\3\2\2\2") - buf.write("\u0189\u0182\3\2\2\2\u0189\u0183\3\2\2\2\u0189\u0184\3") - buf.write("\2\2\2\u0189\u0185\3\2\2\2\u0189\u0186\3\2\2\2\u0189\u0187") - buf.write("\3\2\2\2\u0189\u0188\3\2\2\2\u018a\r\3\2\2\2\u018b\u0193") - buf.write("\5\20\t\2\u018c\u0193\5\22\n\2\u018d\u0193\5\24\13\2\u018e") - buf.write("\u0193\5\26\f\2\u018f\u0193\5\30\r\2\u0190\u0193\5\32") - buf.write("\16\2\u0191\u0193\5\36\20\2\u0192\u018b\3\2\2\2\u0192") - buf.write("\u018c\3\2\2\2\u0192\u018d\3\2\2\2\u0192\u018e\3\2\2\2") - buf.write("\u0192\u018f\3\2\2\2\u0192\u0190\3\2\2\2\u0192\u0191\3") - buf.write("\2\2\2\u0193\17\3\2\2\2\u0194\u0195\7/\2\2\u0195\u019a") - buf.write("\5N(\2\u0196\u0197\7\23\2\2\u0197\u0199\5N(\2\u0198\u0196") - buf.write("\3\2\2\2\u0199\u019c\3\2\2\2\u019a\u0198\3\2\2\2\u019a") - buf.write("\u019b\3\2\2\2\u019b\21\3\2\2\2\u019c\u019a\3\2\2\2\u019d") - buf.write("\u019e\7K\2\2\u019e\u01a3\5P)\2\u019f\u01a1\5r:\2\u01a0") - buf.write("\u01a2\5t;\2\u01a1\u01a0\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2") - buf.write("\u01a4\3\2\2\2\u01a3\u019f\3\2\2\2\u01a3\u01a4\3\2\2\2") - buf.write("\u01a4\23\3\2\2\2\u01a5\u01a6\7l\2\2\u01a6\u01a7\5\b\5") - buf.write("\2\u01a7\25\3\2\2\2\u01a8\u01a9\7-\2\2\u01a9\u01ae\5T") - buf.write("+\2\u01aa\u01ab\7\23\2\2\u01ab\u01ad\5T+\2\u01ac\u01aa") - buf.write("\3\2\2\2\u01ad\u01b0\3\2\2\2\u01ae\u01ac\3\2\2\2\u01ae") - buf.write("\u01af\3\2\2\2\u01af\27\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b1") - buf.write("\u01b2\t\7\2\2\u01b2\u01b7\5\u00c2b\2\u01b3\u01b4\7\23") - buf.write("\2\2\u01b4\u01b6\5\u00c2b\2\u01b5\u01b3\3\2\2\2\u01b6") - buf.write("\u01b9\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2") - buf.write("\u01b8\31\3\2\2\2\u01b9\u01b7\3\2\2\2\u01ba\u01bb\t\b") - buf.write("\2\2\u01bb\u01bc\5\u00c2b\2\u01bc\u01bd\7\23\2\2\u01bd") - buf.write("\u01be\5\u00c2b\2\u01be\33\3\2\2\2\u01bf\u01c0\7\u00cd") - buf.write("\2\2\u01c0\u01c1\5\u00c2b\2\u01c1\u01c2\7\23\2\2\u01c2") - buf.write("\u01c3\5\u00c2b\2\u01c3\u01c4\7\66\2\2\u01c4\u01c9\5\u00da") - buf.write("n\2\u01c5\u01c6\7\23\2\2\u01c6\u01c8\5\u00dan\2\u01c7") - buf.write("\u01c5\3\2\2\2\u01c8\u01cb\3\2\2\2\u01c9\u01c7\3\2\2\2") - buf.write("\u01c9\u01ca\3\2\2\2\u01ca\35\3\2\2\2\u01cb\u01c9\3\2") - buf.write("\2\2\u01cc\u01cd\7\u00cf\2\2\u01cd\u01d2\5V,\2\u01ce\u01cf") - buf.write("\7\23\2\2\u01cf\u01d1\5V,\2\u01d0\u01ce\3\2\2\2\u01d1") - buf.write("\u01d4\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d2\u01d3\3\2\2\2") - buf.write("\u01d3\37\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5\u01d6\t\t") - buf.write("\2\2\u01d6\u01d7\7\3\2\2\u01d7\u01d8\5\\/\2\u01d8\u01d9") - buf.write("\5`\61\2\u01d9\u01da\7\4\2\2\u01da\u01e2\3\2\2\2\u01db") - buf.write("\u01dc\t\n\2\2\u01dc\u01dd\7\3\2\2\u01dd\u01de\5Z.\2\u01de") - buf.write("\u01df\5`\61\2\u01df\u01e0\7\4\2\2\u01e0\u01e2\3\2\2\2") - buf.write("\u01e1\u01d5\3\2\2\2\u01e1\u01db\3\2\2\2\u01e2!\3\2\2") - buf.write("\2\u01e3\u01e4\7}\2\2\u01e4\u01e5\7|\2\2\u01e5\u01e6\5") - buf.write("\u00d6l\2\u01e6\u01ef\7\3\2\2\u01e7\u01ec\5v<\2\u01e8") - buf.write("\u01e9\7\23\2\2\u01e9\u01eb\5v<\2\u01ea\u01e8\3\2\2\2") - buf.write("\u01eb\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed\3") - buf.write("\2\2\2\u01ed\u01f0\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ef\u01e7") - buf.write("\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1") - buf.write("\u01f4\7\4\2\2\u01f2\u01f3\7\u00cb\2\2\u01f3\u01f5\5x") - buf.write("=\2\u01f4\u01f2\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f5\u01f6") - buf.write("\3\2\2\2\u01f6\u01f7\7\u00ba\2\2\u01f7\u01f8\5\6\4\2\u01f8") - buf.write("\u01f9\7\u0083\2\2\u01f9\u01fa\7|\2\2\u01fa\u0216\3\2") - buf.write("\2\2\u01fb\u01fc\7}\2\2\u01fc\u01fd\7\177\2\2\u01fd\u01fe") - buf.write("\7\u0081\2\2\u01fe\u01ff\5\u0090I\2\u01ff\u0200\7\3\2") - buf.write("\2\u0200\u0201\5\u0092J\2\u0201\u0202\7\4\2\2\u0202\u0203") - buf.write("\7\u00ba\2\2\u0203\u0204\5\u0096L\2\u0204\u0205\7\u0083") - buf.write("\2\2\u0205\u0206\7\177\2\2\u0206\u0207\7\u0081\2\2\u0207") - buf.write("\u0216\3\2\2\2\u0208\u0209\7}\2\2\u0209\u020a\7\u0080") - buf.write("\2\2\u020a\u020b\7\u0081\2\2\u020b\u020c\5\u0090I\2\u020c") - buf.write("\u020d\7\3\2\2\u020d\u020e\5\u009eP\2\u020e\u020f\7\4") - buf.write("\2\2\u020f\u0210\7\u00ba\2\2\u0210\u0211\5\u009aN\2\u0211") - buf.write("\u0212\7\u0083\2\2\u0212\u0213\7\u0080\2\2\u0213\u0214") - buf.write("\7\u0081\2\2\u0214\u0216\3\2\2\2\u0215\u01e3\3\2\2\2\u0215") - buf.write("\u01fb\3\2\2\2\u0215\u0208\3\2\2\2\u0216#\3\2\2\2\u0217") - buf.write("\u0218\5\u00d6l\2\u0218\u0221\7\3\2\2\u0219\u021e\5*\26") - buf.write("\2\u021a\u021b\7\23\2\2\u021b\u021d\5*\26\2\u021c\u021a") - buf.write("\3\2\2\2\u021d\u0220\3\2\2\2\u021e\u021c\3\2\2\2\u021e") - buf.write("\u021f\3\2\2\2\u021f\u0222\3\2\2\2\u0220\u021e\3\2\2\2") - buf.write("\u0221\u0219\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\3") - buf.write("\2\2\2\u0223\u0224\7\4\2\2\u0224\u0251\3\2\2\2\u0225\u0226") - buf.write("\7\30\2\2\u0226\u0227\7\3\2\2\u0227\u0228\5\u00d8m\2\u0228") - buf.write("\u022b\7\3\2\2\u0229\u022c\5\u00be`\2\u022a\u022c\5X-") - buf.write("\2\u022b\u0229\3\2\2\2\u022b\u022a\3\2\2\2\u022b\u022c") - buf.write("\3\2\2\2\u022c\u0234\3\2\2\2\u022d\u0230\7\23\2\2\u022e") - buf.write("\u0231\5\u00be`\2\u022f\u0231\5X-\2\u0230\u022e\3\2\2") - buf.write("\2\u0230\u022f\3\2\2\2\u0231\u0233\3\2\2\2\u0232\u022d") - buf.write("\3\2\2\2\u0233\u0236\3\2\2\2\u0234\u0232\3\2\2\2\u0234") - buf.write("\u0235\3\2\2\2\u0235\u0237\3\2\2\2\u0236\u0234\3\2\2\2") - buf.write("\u0237\u023a\7\4\2\2\u0238\u0239\7\u00f2\2\2\u0239\u023b") - buf.write("\7\u00f6\2\2\u023a\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b") - buf.write("\u023e\3\2\2\2\u023c\u023d\7\u00cb\2\2\u023d\u023f\5\u0086") - buf.write("D\2\u023e\u023c\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u0240") - buf.write("\3\2\2\2\u0240\u0241\7\4\2\2\u0241\u0251\3\2\2\2\u0242") - buf.write("\u0243\7\u00dc\2\2\u0243\u0244\7\3\2\2\u0244\u0245\5\6") - buf.write("\4\2\u0245\u0248\7\23\2\2\u0246\u0249\5\u00dco\2\u0247") - buf.write("\u0249\5\u008eH\2\u0248\u0246\3\2\2\2\u0248\u0247\3\2") - buf.write("\2\2\u0249\u024c\3\2\2\2\u024a\u024b\7\23\2\2\u024b\u024d") - buf.write("\7\u00f6\2\2\u024c\u024a\3\2\2\2\u024c\u024d\3\2\2\2\u024d") - buf.write("\u024e\3\2\2\2\u024e\u024f\7\4\2\2\u024f\u0251\3\2\2\2") - buf.write("\u0250\u0217\3\2\2\2\u0250\u0225\3\2\2\2\u0250\u0242\3") - buf.write("\2\2\2\u0251%\3\2\2\2\u0252\u0253\5\u00d6l\2\u0253\u025c") - buf.write("\7\3\2\2\u0254\u0259\5(\25\2\u0255\u0256\7\23\2\2\u0256") - buf.write("\u0258\5(\25\2\u0257\u0255\3\2\2\2\u0258\u025b\3\2\2\2") - buf.write("\u0259\u0257\3\2\2\2\u0259\u025a\3\2\2\2\u025a\u025d\3") - buf.write("\2\2\2\u025b\u0259\3\2\2\2\u025c\u0254\3\2\2\2\u025c\u025d") - buf.write("\3\2\2\2\u025d\u025e\3\2\2\2\u025e\u025f\7\4\2\2\u025f") - buf.write("\u028c\3\2\2\2\u0260\u0261\7\u00dc\2\2\u0261\u0262\7\3") - buf.write("\2\2\u0262\u0263\5\b\5\2\u0263\u0266\7\23\2\2\u0264\u0267") - buf.write("\5\u00dco\2\u0265\u0267\5\u008eH\2\u0266\u0264\3\2\2\2") - buf.write("\u0266\u0265\3\2\2\2\u0267\u026a\3\2\2\2\u0268\u0269\7") - buf.write("\23\2\2\u0269\u026b\7\u00f6\2\2\u026a\u0268\3\2\2\2\u026a") - buf.write("\u026b\3\2\2\2\u026b\u026c\3\2\2\2\u026c\u026d\7\4\2\2") - buf.write("\u026d\u028c\3\2\2\2\u026e\u026f\7\30\2\2\u026f\u0270") - buf.write("\7\3\2\2\u0270\u0271\5\u00d8m\2\u0271\u0274\7\3\2\2\u0272") - buf.write("\u0275\5\u00c2b\2\u0273\u0275\5X-\2\u0274\u0272\3\2\2") - buf.write("\2\u0274\u0273\3\2\2\2\u0274\u0275\3\2\2\2\u0275\u027d") - buf.write("\3\2\2\2\u0276\u0279\7\23\2\2\u0277\u027a\5\u00c2b\2\u0278") - buf.write("\u027a\5X-\2\u0279\u0277\3\2\2\2\u0279\u0278\3\2\2\2\u027a") - buf.write("\u027c\3\2\2\2\u027b\u0276\3\2\2\2\u027c\u027f\3\2\2\2") - buf.write("\u027d\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e\u0280\3") - buf.write("\2\2\2\u027f\u027d\3\2\2\2\u0280\u0283\7\4\2\2\u0281\u0282") - buf.write("\7\u00f2\2\2\u0282\u0284\7\u00f6\2\2\u0283\u0281\3\2\2") - buf.write("\2\u0283\u0284\3\2\2\2\u0284\u0287\3\2\2\2\u0285\u0286") - buf.write("\7\u00cb\2\2\u0286\u0288\5z>\2\u0287\u0285\3\2\2\2\u0287") - buf.write("\u0288\3\2\2\2\u0288\u0289\3\2\2\2\u0289\u028a\7\4\2\2") - buf.write("\u028a\u028c\3\2\2\2\u028b\u0252\3\2\2\2\u028b\u0260\3") - buf.write("\2\2\2\u028b\u026e\3\2\2\2\u028c'\3\2\2\2\u028d\u0290") - buf.write("\5\b\5\2\u028e\u0290\7u\2\2\u028f\u028d\3\2\2\2\u028f") - buf.write("\u028e\3\2\2\2\u0290)\3\2\2\2\u0291\u0294\5\6\4\2\u0292") - buf.write("\u0294\7u\2\2\u0293\u0291\3\2\2\2\u0293\u0292\3\2\2\2") - buf.write("\u0294+\3\2\2\2\u0295\u0296\t\13\2\2\u0296\u0297\7\3\2") - buf.write("\2\u0297\u0298\5\6\4\2\u0298\u0299\7\4\2\2\u0299\u02c6") - buf.write("\3\2\2\2\u029a\u029b\7d\2\2\u029b\u029c\7\3\2\2\u029c") - buf.write("\u02a7\5\6\4\2\u029d\u029e\7\23\2\2\u029e\u029f\5\u00cc") - buf.write("g\2\u029f\u02a0\3\2\2\2\u02a0\u02a1\7\23\2\2\u02a1\u02a2") - buf.write("\5\u00ccg\2\u02a2\u02a4\3\2\2\2\u02a3\u029d\3\2\2\2\u02a3") - buf.write("\u02a4\3\2\2\2\u02a4\u02a8\3\2\2\2\u02a5\u02a6\7\23\2") - buf.write("\2\u02a6\u02a8\5\u00ccg\2\u02a7\u02a3\3\2\2\2\u02a7\u02a5") - buf.write("\3\2\2\2\u02a8\u02a9\3\2\2\2\u02a9\u02aa\7\4\2\2\u02aa") - buf.write("\u02c6\3\2\2\2\u02ab\u02ac\7\u0088\2\2\u02ac\u02ad\7\3") - buf.write("\2\2\u02ad\u02ae\5\6\4\2\u02ae\u02af\7\23\2\2\u02af\u02b2") - buf.write("\5\6\4\2\u02b0\u02b1\7\23\2\2\u02b1\u02b3\5\u00ccg\2\u02b2") - buf.write("\u02b0\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b4\3\2\2\2") - buf.write("\u02b4\u02b5\7\4\2\2\u02b5\u02c6\3\2\2\2\u02b6\u02b7\7") - buf.write("\u0087\2\2\u02b7\u02b8\7\3\2\2\u02b8\u02b9\5\6\4\2\u02b9") - buf.write("\u02ba\7\23\2\2\u02ba\u02bd\5\6\4\2\u02bb\u02bc\7\23\2") - buf.write("\2\u02bc\u02be\5\u00ccg\2\u02bd\u02bb\3\2\2\2\u02bd\u02be") - buf.write("\3\2\2\2\u02be\u02c1\3\2\2\2\u02bf\u02c0\7\23\2\2\u02c0") - buf.write("\u02c2\5\u00ccg\2\u02c1\u02bf\3\2\2\2\u02c1\u02c2\3\2") - buf.write("\2\2\u02c2\u02c3\3\2\2\2\u02c3\u02c4\7\4\2\2\u02c4\u02c6") - buf.write("\3\2\2\2\u02c5\u0295\3\2\2\2\u02c5\u029a\3\2\2\2\u02c5") - buf.write("\u02ab\3\2\2\2\u02c5\u02b6\3\2\2\2\u02c6-\3\2\2\2\u02c7") - buf.write("\u02c8\t\13\2\2\u02c8\u02c9\7\3\2\2\u02c9\u02ca\5\b\5") - buf.write("\2\u02ca\u02cb\7\4\2\2\u02cb\u02f8\3\2\2\2\u02cc\u02cd") - buf.write("\7d\2\2\u02cd\u02ce\7\3\2\2\u02ce\u02d9\5\b\5\2\u02cf") - buf.write("\u02d0\7\23\2\2\u02d0\u02d1\5\u00ceh\2\u02d1\u02d2\3\2") - buf.write("\2\2\u02d2\u02d3\7\23\2\2\u02d3\u02d4\5\u00ceh\2\u02d4") - buf.write("\u02d6\3\2\2\2\u02d5\u02cf\3\2\2\2\u02d5\u02d6\3\2\2\2") - buf.write("\u02d6\u02da\3\2\2\2\u02d7\u02d8\7\23\2\2\u02d8\u02da") - buf.write("\5\u00ceh\2\u02d9\u02d5\3\2\2\2\u02d9\u02d7\3\2\2\2\u02da") - buf.write("\u02db\3\2\2\2\u02db\u02dc\7\4\2\2\u02dc\u02f8\3\2\2\2") - buf.write("\u02dd\u02de\7\u0088\2\2\u02de\u02df\7\3\2\2\u02df\u02e0") - buf.write("\5\b\5\2\u02e0\u02e1\7\23\2\2\u02e1\u02e4\5\b\5\2\u02e2") - buf.write("\u02e3\7\23\2\2\u02e3\u02e5\5\u00ceh\2\u02e4\u02e2\3\2") - buf.write("\2\2\u02e4\u02e5\3\2\2\2\u02e5\u02e6\3\2\2\2\u02e6\u02e7") - buf.write("\7\4\2\2\u02e7\u02f8\3\2\2\2\u02e8\u02e9\7\u0087\2\2\u02e9") - buf.write("\u02ea\7\3\2\2\u02ea\u02eb\5\b\5\2\u02eb\u02ec\7\23\2") - buf.write("\2\u02ec\u02ef\5\b\5\2\u02ed\u02ee\7\23\2\2\u02ee\u02f0") - buf.write("\5\u00ceh\2\u02ef\u02ed\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0") - buf.write("\u02f3\3\2\2\2\u02f1\u02f2\7\23\2\2\u02f2\u02f4\5\u00ce") - buf.write("h\2\u02f3\u02f1\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f5") - buf.write("\3\2\2\2\u02f5\u02f6\7\4\2\2\u02f6\u02f8\3\2\2\2\u02f7") - buf.write("\u02c7\3\2\2\2\u02f7\u02cc\3\2\2\2\u02f7\u02dd\3\2\2\2") - buf.write("\u02f7\u02e8\3\2\2\2\u02f8/\3\2\2\2\u02f9\u02fa\t\f\2") - buf.write("\2\u02fa\u02fb\7\3\2\2\u02fb\u02fc\5\6\4\2\u02fc\u02fd") - buf.write("\7\4\2\2\u02fd\u030f\3\2\2\2\u02fe\u02ff\t\r\2\2\u02ff") - buf.write("\u0300\7\3\2\2\u0300\u0303\5\6\4\2\u0301\u0302\7\23\2") - buf.write("\2\u0302\u0304\5\u00ccg\2\u0303\u0301\3\2\2\2\u0303\u0304") - buf.write("\3\2\2\2\u0304\u0305\3\2\2\2\u0305\u0306\7\4\2\2\u0306") - buf.write("\u030f\3\2\2\2\u0307\u0308\t\16\2\2\u0308\u0309\7\3\2") - buf.write("\2\u0309\u030a\5\6\4\2\u030a\u030b\7\23\2\2\u030b\u030c") - buf.write("\5\6\4\2\u030c\u030d\7\4\2\2\u030d\u030f\3\2\2\2\u030e") - buf.write("\u02f9\3\2\2\2\u030e\u02fe\3\2\2\2\u030e\u0307\3\2\2\2") - buf.write("\u030f\61\3\2\2\2\u0310\u0311\t\f\2\2\u0311\u0312\7\3") - buf.write("\2\2\u0312\u0313\5\b\5\2\u0313\u0314\7\4\2\2\u0314\u0326") - buf.write("\3\2\2\2\u0315\u0316\t\r\2\2\u0316\u0317\7\3\2\2\u0317") - buf.write("\u031a\5\b\5\2\u0318\u0319\7\23\2\2\u0319\u031b\5\u00ce") - buf.write("h\2\u031a\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031b\u031c") - buf.write("\3\2\2\2\u031c\u031d\7\4\2\2\u031d\u0326\3\2\2\2\u031e") - buf.write("\u031f\t\16\2\2\u031f\u0320\7\3\2\2\u0320\u0321\5\b\5") - buf.write("\2\u0321\u0322\7\23\2\2\u0322\u0323\5\b\5\2\u0323\u0324") - buf.write("\7\4\2\2\u0324\u0326\3\2\2\2\u0325\u0310\3\2\2\2\u0325") - buf.write("\u0315\3\2\2\2\u0325\u031e\3\2\2\2\u0326\63\3\2\2\2\u0327") - buf.write("\u0328\7\65\2\2\u0328\u0329\7\3\2\2\u0329\u032a\5\6\4") - buf.write("\2\u032a\u032b\7\23\2\2\u032b\u032c\5\6\4\2\u032c\u032d") - buf.write("\7\23\2\2\u032d\u032e\5\6\4\2\u032e\u032f\7\4\2\2\u032f") - buf.write("\u0348\3\2\2\2\u0330\u0331\7q\2\2\u0331\u0332\7\3\2\2") - buf.write("\u0332\u0333\5\6\4\2\u0333\u0334\7\23\2\2\u0334\u0335") - buf.write("\5\6\4\2\u0335\u0336\7\4\2\2\u0336\u0348\3\2\2\2\u0337") - buf.write("\u0338\79\2\2\u0338\u0339\7\3\2\2\u0339\u033a\5\6\4\2") - buf.write("\u033a\u033b\7\4\2\2\u033b\u0348\3\2\2\2\u033c\u033d\7") - buf.write("E\2\2\u033d\u033e\7\3\2\2\u033e\u033f\5\6\4\2\u033f\u0340") - buf.write("\7\23\2\2\u0340\u0343\5\6\4\2\u0341\u0342\7\23\2\2\u0342") - buf.write("\u0344\5\u00dep\2\u0343\u0341\3\2\2\2\u0343\u0344\3\2") - buf.write("\2\2\u0344\u0345\3\2\2\2\u0345\u0346\7\4\2\2\u0346\u0348") - buf.write("\3\2\2\2\u0347\u0327\3\2\2\2\u0347\u0330\3\2\2\2\u0347") - buf.write("\u0337\3\2\2\2\u0347\u033c\3\2\2\2\u0348\65\3\2\2\2\u0349") - buf.write("\u034a\7\65\2\2\u034a\u034b\7\3\2\2\u034b\u034c\5\b\5") - buf.write("\2\u034c\u034d\7\23\2\2\u034d\u034e\5\b\5\2\u034e\u034f") - buf.write("\7\23\2\2\u034f\u0350\5\b\5\2\u0350\u0351\7\4\2\2\u0351") - buf.write("\u035f\3\2\2\2\u0352\u0353\7q\2\2\u0353\u0354\7\3\2\2") - buf.write("\u0354\u0355\5\b\5\2\u0355\u0356\7\23\2\2\u0356\u0357") - buf.write("\5\b\5\2\u0357\u0358\7\4\2\2\u0358\u035f\3\2\2\2\u0359") - buf.write("\u035a\79\2\2\u035a\u035b\7\3\2\2\u035b\u035c\5\b\5\2") - buf.write("\u035c\u035d\7\4\2\2\u035d\u035f\3\2\2\2\u035e\u0349\3") - buf.write("\2\2\2\u035e\u0352\3\2\2\2\u035e\u0359\3\2\2\2\u035f\67") - buf.write("\3\2\2\2\u0360\u0361\7\u00d2\2\2\u0361\u0363\7\3\2\2\u0362") - buf.write("\u0364\5\6\4\2\u0363\u0362\3\2\2\2\u0363\u0364\3\2\2\2") - buf.write("\u0364\u0365\3\2\2\2\u0365\u03c7\7\4\2\2\u0366\u0367\7") - buf.write("\u00a3\2\2\u0367\u0368\7\3\2\2\u0368\u036b\5\6\4\2\u0369") - buf.write("\u036a\7\23\2\2\u036a\u036c\t\17\2\2\u036b\u0369\3\2\2") - buf.write("\2\u036b\u036c\3\2\2\2\u036c\u036d\3\2\2\2\u036d\u036e") - buf.write("\7\4\2\2\u036e\u03c7\3\2\2\2\u036f\u0370\t\20\2\2\u0370") - buf.write("\u0371\7\3\2\2\u0371\u0372\5\6\4\2\u0372\u0373\7\4\2\2") - buf.write("\u0373\u03c7\3\2\2\2\u0374\u0375\7\u00a6\2\2\u0375\u0376") - buf.write("\7\3\2\2\u0376\u0377\5\6\4\2\u0377\u0378\7\23\2\2\u0378") - buf.write("\u0379\5l\67\2\u0379\u037a\7\4\2\2\u037a\u03c7\3\2\2\2") - buf.write("\u037b\u037c\7\u00d5\2\2\u037c\u037d\7\3\2\2\u037d\u0380") - buf.write("\7\u00f6\2\2\u037e\u037f\7\23\2\2\u037f\u0381\t\21\2\2") - buf.write("\u0380\u037e\3\2\2\2\u0380\u0381\3\2\2\2\u0381\u0384\3") - buf.write("\2\2\2\u0382\u0383\7\23\2\2\u0383\u0385\5\u00ccg\2\u0384") - buf.write("\u0382\3\2\2\2\u0384\u0385\3\2\2\2\u0385\u0388\3\2\2\2") - buf.write("\u0386\u0387\7\23\2\2\u0387\u0389\t\22\2\2\u0388\u0386") - buf.write("\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038a\3\2\2\2\u038a") - buf.write("\u03c7\7\4\2\2\u038b\u038c\7\37\2\2\u038c\u038d\7\3\2") - buf.write("\2\u038d\u03c7\7\4\2\2\u038e\u038f\7 \2\2\u038f\u0390") - buf.write("\7\3\2\2\u0390\u0391\5\6\4\2\u0391\u0392\7\23\2\2\u0392") - buf.write("\u0393\5\6\4\2\u0393\u0394\7\4\2\2\u0394\u03c7\3\2\2\2") - buf.write("\u0395\u0396\7!\2\2\u0396\u0397\7\3\2\2\u0397\u0398\5") - buf.write("\6\4\2\u0398\u0399\7\23\2\2\u0399\u039a\5\6\4\2\u039a") - buf.write("\u039b\7\23\2\2\u039b\u039c\5\6\4\2\u039c\u039d\7\4\2") - buf.write('\2\u039d\u03c7\3\2\2\2\u039e\u039f\7"\2\2\u039f\u03a0') - buf.write("\7\3\2\2\u03a0\u03a1\5\6\4\2\u03a1\u03a2\7\4\2\2\u03a2") - buf.write("\u03c7\3\2\2\2\u03a3\u03a4\7#\2\2\u03a4\u03a5\7\3\2\2") - buf.write("\u03a5\u03a6\5\6\4\2\u03a6\u03a7\7\4\2\2\u03a7\u03c7\3") - buf.write("\2\2\2\u03a8\u03a9\7$\2\2\u03a9\u03aa\7\3\2\2\u03aa\u03ab") - buf.write("\5\6\4\2\u03ab\u03ac\7\4\2\2\u03ac\u03c7\3\2\2\2\u03ad") - buf.write("\u03ae\7%\2\2\u03ae\u03af\7\3\2\2\u03af\u03b0\5\6\4\2") - buf.write("\u03b0\u03b1\7\4\2\2\u03b1\u03c7\3\2\2\2\u03b2\u03b3\7") - buf.write("&\2\2\u03b3\u03b4\7\3\2\2\u03b4\u03b5\5\6\4\2\u03b5\u03b6") - buf.write("\7\4\2\2\u03b6\u03c7\3\2\2\2\u03b7\u03b8\7'\2\2\u03b8") - buf.write("\u03b9\7\3\2\2\u03b9\u03ba\5\6\4\2\u03ba\u03bb\7\4\2\2") - buf.write("\u03bb\u03c7\3\2\2\2\u03bc\u03bd\7(\2\2\u03bd\u03be\7") - buf.write("\3\2\2\u03be\u03bf\5\6\4\2\u03bf\u03c0\7\4\2\2\u03c0\u03c7") - buf.write("\3\2\2\2\u03c1\u03c2\7)\2\2\u03c2\u03c3\7\3\2\2\u03c3") - buf.write("\u03c4\5\6\4\2\u03c4\u03c5\7\4\2\2\u03c5\u03c7\3\2\2\2") - buf.write("\u03c6\u0360\3\2\2\2\u03c6\u0366\3\2\2\2\u03c6\u036f\3") - buf.write("\2\2\2\u03c6\u0374\3\2\2\2\u03c6\u037b\3\2\2\2\u03c6\u038b") - buf.write("\3\2\2\2\u03c6\u038e\3\2\2\2\u03c6\u0395\3\2\2\2\u03c6") - buf.write("\u039e\3\2\2\2\u03c6\u03a3\3\2\2\2\u03c6\u03a8\3\2\2\2") - buf.write("\u03c6\u03ad\3\2\2\2\u03c6\u03b2\3\2\2\2\u03c6\u03b7\3") - buf.write("\2\2\2\u03c6\u03bc\3\2\2\2\u03c6\u03c1\3\2\2\2\u03c79") - buf.write("\3\2\2\2\u03c8\u03c9\7\u00d2\2\2\u03c9\u03cb\7\3\2\2\u03ca") - buf.write("\u03cc\5\b\5\2\u03cb\u03ca\3\2\2\2\u03cb\u03cc\3\2\2\2") - buf.write("\u03cc\u03cd\3\2\2\2\u03cd\u042f\7\4\2\2\u03ce\u03cf\7") - buf.write("\u00a3\2\2\u03cf\u03d0\7\3\2\2\u03d0\u03d3\5\b\5\2\u03d1") - buf.write("\u03d2\7\23\2\2\u03d2\u03d4\t\17\2\2\u03d3\u03d1\3\2\2") - buf.write("\2\u03d3\u03d4\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5\u03d6") - buf.write("\7\4\2\2\u03d6\u042f\3\2\2\2\u03d7\u03d8\t\20\2\2\u03d8") - buf.write("\u03d9\7\3\2\2\u03d9\u03da\5\b\5\2\u03da\u03db\7\4\2\2") - buf.write("\u03db\u042f\3\2\2\2\u03dc\u03dd\7\u00a6\2\2\u03dd\u03de") - buf.write("\7\3\2\2\u03de\u03df\5\b\5\2\u03df\u03e0\7\23\2\2\u03e0") - buf.write("\u03e1\5l\67\2\u03e1\u03e2\7\4\2\2\u03e2\u042f\3\2\2\2") - buf.write("\u03e3\u03e4\7\u00d5\2\2\u03e4\u03e5\7\3\2\2\u03e5\u03e8") - buf.write("\7\u00f6\2\2\u03e6\u03e7\7\23\2\2\u03e7\u03e9\t\21\2\2") - buf.write("\u03e8\u03e6\3\2\2\2\u03e8\u03e9\3\2\2\2\u03e9\u03ec\3") - buf.write("\2\2\2\u03ea\u03eb\7\23\2\2\u03eb\u03ed\5\u00ceh\2\u03ec") - buf.write("\u03ea\3\2\2\2\u03ec\u03ed\3\2\2\2\u03ed\u03f0\3\2\2\2") - buf.write("\u03ee\u03ef\7\23\2\2\u03ef\u03f1\t\22\2\2\u03f0\u03ee") - buf.write("\3\2\2\2\u03f0\u03f1\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2") - buf.write("\u042f\7\4\2\2\u03f3\u03f4\7\37\2\2\u03f4\u03f5\7\3\2") - buf.write("\2\u03f5\u042f\7\4\2\2\u03f6\u03f7\7 \2\2\u03f7\u03f8") - buf.write("\7\3\2\2\u03f8\u03f9\5\b\5\2\u03f9\u03fa\7\23\2\2\u03fa") - buf.write("\u03fb\5\6\4\2\u03fb\u03fc\7\4\2\2\u03fc\u042f\3\2\2\2") - buf.write("\u03fd\u03fe\7!\2\2\u03fe\u03ff\7\3\2\2\u03ff\u0400\5") - buf.write("\b\5\2\u0400\u0401\7\23\2\2\u0401\u0402\5\b\5\2\u0402") - buf.write("\u0403\7\23\2\2\u0403\u0404\5\b\5\2\u0404\u0405\7\4\2") - buf.write('\2\u0405\u042f\3\2\2\2\u0406\u0407\7"\2\2\u0407\u0408') - buf.write("\7\3\2\2\u0408\u0409\5\b\5\2\u0409\u040a\7\4\2\2\u040a") - buf.write("\u042f\3\2\2\2\u040b\u040c\7#\2\2\u040c\u040d\7\3\2\2") - buf.write("\u040d\u040e\5\b\5\2\u040e\u040f\7\4\2\2\u040f\u042f\3") - buf.write("\2\2\2\u0410\u0411\7$\2\2\u0411\u0412\7\3\2\2\u0412\u0413") - buf.write("\5\b\5\2\u0413\u0414\7\4\2\2\u0414\u042f\3\2\2\2\u0415") - buf.write("\u0416\7%\2\2\u0416\u0417\7\3\2\2\u0417\u0418\5\b\5\2") - buf.write("\u0418\u0419\7\4\2\2\u0419\u042f\3\2\2\2\u041a\u041b\7") - buf.write("&\2\2\u041b\u041c\7\3\2\2\u041c\u041d\5\b\5\2\u041d\u041e") - buf.write("\7\4\2\2\u041e\u042f\3\2\2\2\u041f\u0420\7'\2\2\u0420") - buf.write("\u0421\7\3\2\2\u0421\u0422\5\b\5\2\u0422\u0423\7\4\2\2") - buf.write("\u0423\u042f\3\2\2\2\u0424\u0425\7(\2\2\u0425\u0426\7") - buf.write("\3\2\2\u0426\u0427\5\b\5\2\u0427\u0428\7\4\2\2\u0428\u042f") - buf.write("\3\2\2\2\u0429\u042a\7)\2\2\u042a\u042b\7\3\2\2\u042b") - buf.write("\u042c\5\b\5\2\u042c\u042d\7\4\2\2\u042d\u042f\3\2\2\2") - buf.write("\u042e\u03c8\3\2\2\2\u042e\u03ce\3\2\2\2\u042e\u03d7\3") - buf.write("\2\2\2\u042e\u03dc\3\2\2\2\u042e\u03e3\3\2\2\2\u042e\u03f3") - buf.write("\3\2\2\2\u042e\u03f6\3\2\2\2\u042e\u03fd\3\2\2\2\u042e") - buf.write("\u0406\3\2\2\2\u042e\u040b\3\2\2\2\u042e\u0410\3\2\2\2") - buf.write("\u042e\u0415\3\2\2\2\u042e\u041a\3\2\2\2\u042e\u041f\3") - buf.write("\2\2\2\u042e\u0424\3\2\2\2\u042e\u0429\3\2\2\2\u042f;") - buf.write("\3\2\2\2\u0430\u0431\7;\2\2\u0431\u0432\7\3\2\2\u0432") - buf.write("\u0435\5\6\4\2\u0433\u0434\7\23\2\2\u0434\u0436\5\6\4") - buf.write("\2\u0435\u0433\3\2\2\2\u0436\u0437\3\2\2\2\u0437\u0435") - buf.write("\3\2\2\2\u0437\u0438\3\2\2\2\u0438\u0439\3\2\2\2\u0439") - buf.write("\u043a\7\4\2\2\u043a\u044e\3\2\2\2\u043b\u043c\7>\2\2") - buf.write("\u043c\u043d\7\3\2\2\u043d\u0440\5\6\4\2\u043e\u043f\7") - buf.write("\23\2\2\u043f\u0441\5\6\4\2\u0440\u043e\3\2\2\2\u0441") - buf.write("\u0442\3\2\2\2\u0442\u0440\3\2\2\2\u0442\u0443\3\2\2\2") - buf.write("\u0443\u0444\3\2\2\2\u0444\u0445\7\4\2\2\u0445\u044e\3") - buf.write("\2\2\2\u0446\u0447\t\23\2\2\u0447\u0448\7\3\2\2\u0448") - buf.write("\u0449\5\6\4\2\u0449\u044a\7\23\2\2\u044a\u044b\5\6\4") - buf.write("\2\u044b\u044c\7\4\2\2\u044c\u044e\3\2\2\2\u044d\u0430") - buf.write("\3\2\2\2\u044d\u043b\3\2\2\2\u044d\u0446\3\2\2\2\u044e") - buf.write("=\3\2\2\2\u044f\u0450\7t\2\2\u0450\u0451\7\3\2\2\u0451") - buf.write("\u0452\5\6\4\2\u0452\u0453\7\23\2\2\u0453\u0455\7\u00f7") - buf.write("\2\2\u0454\u0456\5\u00b2Z\2\u0455\u0454\3\2\2\2\u0455") - buf.write("\u0456\3\2\2\2\u0456\u0459\3\2\2\2\u0457\u0458\7\u0082") - buf.write("\2\2\u0458\u045a\5\u00c2b\2\u0459\u0457\3\2\2\2\u0459") - buf.write("\u045a\3\2\2\2\u045a\u045c\3\2\2\2\u045b\u045d\5\u00b0") - buf.write("Y\2\u045c\u045b\3\2\2\2\u045c\u045d\3\2\2\2\u045d\u045f") - buf.write("\3\2\2\2\u045e\u0460\5\u00b8]\2\u045f\u045e\3\2\2\2\u045f") - buf.write("\u0460\3\2\2\2\u0460\u0462\3\2\2\2\u0461\u0463\5\u00ba") - buf.write("^\2\u0462\u0461\3\2\2\2\u0462\u0463\3\2\2\2\u0463\u0464") - buf.write("\3\2\2\2\u0464\u0465\7\4\2\2\u0465?\3\2\2\2\u0466\u0467") - buf.write("\7\u00e0\2\2\u0467\u0468\7\3\2\2\u0468\u0469\5\6\4\2\u0469") - buf.write("\u046a\7\23\2\2\u046a\u0474\7\u00f7\2\2\u046b\u046c\7") - buf.write("\u00e9\2\2\u046c\u0471\5\u00c2b\2\u046d\u046e\7\23\2\2") - buf.write("\u046e\u0470\5\u00c2b\2\u046f\u046d\3\2\2\2\u0470\u0473") - buf.write("\3\2\2\2\u0471\u046f\3\2\2\2\u0471\u0472\3\2\2\2\u0472") - buf.write("\u0475\3\2\2\2\u0473\u0471\3\2\2\2\u0474\u046b\3\2\2\2") - buf.write("\u0474\u0475\3\2\2\2\u0475\u0477\3\2\2\2\u0476\u0478\5") - buf.write("\u00aeX\2\u0477\u0476\3\2\2\2\u0477\u0478\3\2\2\2\u0478") - buf.write("\u0479\3\2\2\2\u0479\u047a\7\4\2\2\u047a\u04a4\3\2\2\2") - buf.write("\u047b\u047c\7\u00e1\2\2\u047c\u047d\7\3\2\2\u047d\u047e") - buf.write("\5\6\4\2\u047e\u047f\7\23\2\2\u047f\u0481\7\u00f7\2\2") - buf.write("\u0480\u0482\5\u00b2Z\2\u0481\u0480\3\2\2\2\u0481\u0482") - buf.write("\3\2\2\2\u0482\u0485\3\2\2\2\u0483\u0484\7\u0082\2\2\u0484") - buf.write("\u0486\5\u00c2b\2\u0485\u0483\3\2\2\2\u0485\u0486\3\2") - buf.write("\2\2\u0486\u0488\3\2\2\2\u0487\u0489\5\u00b0Y\2\u0488") - buf.write("\u0487\3\2\2\2\u0488\u0489\3\2\2\2\u0489\u048b\3\2\2\2") - buf.write("\u048a\u048c\5\u00b4[\2\u048b\u048a\3\2\2\2\u048b\u048c") - buf.write("\3\2\2\2\u048c\u048e\3\2\2\2\u048d\u048f\5\u00aeX\2\u048e") - buf.write("\u048d\3\2\2\2\u048e\u048f\3\2\2\2\u048f\u0490\3\2\2\2") - buf.write("\u0490\u0491\7\4\2\2\u0491\u04a4\3\2\2\2\u0492\u0493\7") - buf.write("D\2\2\u0493\u0494\7\3\2\2\u0494\u0496\5\6\4\2\u0495\u0497") - buf.write("\5\u00c6d\2\u0496\u0495\3\2\2\2\u0496\u0497\3\2\2\2\u0497") - buf.write("\u0499\3\2\2\2\u0498\u049a\5\u00c8e\2\u0499\u0498\3\2") - buf.write("\2\2\u0499\u049a\3\2\2\2\u049a\u049c\3\2\2\2\u049b\u049d") - buf.write("\5\u00b6\\\2\u049c\u049b\3\2\2\2\u049c\u049d\3\2\2\2\u049d") - buf.write("\u049f\3\2\2\2\u049e\u04a0\t\24\2\2\u049f\u049e\3\2\2") - buf.write("\2\u049f\u04a0\3\2\2\2\u04a0\u04a1\3\2\2\2\u04a1\u04a2") - buf.write("\7\4\2\2\u04a2\u04a4\3\2\2\2\u04a3\u0466\3\2\2\2\u04a3") - buf.write("\u047b\3\2\2\2\u04a3\u0492\3\2\2\2\u04a4A\3\2\2\2\u04a5") - buf.write("\u04a6\7s\2\2\u04a6\u04a7\7\3\2\2\u04a7\u04a8\5\6\4\2") - buf.write("\u04a8\u04a9\7\23\2\2\u04a9\u04aa\5\6\4\2\u04aa\u04ab") - buf.write("\7\4\2\2\u04abC\3\2\2\2\u04ac\u04ad\7s\2\2\u04ad\u04ae") - buf.write("\7\3\2\2\u04ae\u04af\5\b\5\2\u04af\u04b0\7\23\2\2\u04b0") - buf.write("\u04b1\5\b\5\2\u04b1\u04b2\7\4\2\2\u04b2E\3\2\2\2\u04b3") - buf.write("\u04b4\t\25\2\2\u04b4\u04b5\7\3\2\2\u04b5\u04b6\5\b\5") - buf.write("\2\u04b6\u04b7\7\4\2\2\u04b7\u04bc\3\2\2\2\u04b8\u04b9") - buf.write("\7h\2\2\u04b9\u04ba\7\3\2\2\u04ba\u04bc\7\4\2\2\u04bb") - buf.write("\u04b3\3\2\2\2\u04bb\u04b8\3\2\2\2\u04bcG\3\2\2\2\u04bd") - buf.write("\u04be\t\25\2\2\u04be\u04bf\7\3\2\2\u04bf\u04c4\5\6\4") - buf.write("\2\u04c0\u04c2\5r:\2\u04c1\u04c3\5t;\2\u04c2\u04c1\3\2") - buf.write("\2\2\u04c2\u04c3\3\2\2\2\u04c3\u04c5\3\2\2\2\u04c4\u04c0") - buf.write("\3\2\2\2\u04c4\u04c5\3\2\2\2\u04c5\u04c6\3\2\2\2\u04c6") - buf.write("\u04c7\7\4\2\2\u04c7I\3\2\2\2\u04c8\u04c9\t\26\2\2\u04c9") - buf.write("\u04ca\7\3\2\2\u04ca\u04cb\5\6\4\2\u04cb\u04cc\7\u009a") - buf.write("\2\2\u04cc\u04ce\7\3\2\2\u04cd\u04cf\5d\63\2\u04ce\u04cd") - buf.write("\3\2\2\2\u04ce\u04cf\3\2\2\2\u04cf\u04d1\3\2\2\2\u04d0") - buf.write("\u04d2\5f\64\2\u04d1\u04d0\3\2\2\2\u04d1\u04d2\3\2\2\2") - buf.write("\u04d2\u04d4\3\2\2\2\u04d3\u04d5\5j\66\2\u04d4\u04d3\3") - buf.write("\2\2\2\u04d4\u04d5\3\2\2\2\u04d5\u04d6\3\2\2\2\u04d6\u04d7") - buf.write("\7\4\2\2\u04d7\u04d8\7\4\2\2\u04d8\u04f8\3\2\2\2\u04d9") - buf.write("\u04da\t\27\2\2\u04da\u04db\7\3\2\2\u04db\u04e2\5\6\4") - buf.write("\2\u04dc\u04dd\7\23\2\2\u04dd\u04e0\5l\67\2\u04de\u04df") - buf.write("\7\23\2\2\u04df\u04e1\5X-\2\u04e0\u04de\3\2\2\2\u04e0") - buf.write("\u04e1\3\2\2\2\u04e1\u04e3\3\2\2\2\u04e2\u04dc\3\2\2\2") - buf.write("\u04e2\u04e3\3\2\2\2\u04e3\u04e4\3\2\2\2\u04e4\u04e5\7") - buf.write("\u009a\2\2\u04e5\u04e7\7\3\2\2\u04e6\u04e8\5d\63\2\u04e7") - buf.write("\u04e6\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04e9\3\2\2\2") - buf.write("\u04e9\u04ea\5f\64\2\u04ea\u04eb\3\2\2\2\u04eb\u04ec\7") - buf.write("\4\2\2\u04ec\u04ed\7\4\2\2\u04ed\u04f8\3\2\2\2\u04ee\u04ef") - buf.write("\7\u0099\2\2\u04ef\u04f0\7\3\2\2\u04f0\u04f1\5\6\4\2\u04f1") - buf.write("\u04f2\7\u009a\2\2\u04f2\u04f3\7\3\2\2\u04f3\u04f4\5d") - buf.write("\63\2\u04f4\u04f5\7\4\2\2\u04f5\u04f6\7\4\2\2\u04f6\u04f8") - buf.write("\3\2\2\2\u04f7\u04c8\3\2\2\2\u04f7\u04d9\3\2\2\2\u04f7") - buf.write("\u04ee\3\2\2\2\u04f8K\3\2\2\2\u04f9\u04fa\t\26\2\2\u04fa") - buf.write("\u04fb\7\3\2\2\u04fb\u04fc\5\b\5\2\u04fc\u04fd\7\u009a") - buf.write("\2\2\u04fd\u04ff\7\3\2\2\u04fe\u0500\5d\63\2\u04ff\u04fe") - buf.write("\3\2\2\2\u04ff\u0500\3\2\2\2\u0500\u0502\3\2\2\2\u0501") - buf.write("\u0503\5f\64\2\u0502\u0501\3\2\2\2\u0502\u0503\3\2\2\2") - buf.write("\u0503\u0505\3\2\2\2\u0504\u0506\5j\66\2\u0505\u0504\3") - buf.write("\2\2\2\u0505\u0506\3\2\2\2\u0506\u0507\3\2\2\2\u0507\u0508") - buf.write("\7\4\2\2\u0508\u0509\7\4\2\2\u0509\u0534\3\2\2\2\u050a") - buf.write("\u050b\t\27\2\2\u050b\u050c\7\3\2\2\u050c\u0512\5\b\5") - buf.write("\2\u050d\u050e\7\23\2\2\u050e\u0510\5l\67\2\u050f\u0511") - buf.write("\5X-\2\u0510\u050f\3\2\2\2\u0510\u0511\3\2\2\2\u0511\u0513") - buf.write("\3\2\2\2\u0512\u050d\3\2\2\2\u0512\u0513\3\2\2\2\u0513") - buf.write("\u0514\3\2\2\2\u0514\u0515\7\u009a\2\2\u0515\u0517\7\3") - buf.write("\2\2\u0516\u0518\5d\63\2\u0517\u0516\3\2\2\2\u0517\u0518") - buf.write("\3\2\2\2\u0518\u0519\3\2\2\2\u0519\u051a\5f\64\2\u051a") - buf.write("\u051b\3\2\2\2\u051b\u051c\7\4\2\2\u051c\u051d\7\4\2\2") - buf.write("\u051d\u0534\3\2\2\2\u051e\u051f\7O\2\2\u051f\u0520\7") - buf.write("\3\2\2\u0520\u0521\7\u009a\2\2\u0521\u0523\7\3\2\2\u0522") - buf.write("\u0524\5d\63\2\u0523\u0522\3\2\2\2\u0523\u0524\3\2\2\2") - buf.write("\u0524\u0525\3\2\2\2\u0525\u0526\5f\64\2\u0526\u0527\3") - buf.write("\2\2\2\u0527\u0528\7\4\2\2\u0528\u0529\7\4\2\2\u0529\u0534") - buf.write("\3\2\2\2\u052a\u052b\7\u0099\2\2\u052b\u052c\7\3\2\2\u052c") - buf.write("\u052d\5\b\5\2\u052d\u052e\7\u009a\2\2\u052e\u052f\7\3") - buf.write("\2\2\u052f\u0530\5d\63\2\u0530\u0531\7\4\2\2\u0531\u0532") - buf.write("\7\4\2\2\u0532\u0534\3\2\2\2\u0533\u04f9\3\2\2\2\u0533") - buf.write("\u050a\3\2\2\2\u0533\u051e\3\2\2\2\u0533\u052a\3\2\2\2") - buf.write("\u0534M\3\2\2\2\u0535\u0536\5\u00c2b\2\u0536\u0537\7F") - buf.write("\2\2\u0537\u0538\5\u00c2b\2\u0538O\3\2\2\2\u0539\u053e") - buf.write("\5R*\2\u053a\u053b\7\23\2\2\u053b\u053d\5R*\2\u053c\u053a") - buf.write("\3\2\2\2\u053d\u0540\3\2\2\2\u053e\u053c\3\2\2\2\u053e") - buf.write("\u053f\3\2\2\2\u053fQ\3\2\2\2\u0540\u053e\3\2\2\2\u0541") - buf.write("\u0543\5\u00d0i\2\u0542\u0541\3\2\2\2\u0542\u0543\3\2") - buf.write("\2\2\u0543\u0544\3\2\2\2\u0544\u0545\5\u00c2b\2\u0545") - buf.write("\u0546\7\26\2\2\u0546\u0547\5F$\2\u0547S\3\2\2\2\u0548") - buf.write("\u054a\5\u00d0i\2\u0549\u0548\3\2\2\2\u0549\u054a\3\2") - buf.write("\2\2\u054a\u054b\3\2\2\2\u054b\u054c\5\u00c2b\2\u054c") - buf.write("\u054d\7\26\2\2\u054d\u054e\5\b\5\2\u054eU\3\2\2\2\u054f") - buf.write("\u0550\5\u00c2b\2\u0550\u0551\7\t\2\2\u0551\u0552\5X-") - buf.write("\2\u0552W\3\2\2\2\u0553\u0560\5\u00dan\2\u0554\u0555\7") - buf.write("\u00dc\2\2\u0555\u0556\7\3\2\2\u0556\u0557\5\u00dan\2") - buf.write("\u0557\u0558\7\23\2\2\u0558\u055b\5\u00dco\2\u0559\u055a") - buf.write("\7\23\2\2\u055a\u055c\7\u00f6\2\2\u055b\u0559\3\2\2\2") - buf.write("\u055b\u055c\3\2\2\2\u055c\u055d\3\2\2\2\u055d\u055e\7") - buf.write("\4\2\2\u055e\u0560\3\2\2\2\u055f\u0553\3\2\2\2\u055f\u0554") - buf.write("\3\2\2\2\u0560Y\3\2\2\2\u0561\u0566\5^\60\2\u0562\u0563") - buf.write("\7\23\2\2\u0563\u0565\5^\60\2\u0564\u0562\3\2\2\2\u0565") - buf.write("\u0568\3\2\2\2\u0566\u0564\3\2\2\2\u0566\u0567\3\2\2\2") - buf.write("\u0567[\3\2\2\2\u0568\u0566\3\2\2\2\u0569\u056e\5^\60") - buf.write("\2\u056a\u056b\7\23\2\2\u056b\u056d\5^\60\2\u056c\u056a") - buf.write("\3\2\2\2\u056d\u0570\3\2\2\2\u056e\u056c\3\2\2\2\u056e") - buf.write("\u056f\3\2\2\2\u056f\u057a\3\2\2\2\u0570\u056e\3\2\2\2") - buf.write("\u0571\u0572\7\35\2\2\u0572\u0577\5\u00c2b\2\u0573\u0574") - buf.write("\7\23\2\2\u0574\u0576\5\u00c2b\2\u0575\u0573\3\2\2\2\u0576") - buf.write("\u0579\3\2\2\2\u0577\u0575\3\2\2\2\u0577\u0578\3\2\2\2") - buf.write("\u0578\u057b\3\2\2\2\u0579\u0577\3\2\2\2\u057a\u0571\3") - buf.write("\2\2\2\u057a\u057b\3\2\2\2\u057b]\3\2\2\2\u057c\u057f") - buf.write("\5\6\4\2\u057d\u057e\7\60\2\2\u057e\u0580\5\u00bc_\2\u057f") - buf.write("\u057d\3\2\2\2\u057f\u0580\3\2\2\2\u0580_\3\2\2\2\u0581") - buf.write("\u0583\5\24\13\2\u0582\u0581\3\2\2\2\u0582\u0583\3\2\2") - buf.write("\2\u0583\u0587\3\2\2\2\u0584\u0588\5\26\f\2\u0585\u0588") - buf.write("\5b\62\2\u0586\u0588\5\22\n\2\u0587\u0584\3\2\2\2\u0587") - buf.write("\u0585\3\2\2\2\u0587\u0586\3\2\2\2\u0587\u0588\3\2\2\2") - buf.write("\u0588\u058a\3\2\2\2\u0589\u058b\5\30\r\2\u058a\u0589") - buf.write("\3\2\2\2\u058a\u058b\3\2\2\2\u058b\u058d\3\2\2\2\u058c") - buf.write("\u058e\5\20\t\2\u058d\u058c\3\2\2\2\u058d\u058e\3\2\2") - buf.write("\2\u058ea\3\2\2\2\u058f\u0590\7\u00d0\2\2\u0590\u0591") - buf.write("\5\6\4\2\u0591c\3\2\2\2\u0592\u0593\7\u009e\2\2\u0593") - buf.write("\u0594\7N\2\2\u0594\u0599\5\u00c2b\2\u0595\u0596\7\23") - buf.write("\2\2\u0596\u0598\5\u00c2b\2\u0597\u0595\3\2\2\2\u0598") - buf.write("\u059b\3\2\2\2\u0599\u0597\3\2\2\2\u0599\u059a\3\2\2\2") - buf.write("\u059ae\3\2\2\2\u059b\u0599\3\2\2\2\u059c\u059d\7M\2\2") - buf.write("\u059d\u059e\7N\2\2\u059e\u05a3\5h\65\2\u059f\u05a0\7") - buf.write("\23\2\2\u05a0\u05a2\5h\65\2\u05a1\u059f\3\2\2\2\u05a2") - buf.write("\u05a5\3\2\2\2\u05a3\u05a1\3\2\2\2\u05a3\u05a4\3\2\2\2") - buf.write("\u05a4g\3\2\2\2\u05a5\u05a3\3\2\2\2\u05a6\u05a8\5\u00c2") - buf.write("b\2\u05a7\u05a9\t\30\2\2\u05a8\u05a7\3\2\2\2\u05a8\u05a9") - buf.write("\3\2\2\2\u05a9i\3\2\2\2\u05aa\u05ab\7y\2\2\u05ab\u05ae") - buf.write("\7\u00be\2\2\u05ac\u05ae\7\u00a0\2\2\u05ad\u05aa\3\2\2") - buf.write("\2\u05ad\u05ac\3\2\2\2\u05ae\u05af\3\2\2\2\u05af\u05b0") - buf.write("\7\65\2\2\u05b0\u05b1\5p9\2\u05b1\u05b2\7\61\2\2\u05b2") - buf.write("\u05b3\5p9\2\u05b3k\3\2\2\2\u05b4\u05b6\t\31\2\2\u05b5") - buf.write("\u05b4\3\2\2\2\u05b5\u05b6\3\2\2\2\u05b6\u05b7\3\2\2\2") - buf.write("\u05b7\u05b8\7\u00f3\2\2\u05b8m\3\2\2\2\u05b9\u05bb\t") - buf.write("\31\2\2\u05ba\u05b9\3\2\2\2\u05ba\u05bb\3\2\2\2\u05bb") - buf.write("\u05bc\3\2\2\2\u05bc\u05bd\7\u00f4\2\2\u05bdo\3\2\2\2") - buf.write("\u05be\u05bf\5l\67\2\u05bf\u05c0\7\u009b\2\2\u05c0\u05cc") - buf.write("\3\2\2\2\u05c1\u05c2\5l\67\2\u05c2\u05c3\7\u009c\2\2\u05c3") - buf.write("\u05cc\3\2\2\2\u05c4\u05c5\7\u00a1\2\2\u05c5\u05c6\7y") - buf.write("\2\2\u05c6\u05cc\7\u00bf\2\2\u05c7\u05c8\7\u009d\2\2\u05c8") - buf.write("\u05cc\7\u009b\2\2\u05c9\u05ca\7\u009d\2\2\u05ca\u05cc") - buf.write("\7\u009c\2\2\u05cb\u05be\3\2\2\2\u05cb\u05c1\3\2\2\2\u05cb") - buf.write("\u05c4\3\2\2\2\u05cb\u05c7\3\2\2\2\u05cb\u05c9\3\2\2\2") - buf.write("\u05ccq\3\2\2\2\u05cd\u05ce\7\u0092\2\2\u05ce\u05cf\t") - buf.write("\32\2\2\u05cf\u05d4\5\u00c2b\2\u05d0\u05d1\7\23\2\2\u05d1") - buf.write("\u05d3\5\u00c2b\2\u05d2\u05d0\3\2\2\2\u05d3\u05d6\3\2") - buf.write("\2\2\u05d4\u05d2\3\2\2\2\u05d4\u05d5\3\2\2\2\u05d5\u05df") - buf.write("\3\2\2\2\u05d6\u05d4\3\2\2\2\u05d7\u05d8\7\u00d5\2\2\u05d8") - buf.write("\u05d9\7\3\2\2\u05d9\u05dc\7\u00f6\2\2\u05da\u05db\7\23") - buf.write("\2\2\u05db\u05dd\t\22\2\2\u05dc\u05da\3\2\2\2\u05dc\u05dd") - buf.write("\3\2\2\2\u05dd\u05de\3\2\2\2\u05de\u05e0\7\4\2\2\u05df") - buf.write("\u05d7\3\2\2\2\u05df\u05e0\3\2\2\2\u05e0\u05ee\3\2\2\2") - buf.write("\u05e1\u05e2\7\u0092\2\2\u05e2\u05eb\7J\2\2\u05e3\u05e4") - buf.write("\7\u00d5\2\2\u05e4\u05e5\7\3\2\2\u05e5\u05e8\7\u00f6\2") - buf.write("\2\u05e6\u05e7\7\23\2\2\u05e7\u05e9\t\22\2\2\u05e8\u05e6") - buf.write("\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9\u05ea\3\2\2\2\u05ea") - buf.write("\u05ec\7\4\2\2\u05eb\u05e3\3\2\2\2\u05eb\u05ec\3\2\2\2") - buf.write("\u05ec\u05ee\3\2\2\2\u05ed\u05cd\3\2\2\2\u05ed\u05e1\3") - buf.write("\2\2\2\u05ees\3\2\2\2\u05ef\u05f0\7\u0094\2\2\u05f0\u05f1") - buf.write("\5\b\5\2\u05f1u\3\2\2\2\u05f2\u05f3\5\u00be`\2\u05f3\u05f6") - buf.write("\5|?\2\u05f4\u05f5\7\u00df\2\2\u05f5\u05f7\5X-\2\u05f6") - buf.write("\u05f4\3\2\2\2\u05f6\u05f7\3\2\2\2\u05f7w\3\2\2\2\u05f8") - buf.write("\u05fc\5\u0080A\2\u05f9\u05fc\5\u0084C\2\u05fa\u05fc\5") - buf.write("\u0082B\2\u05fb\u05f8\3\2\2\2\u05fb\u05f9\3\2\2\2\u05fb") - buf.write("\u05fa\3\2\2\2\u05fcy\3\2\2\2\u05fd\u0600\5\u0082B\2\u05fe") - buf.write("\u0600\5\u0080A\2\u05ff\u05fd\3\2\2\2\u05ff\u05fe\3\2") - buf.write("\2\2\u0600{\3\2\2\2\u0601\u0607\5\u0080A\2\u0602\u0607") - buf.write("\5\u0084C\2\u0603\u0607\5\u0088E\2\u0604\u0607\5~@\2\u0605") - buf.write("\u0607\5\u0082B\2\u0606\u0601\3\2\2\2\u0606\u0602\3\2") - buf.write("\2\2\u0606\u0603\3\2\2\2\u0606\u0604\3\2\2\2\u0606\u0605") - buf.write("\3\2\2\2\u0607}\3\2\2\2\u0608\u060c\7\u0081\2\2\u0609") - buf.write("\u060c\5\u008aF\2\u060a\u060c\5\u008cG\2\u060b\u0608\3") - buf.write("\2\2\2\u060b\u0609\3\2\2\2\u060b\u060a\3\2\2\2\u060c\177") - buf.write("\3\2\2\2\u060d\u0610\5\u00dco\2\u060e\u0610\5\u008eH\2") - buf.write("\u060f\u060d\3\2\2\2\u060f\u060e\3\2\2\2\u0610\u0612\3") - buf.write("\2\2\2\u0611\u0613\5\u00a8U\2\u0612\u0611\3\2\2\2\u0612") - buf.write("\u0613\3\2\2\2\u0613\u0618\3\2\2\2\u0614\u0616\7\64\2") - buf.write("\2\u0615\u0614\3\2\2\2\u0615\u0616\3\2\2\2\u0616\u0617") - buf.write("\3\2\2\2\u0617\u0619\78\2\2\u0618\u0615\3\2\2\2\u0618") - buf.write("\u0619\3\2\2\2\u0619\u0081\3\2\2\2\u061a\u061f\5\u00d0") - buf.write("i\2\u061b\u061c\7\n\2\2\u061c\u061d\5\u0080A\2\u061d\u061e") - buf.write("\7\13\2\2\u061e\u0620\3\2\2\2\u061f\u061b\3\2\2\2\u061f") - buf.write("\u0620\3\2\2\2\u0620\u0083\3\2\2\2\u0621\u062d\7{\2\2") - buf.write("\u0622\u0623\7\7\2\2\u0623\u0628\5\u00aaV\2\u0624\u0625") - buf.write("\7\23\2\2\u0625\u0627\5\u00aaV\2\u0626\u0624\3\2\2\2\u0627") - buf.write("\u062a\3\2\2\2\u0628\u0626\3\2\2\2\u0628\u0629\3\2\2\2") - buf.write("\u0629\u062b\3\2\2\2\u062a\u0628\3\2\2\2\u062b\u062c\7") - buf.write("\b\2\2\u062c\u062e\3\2\2\2\u062d\u0622\3\2\2\2\u062d\u062e") - buf.write("\3\2\2\2\u062e\u0085\3\2\2\2\u062f\u0632\5\u0084C\2\u0630") - buf.write("\u0632\5\u0080A\2\u0631\u062f\3\2\2\2\u0631\u0630\3\2") - buf.write("\2\2\u0632\u0087\3\2\2\2\u0633\u0638\7\u00f1\2\2\u0634") - buf.write("\u0635\7\n\2\2\u0635\u0636\5\u0080A\2\u0636\u0637\7\13") - buf.write("\2\2\u0637\u0639\3\2\2\2\u0638\u0634\3\2\2\2\u0638\u0639") - buf.write("\3\2\2\2\u0639\u0089\3\2\2\2\u063a\u0658\7\177\2\2\u063b") - buf.write("\u0647\7\u00ed\2\2\u063c\u063d\7\7\2\2\u063d\u0642\5\u008e") - buf.write("H\2\u063e\u063f\7\21\2\2\u063f\u0641\5\u008eH\2\u0640") - buf.write("\u063e\3\2\2\2\u0641\u0644\3\2\2\2\u0642\u0640\3\2\2\2") - buf.write("\u0642\u0643\3\2\2\2\u0643\u0645\3\2\2\2\u0644\u0642\3") - buf.write("\2\2\2\u0645\u0646\7\b\2\2\u0646\u0648\3\2\2\2\u0647\u063c") - buf.write("\3\2\2\2\u0647\u0648\3\2\2\2\u0648\u0658\3\2\2\2\u0649") - buf.write("\u0655\7\u00ee\2\2\u064a\u064b\7\7\2\2\u064b\u0650\5\u00be") - buf.write("`\2\u064c\u064d\7\21\2\2\u064d\u064f\5\u00be`\2\u064e") - buf.write("\u064c\3\2\2\2\u064f\u0652\3\2\2\2\u0650\u064e\3\2\2\2") - buf.write("\u0650\u0651\3\2\2\2\u0651\u0653\3\2\2\2\u0652\u0650\3") - buf.write("\2\2\2\u0653\u0654\7\b\2\2\u0654\u0656\3\2\2\2\u0655\u064a") - buf.write("\3\2\2\2\u0655\u0656\3\2\2\2\u0656\u0658\3\2\2\2\u0657") - buf.write("\u063a\3\2\2\2\u0657\u063b\3\2\2\2\u0657\u0649\3\2\2\2") - buf.write("\u0658\u008b\3\2\2\2\u0659\u0682\7\u0080\2\2\u065a\u066b") - buf.write("\7\u00ef\2\2\u065b\u065c\7\7\2\2\u065c\u0668\7\u00f7\2") - buf.write("\2\u065d\u065e\7\3\2\2\u065e\u0663\5\u008eH\2\u065f\u0660") - buf.write("\7\21\2\2\u0660\u0662\5\u008eH\2\u0661\u065f\3\2\2\2\u0662") - buf.write("\u0665\3\2\2\2\u0663\u0661\3\2\2\2\u0663\u0664\3\2\2\2") - buf.write("\u0664\u0666\3\2\2\2\u0665\u0663\3\2\2\2\u0666\u0667\7") - buf.write("\4\2\2\u0667\u0669\3\2\2\2\u0668\u065d\3\2\2\2\u0668\u0669") - buf.write("\3\2\2\2\u0669\u066a\3\2\2\2\u066a\u066c\7\b\2\2\u066b") - buf.write("\u065b\3\2\2\2\u066b\u066c\3\2\2\2\u066c\u0682\3\2\2\2") - buf.write("\u066d\u067f\7\u00f0\2\2\u066e\u066f\7\7\2\2\u066f\u067b") - buf.write("\5\u00be`\2\u0670\u0671\7\3\2\2\u0671\u0676\5\u00be`\2") - buf.write("\u0672\u0673\7\21\2\2\u0673\u0675\5\u00be`\2\u0674\u0672") - buf.write("\3\2\2\2\u0675\u0678\3\2\2\2\u0676\u0674\3\2\2\2\u0676") - buf.write("\u0677\3\2\2\2\u0677\u0679\3\2\2\2\u0678\u0676\3\2\2\2") - buf.write("\u0679\u067a\7\4\2\2\u067a\u067c\3\2\2\2\u067b\u0670\3") - buf.write("\2\2\2\u067b\u067c\3\2\2\2\u067c\u067d\3\2\2\2\u067d\u067e") - buf.write("\7\b\2\2\u067e\u0680\3\2\2\2\u067f\u066e\3\2\2\2\u067f") - buf.write("\u0680\3\2\2\2\u0680\u0682\3\2\2\2\u0681\u0659\3\2\2\2") - buf.write("\u0681\u065a\3\2\2\2\u0681\u066d\3\2\2\2\u0682\u008d\3") - buf.write("\2\2\2\u0683\u0684\7\u00f7\2\2\u0684\u008f\3\2\2\2\u0685") - buf.write("\u0686\7\u00f7\2\2\u0686\u0091\3\2\2\2\u0687\u0688\t\33") - buf.write("\2\2\u0688\u068d\5\u0094K\2\u0689\u068a\7\23\2\2\u068a") - buf.write("\u068c\5\u0094K\2\u068b\u0689\3\2\2\2\u068c\u068f\3\2") - buf.write("\2\2\u068d\u068b\3\2\2\2\u068d\u068e\3\2\2\2\u068e\u0093") - buf.write("\3\2\2\2\u068f\u068d\3\2\2\2\u0690\u0693\5\u00be`\2\u0691") - buf.write("\u0692\7\60\2\2\u0692\u0694\5\u00bc_\2\u0693\u0691\3\2") - buf.write("\2\2\u0693\u0694\3\2\2\2\u0694\u0095\3\2\2\2\u0695\u069a") - buf.write("\5\u0098M\2\u0696\u0697\7\u00f9\2\2\u0697\u0699\5\u0098") - buf.write("M\2\u0698\u0696\3\2\2\2\u0699\u069c\3\2\2\2\u069a\u0698") - buf.write("\3\2\2\2\u069a\u069b\3\2\2\2\u069b\u0097\3\2\2\2\u069c") - buf.write("\u069a\3\2\2\2\u069d\u069e\7\u00f7\2\2\u069e\u06a0\7\25") - buf.write("\2\2\u069f\u069d\3\2\2\2\u069f\u06a0\3\2\2\2\u06a0\u06a5") - buf.write("\3\2\2\2\u06a1\u06a2\7\u00bb\2\2\u06a2\u06a3\5\b\5\2\u06a3") - buf.write("\u06a4\7\33\2\2\u06a4\u06a6\3\2\2\2\u06a5\u06a1\3\2\2") - buf.write("\2\u06a5\u06a6\3\2\2\2\u06a6\u06a7\3\2\2\2\u06a7\u06a9") - buf.write("\5\b\5\2\u06a8\u06aa\5\u00c6d\2\u06a9\u06a8\3\2\2\2\u06a9") - buf.write("\u06aa\3\2\2\2\u06aa\u06ac\3\2\2\2\u06ab\u06ad\5\u00c8") - buf.write("e\2\u06ac\u06ab\3\2\2\2\u06ac\u06ad\3\2\2\2\u06ad\u0099") - buf.write("\3\2\2\2\u06ae\u06b3\5\u009cO\2\u06af\u06b0\7\u00f9\2") - buf.write("\2\u06b0\u06b2\5\u009cO\2\u06b1\u06af\3\2\2\2\u06b2\u06b5") - buf.write("\3\2\2\2\u06b3\u06b1\3\2\2\2\u06b3\u06b4\3\2\2\2\u06b4") - buf.write("\u009b\3\2\2\2\u06b5\u06b3\3\2\2\2\u06b6\u06b7\7\u00f7") - buf.write("\2\2\u06b7\u06b9\7\25\2\2\u06b8\u06b6\3\2\2\2\u06b8\u06b9") - buf.write("\3\2\2\2\u06b9\u06ba\3\2\2\2\u06ba\u06bc\5\u00a2R\2\u06bb") - buf.write("\u06bd\5\u00c6d\2\u06bc\u06bb\3\2\2\2\u06bc\u06bd\3\2") - buf.write("\2\2\u06bd\u06bf\3\2\2\2\u06be\u06c0\5\u00c8e\2\u06bf") - buf.write("\u06be\3\2\2\2\u06bf\u06c0\3\2\2\2\u06c0\u009d\3\2\2\2") - buf.write("\u06c1\u06c4\t\33\2\2\u06c2\u06c3\7\u00a9\2\2\u06c3\u06c5") - buf.write("\5\u00a0Q\2\u06c4\u06c2\3\2\2\2\u06c4\u06c5\3\2\2\2\u06c5") - buf.write("\u06c6\3\2\2\2\u06c6\u06c7\7\u0082\2\2\u06c7\u06c8\7\u00f7") - buf.write("\2\2\u06c8\u009f\3\2\2\2\u06c9\u06ce\5\u0094K\2\u06ca") - buf.write("\u06cb\7\23\2\2\u06cb\u06cd\5\u0094K\2\u06cc\u06ca\3\2") - buf.write("\2\2\u06cd\u06d0\3\2\2\2\u06ce\u06cc\3\2\2\2\u06ce\u06cf") - buf.write("\3\2\2\2\u06cf\u00a1\3\2\2\2\u06d0\u06ce\3\2\2\2\u06d1") - buf.write("\u06d2\7\u00bb\2\2\u06d2\u06d3\5\b\5\2\u06d3\u06d4\7\33") - buf.write("\2\2\u06d4\u06d6\3\2\2\2\u06d5\u06d1\3\2\2\2\u06d5\u06d6") - buf.write("\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7\u06d9\5\u00a6T\2\u06d8") - buf.write("\u06da\5\u00caf\2\u06d9\u06d8\3\2\2\2\u06d9\u06da\3\2") - buf.write("\2\2\u06da\u06db\3\2\2\2\u06db\u06df\5\u00a4S\2\u06dc") - buf.write("\u06de\5\u00a4S\2\u06dd\u06dc\3\2\2\2\u06de\u06e1\3\2") - buf.write("\2\2\u06df\u06dd\3\2\2\2\u06df\u06e0\3\2\2\2\u06e0\u00a3") - buf.write("\3\2\2\2\u06e1\u06df\3\2\2\2\u06e2\u06e4\t\31\2\2\u06e3") - buf.write("\u06e2\3\2\2\2\u06e3\u06e4\3\2\2\2\u06e4\u06e5\3\2\2\2") - buf.write("\u06e5\u06ea\5\u00a6T\2\u06e6\u06e7\7\5\2\2\u06e7\u06e8") - buf.write("\5\b\5\2\u06e8\u06e9\7\6\2\2\u06e9\u06eb\3\2\2\2\u06ea") - buf.write("\u06e6\3\2\2\2\u06ea\u06eb\3\2\2\2\u06eb\u00a5\3\2\2\2") - buf.write("\u06ec\u06f0\7\u00f7\2\2\u06ed\u06f0\5l\67\2\u06ee\u06f0") - buf.write("\5n8\2\u06ef\u06ec\3\2\2\2\u06ef\u06ed\3\2\2\2\u06ef\u06ee") - buf.write("\3\2\2\2\u06f0\u00a7\3\2\2\2\u06f1\u06f2\7\5\2\2\u06f2") - buf.write("\u06f3\5\b\5\2\u06f3\u06f4\7\6\2\2\u06f4\u0701\3\2\2\2") - buf.write("\u06f5\u06f6\7\7\2\2\u06f6\u06fb\5X-\2\u06f7\u06f8\7\23") - buf.write("\2\2\u06f8\u06fa\5X-\2\u06f9\u06f7\3\2\2\2\u06fa\u06fd") - buf.write("\3\2\2\2\u06fb\u06f9\3\2\2\2\u06fb\u06fc\3\2\2\2\u06fc") - buf.write("\u06fe\3\2\2\2\u06fd\u06fb\3\2\2\2\u06fe\u06ff\7\b\2\2") - buf.write("\u06ff\u0701\3\2\2\2\u0700\u06f1\3\2\2\2\u0700\u06f5\3") - buf.write("\2\2\2\u0701\u00a9\3\2\2\2\u0702\u0705\5\u0082B\2\u0703") - buf.write("\u0706\5\u00c2b\2\u0704\u0706\5\u00acW\2\u0705\u0703\3") - buf.write("\2\2\2\u0705\u0704\3\2\2\2\u0706\u00ab\3\2\2\2\u0707\u0709") - buf.write("\7u\2\2\u0708\u070a\t\34\2\2\u0709\u0708\3\2\2\2\u0709") - buf.write("\u070a\3\2\2\2\u070a\u00ad\3\2\2\2\u070b\u070c\t\35\2") - buf.write("\2\u070c\u00af\3\2\2\2\u070d\u070e\t\36\2\2\u070e\u00b1") - buf.write("\3\2\2\2\u070f\u0710\7\u00a9\2\2\u0710\u0715\5\u00c2b") - buf.write("\2\u0711\u0712\7\23\2\2\u0712\u0714\5\u00c2b\2\u0713\u0711") - buf.write("\3\2\2\2\u0714\u0717\3\2\2\2\u0715\u0713\3\2\2\2\u0715") - buf.write("\u0716\3\2\2\2\u0716\u00b3\3\2\2\2\u0717\u0715\3\2\2\2") - buf.write("\u0718\u0719\t\37\2\2\u0719\u00b5\3\2\2\2\u071a\u071b") - buf.write("\7H\2\2\u071b\u071c\5\6\4\2\u071c\u00b7\3\2\2\2\u071d") - buf.write("\u071e\t \2\2\u071e\u00b9\3\2\2\2\u071f\u0720\t!\2\2\u0720") - buf.write("\u00bb\3\2\2\2\u0721\u0722\7\u00f7\2\2\u0722\u00bd\3\2") - buf.write("\2\2\u0723\u0724\7\u00f7\2\2\u0724\u00bf\3\2\2\2\u0725") - buf.write("\u0726\7\u00f7\2\2\u0726\u00c1\3\2\2\2\u0727\u072a\7\u00f7") - buf.write("\2\2\u0728\u0729\7\27\2\2\u0729\u072b\7\u00f7\2\2\u072a") - buf.write("\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u00c3\3\2\2\2") - buf.write("\u072c\u072d\7\7\2\2\u072d\u0732\5X-\2\u072e\u072f\7\23") - buf.write("\2\2\u072f\u0731\5X-\2\u0730\u072e\3\2\2\2\u0731\u0734") - buf.write("\3\2\2\2\u0732\u0730\3\2\2\2\u0732\u0733\3\2\2\2\u0733") - buf.write("\u0735\3\2\2\2\u0734\u0732\3\2\2\2\u0735\u0736\7\b\2\2") - buf.write("\u0736\u00c5\3\2\2\2\u0737\u0738\7I\2\2\u0738\u0739\5") - buf.write("\u00dan\2\u0739\u00c7\3\2\2\2\u073a\u073b\7L\2\2\u073b") - buf.write('\u073c\5\u00dan\2\u073c\u00c9\3\2\2\2\u073d\u073e\t"') - buf.write("\2\2\u073e\u00cb\3\2\2\2\u073f\u0742\5\6\4\2\u0740\u0742") - buf.write("\7u\2\2\u0741\u073f\3\2\2\2\u0741\u0740\3\2\2\2\u0742") - buf.write("\u00cd\3\2\2\2\u0743\u0746\5\b\5\2\u0744\u0746\7u\2\2") - buf.write("\u0745\u0743\3\2\2\2\u0745\u0744\3\2\2\2\u0746\u00cf\3") - buf.write("\2\2\2\u0747\u074d\7j\2\2\u0748\u074d\7\u00ec\2\2\u0749") - buf.write("\u074d\7i\2\2\u074a\u074d\7k\2\2\u074b\u074d\5\u00d2j") - buf.write("\2\u074c\u0747\3\2\2\2\u074c\u0748\3\2\2\2\u074c\u0749") - buf.write("\3\2\2\2\u074c\u074a\3\2\2\2\u074c\u074b\3\2\2\2\u074d") - buf.write("\u00d1\3\2\2\2\u074e\u074f\7p\2\2\u074f\u0750\7k\2\2\u0750") - buf.write("\u00d3\3\2\2\2\u0751\u0752\7\u00f7\2\2\u0752\u00d5\3\2") - buf.write("\2\2\u0753\u0754\7\u00f7\2\2\u0754\u00d7\3\2\2\2\u0755") - buf.write("\u0756\7\u00f7\2\2\u0756\u00d9\3\2\2\2\u0757\u075d\5l") - buf.write("\67\2\u0758\u075d\5n8\2\u0759\u075d\7\u00f5\2\2\u075a") - buf.write("\u075d\7\u00f6\2\2\u075b\u075d\78\2\2\u075c\u0757\3\2") - buf.write("\2\2\u075c\u0758\3\2\2\2\u075c\u0759\3\2\2\2\u075c\u075a") - buf.write("\3\2\2\2\u075c\u075b\3\2\2\2\u075d\u00db\3\2\2\2\u075e") - buf.write("\u075f\t#\2\2\u075f\u00dd\3\2\2\2\u0760\u0761\t$\2\2\u0761") - buf.write("\u00df\3\2\2\2\u00cc\u00e5\u00f3\u010c\u0113\u0131\u0133") - buf.write("\u0135\u014f\u0156\u016c\u016e\u0170\u017b\u0189\u0192") - buf.write("\u019a\u01a1\u01a3\u01ae\u01b7\u01c9\u01d2\u01e1\u01ec") - buf.write("\u01ef\u01f4\u0215\u021e\u0221\u022b\u0230\u0234\u023a") - buf.write("\u023e\u0248\u024c\u0250\u0259\u025c\u0266\u026a\u0274") - buf.write("\u0279\u027d\u0283\u0287\u028b\u028f\u0293\u02a3\u02a7") - buf.write("\u02b2\u02bd\u02c1\u02c5\u02d5\u02d9\u02e4\u02ef\u02f3") - buf.write("\u02f7\u0303\u030e\u031a\u0325\u0343\u0347\u035e\u0363") - buf.write("\u036b\u0380\u0384\u0388\u03c6\u03cb\u03d3\u03e8\u03ec") - buf.write("\u03f0\u042e\u0437\u0442\u044d\u0455\u0459\u045c\u045f") - buf.write("\u0462\u0471\u0474\u0477\u0481\u0485\u0488\u048b\u048e") - buf.write("\u0496\u0499\u049c\u049f\u04a3\u04bb\u04c2\u04c4\u04ce") - buf.write("\u04d1\u04d4\u04e0\u04e2\u04e7\u04f7\u04ff\u0502\u0505") - buf.write("\u0510\u0512\u0517\u0523\u0533\u053e\u0542\u0549\u055b") - buf.write("\u055f\u0566\u056e\u0577\u057a\u057f\u0582\u0587\u058a") - buf.write("\u058d\u0599\u05a3\u05a8\u05ad\u05b5\u05ba\u05cb\u05d4") - buf.write("\u05dc\u05df\u05e8\u05eb\u05ed\u05f6\u05fb\u05ff\u0606") - buf.write("\u060b\u060f\u0612\u0615\u0618\u061f\u0628\u062d\u0631") - buf.write("\u0638\u0642\u0647\u0650\u0655\u0657\u0663\u0668\u066b") - buf.write("\u0676\u067b\u067f\u0681\u068d\u0693\u069a\u069f\u06a5") - buf.write("\u06a9\u06ac\u06b3\u06b8\u06bc\u06bf\u06c4\u06ce\u06d5") - buf.write("\u06d9\u06df\u06e3\u06ea\u06ef\u06fb\u0700\u0705\u0709") - buf.write("\u0715\u072a\u0732\u0741\u0745\u074c\u075c") - return buf.getvalue() - - -class Parser(ANTLRParser): - grammarFileName = "Vtl.g4" - - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] - - sharedContextCache = PredictionContextCache() - - literalNames = [ - "", - "'('", - "')'", - "'['", - "']'", - "'{'", - "'}'", - "'='", - "'<'", - "'>'", - "'>='", - "'<>'", - "'<='", - "'+'", - "'-'", - "'*'", - "'/'", - "','", - "'->'", - "':'", - "':='", - "'#'", - "'eval'", - "'if'", - "'case'", - "'then'", - "'else'", - "'using'", - "'with'", - "'current_date'", - "'datediff'", - "'dateadd'", - "'getyear'", - "'getmonth'", - "'dayofmonth'", - "'dayofyear'", - "'daytoyear'", - "'daytomonth'", - "'yeartoday'", - "'monthtoday'", - "'on'", - "'drop'", - "'keep'", - "'calc'", - "'attrcalc'", - "'rename'", - "'as'", - "'and'", - "'or'", - "'xor'", - "'not'", - "'between'", - "'in'", - "'not_in'", - "'null'", - "'isnull'", - "'ex'", - "'union'", - "'diff'", - "'symdiff'", - "'intersect'", - "'random'", - "'keys'", - "'intyear'", - "'intmonth'", - "'intday'", - "'check'", - "'exists_in'", - "'to'", - "'return'", - "'imbalance'", - "'errorcode'", - "'all'", - "'aggr'", - "'errorlevel'", - "'order'", - "'by'", - "'rank'", - "'asc'", - "'desc'", - "'min'", - "'max'", - "'first'", - "'last'", - "'indexof'", - "'abs'", - "'key'", - "'ln'", - "'log'", - "'trunc'", - "'round'", - "'power'", - "'mod'", - "'length'", - "'||'", - "'trim'", - "'upper'", - "'lower'", - "'substr'", - "'sum'", - "'avg'", - "'median'", - "'count'", - "'identifier'", - "'measure'", - "'attribute'", - "'filter'", - "'merge'", - "'exp'", - "'componentRole'", - "'viral'", - "'match_characters'", - "'type'", - "'nvl'", - "'hierarchy'", - "'_'", - "'invalid'", - "'valuedomain'", - "'variable'", - "'data'", - "'structure'", - "'dataset'", - "'operator'", - "'define'", - "'<-'", - "'datapoint'", - "'hierarchical'", - "'ruleset'", - "'rule'", - "'end'", - "'alterDataset'", - "'ltrim'", - "'rtrim'", - "'instr'", - "'replace'", - "'ceil'", - "'floor'", - "'sqrt'", - "'any'", - "'setdiff'", - "'stddev_pop'", - "'stddev_samp'", - "'var_pop'", - "'var_samp'", - "'group'", - "'except'", - "'having'", - "'first_value'", - "'last_value'", - "'lag'", - "'lead'", - "'ratio_to_report'", - "'over'", - "'preceding'", - "'following'", - "'unbounded'", - "'partition'", - "'rows'", - "'range'", - "'current'", - "'valid'", - "'fill_time_series'", - "'flow_to_stock'", - "'stock_to_flow'", - "'timeshift'", - "'measures'", - "'no_measures'", - "'condition'", - "'boolean'", - "'date'", - "'time_period'", - "'number'", - "'string'", - "'time'", - "'integer'", - "'float'", - "'list'", - "'record'", - "'restrict'", - "'yyyy'", - "'mm'", - "'dd'", - "'maxLength'", - "'regexp'", - "'is'", - "'when'", - "'from'", - "'aggregates'", - "'points'", - "'point'", - "'total'", - "'partial'", - "'always'", - "'inner_join'", - "'left_join'", - "'cross_join'", - "'full_join'", - "'maps_from'", - "'maps_to'", - "'map_to'", - "'map_from'", - "'returns'", - "'pivot'", - "'customPivot'", - "'unpivot'", - "'sub'", - "'apply'", - "'conditioned'", - "'period_indicator'", - "'single'", - "'duration'", - "'time_agg'", - "'unit'", - "'Value'", - "'valuedomains'", - "'variables'", - "'input'", - "'output'", - "'cast'", - "'rule_priority'", - "'dataset_priority'", - "'default'", - "'check_datapoint'", - "'check_hierarchy'", - "'computed'", - "'non_null'", - "'non_zero'", - "'partial_null'", - "'partial_zero'", - "'always_null'", - "'always_zero'", - "'components'", - "'all_measures'", - "'scalar'", - "'component'", - "'datapoint_on_valuedomains'", - "'datapoint_on_variables'", - "'hierarchical_on_valuedomains'", - "'hierarchical_on_variables'", - "'set'", - "'language'", - "", - "", - "", - "", - "", - "", - "';'", - ] - - symbolicNames = [ - "", - "LPAREN", - "RPAREN", - "QLPAREN", - "QRPAREN", - "GLPAREN", - "GRPAREN", - "EQ", - "LT", - "MT", - "ME", - "NEQ", - "LE", - "PLUS", - "MINUS", - "MUL", - "DIV", - "COMMA", - "POINTER", - "COLON", - "ASSIGN", - "MEMBERSHIP", - "EVAL", - "IF", - "CASE", - "THEN", - "ELSE", - "USING", - "WITH", - "CURRENT_DATE", - "DATEDIFF", - "DATEADD", - "YEAR_OP", - "MONTH_OP", - "DAYOFMONTH", - "DAYOFYEAR", - "DAYTOYEAR", - "DAYTOMONTH", - "YEARTODAY", - "MONTHTODAY", - "ON", - "DROP", - "KEEP", - "CALC", - "ATTRCALC", - "RENAME", - "AS", - "AND", - "OR", - "XOR", - "NOT", - "BETWEEN", - "IN", - "NOT_IN", - "NULL_CONSTANT", - "ISNULL", - "EX", - "UNION", - "DIFF", - "SYMDIFF", - "INTERSECT", - "RANDOM", - "KEYS", - "INTYEAR", - "INTMONTH", - "INTDAY", - "CHECK", - "EXISTS_IN", - "TO", - "RETURN", - "IMBALANCE", - "ERRORCODE", - "ALL", - "AGGREGATE", - "ERRORLEVEL", - "ORDER", - "BY", - "RANK", - "ASC", - "DESC", - "MIN", - "MAX", - "FIRST", - "LAST", - "INDEXOF", - "ABS", - "KEY", - "LN", - "LOG", - "TRUNC", - "ROUND", - "POWER", - "MOD", - "LEN", - "CONCAT", - "TRIM", - "UCASE", - "LCASE", - "SUBSTR", - "SUM", - "AVG", - "MEDIAN", - "COUNT", - "DIMENSION", - "MEASURE", - "ATTRIBUTE", - "FILTER", - "MERGE", - "EXP", - "ROLE", - "VIRAL", - "CHARSET_MATCH", - "TYPE", - "NVL", - "HIERARCHY", - "OPTIONAL", - "INVALID", - "VALUE_DOMAIN", - "VARIABLE", - "DATA", - "STRUCTURE", - "DATASET", - "OPERATOR", - "DEFINE", - "PUT_SYMBOL", - "DATAPOINT", - "HIERARCHICAL", - "RULESET", - "RULE", - "END", - "ALTER_DATASET", - "LTRIM", - "RTRIM", - "INSTR", - "REPLACE", - "CEIL", - "FLOOR", - "SQRT", - "ANY", - "SETDIFF", - "STDDEV_POP", - "STDDEV_SAMP", - "VAR_POP", - "VAR_SAMP", - "GROUP", - "EXCEPT", - "HAVING", - "FIRST_VALUE", - "LAST_VALUE", - "LAG", - "LEAD", - "RATIO_TO_REPORT", - "OVER", - "PRECEDING", - "FOLLOWING", - "UNBOUNDED", - "PARTITION", - "ROWS", - "RANGE", - "CURRENT", - "VALID", - "FILL_TIME_SERIES", - "FLOW_TO_STOCK", - "STOCK_TO_FLOW", - "TIMESHIFT", - "MEASURES", - "NO_MEASURES", - "CONDITION", - "BOOLEAN", - "DATE", - "TIME_PERIOD", - "NUMBER", - "STRING", - "TIME", - "INTEGER", - "FLOAT", - "LIST", - "RECORD", - "RESTRICT", - "YYYY", - "MM", - "DD", - "MAX_LENGTH", - "REGEXP", - "IS", - "WHEN", - "FROM", - "AGGREGATES", - "POINTS", - "POINT", - "TOTAL", - "PARTIAL", - "ALWAYS", - "INNER_JOIN", - "LEFT_JOIN", - "CROSS_JOIN", - "FULL_JOIN", - "MAPS_FROM", - "MAPS_TO", - "MAP_TO", - "MAP_FROM", - "RETURNS", - "PIVOT", - "CUSTOMPIVOT", - "UNPIVOT", - "SUBSPACE", - "APPLY", - "CONDITIONED", - "PERIOD_INDICATOR", - "SINGLE", - "DURATION", - "TIME_AGG", - "UNIT", - "VALUE", - "VALUEDOMAINS", - "VARIABLES", - "INPUT", - "OUTPUT", - "CAST", - "RULE_PRIORITY", - "DATASET_PRIORITY", - "DEFAULT", - "CHECK_DATAPOINT", - "CHECK_HIERARCHY", - "COMPUTED", - "NON_NULL", - "NON_ZERO", - "PARTIAL_NULL", - "PARTIAL_ZERO", - "ALWAYS_NULL", - "ALWAYS_ZERO", - "COMPONENTS", - "ALL_MEASURES", - "SCALAR", - "COMPONENT", - "DATAPOINT_ON_VD", - "DATAPOINT_ON_VAR", - "HIERARCHICAL_ON_VD", - "HIERARCHICAL_ON_VAR", - "SET", - "LANGUAGE", - "INTEGER_CONSTANT", - "NUMBER_CONSTANT", - "BOOLEAN_CONSTANT", - "STRING_CONSTANT", - "IDENTIFIER", - "WS", - "EOL", - "ML_COMMENT", - "SL_COMMENT", - ] - - RULE_start = 0 - RULE_statement = 1 - RULE_expr = 2 - RULE_exprComponent = 3 - RULE_functionsComponents = 4 - RULE_functions = 5 - RULE_datasetClause = 6 - RULE_renameClause = 7 - RULE_aggrClause = 8 - RULE_filterClause = 9 - RULE_calcClause = 10 - RULE_keepOrDropClause = 11 - RULE_pivotOrUnpivotClause = 12 - RULE_customPivotClause = 13 - RULE_subspaceClause = 14 - RULE_joinOperators = 15 - RULE_defOperators = 16 - RULE_genericOperators = 17 - RULE_genericOperatorsComponent = 18 - RULE_parameterComponent = 19 - RULE_parameter = 20 - RULE_stringOperators = 21 - RULE_stringOperatorsComponent = 22 - RULE_numericOperators = 23 - RULE_numericOperatorsComponent = 24 - RULE_comparisonOperators = 25 - RULE_comparisonOperatorsComponent = 26 - RULE_timeOperators = 27 - RULE_timeOperatorsComponent = 28 - RULE_setOperators = 29 - RULE_hierarchyOperators = 30 - RULE_validationOperators = 31 - RULE_conditionalOperators = 32 - RULE_conditionalOperatorsComponent = 33 - RULE_aggrOperators = 34 - RULE_aggrOperatorsGrouping = 35 - RULE_anFunction = 36 - RULE_anFunctionComponent = 37 - RULE_renameClauseItem = 38 - RULE_aggregateClause = 39 - RULE_aggrFunctionClause = 40 - RULE_calcClauseItem = 41 - RULE_subspaceClauseItem = 42 - RULE_scalarItem = 43 - RULE_joinClauseWithoutUsing = 44 - RULE_joinClause = 45 - RULE_joinClauseItem = 46 - RULE_joinBody = 47 - RULE_joinApplyClause = 48 - RULE_partitionByClause = 49 - RULE_orderByClause = 50 - RULE_orderByItem = 51 - RULE_windowingClause = 52 - RULE_signedInteger = 53 - RULE_signedNumber = 54 - RULE_limitClauseItem = 55 - RULE_groupingClause = 56 - RULE_havingClause = 57 - RULE_parameterItem = 58 - RULE_outputParameterType = 59 - RULE_outputParameterTypeComponent = 60 - RULE_inputParameterType = 61 - RULE_rulesetType = 62 - RULE_scalarType = 63 - RULE_componentType = 64 - RULE_datasetType = 65 - RULE_evalDatasetType = 66 - RULE_scalarSetType = 67 - RULE_dpRuleset = 68 - RULE_hrRuleset = 69 - RULE_valueDomainName = 70 - RULE_rulesetID = 71 - RULE_rulesetSignature = 72 - RULE_signature = 73 - RULE_ruleClauseDatapoint = 74 - RULE_ruleItemDatapoint = 75 - RULE_ruleClauseHierarchical = 76 - RULE_ruleItemHierarchical = 77 - RULE_hierRuleSignature = 78 - RULE_valueDomainSignature = 79 - RULE_codeItemRelation = 80 - RULE_codeItemRelationClause = 81 - RULE_valueDomainValue = 82 - RULE_scalarTypeConstraint = 83 - RULE_compConstraint = 84 - RULE_multModifier = 85 - RULE_validationOutput = 86 - RULE_validationMode = 87 - RULE_conditionClause = 88 - RULE_inputMode = 89 - RULE_imbalanceExpr = 90 - RULE_inputModeHierarchy = 91 - RULE_outputModeHierarchy = 92 - RULE_alias = 93 - RULE_varID = 94 - RULE_simpleComponentId = 95 - RULE_componentID = 96 - RULE_lists = 97 - RULE_erCode = 98 - RULE_erLevel = 99 - RULE_comparisonOperand = 100 - RULE_optionalExpr = 101 - RULE_optionalExprComponent = 102 - RULE_componentRole = 103 - RULE_viralAttribute = 104 - RULE_valueDomainID = 105 - RULE_operatorID = 106 - RULE_routineName = 107 - RULE_constant = 108 - RULE_basicScalarType = 109 - RULE_retainType = 110 - - ruleNames = [ - "start", - "statement", - "expr", - "exprComponent", - "functionsComponents", - "functions", - "datasetClause", - "renameClause", - "aggrClause", - "filterClause", - "calcClause", - "keepOrDropClause", - "pivotOrUnpivotClause", - "customPivotClause", - "subspaceClause", - "joinOperators", - "defOperators", - "genericOperators", - "genericOperatorsComponent", - "parameterComponent", - "parameter", - "stringOperators", - "stringOperatorsComponent", - "numericOperators", - "numericOperatorsComponent", - "comparisonOperators", - "comparisonOperatorsComponent", - "timeOperators", - "timeOperatorsComponent", - "setOperators", - "hierarchyOperators", - "validationOperators", - "conditionalOperators", - "conditionalOperatorsComponent", - "aggrOperators", - "aggrOperatorsGrouping", - "anFunction", - "anFunctionComponent", - "renameClauseItem", - "aggregateClause", - "aggrFunctionClause", - "calcClauseItem", - "subspaceClauseItem", - "scalarItem", - "joinClauseWithoutUsing", - "joinClause", - "joinClauseItem", - "joinBody", - "joinApplyClause", - "partitionByClause", - "orderByClause", - "orderByItem", - "windowingClause", - "signedInteger", - "signedNumber", - "limitClauseItem", - "groupingClause", - "havingClause", - "parameterItem", - "outputParameterType", - "outputParameterTypeComponent", - "inputParameterType", - "rulesetType", - "scalarType", - "componentType", - "datasetType", - "evalDatasetType", - "scalarSetType", - "dpRuleset", - "hrRuleset", - "valueDomainName", - "rulesetID", - "rulesetSignature", - "signature", - "ruleClauseDatapoint", - "ruleItemDatapoint", - "ruleClauseHierarchical", - "ruleItemHierarchical", - "hierRuleSignature", - "valueDomainSignature", - "codeItemRelation", - "codeItemRelationClause", - "valueDomainValue", - "scalarTypeConstraint", - "compConstraint", - "multModifier", - "validationOutput", - "validationMode", - "conditionClause", - "inputMode", - "imbalanceExpr", - "inputModeHierarchy", - "outputModeHierarchy", - "alias", - "varID", - "simpleComponentId", - "componentID", - "lists", - "erCode", - "erLevel", - "comparisonOperand", - "optionalExpr", - "optionalExprComponent", - "componentRole", - "viralAttribute", - "valueDomainID", - "operatorID", - "routineName", - "constant", - "basicScalarType", - "retainType", - ] - - EOF = Token.EOF - LPAREN = 1 - RPAREN = 2 - QLPAREN = 3 - QRPAREN = 4 - GLPAREN = 5 - GRPAREN = 6 - EQ = 7 - LT = 8 - MT = 9 - ME = 10 - NEQ = 11 - LE = 12 - PLUS = 13 - MINUS = 14 - MUL = 15 - DIV = 16 - COMMA = 17 - POINTER = 18 - COLON = 19 - ASSIGN = 20 - MEMBERSHIP = 21 - EVAL = 22 - IF = 23 - CASE = 24 - THEN = 25 - ELSE = 26 - USING = 27 - WITH = 28 - CURRENT_DATE = 29 - DATEDIFF = 30 - DATEADD = 31 - YEAR_OP = 32 - MONTH_OP = 33 - DAYOFMONTH = 34 - DAYOFYEAR = 35 - DAYTOYEAR = 36 - DAYTOMONTH = 37 - YEARTODAY = 38 - MONTHTODAY = 39 - ON = 40 - DROP = 41 - KEEP = 42 - CALC = 43 - ATTRCALC = 44 - RENAME = 45 - AS = 46 - AND = 47 - OR = 48 - XOR = 49 - NOT = 50 - BETWEEN = 51 - IN = 52 - NOT_IN = 53 - NULL_CONSTANT = 54 - ISNULL = 55 - EX = 56 - UNION = 57 - DIFF = 58 - SYMDIFF = 59 - INTERSECT = 60 - RANDOM = 61 - KEYS = 62 - INTYEAR = 63 - INTMONTH = 64 - INTDAY = 65 - CHECK = 66 - EXISTS_IN = 67 - TO = 68 - RETURN = 69 - IMBALANCE = 70 - ERRORCODE = 71 - ALL = 72 - AGGREGATE = 73 - ERRORLEVEL = 74 - ORDER = 75 - BY = 76 - RANK = 77 - ASC = 78 - DESC = 79 - MIN = 80 - MAX = 81 - FIRST = 82 - LAST = 83 - INDEXOF = 84 - ABS = 85 - KEY = 86 - LN = 87 - LOG = 88 - TRUNC = 89 - ROUND = 90 - POWER = 91 - MOD = 92 - LEN = 93 - CONCAT = 94 - TRIM = 95 - UCASE = 96 - LCASE = 97 - SUBSTR = 98 - SUM = 99 - AVG = 100 - MEDIAN = 101 - COUNT = 102 - DIMENSION = 103 - MEASURE = 104 - ATTRIBUTE = 105 - FILTER = 106 - MERGE = 107 - EXP = 108 - ROLE = 109 - VIRAL = 110 - CHARSET_MATCH = 111 - TYPE = 112 - NVL = 113 - HIERARCHY = 114 - OPTIONAL = 115 - INVALID = 116 - VALUE_DOMAIN = 117 - VARIABLE = 118 - DATA = 119 - STRUCTURE = 120 - DATASET = 121 - OPERATOR = 122 - DEFINE = 123 - PUT_SYMBOL = 124 - DATAPOINT = 125 - HIERARCHICAL = 126 - RULESET = 127 - RULE = 128 - END = 129 - ALTER_DATASET = 130 - LTRIM = 131 - RTRIM = 132 - INSTR = 133 - REPLACE = 134 - CEIL = 135 - FLOOR = 136 - SQRT = 137 - ANY = 138 - SETDIFF = 139 - STDDEV_POP = 140 - STDDEV_SAMP = 141 - VAR_POP = 142 - VAR_SAMP = 143 - GROUP = 144 - EXCEPT = 145 - HAVING = 146 - FIRST_VALUE = 147 - LAST_VALUE = 148 - LAG = 149 - LEAD = 150 - RATIO_TO_REPORT = 151 - OVER = 152 - PRECEDING = 153 - FOLLOWING = 154 - UNBOUNDED = 155 - PARTITION = 156 - ROWS = 157 - RANGE = 158 - CURRENT = 159 - VALID = 160 - FILL_TIME_SERIES = 161 - FLOW_TO_STOCK = 162 - STOCK_TO_FLOW = 163 - TIMESHIFT = 164 - MEASURES = 165 - NO_MEASURES = 166 - CONDITION = 167 - BOOLEAN = 168 - DATE = 169 - TIME_PERIOD = 170 - NUMBER = 171 - STRING = 172 - TIME = 173 - INTEGER = 174 - FLOAT = 175 - LIST = 176 - RECORD = 177 - RESTRICT = 178 - YYYY = 179 - MM = 180 - DD = 181 - MAX_LENGTH = 182 - REGEXP = 183 - IS = 184 - WHEN = 185 - FROM = 186 - AGGREGATES = 187 - POINTS = 188 - POINT = 189 - TOTAL = 190 - PARTIAL = 191 - ALWAYS = 192 - INNER_JOIN = 193 - LEFT_JOIN = 194 - CROSS_JOIN = 195 - FULL_JOIN = 196 - MAPS_FROM = 197 - MAPS_TO = 198 - MAP_TO = 199 - MAP_FROM = 200 - RETURNS = 201 - PIVOT = 202 - CUSTOMPIVOT = 203 - UNPIVOT = 204 - SUBSPACE = 205 - APPLY = 206 - CONDITIONED = 207 - PERIOD_INDICATOR = 208 - SINGLE = 209 - DURATION = 210 - TIME_AGG = 211 - UNIT = 212 - VALUE = 213 - VALUEDOMAINS = 214 - VARIABLES = 215 - INPUT = 216 - OUTPUT = 217 - CAST = 218 - RULE_PRIORITY = 219 - DATASET_PRIORITY = 220 - DEFAULT = 221 - CHECK_DATAPOINT = 222 - CHECK_HIERARCHY = 223 - COMPUTED = 224 - NON_NULL = 225 - NON_ZERO = 226 - PARTIAL_NULL = 227 - PARTIAL_ZERO = 228 - ALWAYS_NULL = 229 - ALWAYS_ZERO = 230 - COMPONENTS = 231 - ALL_MEASURES = 232 - SCALAR = 233 - COMPONENT = 234 - DATAPOINT_ON_VD = 235 - DATAPOINT_ON_VAR = 236 - HIERARCHICAL_ON_VD = 237 - HIERARCHICAL_ON_VAR = 238 - SET = 239 - LANGUAGE = 240 - INTEGER_CONSTANT = 241 - NUMBER_CONSTANT = 242 - BOOLEAN_CONSTANT = 243 - STRING_CONSTANT = 244 - IDENTIFIER = 245 - WS = 246 - EOL = 247 - ML_COMMENT = 248 - SL_COMMENT = 249 - - def __init__(self, input: TokenStream, output: TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.9.3") - self._interp = ParserATNSimulator( - self, self.atn, self.decisionsToDFA, self.sharedContextCache - ) - self._predicates = None - - class StartContext(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(Parser.EOF, 0) - - def statement(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.StatementContext) - else: - return self.getTypedRuleContext(Parser.StatementContext, i) - - def EOL(self, i: int = None): - if i is None: - return self.getTokens(Parser.EOL) - else: - return self.getToken(Parser.EOL, i) - - def getRuleIndex(self): - return Parser.RULE_start - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitStart"): - return visitor.visitStart(self) - else: - return visitor.visitChildren(self) - - def start(self) -> Any: - - localctx = Parser.StartContext(self, self._ctx, self.state) - self.enterRule(localctx, 0, self.RULE_start) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 227 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.DEFINE or _la == Parser.IDENTIFIER: - self.state = 222 - self.statement() - self.state = 223 - self.match(Parser.EOL) - self.state = 229 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 230 - self.match(Parser.EOF) - 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 getRuleIndex(self): - return Parser.RULE_statement - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class DefineExpressionContext(StatementContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.StatementContext - super().__init__(parser) - self.copyFrom(ctx) - - def defOperators(self): - return self.getTypedRuleContext(Parser.DefOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDefineExpression"): - return visitor.visitDefineExpression(self) - else: - return visitor.visitChildren(self) - - class TemporaryAssignmentContext(StatementContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.StatementContext - super().__init__(parser) - self.copyFrom(ctx) - - def varID(self): - return self.getTypedRuleContext(Parser.VarIDContext, 0) - - def ASSIGN(self): - return self.getToken(Parser.ASSIGN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTemporaryAssignment"): - return visitor.visitTemporaryAssignment(self) - else: - return visitor.visitChildren(self) - - class PersistAssignmentContext(StatementContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.StatementContext - super().__init__(parser) - self.copyFrom(ctx) - - def varID(self): - return self.getTypedRuleContext(Parser.VarIDContext, 0) - - def PUT_SYMBOL(self): - return self.getToken(Parser.PUT_SYMBOL, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitPersistAssignment"): - return visitor.visitPersistAssignment(self) - else: - return visitor.visitChildren(self) - - def statement(self): - - localctx = Parser.StatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 2, self.RULE_statement) - try: - self.state = 241 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 1, self._ctx) - if la_ == 1: - localctx = Parser.TemporaryAssignmentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 232 - self.varID() - self.state = 233 - self.match(Parser.ASSIGN) - self.state = 234 - self.expr(0) - pass - - elif la_ == 2: - localctx = Parser.PersistAssignmentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 236 - self.varID() - self.state = 237 - self.match(Parser.PUT_SYMBOL) - self.state = 238 - self.expr(0) - pass - - elif la_ == 3: - localctx = Parser.DefineExpressionContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 240 - self.defOperators() - pass - - 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 getRuleIndex(self): - return Parser.RULE_expr - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class VarIdExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def varID(self): - return self.getTypedRuleContext(Parser.VarIDContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitVarIdExpr"): - return visitor.visitVarIdExpr(self) - else: - return visitor.visitChildren(self) - - class MembershipExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def MEMBERSHIP(self): - return self.getToken(Parser.MEMBERSHIP, 0) - - def simpleComponentId(self): - return self.getTypedRuleContext(Parser.SimpleComponentIdContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMembershipExpr"): - return visitor.visitMembershipExpr(self) - else: - return visitor.visitChildren(self) - - class InNotInExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.left = None # ExprContext - self.op = None # Token - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def IN(self): - return self.getToken(Parser.IN, 0) - - def NOT_IN(self): - return self.getToken(Parser.NOT_IN, 0) - - def lists(self): - return self.getTypedRuleContext(Parser.ListsContext, 0) - - def valueDomainID(self): - return self.getTypedRuleContext(Parser.ValueDomainIDContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInNotInExpr"): - return visitor.visitInNotInExpr(self) - else: - return visitor.visitChildren(self) - - class BooleanExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.left = None # ExprContext - self.op = None # Token - self.right = None # ExprContext - self.copyFrom(ctx) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def AND(self): - return self.getToken(Parser.AND, 0) - - def OR(self): - return self.getToken(Parser.OR, 0) - - def XOR(self): - return self.getToken(Parser.XOR, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBooleanExpr"): - return visitor.visitBooleanExpr(self) - else: - return visitor.visitChildren(self) - - class ComparisonExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.left = None # ExprContext - self.op = None # ComparisonOperandContext - self.right = None # ExprContext - self.copyFrom(ctx) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def comparisonOperand(self): - return self.getTypedRuleContext(Parser.ComparisonOperandContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComparisonExpr"): - return visitor.visitComparisonExpr(self) - else: - return visitor.visitChildren(self) - - class UnaryExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.op = None # Token - self.right = None # ExprContext - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def NOT(self): - return self.getToken(Parser.NOT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryExpr"): - return visitor.visitUnaryExpr(self) - else: - return visitor.visitChildren(self) - - class FunctionsExpressionContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def functions(self): - return self.getTypedRuleContext(Parser.FunctionsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFunctionsExpression"): - return visitor.visitFunctionsExpression(self) - else: - return visitor.visitChildren(self) - - class IfExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.conditionalExpr = None # ExprContext - self.thenExpr = None # ExprContext - self.elseExpr = None # ExprContext - self.copyFrom(ctx) - - def IF(self): - return self.getToken(Parser.IF, 0) - - def THEN(self): - return self.getToken(Parser.THEN, 0) - - def ELSE(self): - return self.getToken(Parser.ELSE, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIfExpr"): - return visitor.visitIfExpr(self) - else: - return visitor.visitChildren(self) - - class ClauseExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.dataset = None # ExprContext - self.clause = None # DatasetClauseContext - self.copyFrom(ctx) - - def QLPAREN(self): - return self.getToken(Parser.QLPAREN, 0) - - def QRPAREN(self): - return self.getToken(Parser.QRPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def datasetClause(self): - return self.getTypedRuleContext(Parser.DatasetClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitClauseExpr"): - return visitor.visitClauseExpr(self) - else: - return visitor.visitChildren(self) - - class CaseExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self._expr = None # ExprContext - self.condExpr = [] # of ExprContexts - self.thenExpr = [] # of ExprContexts - self.elseExpr = None # ExprContext - self.copyFrom(ctx) - - def CASE(self): - return self.getToken(Parser.CASE, 0) - - def ELSE(self): - return self.getToken(Parser.ELSE, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def WHEN(self, i: int = None): - if i is None: - return self.getTokens(Parser.WHEN) - else: - return self.getToken(Parser.WHEN, i) - - def THEN(self, i: int = None): - if i is None: - return self.getTokens(Parser.THEN) - else: - return self.getToken(Parser.THEN, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCaseExpr"): - return visitor.visitCaseExpr(self) - else: - return visitor.visitChildren(self) - - class ArithmeticExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.left = None # ExprContext - self.op = None # Token - self.right = None # ExprContext - self.copyFrom(ctx) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def MUL(self): - return self.getToken(Parser.MUL, 0) - - def DIV(self): - return self.getToken(Parser.DIV, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitArithmeticExpr"): - return visitor.visitArithmeticExpr(self) - else: - return visitor.visitChildren(self) - - class ParenthesisExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitParenthesisExpr"): - return visitor.visitParenthesisExpr(self) - else: - return visitor.visitChildren(self) - - class ConstantExprContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConstantExpr"): - return visitor.visitConstantExpr(self) - else: - return visitor.visitChildren(self) - - class ArithmeticExprOrConcatContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ExprContext - super().__init__(parser) - self.left = None # ExprContext - self.op = None # Token - self.right = None # ExprContext - self.copyFrom(ctx) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def CONCAT(self): - return self.getToken(Parser.CONCAT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitArithmeticExprOrConcat"): - return visitor.visitArithmeticExprOrConcat(self) - else: - return visitor.visitChildren(self) - - def expr(self, _p: int = 0): - _parentctx = self._ctx - _parentState = self.state - localctx = Parser.ExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 4 - self.enterRecursionRule(localctx, 4, self.RULE_expr, _p) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 273 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 3, self._ctx) - if la_ == 1: - localctx = Parser.ParenthesisExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 244 - self.match(Parser.LPAREN) - self.state = 245 - self.expr(0) - self.state = 246 - self.match(Parser.RPAREN) - pass - - elif la_ == 2: - localctx = Parser.FunctionsExpressionContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 248 - self.functions() - pass - - elif la_ == 3: - localctx = Parser.UnaryExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 249 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) & ((1 << Parser.PLUS) | (1 << Parser.MINUS) | (1 << Parser.NOT)) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 250 - localctx.right = self.expr(11) - pass - - elif la_ == 4: - localctx = Parser.IfExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 251 - self.match(Parser.IF) - self.state = 252 - localctx.conditionalExpr = self.expr(0) - self.state = 253 - self.match(Parser.THEN) - self.state = 254 - localctx.thenExpr = self.expr(0) - self.state = 255 - self.match(Parser.ELSE) - self.state = 256 - localctx.elseExpr = self.expr(4) - pass - - elif la_ == 5: - localctx = Parser.CaseExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 258 - self.match(Parser.CASE) - self.state = 264 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 259 - self.match(Parser.WHEN) - self.state = 260 - localctx._expr = self.expr(0) - localctx.condExpr.append(localctx._expr) - self.state = 261 - self.match(Parser.THEN) - self.state = 262 - localctx._expr = self.expr(0) - localctx.thenExpr.append(localctx._expr) - self.state = 266 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la != Parser.WHEN: - break - - self.state = 268 - self.match(Parser.ELSE) - self.state = 269 - localctx.elseExpr = self.expr(3) - pass - - elif la_ == 6: - localctx = Parser.ConstantExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 271 - self.constant() - pass - - elif la_ == 7: - localctx = Parser.VarIdExprContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 272 - self.varID() - pass - - self._ctx.stop = self._input.LT(-1) - self.state = 307 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 6, 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 = 305 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 5, self._ctx) - if la_ == 1: - localctx = Parser.ArithmeticExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 275 - if not self.precpred(self._ctx, 10): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 276 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.MUL or _la == Parser.DIV): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 277 - localctx.right = self.expr(11) - pass - - elif la_ == 2: - localctx = Parser.ArithmeticExprOrConcatContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 278 - if not self.precpred(self._ctx, 9): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 279 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MINUS or _la == Parser.CONCAT): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 280 - localctx.right = self.expr(10) - pass - - elif la_ == 3: - localctx = Parser.ComparisonExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 281 - if not self.precpred(self._ctx, 8): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 282 - localctx.op = self.comparisonOperand() - self.state = 283 - localctx.right = self.expr(9) - pass - - elif la_ == 4: - localctx = Parser.BooleanExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 285 - if not self.precpred(self._ctx, 6): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 286 - localctx.op = self.match(Parser.AND) - self.state = 287 - localctx.right = self.expr(7) - pass - - elif la_ == 5: - localctx = Parser.BooleanExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 288 - if not self.precpred(self._ctx, 5): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 289 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.OR or _la == Parser.XOR): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 290 - localctx.right = self.expr(6) - pass - - elif la_ == 6: - localctx = Parser.ClauseExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.dataset = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 291 - if not self.precpred(self._ctx, 13): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 292 - self.match(Parser.QLPAREN) - self.state = 293 - localctx.clause = self.datasetClause() - self.state = 294 - self.match(Parser.QRPAREN) - pass - - elif la_ == 7: - localctx = Parser.MembershipExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 296 - if not self.precpred(self._ctx, 12): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") - self.state = 297 - self.match(Parser.MEMBERSHIP) - self.state = 298 - self.simpleComponentId() - pass - - elif la_ == 8: - localctx = Parser.InNotInExprContext( - self, Parser.ExprContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 299 - if not self.precpred(self._ctx, 7): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 300 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.IN or _la == Parser.NOT_IN): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 303 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.GLPAREN]: - self.state = 301 - self.lists() - pass - elif token in [Parser.IDENTIFIER]: - self.state = 302 - self.valueDomainID() - pass - else: - raise NoViableAltException(self) - - pass - - self.state = 309 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 6, 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 ExprComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_exprComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class ArithmeticExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.op = None # Token - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def MUL(self): - return self.getToken(Parser.MUL, 0) - - def DIV(self): - return self.getToken(Parser.DIV, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitArithmeticExprComp"): - return visitor.visitArithmeticExprComp(self) - else: - return visitor.visitChildren(self) - - class IfExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.conditionalExpr = None # ExprComponentContext - self.thenExpr = None # ExprComponentContext - self.elseExpr = None # ExprComponentContext - self.copyFrom(ctx) - - def IF(self): - return self.getToken(Parser.IF, 0) - - def THEN(self): - return self.getToken(Parser.THEN, 0) - - def ELSE(self): - return self.getToken(Parser.ELSE, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIfExprComp"): - return visitor.visitIfExprComp(self) - else: - return visitor.visitChildren(self) - - class ComparisonExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def comparisonOperand(self): - return self.getTypedRuleContext(Parser.ComparisonOperandContext, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComparisonExprComp"): - return visitor.visitComparisonExprComp(self) - else: - return visitor.visitChildren(self) - - class FunctionsExpressionCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def functionsComponents(self): - return self.getTypedRuleContext(Parser.FunctionsComponentsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFunctionsExpressionComp"): - return visitor.visitFunctionsExpressionComp(self) - else: - return visitor.visitChildren(self) - - class CompIdContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCompId"): - return visitor.visitCompId(self) - else: - return visitor.visitChildren(self) - - class ConstantExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConstantExprComp"): - return visitor.visitConstantExprComp(self) - else: - return visitor.visitChildren(self) - - class ArithmeticExprOrConcatCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.op = None # Token - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def CONCAT(self): - return self.getToken(Parser.CONCAT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitArithmeticExprOrConcatComp"): - return visitor.visitArithmeticExprOrConcatComp(self) - else: - return visitor.visitChildren(self) - - class ParenthesisExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitParenthesisExprComp"): - return visitor.visitParenthesisExprComp(self) - else: - return visitor.visitChildren(self) - - class InNotInExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.op = None # Token - self.copyFrom(ctx) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def IN(self): - return self.getToken(Parser.IN, 0) - - def NOT_IN(self): - return self.getToken(Parser.NOT_IN, 0) - - def lists(self): - return self.getTypedRuleContext(Parser.ListsContext, 0) - - def valueDomainID(self): - return self.getTypedRuleContext(Parser.ValueDomainIDContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInNotInExprComp"): - return visitor.visitInNotInExprComp(self) - else: - return visitor.visitChildren(self) - - class UnaryExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.op = None # Token - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def NOT(self): - return self.getToken(Parser.NOT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryExprComp"): - return visitor.visitUnaryExprComp(self) - else: - return visitor.visitChildren(self) - - class CaseExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self._exprComponent = None # ExprComponentContext - self.condExpr = [] # of ExprComponentContexts - self.thenExpr = [] # of ExprComponentContexts - self.elseExpr = None # ExprComponentContext - self.copyFrom(ctx) - - def CASE(self): - return self.getToken(Parser.CASE, 0) - - def ELSE(self): - return self.getToken(Parser.ELSE, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def WHEN(self, i: int = None): - if i is None: - return self.getTokens(Parser.WHEN) - else: - return self.getToken(Parser.WHEN, i) - - def THEN(self, i: int = None): - if i is None: - return self.getTokens(Parser.THEN) - else: - return self.getToken(Parser.THEN, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCaseExprComp"): - return visitor.visitCaseExprComp(self) - else: - return visitor.visitChildren(self) - - class BooleanExprCompContext(ExprComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ExprComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.op = None # Token - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def AND(self): - return self.getToken(Parser.AND, 0) - - def OR(self): - return self.getToken(Parser.OR, 0) - - def XOR(self): - return self.getToken(Parser.XOR, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBooleanExprComp"): - return visitor.visitBooleanExprComp(self) - else: - return visitor.visitChildren(self) - - def exprComponent(self, _p: int = 0): - _parentctx = self._ctx - _parentState = self.state - localctx = Parser.ExprComponentContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 6 - self.enterRecursionRule(localctx, 6, self.RULE_exprComponent, _p) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 340 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 8, self._ctx) - if la_ == 1: - localctx = Parser.ParenthesisExprCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 311 - self.match(Parser.LPAREN) - self.state = 312 - self.exprComponent(0) - self.state = 313 - self.match(Parser.RPAREN) - pass - - elif la_ == 2: - localctx = Parser.FunctionsExpressionCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 315 - self.functionsComponents() - pass - - elif la_ == 3: - localctx = Parser.UnaryExprCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 316 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) & ((1 << Parser.PLUS) | (1 << Parser.MINUS) | (1 << Parser.NOT)) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 317 - localctx.right = self.exprComponent(11) - pass - - elif la_ == 4: - localctx = Parser.IfExprCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 318 - self.match(Parser.IF) - self.state = 319 - localctx.conditionalExpr = self.exprComponent(0) - self.state = 320 - self.match(Parser.THEN) - self.state = 321 - localctx.thenExpr = self.exprComponent(0) - self.state = 322 - self.match(Parser.ELSE) - self.state = 323 - localctx.elseExpr = self.exprComponent(4) - pass - - elif la_ == 5: - localctx = Parser.CaseExprCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 325 - self.match(Parser.CASE) - self.state = 331 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 326 - self.match(Parser.WHEN) - self.state = 327 - localctx._exprComponent = self.exprComponent(0) - localctx.condExpr.append(localctx._exprComponent) - self.state = 328 - self.match(Parser.THEN) - self.state = 329 - localctx._exprComponent = self.exprComponent(0) - localctx.thenExpr.append(localctx._exprComponent) - self.state = 333 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la != Parser.WHEN: - break - - self.state = 335 - self.match(Parser.ELSE) - self.state = 336 - localctx.elseExpr = self.exprComponent(3) - pass - - elif la_ == 6: - localctx = Parser.ConstantExprCompContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 338 - self.constant() - pass - - elif la_ == 7: - localctx = Parser.CompIdContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 339 - self.componentID() - pass - - self._ctx.stop = self._input.LT(-1) - self.state = 366 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 11, 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 = 364 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 10, self._ctx) - if la_ == 1: - localctx = Parser.ArithmeticExprCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 342 - if not self.precpred(self._ctx, 10): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 343 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.MUL or _la == Parser.DIV): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 344 - localctx.right = self.exprComponent(11) - pass - - elif la_ == 2: - localctx = Parser.ArithmeticExprOrConcatCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 345 - if not self.precpred(self._ctx, 9): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 346 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MINUS or _la == Parser.CONCAT): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 347 - localctx.right = self.exprComponent(10) - pass - - elif la_ == 3: - localctx = Parser.ComparisonExprCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 348 - if not self.precpred(self._ctx, 8): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 349 - self.comparisonOperand() - self.state = 350 - localctx.right = self.exprComponent(9) - pass - - elif la_ == 4: - localctx = Parser.BooleanExprCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 352 - if not self.precpred(self._ctx, 6): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 353 - localctx.op = self.match(Parser.AND) - self.state = 354 - localctx.right = self.exprComponent(7) - pass - - elif la_ == 5: - localctx = Parser.BooleanExprCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 355 - if not self.precpred(self._ctx, 5): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 356 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.OR or _la == Parser.XOR): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 357 - localctx.right = self.exprComponent(6) - pass - - elif la_ == 6: - localctx = Parser.InNotInExprCompContext( - self, Parser.ExprComponentContext(self, _parentctx, _parentState) - ) - localctx.left = _prevctx - self.pushNewRecursionContext(localctx, _startState, self.RULE_exprComponent) - self.state = 358 - if not self.precpred(self._ctx, 7): - from antlr4.error.Errors import FailedPredicateException - - raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 359 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.IN or _la == Parser.NOT_IN): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 362 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.GLPAREN]: - self.state = 360 - self.lists() - pass - elif token in [Parser.IDENTIFIER]: - self.state = 361 - self.valueDomainID() - pass - else: - raise NoViableAltException(self) - - pass - - self.state = 368 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 11, 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 FunctionsComponentsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_functionsComponents - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class NumericFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def numericOperatorsComponent(self): - return self.getTypedRuleContext(Parser.NumericOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNumericFunctionsComponents"): - return visitor.visitNumericFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class StringFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def stringOperatorsComponent(self): - return self.getTypedRuleContext(Parser.StringOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitStringFunctionsComponents"): - return visitor.visitStringFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class ComparisonFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def comparisonOperatorsComponent(self): - return self.getTypedRuleContext(Parser.ComparisonOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComparisonFunctionsComponents"): - return visitor.visitComparisonFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class TimeFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def timeOperatorsComponent(self): - return self.getTypedRuleContext(Parser.TimeOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeFunctionsComponents"): - return visitor.visitTimeFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class GenericFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def genericOperatorsComponent(self): - return self.getTypedRuleContext(Parser.GenericOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitGenericFunctionsComponents"): - return visitor.visitGenericFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class AnalyticFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def anFunctionComponent(self): - return self.getTypedRuleContext(Parser.AnFunctionComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAnalyticFunctionsComponents"): - return visitor.visitAnalyticFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class ConditionalFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def conditionalOperatorsComponent(self): - return self.getTypedRuleContext(Parser.ConditionalOperatorsComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConditionalFunctionsComponents"): - return visitor.visitConditionalFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - class AggregateFunctionsComponentsContext(FunctionsComponentsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.FunctionsComponentsContext - super().__init__(parser) - self.copyFrom(ctx) - - def aggrOperators(self): - return self.getTypedRuleContext(Parser.AggrOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggregateFunctionsComponents"): - return visitor.visitAggregateFunctionsComponents(self) - else: - return visitor.visitChildren(self) - - def functionsComponents(self): - - localctx = Parser.FunctionsComponentsContext(self, self._ctx, self.state) - self.enterRule(localctx, 8, self.RULE_functionsComponents) - try: - self.state = 377 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 12, self._ctx) - if la_ == 1: - localctx = Parser.GenericFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 369 - self.genericOperatorsComponent() - pass - - elif la_ == 2: - localctx = Parser.StringFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 370 - self.stringOperatorsComponent() - pass - - elif la_ == 3: - localctx = Parser.NumericFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 371 - self.numericOperatorsComponent() - pass - - elif la_ == 4: - localctx = Parser.ComparisonFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 372 - self.comparisonOperatorsComponent() - pass - - elif la_ == 5: - localctx = Parser.TimeFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 373 - self.timeOperatorsComponent() - pass - - elif la_ == 6: - localctx = Parser.ConditionalFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 374 - self.conditionalOperatorsComponent() - pass - - elif la_ == 7: - localctx = Parser.AggregateFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 375 - self.aggrOperators() - pass - - elif la_ == 8: - localctx = Parser.AnalyticFunctionsComponentsContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 376 - self.anFunctionComponent() - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class FunctionsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_functions - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class HierarchyFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def hierarchyOperators(self): - return self.getTypedRuleContext(Parser.HierarchyOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHierarchyFunctions"): - return visitor.visitHierarchyFunctions(self) - else: - return visitor.visitChildren(self) - - class StringFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def stringOperators(self): - return self.getTypedRuleContext(Parser.StringOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitStringFunctions"): - return visitor.visitStringFunctions(self) - else: - return visitor.visitChildren(self) - - class ValidationFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def validationOperators(self): - return self.getTypedRuleContext(Parser.ValidationOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidationFunctions"): - return visitor.visitValidationFunctions(self) - else: - return visitor.visitChildren(self) - - class GenericFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def genericOperators(self): - return self.getTypedRuleContext(Parser.GenericOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitGenericFunctions"): - return visitor.visitGenericFunctions(self) - else: - return visitor.visitChildren(self) - - class ConditionalFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def conditionalOperators(self): - return self.getTypedRuleContext(Parser.ConditionalOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConditionalFunctions"): - return visitor.visitConditionalFunctions(self) - else: - return visitor.visitChildren(self) - - class AggregateFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def aggrOperatorsGrouping(self): - return self.getTypedRuleContext(Parser.AggrOperatorsGroupingContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggregateFunctions"): - return visitor.visitAggregateFunctions(self) - else: - return visitor.visitChildren(self) - - class JoinFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def joinOperators(self): - return self.getTypedRuleContext(Parser.JoinOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinFunctions"): - return visitor.visitJoinFunctions(self) - else: - return visitor.visitChildren(self) - - class ComparisonFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def comparisonOperators(self): - return self.getTypedRuleContext(Parser.ComparisonOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComparisonFunctions"): - return visitor.visitComparisonFunctions(self) - else: - return visitor.visitChildren(self) - - class NumericFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def numericOperators(self): - return self.getTypedRuleContext(Parser.NumericOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNumericFunctions"): - return visitor.visitNumericFunctions(self) - else: - return visitor.visitChildren(self) - - class TimeFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def timeOperators(self): - return self.getTypedRuleContext(Parser.TimeOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeFunctions"): - return visitor.visitTimeFunctions(self) - else: - return visitor.visitChildren(self) - - class SetFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def setOperators(self): - return self.getTypedRuleContext(Parser.SetOperatorsContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSetFunctions"): - return visitor.visitSetFunctions(self) - else: - return visitor.visitChildren(self) - - class AnalyticFunctionsContext(FunctionsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.FunctionsContext - super().__init__(parser) - self.copyFrom(ctx) - - def anFunction(self): - return self.getTypedRuleContext(Parser.AnFunctionContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAnalyticFunctions"): - return visitor.visitAnalyticFunctions(self) - else: - return visitor.visitChildren(self) - - def functions(self): - - localctx = Parser.FunctionsContext(self, self._ctx, self.state) - self.enterRule(localctx, 10, self.RULE_functions) - try: - self.state = 391 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 13, self._ctx) - if la_ == 1: - localctx = Parser.JoinFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 379 - self.joinOperators() - pass - - elif la_ == 2: - localctx = Parser.GenericFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 380 - self.genericOperators() - pass - - elif la_ == 3: - localctx = Parser.StringFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 381 - self.stringOperators() - pass - - elif la_ == 4: - localctx = Parser.NumericFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 382 - self.numericOperators() - pass - - elif la_ == 5: - localctx = Parser.ComparisonFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 383 - self.comparisonOperators() - pass - - elif la_ == 6: - localctx = Parser.TimeFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 384 - self.timeOperators() - pass - - elif la_ == 7: - localctx = Parser.SetFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 385 - self.setOperators() - pass - - elif la_ == 8: - localctx = Parser.HierarchyFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 386 - self.hierarchyOperators() - pass - - elif la_ == 9: - localctx = Parser.ValidationFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 387 - self.validationOperators() - pass - - elif la_ == 10: - localctx = Parser.ConditionalFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 388 - self.conditionalOperators() - pass - - elif la_ == 11: - localctx = Parser.AggregateFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 389 - self.aggrOperatorsGrouping() - pass - - elif la_ == 12: - localctx = Parser.AnalyticFunctionsContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 390 - self.anFunction() - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class DatasetClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def renameClause(self): - return self.getTypedRuleContext(Parser.RenameClauseContext, 0) - - def aggrClause(self): - return self.getTypedRuleContext(Parser.AggrClauseContext, 0) - - def filterClause(self): - return self.getTypedRuleContext(Parser.FilterClauseContext, 0) - - def calcClause(self): - return self.getTypedRuleContext(Parser.CalcClauseContext, 0) - - def keepOrDropClause(self): - return self.getTypedRuleContext(Parser.KeepOrDropClauseContext, 0) - - def pivotOrUnpivotClause(self): - return self.getTypedRuleContext(Parser.PivotOrUnpivotClauseContext, 0) - - def subspaceClause(self): - return self.getTypedRuleContext(Parser.SubspaceClauseContext, 0) - - def getRuleIndex(self): - return Parser.RULE_datasetClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDatasetClause"): - return visitor.visitDatasetClause(self) - else: - return visitor.visitChildren(self) - - def datasetClause(self): - - localctx = Parser.DatasetClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_datasetClause) - try: - self.state = 400 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.RENAME]: - self.enterOuterAlt(localctx, 1) - self.state = 393 - self.renameClause() - pass - elif token in [Parser.AGGREGATE]: - self.enterOuterAlt(localctx, 2) - self.state = 394 - self.aggrClause() - pass - elif token in [Parser.FILTER]: - self.enterOuterAlt(localctx, 3) - self.state = 395 - self.filterClause() - pass - elif token in [Parser.CALC]: - self.enterOuterAlt(localctx, 4) - self.state = 396 - self.calcClause() - pass - elif token in [Parser.DROP, Parser.KEEP]: - self.enterOuterAlt(localctx, 5) - self.state = 397 - self.keepOrDropClause() - pass - elif token in [Parser.PIVOT, Parser.UNPIVOT]: - self.enterOuterAlt(localctx, 6) - self.state = 398 - self.pivotOrUnpivotClause() - pass - elif token in [Parser.SUBSPACE]: - self.enterOuterAlt(localctx, 7) - self.state = 399 - self.subspaceClause() - 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 RenameClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def RENAME(self): - return self.getToken(Parser.RENAME, 0) - - def renameClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.RenameClauseItemContext) - else: - return self.getTypedRuleContext(Parser.RenameClauseItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_renameClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRenameClause"): - return visitor.visitRenameClause(self) - else: - return visitor.visitChildren(self) - - def renameClause(self): - - localctx = Parser.RenameClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_renameClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 402 - self.match(Parser.RENAME) - self.state = 403 - self.renameClauseItem() - self.state = 408 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 404 - self.match(Parser.COMMA) - self.state = 405 - self.renameClauseItem() - self.state = 410 - 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 AggrClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def AGGREGATE(self): - return self.getToken(Parser.AGGREGATE, 0) - - def aggregateClause(self): - return self.getTypedRuleContext(Parser.AggregateClauseContext, 0) - - def groupingClause(self): - return self.getTypedRuleContext(Parser.GroupingClauseContext, 0) - - def havingClause(self): - return self.getTypedRuleContext(Parser.HavingClauseContext, 0) - - def getRuleIndex(self): - return Parser.RULE_aggrClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggrClause"): - return visitor.visitAggrClause(self) - else: - return visitor.visitChildren(self) - - def aggrClause(self): - - localctx = Parser.AggrClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_aggrClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 411 - self.match(Parser.AGGREGATE) - self.state = 412 - self.aggregateClause() - self.state = 417 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GROUP: - self.state = 413 - self.groupingClause() - self.state = 415 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.HAVING: - self.state = 414 - self.havingClause() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class FilterClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def FILTER(self): - return self.getToken(Parser.FILTER, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def getRuleIndex(self): - return Parser.RULE_filterClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFilterClause"): - return visitor.visitFilterClause(self) - else: - return visitor.visitChildren(self) - - def filterClause(self): - - localctx = Parser.FilterClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_filterClause) - try: - self.enterOuterAlt(localctx, 1) - self.state = 419 - self.match(Parser.FILTER) - self.state = 420 - self.exprComponent(0) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class CalcClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def CALC(self): - return self.getToken(Parser.CALC, 0) - - def calcClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.CalcClauseItemContext) - else: - return self.getTypedRuleContext(Parser.CalcClauseItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_calcClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCalcClause"): - return visitor.visitCalcClause(self) - else: - return visitor.visitChildren(self) - - def calcClause(self): - - localctx = Parser.CalcClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_calcClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 422 - self.match(Parser.CALC) - self.state = 423 - self.calcClauseItem() - self.state = 428 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 424 - self.match(Parser.COMMA) - self.state = 425 - self.calcClauseItem() - self.state = 430 - 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 KeepOrDropClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.op = None # Token - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def KEEP(self): - return self.getToken(Parser.KEEP, 0) - - def DROP(self): - return self.getToken(Parser.DROP, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_keepOrDropClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitKeepOrDropClause"): - return visitor.visitKeepOrDropClause(self) - else: - return visitor.visitChildren(self) - - def keepOrDropClause(self): - - localctx = Parser.KeepOrDropClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_keepOrDropClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 431 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.DROP or _la == Parser.KEEP): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 432 - self.componentID() - self.state = 437 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 433 - self.match(Parser.COMMA) - self.state = 434 - self.componentID() - self.state = 439 - 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 PivotOrUnpivotClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.op = None # Token - self.id_ = None # ComponentIDContext - self.mea = None # ComponentIDContext - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def PIVOT(self): - return self.getToken(Parser.PIVOT, 0) - - def UNPIVOT(self): - return self.getToken(Parser.UNPIVOT, 0) - - def getRuleIndex(self): - return Parser.RULE_pivotOrUnpivotClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitPivotOrUnpivotClause"): - return visitor.visitPivotOrUnpivotClause(self) - else: - return visitor.visitChildren(self) - - def pivotOrUnpivotClause(self): - - localctx = Parser.PivotOrUnpivotClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_pivotOrUnpivotClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 440 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.PIVOT or _la == Parser.UNPIVOT): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 441 - localctx.id_ = self.componentID() - self.state = 442 - self.match(Parser.COMMA) - self.state = 443 - localctx.mea = self.componentID() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class CustomPivotClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.id_ = None # ComponentIDContext - self.mea = None # ComponentIDContext - - def CUSTOMPIVOT(self): - return self.getToken(Parser.CUSTOMPIVOT, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def IN(self): - return self.getToken(Parser.IN, 0) - - def constant(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ConstantContext) - else: - return self.getTypedRuleContext(Parser.ConstantContext, i) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def getRuleIndex(self): - return Parser.RULE_customPivotClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCustomPivotClause"): - return visitor.visitCustomPivotClause(self) - else: - return visitor.visitChildren(self) - - def customPivotClause(self): - - localctx = Parser.CustomPivotClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_customPivotClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 445 - self.match(Parser.CUSTOMPIVOT) - self.state = 446 - localctx.id_ = self.componentID() - self.state = 447 - self.match(Parser.COMMA) - self.state = 448 - localctx.mea = self.componentID() - self.state = 449 - self.match(Parser.IN) - self.state = 450 - self.constant() - self.state = 455 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 451 - self.match(Parser.COMMA) - self.state = 452 - self.constant() - self.state = 457 - 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 SubspaceClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def SUBSPACE(self): - return self.getToken(Parser.SUBSPACE, 0) - - def subspaceClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.SubspaceClauseItemContext) - else: - return self.getTypedRuleContext(Parser.SubspaceClauseItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_subspaceClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSubspaceClause"): - return visitor.visitSubspaceClause(self) - else: - return visitor.visitChildren(self) - - def subspaceClause(self): - - localctx = Parser.SubspaceClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_subspaceClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 458 - self.match(Parser.SUBSPACE) - self.state = 459 - self.subspaceClauseItem() - self.state = 464 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 460 - self.match(Parser.COMMA) - self.state = 461 - self.subspaceClauseItem() - self.state = 466 - 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 JoinOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_joinOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class JoinExprContext(JoinOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.JoinOperatorsContext - super().__init__(parser) - self.joinKeyword = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def joinClause(self): - return self.getTypedRuleContext(Parser.JoinClauseContext, 0) - - def joinBody(self): - return self.getTypedRuleContext(Parser.JoinBodyContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def INNER_JOIN(self): - return self.getToken(Parser.INNER_JOIN, 0) - - def LEFT_JOIN(self): - return self.getToken(Parser.LEFT_JOIN, 0) - - def joinClauseWithoutUsing(self): - return self.getTypedRuleContext(Parser.JoinClauseWithoutUsingContext, 0) - - def FULL_JOIN(self): - return self.getToken(Parser.FULL_JOIN, 0) - - def CROSS_JOIN(self): - return self.getToken(Parser.CROSS_JOIN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinExpr"): - return visitor.visitJoinExpr(self) - else: - return visitor.visitChildren(self) - - def joinOperators(self): - - localctx = Parser.JoinOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 30, self.RULE_joinOperators) - self._la = 0 # Token type - try: - self.state = 479 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.INNER_JOIN, Parser.LEFT_JOIN]: - localctx = Parser.JoinExprContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 467 - localctx.joinKeyword = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.INNER_JOIN or _la == Parser.LEFT_JOIN): - localctx.joinKeyword = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 468 - self.match(Parser.LPAREN) - self.state = 469 - self.joinClause() - self.state = 470 - self.joinBody() - self.state = 471 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CROSS_JOIN, Parser.FULL_JOIN]: - localctx = Parser.JoinExprContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 473 - localctx.joinKeyword = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.CROSS_JOIN or _la == Parser.FULL_JOIN): - localctx.joinKeyword = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 474 - self.match(Parser.LPAREN) - self.state = 475 - self.joinClauseWithoutUsing() - self.state = 476 - self.joinBody() - self.state = 477 - self.match(Parser.RPAREN) - 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 DefOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_defOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class DefOperatorContext(DefOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DefOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DEFINE(self): - return self.getToken(Parser.DEFINE, 0) - - def OPERATOR(self, i: int = None): - if i is None: - return self.getTokens(Parser.OPERATOR) - else: - return self.getToken(Parser.OPERATOR, i) - - def operatorID(self): - return self.getTypedRuleContext(Parser.OperatorIDContext, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def IS(self): - return self.getToken(Parser.IS, 0) - - def END(self): - return self.getToken(Parser.END, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def parameterItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ParameterItemContext) - else: - return self.getTypedRuleContext(Parser.ParameterItemContext, i) - - def RETURNS(self): - return self.getToken(Parser.RETURNS, 0) - - def outputParameterType(self): - return self.getTypedRuleContext(Parser.OutputParameterTypeContext, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDefOperator"): - return visitor.visitDefOperator(self) - else: - return visitor.visitChildren(self) - - class DefHierarchicalContext(DefOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DefOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DEFINE(self): - return self.getToken(Parser.DEFINE, 0) - - def HIERARCHICAL(self, i: int = None): - if i is None: - return self.getTokens(Parser.HIERARCHICAL) - else: - return self.getToken(Parser.HIERARCHICAL, i) - - def RULESET(self, i: int = None): - if i is None: - return self.getTokens(Parser.RULESET) - else: - return self.getToken(Parser.RULESET, i) - - def rulesetID(self): - return self.getTypedRuleContext(Parser.RulesetIDContext, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def hierRuleSignature(self): - return self.getTypedRuleContext(Parser.HierRuleSignatureContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def IS(self): - return self.getToken(Parser.IS, 0) - - def ruleClauseHierarchical(self): - return self.getTypedRuleContext(Parser.RuleClauseHierarchicalContext, 0) - - def END(self): - return self.getToken(Parser.END, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDefHierarchical"): - return visitor.visitDefHierarchical(self) - else: - return visitor.visitChildren(self) - - class DefDatapointRulesetContext(DefOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DefOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DEFINE(self): - return self.getToken(Parser.DEFINE, 0) - - def DATAPOINT(self, i: int = None): - if i is None: - return self.getTokens(Parser.DATAPOINT) - else: - return self.getToken(Parser.DATAPOINT, i) - - def RULESET(self, i: int = None): - if i is None: - return self.getTokens(Parser.RULESET) - else: - return self.getToken(Parser.RULESET, i) - - def rulesetID(self): - return self.getTypedRuleContext(Parser.RulesetIDContext, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def rulesetSignature(self): - return self.getTypedRuleContext(Parser.RulesetSignatureContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def IS(self): - return self.getToken(Parser.IS, 0) - - def ruleClauseDatapoint(self): - return self.getTypedRuleContext(Parser.RuleClauseDatapointContext, 0) - - def END(self): - return self.getToken(Parser.END, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDefDatapointRuleset"): - return visitor.visitDefDatapointRuleset(self) - else: - return visitor.visitChildren(self) - - def defOperators(self): - - localctx = Parser.DefOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 32, self.RULE_defOperators) - self._la = 0 # Token type - try: - self.state = 531 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 26, self._ctx) - if la_ == 1: - localctx = Parser.DefOperatorContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 481 - self.match(Parser.DEFINE) - self.state = 482 - self.match(Parser.OPERATOR) - self.state = 483 - self.operatorID() - self.state = 484 - self.match(Parser.LPAREN) - self.state = 493 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.IDENTIFIER: - self.state = 485 - self.parameterItem() - self.state = 490 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 486 - self.match(Parser.COMMA) - self.state = 487 - self.parameterItem() - self.state = 492 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 495 - self.match(Parser.RPAREN) - self.state = 498 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.RETURNS: - self.state = 496 - self.match(Parser.RETURNS) - self.state = 497 - self.outputParameterType() - - self.state = 500 - self.match(Parser.IS) - - self.state = 501 - self.expr(0) - self.state = 502 - self.match(Parser.END) - self.state = 503 - self.match(Parser.OPERATOR) - pass - - elif la_ == 2: - localctx = Parser.DefDatapointRulesetContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 505 - self.match(Parser.DEFINE) - self.state = 506 - self.match(Parser.DATAPOINT) - self.state = 507 - self.match(Parser.RULESET) - self.state = 508 - self.rulesetID() - self.state = 509 - self.match(Parser.LPAREN) - self.state = 510 - self.rulesetSignature() - self.state = 511 - self.match(Parser.RPAREN) - self.state = 512 - self.match(Parser.IS) - self.state = 513 - self.ruleClauseDatapoint() - self.state = 514 - self.match(Parser.END) - self.state = 515 - self.match(Parser.DATAPOINT) - self.state = 516 - self.match(Parser.RULESET) - pass - - elif la_ == 3: - localctx = Parser.DefHierarchicalContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 518 - self.match(Parser.DEFINE) - self.state = 519 - self.match(Parser.HIERARCHICAL) - self.state = 520 - self.match(Parser.RULESET) - self.state = 521 - self.rulesetID() - self.state = 522 - self.match(Parser.LPAREN) - self.state = 523 - self.hierRuleSignature() - self.state = 524 - self.match(Parser.RPAREN) - self.state = 525 - self.match(Parser.IS) - self.state = 526 - self.ruleClauseHierarchical() - self.state = 527 - self.match(Parser.END) - self.state = 528 - self.match(Parser.HIERARCHICAL) - self.state = 529 - self.match(Parser.RULESET) - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class GenericOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_genericOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class EvalAtomContext(GenericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def EVAL(self): - return self.getToken(Parser.EVAL, 0) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def routineName(self): - return self.getTypedRuleContext(Parser.RoutineNameContext, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def varID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.VarIDContext) - else: - return self.getTypedRuleContext(Parser.VarIDContext, i) - - def scalarItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ScalarItemContext) - else: - return self.getTypedRuleContext(Parser.ScalarItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def LANGUAGE(self): - return self.getToken(Parser.LANGUAGE, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def RETURNS(self): - return self.getToken(Parser.RETURNS, 0) - - def evalDatasetType(self): - return self.getTypedRuleContext(Parser.EvalDatasetTypeContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitEvalAtom"): - return visitor.visitEvalAtom(self) - else: - return visitor.visitChildren(self) - - class CastExprDatasetContext(GenericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def CAST(self): - return self.getToken(Parser.CAST, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def basicScalarType(self): - return self.getTypedRuleContext(Parser.BasicScalarTypeContext, 0) - - def valueDomainName(self): - return self.getTypedRuleContext(Parser.ValueDomainNameContext, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCastExprDataset"): - return visitor.visitCastExprDataset(self) - else: - return visitor.visitChildren(self) - - class CallDatasetContext(GenericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def operatorID(self): - return self.getTypedRuleContext(Parser.OperatorIDContext, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def parameter(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ParameterContext) - else: - return self.getTypedRuleContext(Parser.ParameterContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCallDataset"): - return visitor.visitCallDataset(self) - else: - return visitor.visitChildren(self) - - def genericOperators(self): - - localctx = Parser.GenericOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 34, self.RULE_genericOperators) - self._la = 0 # Token type - try: - self.state = 590 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - localctx = Parser.CallDatasetContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 533 - self.operatorID() - self.state = 534 - self.match(Parser.LPAREN) - self.state = 543 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.LPAREN) - | (1 << Parser.PLUS) - | (1 << Parser.MINUS) - | (1 << Parser.EVAL) - | (1 << Parser.IF) - | (1 << Parser.CASE) - | (1 << Parser.CURRENT_DATE) - | (1 << Parser.DATEDIFF) - | (1 << Parser.DATEADD) - | (1 << Parser.YEAR_OP) - | (1 << Parser.MONTH_OP) - | (1 << Parser.DAYOFMONTH) - | (1 << Parser.DAYOFYEAR) - | (1 << Parser.DAYTOYEAR) - | (1 << Parser.DAYTOMONTH) - | (1 << Parser.YEARTODAY) - | (1 << Parser.MONTHTODAY) - | (1 << Parser.NOT) - | (1 << Parser.BETWEEN) - | (1 << Parser.NULL_CONSTANT) - | (1 << Parser.ISNULL) - | (1 << Parser.UNION) - | (1 << Parser.SYMDIFF) - | (1 << Parser.INTERSECT) - | (1 << Parser.RANDOM) - ) - ) - != 0 - ) - or ( - ((_la - 66) & ~0x3F) == 0 - and ( - (1 << (_la - 66)) - & ( - (1 << (Parser.CHECK - 66)) - | (1 << (Parser.EXISTS_IN - 66)) - | (1 << (Parser.MIN - 66)) - | (1 << (Parser.MAX - 66)) - | (1 << (Parser.ABS - 66)) - | (1 << (Parser.LN - 66)) - | (1 << (Parser.LOG - 66)) - | (1 << (Parser.TRUNC - 66)) - | (1 << (Parser.ROUND - 66)) - | (1 << (Parser.POWER - 66)) - | (1 << (Parser.MOD - 66)) - | (1 << (Parser.LEN - 66)) - | (1 << (Parser.TRIM - 66)) - | (1 << (Parser.UCASE - 66)) - | (1 << (Parser.LCASE - 66)) - | (1 << (Parser.SUBSTR - 66)) - | (1 << (Parser.SUM - 66)) - | (1 << (Parser.AVG - 66)) - | (1 << (Parser.MEDIAN - 66)) - | (1 << (Parser.COUNT - 66)) - | (1 << (Parser.EXP - 66)) - | (1 << (Parser.CHARSET_MATCH - 66)) - | (1 << (Parser.NVL - 66)) - | (1 << (Parser.HIERARCHY - 66)) - | (1 << (Parser.OPTIONAL - 66)) - ) - ) - != 0 - ) - or ( - ((_la - 131) & ~0x3F) == 0 - and ( - (1 << (_la - 131)) - & ( - (1 << (Parser.LTRIM - 131)) - | (1 << (Parser.RTRIM - 131)) - | (1 << (Parser.INSTR - 131)) - | (1 << (Parser.REPLACE - 131)) - | (1 << (Parser.CEIL - 131)) - | (1 << (Parser.FLOOR - 131)) - | (1 << (Parser.SQRT - 131)) - | (1 << (Parser.SETDIFF - 131)) - | (1 << (Parser.STDDEV_POP - 131)) - | (1 << (Parser.STDDEV_SAMP - 131)) - | (1 << (Parser.VAR_POP - 131)) - | (1 << (Parser.VAR_SAMP - 131)) - | (1 << (Parser.FIRST_VALUE - 131)) - | (1 << (Parser.LAST_VALUE - 131)) - | (1 << (Parser.LAG - 131)) - | (1 << (Parser.LEAD - 131)) - | (1 << (Parser.RATIO_TO_REPORT - 131)) - | (1 << (Parser.FILL_TIME_SERIES - 131)) - | (1 << (Parser.FLOW_TO_STOCK - 131)) - | (1 << (Parser.STOCK_TO_FLOW - 131)) - | (1 << (Parser.TIMESHIFT - 131)) - | (1 << (Parser.INNER_JOIN - 131)) - | (1 << (Parser.LEFT_JOIN - 131)) - ) - ) - != 0 - ) - or ( - ((_la - 195) & ~0x3F) == 0 - and ( - (1 << (_la - 195)) - & ( - (1 << (Parser.CROSS_JOIN - 195)) - | (1 << (Parser.FULL_JOIN - 195)) - | (1 << (Parser.PERIOD_INDICATOR - 195)) - | (1 << (Parser.TIME_AGG - 195)) - | (1 << (Parser.CAST - 195)) - | (1 << (Parser.CHECK_DATAPOINT - 195)) - | (1 << (Parser.CHECK_HIERARCHY - 195)) - | (1 << (Parser.INTEGER_CONSTANT - 195)) - | (1 << (Parser.NUMBER_CONSTANT - 195)) - | (1 << (Parser.BOOLEAN_CONSTANT - 195)) - | (1 << (Parser.STRING_CONSTANT - 195)) - | (1 << (Parser.IDENTIFIER - 195)) - ) - ) - != 0 - ) - ): - self.state = 535 - self.parameter() - self.state = 540 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 536 - self.match(Parser.COMMA) - self.state = 537 - self.parameter() - self.state = 542 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 545 - self.match(Parser.RPAREN) - pass - elif token in [Parser.EVAL]: - localctx = Parser.EvalAtomContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 547 - self.match(Parser.EVAL) - self.state = 548 - self.match(Parser.LPAREN) - self.state = 549 - self.routineName() - self.state = 550 - self.match(Parser.LPAREN) - self.state = 553 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - self.state = 551 - self.varID() - pass - elif token in [ - Parser.PLUS, - Parser.MINUS, - Parser.NULL_CONSTANT, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - ]: - self.state = 552 - self.scalarItem() - pass - elif token in [Parser.RPAREN, Parser.COMMA]: - pass - else: - pass - self.state = 562 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 555 - self.match(Parser.COMMA) - self.state = 558 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - self.state = 556 - self.varID() - pass - elif token in [ - Parser.PLUS, - Parser.MINUS, - Parser.NULL_CONSTANT, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - ]: - self.state = 557 - self.scalarItem() - pass - else: - raise NoViableAltException(self) - - self.state = 564 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 565 - self.match(Parser.RPAREN) - self.state = 568 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LANGUAGE: - self.state = 566 - self.match(Parser.LANGUAGE) - self.state = 567 - self.match(Parser.STRING_CONSTANT) - - self.state = 572 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.RETURNS: - self.state = 570 - self.match(Parser.RETURNS) - self.state = 571 - self.evalDatasetType() - - self.state = 574 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CAST]: - localctx = Parser.CastExprDatasetContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 576 - self.match(Parser.CAST) - self.state = 577 - self.match(Parser.LPAREN) - self.state = 578 - self.expr(0) - self.state = 579 - self.match(Parser.COMMA) - self.state = 582 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - ]: - self.state = 580 - self.basicScalarType() - pass - elif token in [Parser.IDENTIFIER]: - self.state = 581 - self.valueDomainName() - pass - else: - raise NoViableAltException(self) - - self.state = 586 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 584 - self.match(Parser.COMMA) - self.state = 585 - self.match(Parser.STRING_CONSTANT) - - self.state = 588 - self.match(Parser.RPAREN) - 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 GenericOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_genericOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class EvalAtomComponentContext(GenericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def EVAL(self): - return self.getToken(Parser.EVAL, 0) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def routineName(self): - return self.getTypedRuleContext(Parser.RoutineNameContext, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def scalarItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ScalarItemContext) - else: - return self.getTypedRuleContext(Parser.ScalarItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def LANGUAGE(self): - return self.getToken(Parser.LANGUAGE, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def RETURNS(self): - return self.getToken(Parser.RETURNS, 0) - - def outputParameterTypeComponent(self): - return self.getTypedRuleContext(Parser.OutputParameterTypeComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitEvalAtomComponent"): - return visitor.visitEvalAtomComponent(self) - else: - return visitor.visitChildren(self) - - class CastExprComponentContext(GenericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def CAST(self): - return self.getToken(Parser.CAST, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def basicScalarType(self): - return self.getTypedRuleContext(Parser.BasicScalarTypeContext, 0) - - def valueDomainName(self): - return self.getTypedRuleContext(Parser.ValueDomainNameContext, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCastExprComponent"): - return visitor.visitCastExprComponent(self) - else: - return visitor.visitChildren(self) - - class CallComponentContext(GenericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GenericOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def operatorID(self): - return self.getTypedRuleContext(Parser.OperatorIDContext, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def parameterComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ParameterComponentContext) - else: - return self.getTypedRuleContext(Parser.ParameterComponentContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCallComponent"): - return visitor.visitCallComponent(self) - else: - return visitor.visitChildren(self) - - def genericOperatorsComponent(self): - - localctx = Parser.GenericOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_genericOperatorsComponent) - self._la = 0 # Token type - try: - self.state = 649 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - localctx = Parser.CallComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 592 - self.operatorID() - self.state = 593 - self.match(Parser.LPAREN) - self.state = 602 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.LPAREN) - | (1 << Parser.PLUS) - | (1 << Parser.MINUS) - | (1 << Parser.EVAL) - | (1 << Parser.IF) - | (1 << Parser.CASE) - | (1 << Parser.CURRENT_DATE) - | (1 << Parser.DATEDIFF) - | (1 << Parser.DATEADD) - | (1 << Parser.YEAR_OP) - | (1 << Parser.MONTH_OP) - | (1 << Parser.DAYOFMONTH) - | (1 << Parser.DAYOFYEAR) - | (1 << Parser.DAYTOYEAR) - | (1 << Parser.DAYTOMONTH) - | (1 << Parser.YEARTODAY) - | (1 << Parser.MONTHTODAY) - | (1 << Parser.NOT) - | (1 << Parser.BETWEEN) - | (1 << Parser.NULL_CONSTANT) - | (1 << Parser.ISNULL) - | (1 << Parser.RANDOM) - ) - ) - != 0 - ) - or ( - ((_la - 77) & ~0x3F) == 0 - and ( - (1 << (_la - 77)) - & ( - (1 << (Parser.RANK - 77)) - | (1 << (Parser.MIN - 77)) - | (1 << (Parser.MAX - 77)) - | (1 << (Parser.ABS - 77)) - | (1 << (Parser.LN - 77)) - | (1 << (Parser.LOG - 77)) - | (1 << (Parser.TRUNC - 77)) - | (1 << (Parser.ROUND - 77)) - | (1 << (Parser.POWER - 77)) - | (1 << (Parser.MOD - 77)) - | (1 << (Parser.LEN - 77)) - | (1 << (Parser.TRIM - 77)) - | (1 << (Parser.UCASE - 77)) - | (1 << (Parser.LCASE - 77)) - | (1 << (Parser.SUBSTR - 77)) - | (1 << (Parser.SUM - 77)) - | (1 << (Parser.AVG - 77)) - | (1 << (Parser.MEDIAN - 77)) - | (1 << (Parser.COUNT - 77)) - | (1 << (Parser.EXP - 77)) - | (1 << (Parser.CHARSET_MATCH - 77)) - | (1 << (Parser.NVL - 77)) - | (1 << (Parser.OPTIONAL - 77)) - | (1 << (Parser.LTRIM - 77)) - | (1 << (Parser.RTRIM - 77)) - | (1 << (Parser.INSTR - 77)) - | (1 << (Parser.REPLACE - 77)) - | (1 << (Parser.CEIL - 77)) - | (1 << (Parser.FLOOR - 77)) - | (1 << (Parser.SQRT - 77)) - | (1 << (Parser.STDDEV_POP - 77)) - ) - ) - != 0 - ) - or ( - ((_la - 141) & ~0x3F) == 0 - and ( - (1 << (_la - 141)) - & ( - (1 << (Parser.STDDEV_SAMP - 141)) - | (1 << (Parser.VAR_POP - 141)) - | (1 << (Parser.VAR_SAMP - 141)) - | (1 << (Parser.FIRST_VALUE - 141)) - | (1 << (Parser.LAST_VALUE - 141)) - | (1 << (Parser.LAG - 141)) - | (1 << (Parser.LEAD - 141)) - | (1 << (Parser.RATIO_TO_REPORT - 141)) - | (1 << (Parser.FILL_TIME_SERIES - 141)) - | (1 << (Parser.FLOW_TO_STOCK - 141)) - | (1 << (Parser.STOCK_TO_FLOW - 141)) - | (1 << (Parser.TIMESHIFT - 141)) - ) - ) - != 0 - ) - or ( - ((_la - 208) & ~0x3F) == 0 - and ( - (1 << (_la - 208)) - & ( - (1 << (Parser.PERIOD_INDICATOR - 208)) - | (1 << (Parser.TIME_AGG - 208)) - | (1 << (Parser.CAST - 208)) - | (1 << (Parser.INTEGER_CONSTANT - 208)) - | (1 << (Parser.NUMBER_CONSTANT - 208)) - | (1 << (Parser.BOOLEAN_CONSTANT - 208)) - | (1 << (Parser.STRING_CONSTANT - 208)) - | (1 << (Parser.IDENTIFIER - 208)) - ) - ) - != 0 - ) - ): - self.state = 594 - self.parameterComponent() - self.state = 599 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 595 - self.match(Parser.COMMA) - self.state = 596 - self.parameterComponent() - self.state = 601 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 604 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CAST]: - localctx = Parser.CastExprComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 606 - self.match(Parser.CAST) - self.state = 607 - self.match(Parser.LPAREN) - self.state = 608 - self.exprComponent(0) - self.state = 609 - self.match(Parser.COMMA) - self.state = 612 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - ]: - self.state = 610 - self.basicScalarType() - pass - elif token in [Parser.IDENTIFIER]: - self.state = 611 - self.valueDomainName() - pass - else: - raise NoViableAltException(self) - - self.state = 616 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 614 - self.match(Parser.COMMA) - self.state = 615 - self.match(Parser.STRING_CONSTANT) - - self.state = 618 - self.match(Parser.RPAREN) - pass - elif token in [Parser.EVAL]: - localctx = Parser.EvalAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 620 - self.match(Parser.EVAL) - self.state = 621 - self.match(Parser.LPAREN) - self.state = 622 - self.routineName() - self.state = 623 - self.match(Parser.LPAREN) - self.state = 626 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - self.state = 624 - self.componentID() - pass - elif token in [ - Parser.PLUS, - Parser.MINUS, - Parser.NULL_CONSTANT, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - ]: - self.state = 625 - self.scalarItem() - pass - elif token in [Parser.RPAREN, Parser.COMMA]: - pass - else: - pass - self.state = 635 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 628 - self.match(Parser.COMMA) - self.state = 631 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - self.state = 629 - self.componentID() - pass - elif token in [ - Parser.PLUS, - Parser.MINUS, - Parser.NULL_CONSTANT, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - ]: - self.state = 630 - self.scalarItem() - pass - else: - raise NoViableAltException(self) - - self.state = 637 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 638 - self.match(Parser.RPAREN) - self.state = 641 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LANGUAGE: - self.state = 639 - self.match(Parser.LANGUAGE) - self.state = 640 - self.match(Parser.STRING_CONSTANT) - - self.state = 645 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.RETURNS: - self.state = 643 - self.match(Parser.RETURNS) - self.state = 644 - self.outputParameterTypeComponent() - - self.state = 647 - self.match(Parser.RPAREN) - 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 ParameterComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def getRuleIndex(self): - return Parser.RULE_parameterComponent - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitParameterComponent"): - return visitor.visitParameterComponent(self) - else: - return visitor.visitChildren(self) - - def parameterComponent(self): - - localctx = Parser.ParameterComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_parameterComponent) - try: - self.state = 653 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LPAREN, - Parser.PLUS, - Parser.MINUS, - Parser.EVAL, - Parser.IF, - Parser.CASE, - Parser.CURRENT_DATE, - Parser.DATEDIFF, - Parser.DATEADD, - Parser.YEAR_OP, - Parser.MONTH_OP, - Parser.DAYOFMONTH, - Parser.DAYOFYEAR, - Parser.DAYTOYEAR, - Parser.DAYTOMONTH, - Parser.YEARTODAY, - Parser.MONTHTODAY, - Parser.NOT, - Parser.BETWEEN, - Parser.NULL_CONSTANT, - Parser.ISNULL, - Parser.RANDOM, - Parser.RANK, - Parser.MIN, - Parser.MAX, - Parser.ABS, - Parser.LN, - Parser.LOG, - Parser.TRUNC, - Parser.ROUND, - Parser.POWER, - Parser.MOD, - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.SUBSTR, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.EXP, - Parser.CHARSET_MATCH, - Parser.NVL, - Parser.LTRIM, - Parser.RTRIM, - Parser.INSTR, - Parser.REPLACE, - Parser.CEIL, - Parser.FLOOR, - Parser.SQRT, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - Parser.LAG, - Parser.LEAD, - Parser.RATIO_TO_REPORT, - Parser.FILL_TIME_SERIES, - Parser.FLOW_TO_STOCK, - Parser.STOCK_TO_FLOW, - Parser.TIMESHIFT, - Parser.PERIOD_INDICATOR, - Parser.TIME_AGG, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 651 - self.exprComponent(0) - pass - elif token in [Parser.OPTIONAL]: - self.enterOuterAlt(localctx, 2) - self.state = 652 - self.match(Parser.OPTIONAL) - 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 ParameterContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def getRuleIndex(self): - return Parser.RULE_parameter - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitParameter"): - return visitor.visitParameter(self) - else: - return visitor.visitChildren(self) - - def parameter(self): - - localctx = Parser.ParameterContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_parameter) - try: - self.state = 657 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LPAREN, - Parser.PLUS, - Parser.MINUS, - Parser.EVAL, - Parser.IF, - Parser.CASE, - Parser.CURRENT_DATE, - Parser.DATEDIFF, - Parser.DATEADD, - Parser.YEAR_OP, - Parser.MONTH_OP, - Parser.DAYOFMONTH, - Parser.DAYOFYEAR, - Parser.DAYTOYEAR, - Parser.DAYTOMONTH, - Parser.YEARTODAY, - Parser.MONTHTODAY, - Parser.NOT, - Parser.BETWEEN, - Parser.NULL_CONSTANT, - Parser.ISNULL, - Parser.UNION, - Parser.SYMDIFF, - Parser.INTERSECT, - Parser.RANDOM, - Parser.CHECK, - Parser.EXISTS_IN, - Parser.MIN, - Parser.MAX, - Parser.ABS, - Parser.LN, - Parser.LOG, - Parser.TRUNC, - Parser.ROUND, - Parser.POWER, - Parser.MOD, - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.SUBSTR, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.EXP, - Parser.CHARSET_MATCH, - Parser.NVL, - Parser.HIERARCHY, - Parser.LTRIM, - Parser.RTRIM, - Parser.INSTR, - Parser.REPLACE, - Parser.CEIL, - Parser.FLOOR, - Parser.SQRT, - Parser.SETDIFF, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - Parser.LAG, - Parser.LEAD, - Parser.RATIO_TO_REPORT, - Parser.FILL_TIME_SERIES, - Parser.FLOW_TO_STOCK, - Parser.STOCK_TO_FLOW, - Parser.TIMESHIFT, - Parser.INNER_JOIN, - Parser.LEFT_JOIN, - Parser.CROSS_JOIN, - Parser.FULL_JOIN, - Parser.PERIOD_INDICATOR, - Parser.TIME_AGG, - Parser.CAST, - Parser.CHECK_DATAPOINT, - Parser.CHECK_HIERARCHY, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 655 - self.expr(0) - pass - elif token in [Parser.OPTIONAL]: - self.enterOuterAlt(localctx, 2) - self.state = 656 - self.match(Parser.OPTIONAL) - 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 StringOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_stringOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class InstrAtomContext(StringOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsContext - super().__init__(parser) - self.pattern = None # ExprContext - self.startParameter = None # OptionalExprContext - self.occurrenceParameter = None # OptionalExprContext - self.copyFrom(ctx) - - def INSTR(self): - return self.getToken(Parser.INSTR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def optionalExpr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.OptionalExprContext) - else: - return self.getTypedRuleContext(Parser.OptionalExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInstrAtom"): - return visitor.visitInstrAtom(self) - else: - return visitor.visitChildren(self) - - class UnaryStringFunctionContext(StringOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def TRIM(self): - return self.getToken(Parser.TRIM, 0) - - def LTRIM(self): - return self.getToken(Parser.LTRIM, 0) - - def RTRIM(self): - return self.getToken(Parser.RTRIM, 0) - - def UCASE(self): - return self.getToken(Parser.UCASE, 0) - - def LCASE(self): - return self.getToken(Parser.LCASE, 0) - - def LEN(self): - return self.getToken(Parser.LEN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryStringFunction"): - return visitor.visitUnaryStringFunction(self) - else: - return visitor.visitChildren(self) - - class SubstrAtomContext(StringOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsContext - super().__init__(parser) - self.startParameter = None # OptionalExprContext - self.endParameter = None # OptionalExprContext - self.copyFrom(ctx) - - def SUBSTR(self): - return self.getToken(Parser.SUBSTR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def optionalExpr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.OptionalExprContext) - else: - return self.getTypedRuleContext(Parser.OptionalExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSubstrAtom"): - return visitor.visitSubstrAtom(self) - else: - return visitor.visitChildren(self) - - class ReplaceAtomContext(StringOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsContext - super().__init__(parser) - self.param = None # ExprContext - self.copyFrom(ctx) - - def REPLACE(self): - return self.getToken(Parser.REPLACE, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def optionalExpr(self): - return self.getTypedRuleContext(Parser.OptionalExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitReplaceAtom"): - return visitor.visitReplaceAtom(self) - else: - return visitor.visitChildren(self) - - def stringOperators(self): - - localctx = Parser.StringOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_stringOperators) - self._la = 0 # Token type - try: - self.state = 707 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.LTRIM, - Parser.RTRIM, - ]: - localctx = Parser.UnaryStringFunctionContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 659 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 93) & ~0x3F) == 0 - and ( - (1 << (_la - 93)) - & ( - (1 << (Parser.LEN - 93)) - | (1 << (Parser.TRIM - 93)) - | (1 << (Parser.UCASE - 93)) - | (1 << (Parser.LCASE - 93)) - | (1 << (Parser.LTRIM - 93)) - | (1 << (Parser.RTRIM - 93)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 660 - self.match(Parser.LPAREN) - self.state = 661 - self.expr(0) - self.state = 662 - self.match(Parser.RPAREN) - pass - elif token in [Parser.SUBSTR]: - localctx = Parser.SubstrAtomContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 664 - self.match(Parser.SUBSTR) - self.state = 665 - self.match(Parser.LPAREN) - self.state = 666 - self.expr(0) - self.state = 677 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 50, self._ctx) - if la_ == 1: - self.state = 673 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 667 - self.match(Parser.COMMA) - self.state = 668 - localctx.startParameter = self.optionalExpr() - - self.state = 670 - self.match(Parser.COMMA) - self.state = 671 - localctx.endParameter = self.optionalExpr() - - pass - - elif la_ == 2: - self.state = 675 - self.match(Parser.COMMA) - self.state = 676 - localctx.startParameter = self.optionalExpr() - pass - - self.state = 679 - self.match(Parser.RPAREN) - pass - elif token in [Parser.REPLACE]: - localctx = Parser.ReplaceAtomContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 681 - self.match(Parser.REPLACE) - self.state = 682 - self.match(Parser.LPAREN) - self.state = 683 - self.expr(0) - self.state = 684 - self.match(Parser.COMMA) - self.state = 685 - localctx.param = self.expr(0) - self.state = 688 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 686 - self.match(Parser.COMMA) - self.state = 687 - self.optionalExpr() - - self.state = 690 - self.match(Parser.RPAREN) - pass - elif token in [Parser.INSTR]: - localctx = Parser.InstrAtomContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 692 - self.match(Parser.INSTR) - self.state = 693 - self.match(Parser.LPAREN) - self.state = 694 - self.expr(0) - self.state = 695 - self.match(Parser.COMMA) - self.state = 696 - localctx.pattern = self.expr(0) - self.state = 699 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 52, self._ctx) - if la_ == 1: - self.state = 697 - self.match(Parser.COMMA) - self.state = 698 - localctx.startParameter = self.optionalExpr() - - self.state = 703 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 701 - self.match(Parser.COMMA) - self.state = 702 - localctx.occurrenceParameter = self.optionalExpr() - - self.state = 705 - self.match(Parser.RPAREN) - 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 StringOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_stringOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class ReplaceAtomComponentContext(StringOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsComponentContext - super().__init__(parser) - self.param = None # ExprComponentContext - self.copyFrom(ctx) - - def REPLACE(self): - return self.getToken(Parser.REPLACE, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def optionalExprComponent(self): - return self.getTypedRuleContext(Parser.OptionalExprComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitReplaceAtomComponent"): - return visitor.visitReplaceAtomComponent(self) - else: - return visitor.visitChildren(self) - - class UnaryStringFunctionComponentContext(StringOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def TRIM(self): - return self.getToken(Parser.TRIM, 0) - - def LTRIM(self): - return self.getToken(Parser.LTRIM, 0) - - def RTRIM(self): - return self.getToken(Parser.RTRIM, 0) - - def UCASE(self): - return self.getToken(Parser.UCASE, 0) - - def LCASE(self): - return self.getToken(Parser.LCASE, 0) - - def LEN(self): - return self.getToken(Parser.LEN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryStringFunctionComponent"): - return visitor.visitUnaryStringFunctionComponent(self) - else: - return visitor.visitChildren(self) - - class SubstrAtomComponentContext(StringOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsComponentContext - super().__init__(parser) - self.startParameter = None # OptionalExprComponentContext - self.endParameter = None # OptionalExprComponentContext - self.copyFrom(ctx) - - def SUBSTR(self): - return self.getToken(Parser.SUBSTR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def optionalExprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.OptionalExprComponentContext) - else: - return self.getTypedRuleContext(Parser.OptionalExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSubstrAtomComponent"): - return visitor.visitSubstrAtomComponent(self) - else: - return visitor.visitChildren(self) - - class InstrAtomComponentContext(StringOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.StringOperatorsComponentContext - super().__init__(parser) - self.pattern = None # ExprComponentContext - self.startParameter = None # OptionalExprComponentContext - self.occurrenceParameter = None # OptionalExprComponentContext - self.copyFrom(ctx) - - def INSTR(self): - return self.getToken(Parser.INSTR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def optionalExprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.OptionalExprComponentContext) - else: - return self.getTypedRuleContext(Parser.OptionalExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInstrAtomComponent"): - return visitor.visitInstrAtomComponent(self) - else: - return visitor.visitChildren(self) - - def stringOperatorsComponent(self): - - localctx = Parser.StringOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_stringOperatorsComponent) - self._la = 0 # Token type - try: - self.state = 757 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.LTRIM, - Parser.RTRIM, - ]: - localctx = Parser.UnaryStringFunctionComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 709 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 93) & ~0x3F) == 0 - and ( - (1 << (_la - 93)) - & ( - (1 << (Parser.LEN - 93)) - | (1 << (Parser.TRIM - 93)) - | (1 << (Parser.UCASE - 93)) - | (1 << (Parser.LCASE - 93)) - | (1 << (Parser.LTRIM - 93)) - | (1 << (Parser.RTRIM - 93)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 710 - self.match(Parser.LPAREN) - self.state = 711 - self.exprComponent(0) - self.state = 712 - self.match(Parser.RPAREN) - pass - elif token in [Parser.SUBSTR]: - localctx = Parser.SubstrAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 714 - self.match(Parser.SUBSTR) - self.state = 715 - self.match(Parser.LPAREN) - self.state = 716 - self.exprComponent(0) - self.state = 727 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 56, self._ctx) - if la_ == 1: - self.state = 723 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 717 - self.match(Parser.COMMA) - self.state = 718 - localctx.startParameter = self.optionalExprComponent() - - self.state = 720 - self.match(Parser.COMMA) - self.state = 721 - localctx.endParameter = self.optionalExprComponent() - - pass - - elif la_ == 2: - self.state = 725 - self.match(Parser.COMMA) - self.state = 726 - localctx.startParameter = self.optionalExprComponent() - pass - - self.state = 729 - self.match(Parser.RPAREN) - pass - elif token in [Parser.REPLACE]: - localctx = Parser.ReplaceAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 731 - self.match(Parser.REPLACE) - self.state = 732 - self.match(Parser.LPAREN) - self.state = 733 - self.exprComponent(0) - self.state = 734 - self.match(Parser.COMMA) - self.state = 735 - localctx.param = self.exprComponent(0) - self.state = 738 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 736 - self.match(Parser.COMMA) - self.state = 737 - self.optionalExprComponent() - - self.state = 740 - self.match(Parser.RPAREN) - pass - elif token in [Parser.INSTR]: - localctx = Parser.InstrAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 742 - self.match(Parser.INSTR) - self.state = 743 - self.match(Parser.LPAREN) - self.state = 744 - self.exprComponent(0) - self.state = 745 - self.match(Parser.COMMA) - self.state = 746 - localctx.pattern = self.exprComponent(0) - self.state = 749 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 58, self._ctx) - if la_ == 1: - self.state = 747 - self.match(Parser.COMMA) - self.state = 748 - localctx.startParameter = self.optionalExprComponent() - - self.state = 753 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 751 - self.match(Parser.COMMA) - self.state = 752 - localctx.occurrenceParameter = self.optionalExprComponent() - - self.state = 755 - self.match(Parser.RPAREN) - 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 NumericOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_numericOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class UnaryNumericContext(NumericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def CEIL(self): - return self.getToken(Parser.CEIL, 0) - - def FLOOR(self): - return self.getToken(Parser.FLOOR, 0) - - def ABS(self): - return self.getToken(Parser.ABS, 0) - - def EXP(self): - return self.getToken(Parser.EXP, 0) - - def LN(self): - return self.getToken(Parser.LN, 0) - - def SQRT(self): - return self.getToken(Parser.SQRT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryNumeric"): - return visitor.visitUnaryNumeric(self) - else: - return visitor.visitChildren(self) - - class UnaryWithOptionalNumericContext(NumericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def ROUND(self): - return self.getToken(Parser.ROUND, 0) - - def TRUNC(self): - return self.getToken(Parser.TRUNC, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def optionalExpr(self): - return self.getTypedRuleContext(Parser.OptionalExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryWithOptionalNumeric"): - return visitor.visitUnaryWithOptionalNumeric(self) - else: - return visitor.visitChildren(self) - - class BinaryNumericContext(NumericOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsContext - super().__init__(parser) - self.op = None # Token - self.left = None # ExprContext - self.right = None # ExprContext - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def MOD(self): - return self.getToken(Parser.MOD, 0) - - def POWER(self): - return self.getToken(Parser.POWER, 0) - - def LOG(self): - return self.getToken(Parser.LOG, 0) - - def RANDOM(self): - return self.getToken(Parser.RANDOM, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBinaryNumeric"): - return visitor.visitBinaryNumeric(self) - else: - return visitor.visitChildren(self) - - def numericOperators(self): - - localctx = Parser.NumericOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_numericOperators) - self._la = 0 # Token type - try: - self.state = 780 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.ABS, Parser.LN, Parser.EXP, Parser.CEIL, Parser.FLOOR, Parser.SQRT]: - localctx = Parser.UnaryNumericContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 759 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 85) & ~0x3F) == 0 - and ( - (1 << (_la - 85)) - & ( - (1 << (Parser.ABS - 85)) - | (1 << (Parser.LN - 85)) - | (1 << (Parser.EXP - 85)) - | (1 << (Parser.CEIL - 85)) - | (1 << (Parser.FLOOR - 85)) - | (1 << (Parser.SQRT - 85)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 760 - self.match(Parser.LPAREN) - self.state = 761 - self.expr(0) - self.state = 762 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TRUNC, Parser.ROUND]: - localctx = Parser.UnaryWithOptionalNumericContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 764 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.TRUNC or _la == Parser.ROUND): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 765 - self.match(Parser.LPAREN) - self.state = 766 - self.expr(0) - self.state = 769 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 767 - self.match(Parser.COMMA) - self.state = 768 - self.optionalExpr() - - self.state = 771 - self.match(Parser.RPAREN) - pass - elif token in [Parser.RANDOM, Parser.LOG, Parser.POWER, Parser.MOD]: - localctx = Parser.BinaryNumericContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 773 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 61) & ~0x3F) == 0 - and ( - (1 << (_la - 61)) - & ( - (1 << (Parser.RANDOM - 61)) - | (1 << (Parser.LOG - 61)) - | (1 << (Parser.POWER - 61)) - | (1 << (Parser.MOD - 61)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 774 - self.match(Parser.LPAREN) - self.state = 775 - localctx.left = self.expr(0) - self.state = 776 - self.match(Parser.COMMA) - self.state = 777 - localctx.right = self.expr(0) - self.state = 778 - self.match(Parser.RPAREN) - 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 NumericOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_numericOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class UnaryNumericComponentContext(NumericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def CEIL(self): - return self.getToken(Parser.CEIL, 0) - - def FLOOR(self): - return self.getToken(Parser.FLOOR, 0) - - def ABS(self): - return self.getToken(Parser.ABS, 0) - - def EXP(self): - return self.getToken(Parser.EXP, 0) - - def LN(self): - return self.getToken(Parser.LN, 0) - - def SQRT(self): - return self.getToken(Parser.SQRT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryNumericComponent"): - return visitor.visitUnaryNumericComponent(self) - else: - return visitor.visitChildren(self) - - class BinaryNumericComponentContext(NumericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.left = None # ExprComponentContext - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def MOD(self): - return self.getToken(Parser.MOD, 0) - - def POWER(self): - return self.getToken(Parser.POWER, 0) - - def LOG(self): - return self.getToken(Parser.LOG, 0) - - def RANDOM(self): - return self.getToken(Parser.RANDOM, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBinaryNumericComponent"): - return visitor.visitBinaryNumericComponent(self) - else: - return visitor.visitChildren(self) - - class UnaryWithOptionalNumericComponentContext(NumericOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.NumericOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def ROUND(self): - return self.getToken(Parser.ROUND, 0) - - def TRUNC(self): - return self.getToken(Parser.TRUNC, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def optionalExprComponent(self): - return self.getTypedRuleContext(Parser.OptionalExprComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnaryWithOptionalNumericComponent"): - return visitor.visitUnaryWithOptionalNumericComponent(self) - else: - return visitor.visitChildren(self) - - def numericOperatorsComponent(self): - - localctx = Parser.NumericOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_numericOperatorsComponent) - self._la = 0 # Token type - try: - self.state = 803 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.ABS, Parser.LN, Parser.EXP, Parser.CEIL, Parser.FLOOR, Parser.SQRT]: - localctx = Parser.UnaryNumericComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 782 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 85) & ~0x3F) == 0 - and ( - (1 << (_la - 85)) - & ( - (1 << (Parser.ABS - 85)) - | (1 << (Parser.LN - 85)) - | (1 << (Parser.EXP - 85)) - | (1 << (Parser.CEIL - 85)) - | (1 << (Parser.FLOOR - 85)) - | (1 << (Parser.SQRT - 85)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 783 - self.match(Parser.LPAREN) - self.state = 784 - self.exprComponent(0) - self.state = 785 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TRUNC, Parser.ROUND]: - localctx = Parser.UnaryWithOptionalNumericComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 787 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.TRUNC or _la == Parser.ROUND): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 788 - self.match(Parser.LPAREN) - self.state = 789 - self.exprComponent(0) - self.state = 792 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 790 - self.match(Parser.COMMA) - self.state = 791 - self.optionalExprComponent() - - self.state = 794 - self.match(Parser.RPAREN) - pass - elif token in [Parser.RANDOM, Parser.LOG, Parser.POWER, Parser.MOD]: - localctx = Parser.BinaryNumericComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 796 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 61) & ~0x3F) == 0 - and ( - (1 << (_la - 61)) - & ( - (1 << (Parser.RANDOM - 61)) - | (1 << (Parser.LOG - 61)) - | (1 << (Parser.POWER - 61)) - | (1 << (Parser.MOD - 61)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 797 - self.match(Parser.LPAREN) - self.state = 798 - localctx.left = self.exprComponent(0) - self.state = 799 - self.match(Parser.COMMA) - self.state = 800 - localctx.right = self.exprComponent(0) - self.state = 801 - self.match(Parser.RPAREN) - 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 ComparisonOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_comparisonOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class BetweenAtomContext(ComparisonOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.from_ = None # ExprContext - self.to_ = None # ExprContext - self.copyFrom(ctx) - - def BETWEEN(self): - return self.getToken(Parser.BETWEEN, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBetweenAtom"): - return visitor.visitBetweenAtom(self) - else: - return visitor.visitChildren(self) - - class CharsetMatchAtomContext(ComparisonOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.pattern = None # ExprContext - self.copyFrom(ctx) - - def CHARSET_MATCH(self): - return self.getToken(Parser.CHARSET_MATCH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCharsetMatchAtom"): - return visitor.visitCharsetMatchAtom(self) - else: - return visitor.visitChildren(self) - - class IsNullAtomContext(ComparisonOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def ISNULL(self): - return self.getToken(Parser.ISNULL, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIsNullAtom"): - return visitor.visitIsNullAtom(self) - else: - return visitor.visitChildren(self) - - class ExistInAtomContext(ComparisonOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsContext - super().__init__(parser) - self.left = None # ExprContext - self.right = None # ExprContext - self.copyFrom(ctx) - - def EXISTS_IN(self): - return self.getToken(Parser.EXISTS_IN, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def retainType(self): - return self.getTypedRuleContext(Parser.RetainTypeContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitExistInAtom"): - return visitor.visitExistInAtom(self) - else: - return visitor.visitChildren(self) - - def comparisonOperators(self): - - localctx = Parser.ComparisonOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_comparisonOperators) - self._la = 0 # Token type - try: - self.state = 837 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.BETWEEN]: - localctx = Parser.BetweenAtomContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 805 - self.match(Parser.BETWEEN) - self.state = 806 - self.match(Parser.LPAREN) - self.state = 807 - localctx.op = self.expr(0) - self.state = 808 - self.match(Parser.COMMA) - self.state = 809 - localctx.from_ = self.expr(0) - self.state = 810 - self.match(Parser.COMMA) - self.state = 811 - localctx.to_ = self.expr(0) - self.state = 812 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CHARSET_MATCH]: - localctx = Parser.CharsetMatchAtomContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 814 - self.match(Parser.CHARSET_MATCH) - self.state = 815 - self.match(Parser.LPAREN) - self.state = 816 - localctx.op = self.expr(0) - self.state = 817 - self.match(Parser.COMMA) - self.state = 818 - localctx.pattern = self.expr(0) - self.state = 819 - self.match(Parser.RPAREN) - pass - elif token in [Parser.ISNULL]: - localctx = Parser.IsNullAtomContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 821 - self.match(Parser.ISNULL) - self.state = 822 - self.match(Parser.LPAREN) - self.state = 823 - self.expr(0) - self.state = 824 - self.match(Parser.RPAREN) - pass - elif token in [Parser.EXISTS_IN]: - localctx = Parser.ExistInAtomContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 826 - self.match(Parser.EXISTS_IN) - self.state = 827 - self.match(Parser.LPAREN) - self.state = 828 - localctx.left = self.expr(0) - self.state = 829 - self.match(Parser.COMMA) - self.state = 830 - localctx.right = self.expr(0) - self.state = 833 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 831 - self.match(Parser.COMMA) - self.state = 832 - self.retainType() - - self.state = 835 - self.match(Parser.RPAREN) - 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 ComparisonOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_comparisonOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class IsNullAtomComponentContext(ComparisonOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def ISNULL(self): - return self.getToken(Parser.ISNULL, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIsNullAtomComponent"): - return visitor.visitIsNullAtomComponent(self) - else: - return visitor.visitChildren(self) - - class CharsetMatchAtomComponentContext(ComparisonOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsComponentContext - super().__init__(parser) - self.op = None # ExprComponentContext - self.pattern = None # ExprComponentContext - self.copyFrom(ctx) - - def CHARSET_MATCH(self): - return self.getToken(Parser.CHARSET_MATCH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCharsetMatchAtomComponent"): - return visitor.visitCharsetMatchAtomComponent(self) - else: - return visitor.visitChildren(self) - - class BetweenAtomComponentContext(ComparisonOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ComparisonOperatorsComponentContext - super().__init__(parser) - self.op = None # ExprComponentContext - self.from_ = None # ExprComponentContext - self.to_ = None # ExprComponentContext - self.copyFrom(ctx) - - def BETWEEN(self): - return self.getToken(Parser.BETWEEN, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBetweenAtomComponent"): - return visitor.visitBetweenAtomComponent(self) - else: - return visitor.visitChildren(self) - - def comparisonOperatorsComponent(self): - - localctx = Parser.ComparisonOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_comparisonOperatorsComponent) - try: - self.state = 860 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.BETWEEN]: - localctx = Parser.BetweenAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 839 - self.match(Parser.BETWEEN) - self.state = 840 - self.match(Parser.LPAREN) - self.state = 841 - localctx.op = self.exprComponent(0) - self.state = 842 - self.match(Parser.COMMA) - self.state = 843 - localctx.from_ = self.exprComponent(0) - self.state = 844 - self.match(Parser.COMMA) - self.state = 845 - localctx.to_ = self.exprComponent(0) - self.state = 846 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CHARSET_MATCH]: - localctx = Parser.CharsetMatchAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 848 - self.match(Parser.CHARSET_MATCH) - self.state = 849 - self.match(Parser.LPAREN) - self.state = 850 - localctx.op = self.exprComponent(0) - self.state = 851 - self.match(Parser.COMMA) - self.state = 852 - localctx.pattern = self.exprComponent(0) - self.state = 853 - self.match(Parser.RPAREN) - pass - elif token in [Parser.ISNULL]: - localctx = Parser.IsNullAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 855 - self.match(Parser.ISNULL) - self.state = 856 - self.match(Parser.LPAREN) - self.state = 857 - self.exprComponent(0) - self.state = 858 - self.match(Parser.RPAREN) - 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 TimeOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_timeOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class DayToYearAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYTOYEAR(self): - return self.getToken(Parser.DAYTOYEAR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayToYearAtom"): - return visitor.visitDayToYearAtom(self) - else: - return visitor.visitChildren(self) - - class YearAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def YEAR_OP(self): - return self.getToken(Parser.YEAR_OP, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitYearAtom"): - return visitor.visitYearAtom(self) - else: - return visitor.visitChildren(self) - - class YearTodayAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def YEARTODAY(self): - return self.getToken(Parser.YEARTODAY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitYearTodayAtom"): - return visitor.visitYearTodayAtom(self) - else: - return visitor.visitChildren(self) - - class DayToMonthAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYTOMONTH(self): - return self.getToken(Parser.DAYTOMONTH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayToMonthAtom"): - return visitor.visitDayToMonthAtom(self) - else: - return visitor.visitChildren(self) - - class PeriodAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def PERIOD_INDICATOR(self): - return self.getToken(Parser.PERIOD_INDICATOR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitPeriodAtom"): - return visitor.visitPeriodAtom(self) - else: - return visitor.visitChildren(self) - - class MonthTodayAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def MONTHTODAY(self): - return self.getToken(Parser.MONTHTODAY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMonthTodayAtom"): - return visitor.visitMonthTodayAtom(self) - else: - return visitor.visitChildren(self) - - class FillTimeAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def FILL_TIME_SERIES(self): - return self.getToken(Parser.FILL_TIME_SERIES, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def SINGLE(self): - return self.getToken(Parser.SINGLE, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFillTimeAtom"): - return visitor.visitFillTimeAtom(self) - else: - return visitor.visitChildren(self) - - class MonthAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def MONTH_OP(self): - return self.getToken(Parser.MONTH_OP, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMonthAtom"): - return visitor.visitMonthAtom(self) - else: - return visitor.visitChildren(self) - - class DayOfYearAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYOFYEAR(self): - return self.getToken(Parser.DAYOFYEAR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayOfYearAtom"): - return visitor.visitDayOfYearAtom(self) - else: - return visitor.visitChildren(self) - - class FlowAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def FLOW_TO_STOCK(self): - return self.getToken(Parser.FLOW_TO_STOCK, 0) - - def STOCK_TO_FLOW(self): - return self.getToken(Parser.STOCK_TO_FLOW, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFlowAtom"): - return visitor.visitFlowAtom(self) - else: - return visitor.visitChildren(self) - - class TimeShiftAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def TIMESHIFT(self): - return self.getToken(Parser.TIMESHIFT, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeShiftAtom"): - return visitor.visitTimeShiftAtom(self) - else: - return visitor.visitChildren(self) - - class TimeAggAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.periodIndTo = None # Token - self.periodIndFrom = None # Token - self.op = None # OptionalExprContext - self.delim = None # Token - self.copyFrom(ctx) - - def TIME_AGG(self): - return self.getToken(Parser.TIME_AGG, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def STRING_CONSTANT(self, i: int = None): - if i is None: - return self.getTokens(Parser.STRING_CONSTANT) - else: - return self.getToken(Parser.STRING_CONSTANT, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def optionalExpr(self): - return self.getTypedRuleContext(Parser.OptionalExprContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def FIRST(self): - return self.getToken(Parser.FIRST, 0) - - def LAST(self): - return self.getToken(Parser.LAST, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeAggAtom"): - return visitor.visitTimeAggAtom(self) - else: - return visitor.visitChildren(self) - - class DateDiffAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.dateFrom = None # ExprContext - self.dateTo = None # ExprContext - self.copyFrom(ctx) - - def DATEDIFF(self): - return self.getToken(Parser.DATEDIFF, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDateDiffAtom"): - return visitor.visitDateDiffAtom(self) - else: - return visitor.visitChildren(self) - - class DateAddAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.shiftNumber = None # ExprContext - self.periodInd = None # ExprContext - self.copyFrom(ctx) - - def DATEADD(self): - return self.getToken(Parser.DATEADD, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDateAddAtom"): - return visitor.visitDateAddAtom(self) - else: - return visitor.visitChildren(self) - - class DayOfMonthAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYOFMONTH(self): - return self.getToken(Parser.DAYOFMONTH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayOfMonthAtom"): - return visitor.visitDayOfMonthAtom(self) - else: - return visitor.visitChildren(self) - - class CurrentDateAtomContext(TimeOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def CURRENT_DATE(self): - return self.getToken(Parser.CURRENT_DATE, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCurrentDateAtom"): - return visitor.visitCurrentDateAtom(self) - else: - return visitor.visitChildren(self) - - def timeOperators(self): - - localctx = Parser.TimeOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_timeOperators) - self._la = 0 # Token type - try: - self.state = 964 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.PERIOD_INDICATOR]: - localctx = Parser.PeriodAtomContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 862 - self.match(Parser.PERIOD_INDICATOR) - self.state = 863 - self.match(Parser.LPAREN) - self.state = 865 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.LPAREN) - | (1 << Parser.PLUS) - | (1 << Parser.MINUS) - | (1 << Parser.EVAL) - | (1 << Parser.IF) - | (1 << Parser.CASE) - | (1 << Parser.CURRENT_DATE) - | (1 << Parser.DATEDIFF) - | (1 << Parser.DATEADD) - | (1 << Parser.YEAR_OP) - | (1 << Parser.MONTH_OP) - | (1 << Parser.DAYOFMONTH) - | (1 << Parser.DAYOFYEAR) - | (1 << Parser.DAYTOYEAR) - | (1 << Parser.DAYTOMONTH) - | (1 << Parser.YEARTODAY) - | (1 << Parser.MONTHTODAY) - | (1 << Parser.NOT) - | (1 << Parser.BETWEEN) - | (1 << Parser.NULL_CONSTANT) - | (1 << Parser.ISNULL) - | (1 << Parser.UNION) - | (1 << Parser.SYMDIFF) - | (1 << Parser.INTERSECT) - | (1 << Parser.RANDOM) - ) - ) - != 0 - ) - or ( - ((_la - 66) & ~0x3F) == 0 - and ( - (1 << (_la - 66)) - & ( - (1 << (Parser.CHECK - 66)) - | (1 << (Parser.EXISTS_IN - 66)) - | (1 << (Parser.MIN - 66)) - | (1 << (Parser.MAX - 66)) - | (1 << (Parser.ABS - 66)) - | (1 << (Parser.LN - 66)) - | (1 << (Parser.LOG - 66)) - | (1 << (Parser.TRUNC - 66)) - | (1 << (Parser.ROUND - 66)) - | (1 << (Parser.POWER - 66)) - | (1 << (Parser.MOD - 66)) - | (1 << (Parser.LEN - 66)) - | (1 << (Parser.TRIM - 66)) - | (1 << (Parser.UCASE - 66)) - | (1 << (Parser.LCASE - 66)) - | (1 << (Parser.SUBSTR - 66)) - | (1 << (Parser.SUM - 66)) - | (1 << (Parser.AVG - 66)) - | (1 << (Parser.MEDIAN - 66)) - | (1 << (Parser.COUNT - 66)) - | (1 << (Parser.EXP - 66)) - | (1 << (Parser.CHARSET_MATCH - 66)) - | (1 << (Parser.NVL - 66)) - | (1 << (Parser.HIERARCHY - 66)) - ) - ) - != 0 - ) - or ( - ((_la - 131) & ~0x3F) == 0 - and ( - (1 << (_la - 131)) - & ( - (1 << (Parser.LTRIM - 131)) - | (1 << (Parser.RTRIM - 131)) - | (1 << (Parser.INSTR - 131)) - | (1 << (Parser.REPLACE - 131)) - | (1 << (Parser.CEIL - 131)) - | (1 << (Parser.FLOOR - 131)) - | (1 << (Parser.SQRT - 131)) - | (1 << (Parser.SETDIFF - 131)) - | (1 << (Parser.STDDEV_POP - 131)) - | (1 << (Parser.STDDEV_SAMP - 131)) - | (1 << (Parser.VAR_POP - 131)) - | (1 << (Parser.VAR_SAMP - 131)) - | (1 << (Parser.FIRST_VALUE - 131)) - | (1 << (Parser.LAST_VALUE - 131)) - | (1 << (Parser.LAG - 131)) - | (1 << (Parser.LEAD - 131)) - | (1 << (Parser.RATIO_TO_REPORT - 131)) - | (1 << (Parser.FILL_TIME_SERIES - 131)) - | (1 << (Parser.FLOW_TO_STOCK - 131)) - | (1 << (Parser.STOCK_TO_FLOW - 131)) - | (1 << (Parser.TIMESHIFT - 131)) - | (1 << (Parser.INNER_JOIN - 131)) - | (1 << (Parser.LEFT_JOIN - 131)) - ) - ) - != 0 - ) - or ( - ((_la - 195) & ~0x3F) == 0 - and ( - (1 << (_la - 195)) - & ( - (1 << (Parser.CROSS_JOIN - 195)) - | (1 << (Parser.FULL_JOIN - 195)) - | (1 << (Parser.PERIOD_INDICATOR - 195)) - | (1 << (Parser.TIME_AGG - 195)) - | (1 << (Parser.CAST - 195)) - | (1 << (Parser.CHECK_DATAPOINT - 195)) - | (1 << (Parser.CHECK_HIERARCHY - 195)) - | (1 << (Parser.INTEGER_CONSTANT - 195)) - | (1 << (Parser.NUMBER_CONSTANT - 195)) - | (1 << (Parser.BOOLEAN_CONSTANT - 195)) - | (1 << (Parser.STRING_CONSTANT - 195)) - | (1 << (Parser.IDENTIFIER - 195)) - ) - ) - != 0 - ) - ): - self.state = 864 - self.expr(0) - - self.state = 867 - self.match(Parser.RPAREN) - pass - elif token in [Parser.FILL_TIME_SERIES]: - localctx = Parser.FillTimeAtomContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 868 - self.match(Parser.FILL_TIME_SERIES) - self.state = 869 - self.match(Parser.LPAREN) - self.state = 870 - self.expr(0) - self.state = 873 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 871 - self.match(Parser.COMMA) - self.state = 872 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.SINGLE): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 875 - self.match(Parser.RPAREN) - pass - elif token in [Parser.FLOW_TO_STOCK, Parser.STOCK_TO_FLOW]: - localctx = Parser.FlowAtomContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 877 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FLOW_TO_STOCK or _la == Parser.STOCK_TO_FLOW): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 878 - self.match(Parser.LPAREN) - self.state = 879 - self.expr(0) - self.state = 880 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TIMESHIFT]: - localctx = Parser.TimeShiftAtomContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 882 - self.match(Parser.TIMESHIFT) - self.state = 883 - self.match(Parser.LPAREN) - self.state = 884 - self.expr(0) - self.state = 885 - self.match(Parser.COMMA) - self.state = 886 - self.signedInteger() - self.state = 887 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TIME_AGG]: - localctx = Parser.TimeAggAtomContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 889 - self.match(Parser.TIME_AGG) - self.state = 890 - self.match(Parser.LPAREN) - self.state = 891 - localctx.periodIndTo = self.match(Parser.STRING_CONSTANT) - self.state = 894 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 70, self._ctx) - if la_ == 1: - self.state = 892 - self.match(Parser.COMMA) - self.state = 893 - localctx.periodIndFrom = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.OPTIONAL or _la == Parser.STRING_CONSTANT): - localctx.periodIndFrom = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 898 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 71, self._ctx) - if la_ == 1: - self.state = 896 - self.match(Parser.COMMA) - self.state = 897 - localctx.op = self.optionalExpr() - - self.state = 902 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 900 - self.match(Parser.COMMA) - self.state = 901 - localctx.delim = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FIRST or _la == Parser.LAST): - localctx.delim = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 904 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CURRENT_DATE]: - localctx = Parser.CurrentDateAtomContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 905 - self.match(Parser.CURRENT_DATE) - self.state = 906 - self.match(Parser.LPAREN) - self.state = 907 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DATEDIFF]: - localctx = Parser.DateDiffAtomContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 908 - self.match(Parser.DATEDIFF) - self.state = 909 - self.match(Parser.LPAREN) - self.state = 910 - localctx.dateFrom = self.expr(0) - self.state = 911 - self.match(Parser.COMMA) - self.state = 912 - localctx.dateTo = self.expr(0) - self.state = 913 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DATEADD]: - localctx = Parser.DateAddAtomContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 915 - self.match(Parser.DATEADD) - self.state = 916 - self.match(Parser.LPAREN) - self.state = 917 - localctx.op = self.expr(0) - self.state = 918 - self.match(Parser.COMMA) - self.state = 919 - localctx.shiftNumber = self.expr(0) - self.state = 920 - self.match(Parser.COMMA) - self.state = 921 - localctx.periodInd = self.expr(0) - self.state = 922 - self.match(Parser.RPAREN) - pass - elif token in [Parser.YEAR_OP]: - localctx = Parser.YearAtomContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 924 - self.match(Parser.YEAR_OP) - self.state = 925 - self.match(Parser.LPAREN) - self.state = 926 - self.expr(0) - self.state = 927 - self.match(Parser.RPAREN) - pass - elif token in [Parser.MONTH_OP]: - localctx = Parser.MonthAtomContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 929 - self.match(Parser.MONTH_OP) - self.state = 930 - self.match(Parser.LPAREN) - self.state = 931 - self.expr(0) - self.state = 932 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYOFMONTH]: - localctx = Parser.DayOfMonthAtomContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 934 - self.match(Parser.DAYOFMONTH) - self.state = 935 - self.match(Parser.LPAREN) - self.state = 936 - self.expr(0) - self.state = 937 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYOFYEAR]: - localctx = Parser.DayOfYearAtomContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 939 - self.match(Parser.DAYOFYEAR) - self.state = 940 - self.match(Parser.LPAREN) - self.state = 941 - self.expr(0) - self.state = 942 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYTOYEAR]: - localctx = Parser.DayToYearAtomContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 944 - self.match(Parser.DAYTOYEAR) - self.state = 945 - self.match(Parser.LPAREN) - self.state = 946 - self.expr(0) - self.state = 947 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYTOMONTH]: - localctx = Parser.DayToMonthAtomContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 949 - self.match(Parser.DAYTOMONTH) - self.state = 950 - self.match(Parser.LPAREN) - self.state = 951 - self.expr(0) - self.state = 952 - self.match(Parser.RPAREN) - pass - elif token in [Parser.YEARTODAY]: - localctx = Parser.YearTodayAtomContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 954 - self.match(Parser.YEARTODAY) - self.state = 955 - self.match(Parser.LPAREN) - self.state = 956 - self.expr(0) - self.state = 957 - self.match(Parser.RPAREN) - pass - elif token in [Parser.MONTHTODAY]: - localctx = Parser.MonthTodayAtomContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 959 - self.match(Parser.MONTHTODAY) - self.state = 960 - self.match(Parser.LPAREN) - self.state = 961 - self.expr(0) - self.state = 962 - self.match(Parser.RPAREN) - 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 TimeOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_timeOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class PeriodAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def PERIOD_INDICATOR(self): - return self.getToken(Parser.PERIOD_INDICATOR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitPeriodAtomComponent"): - return visitor.visitPeriodAtomComponent(self) - else: - return visitor.visitChildren(self) - - class TimeShiftAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def TIMESHIFT(self): - return self.getToken(Parser.TIMESHIFT, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeShiftAtomComponent"): - return visitor.visitTimeShiftAtomComponent(self) - else: - return visitor.visitChildren(self) - - class MonthTodayAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def MONTHTODAY(self): - return self.getToken(Parser.MONTHTODAY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMonthTodayAtomComponent"): - return visitor.visitMonthTodayAtomComponent(self) - else: - return visitor.visitChildren(self) - - class TimeAggAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.periodIndTo = None # Token - self.periodIndFrom = None # Token - self.op = None # OptionalExprComponentContext - self.delim = None # Token - self.copyFrom(ctx) - - def TIME_AGG(self): - return self.getToken(Parser.TIME_AGG, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def STRING_CONSTANT(self, i: int = None): - if i is None: - return self.getTokens(Parser.STRING_CONSTANT) - else: - return self.getToken(Parser.STRING_CONSTANT, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def optionalExprComponent(self): - return self.getTypedRuleContext(Parser.OptionalExprComponentContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def FIRST(self): - return self.getToken(Parser.FIRST, 0) - - def LAST(self): - return self.getToken(Parser.LAST, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitTimeAggAtomComponent"): - return visitor.visitTimeAggAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DayToMonthAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYTOMONTH(self): - return self.getToken(Parser.DAYTOMONTH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayToMonthAtomComponent"): - return visitor.visitDayToMonthAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DateAddAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.op = None # ExprComponentContext - self.shiftNumber = None # ExprComponentContext - self.periodInd = None # ExprComponentContext - self.copyFrom(ctx) - - def DATEADD(self): - return self.getToken(Parser.DATEADD, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDateAddAtomComponent"): - return visitor.visitDateAddAtomComponent(self) - else: - return visitor.visitChildren(self) - - class YearTodayAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def YEARTODAY(self): - return self.getToken(Parser.YEARTODAY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitYearTodayAtomComponent"): - return visitor.visitYearTodayAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DayOfMonthAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYOFMONTH(self): - return self.getToken(Parser.DAYOFMONTH, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayOfMonthAtomComponent"): - return visitor.visitDayOfMonthAtomComponent(self) - else: - return visitor.visitChildren(self) - - class MonthAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def MONTH_OP(self): - return self.getToken(Parser.MONTH_OP, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMonthAtomComponent"): - return visitor.visitMonthAtomComponent(self) - else: - return visitor.visitChildren(self) - - class FillTimeAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def FILL_TIME_SERIES(self): - return self.getToken(Parser.FILL_TIME_SERIES, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def SINGLE(self): - return self.getToken(Parser.SINGLE, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFillTimeAtomComponent"): - return visitor.visitFillTimeAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DatOfYearAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYOFYEAR(self): - return self.getToken(Parser.DAYOFYEAR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDatOfYearAtomComponent"): - return visitor.visitDatOfYearAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DayToYearAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def DAYTOYEAR(self): - return self.getToken(Parser.DAYTOYEAR, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDayToYearAtomComponent"): - return visitor.visitDayToYearAtomComponent(self) - else: - return visitor.visitChildren(self) - - class CurrentDateAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def CURRENT_DATE(self): - return self.getToken(Parser.CURRENT_DATE, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCurrentDateAtomComponent"): - return visitor.visitCurrentDateAtomComponent(self) - else: - return visitor.visitChildren(self) - - class FlowAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def FLOW_TO_STOCK(self): - return self.getToken(Parser.FLOW_TO_STOCK, 0) - - def STOCK_TO_FLOW(self): - return self.getToken(Parser.STOCK_TO_FLOW, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFlowAtomComponent"): - return visitor.visitFlowAtomComponent(self) - else: - return visitor.visitChildren(self) - - class DateDiffAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.dateFrom = None # ExprComponentContext - self.dateTo = None # ExprContext - self.copyFrom(ctx) - - def DATEDIFF(self): - return self.getToken(Parser.DATEDIFF, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDateDiffAtomComponent"): - return visitor.visitDateDiffAtomComponent(self) - else: - return visitor.visitChildren(self) - - class YearAtomComponentContext(TimeOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.TimeOperatorsComponentContext - super().__init__(parser) - self.copyFrom(ctx) - - def YEAR_OP(self): - return self.getToken(Parser.YEAR_OP, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitYearAtomComponent"): - return visitor.visitYearAtomComponent(self) - else: - return visitor.visitChildren(self) - - def timeOperatorsComponent(self): - - localctx = Parser.TimeOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_timeOperatorsComponent) - self._la = 0 # Token type - try: - self.state = 1068 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.PERIOD_INDICATOR]: - localctx = Parser.PeriodAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 966 - self.match(Parser.PERIOD_INDICATOR) - self.state = 967 - self.match(Parser.LPAREN) - self.state = 969 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.LPAREN) - | (1 << Parser.PLUS) - | (1 << Parser.MINUS) - | (1 << Parser.EVAL) - | (1 << Parser.IF) - | (1 << Parser.CASE) - | (1 << Parser.CURRENT_DATE) - | (1 << Parser.DATEDIFF) - | (1 << Parser.DATEADD) - | (1 << Parser.YEAR_OP) - | (1 << Parser.MONTH_OP) - | (1 << Parser.DAYOFMONTH) - | (1 << Parser.DAYOFYEAR) - | (1 << Parser.DAYTOYEAR) - | (1 << Parser.DAYTOMONTH) - | (1 << Parser.YEARTODAY) - | (1 << Parser.MONTHTODAY) - | (1 << Parser.NOT) - | (1 << Parser.BETWEEN) - | (1 << Parser.NULL_CONSTANT) - | (1 << Parser.ISNULL) - | (1 << Parser.RANDOM) - ) - ) - != 0 - ) - or ( - ((_la - 77) & ~0x3F) == 0 - and ( - (1 << (_la - 77)) - & ( - (1 << (Parser.RANK - 77)) - | (1 << (Parser.MIN - 77)) - | (1 << (Parser.MAX - 77)) - | (1 << (Parser.ABS - 77)) - | (1 << (Parser.LN - 77)) - | (1 << (Parser.LOG - 77)) - | (1 << (Parser.TRUNC - 77)) - | (1 << (Parser.ROUND - 77)) - | (1 << (Parser.POWER - 77)) - | (1 << (Parser.MOD - 77)) - | (1 << (Parser.LEN - 77)) - | (1 << (Parser.TRIM - 77)) - | (1 << (Parser.UCASE - 77)) - | (1 << (Parser.LCASE - 77)) - | (1 << (Parser.SUBSTR - 77)) - | (1 << (Parser.SUM - 77)) - | (1 << (Parser.AVG - 77)) - | (1 << (Parser.MEDIAN - 77)) - | (1 << (Parser.COUNT - 77)) - | (1 << (Parser.EXP - 77)) - | (1 << (Parser.CHARSET_MATCH - 77)) - | (1 << (Parser.NVL - 77)) - | (1 << (Parser.LTRIM - 77)) - | (1 << (Parser.RTRIM - 77)) - | (1 << (Parser.INSTR - 77)) - | (1 << (Parser.REPLACE - 77)) - | (1 << (Parser.CEIL - 77)) - | (1 << (Parser.FLOOR - 77)) - | (1 << (Parser.SQRT - 77)) - | (1 << (Parser.STDDEV_POP - 77)) - ) - ) - != 0 - ) - or ( - ((_la - 141) & ~0x3F) == 0 - and ( - (1 << (_la - 141)) - & ( - (1 << (Parser.STDDEV_SAMP - 141)) - | (1 << (Parser.VAR_POP - 141)) - | (1 << (Parser.VAR_SAMP - 141)) - | (1 << (Parser.FIRST_VALUE - 141)) - | (1 << (Parser.LAST_VALUE - 141)) - | (1 << (Parser.LAG - 141)) - | (1 << (Parser.LEAD - 141)) - | (1 << (Parser.RATIO_TO_REPORT - 141)) - | (1 << (Parser.FILL_TIME_SERIES - 141)) - | (1 << (Parser.FLOW_TO_STOCK - 141)) - | (1 << (Parser.STOCK_TO_FLOW - 141)) - | (1 << (Parser.TIMESHIFT - 141)) - ) - ) - != 0 - ) - or ( - ((_la - 208) & ~0x3F) == 0 - and ( - (1 << (_la - 208)) - & ( - (1 << (Parser.PERIOD_INDICATOR - 208)) - | (1 << (Parser.TIME_AGG - 208)) - | (1 << (Parser.CAST - 208)) - | (1 << (Parser.INTEGER_CONSTANT - 208)) - | (1 << (Parser.NUMBER_CONSTANT - 208)) - | (1 << (Parser.BOOLEAN_CONSTANT - 208)) - | (1 << (Parser.STRING_CONSTANT - 208)) - | (1 << (Parser.IDENTIFIER - 208)) - ) - ) - != 0 - ) - ): - self.state = 968 - self.exprComponent(0) - - self.state = 971 - self.match(Parser.RPAREN) - pass - elif token in [Parser.FILL_TIME_SERIES]: - localctx = Parser.FillTimeAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 972 - self.match(Parser.FILL_TIME_SERIES) - self.state = 973 - self.match(Parser.LPAREN) - self.state = 974 - self.exprComponent(0) - self.state = 977 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 975 - self.match(Parser.COMMA) - self.state = 976 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.SINGLE): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 979 - self.match(Parser.RPAREN) - pass - elif token in [Parser.FLOW_TO_STOCK, Parser.STOCK_TO_FLOW]: - localctx = Parser.FlowAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 981 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FLOW_TO_STOCK or _la == Parser.STOCK_TO_FLOW): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 982 - self.match(Parser.LPAREN) - self.state = 983 - self.exprComponent(0) - self.state = 984 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TIMESHIFT]: - localctx = Parser.TimeShiftAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 986 - self.match(Parser.TIMESHIFT) - self.state = 987 - self.match(Parser.LPAREN) - self.state = 988 - self.exprComponent(0) - self.state = 989 - self.match(Parser.COMMA) - self.state = 990 - self.signedInteger() - self.state = 991 - self.match(Parser.RPAREN) - pass - elif token in [Parser.TIME_AGG]: - localctx = Parser.TimeAggAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 993 - self.match(Parser.TIME_AGG) - self.state = 994 - self.match(Parser.LPAREN) - self.state = 995 - localctx.periodIndTo = self.match(Parser.STRING_CONSTANT) - self.state = 998 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 76, self._ctx) - if la_ == 1: - self.state = 996 - self.match(Parser.COMMA) - self.state = 997 - localctx.periodIndFrom = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.OPTIONAL or _la == Parser.STRING_CONSTANT): - localctx.periodIndFrom = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1002 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 77, self._ctx) - if la_ == 1: - self.state = 1000 - self.match(Parser.COMMA) - self.state = 1001 - localctx.op = self.optionalExprComponent() - - self.state = 1006 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1004 - self.match(Parser.COMMA) - self.state = 1005 - localctx.delim = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FIRST or _la == Parser.LAST): - localctx.delim = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1008 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CURRENT_DATE]: - localctx = Parser.CurrentDateAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 1009 - self.match(Parser.CURRENT_DATE) - self.state = 1010 - self.match(Parser.LPAREN) - self.state = 1011 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DATEDIFF]: - localctx = Parser.DateDiffAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 1012 - self.match(Parser.DATEDIFF) - self.state = 1013 - self.match(Parser.LPAREN) - self.state = 1014 - localctx.dateFrom = self.exprComponent(0) - self.state = 1015 - self.match(Parser.COMMA) - self.state = 1016 - localctx.dateTo = self.expr(0) - self.state = 1017 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DATEADD]: - localctx = Parser.DateAddAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 1019 - self.match(Parser.DATEADD) - self.state = 1020 - self.match(Parser.LPAREN) - self.state = 1021 - localctx.op = self.exprComponent(0) - self.state = 1022 - self.match(Parser.COMMA) - self.state = 1023 - localctx.shiftNumber = self.exprComponent(0) - self.state = 1024 - self.match(Parser.COMMA) - self.state = 1025 - localctx.periodInd = self.exprComponent(0) - self.state = 1026 - self.match(Parser.RPAREN) - pass - elif token in [Parser.YEAR_OP]: - localctx = Parser.YearAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 1028 - self.match(Parser.YEAR_OP) - self.state = 1029 - self.match(Parser.LPAREN) - self.state = 1030 - self.exprComponent(0) - self.state = 1031 - self.match(Parser.RPAREN) - pass - elif token in [Parser.MONTH_OP]: - localctx = Parser.MonthAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 1033 - self.match(Parser.MONTH_OP) - self.state = 1034 - self.match(Parser.LPAREN) - self.state = 1035 - self.exprComponent(0) - self.state = 1036 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYOFMONTH]: - localctx = Parser.DayOfMonthAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 1038 - self.match(Parser.DAYOFMONTH) - self.state = 1039 - self.match(Parser.LPAREN) - self.state = 1040 - self.exprComponent(0) - self.state = 1041 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYOFYEAR]: - localctx = Parser.DatOfYearAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 1043 - self.match(Parser.DAYOFYEAR) - self.state = 1044 - self.match(Parser.LPAREN) - self.state = 1045 - self.exprComponent(0) - self.state = 1046 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYTOYEAR]: - localctx = Parser.DayToYearAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 1048 - self.match(Parser.DAYTOYEAR) - self.state = 1049 - self.match(Parser.LPAREN) - self.state = 1050 - self.exprComponent(0) - self.state = 1051 - self.match(Parser.RPAREN) - pass - elif token in [Parser.DAYTOMONTH]: - localctx = Parser.DayToMonthAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 1053 - self.match(Parser.DAYTOMONTH) - self.state = 1054 - self.match(Parser.LPAREN) - self.state = 1055 - self.exprComponent(0) - self.state = 1056 - self.match(Parser.RPAREN) - pass - elif token in [Parser.YEARTODAY]: - localctx = Parser.YearTodayAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 1058 - self.match(Parser.YEARTODAY) - self.state = 1059 - self.match(Parser.LPAREN) - self.state = 1060 - self.exprComponent(0) - self.state = 1061 - self.match(Parser.RPAREN) - pass - elif token in [Parser.MONTHTODAY]: - localctx = Parser.MonthTodayAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 1063 - self.match(Parser.MONTHTODAY) - self.state = 1064 - self.match(Parser.LPAREN) - self.state = 1065 - self.exprComponent(0) - self.state = 1066 - self.match(Parser.RPAREN) - 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 SetOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_setOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class SetOrSYmDiffAtomContext(SetOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.SetOperatorsContext - super().__init__(parser) - self.op = None # Token - self.left = None # ExprContext - self.right = None # ExprContext - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def SETDIFF(self): - return self.getToken(Parser.SETDIFF, 0) - - def SYMDIFF(self): - return self.getToken(Parser.SYMDIFF, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSetOrSYmDiffAtom"): - return visitor.visitSetOrSYmDiffAtom(self) - else: - return visitor.visitChildren(self) - - class IntersectAtomContext(SetOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.SetOperatorsContext - super().__init__(parser) - self.left = None # ExprContext - self.copyFrom(ctx) - - def INTERSECT(self): - return self.getToken(Parser.INTERSECT, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIntersectAtom"): - return visitor.visitIntersectAtom(self) - else: - return visitor.visitChildren(self) - - class UnionAtomContext(SetOperatorsContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.SetOperatorsContext - super().__init__(parser) - self.left = None # ExprContext - self.copyFrom(ctx) - - def UNION(self): - return self.getToken(Parser.UNION, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitUnionAtom"): - return visitor.visitUnionAtom(self) - else: - return visitor.visitChildren(self) - - def setOperators(self): - - localctx = Parser.SetOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_setOperators) - self._la = 0 # Token type - try: - self.state = 1099 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.UNION]: - localctx = Parser.UnionAtomContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1070 - self.match(Parser.UNION) - self.state = 1071 - self.match(Parser.LPAREN) - self.state = 1072 - localctx.left = self.expr(0) - self.state = 1075 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 1073 - self.match(Parser.COMMA) - self.state = 1074 - self.expr(0) - self.state = 1077 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la != Parser.COMMA: - break - - self.state = 1079 - self.match(Parser.RPAREN) - pass - elif token in [Parser.INTERSECT]: - localctx = Parser.IntersectAtomContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1081 - self.match(Parser.INTERSECT) - self.state = 1082 - self.match(Parser.LPAREN) - self.state = 1083 - localctx.left = self.expr(0) - self.state = 1086 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 1084 - self.match(Parser.COMMA) - self.state = 1085 - self.expr(0) - self.state = 1088 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la != Parser.COMMA: - break - - self.state = 1090 - self.match(Parser.RPAREN) - pass - elif token in [Parser.SYMDIFF, Parser.SETDIFF]: - localctx = Parser.SetOrSYmDiffAtomContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1092 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.SYMDIFF or _la == Parser.SETDIFF): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1093 - self.match(Parser.LPAREN) - self.state = 1094 - localctx.left = self.expr(0) - self.state = 1095 - self.match(Parser.COMMA) - self.state = 1096 - localctx.right = self.expr(0) - self.state = 1097 - self.match(Parser.RPAREN) - 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 HierarchyOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.op = None # ExprContext - self.hrName = None # Token - self.ruleComponent = None # ComponentIDContext - - def HIERARCHY(self): - return self.getToken(Parser.HIERARCHY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def conditionClause(self): - return self.getTypedRuleContext(Parser.ConditionClauseContext, 0) - - def RULE(self): - return self.getToken(Parser.RULE, 0) - - def validationMode(self): - return self.getTypedRuleContext(Parser.ValidationModeContext, 0) - - def inputModeHierarchy(self): - return self.getTypedRuleContext(Parser.InputModeHierarchyContext, 0) - - def outputModeHierarchy(self): - return self.getTypedRuleContext(Parser.OutputModeHierarchyContext, 0) - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def getRuleIndex(self): - return Parser.RULE_hierarchyOperators - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHierarchyOperators"): - return visitor.visitHierarchyOperators(self) - else: - return visitor.visitChildren(self) - - def hierarchyOperators(self): - - localctx = Parser.HierarchyOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_hierarchyOperators) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1101 - self.match(Parser.HIERARCHY) - self.state = 1102 - self.match(Parser.LPAREN) - self.state = 1103 - localctx.op = self.expr(0) - self.state = 1104 - self.match(Parser.COMMA) - self.state = 1105 - localctx.hrName = self.match(Parser.IDENTIFIER) - self.state = 1107 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.CONDITION: - self.state = 1106 - self.conditionClause() - - self.state = 1111 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 84, self._ctx) - if la_ == 1: - self.state = 1109 - self.match(Parser.RULE) - self.state = 1110 - localctx.ruleComponent = self.componentID() - - self.state = 1114 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((_la - 225) & ~0x3F) == 0 and ( - (1 << (_la - 225)) - & ( - (1 << (Parser.NON_NULL - 225)) - | (1 << (Parser.NON_ZERO - 225)) - | (1 << (Parser.PARTIAL_NULL - 225)) - | (1 << (Parser.PARTIAL_ZERO - 225)) - | (1 << (Parser.ALWAYS_NULL - 225)) - | (1 << (Parser.ALWAYS_ZERO - 225)) - ) - ) != 0: - self.state = 1113 - self.validationMode() - - self.state = 1117 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DATASET or _la == Parser.RULE or _la == Parser.RULE_PRIORITY: - self.state = 1116 - self.inputModeHierarchy() - - self.state = 1120 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ALL or _la == Parser.COMPUTED: - self.state = 1119 - self.outputModeHierarchy() - - self.state = 1122 - self.match(Parser.RPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ValidationOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_validationOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class ValidateHRrulesetContext(ValidationOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ValidationOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.hrName = None # Token - self.copyFrom(ctx) - - def CHECK_HIERARCHY(self): - return self.getToken(Parser.CHECK_HIERARCHY, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def conditionClause(self): - return self.getTypedRuleContext(Parser.ConditionClauseContext, 0) - - def RULE(self): - return self.getToken(Parser.RULE, 0) - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def validationMode(self): - return self.getTypedRuleContext(Parser.ValidationModeContext, 0) - - def inputMode(self): - return self.getTypedRuleContext(Parser.InputModeContext, 0) - - def validationOutput(self): - return self.getTypedRuleContext(Parser.ValidationOutputContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidateHRruleset"): - return visitor.visitValidateHRruleset(self) - else: - return visitor.visitChildren(self) - - class ValidateDPrulesetContext(ValidationOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ValidationOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.dpName = None # Token - self.copyFrom(ctx) - - def CHECK_DATAPOINT(self): - return self.getToken(Parser.CHECK_DATAPOINT, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def COMPONENTS(self): - return self.getToken(Parser.COMPONENTS, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def validationOutput(self): - return self.getTypedRuleContext(Parser.ValidationOutputContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidateDPruleset"): - return visitor.visitValidateDPruleset(self) - else: - return visitor.visitChildren(self) - - class ValidationSimpleContext(ValidationOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ValidationOperatorsContext - super().__init__(parser) - self.op = None # ExprContext - self.codeErr = None # ErCodeContext - self.levelCode = None # ErLevelContext - self.output = None # Token - self.copyFrom(ctx) - - def CHECK(self): - return self.getToken(Parser.CHECK, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def imbalanceExpr(self): - return self.getTypedRuleContext(Parser.ImbalanceExprContext, 0) - - def erCode(self): - return self.getTypedRuleContext(Parser.ErCodeContext, 0) - - def erLevel(self): - return self.getTypedRuleContext(Parser.ErLevelContext, 0) - - def INVALID(self): - return self.getToken(Parser.INVALID, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidationSimple"): - return visitor.visitValidationSimple(self) - else: - return visitor.visitChildren(self) - - def validationOperators(self): - - localctx = Parser.ValidationOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_validationOperators) - self._la = 0 # Token type - try: - self.state = 1185 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.CHECK_DATAPOINT]: - localctx = Parser.ValidateDPrulesetContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1124 - self.match(Parser.CHECK_DATAPOINT) - self.state = 1125 - self.match(Parser.LPAREN) - self.state = 1126 - localctx.op = self.expr(0) - self.state = 1127 - self.match(Parser.COMMA) - self.state = 1128 - localctx.dpName = self.match(Parser.IDENTIFIER) - self.state = 1138 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMPONENTS: - self.state = 1129 - self.match(Parser.COMPONENTS) - self.state = 1130 - self.componentID() - self.state = 1135 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1131 - self.match(Parser.COMMA) - self.state = 1132 - self.componentID() - self.state = 1137 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1141 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ALL or _la == Parser.INVALID or _la == Parser.ALL_MEASURES: - self.state = 1140 - self.validationOutput() - - self.state = 1143 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CHECK_HIERARCHY]: - localctx = Parser.ValidateHRrulesetContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1145 - self.match(Parser.CHECK_HIERARCHY) - self.state = 1146 - self.match(Parser.LPAREN) - self.state = 1147 - localctx.op = self.expr(0) - self.state = 1148 - self.match(Parser.COMMA) - self.state = 1149 - localctx.hrName = self.match(Parser.IDENTIFIER) - self.state = 1151 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.CONDITION: - self.state = 1150 - self.conditionClause() - - self.state = 1155 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.RULE: - self.state = 1153 - self.match(Parser.RULE) - self.state = 1154 - self.componentID() - - self.state = 1158 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((_la - 225) & ~0x3F) == 0 and ( - (1 << (_la - 225)) - & ( - (1 << (Parser.NON_NULL - 225)) - | (1 << (Parser.NON_ZERO - 225)) - | (1 << (Parser.PARTIAL_NULL - 225)) - | (1 << (Parser.PARTIAL_ZERO - 225)) - | (1 << (Parser.ALWAYS_NULL - 225)) - | (1 << (Parser.ALWAYS_ZERO - 225)) - ) - ) != 0: - self.state = 1157 - self.validationMode() - - self.state = 1161 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DATASET or _la == Parser.DATASET_PRIORITY: - self.state = 1160 - self.inputMode() - - self.state = 1164 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ALL or _la == Parser.INVALID or _la == Parser.ALL_MEASURES: - self.state = 1163 - self.validationOutput() - - self.state = 1166 - self.match(Parser.RPAREN) - pass - elif token in [Parser.CHECK]: - localctx = Parser.ValidationSimpleContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1168 - self.match(Parser.CHECK) - self.state = 1169 - self.match(Parser.LPAREN) - self.state = 1170 - localctx.op = self.expr(0) - self.state = 1172 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORCODE: - self.state = 1171 - localctx.codeErr = self.erCode() - - self.state = 1175 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORLEVEL: - self.state = 1174 - localctx.levelCode = self.erLevel() - - self.state = 1178 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.IMBALANCE: - self.state = 1177 - self.imbalanceExpr() - - self.state = 1181 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ALL or _la == Parser.INVALID: - self.state = 1180 - localctx.output = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.INVALID): - localctx.output = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1183 - self.match(Parser.RPAREN) - 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 ConditionalOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_conditionalOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class NvlAtomContext(ConditionalOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ConditionalOperatorsContext - super().__init__(parser) - self.left = None # ExprContext - self.right = None # ExprContext - self.copyFrom(ctx) - - def NVL(self): - return self.getToken(Parser.NVL, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprContext) - else: - return self.getTypedRuleContext(Parser.ExprContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNvlAtom"): - return visitor.visitNvlAtom(self) - else: - return visitor.visitChildren(self) - - def conditionalOperators(self): - - localctx = Parser.ConditionalOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_conditionalOperators) - try: - localctx = Parser.NvlAtomContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1187 - self.match(Parser.NVL) - self.state = 1188 - self.match(Parser.LPAREN) - self.state = 1189 - localctx.left = self.expr(0) - self.state = 1190 - self.match(Parser.COMMA) - self.state = 1191 - localctx.right = self.expr(0) - self.state = 1192 - self.match(Parser.RPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ConditionalOperatorsComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_conditionalOperatorsComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class NvlAtomComponentContext(ConditionalOperatorsComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ConditionalOperatorsComponentContext - super().__init__(parser) - self.left = None # ExprComponentContext - self.right = None # ExprComponentContext - self.copyFrom(ctx) - - def NVL(self): - return self.getToken(Parser.NVL, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNvlAtomComponent"): - return visitor.visitNvlAtomComponent(self) - else: - return visitor.visitChildren(self) - - def conditionalOperatorsComponent(self): - - localctx = Parser.ConditionalOperatorsComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_conditionalOperatorsComponent) - try: - localctx = Parser.NvlAtomComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1194 - self.match(Parser.NVL) - self.state = 1195 - self.match(Parser.LPAREN) - self.state = 1196 - localctx.left = self.exprComponent(0) - self.state = 1197 - self.match(Parser.COMMA) - self.state = 1198 - localctx.right = self.exprComponent(0) - self.state = 1199 - self.match(Parser.RPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class AggrOperatorsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_aggrOperators - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class AggrCompContext(AggrOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AggrOperatorsContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def SUM(self): - return self.getToken(Parser.SUM, 0) - - def AVG(self): - return self.getToken(Parser.AVG, 0) - - def COUNT(self): - return self.getToken(Parser.COUNT, 0) - - def MEDIAN(self): - return self.getToken(Parser.MEDIAN, 0) - - def MIN(self): - return self.getToken(Parser.MIN, 0) - - def MAX(self): - return self.getToken(Parser.MAX, 0) - - def STDDEV_POP(self): - return self.getToken(Parser.STDDEV_POP, 0) - - def STDDEV_SAMP(self): - return self.getToken(Parser.STDDEV_SAMP, 0) - - def VAR_POP(self): - return self.getToken(Parser.VAR_POP, 0) - - def VAR_SAMP(self): - return self.getToken(Parser.VAR_SAMP, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggrComp"): - return visitor.visitAggrComp(self) - else: - return visitor.visitChildren(self) - - class CountAggrCompContext(AggrOperatorsContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AggrOperatorsContext - super().__init__(parser) - self.copyFrom(ctx) - - def COUNT(self): - return self.getToken(Parser.COUNT, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCountAggrComp"): - return visitor.visitCountAggrComp(self) - else: - return visitor.visitChildren(self) - - def aggrOperators(self): - - localctx = Parser.AggrOperatorsContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_aggrOperators) - self._la = 0 # Token type - try: - self.state = 1209 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 101, self._ctx) - if la_ == 1: - localctx = Parser.AggrCompContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1201 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 80) & ~0x3F) == 0 - and ( - (1 << (_la - 80)) - & ( - (1 << (Parser.MIN - 80)) - | (1 << (Parser.MAX - 80)) - | (1 << (Parser.SUM - 80)) - | (1 << (Parser.AVG - 80)) - | (1 << (Parser.MEDIAN - 80)) - | (1 << (Parser.COUNT - 80)) - | (1 << (Parser.STDDEV_POP - 80)) - | (1 << (Parser.STDDEV_SAMP - 80)) - | (1 << (Parser.VAR_POP - 80)) - | (1 << (Parser.VAR_SAMP - 80)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1202 - self.match(Parser.LPAREN) - self.state = 1203 - self.exprComponent(0) - self.state = 1204 - self.match(Parser.RPAREN) - pass - - elif la_ == 2: - localctx = Parser.CountAggrCompContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1206 - self.match(Parser.COUNT) - self.state = 1207 - self.match(Parser.LPAREN) - self.state = 1208 - self.match(Parser.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 AggrOperatorsGroupingContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_aggrOperatorsGrouping - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class AggrDatasetContext(AggrOperatorsGroupingContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AggrOperatorsGroupingContext - super().__init__(parser) - self.op = None # Token - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def SUM(self): - return self.getToken(Parser.SUM, 0) - - def AVG(self): - return self.getToken(Parser.AVG, 0) - - def COUNT(self): - return self.getToken(Parser.COUNT, 0) - - def MEDIAN(self): - return self.getToken(Parser.MEDIAN, 0) - - def MIN(self): - return self.getToken(Parser.MIN, 0) - - def MAX(self): - return self.getToken(Parser.MAX, 0) - - def STDDEV_POP(self): - return self.getToken(Parser.STDDEV_POP, 0) - - def STDDEV_SAMP(self): - return self.getToken(Parser.STDDEV_SAMP, 0) - - def VAR_POP(self): - return self.getToken(Parser.VAR_POP, 0) - - def VAR_SAMP(self): - return self.getToken(Parser.VAR_SAMP, 0) - - def groupingClause(self): - return self.getTypedRuleContext(Parser.GroupingClauseContext, 0) - - def havingClause(self): - return self.getTypedRuleContext(Parser.HavingClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggrDataset"): - return visitor.visitAggrDataset(self) - else: - return visitor.visitChildren(self) - - def aggrOperatorsGrouping(self): - - localctx = Parser.AggrOperatorsGroupingContext(self, self._ctx, self.state) - self.enterRule(localctx, 70, self.RULE_aggrOperatorsGrouping) - self._la = 0 # Token type - try: - localctx = Parser.AggrDatasetContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1211 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ((_la - 80) & ~0x3F) == 0 - and ( - (1 << (_la - 80)) - & ( - (1 << (Parser.MIN - 80)) - | (1 << (Parser.MAX - 80)) - | (1 << (Parser.SUM - 80)) - | (1 << (Parser.AVG - 80)) - | (1 << (Parser.MEDIAN - 80)) - | (1 << (Parser.COUNT - 80)) - | (1 << (Parser.STDDEV_POP - 80)) - | (1 << (Parser.STDDEV_SAMP - 80)) - | (1 << (Parser.VAR_POP - 80)) - | (1 << (Parser.VAR_SAMP - 80)) - ) - ) - != 0 - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1212 - self.match(Parser.LPAREN) - self.state = 1213 - self.expr(0) - self.state = 1218 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GROUP: - self.state = 1214 - self.groupingClause() - self.state = 1216 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.HAVING: - self.state = 1215 - self.havingClause() - - self.state = 1220 - self.match(Parser.RPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class AnFunctionContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_anFunction - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class LagOrLeadAnContext(AnFunctionContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.AnFunctionContext - super().__init__(parser) - self.op = None # Token - self.offset = None # SignedIntegerContext - self.defaultValue = None # ScalarItemContext - self.partition = None # PartitionByClauseContext - self.orderBy = None # OrderByClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def LAG(self): - return self.getToken(Parser.LAG, 0) - - def LEAD(self): - return self.getToken(Parser.LEAD, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def orderByClause(self): - return self.getTypedRuleContext(Parser.OrderByClauseContext, 0) - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def scalarItem(self): - return self.getTypedRuleContext(Parser.ScalarItemContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitLagOrLeadAn"): - return visitor.visitLagOrLeadAn(self) - else: - return visitor.visitChildren(self) - - class RatioToReportAnContext(AnFunctionContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.AnFunctionContext - super().__init__(parser) - self.op = None # Token - self.partition = None # PartitionByClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def RATIO_TO_REPORT(self): - return self.getToken(Parser.RATIO_TO_REPORT, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRatioToReportAn"): - return visitor.visitRatioToReportAn(self) - else: - return visitor.visitChildren(self) - - class AnSimpleFunctionContext(AnFunctionContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.AnFunctionContext - super().__init__(parser) - self.op = None # Token - self.partition = None # PartitionByClauseContext - self.orderBy = None # OrderByClauseContext - self.windowing = None # WindowingClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def SUM(self): - return self.getToken(Parser.SUM, 0) - - def AVG(self): - return self.getToken(Parser.AVG, 0) - - def COUNT(self): - return self.getToken(Parser.COUNT, 0) - - def MEDIAN(self): - return self.getToken(Parser.MEDIAN, 0) - - def MIN(self): - return self.getToken(Parser.MIN, 0) - - def MAX(self): - return self.getToken(Parser.MAX, 0) - - def STDDEV_POP(self): - return self.getToken(Parser.STDDEV_POP, 0) - - def STDDEV_SAMP(self): - return self.getToken(Parser.STDDEV_SAMP, 0) - - def VAR_POP(self): - return self.getToken(Parser.VAR_POP, 0) - - def VAR_SAMP(self): - return self.getToken(Parser.VAR_SAMP, 0) - - def FIRST_VALUE(self): - return self.getToken(Parser.FIRST_VALUE, 0) - - def LAST_VALUE(self): - return self.getToken(Parser.LAST_VALUE, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def orderByClause(self): - return self.getTypedRuleContext(Parser.OrderByClauseContext, 0) - - def windowingClause(self): - return self.getTypedRuleContext(Parser.WindowingClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAnSimpleFunction"): - return visitor.visitAnSimpleFunction(self) - else: - return visitor.visitChildren(self) - - def anFunction(self): - - localctx = Parser.AnFunctionContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_anFunction) - self._la = 0 # Token type - try: - self.state = 1269 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.MIN, - Parser.MAX, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - ]: - localctx = Parser.AnSimpleFunctionContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1222 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ( - ((_la - 80) & ~0x3F) == 0 - and ( - (1 << (_la - 80)) - & ( - (1 << (Parser.MIN - 80)) - | (1 << (Parser.MAX - 80)) - | (1 << (Parser.SUM - 80)) - | (1 << (Parser.AVG - 80)) - | (1 << (Parser.MEDIAN - 80)) - | (1 << (Parser.COUNT - 80)) - | (1 << (Parser.STDDEV_POP - 80)) - | (1 << (Parser.STDDEV_SAMP - 80)) - | (1 << (Parser.VAR_POP - 80)) - | (1 << (Parser.VAR_SAMP - 80)) - ) - ) - != 0 - ) - or _la == Parser.FIRST_VALUE - or _la == Parser.LAST_VALUE - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1223 - self.match(Parser.LPAREN) - self.state = 1224 - self.expr(0) - self.state = 1225 - self.match(Parser.OVER) - self.state = 1226 - self.match(Parser.LPAREN) - - self.state = 1228 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PARTITION: - self.state = 1227 - localctx.partition = self.partitionByClause() - - self.state = 1231 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ORDER: - self.state = 1230 - localctx.orderBy = self.orderByClause() - - self.state = 1234 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DATA or _la == Parser.RANGE: - self.state = 1233 - localctx.windowing = self.windowingClause() - - self.state = 1236 - self.match(Parser.RPAREN) - self.state = 1237 - self.match(Parser.RPAREN) - pass - elif token in [Parser.LAG, Parser.LEAD]: - localctx = Parser.LagOrLeadAnContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1239 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.LAG or _la == Parser.LEAD): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1240 - self.match(Parser.LPAREN) - self.state = 1241 - self.expr(0) - self.state = 1248 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1242 - self.match(Parser.COMMA) - self.state = 1243 - localctx.offset = self.signedInteger() - self.state = 1246 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1244 - self.match(Parser.COMMA) - self.state = 1245 - localctx.defaultValue = self.scalarItem() - - self.state = 1250 - self.match(Parser.OVER) - self.state = 1251 - self.match(Parser.LPAREN) - - self.state = 1253 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PARTITION: - self.state = 1252 - localctx.partition = self.partitionByClause() - - self.state = 1255 - localctx.orderBy = self.orderByClause() - self.state = 1257 - self.match(Parser.RPAREN) - self.state = 1258 - self.match(Parser.RPAREN) - pass - elif token in [Parser.RATIO_TO_REPORT]: - localctx = Parser.RatioToReportAnContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1260 - localctx.op = self.match(Parser.RATIO_TO_REPORT) - self.state = 1261 - self.match(Parser.LPAREN) - self.state = 1262 - self.expr(0) - self.state = 1263 - self.match(Parser.OVER) - self.state = 1264 - self.match(Parser.LPAREN) - - self.state = 1265 - localctx.partition = self.partitionByClause() - self.state = 1266 - self.match(Parser.RPAREN) - self.state = 1267 - self.match(Parser.RPAREN) - 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 AnFunctionComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_anFunctionComponent - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class AnSimpleFunctionComponentContext(AnFunctionComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AnFunctionComponentContext - super().__init__(parser) - self.op = None # Token - self.partition = None # PartitionByClauseContext - self.orderBy = None # OrderByClauseContext - self.windowing = None # WindowingClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def SUM(self): - return self.getToken(Parser.SUM, 0) - - def AVG(self): - return self.getToken(Parser.AVG, 0) - - def COUNT(self): - return self.getToken(Parser.COUNT, 0) - - def MEDIAN(self): - return self.getToken(Parser.MEDIAN, 0) - - def MIN(self): - return self.getToken(Parser.MIN, 0) - - def MAX(self): - return self.getToken(Parser.MAX, 0) - - def STDDEV_POP(self): - return self.getToken(Parser.STDDEV_POP, 0) - - def STDDEV_SAMP(self): - return self.getToken(Parser.STDDEV_SAMP, 0) - - def VAR_POP(self): - return self.getToken(Parser.VAR_POP, 0) - - def VAR_SAMP(self): - return self.getToken(Parser.VAR_SAMP, 0) - - def FIRST_VALUE(self): - return self.getToken(Parser.FIRST_VALUE, 0) - - def LAST_VALUE(self): - return self.getToken(Parser.LAST_VALUE, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def orderByClause(self): - return self.getTypedRuleContext(Parser.OrderByClauseContext, 0) - - def windowingClause(self): - return self.getTypedRuleContext(Parser.WindowingClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAnSimpleFunctionComponent"): - return visitor.visitAnSimpleFunctionComponent(self) - else: - return visitor.visitChildren(self) - - class LagOrLeadAnComponentContext(AnFunctionComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AnFunctionComponentContext - super().__init__(parser) - self.op = None # Token - self.offset = None # SignedIntegerContext - self.defaultValue = None # ScalarItemContext - self.partition = None # PartitionByClauseContext - self.orderBy = None # OrderByClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def LAG(self): - return self.getToken(Parser.LAG, 0) - - def LEAD(self): - return self.getToken(Parser.LEAD, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def orderByClause(self): - return self.getTypedRuleContext(Parser.OrderByClauseContext, 0) - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def scalarItem(self): - return self.getTypedRuleContext(Parser.ScalarItemContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitLagOrLeadAnComponent"): - return visitor.visitLagOrLeadAnComponent(self) - else: - return visitor.visitChildren(self) - - class RankAnComponentContext(AnFunctionComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AnFunctionComponentContext - super().__init__(parser) - self.op = None # Token - self.partition = None # PartitionByClauseContext - self.orderBy = None # OrderByClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def RANK(self): - return self.getToken(Parser.RANK, 0) - - def orderByClause(self): - return self.getTypedRuleContext(Parser.OrderByClauseContext, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRankAnComponent"): - return visitor.visitRankAnComponent(self) - else: - return visitor.visitChildren(self) - - class RatioToReportAnComponentContext(AnFunctionComponentContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.AnFunctionComponentContext - super().__init__(parser) - self.op = None # Token - self.partition = None # PartitionByClauseContext - self.copyFrom(ctx) - - def LPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.LPAREN) - else: - return self.getToken(Parser.LPAREN, i) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def OVER(self): - return self.getToken(Parser.OVER, 0) - - def RPAREN(self, i: int = None): - if i is None: - return self.getTokens(Parser.RPAREN) - else: - return self.getToken(Parser.RPAREN, i) - - def RATIO_TO_REPORT(self): - return self.getToken(Parser.RATIO_TO_REPORT, 0) - - def partitionByClause(self): - return self.getTypedRuleContext(Parser.PartitionByClauseContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRatioToReportAnComponent"): - return visitor.visitRatioToReportAnComponent(self) - else: - return visitor.visitChildren(self) - - def anFunctionComponent(self): - - localctx = Parser.AnFunctionComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_anFunctionComponent) - self._la = 0 # Token type - try: - self.state = 1329 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.MIN, - Parser.MAX, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - ]: - localctx = Parser.AnSimpleFunctionComponentContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1271 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not ( - ( - ((_la - 80) & ~0x3F) == 0 - and ( - (1 << (_la - 80)) - & ( - (1 << (Parser.MIN - 80)) - | (1 << (Parser.MAX - 80)) - | (1 << (Parser.SUM - 80)) - | (1 << (Parser.AVG - 80)) - | (1 << (Parser.MEDIAN - 80)) - | (1 << (Parser.COUNT - 80)) - | (1 << (Parser.STDDEV_POP - 80)) - | (1 << (Parser.STDDEV_SAMP - 80)) - | (1 << (Parser.VAR_POP - 80)) - | (1 << (Parser.VAR_SAMP - 80)) - ) - ) - != 0 - ) - or _la == Parser.FIRST_VALUE - or _la == Parser.LAST_VALUE - ): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1272 - self.match(Parser.LPAREN) - self.state = 1273 - self.exprComponent(0) - self.state = 1274 - self.match(Parser.OVER) - self.state = 1275 - self.match(Parser.LPAREN) - - self.state = 1277 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PARTITION: - self.state = 1276 - localctx.partition = self.partitionByClause() - - self.state = 1280 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ORDER: - self.state = 1279 - localctx.orderBy = self.orderByClause() - - self.state = 1283 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DATA or _la == Parser.RANGE: - self.state = 1282 - localctx.windowing = self.windowingClause() - - self.state = 1285 - self.match(Parser.RPAREN) - self.state = 1286 - self.match(Parser.RPAREN) - pass - elif token in [Parser.LAG, Parser.LEAD]: - localctx = Parser.LagOrLeadAnComponentContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1288 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.LAG or _la == Parser.LEAD): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1289 - self.match(Parser.LPAREN) - self.state = 1290 - self.exprComponent(0) - self.state = 1296 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1291 - self.match(Parser.COMMA) - self.state = 1292 - localctx.offset = self.signedInteger() - self.state = 1294 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.PLUS) - | (1 << Parser.MINUS) - | (1 << Parser.NULL_CONSTANT) - ) - ) - != 0 - ) or ( - ((_la - 218) & ~0x3F) == 0 - and ( - (1 << (_la - 218)) - & ( - (1 << (Parser.CAST - 218)) - | (1 << (Parser.INTEGER_CONSTANT - 218)) - | (1 << (Parser.NUMBER_CONSTANT - 218)) - | (1 << (Parser.BOOLEAN_CONSTANT - 218)) - | (1 << (Parser.STRING_CONSTANT - 218)) - ) - ) - != 0 - ): - self.state = 1293 - localctx.defaultValue = self.scalarItem() - - self.state = 1298 - self.match(Parser.OVER) - self.state = 1299 - self.match(Parser.LPAREN) - - self.state = 1301 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PARTITION: - self.state = 1300 - localctx.partition = self.partitionByClause() - - self.state = 1303 - localctx.orderBy = self.orderByClause() - self.state = 1305 - self.match(Parser.RPAREN) - self.state = 1306 - self.match(Parser.RPAREN) - pass - elif token in [Parser.RANK]: - localctx = Parser.RankAnComponentContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1308 - localctx.op = self.match(Parser.RANK) - self.state = 1309 - self.match(Parser.LPAREN) - self.state = 1310 - self.match(Parser.OVER) - self.state = 1311 - self.match(Parser.LPAREN) - - self.state = 1313 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PARTITION: - self.state = 1312 - localctx.partition = self.partitionByClause() - - self.state = 1315 - localctx.orderBy = self.orderByClause() - self.state = 1317 - self.match(Parser.RPAREN) - self.state = 1318 - self.match(Parser.RPAREN) - pass - elif token in [Parser.RATIO_TO_REPORT]: - localctx = Parser.RatioToReportAnComponentContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 1320 - localctx.op = self.match(Parser.RATIO_TO_REPORT) - self.state = 1321 - self.match(Parser.LPAREN) - self.state = 1322 - self.exprComponent(0) - self.state = 1323 - self.match(Parser.OVER) - self.state = 1324 - self.match(Parser.LPAREN) - - self.state = 1325 - localctx.partition = self.partitionByClause() - self.state = 1326 - self.match(Parser.RPAREN) - self.state = 1327 - self.match(Parser.RPAREN) - 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 RenameClauseItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.fromName = None # ComponentIDContext - self.toName = None # ComponentIDContext - - def TO(self): - return self.getToken(Parser.TO, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def getRuleIndex(self): - return Parser.RULE_renameClauseItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRenameClauseItem"): - return visitor.visitRenameClauseItem(self) - else: - return visitor.visitChildren(self) - - def renameClauseItem(self): - - localctx = Parser.RenameClauseItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_renameClauseItem) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1331 - localctx.fromName = self.componentID() - self.state = 1332 - self.match(Parser.TO) - self.state = 1333 - localctx.toName = self.componentID() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class AggregateClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def aggrFunctionClause(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.AggrFunctionClauseContext) - else: - return self.getTypedRuleContext(Parser.AggrFunctionClauseContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_aggregateClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggregateClause"): - return visitor.visitAggregateClause(self) - else: - return visitor.visitChildren(self) - - def aggregateClause(self): - - localctx = Parser.AggregateClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_aggregateClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1335 - self.aggrFunctionClause() - self.state = 1340 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1336 - self.match(Parser.COMMA) - self.state = 1337 - self.aggrFunctionClause() - self.state = 1342 - 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 AggrFunctionClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def ASSIGN(self): - return self.getToken(Parser.ASSIGN, 0) - - def aggrOperators(self): - return self.getTypedRuleContext(Parser.AggrOperatorsContext, 0) - - def componentRole(self): - return self.getTypedRuleContext(Parser.ComponentRoleContext, 0) - - def getRuleIndex(self): - return Parser.RULE_aggrFunctionClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAggrFunctionClause"): - return visitor.visitAggrFunctionClause(self) - else: - return visitor.visitChildren(self) - - def aggrFunctionClause(self): - - localctx = Parser.AggrFunctionClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_aggrFunctionClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1344 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ((_la - 103) & ~0x3F) == 0 - and ( - (1 << (_la - 103)) - & ( - (1 << (Parser.DIMENSION - 103)) - | (1 << (Parser.MEASURE - 103)) - | (1 << (Parser.ATTRIBUTE - 103)) - | (1 << (Parser.VIRAL - 103)) - ) - ) - != 0 - ) or _la == Parser.COMPONENT: - self.state = 1343 - self.componentRole() - - self.state = 1346 - self.componentID() - self.state = 1347 - self.match(Parser.ASSIGN) - self.state = 1348 - self.aggrOperators() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class CalcClauseItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def ASSIGN(self): - return self.getToken(Parser.ASSIGN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def componentRole(self): - return self.getTypedRuleContext(Parser.ComponentRoleContext, 0) - - def getRuleIndex(self): - return Parser.RULE_calcClauseItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCalcClauseItem"): - return visitor.visitCalcClauseItem(self) - else: - return visitor.visitChildren(self) - - def calcClauseItem(self): - - localctx = Parser.CalcClauseItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_calcClauseItem) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1351 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ( - ((_la - 103) & ~0x3F) == 0 - and ( - (1 << (_la - 103)) - & ( - (1 << (Parser.DIMENSION - 103)) - | (1 << (Parser.MEASURE - 103)) - | (1 << (Parser.ATTRIBUTE - 103)) - | (1 << (Parser.VIRAL - 103)) - ) - ) - != 0 - ) or _la == Parser.COMPONENT: - self.state = 1350 - self.componentRole() - - self.state = 1353 - self.componentID() - self.state = 1354 - self.match(Parser.ASSIGN) - self.state = 1355 - self.exprComponent(0) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class SubspaceClauseItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def EQ(self): - return self.getToken(Parser.EQ, 0) - - def scalarItem(self): - return self.getTypedRuleContext(Parser.ScalarItemContext, 0) - - def getRuleIndex(self): - return Parser.RULE_subspaceClauseItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSubspaceClauseItem"): - return visitor.visitSubspaceClauseItem(self) - else: - return visitor.visitChildren(self) - - def subspaceClauseItem(self): - - localctx = Parser.SubspaceClauseItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_subspaceClauseItem) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1357 - self.componentID() - self.state = 1358 - self.match(Parser.EQ) - self.state = 1359 - self.scalarItem() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ScalarItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_scalarItem - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class ScalarWithCastContext(ScalarItemContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ScalarItemContext - super().__init__(parser) - self.copyFrom(ctx) - - def CAST(self): - return self.getToken(Parser.CAST, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def basicScalarType(self): - return self.getTypedRuleContext(Parser.BasicScalarTypeContext, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitScalarWithCast"): - return visitor.visitScalarWithCast(self) - else: - return visitor.visitChildren(self) - - class SimpleScalarContext(ScalarItemContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.ScalarItemContext - super().__init__(parser) - self.copyFrom(ctx) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSimpleScalar"): - return visitor.visitSimpleScalar(self) - else: - return visitor.visitChildren(self) - - def scalarItem(self): - - localctx = Parser.ScalarItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_scalarItem) - self._la = 0 # Token type - try: - self.state = 1373 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.PLUS, - Parser.MINUS, - Parser.NULL_CONSTANT, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - ]: - localctx = Parser.SimpleScalarContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1361 - self.constant() - pass - elif token in [Parser.CAST]: - localctx = Parser.ScalarWithCastContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1362 - self.match(Parser.CAST) - self.state = 1363 - self.match(Parser.LPAREN) - self.state = 1364 - self.constant() - self.state = 1365 - self.match(Parser.COMMA) - - self.state = 1366 - self.basicScalarType() - self.state = 1369 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1367 - self.match(Parser.COMMA) - self.state = 1368 - self.match(Parser.STRING_CONSTANT) - - self.state = 1371 - self.match(Parser.RPAREN) - 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 JoinClauseWithoutUsingContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def joinClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.JoinClauseItemContext) - else: - return self.getTypedRuleContext(Parser.JoinClauseItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_joinClauseWithoutUsing - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinClauseWithoutUsing"): - return visitor.visitJoinClauseWithoutUsing(self) - else: - return visitor.visitChildren(self) - - def joinClauseWithoutUsing(self): - - localctx = Parser.JoinClauseWithoutUsingContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_joinClauseWithoutUsing) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1375 - self.joinClauseItem() - self.state = 1380 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1376 - self.match(Parser.COMMA) - self.state = 1377 - self.joinClauseItem() - self.state = 1382 - 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 JoinClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def joinClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.JoinClauseItemContext) - else: - return self.getTypedRuleContext(Parser.JoinClauseItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def USING(self): - return self.getToken(Parser.USING, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def getRuleIndex(self): - return Parser.RULE_joinClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinClause"): - return visitor.visitJoinClause(self) - else: - return visitor.visitChildren(self) - - def joinClause(self): - - localctx = Parser.JoinClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_joinClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1383 - self.joinClauseItem() - self.state = 1388 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1384 - self.match(Parser.COMMA) - self.state = 1385 - self.joinClauseItem() - self.state = 1390 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1400 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.USING: - self.state = 1391 - self.match(Parser.USING) - self.state = 1392 - self.componentID() - self.state = 1397 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1393 - self.match(Parser.COMMA) - self.state = 1394 - self.componentID() - self.state = 1399 - 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 JoinClauseItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def AS(self): - return self.getToken(Parser.AS, 0) - - def alias(self): - return self.getTypedRuleContext(Parser.AliasContext, 0) - - def getRuleIndex(self): - return Parser.RULE_joinClauseItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinClauseItem"): - return visitor.visitJoinClauseItem(self) - else: - return visitor.visitChildren(self) - - def joinClauseItem(self): - - localctx = Parser.JoinClauseItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_joinClauseItem) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1402 - self.expr(0) - self.state = 1405 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.AS: - self.state = 1403 - self.match(Parser.AS) - self.state = 1404 - self.alias() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class JoinBodyContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def filterClause(self): - return self.getTypedRuleContext(Parser.FilterClauseContext, 0) - - def calcClause(self): - return self.getTypedRuleContext(Parser.CalcClauseContext, 0) - - def joinApplyClause(self): - return self.getTypedRuleContext(Parser.JoinApplyClauseContext, 0) - - def aggrClause(self): - return self.getTypedRuleContext(Parser.AggrClauseContext, 0) - - def keepOrDropClause(self): - return self.getTypedRuleContext(Parser.KeepOrDropClauseContext, 0) - - def renameClause(self): - return self.getTypedRuleContext(Parser.RenameClauseContext, 0) - - def getRuleIndex(self): - return Parser.RULE_joinBody - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinBody"): - return visitor.visitJoinBody(self) - else: - return visitor.visitChildren(self) - - def joinBody(self): - - localctx = Parser.JoinBodyContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_joinBody) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1408 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.FILTER: - self.state = 1407 - self.filterClause() - - self.state = 1413 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.CALC]: - self.state = 1410 - self.calcClause() - pass - elif token in [Parser.APPLY]: - self.state = 1411 - self.joinApplyClause() - pass - elif token in [Parser.AGGREGATE]: - self.state = 1412 - self.aggrClause() - pass - elif token in [Parser.RPAREN, Parser.DROP, Parser.KEEP, Parser.RENAME]: - pass - else: - pass - self.state = 1416 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DROP or _la == Parser.KEEP: - self.state = 1415 - self.keepOrDropClause() - - self.state = 1419 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.RENAME: - self.state = 1418 - self.renameClause() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class JoinApplyClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def APPLY(self): - return self.getToken(Parser.APPLY, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def getRuleIndex(self): - return Parser.RULE_joinApplyClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitJoinApplyClause"): - return visitor.visitJoinApplyClause(self) - else: - return visitor.visitChildren(self) - - def joinApplyClause(self): - - localctx = Parser.JoinApplyClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_joinApplyClause) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1421 - self.match(Parser.APPLY) - self.state = 1422 - 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 PartitionByClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def PARTITION(self): - return self.getToken(Parser.PARTITION, 0) - - def BY(self): - return self.getToken(Parser.BY, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_partitionByClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitPartitionByClause"): - return visitor.visitPartitionByClause(self) - else: - return visitor.visitChildren(self) - - def partitionByClause(self): - - localctx = Parser.PartitionByClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_partitionByClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1424 - self.match(Parser.PARTITION) - self.state = 1425 - self.match(Parser.BY) - self.state = 1426 - self.componentID() - self.state = 1431 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1427 - self.match(Parser.COMMA) - self.state = 1428 - self.componentID() - self.state = 1433 - 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 OrderByClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ORDER(self): - return self.getToken(Parser.ORDER, 0) - - def BY(self): - return self.getToken(Parser.BY, 0) - - def orderByItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.OrderByItemContext) - else: - return self.getTypedRuleContext(Parser.OrderByItemContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_orderByClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOrderByClause"): - return visitor.visitOrderByClause(self) - else: - return visitor.visitChildren(self) - - def orderByClause(self): - - localctx = Parser.OrderByClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_orderByClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1434 - self.match(Parser.ORDER) - self.state = 1435 - self.match(Parser.BY) - self.state = 1436 - self.orderByItem() - self.state = 1441 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1437 - self.match(Parser.COMMA) - self.state = 1438 - self.orderByItem() - self.state = 1443 - 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 OrderByItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def ASC(self): - return self.getToken(Parser.ASC, 0) - - def DESC(self): - return self.getToken(Parser.DESC, 0) - - def getRuleIndex(self): - return Parser.RULE_orderByItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOrderByItem"): - return visitor.visitOrderByItem(self) - else: - return visitor.visitChildren(self) - - def orderByItem(self): - - localctx = Parser.OrderByItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_orderByItem) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1444 - self.componentID() - self.state = 1446 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ASC or _la == Parser.DESC: - self.state = 1445 - _la = self._input.LA(1) - if not (_la == Parser.ASC or _la == Parser.DESC): - 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 WindowingClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.from_ = None # LimitClauseItemContext - self.to_ = None # LimitClauseItemContext - - def BETWEEN(self): - return self.getToken(Parser.BETWEEN, 0) - - def AND(self): - return self.getToken(Parser.AND, 0) - - def limitClauseItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.LimitClauseItemContext) - else: - return self.getTypedRuleContext(Parser.LimitClauseItemContext, i) - - def RANGE(self): - return self.getToken(Parser.RANGE, 0) - - def DATA(self): - return self.getToken(Parser.DATA, 0) - - def POINTS(self): - return self.getToken(Parser.POINTS, 0) - - def getRuleIndex(self): - return Parser.RULE_windowingClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitWindowingClause"): - return visitor.visitWindowingClause(self) - else: - return visitor.visitChildren(self) - - def windowingClause(self): - - localctx = Parser.WindowingClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_windowingClause) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1451 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.DATA]: - self.state = 1448 - self.match(Parser.DATA) - self.state = 1449 - self.match(Parser.POINTS) - pass - elif token in [Parser.RANGE]: - self.state = 1450 - self.match(Parser.RANGE) - pass - else: - raise NoViableAltException(self) - - self.state = 1453 - self.match(Parser.BETWEEN) - self.state = 1454 - localctx.from_ = self.limitClauseItem() - self.state = 1455 - self.match(Parser.AND) - self.state = 1456 - localctx.to_ = self.limitClauseItem() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class SignedIntegerContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def INTEGER_CONSTANT(self): - return self.getToken(Parser.INTEGER_CONSTANT, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def getRuleIndex(self): - return Parser.RULE_signedInteger - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSignedInteger"): - return visitor.visitSignedInteger(self) - else: - return visitor.visitChildren(self) - - def signedInteger(self): - - localctx = Parser.SignedIntegerContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_signedInteger) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1459 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PLUS or _la == Parser.MINUS: - self.state = 1458 - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MINUS): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1461 - self.match(Parser.INTEGER_CONSTANT) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class SignedNumberContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def NUMBER_CONSTANT(self): - return self.getToken(Parser.NUMBER_CONSTANT, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def getRuleIndex(self): - return Parser.RULE_signedNumber - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSignedNumber"): - return visitor.visitSignedNumber(self) - else: - return visitor.visitChildren(self) - - def signedNumber(self): - - localctx = Parser.SignedNumberContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_signedNumber) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1464 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PLUS or _la == Parser.MINUS: - self.state = 1463 - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MINUS): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1466 - self.match(Parser.NUMBER_CONSTANT) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class LimitClauseItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.limitDir = None # Token - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def PRECEDING(self): - return self.getToken(Parser.PRECEDING, 0) - - def FOLLOWING(self): - return self.getToken(Parser.FOLLOWING, 0) - - def CURRENT(self): - return self.getToken(Parser.CURRENT, 0) - - def DATA(self): - return self.getToken(Parser.DATA, 0) - - def POINT(self): - return self.getToken(Parser.POINT, 0) - - def UNBOUNDED(self): - return self.getToken(Parser.UNBOUNDED, 0) - - def getRuleIndex(self): - return Parser.RULE_limitClauseItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitLimitClauseItem"): - return visitor.visitLimitClauseItem(self) - else: - return visitor.visitChildren(self) - - def limitClauseItem(self): - - localctx = Parser.LimitClauseItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_limitClauseItem) - try: - self.state = 1481 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 139, self._ctx) - if la_ == 1: - self.enterOuterAlt(localctx, 1) - self.state = 1468 - self.signedInteger() - self.state = 1469 - localctx.limitDir = self.match(Parser.PRECEDING) - pass - - elif la_ == 2: - self.enterOuterAlt(localctx, 2) - self.state = 1471 - self.signedInteger() - self.state = 1472 - localctx.limitDir = self.match(Parser.FOLLOWING) - pass - - elif la_ == 3: - self.enterOuterAlt(localctx, 3) - self.state = 1474 - self.match(Parser.CURRENT) - self.state = 1475 - self.match(Parser.DATA) - self.state = 1476 - self.match(Parser.POINT) - pass - - elif la_ == 4: - self.enterOuterAlt(localctx, 4) - self.state = 1477 - self.match(Parser.UNBOUNDED) - self.state = 1478 - localctx.limitDir = self.match(Parser.PRECEDING) - pass - - elif la_ == 5: - self.enterOuterAlt(localctx, 5) - self.state = 1479 - self.match(Parser.UNBOUNDED) - self.state = 1480 - localctx.limitDir = self.match(Parser.FOLLOWING) - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class GroupingClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_groupingClause - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class GroupAllContext(GroupingClauseContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GroupingClauseContext - super().__init__(parser) - self.delim = None # Token - self.copyFrom(ctx) - - def GROUP(self): - return self.getToken(Parser.GROUP, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def TIME_AGG(self): - return self.getToken(Parser.TIME_AGG, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def COMMA(self): - return self.getToken(Parser.COMMA, 0) - - def FIRST(self): - return self.getToken(Parser.FIRST, 0) - - def LAST(self): - return self.getToken(Parser.LAST, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitGroupAll"): - return visitor.visitGroupAll(self) - else: - return visitor.visitChildren(self) - - class GroupByOrExceptContext(GroupingClauseContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.GroupingClauseContext - super().__init__(parser) - self.op = None # Token - self.delim = None # Token - self.copyFrom(ctx) - - def GROUP(self): - return self.getToken(Parser.GROUP, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def BY(self): - return self.getToken(Parser.BY, 0) - - def EXCEPT(self): - return self.getToken(Parser.EXCEPT, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def TIME_AGG(self): - return self.getToken(Parser.TIME_AGG, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def FIRST(self): - return self.getToken(Parser.FIRST, 0) - - def LAST(self): - return self.getToken(Parser.LAST, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitGroupByOrExcept"): - return visitor.visitGroupByOrExcept(self) - else: - return visitor.visitChildren(self) - - def groupingClause(self): - - localctx = Parser.GroupingClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_groupingClause) - self._la = 0 # Token type - try: - self.state = 1515 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 145, self._ctx) - if la_ == 1: - localctx = Parser.GroupByOrExceptContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1483 - self.match(Parser.GROUP) - self.state = 1484 - localctx.op = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.BY or _la == Parser.EXCEPT): - localctx.op = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1485 - self.componentID() - self.state = 1490 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1486 - self.match(Parser.COMMA) - self.state = 1487 - self.componentID() - self.state = 1492 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1501 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.TIME_AGG: - self.state = 1493 - self.match(Parser.TIME_AGG) - self.state = 1494 - self.match(Parser.LPAREN) - self.state = 1495 - self.match(Parser.STRING_CONSTANT) - self.state = 1498 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1496 - self.match(Parser.COMMA) - self.state = 1497 - localctx.delim = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FIRST or _la == Parser.LAST): - localctx.delim = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1500 - self.match(Parser.RPAREN) - - pass - - elif la_ == 2: - localctx = Parser.GroupAllContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1503 - self.match(Parser.GROUP) - self.state = 1504 - self.match(Parser.ALL) - self.state = 1513 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.TIME_AGG: - self.state = 1505 - self.match(Parser.TIME_AGG) - self.state = 1506 - self.match(Parser.LPAREN) - self.state = 1507 - self.match(Parser.STRING_CONSTANT) - self.state = 1510 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.COMMA: - self.state = 1508 - self.match(Parser.COMMA) - self.state = 1509 - localctx.delim = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.FIRST or _la == Parser.LAST): - localctx.delim = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1512 - self.match(Parser.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 HavingClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def HAVING(self): - return self.getToken(Parser.HAVING, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def getRuleIndex(self): - return Parser.RULE_havingClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHavingClause"): - return visitor.visitHavingClause(self) - else: - return visitor.visitChildren(self) - - def havingClause(self): - - localctx = Parser.HavingClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_havingClause) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1517 - self.match(Parser.HAVING) - self.state = 1518 - self.exprComponent(0) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ParameterItemContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def varID(self): - return self.getTypedRuleContext(Parser.VarIDContext, 0) - - def inputParameterType(self): - return self.getTypedRuleContext(Parser.InputParameterTypeContext, 0) - - def DEFAULT(self): - return self.getToken(Parser.DEFAULT, 0) - - def scalarItem(self): - return self.getTypedRuleContext(Parser.ScalarItemContext, 0) - - def getRuleIndex(self): - return Parser.RULE_parameterItem - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitParameterItem"): - return visitor.visitParameterItem(self) - else: - return visitor.visitChildren(self) - - def parameterItem(self): - - localctx = Parser.ParameterItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_parameterItem) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1520 - self.varID() - self.state = 1521 - self.inputParameterType() - self.state = 1524 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.DEFAULT: - self.state = 1522 - self.match(Parser.DEFAULT) - self.state = 1523 - self.scalarItem() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class OutputParameterTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def datasetType(self): - return self.getTypedRuleContext(Parser.DatasetTypeContext, 0) - - def componentType(self): - return self.getTypedRuleContext(Parser.ComponentTypeContext, 0) - - def getRuleIndex(self): - return Parser.RULE_outputParameterType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOutputParameterType"): - return visitor.visitOutputParameterType(self) - else: - return visitor.visitChildren(self) - - def outputParameterType(self): - - localctx = Parser.OutputParameterTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_outputParameterType) - try: - self.state = 1529 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 1526 - self.scalarType() - pass - elif token in [Parser.DATASET]: - self.enterOuterAlt(localctx, 2) - self.state = 1527 - self.datasetType() - pass - elif token in [ - Parser.DIMENSION, - Parser.MEASURE, - Parser.ATTRIBUTE, - Parser.VIRAL, - Parser.COMPONENT, - ]: - self.enterOuterAlt(localctx, 3) - self.state = 1528 - self.componentType() - 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 OutputParameterTypeComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentType(self): - return self.getTypedRuleContext(Parser.ComponentTypeContext, 0) - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def getRuleIndex(self): - return Parser.RULE_outputParameterTypeComponent - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOutputParameterTypeComponent"): - return visitor.visitOutputParameterTypeComponent(self) - else: - return visitor.visitChildren(self) - - def outputParameterTypeComponent(self): - - localctx = Parser.OutputParameterTypeComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_outputParameterTypeComponent) - try: - self.state = 1533 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.DIMENSION, - Parser.MEASURE, - Parser.ATTRIBUTE, - Parser.VIRAL, - Parser.COMPONENT, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 1531 - self.componentType() - pass - elif token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 2) - self.state = 1532 - self.scalarType() - 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 InputParameterTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def datasetType(self): - return self.getTypedRuleContext(Parser.DatasetTypeContext, 0) - - def scalarSetType(self): - return self.getTypedRuleContext(Parser.ScalarSetTypeContext, 0) - - def rulesetType(self): - return self.getTypedRuleContext(Parser.RulesetTypeContext, 0) - - def componentType(self): - return self.getTypedRuleContext(Parser.ComponentTypeContext, 0) - - def getRuleIndex(self): - return Parser.RULE_inputParameterType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInputParameterType"): - return visitor.visitInputParameterType(self) - else: - return visitor.visitChildren(self) - - def inputParameterType(self): - - localctx = Parser.InputParameterTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_inputParameterType) - try: - self.state = 1540 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 1535 - self.scalarType() - pass - elif token in [Parser.DATASET]: - self.enterOuterAlt(localctx, 2) - self.state = 1536 - self.datasetType() - pass - elif token in [Parser.SET]: - self.enterOuterAlt(localctx, 3) - self.state = 1537 - self.scalarSetType() - pass - elif token in [ - Parser.DATAPOINT, - Parser.HIERARCHICAL, - Parser.RULESET, - Parser.DATAPOINT_ON_VD, - Parser.DATAPOINT_ON_VAR, - Parser.HIERARCHICAL_ON_VD, - Parser.HIERARCHICAL_ON_VAR, - ]: - self.enterOuterAlt(localctx, 4) - self.state = 1538 - self.rulesetType() - pass - elif token in [ - Parser.DIMENSION, - Parser.MEASURE, - Parser.ATTRIBUTE, - Parser.VIRAL, - Parser.COMPONENT, - ]: - self.enterOuterAlt(localctx, 5) - self.state = 1539 - self.componentType() - 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 RulesetTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def RULESET(self): - return self.getToken(Parser.RULESET, 0) - - def dpRuleset(self): - return self.getTypedRuleContext(Parser.DpRulesetContext, 0) - - def hrRuleset(self): - return self.getTypedRuleContext(Parser.HrRulesetContext, 0) - - def getRuleIndex(self): - return Parser.RULE_rulesetType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRulesetType"): - return visitor.visitRulesetType(self) - else: - return visitor.visitChildren(self) - - def rulesetType(self): - - localctx = Parser.RulesetTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_rulesetType) - try: - self.state = 1545 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.RULESET]: - self.enterOuterAlt(localctx, 1) - self.state = 1542 - self.match(Parser.RULESET) - pass - elif token in [Parser.DATAPOINT, Parser.DATAPOINT_ON_VD, Parser.DATAPOINT_ON_VAR]: - self.enterOuterAlt(localctx, 2) - self.state = 1543 - self.dpRuleset() - pass - elif token in [ - Parser.HIERARCHICAL, - Parser.HIERARCHICAL_ON_VD, - Parser.HIERARCHICAL_ON_VAR, - ]: - self.enterOuterAlt(localctx, 3) - self.state = 1544 - self.hrRuleset() - 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 ScalarTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def basicScalarType(self): - return self.getTypedRuleContext(Parser.BasicScalarTypeContext, 0) - - def valueDomainName(self): - return self.getTypedRuleContext(Parser.ValueDomainNameContext, 0) - - def scalarTypeConstraint(self): - return self.getTypedRuleContext(Parser.ScalarTypeConstraintContext, 0) - - def NULL_CONSTANT(self): - return self.getToken(Parser.NULL_CONSTANT, 0) - - def NOT(self): - return self.getToken(Parser.NOT, 0) - - def getRuleIndex(self): - return Parser.RULE_scalarType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitScalarType"): - return visitor.visitScalarType(self) - else: - return visitor.visitChildren(self) - - def scalarType(self): - - localctx = Parser.ScalarTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_scalarType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1549 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - ]: - self.state = 1547 - self.basicScalarType() - pass - elif token in [Parser.IDENTIFIER]: - self.state = 1548 - self.valueDomainName() - pass - else: - raise NoViableAltException(self) - - self.state = 1552 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.QLPAREN or _la == Parser.GLPAREN: - self.state = 1551 - self.scalarTypeConstraint() - - self.state = 1558 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.NOT or _la == Parser.NULL_CONSTANT: - self.state = 1555 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.NOT: - self.state = 1554 - self.match(Parser.NOT) - - self.state = 1557 - self.match(Parser.NULL_CONSTANT) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ComponentTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentRole(self): - return self.getTypedRuleContext(Parser.ComponentRoleContext, 0) - - def LT(self): - return self.getToken(Parser.LT, 0) - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def MT(self): - return self.getToken(Parser.MT, 0) - - def getRuleIndex(self): - return Parser.RULE_componentType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComponentType"): - return visitor.visitComponentType(self) - else: - return visitor.visitChildren(self) - - def componentType(self): - - localctx = Parser.ComponentTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 128, self.RULE_componentType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1560 - self.componentRole() - self.state = 1565 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LT: - self.state = 1561 - self.match(Parser.LT) - self.state = 1562 - self.scalarType() - self.state = 1563 - self.match(Parser.MT) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class DatasetTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def DATASET(self): - return self.getToken(Parser.DATASET, 0) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def compConstraint(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.CompConstraintContext) - else: - return self.getTypedRuleContext(Parser.CompConstraintContext, i) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_datasetType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDatasetType"): - return visitor.visitDatasetType(self) - else: - return visitor.visitChildren(self) - - def datasetType(self): - - localctx = Parser.DatasetTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_datasetType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1567 - self.match(Parser.DATASET) - self.state = 1579 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GLPAREN: - self.state = 1568 - self.match(Parser.GLPAREN) - self.state = 1569 - self.compConstraint() - self.state = 1574 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1570 - self.match(Parser.COMMA) - self.state = 1571 - self.compConstraint() - self.state = 1576 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1577 - self.match(Parser.GRPAREN) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class EvalDatasetTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def datasetType(self): - return self.getTypedRuleContext(Parser.DatasetTypeContext, 0) - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def getRuleIndex(self): - return Parser.RULE_evalDatasetType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitEvalDatasetType"): - return visitor.visitEvalDatasetType(self) - else: - return visitor.visitChildren(self) - - def evalDatasetType(self): - - localctx = Parser.EvalDatasetTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_evalDatasetType) - try: - self.state = 1583 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.DATASET]: - self.enterOuterAlt(localctx, 1) - self.state = 1581 - self.datasetType() - pass - elif token in [ - Parser.BOOLEAN, - Parser.DATE, - Parser.TIME_PERIOD, - Parser.NUMBER, - Parser.STRING, - Parser.TIME, - Parser.INTEGER, - Parser.DURATION, - Parser.SCALAR, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 2) - self.state = 1582 - self.scalarType() - 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 ScalarSetTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def SET(self): - return self.getToken(Parser.SET, 0) - - def LT(self): - return self.getToken(Parser.LT, 0) - - def scalarType(self): - return self.getTypedRuleContext(Parser.ScalarTypeContext, 0) - - def MT(self): - return self.getToken(Parser.MT, 0) - - def getRuleIndex(self): - return Parser.RULE_scalarSetType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitScalarSetType"): - return visitor.visitScalarSetType(self) - else: - return visitor.visitChildren(self) - - def scalarSetType(self): - - localctx = Parser.ScalarSetTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_scalarSetType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1585 - self.match(Parser.SET) - self.state = 1590 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LT: - self.state = 1586 - self.match(Parser.LT) - self.state = 1587 - self.scalarType() - self.state = 1588 - self.match(Parser.MT) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class DpRulesetContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_dpRuleset - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class DataPointVdContext(DpRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DpRulesetContext - super().__init__(parser) - self.copyFrom(ctx) - - def DATAPOINT_ON_VD(self): - return self.getToken(Parser.DATAPOINT_ON_VD, 0) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def valueDomainName(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ValueDomainNameContext) - else: - return self.getTypedRuleContext(Parser.ValueDomainNameContext, i) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def MUL(self, i: int = None): - if i is None: - return self.getTokens(Parser.MUL) - else: - return self.getToken(Parser.MUL, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDataPointVd"): - return visitor.visitDataPointVd(self) - else: - return visitor.visitChildren(self) - - class DataPointVarContext(DpRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DpRulesetContext - super().__init__(parser) - self.copyFrom(ctx) - - def DATAPOINT_ON_VAR(self): - return self.getToken(Parser.DATAPOINT_ON_VAR, 0) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def varID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.VarIDContext) - else: - return self.getTypedRuleContext(Parser.VarIDContext, i) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def MUL(self, i: int = None): - if i is None: - return self.getTokens(Parser.MUL) - else: - return self.getToken(Parser.MUL, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDataPointVar"): - return visitor.visitDataPointVar(self) - else: - return visitor.visitChildren(self) - - class DataPointContext(DpRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.DpRulesetContext - super().__init__(parser) - self.copyFrom(ctx) - - def DATAPOINT(self): - return self.getToken(Parser.DATAPOINT, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitDataPoint"): - return visitor.visitDataPoint(self) - else: - return visitor.visitChildren(self) - - def dpRuleset(self): - - localctx = Parser.DpRulesetContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_dpRuleset) - self._la = 0 # Token type - try: - self.state = 1621 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.DATAPOINT]: - localctx = Parser.DataPointContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1592 - self.match(Parser.DATAPOINT) - pass - elif token in [Parser.DATAPOINT_ON_VD]: - localctx = Parser.DataPointVdContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1593 - self.match(Parser.DATAPOINT_ON_VD) - self.state = 1605 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GLPAREN: - self.state = 1594 - self.match(Parser.GLPAREN) - self.state = 1595 - self.valueDomainName() - self.state = 1600 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.MUL: - self.state = 1596 - self.match(Parser.MUL) - self.state = 1597 - self.valueDomainName() - self.state = 1602 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1603 - self.match(Parser.GRPAREN) - - pass - elif token in [Parser.DATAPOINT_ON_VAR]: - localctx = Parser.DataPointVarContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1607 - self.match(Parser.DATAPOINT_ON_VAR) - self.state = 1619 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GLPAREN: - self.state = 1608 - self.match(Parser.GLPAREN) - self.state = 1609 - self.varID() - self.state = 1614 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.MUL: - self.state = 1610 - self.match(Parser.MUL) - self.state = 1611 - self.varID() - self.state = 1616 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1617 - self.match(Parser.GRPAREN) - - 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 HrRulesetContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_hrRuleset - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class HrRulesetVdTypeContext(HrRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.HrRulesetContext - super().__init__(parser) - self.vdName = None # Token - self.copyFrom(ctx) - - def HIERARCHICAL_ON_VD(self): - return self.getToken(Parser.HIERARCHICAL_ON_VD, 0) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def valueDomainName(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ValueDomainNameContext) - else: - return self.getTypedRuleContext(Parser.ValueDomainNameContext, i) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def MUL(self, i: int = None): - if i is None: - return self.getTokens(Parser.MUL) - else: - return self.getToken(Parser.MUL, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHrRulesetVdType"): - return visitor.visitHrRulesetVdType(self) - else: - return visitor.visitChildren(self) - - class HrRulesetVarTypeContext(HrRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.HrRulesetContext - super().__init__(parser) - self.varName = None # VarIDContext - self.copyFrom(ctx) - - def HIERARCHICAL_ON_VAR(self): - return self.getToken(Parser.HIERARCHICAL_ON_VAR, 0) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def varID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.VarIDContext) - else: - return self.getTypedRuleContext(Parser.VarIDContext, i) - - def LPAREN(self): - return self.getToken(Parser.LPAREN, 0) - - def RPAREN(self): - return self.getToken(Parser.RPAREN, 0) - - def MUL(self, i: int = None): - if i is None: - return self.getTokens(Parser.MUL) - else: - return self.getToken(Parser.MUL, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHrRulesetVarType"): - return visitor.visitHrRulesetVarType(self) - else: - return visitor.visitChildren(self) - - class HrRulesetTypeContext(HrRulesetContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a Parser.HrRulesetContext - super().__init__(parser) - self.copyFrom(ctx) - - def HIERARCHICAL(self): - return self.getToken(Parser.HIERARCHICAL, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHrRulesetType"): - return visitor.visitHrRulesetType(self) - else: - return visitor.visitChildren(self) - - def hrRuleset(self): - - localctx = Parser.HrRulesetContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_hrRuleset) - self._la = 0 # Token type - try: - self.state = 1663 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.HIERARCHICAL]: - localctx = Parser.HrRulesetTypeContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1623 - self.match(Parser.HIERARCHICAL) - pass - elif token in [Parser.HIERARCHICAL_ON_VD]: - localctx = Parser.HrRulesetVdTypeContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1624 - self.match(Parser.HIERARCHICAL_ON_VD) - self.state = 1641 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GLPAREN: - self.state = 1625 - self.match(Parser.GLPAREN) - self.state = 1626 - localctx.vdName = self.match(Parser.IDENTIFIER) - self.state = 1638 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LPAREN: - self.state = 1627 - self.match(Parser.LPAREN) - self.state = 1628 - self.valueDomainName() - self.state = 1633 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.MUL: - self.state = 1629 - self.match(Parser.MUL) - self.state = 1630 - self.valueDomainName() - self.state = 1635 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1636 - self.match(Parser.RPAREN) - - self.state = 1640 - self.match(Parser.GRPAREN) - - pass - elif token in [Parser.HIERARCHICAL_ON_VAR]: - localctx = Parser.HrRulesetVarTypeContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1643 - self.match(Parser.HIERARCHICAL_ON_VAR) - self.state = 1661 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.GLPAREN: - self.state = 1644 - self.match(Parser.GLPAREN) - self.state = 1645 - localctx.varName = self.varID() - self.state = 1657 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.LPAREN: - self.state = 1646 - self.match(Parser.LPAREN) - self.state = 1647 - self.varID() - self.state = 1652 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.MUL: - self.state = 1648 - self.match(Parser.MUL) - self.state = 1649 - self.varID() - self.state = 1654 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1655 - self.match(Parser.RPAREN) - - self.state = 1659 - self.match(Parser.GRPAREN) - - 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 ValueDomainNameContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_valueDomainName - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValueDomainName"): - return visitor.visitValueDomainName(self) - else: - return visitor.visitChildren(self) - - def valueDomainName(self): - - localctx = Parser.ValueDomainNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_valueDomainName) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1665 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class RulesetIDContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_rulesetID - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRulesetID"): - return visitor.visitRulesetID(self) - else: - return visitor.visitChildren(self) - - def rulesetID(self): - - localctx = Parser.RulesetIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 142, self.RULE_rulesetID) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1667 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class RulesetSignatureContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def signature(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.SignatureContext) - else: - return self.getTypedRuleContext(Parser.SignatureContext, i) - - def VALUE_DOMAIN(self): - return self.getToken(Parser.VALUE_DOMAIN, 0) - - def VARIABLE(self): - return self.getToken(Parser.VARIABLE, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_rulesetSignature - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRulesetSignature"): - return visitor.visitRulesetSignature(self) - else: - return visitor.visitChildren(self) - - def rulesetSignature(self): - - localctx = Parser.RulesetSignatureContext(self, self._ctx, self.state) - self.enterRule(localctx, 144, self.RULE_rulesetSignature) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1669 - _la = self._input.LA(1) - if not (_la == Parser.VALUE_DOMAIN or _la == Parser.VARIABLE): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1670 - self.signature() - self.state = 1675 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1671 - self.match(Parser.COMMA) - self.state = 1672 - self.signature() - self.state = 1677 - 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 SignatureContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def varID(self): - return self.getTypedRuleContext(Parser.VarIDContext, 0) - - def AS(self): - return self.getToken(Parser.AS, 0) - - def alias(self): - return self.getTypedRuleContext(Parser.AliasContext, 0) - - def getRuleIndex(self): - return Parser.RULE_signature - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSignature"): - return visitor.visitSignature(self) - else: - return visitor.visitChildren(self) - - def signature(self): - - localctx = Parser.SignatureContext(self, self._ctx, self.state) - self.enterRule(localctx, 146, self.RULE_signature) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1678 - self.varID() - self.state = 1681 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.AS: - self.state = 1679 - self.match(Parser.AS) - self.state = 1680 - self.alias() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class RuleClauseDatapointContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ruleItemDatapoint(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.RuleItemDatapointContext) - else: - return self.getTypedRuleContext(Parser.RuleItemDatapointContext, i) - - def EOL(self, i: int = None): - if i is None: - return self.getTokens(Parser.EOL) - else: - return self.getToken(Parser.EOL, i) - - def getRuleIndex(self): - return Parser.RULE_ruleClauseDatapoint - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRuleClauseDatapoint"): - return visitor.visitRuleClauseDatapoint(self) - else: - return visitor.visitChildren(self) - - def ruleClauseDatapoint(self): - - localctx = Parser.RuleClauseDatapointContext(self, self._ctx, self.state) - self.enterRule(localctx, 148, self.RULE_ruleClauseDatapoint) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1683 - self.ruleItemDatapoint() - self.state = 1688 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.EOL: - self.state = 1684 - self.match(Parser.EOL) - self.state = 1685 - self.ruleItemDatapoint() - self.state = 1690 - 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 RuleItemDatapointContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.ruleName = None # Token - self.antecedentContiditon = None # ExprComponentContext - self.consequentCondition = None # ExprComponentContext - - def exprComponent(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ExprComponentContext) - else: - return self.getTypedRuleContext(Parser.ExprComponentContext, i) - - def COLON(self): - return self.getToken(Parser.COLON, 0) - - def WHEN(self): - return self.getToken(Parser.WHEN, 0) - - def THEN(self): - return self.getToken(Parser.THEN, 0) - - def erCode(self): - return self.getTypedRuleContext(Parser.ErCodeContext, 0) - - def erLevel(self): - return self.getTypedRuleContext(Parser.ErLevelContext, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_ruleItemDatapoint - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRuleItemDatapoint"): - return visitor.visitRuleItemDatapoint(self) - else: - return visitor.visitChildren(self) - - def ruleItemDatapoint(self): - - localctx = Parser.RuleItemDatapointContext(self, self._ctx, self.state) - self.enterRule(localctx, 150, self.RULE_ruleItemDatapoint) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1693 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 175, self._ctx) - if la_ == 1: - self.state = 1691 - localctx.ruleName = self.match(Parser.IDENTIFIER) - self.state = 1692 - self.match(Parser.COLON) - - self.state = 1699 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.WHEN: - self.state = 1695 - self.match(Parser.WHEN) - self.state = 1696 - localctx.antecedentContiditon = self.exprComponent(0) - self.state = 1697 - self.match(Parser.THEN) - - self.state = 1701 - localctx.consequentCondition = self.exprComponent(0) - self.state = 1703 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORCODE: - self.state = 1702 - self.erCode() - - self.state = 1706 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORLEVEL: - self.state = 1705 - self.erLevel() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class RuleClauseHierarchicalContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ruleItemHierarchical(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.RuleItemHierarchicalContext) - else: - return self.getTypedRuleContext(Parser.RuleItemHierarchicalContext, i) - - def EOL(self, i: int = None): - if i is None: - return self.getTokens(Parser.EOL) - else: - return self.getToken(Parser.EOL, i) - - def getRuleIndex(self): - return Parser.RULE_ruleClauseHierarchical - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRuleClauseHierarchical"): - return visitor.visitRuleClauseHierarchical(self) - else: - return visitor.visitChildren(self) - - def ruleClauseHierarchical(self): - - localctx = Parser.RuleClauseHierarchicalContext(self, self._ctx, self.state) - self.enterRule(localctx, 152, self.RULE_ruleClauseHierarchical) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1708 - self.ruleItemHierarchical() - self.state = 1713 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.EOL: - self.state = 1709 - self.match(Parser.EOL) - self.state = 1710 - self.ruleItemHierarchical() - self.state = 1715 - 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 RuleItemHierarchicalContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.ruleName = None # Token - - def codeItemRelation(self): - return self.getTypedRuleContext(Parser.CodeItemRelationContext, 0) - - def COLON(self): - return self.getToken(Parser.COLON, 0) - - def erCode(self): - return self.getTypedRuleContext(Parser.ErCodeContext, 0) - - def erLevel(self): - return self.getTypedRuleContext(Parser.ErLevelContext, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_ruleItemHierarchical - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRuleItemHierarchical"): - return visitor.visitRuleItemHierarchical(self) - else: - return visitor.visitChildren(self) - - def ruleItemHierarchical(self): - - localctx = Parser.RuleItemHierarchicalContext(self, self._ctx, self.state) - self.enterRule(localctx, 154, self.RULE_ruleItemHierarchical) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1718 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 180, self._ctx) - if la_ == 1: - self.state = 1716 - localctx.ruleName = self.match(Parser.IDENTIFIER) - self.state = 1717 - self.match(Parser.COLON) - - self.state = 1720 - self.codeItemRelation() - self.state = 1722 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORCODE: - self.state = 1721 - self.erCode() - - self.state = 1725 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.ERRORLEVEL: - self.state = 1724 - self.erLevel() - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class HierRuleSignatureContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def RULE(self): - return self.getToken(Parser.RULE, 0) - - def IDENTIFIER(self): - return self.getToken(Parser.IDENTIFIER, 0) - - def VALUE_DOMAIN(self): - return self.getToken(Parser.VALUE_DOMAIN, 0) - - def VARIABLE(self): - return self.getToken(Parser.VARIABLE, 0) - - def CONDITION(self): - return self.getToken(Parser.CONDITION, 0) - - def valueDomainSignature(self): - return self.getTypedRuleContext(Parser.ValueDomainSignatureContext, 0) - - def getRuleIndex(self): - return Parser.RULE_hierRuleSignature - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitHierRuleSignature"): - return visitor.visitHierRuleSignature(self) - else: - return visitor.visitChildren(self) - - def hierRuleSignature(self): - - localctx = Parser.HierRuleSignatureContext(self, self._ctx, self.state) - self.enterRule(localctx, 156, self.RULE_hierRuleSignature) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1727 - _la = self._input.LA(1) - if not (_la == Parser.VALUE_DOMAIN or _la == Parser.VARIABLE): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 1730 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.CONDITION: - self.state = 1728 - self.match(Parser.CONDITION) - self.state = 1729 - self.valueDomainSignature() - - self.state = 1732 - self.match(Parser.RULE) - self.state = 1733 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ValueDomainSignatureContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def signature(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.SignatureContext) - else: - return self.getTypedRuleContext(Parser.SignatureContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_valueDomainSignature - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValueDomainSignature"): - return visitor.visitValueDomainSignature(self) - else: - return visitor.visitChildren(self) - - def valueDomainSignature(self): - - localctx = Parser.ValueDomainSignatureContext(self, self._ctx, self.state) - self.enterRule(localctx, 158, self.RULE_valueDomainSignature) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1735 - self.signature() - self.state = 1740 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1736 - self.match(Parser.COMMA) - self.state = 1737 - self.signature() - self.state = 1742 - 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 CodeItemRelationContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.codetemRef = None # ValueDomainValueContext - - def codeItemRelationClause(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.CodeItemRelationClauseContext) - else: - return self.getTypedRuleContext(Parser.CodeItemRelationClauseContext, i) - - def valueDomainValue(self): - return self.getTypedRuleContext(Parser.ValueDomainValueContext, 0) - - def WHEN(self): - return self.getToken(Parser.WHEN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def THEN(self): - return self.getToken(Parser.THEN, 0) - - def comparisonOperand(self): - return self.getTypedRuleContext(Parser.ComparisonOperandContext, 0) - - def getRuleIndex(self): - return Parser.RULE_codeItemRelation - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCodeItemRelation"): - return visitor.visitCodeItemRelation(self) - else: - return visitor.visitChildren(self) - - def codeItemRelation(self): - - localctx = Parser.CodeItemRelationContext(self, self._ctx, self.state) - self.enterRule(localctx, 160, self.RULE_codeItemRelation) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1747 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.WHEN: - self.state = 1743 - self.match(Parser.WHEN) - self.state = 1744 - self.exprComponent(0) - self.state = 1745 - self.match(Parser.THEN) - - self.state = 1749 - localctx.codetemRef = self.valueDomainValue() - self.state = 1751 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((_la) & ~0x3F) == 0 and ( - (1 << _la) - & ( - (1 << Parser.EQ) - | (1 << Parser.LT) - | (1 << Parser.MT) - | (1 << Parser.ME) - | (1 << Parser.NEQ) - | (1 << Parser.LE) - ) - ) != 0: - self.state = 1750 - self.comparisonOperand() - - self.state = 1753 - self.codeItemRelationClause() - self.state = 1757 - self._errHandler.sync(self) - _la = self._input.LA(1) - while ( - _la == Parser.PLUS - or _la == Parser.MINUS - or ( - ((_la - 241) & ~0x3F) == 0 - and ( - (1 << (_la - 241)) - & ( - (1 << (Parser.INTEGER_CONSTANT - 241)) - | (1 << (Parser.NUMBER_CONSTANT - 241)) - | (1 << (Parser.IDENTIFIER - 241)) - ) - ) - != 0 - ) - ): - self.state = 1754 - self.codeItemRelationClause() - self.state = 1759 - 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 CodeItemRelationClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - self.opAdd = None # Token - self.rightCodeItem = None # ValueDomainValueContext - self.rightCondition = None # ExprComponentContext - - def valueDomainValue(self): - return self.getTypedRuleContext(Parser.ValueDomainValueContext, 0) - - def QLPAREN(self): - return self.getToken(Parser.QLPAREN, 0) - - def QRPAREN(self): - return self.getToken(Parser.QRPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MINUS(self): - return self.getToken(Parser.MINUS, 0) - - def getRuleIndex(self): - return Parser.RULE_codeItemRelationClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCodeItemRelationClause"): - return visitor.visitCodeItemRelationClause(self) - else: - return visitor.visitChildren(self) - - def codeItemRelationClause(self): - - localctx = Parser.CodeItemRelationClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 162, self.RULE_codeItemRelationClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1761 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 188, self._ctx) - if la_ == 1: - self.state = 1760 - localctx.opAdd = self._input.LT(1) - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MINUS): - localctx.opAdd = self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - - self.state = 1763 - localctx.rightCodeItem = self.valueDomainValue() - self.state = 1768 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.QLPAREN: - self.state = 1764 - self.match(Parser.QLPAREN) - self.state = 1765 - localctx.rightCondition = self.exprComponent(0) - self.state = 1766 - self.match(Parser.QRPAREN) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ValueDomainValueContext(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(Parser.IDENTIFIER, 0) - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def signedNumber(self): - return self.getTypedRuleContext(Parser.SignedNumberContext, 0) - - def getRuleIndex(self): - return Parser.RULE_valueDomainValue - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValueDomainValue"): - return visitor.visitValueDomainValue(self) - else: - return visitor.visitChildren(self) - - def valueDomainValue(self): - - localctx = Parser.ValueDomainValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 164, self.RULE_valueDomainValue) - try: - self.state = 1773 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 190, self._ctx) - if la_ == 1: - self.enterOuterAlt(localctx, 1) - self.state = 1770 - self.match(Parser.IDENTIFIER) - pass - - elif la_ == 2: - self.enterOuterAlt(localctx, 2) - self.state = 1771 - self.signedInteger() - pass - - elif la_ == 3: - self.enterOuterAlt(localctx, 3) - self.state = 1772 - self.signedNumber() - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ScalarTypeConstraintContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return Parser.RULE_scalarTypeConstraint - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class RangeConstraintContext(ScalarTypeConstraintContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ScalarTypeConstraintContext - super().__init__(parser) - self.copyFrom(ctx) - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def scalarItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ScalarItemContext) - else: - return self.getTypedRuleContext(Parser.ScalarItemContext, i) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRangeConstraint"): - return visitor.visitRangeConstraint(self) - else: - return visitor.visitChildren(self) - - class ConditionConstraintContext(ScalarTypeConstraintContext): - def __init__( - self, parser, ctx: ParserRuleContext - ): # actually a Parser.ScalarTypeConstraintContext - super().__init__(parser) - self.copyFrom(ctx) - - def QLPAREN(self): - return self.getToken(Parser.QLPAREN, 0) - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def QRPAREN(self): - return self.getToken(Parser.QRPAREN, 0) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConditionConstraint"): - return visitor.visitConditionConstraint(self) - else: - return visitor.visitChildren(self) - - def scalarTypeConstraint(self): - - localctx = Parser.ScalarTypeConstraintContext(self, self._ctx, self.state) - self.enterRule(localctx, 166, self.RULE_scalarTypeConstraint) - self._la = 0 # Token type - try: - self.state = 1790 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.QLPAREN]: - localctx = Parser.ConditionConstraintContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1775 - self.match(Parser.QLPAREN) - self.state = 1776 - self.exprComponent(0) - self.state = 1777 - self.match(Parser.QRPAREN) - pass - elif token in [Parser.GLPAREN]: - localctx = Parser.RangeConstraintContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1779 - self.match(Parser.GLPAREN) - self.state = 1780 - self.scalarItem() - self.state = 1785 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1781 - self.match(Parser.COMMA) - self.state = 1782 - self.scalarItem() - self.state = 1787 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1788 - self.match(Parser.GRPAREN) - 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 CompConstraintContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def componentType(self): - return self.getTypedRuleContext(Parser.ComponentTypeContext, 0) - - def componentID(self): - return self.getTypedRuleContext(Parser.ComponentIDContext, 0) - - def multModifier(self): - return self.getTypedRuleContext(Parser.MultModifierContext, 0) - - def getRuleIndex(self): - return Parser.RULE_compConstraint - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitCompConstraint"): - return visitor.visitCompConstraint(self) - else: - return visitor.visitChildren(self) - - def compConstraint(self): - - localctx = Parser.CompConstraintContext(self, self._ctx, self.state) - self.enterRule(localctx, 168, self.RULE_compConstraint) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1792 - self.componentType() - self.state = 1795 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.IDENTIFIER]: - self.state = 1793 - self.componentID() - pass - elif token in [Parser.OPTIONAL]: - self.state = 1794 - self.multModifier() - 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 MultModifierContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def PLUS(self): - return self.getToken(Parser.PLUS, 0) - - def MUL(self): - return self.getToken(Parser.MUL, 0) - - def getRuleIndex(self): - return Parser.RULE_multModifier - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitMultModifier"): - return visitor.visitMultModifier(self) - else: - return visitor.visitChildren(self) - - def multModifier(self): - - localctx = Parser.MultModifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 170, self.RULE_multModifier) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1797 - self.match(Parser.OPTIONAL) - self.state = 1799 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la == Parser.PLUS or _la == Parser.MUL: - self.state = 1798 - _la = self._input.LA(1) - if not (_la == Parser.PLUS or _la == Parser.MUL): - 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 ValidationOutputContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def INVALID(self): - return self.getToken(Parser.INVALID, 0) - - def ALL_MEASURES(self): - return self.getToken(Parser.ALL_MEASURES, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def getRuleIndex(self): - return Parser.RULE_validationOutput - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidationOutput"): - return visitor.visitValidationOutput(self) - else: - return visitor.visitChildren(self) - - def validationOutput(self): - - localctx = Parser.ValidationOutputContext(self, self._ctx, self.state) - self.enterRule(localctx, 172, self.RULE_validationOutput) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1801 - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.INVALID or _la == Parser.ALL_MEASURES): - 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 ValidationModeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def NON_NULL(self): - return self.getToken(Parser.NON_NULL, 0) - - def NON_ZERO(self): - return self.getToken(Parser.NON_ZERO, 0) - - def PARTIAL_NULL(self): - return self.getToken(Parser.PARTIAL_NULL, 0) - - def PARTIAL_ZERO(self): - return self.getToken(Parser.PARTIAL_ZERO, 0) - - def ALWAYS_NULL(self): - return self.getToken(Parser.ALWAYS_NULL, 0) - - def ALWAYS_ZERO(self): - return self.getToken(Parser.ALWAYS_ZERO, 0) - - def getRuleIndex(self): - return Parser.RULE_validationMode - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValidationMode"): - return visitor.visitValidationMode(self) - else: - return visitor.visitChildren(self) - - def validationMode(self): - - localctx = Parser.ValidationModeContext(self, self._ctx, self.state) - self.enterRule(localctx, 174, self.RULE_validationMode) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1803 - _la = self._input.LA(1) - if not ( - ((_la - 225) & ~0x3F) == 0 - and ( - (1 << (_la - 225)) - & ( - (1 << (Parser.NON_NULL - 225)) - | (1 << (Parser.NON_ZERO - 225)) - | (1 << (Parser.PARTIAL_NULL - 225)) - | (1 << (Parser.PARTIAL_ZERO - 225)) - | (1 << (Parser.ALWAYS_NULL - 225)) - | (1 << (Parser.ALWAYS_ZERO - 225)) - ) - ) - != 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 ConditionClauseContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def CONDITION(self): - return self.getToken(Parser.CONDITION, 0) - - def componentID(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ComponentIDContext) - else: - return self.getTypedRuleContext(Parser.ComponentIDContext, i) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_conditionClause - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConditionClause"): - return visitor.visitConditionClause(self) - else: - return visitor.visitChildren(self) - - def conditionClause(self): - - localctx = Parser.ConditionClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 176, self.RULE_conditionClause) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1805 - self.match(Parser.CONDITION) - self.state = 1806 - self.componentID() - self.state = 1811 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1807 - self.match(Parser.COMMA) - self.state = 1808 - self.componentID() - self.state = 1813 - 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 InputModeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def DATASET(self): - return self.getToken(Parser.DATASET, 0) - - def DATASET_PRIORITY(self): - return self.getToken(Parser.DATASET_PRIORITY, 0) - - def getRuleIndex(self): - return Parser.RULE_inputMode - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInputMode"): - return visitor.visitInputMode(self) - else: - return visitor.visitChildren(self) - - def inputMode(self): - - localctx = Parser.InputModeContext(self, self._ctx, self.state) - self.enterRule(localctx, 178, self.RULE_inputMode) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1814 - _la = self._input.LA(1) - if not (_la == Parser.DATASET or _la == Parser.DATASET_PRIORITY): - 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 ImbalanceExprContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def IMBALANCE(self): - return self.getToken(Parser.IMBALANCE, 0) - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def getRuleIndex(self): - return Parser.RULE_imbalanceExpr - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitImbalanceExpr"): - return visitor.visitImbalanceExpr(self) - else: - return visitor.visitChildren(self) - - def imbalanceExpr(self): - - localctx = Parser.ImbalanceExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 180, self.RULE_imbalanceExpr) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1816 - self.match(Parser.IMBALANCE) - self.state = 1817 - 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 InputModeHierarchyContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def RULE(self): - return self.getToken(Parser.RULE, 0) - - def DATASET(self): - return self.getToken(Parser.DATASET, 0) - - def RULE_PRIORITY(self): - return self.getToken(Parser.RULE_PRIORITY, 0) - - def getRuleIndex(self): - return Parser.RULE_inputModeHierarchy - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitInputModeHierarchy"): - return visitor.visitInputModeHierarchy(self) - else: - return visitor.visitChildren(self) - - def inputModeHierarchy(self): - - localctx = Parser.InputModeHierarchyContext(self, self._ctx, self.state) - self.enterRule(localctx, 182, self.RULE_inputModeHierarchy) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1819 - _la = self._input.LA(1) - if not (_la == Parser.DATASET or _la == Parser.RULE or _la == Parser.RULE_PRIORITY): - 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 OutputModeHierarchyContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def COMPUTED(self): - return self.getToken(Parser.COMPUTED, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def getRuleIndex(self): - return Parser.RULE_outputModeHierarchy - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOutputModeHierarchy"): - return visitor.visitOutputModeHierarchy(self) - else: - return visitor.visitChildren(self) - - def outputModeHierarchy(self): - - localctx = Parser.OutputModeHierarchyContext(self, self._ctx, self.state) - self.enterRule(localctx, 184, self.RULE_outputModeHierarchy) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1821 - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.COMPUTED): - 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 AliasContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_alias - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitAlias"): - return visitor.visitAlias(self) - else: - return visitor.visitChildren(self) - - def alias(self): - - localctx = Parser.AliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 186, self.RULE_alias) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1823 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class VarIDContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_varID - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitVarID"): - return visitor.visitVarID(self) - else: - return visitor.visitChildren(self) - - def varID(self): - - localctx = Parser.VarIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 188, self.RULE_varID) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1825 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class SimpleComponentIdContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_simpleComponentId - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitSimpleComponentId"): - return visitor.visitSimpleComponentId(self) - else: - return visitor.visitChildren(self) - - def simpleComponentId(self): - - localctx = Parser.SimpleComponentIdContext(self, self._ctx, self.state) - self.enterRule(localctx, 190, self.RULE_simpleComponentId) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1827 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ComponentIDContext(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(Parser.IDENTIFIER) - else: - return self.getToken(Parser.IDENTIFIER, i) - - def MEMBERSHIP(self): - return self.getToken(Parser.MEMBERSHIP, 0) - - def getRuleIndex(self): - return Parser.RULE_componentID - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComponentID"): - return visitor.visitComponentID(self) - else: - return visitor.visitChildren(self) - - def componentID(self): - - localctx = Parser.ComponentIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 192, self.RULE_componentID) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1829 - self.match(Parser.IDENTIFIER) - self.state = 1832 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 196, self._ctx) - if la_ == 1: - self.state = 1830 - self.match(Parser.MEMBERSHIP) - self.state = 1831 - self.match(Parser.IDENTIFIER) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ListsContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def GLPAREN(self): - return self.getToken(Parser.GLPAREN, 0) - - def scalarItem(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(Parser.ScalarItemContext) - else: - return self.getTypedRuleContext(Parser.ScalarItemContext, i) - - def GRPAREN(self): - return self.getToken(Parser.GRPAREN, 0) - - def COMMA(self, i: int = None): - if i is None: - return self.getTokens(Parser.COMMA) - else: - return self.getToken(Parser.COMMA, i) - - def getRuleIndex(self): - return Parser.RULE_lists - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitLists"): - return visitor.visitLists(self) - else: - return visitor.visitChildren(self) - - def lists(self): - - localctx = Parser.ListsContext(self, self._ctx, self.state) - self.enterRule(localctx, 194, self.RULE_lists) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1834 - self.match(Parser.GLPAREN) - self.state = 1835 - self.scalarItem() - self.state = 1840 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == Parser.COMMA: - self.state = 1836 - self.match(Parser.COMMA) - self.state = 1837 - self.scalarItem() - self.state = 1842 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1843 - self.match(Parser.GRPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ErCodeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ERRORCODE(self): - return self.getToken(Parser.ERRORCODE, 0) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def getRuleIndex(self): - return Parser.RULE_erCode - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitErCode"): - return visitor.visitErCode(self) - else: - return visitor.visitChildren(self) - - def erCode(self): - - localctx = Parser.ErCodeContext(self, self._ctx, self.state) - self.enterRule(localctx, 196, self.RULE_erCode) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1845 - self.match(Parser.ERRORCODE) - self.state = 1846 - self.constant() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ErLevelContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ERRORLEVEL(self): - return self.getToken(Parser.ERRORLEVEL, 0) - - def constant(self): - return self.getTypedRuleContext(Parser.ConstantContext, 0) - - def getRuleIndex(self): - return Parser.RULE_erLevel - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitErLevel"): - return visitor.visitErLevel(self) - else: - return visitor.visitChildren(self) - - def erLevel(self): - - localctx = Parser.ErLevelContext(self, self._ctx, self.state) - self.enterRule(localctx, 198, self.RULE_erLevel) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1848 - self.match(Parser.ERRORLEVEL) - self.state = 1849 - self.constant() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ComparisonOperandContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def MT(self): - return self.getToken(Parser.MT, 0) - - def ME(self): - return self.getToken(Parser.ME, 0) - - def LE(self): - return self.getToken(Parser.LE, 0) - - def LT(self): - return self.getToken(Parser.LT, 0) - - def EQ(self): - return self.getToken(Parser.EQ, 0) - - def NEQ(self): - return self.getToken(Parser.NEQ, 0) - - def getRuleIndex(self): - return Parser.RULE_comparisonOperand - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComparisonOperand"): - return visitor.visitComparisonOperand(self) - else: - return visitor.visitChildren(self) - - def comparisonOperand(self): - - localctx = Parser.ComparisonOperandContext(self, self._ctx, self.state) - self.enterRule(localctx, 200, self.RULE_comparisonOperand) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1851 - _la = self._input.LA(1) - if not ( - ((_la) & ~0x3F) == 0 - and ( - (1 << _la) - & ( - (1 << Parser.EQ) - | (1 << Parser.LT) - | (1 << Parser.MT) - | (1 << Parser.ME) - | (1 << Parser.NEQ) - | (1 << Parser.LE) - ) - ) - != 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 OptionalExprContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def expr(self): - return self.getTypedRuleContext(Parser.ExprContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def getRuleIndex(self): - return Parser.RULE_optionalExpr - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOptionalExpr"): - return visitor.visitOptionalExpr(self) - else: - return visitor.visitChildren(self) - - def optionalExpr(self): - - localctx = Parser.OptionalExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 202, self.RULE_optionalExpr) - try: - self.state = 1855 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LPAREN, - Parser.PLUS, - Parser.MINUS, - Parser.EVAL, - Parser.IF, - Parser.CASE, - Parser.CURRENT_DATE, - Parser.DATEDIFF, - Parser.DATEADD, - Parser.YEAR_OP, - Parser.MONTH_OP, - Parser.DAYOFMONTH, - Parser.DAYOFYEAR, - Parser.DAYTOYEAR, - Parser.DAYTOMONTH, - Parser.YEARTODAY, - Parser.MONTHTODAY, - Parser.NOT, - Parser.BETWEEN, - Parser.NULL_CONSTANT, - Parser.ISNULL, - Parser.UNION, - Parser.SYMDIFF, - Parser.INTERSECT, - Parser.RANDOM, - Parser.CHECK, - Parser.EXISTS_IN, - Parser.MIN, - Parser.MAX, - Parser.ABS, - Parser.LN, - Parser.LOG, - Parser.TRUNC, - Parser.ROUND, - Parser.POWER, - Parser.MOD, - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.SUBSTR, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.EXP, - Parser.CHARSET_MATCH, - Parser.NVL, - Parser.HIERARCHY, - Parser.LTRIM, - Parser.RTRIM, - Parser.INSTR, - Parser.REPLACE, - Parser.CEIL, - Parser.FLOOR, - Parser.SQRT, - Parser.SETDIFF, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - Parser.LAG, - Parser.LEAD, - Parser.RATIO_TO_REPORT, - Parser.FILL_TIME_SERIES, - Parser.FLOW_TO_STOCK, - Parser.STOCK_TO_FLOW, - Parser.TIMESHIFT, - Parser.INNER_JOIN, - Parser.LEFT_JOIN, - Parser.CROSS_JOIN, - Parser.FULL_JOIN, - Parser.PERIOD_INDICATOR, - Parser.TIME_AGG, - Parser.CAST, - Parser.CHECK_DATAPOINT, - Parser.CHECK_HIERARCHY, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 1853 - self.expr(0) - pass - elif token in [Parser.OPTIONAL]: - self.enterOuterAlt(localctx, 2) - self.state = 1854 - self.match(Parser.OPTIONAL) - 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 OptionalExprComponentContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def exprComponent(self): - return self.getTypedRuleContext(Parser.ExprComponentContext, 0) - - def OPTIONAL(self): - return self.getToken(Parser.OPTIONAL, 0) - - def getRuleIndex(self): - return Parser.RULE_optionalExprComponent - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOptionalExprComponent"): - return visitor.visitOptionalExprComponent(self) - else: - return visitor.visitChildren(self) - - def optionalExprComponent(self): - - localctx = Parser.OptionalExprComponentContext(self, self._ctx, self.state) - self.enterRule(localctx, 204, self.RULE_optionalExprComponent) - try: - self.state = 1859 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [ - Parser.LPAREN, - Parser.PLUS, - Parser.MINUS, - Parser.EVAL, - Parser.IF, - Parser.CASE, - Parser.CURRENT_DATE, - Parser.DATEDIFF, - Parser.DATEADD, - Parser.YEAR_OP, - Parser.MONTH_OP, - Parser.DAYOFMONTH, - Parser.DAYOFYEAR, - Parser.DAYTOYEAR, - Parser.DAYTOMONTH, - Parser.YEARTODAY, - Parser.MONTHTODAY, - Parser.NOT, - Parser.BETWEEN, - Parser.NULL_CONSTANT, - Parser.ISNULL, - Parser.RANDOM, - Parser.RANK, - Parser.MIN, - Parser.MAX, - Parser.ABS, - Parser.LN, - Parser.LOG, - Parser.TRUNC, - Parser.ROUND, - Parser.POWER, - Parser.MOD, - Parser.LEN, - Parser.TRIM, - Parser.UCASE, - Parser.LCASE, - Parser.SUBSTR, - Parser.SUM, - Parser.AVG, - Parser.MEDIAN, - Parser.COUNT, - Parser.EXP, - Parser.CHARSET_MATCH, - Parser.NVL, - Parser.LTRIM, - Parser.RTRIM, - Parser.INSTR, - Parser.REPLACE, - Parser.CEIL, - Parser.FLOOR, - Parser.SQRT, - Parser.STDDEV_POP, - Parser.STDDEV_SAMP, - Parser.VAR_POP, - Parser.VAR_SAMP, - Parser.FIRST_VALUE, - Parser.LAST_VALUE, - Parser.LAG, - Parser.LEAD, - Parser.RATIO_TO_REPORT, - Parser.FILL_TIME_SERIES, - Parser.FLOW_TO_STOCK, - Parser.STOCK_TO_FLOW, - Parser.TIMESHIFT, - Parser.PERIOD_INDICATOR, - Parser.TIME_AGG, - Parser.CAST, - Parser.INTEGER_CONSTANT, - Parser.NUMBER_CONSTANT, - Parser.BOOLEAN_CONSTANT, - Parser.STRING_CONSTANT, - Parser.IDENTIFIER, - ]: - self.enterOuterAlt(localctx, 1) - self.state = 1857 - self.exprComponent(0) - pass - elif token in [Parser.OPTIONAL]: - self.enterOuterAlt(localctx, 2) - self.state = 1858 - self.match(Parser.OPTIONAL) - 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 ComponentRoleContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def MEASURE(self): - return self.getToken(Parser.MEASURE, 0) - - def COMPONENT(self): - return self.getToken(Parser.COMPONENT, 0) - - def DIMENSION(self): - return self.getToken(Parser.DIMENSION, 0) - - def ATTRIBUTE(self): - return self.getToken(Parser.ATTRIBUTE, 0) - - def viralAttribute(self): - return self.getTypedRuleContext(Parser.ViralAttributeContext, 0) - - def getRuleIndex(self): - return Parser.RULE_componentRole - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitComponentRole"): - return visitor.visitComponentRole(self) - else: - return visitor.visitChildren(self) - - def componentRole(self): - - localctx = Parser.ComponentRoleContext(self, self._ctx, self.state) - self.enterRule(localctx, 206, self.RULE_componentRole) - try: - self.state = 1866 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [Parser.MEASURE]: - self.enterOuterAlt(localctx, 1) - self.state = 1861 - self.match(Parser.MEASURE) - pass - elif token in [Parser.COMPONENT]: - self.enterOuterAlt(localctx, 2) - self.state = 1862 - self.match(Parser.COMPONENT) - pass - elif token in [Parser.DIMENSION]: - self.enterOuterAlt(localctx, 3) - self.state = 1863 - self.match(Parser.DIMENSION) - pass - elif token in [Parser.ATTRIBUTE]: - self.enterOuterAlt(localctx, 4) - self.state = 1864 - self.match(Parser.ATTRIBUTE) - pass - elif token in [Parser.VIRAL]: - self.enterOuterAlt(localctx, 5) - self.state = 1865 - self.viralAttribute() - 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 ViralAttributeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def VIRAL(self): - return self.getToken(Parser.VIRAL, 0) - - def ATTRIBUTE(self): - return self.getToken(Parser.ATTRIBUTE, 0) - - def getRuleIndex(self): - return Parser.RULE_viralAttribute - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitViralAttribute"): - return visitor.visitViralAttribute(self) - else: - return visitor.visitChildren(self) - - def viralAttribute(self): - - localctx = Parser.ViralAttributeContext(self, self._ctx, self.state) - self.enterRule(localctx, 208, self.RULE_viralAttribute) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1868 - self.match(Parser.VIRAL) - self.state = 1869 - self.match(Parser.ATTRIBUTE) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ValueDomainIDContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_valueDomainID - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitValueDomainID"): - return visitor.visitValueDomainID(self) - else: - return visitor.visitChildren(self) - - def valueDomainID(self): - - localctx = Parser.ValueDomainIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 210, self.RULE_valueDomainID) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1871 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class OperatorIDContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_operatorID - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitOperatorID"): - return visitor.visitOperatorID(self) - else: - return visitor.visitChildren(self) - - def operatorID(self): - - localctx = Parser.OperatorIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 212, self.RULE_operatorID) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1873 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class RoutineNameContext(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(Parser.IDENTIFIER, 0) - - def getRuleIndex(self): - return Parser.RULE_routineName - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRoutineName"): - return visitor.visitRoutineName(self) - else: - return visitor.visitChildren(self) - - def routineName(self): - - localctx = Parser.RoutineNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 214, self.RULE_routineName) - try: - self.enterOuterAlt(localctx, 1) - self.state = 1875 - self.match(Parser.IDENTIFIER) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ConstantContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def signedInteger(self): - return self.getTypedRuleContext(Parser.SignedIntegerContext, 0) - - def signedNumber(self): - return self.getTypedRuleContext(Parser.SignedNumberContext, 0) - - def BOOLEAN_CONSTANT(self): - return self.getToken(Parser.BOOLEAN_CONSTANT, 0) - - def STRING_CONSTANT(self): - return self.getToken(Parser.STRING_CONSTANT, 0) - - def NULL_CONSTANT(self): - return self.getToken(Parser.NULL_CONSTANT, 0) - - def getRuleIndex(self): - return Parser.RULE_constant - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitConstant"): - return visitor.visitConstant(self) - else: - return visitor.visitChildren(self) - - def constant(self): - - localctx = Parser.ConstantContext(self, self._ctx, self.state) - self.enterRule(localctx, 216, self.RULE_constant) - try: - self.state = 1882 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 201, self._ctx) - if la_ == 1: - self.enterOuterAlt(localctx, 1) - self.state = 1877 - self.signedInteger() - pass - - elif la_ == 2: - self.enterOuterAlt(localctx, 2) - self.state = 1878 - self.signedNumber() - pass - - elif la_ == 3: - self.enterOuterAlt(localctx, 3) - self.state = 1879 - self.match(Parser.BOOLEAN_CONSTANT) - pass - - elif la_ == 4: - self.enterOuterAlt(localctx, 4) - self.state = 1880 - self.match(Parser.STRING_CONSTANT) - pass - - elif la_ == 5: - self.enterOuterAlt(localctx, 5) - self.state = 1881 - self.match(Parser.NULL_CONSTANT) - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class BasicScalarTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def STRING(self): - return self.getToken(Parser.STRING, 0) - - def INTEGER(self): - return self.getToken(Parser.INTEGER, 0) - - def NUMBER(self): - return self.getToken(Parser.NUMBER, 0) - - def BOOLEAN(self): - return self.getToken(Parser.BOOLEAN, 0) - - def DATE(self): - return self.getToken(Parser.DATE, 0) - - def TIME(self): - return self.getToken(Parser.TIME, 0) - - def TIME_PERIOD(self): - return self.getToken(Parser.TIME_PERIOD, 0) - - def DURATION(self): - return self.getToken(Parser.DURATION, 0) - - def SCALAR(self): - return self.getToken(Parser.SCALAR, 0) - - def getRuleIndex(self): - return Parser.RULE_basicScalarType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitBasicScalarType"): - return visitor.visitBasicScalarType(self) - else: - return visitor.visitChildren(self) - - def basicScalarType(self): - - localctx = Parser.BasicScalarTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 218, self.RULE_basicScalarType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1884 - _la = self._input.LA(1) - if not ( - ( - ((_la - 168) & ~0x3F) == 0 - and ( - (1 << (_la - 168)) - & ( - (1 << (Parser.BOOLEAN - 168)) - | (1 << (Parser.DATE - 168)) - | (1 << (Parser.TIME_PERIOD - 168)) - | (1 << (Parser.NUMBER - 168)) - | (1 << (Parser.STRING - 168)) - | (1 << (Parser.TIME - 168)) - | (1 << (Parser.INTEGER - 168)) - | (1 << (Parser.DURATION - 168)) - ) - ) - != 0 - ) - or _la == Parser.SCALAR - ): - 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 RetainTypeContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def BOOLEAN_CONSTANT(self): - return self.getToken(Parser.BOOLEAN_CONSTANT, 0) - - def ALL(self): - return self.getToken(Parser.ALL, 0) - - def getRuleIndex(self): - return Parser.RULE_retainType - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitRetainType"): - return visitor.visitRetainType(self) - else: - return visitor.visitChildren(self) - - def retainType(self): - - localctx = Parser.RetainTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 220, self.RULE_retainType) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 1886 - _la = self._input.LA(1) - if not (_la == Parser.ALL or _la == Parser.BOOLEAN_CONSTANT): - 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 - - def sempred(self, localctx: RuleContext, ruleIndex: int, predIndex: int): - if self._predicates is None: - self._predicates = {} - self._predicates[2] = self.expr_sempred - self._predicates[3] = self.exprComponent_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 expr_sempred(self, localctx: ExprContext, predIndex: int): - if predIndex == 0: - return self.precpred(self._ctx, 10) - - if predIndex == 1: - return self.precpred(self._ctx, 9) - - if predIndex == 2: - return self.precpred(self._ctx, 8) - - if predIndex == 3: - return self.precpred(self._ctx, 6) - - if predIndex == 4: - return self.precpred(self._ctx, 5) - - if predIndex == 5: - return self.precpred(self._ctx, 13) - - if predIndex == 6: - return self.precpred(self._ctx, 12) - - if predIndex == 7: - return self.precpred(self._ctx, 7) - - def exprComponent_sempred(self, localctx: ExprComponentContext, predIndex: int): - if predIndex == 8: - return self.precpred(self._ctx, 10) - - if predIndex == 9: - return self.precpred(self._ctx, 9) - - if predIndex == 10: - return self.precpred(self._ctx, 8) - - if predIndex == 11: - return self.precpred(self._ctx, 6) - - if predIndex == 12: - return self.precpred(self._ctx, 5) - - if predIndex == 13: - return self.precpred(self._ctx, 7) diff --git a/src/vtlengine/AST/VtlVisitor.py b/src/vtlengine/AST/VtlVisitor.py deleted file mode 100644 index f2d65f7d4..000000000 --- a/src/vtlengine/AST/VtlVisitor.py +++ /dev/null @@ -1,906 +0,0 @@ -from antlr4 import ParseTreeVisitor - -from vtlengine.AST.Grammar.parser import Parser - -# This class defines a complete generic visitor for a parse tree produced by Parser. - - -class VtlVisitor(ParseTreeVisitor): - # Visit a parse tree produced by Parser#start. - def visitStart(self, ctx: Parser.StartContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#temporaryAssignment. - def visitTemporaryAssignment(self, ctx: Parser.TemporaryAssignmentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#persistAssignment. - def visitPersistAssignment(self, ctx: Parser.PersistAssignmentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#defineExpression. - def visitDefineExpression(self, ctx: Parser.DefineExpressionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#varIdExpr. - def visitVarIdExpr(self, ctx: Parser.VarIdExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#membershipExpr. - def visitMembershipExpr(self, ctx: Parser.MembershipExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#inNotInExpr. - def visitInNotInExpr(self, ctx: Parser.InNotInExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#booleanExpr. - def visitBooleanExpr(self, ctx: Parser.BooleanExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#comparisonExpr. - def visitComparisonExpr(self, ctx: Parser.ComparisonExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryExpr. - def visitUnaryExpr(self, ctx: Parser.UnaryExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#functionsExpression. - def visitFunctionsExpression(self, ctx: Parser.FunctionsExpressionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ifExpr. - def visitIfExpr(self, ctx: Parser.IfExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#clauseExpr. - def visitClauseExpr(self, ctx: Parser.ClauseExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#caseExpr. - def visitCaseExpr(self, ctx: Parser.CaseExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#arithmeticExpr. - def visitArithmeticExpr(self, ctx: Parser.ArithmeticExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#parenthesisExpr. - def visitParenthesisExpr(self, ctx: Parser.ParenthesisExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#constantExpr. - def visitConstantExpr(self, ctx: Parser.ConstantExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#arithmeticExprOrConcat. - def visitArithmeticExprOrConcat(self, ctx: Parser.ArithmeticExprOrConcatContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#arithmeticExprComp. - def visitArithmeticExprComp(self, ctx: Parser.ArithmeticExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ifExprComp. - def visitIfExprComp(self, ctx: Parser.IfExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#comparisonExprComp. - def visitComparisonExprComp(self, ctx: Parser.ComparisonExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#functionsExpressionComp. - def visitFunctionsExpressionComp(self, ctx: Parser.FunctionsExpressionCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#compId. - def visitCompId(self, ctx: Parser.CompIdContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#constantExprComp. - def visitConstantExprComp(self, ctx: Parser.ConstantExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#arithmeticExprOrConcatComp. - def visitArithmeticExprOrConcatComp(self, ctx: Parser.ArithmeticExprOrConcatCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#parenthesisExprComp. - def visitParenthesisExprComp(self, ctx: Parser.ParenthesisExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#inNotInExprComp. - def visitInNotInExprComp(self, ctx: Parser.InNotInExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryExprComp. - def visitUnaryExprComp(self, ctx: Parser.UnaryExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#caseExprComp. - def visitCaseExprComp(self, ctx: Parser.CaseExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#booleanExprComp. - def visitBooleanExprComp(self, ctx: Parser.BooleanExprCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#genericFunctionsComponents. - def visitGenericFunctionsComponents(self, ctx: Parser.GenericFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#stringFunctionsComponents. - def visitStringFunctionsComponents(self, ctx: Parser.StringFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#numericFunctionsComponents. - def visitNumericFunctionsComponents(self, ctx: Parser.NumericFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#comparisonFunctionsComponents. - def visitComparisonFunctionsComponents(self, ctx: Parser.ComparisonFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeFunctionsComponents. - def visitTimeFunctionsComponents(self, ctx: Parser.TimeFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#conditionalFunctionsComponents. - def visitConditionalFunctionsComponents( - self, ctx: Parser.ConditionalFunctionsComponentsContext - ): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggregateFunctionsComponents. - def visitAggregateFunctionsComponents(self, ctx: Parser.AggregateFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#analyticFunctionsComponents. - def visitAnalyticFunctionsComponents(self, ctx: Parser.AnalyticFunctionsComponentsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinFunctions. - def visitJoinFunctions(self, ctx: Parser.JoinFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#genericFunctions. - def visitGenericFunctions(self, ctx: Parser.GenericFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#stringFunctions. - def visitStringFunctions(self, ctx: Parser.StringFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#numericFunctions. - def visitNumericFunctions(self, ctx: Parser.NumericFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#comparisonFunctions. - def visitComparisonFunctions(self, ctx: Parser.ComparisonFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeFunctions. - def visitTimeFunctions(self, ctx: Parser.TimeFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#setFunctions. - def visitSetFunctions(self, ctx: Parser.SetFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hierarchyFunctions. - def visitHierarchyFunctions(self, ctx: Parser.HierarchyFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validationFunctions. - def visitValidationFunctions(self, ctx: Parser.ValidationFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#conditionalFunctions. - def visitConditionalFunctions(self, ctx: Parser.ConditionalFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggregateFunctions. - def visitAggregateFunctions(self, ctx: Parser.AggregateFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#analyticFunctions. - def visitAnalyticFunctions(self, ctx: Parser.AnalyticFunctionsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#datasetClause. - def visitDatasetClause(self, ctx: Parser.DatasetClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#renameClause. - def visitRenameClause(self, ctx: Parser.RenameClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggrClause. - def visitAggrClause(self, ctx: Parser.AggrClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#filterClause. - def visitFilterClause(self, ctx: Parser.FilterClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#calcClause. - def visitCalcClause(self, ctx: Parser.CalcClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#keepOrDropClause. - def visitKeepOrDropClause(self, ctx: Parser.KeepOrDropClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#pivotOrUnpivotClause. - def visitPivotOrUnpivotClause(self, ctx: Parser.PivotOrUnpivotClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#customPivotClause. - def visitCustomPivotClause(self, ctx: Parser.CustomPivotClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#subspaceClause. - def visitSubspaceClause(self, ctx: Parser.SubspaceClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinExpr. - def visitJoinExpr(self, ctx: Parser.JoinExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#defOperator. - def visitDefOperator(self, ctx: Parser.DefOperatorContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#defDatapointRuleset. - def visitDefDatapointRuleset(self, ctx: Parser.DefDatapointRulesetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#defHierarchical. - def visitDefHierarchical(self, ctx: Parser.DefHierarchicalContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#callDataset. - def visitCallDataset(self, ctx: Parser.CallDatasetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#evalAtom. - def visitEvalAtom(self, ctx: Parser.EvalAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#castExprDataset. - def visitCastExprDataset(self, ctx: Parser.CastExprDatasetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#callComponent. - def visitCallComponent(self, ctx: Parser.CallComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#castExprComponent. - def visitCastExprComponent(self, ctx: Parser.CastExprComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#evalAtomComponent. - def visitEvalAtomComponent(self, ctx: Parser.EvalAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#parameterComponent. - def visitParameterComponent(self, ctx: Parser.ParameterComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#parameter. - def visitParameter(self, ctx: Parser.ParameterContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryStringFunction. - def visitUnaryStringFunction(self, ctx: Parser.UnaryStringFunctionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#substrAtom. - def visitSubstrAtom(self, ctx: Parser.SubstrAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#replaceAtom. - def visitReplaceAtom(self, ctx: Parser.ReplaceAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#instrAtom. - def visitInstrAtom(self, ctx: Parser.InstrAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryStringFunctionComponent. - def visitUnaryStringFunctionComponent(self, ctx: Parser.UnaryStringFunctionComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#substrAtomComponent. - def visitSubstrAtomComponent(self, ctx: Parser.SubstrAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#replaceAtomComponent. - def visitReplaceAtomComponent(self, ctx: Parser.ReplaceAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#instrAtomComponent. - def visitInstrAtomComponent(self, ctx: Parser.InstrAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryNumeric. - def visitUnaryNumeric(self, ctx: Parser.UnaryNumericContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryWithOptionalNumeric. - def visitUnaryWithOptionalNumeric(self, ctx: Parser.UnaryWithOptionalNumericContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#binaryNumeric. - def visitBinaryNumeric(self, ctx: Parser.BinaryNumericContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryNumericComponent. - def visitUnaryNumericComponent(self, ctx: Parser.UnaryNumericComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unaryWithOptionalNumericComponent. - def visitUnaryWithOptionalNumericComponent( - self, ctx: Parser.UnaryWithOptionalNumericComponentContext - ): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#binaryNumericComponent. - def visitBinaryNumericComponent(self, ctx: Parser.BinaryNumericComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#betweenAtom. - def visitBetweenAtom(self, ctx: Parser.BetweenAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#charsetMatchAtom. - def visitCharsetMatchAtom(self, ctx: Parser.CharsetMatchAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#isNullAtom. - def visitIsNullAtom(self, ctx: Parser.IsNullAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#existInAtom. - def visitExistInAtom(self, ctx: Parser.ExistInAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#betweenAtomComponent. - def visitBetweenAtomComponent(self, ctx: Parser.BetweenAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#charsetMatchAtomComponent. - def visitCharsetMatchAtomComponent(self, ctx: Parser.CharsetMatchAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#isNullAtomComponent. - def visitIsNullAtomComponent(self, ctx: Parser.IsNullAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#periodAtom. - def visitPeriodAtom(self, ctx: Parser.PeriodAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#fillTimeAtom. - def visitFillTimeAtom(self, ctx: Parser.FillTimeAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#flowAtom. - def visitFlowAtom(self, ctx: Parser.FlowAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeShiftAtom. - def visitTimeShiftAtom(self, ctx: Parser.TimeShiftAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeAggAtom. - def visitTimeAggAtom(self, ctx: Parser.TimeAggAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#currentDateAtom. - def visitCurrentDateAtom(self, ctx: Parser.CurrentDateAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dateDiffAtom. - def visitDateDiffAtom(self, ctx: Parser.DateDiffAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dateAddAtom. - def visitDateAddAtom(self, ctx: Parser.DateAddAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#yearAtom. - def visitYearAtom(self, ctx: Parser.YearAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#monthAtom. - def visitMonthAtom(self, ctx: Parser.MonthAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayOfMonthAtom. - def visitDayOfMonthAtom(self, ctx: Parser.DayOfMonthAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayOfYearAtom. - def visitDayOfYearAtom(self, ctx: Parser.DayOfYearAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayToYearAtom. - def visitDayToYearAtom(self, ctx: Parser.DayToYearAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayToMonthAtom. - def visitDayToMonthAtom(self, ctx: Parser.DayToMonthAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#yearTodayAtom. - def visitYearTodayAtom(self, ctx: Parser.YearTodayAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#monthTodayAtom. - def visitMonthTodayAtom(self, ctx: Parser.MonthTodayAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#periodAtomComponent. - def visitPeriodAtomComponent(self, ctx: Parser.PeriodAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#fillTimeAtomComponent. - def visitFillTimeAtomComponent(self, ctx: Parser.FillTimeAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#flowAtomComponent. - def visitFlowAtomComponent(self, ctx: Parser.FlowAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeShiftAtomComponent. - def visitTimeShiftAtomComponent(self, ctx: Parser.TimeShiftAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#timeAggAtomComponent. - def visitTimeAggAtomComponent(self, ctx: Parser.TimeAggAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#currentDateAtomComponent. - def visitCurrentDateAtomComponent(self, ctx: Parser.CurrentDateAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dateDiffAtomComponent. - def visitDateDiffAtomComponent(self, ctx: Parser.DateDiffAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dateAddAtomComponent. - def visitDateAddAtomComponent(self, ctx: Parser.DateAddAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#yearAtomComponent. - def visitYearAtomComponent(self, ctx: Parser.YearAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#monthAtomComponent. - def visitMonthAtomComponent(self, ctx: Parser.MonthAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayOfMonthAtomComponent. - def visitDayOfMonthAtomComponent(self, ctx: Parser.DayOfMonthAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#datOfYearAtomComponent. - def visitDatOfYearAtomComponent(self, ctx: Parser.DatOfYearAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayToYearAtomComponent. - def visitDayToYearAtomComponent(self, ctx: Parser.DayToYearAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dayToMonthAtomComponent. - def visitDayToMonthAtomComponent(self, ctx: Parser.DayToMonthAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#yearTodayAtomComponent. - def visitYearTodayAtomComponent(self, ctx: Parser.YearTodayAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#monthTodayAtomComponent. - def visitMonthTodayAtomComponent(self, ctx: Parser.MonthTodayAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#unionAtom. - def visitUnionAtom(self, ctx: Parser.UnionAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#intersectAtom. - def visitIntersectAtom(self, ctx: Parser.IntersectAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#setOrSYmDiffAtom. - def visitSetOrSYmDiffAtom(self, ctx: Parser.SetOrSYmDiffAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hierarchyOperators. - def visitHierarchyOperators(self, ctx: Parser.HierarchyOperatorsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validateDPruleset. - def visitValidateDPruleset(self, ctx: Parser.ValidateDPrulesetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validateHRruleset. - def visitValidateHRruleset(self, ctx: Parser.ValidateHRrulesetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validationSimple. - def visitValidationSimple(self, ctx: Parser.ValidationSimpleContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#nvlAtom. - def visitNvlAtom(self, ctx: Parser.NvlAtomContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#nvlAtomComponent. - def visitNvlAtomComponent(self, ctx: Parser.NvlAtomComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggrComp. - def visitAggrComp(self, ctx: Parser.AggrCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#countAggrComp. - def visitCountAggrComp(self, ctx: Parser.CountAggrCompContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggrDataset. - def visitAggrDataset(self, ctx: Parser.AggrDatasetContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#anSimpleFunction. - def visitAnSimpleFunction(self, ctx: Parser.AnSimpleFunctionContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#lagOrLeadAn. - def visitLagOrLeadAn(self, ctx: Parser.LagOrLeadAnContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ratioToReportAn. - def visitRatioToReportAn(self, ctx: Parser.RatioToReportAnContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#anSimpleFunctionComponent. - def visitAnSimpleFunctionComponent(self, ctx: Parser.AnSimpleFunctionComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#lagOrLeadAnComponent. - def visitLagOrLeadAnComponent(self, ctx: Parser.LagOrLeadAnComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#rankAnComponent. - def visitRankAnComponent(self, ctx: Parser.RankAnComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ratioToReportAnComponent. - def visitRatioToReportAnComponent(self, ctx: Parser.RatioToReportAnComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#renameClauseItem. - def visitRenameClauseItem(self, ctx: Parser.RenameClauseItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggregateClause. - def visitAggregateClause(self, ctx: Parser.AggregateClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#aggrFunctionClause. - def visitAggrFunctionClause(self, ctx: Parser.AggrFunctionClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#calcClauseItem. - def visitCalcClauseItem(self, ctx: Parser.CalcClauseItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#subspaceClauseItem. - def visitSubspaceClauseItem(self, ctx: Parser.SubspaceClauseItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#simpleScalar. - def visitSimpleScalar(self, ctx: Parser.SimpleScalarContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#scalarWithCast. - def visitScalarWithCast(self, ctx: Parser.ScalarWithCastContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinClauseWithoutUsing. - def visitJoinClauseWithoutUsing(self, ctx: Parser.JoinClauseWithoutUsingContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinClause. - def visitJoinClause(self, ctx: Parser.JoinClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinClauseItem. - def visitJoinClauseItem(self, ctx: Parser.JoinClauseItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinBody. - def visitJoinBody(self, ctx: Parser.JoinBodyContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#joinApplyClause. - def visitJoinApplyClause(self, ctx: Parser.JoinApplyClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#partitionByClause. - def visitPartitionByClause(self, ctx: Parser.PartitionByClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#orderByClause. - def visitOrderByClause(self, ctx: Parser.OrderByClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#orderByItem. - def visitOrderByItem(self, ctx: Parser.OrderByItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#windowingClause. - def visitWindowingClause(self, ctx: Parser.WindowingClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#signedInteger. - def visitSignedInteger(self, ctx: Parser.SignedIntegerContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#signedNumber. - def visitSignedNumber(self, ctx: Parser.SignedNumberContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#limitClauseItem. - def visitLimitClauseItem(self, ctx: Parser.LimitClauseItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#groupByOrExcept. - def visitGroupByOrExcept(self, ctx: Parser.GroupByOrExceptContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#groupAll. - def visitGroupAll(self, ctx: Parser.GroupAllContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#havingClause. - def visitHavingClause(self, ctx: Parser.HavingClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#parameterItem. - def visitParameterItem(self, ctx: Parser.ParameterItemContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#outputParameterType. - def visitOutputParameterType(self, ctx: Parser.OutputParameterTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#outputParameterTypeComponent. - def visitOutputParameterTypeComponent(self, ctx: Parser.OutputParameterTypeComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#inputParameterType. - def visitInputParameterType(self, ctx: Parser.InputParameterTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#rulesetType. - def visitRulesetType(self, ctx: Parser.RulesetTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#scalarType. - def visitScalarType(self, ctx: Parser.ScalarTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#componentType. - def visitComponentType(self, ctx: Parser.ComponentTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#datasetType. - def visitDatasetType(self, ctx: Parser.DatasetTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#evalDatasetType. - def visitEvalDatasetType(self, ctx: Parser.EvalDatasetTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#scalarSetType. - def visitScalarSetType(self, ctx: Parser.ScalarSetTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dataPoint. - def visitDataPoint(self, ctx: Parser.DataPointContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dataPointVd. - def visitDataPointVd(self, ctx: Parser.DataPointVdContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#dataPointVar. - def visitDataPointVar(self, ctx: Parser.DataPointVarContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hrRulesetType. - def visitHrRulesetType(self, ctx: Parser.HrRulesetTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hrRulesetVdType. - def visitHrRulesetVdType(self, ctx: Parser.HrRulesetVdTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hrRulesetVarType. - def visitHrRulesetVarType(self, ctx: Parser.HrRulesetVarTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#valueDomainName. - def visitValueDomainName(self, ctx: Parser.ValueDomainNameContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#rulesetID. - def visitRulesetID(self, ctx: Parser.RulesetIDContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#rulesetSignature. - def visitRulesetSignature(self, ctx: Parser.RulesetSignatureContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#signature. - def visitSignature(self, ctx: Parser.SignatureContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ruleClauseDatapoint. - def visitRuleClauseDatapoint(self, ctx: Parser.RuleClauseDatapointContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ruleItemDatapoint. - def visitRuleItemDatapoint(self, ctx: Parser.RuleItemDatapointContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ruleClauseHierarchical. - def visitRuleClauseHierarchical(self, ctx: Parser.RuleClauseHierarchicalContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#ruleItemHierarchical. - def visitRuleItemHierarchical(self, ctx: Parser.RuleItemHierarchicalContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#hierRuleSignature. - def visitHierRuleSignature(self, ctx: Parser.HierRuleSignatureContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#valueDomainSignature. - def visitValueDomainSignature(self, ctx: Parser.ValueDomainSignatureContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#codeItemRelation. - def visitCodeItemRelation(self, ctx: Parser.CodeItemRelationContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#codeItemRelationClause. - def visitCodeItemRelationClause(self, ctx: Parser.CodeItemRelationClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#valueDomainValue. - def visitValueDomainValue(self, ctx: Parser.ValueDomainValueContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#conditionConstraint. - def visitConditionConstraint(self, ctx: Parser.ConditionConstraintContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#rangeConstraint. - def visitRangeConstraint(self, ctx: Parser.RangeConstraintContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#compConstraint. - def visitCompConstraint(self, ctx: Parser.CompConstraintContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#multModifier. - def visitMultModifier(self, ctx: Parser.MultModifierContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validationOutput. - def visitValidationOutput(self, ctx: Parser.ValidationOutputContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#validationMode. - def visitValidationMode(self, ctx: Parser.ValidationModeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#conditionClause. - def visitConditionClause(self, ctx: Parser.ConditionClauseContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#inputMode. - def visitInputMode(self, ctx: Parser.InputModeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#imbalanceExpr. - def visitImbalanceExpr(self, ctx: Parser.ImbalanceExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#inputModeHierarchy. - def visitInputModeHierarchy(self, ctx: Parser.InputModeHierarchyContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#outputModeHierarchy. - def visitOutputModeHierarchy(self, ctx: Parser.OutputModeHierarchyContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#alias. - def visitAlias(self, ctx: Parser.AliasContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#varID. - def visitVarID(self, ctx: Parser.VarIDContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#simpleComponentId. - def visitSimpleComponentId(self, ctx: Parser.SimpleComponentIdContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#componentID. - def visitComponentID(self, ctx: Parser.ComponentIDContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#lists. - def visitLists(self, ctx: Parser.ListsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#erCode. - def visitErCode(self, ctx: Parser.ErCodeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#erLevel. - def visitErLevel(self, ctx: Parser.ErLevelContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#comparisonOperand. - def visitComparisonOperand(self, ctx: Parser.ComparisonOperandContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#optionalExpr. - def visitOptionalExpr(self, ctx: Parser.OptionalExprContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#optionalExprComponent. - def visitOptionalExprComponent(self, ctx: Parser.OptionalExprComponentContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#componentRole. - def visitComponentRole(self, ctx: Parser.ComponentRoleContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#viralAttribute. - def visitViralAttribute(self, ctx: Parser.ViralAttributeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#valueDomainID. - def visitValueDomainID(self, ctx: Parser.ValueDomainIDContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#operatorID. - def visitOperatorID(self, ctx: Parser.OperatorIDContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#routineName. - def visitRoutineName(self, ctx: Parser.RoutineNameContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#constant. - def visitConstant(self, ctx: Parser.ConstantContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#basicScalarType. - def visitBasicScalarType(self, ctx: Parser.BasicScalarTypeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by Parser#retainType. - def visitRetainType(self, ctx: Parser.RetainTypeContext): - return self.visitChildren(ctx) - - -del Parser diff --git a/tests/AST/data/encode/reference_encode.json b/tests/AST/data/encode/reference_encode.json index 9dc494607..f567a0209 100644 --- a/tests/AST/data/encode/reference_encode.json +++ b/tests/AST/data/encode/reference_encode.json @@ -1,6 +1,6 @@ { "class_name": "Start", - "column_stop": 20, + "column_stop": 19, "line_stop": 1, "column_start": 0, "line_start": 1,