diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml new file mode 100644 index 0000000..f460c4c --- /dev/null +++ b/.github/workflows/python-ci.yml @@ -0,0 +1,33 @@ +name: Python CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install . + pip install pytest + + - name: Run tests + run: | + pytest diff --git a/.gitignore b/.gitignore index 03ea83d..ba6c575 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,4 @@ __pycache__/ # Python egg and build files *.egg-info -# Testing grammar files -test - notebooks/datasets \ No newline at end of file diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md new file mode 100644 index 0000000..5060b25 --- /dev/null +++ b/GETTING_STARTED.md @@ -0,0 +1,251 @@ +# Getting Started with csim + +This guide will help you get started with csim in just a few minutes. + +## Installation + +### From PyPI (Recommended) + +```bash +pip install csim +``` + +### From Source + +```bash +git clone https://github.com/EdsonEddy/csim.git +cd csim +pip install . +``` + +## Quick Start + +### 1. Generate a Similarity Report + +The simplest way to get started is to generate a report comparing all files in a directory: + +```bash +csim report --path ./my_assignments +``` + +**Output:** +``` +file1.py is similar to file2.py with similarity index: 0.92 +file1.py is similar to file3.py with similarity index: 0.45 +file2.py is similar to file3.py with similarity index: 0.50 +``` + +This tells you which files are most similar to each other. + +### 2. Group Similar Files + +To automatically cluster files into groups of similar submissions: + +```bash +csim group --path ./my_assignments --threshold 0.8 +``` + +**Output:** +``` +Threshold: 0.8 +Total files processed: 3 +Group 1 (Average Similarity: 0.92): +./file1.py +./file2.py + +Unique Files (similarity below threshold): +./file3.py +``` + +This groups `file1.py` and `file2.py` together (92% similar), and marks `file3.py` as unique. + +### 3. Choose a Search Strategy + +For small datasets (< 100 files), the default exhaustive search is fine and guarantees finding all copies: + +```bash +csim group --path ./small_dataset --threshold 0.8 +``` + +**Expected improvement:** 100-1000x faster on large datasets with > 99% accuracy. + +--- + +## Common Use Cases + +### Use Case 1: Detect Plagiarism in Programming Assignments + +You have 30 Python submissions for a programming assignment: + +```bash +# Generate a report to see all similarities +csim report --path ./submissions/assignment1 + +# Group them to identify suspicious pairs +csim group --path ./submissions/assignment1 --threshold 0.85 +``` + +**Interpretation:** +- Threshold 0.85 means files need to be 85% structurally similar to be grouped together +- This is intentionally high to minimize false positives +- Review the grouped files manually + +### Use Case 2: Quick Duplicate Detection + +You have many code files and want to find exact or near-exact duplicates: + +```bash +# Threshold 0.95 = nearly identical +csim group --path ./codebase --threshold 0.95 +``` + +### Use Case 3: Code Quality Check + +Find copy-pasted functions or redundant code in a codebase: + +```bash +# Threshold 0.80 = significantly similar (possible refactoring opportunity) +csim group --path ./src --threshold 0.80 --lang java +``` + +--- + +## Understanding Thresholds + +The `--threshold` parameter determines how similar files must be to be considered a match. + +| Threshold | Meaning | Use Case | +|-----------|---------|----------| +| **0.95+** | Nearly identical | Finding exact duplicates | +| **0.85-0.95** | Very similar | Plagiarism detection | +| **0.70-0.85** | Moderately similar | Code review / refactoring suggestions | +| **<0.70** | Somewhat similar | Finding conceptually similar code | + +**Recommendation:** Start with 0.85 for plagiarism detection and adjust based on results. + +--- + +## Supported Languages + +csim supports three programming languages: + +### Python +```bash +csim report --path ./python_files --lang python +``` + +### Java +```bash +csim report --path ./java_files --lang java +``` + +### C++ +```bash +csim report --path ./cpp_files --lang cpp +``` + +--- + +## Advanced Options + +### Change Tree Edit Distance Algorithm + +By default, csim uses the `zss` algorithm. You can switch to `apted`: + +```bash +csim group --path ./files --threshold 0.8 --talg apted +``` + +`apted` may be slower but is sometimes more accurate for certain code patterns. + +### Combine Options + +```bash +# Large Java assignment dataset with LSH +csim group --path ./java_submissions \ + --threshold 0.8 \ + --strategy exhaustive \ + --lang java \ + --talg apted +``` + +--- + +## Using csim as a Python Library + +For programmatic access, import csim functions directly: + +```python +from csim.utils import report_pairwise_similarity + +# Your file data +file_names = ["file1.py", "file2.py", "file3.py"] +file_contents = [ + "a = 5\nprint(a)", + "b = 10\nprint(b)", + "import os\nprint('hello')" +] + +# Get similarity report +results = report_pairwise_similarity( + file_names=file_names, + file_contents=file_contents, + lang="python", + ted_algorithm="zss" +) + +print(results) +``` + +--- + +## Troubleshooting + +### Issue: "No files found" + +```bash +csim report --path ./my_directory +``` + +**Solution:** Make sure the directory contains files with the correct extension (`.py` for Python, `.java` for Java, `.cpp` for C++). + +### Issue: Command not found + +```bash +csim: command not found +``` + +**Solution:** Make sure csim is installed: +```bash +pip install csim +``` + +Or if installed from source, use: +```bash +python -m csim report --path ./files +``` + +### Issue: Slow performance on large datasets + +```bash +# If you ran this and it's slow: +csim group --path ./1000_files --threshold 0.8 --strategy exhaustive +``` + +--- + +## Next Steps + +- **Read the full documentation:** See [README.md](README.md) +- **Understand strategies:** Read [docs/STRATEGIES.md](docs/STRATEGIES.md) for detailed comparison +- **Report issues:** Visit [GitHub Issues](https://github.com/EdsonEddy/csim/issues) + +--- + +## Getting Help + +- **Questions?** Open a GitHub Discussion +- **Found a bug?** Open a GitHub Issue +- **Want to contribute?** See [README.md](README.md#contributing) for guidelines + +Happy plagiarism detection! 🔍 diff --git a/README.md b/README.md index 825f20f..072ded1 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,15 @@ Code Similarity (csim) provide a module designed to detect similarities between ## Key Features - **Source Code Similarity Analysis:** Compares source code files to determine their degree of similarity. +- **Pairwise Reporting:** Generate detailed similarity reports for all file pairs. +- **File Grouping:** Cluster similar files into groups based on a configurable threshold. +- **Flexible Search Strategies:** + - **Exhaustive Search:** All-pairs comparison for maximum precision - **Advanced Analysis:** Utilizes parse trees and the tree edit distance algorithm for in-depth analysis. - **Parse Trees:** Represents the syntactic structure of source code, enabling detailed comparisons. - **Tree Edit Distance:** Measures the similarity between different code structures. - **Hash-Based Pruning:** Optimizes the comparison process by reducing tree size while preserving essential structure. +- **Multi-Language Support:** Supports Python, Java, and C++ source code analysis. ## Technologies Used @@ -16,6 +21,7 @@ Code Similarity (csim) provide a module designed to detect similarities between - **ANTLR:** A parser generator for creating parse trees from source code. - **zss:** A library for calculating the tree edit distance. - **apted:** A library for computing the tree edit distance, alternatively to zss. +- **NumPy:** Used for efficient numerical operations. ## Installation For the installation `pip` is required, you can either clone the repository and install it locally or install it directly from PyPI. @@ -34,91 +40,171 @@ For the installation `pip` is required, you can either clone the repository and ``` Alternatively, you can install it directly from PyPI: + ```sh pip install csim ``` + ### Version Compatibility -- **Python:** 3.9–3.12 (recommended 3.11) +- **Python:** 3.10–3.12 (recommended 3.11) - **ANTLR4 Python Runtime:** 4.13.2 - **zss:** 1.2.0 - **apted:** 1.0.3 +- **numpy:** 1.26.4 + +## Quick Start -## Usage -csim can be used from the command line. For now, only Python files are supported; more languages will be added in future versions. +**New to csim?** Start here: [GETTING_STARTED.md](GETTING_STARTED.md) -For example, to compare two Python files, run: +For detailed information about search strategies, see: [docs/STRATEGIES.md](docs/STRATEGIES.md) -### Option --files (Specify Files) -This option will compare two specified files and output the similarity index. +csim supports two main actions: **report** (for pairwise similarity analysis) and **group** (for clustering similar files). The tool supports Python, Java, and C++ source code files. + +### General Command Structure ```sh -csim --files file1.py file2.py +csim --path [options] ``` -### Output + +### Action 1: `report` - Generate Similarity Report + +Generates a pairwise similarity report comparing all files in a directory. + ```sh -file1.py is similar to file2.py with similarity index: X.XX +csim report --path /path/to/directory +``` + +**Example Output:** ``` +file1.py is similar to file2.py with similarity index: 0.95 +file1.py is similar to file3.py with similarity index: 0.45 +file2.py is similar to file3.py with similarity index: 0.50 +``` + +**Options:** +- `--lang, -l`: Programming language (default: `python`). Options: `python`, `java`, `cpp` +- `--talg, -ta`: Tree edit distance algorithm (default: `zss`). Options: `zss`, `apted` -### Option --path (Specify Directory) -This option will compare all the files in the specified directory and output the similarity index for each pair of files. This option is expensive in terms of time complexity, so it is recommended to use it with a small number of files. +**Example with options:** ```sh -csim --path /path/to/directory +csim report --path /path/to/directory --lang java --talg apted ``` -### Output + +### Action 2: `group` - Group Files by Similarity + +Groups files by similarity using a specified threshold and strategy. + ```sh -file1.py is similar to file2.py with similarity index: X.XX -file1.py is similar to file3.py with similarity index: X.XX -... -fileN.py is similar to fileM.py with similarity index: X.XX +csim group --path /path/to/directory --threshold 0.8 +``` + +**Example Output:** +``` +Threshold: 0.8 +Total files processed: 4 +Group 1 (Average Similarity: 0.98): +./file1.py +./file2.py +Group 2 (Average Similarity: 0.95): +./file3.py +./file4.py ``` -Notes: -- Only `.py` files within the directory are considered. -- The output uses full file paths when reporting similarities. +#### Strategy Options + +The `group` action supports two strategies for finding similar files: + +##### 1. **exhaustive** (Default) +Compares every file against every other file (O(n²)). This is the most thorough approach but slower for large datasets. -### Option --lang (Specify Language) -You can specify the input language. Currently, only `python` is supported and it is the default. ```sh -csim --files file1.py file2.py --lang python +csim group --path /path/to/directory --threshold 0.8 --strategy exhaustive ``` -### Option --threshold (Specify Similarity Threshold) -You can specify a similarity threshold to group files based on their similarity. -Only available when using the `--files` option. If the similarity index is above the threshold, it will be reported in the output. +**When to use each:** +- **exhaustive**: Small datasets (< 100 files), when maximum precision is critical + +#### Group Action Options + +- `--threshold, -t`: Similarity threshold (0.0 to 1.0). **Required.** +- `--strategy, -s`: Grouping strategy (default: `exhaustive`). Options: `exhaustive` +- `--lang, -l`: Programming language (default: `python`). Options: `python`, `java`, `cpp` +- `--talg, -ta`: Tree edit distance algorithm (default: `zss`). Options: `zss`, `apted` + +**Complete example:** ```sh -csim --path /path/to/directory --threshold 0.7 +csim group --path /path/to/directory --threshold 0.9 --strategy exhaustive --lang python --talg apted ``` -### Output + +### Language Support + +The tool supports the following programming languages: + +**Python:** +```sh +csim report --path /path/to/python/files --lang python +``` + +**Java:** ```sh -Threshold: 0.7 -Total files processed: N -Group 1 (Average similarity: X.XX): - file1.py - file2.py -Group 2 (Average similarity: X.XX): - file3.py - file4.py -... -Unique files (similarity below threshold): - fileN.py -``` - -### Option --talg (Specify Tree Edit Distance Algorithm) -You can specify the tree edit distance algorithm to use for comparisons. The available options are `zss` (default) and `apted`. +csim report --path /path/to/java/files --lang java +``` + +**C++:** ```sh -csim --files file1.py file2.py --talg apted +csim report --path /path/to/cpp/files --lang cpp ``` -### Alternatively, you can use csim as a Python module: +### Threshold Guidance + +The similarity threshold represents the structural similarity of the code (based on the Abstract Syntax Tree). Choose appropriate thresholds based on your use case: + +- **0.95+**: Nearly identical code (likely plagiarism) +- **0.85-0.95**: Very similar code (probable plagiarism) +- **0.70-0.85**: Moderately similar code (review recommended) +- **<0.70**: Low similarity (likely independent work) + +### Using csim as a Python Module + +You can also use csim programmatically within your Python code. The library provides low-level functions for advanced use cases: + +```python +from csim.utils import group_by_exhaustive_search, report_pairwise_similarity + +# Example: Group files by similarity +file_names = ["file1.py", "file2.py", "file3.py"] +file_contents = [code1, code2, code3] + +results = group_by_exhaustive_search( + file_names=file_names, + file_contents=file_contents, + lang="python", + threshold=0.8, + ted_algorithm="zss" +) + +print(results) +``` + +Or use the legacy Compare class for simple pairwise comparisons: + ```python from csim import Compare + code_a = "a = 5" code_b = "c = 50" -similarity = Compare(name_a = 'example A', content_a = code_a, name_b = 'example B', content_b = code_b) +similarity = Compare(name_a='example A', content_a=code_a, name_b='example B', content_b=code_b) print(f"Similarity: {similarity}") # Output: Similarity: X.XX ``` +## Documentation + +- [Getting Started Guide](GETTING_STARTED.md) - Quick tutorial for new users +- [Search Strategies Guide](docs/STRATEGIES.md) - Detailed comparison of exhaustive vs. LSH approaches +- [ANTLR Parser Generation](grammars/parser_gen_guide.md) - For grammar customization + ## ANTLR4 Installation and Parser/Lexer Generation + This installation is not required—the generated files are already included in the project. If you'd like to review the steps to generate them yourself, see [grammars/parser_gen_guide.md](grammars/parser_gen_guide.md). Note: The included generated files were produced by **ANTLR 4.13.2** and are compatible with the pinned runtime listed above. @@ -137,21 +223,23 @@ Contributions are welcome! To contribute, please follow these steps: This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. -## Links +## Support -- [Repository](https://github.com/EdsonEddy/csim) -- [Documentation](https://github.com/EdsonEddy/csim/wiki) -- [Report a Bug](https://github.com/EdsonEddy/csim/issues) +- **Questions?** Open a [GitHub Discussion](https://github.com/EdsonEddy/csim/discussions) +- **Found a bug?** File a [GitHub Issue](https://github.com/EdsonEddy/csim/issues) +- **Want to contribute?** See [Contributing](#contributing) section -## Additional Resources +## References For more information on the techniques and tools used in this project, refer to the following resources: - [ANTLR](https://www.antlr.org/) - [Parse Tree (Wikipedia)](https://en.wikipedia.org/wiki/Parse_tree) - [Tree Edit Distance (Wikipedia)](https://en.wikipedia.org/wiki/Tree_edit_distance) +- [Locality Sensitive Hashing (Wikipedia)](https://en.wikipedia.org/wiki/Locality-sensitive_hashing) +- [MinHash (Wikipedia)](https://en.wikipedia.org/wiki/MinHash) - [zss (PyPI)](https://pypi.org/project/zss/) -- [Hashing](https://docs.python.org/es/3/library/hashlib.html) +- [Hashing (Python Docs)](https://docs.python.org/3/library/hashlib.html) - [apted (GitHub)](https://github.com/JoaoFelipe/apted) ## Third-Party Licenses @@ -177,4 +265,5 @@ This project utilizes the following third-party libraries: ### apted (All Path Tree Edit Distance) - **Purpose:** Python APTED algorithm for the Tree Edit Distance, an alternative to zss - **License:** MIT License -- **Repository:** [https://github.com/JoaoFelipe/apted](https://github.com/JoaoFelipe/apted) \ No newline at end of file +- **Repository:** [https://github.com/JoaoFelipe/apted](https://github.com/JoaoFelipe/apted) + diff --git a/csim/CodeSimilarity.py b/csim/CodeSimilarity.py index da33371..9564b20 100644 --- a/csim/CodeSimilarity.py +++ b/csim/CodeSimilarity.py @@ -1,285 +1,6 @@ -import sys -from .python.PythonParser import PythonParser -from .python.PythonLexer import PythonLexer -from .Visitors import PythonParserVisitorExtended -from .utils import ( - TOKEN_TYPE_OFFSET, - get_control_equivalence_rule_indices, - get_exclude_childrens_from_rule, - get_excluded_token_types, - get_hash_rule_indices, -) -import hashlib -from antlr4 import InputStream, CommonTokenStream, TerminalNode -from antlr4.error.ErrorListener import ErrorListener -from zss import simple_distance, Node - - -class ExtendedErrorListener(ErrorListener): - def __init__(self, file_name=""): - super(ExtendedErrorListener, self).__init__() - self.file_name = file_name - - def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): - print( - f"Syntax error in file {self.file_name} line {line}:{column} {msg}", - file=sys.stderr, - ) - - -def get_parser_visitor_class(lang): - """Factory function to create a ParserVisitor class with the correct base visitor. - Args: - lang (str): Programming language identifier. - Returns: - class: A ParserVisitor class that extends the appropriate base visitor for the given language. - """ - base_visitor = None - if lang == "python": - base_visitor = PythonParserVisitorExtended - - if base_visitor is None: - raise ValueError(f"Unsupported language: {lang}") - - class ParserVisitor(base_visitor): - """Custom visitor class that extends the base visitor for the specified language. - This class can be further customized to implement language-specific normalization logic. - """ - - def __init__(self, excluded_token_types): - super().__init__() - self.excluded_token_types = excluded_token_types - - def visitChildren(self, node): - """Visit and process all children of a parse tree node. - - Args: - node: ANTLR parse tree node to process. - - Returns: - A ZSS Node representing the normalized subtree. - """ - rule_index = node.getRuleIndex() - children_nodes = [] - - for child in node.getChildren(): - if isinstance(child, TerminalNode): - token = child.symbol - if token.type not in self.excluded_token_types: - children_nodes.append(Node(token.type + TOKEN_TYPE_OFFSET)) - else: - result = self.visit(child) - if result is not None: - children_nodes.append(result) - - """Node compression: if a node has only one child. - Can return the child directly to reduce unnecessary levels in the tree. - """ - if len(children_nodes) == 1: - # Single child: return it directly to avoid unnecessary nesting - return children_nodes[0] - - # Create parent node for multiple children - parent_node = Node(rule_index) - for c in children_nodes: - parent_node.addkid(c) - return parent_node - - return ParserVisitor - - -def PruneAndHash(tree, lang): - """Prune and hash a ZSS tree to reduce noise and improve comparison efficiency. - - Args: - tree: ANTLR parse tree to prune and hash. - lang: The programming language of the source code. - Returns: - tuple: (hashed_tree, node_count) where hashed_tree is a ZSS Node - and node_count is the total number of nodes in the tree. - """ - hashed_rule_indices = get_hash_rule_indices(lang) - control_equivalence_rule_indices = get_control_equivalence_rule_indices(lang) - exclude_childrens_from_rule = get_exclude_childrens_from_rule(lang) - - def traverse_subtree(node): - # Collect all labels in the subtree rooted at `node` into a single list - elements = [node.label] - for c in node.children: - elements.extend(traverse_subtree(c)) - return elements - - def prunning_tree(node): - if node is None: - return None - - label = node.label - new_node = Node(label) - - # Get the list of child labels to exclude for this rule, if any - childrens_to_exclude = exclude_childrens_from_rule.get(node.label, []) - - # Otherwise, recurse normally. - for children in node.children: - # Skip children that are in the exclusion list for this rule - if children.label in childrens_to_exclude: - continue - new_child = prunning_tree(children) - if new_child is not None: - new_node.addkid(new_child) - return new_node - - def hash_children(label, childrens): - # Flatten all children subtree labels into a single sequence and hash - flat = [] - for c in childrens: - flat.extend(traverse_subtree(c)) - s = "|".join(map(str, flat)) - return str(label) + "|" + hashlib.sha256(s.encode("utf-8")).hexdigest() - - def hashing_tree(node): - if node is None: - return None, 0 - - # For control flow nodes, we can consider them equivalent regardless of their specific structure - label = node.label - if label in control_equivalence_rule_indices: - label = control_equivalence_rule_indices[label] - - # For nodes that are in the hashed rule set, we hash their entire subtree to a single digest - if node.label in hashed_rule_indices: - digest = hash_children(label, node.children) - return Node(digest), 1 - - new_node = Node(label) - count = 1 - - # For other nodes, we recursively hash their children as usual - for children in node.children: - new_child, child_count = hashing_tree(children) - if new_child is not None: - new_node.addkid(new_child) - count += child_count - return new_node, count - - pruned_tree = prunning_tree(tree) - hashed_tree, nodes_number = hashing_tree(pruned_tree) - - return hashed_tree, nodes_number - - -def Normalize(tree, lang): - """Normalize an ANTLR parse tree to a ZSS tree structure, excluding irrelevant tokens and compressing certain rules. - - Args: - tree: ANTLR parse tree to normalize. - lang: The programming language of the source code. - - Returns: - tuple: A ZSS Node representing the normalized tree. - """ - excluded_token_types = get_excluded_token_types(lang) - - # Get the correct ParserVisitor class for the given language - ParserVisitorClass = get_parser_visitor_class(lang) - visitor = ParserVisitorClass(excluded_token_types) - - normalized_tree = visitor.visit(tree) - - return normalized_tree - - -def ANTLR_parse(file_name, file_content, lang): - """Parse source code into an ANTLR parse tree and handle syntax errors. - - Args: - file_name: Name of the source file (used for error reporting). - file_content: Source code as a string to be parsed. - lang: programming language of the source code (e.g. python, java, etc.). - - Returns: - ANTLR parse tree representing the code's syntactic structure. - """ - - tree = None - parser = None - input_stream = InputStream(file_content) - error_listener = ExtendedErrorListener(file_name) - - if lang == "python": - # Lexing the input code to create a token stream - lexer = PythonLexer(input_stream) - lexer.removeErrorListeners() - lexer.addErrorListener(error_listener) - # Parsing the token stream to create a parse tree - token_stream = CommonTokenStream(lexer) - parser = PythonParser(token_stream) - parser.removeErrorListeners() - parser.addErrorListener(error_listener) - tree = parser.file_input() - - return tree - - -def TreeEditDistance(N1, N2, ted_algorithm="zss"): - """Calculate the tree edit distance between two trees using the specified algorithm. - Args: - N1: First tree (root node). - N2: Second tree (root node). - ted_algorithm: The tree edit distance algorithm to use ('zss' or 'apted'). - Returns: - int: The computed tree edit distance between the two trees. - """ - if ted_algorithm == "zss": - from zss import simple_distance - - d = simple_distance(N1, N2) - elif ted_algorithm == "apted": - from apted import APTED, Config - - class CustomConfig(Config): - def rename(self, node1, node2): - """Compares attribute .value of trees""" - return 1 if node1.label != node2.label else 0 - - def children(self, node): - """Get childrens of a node""" - return node.children - - apted = APTED(N1, N2, CustomConfig()) - d = apted.compute_edit_distance() - else: - d = 0 - return d - - -def SimilarityIndex(d, T1, T2): - """Calculate the similarity index between two trees. - - Normalizes the tree edit distance to a value between 0 and 1, where - 1 indicates identical trees and 0 indicates maximum dissimilarity. - - Args: - d: Tree edit distance between the two trees. - T1: Number of nodes in the first tree. - T2: Number of nodes in the second tree. - - Returns: - float: Similarity index in the range [0, 1]. - """ - # If edit distance exceeds the bound given by max(T1, T2), - # normalize by total nodes to keep the value non-negative. - if d > max(T1, T2): - s_alt = 1 - (d / max(T1 + T2, 1)) - s_alt = round(s_alt, 2) - return s_alt - - m = max(T1, T2) - s = 1 - (d / m) - - # return similarity index with precision of 2 decimal places - s = round(s, 2) - return s +from .language.parser import ANTLR_parse +from .processing.tree_processing import Normalize, PruneAndHash +from .processing.distance_metrics import TreeEditDistance, SimilarityIndex def Compare( diff --git a/csim/Visitors.py b/csim/Visitors.py index ebbc484..bb632cf 100644 --- a/csim/Visitors.py +++ b/csim/Visitors.py @@ -1,15 +1,21 @@ from .python.PythonParserVisitor import PythonParserVisitor -from zss import Node +from .java.Java20ParserVisitor import Java20ParserVisitor +from .cpp.CPP14ParserVisitor import CPP14ParserVisitor from antlr4 import TerminalNode +from .java.utils import ( + COLLAPSED_RULE_INDICES as JAVA_COLLAPSED_RULES, +) from .python.utils import ( COLLAPSED_RULE_INDICES as PYTHON_COLLAPSED_RULES, ASIGN_OP_NORMALIZED as PYTHON_ASSIGN_OP_NORMALIZED, RULE_ASSIGNMENT as PYTHON_RULE_ASSIGNMENT, ) +from .cpp.utils import ( + COLLAPSED_RULE_INDICES as CPP_COLLAPSED_RULES, +) class PythonParserVisitorExtended(PythonParserVisitor): - def visit(self, tree): """Override visit to exclude certain rules from being processed. This helps in reducing noise in the parse tree by skipping over @@ -19,8 +25,7 @@ def visit(self, tree): not isinstance(tree, TerminalNode) and tree.getRuleIndex() in PYTHON_COLLAPSED_RULES ): - list_idx = tree.getRuleIndex() - return Node(list_idx) + return {"label": tree.getRuleIndex(), "children": []} return tree.accept(self) def visitAssignment(self, node): @@ -32,13 +37,41 @@ def visitAssignment(self, node): if operand in PYTHON_ASSIGN_OP_NORMALIZED: # Rewrite the assignment to a normalized form based on the operator rule, operator_token = PYTHON_ASSIGN_OP_NORMALIZED[operand] - assignment_node = Node(PYTHON_RULE_ASSIGNMENT) - norm_node = Node(rule) - norm_node.addkid(self.visit(node.getChild(0))) - norm_node.addkid(Node(operator_token)) - norm_node.addkid(self.visit(node.getChild(2))) - assignment_node.addkid(norm_node) + assignment_node = {"label": PYTHON_RULE_ASSIGNMENT, "children": []} + norm_node = {"label": rule, "children": []} + norm_node["children"].append(self.visit(node.getChild(0))) + norm_node["children"].append({"label": operator_token, "children": []}) + norm_node["children"].append(self.visit(node.getChild(2))) + assignment_node["children"].append(norm_node) return assignment_node else: # For regular assignment, just visit the children as usual return self.visitChildren(node) + + +class Java20ParserVisitorExtended(Java20ParserVisitor): + def visit(self, tree): + """Override visit to exclude certain rules from being processed. + This helps in reducing noise in the parse tree by skipping over + less relevant constructs. + """ + if ( + not isinstance(tree, TerminalNode) + and tree.getRuleIndex() in JAVA_COLLAPSED_RULES + ): + return {"label": tree.getRuleIndex(), "children": []} + return tree.accept(self) + + +class CPP14ParserVisitorExtended(CPP14ParserVisitor): + def visit(self, tree): + """Override visit to exclude certain rules from being processed. + This helps in reducing noise in the parse tree by skipping over + less relevant constructs. + """ + if ( + not isinstance(tree, TerminalNode) + and tree.getRuleIndex() in CPP_COLLAPSED_RULES + ): + return {"label": tree.getRuleIndex(), "children": []} + return tree.accept(self) diff --git a/csim/__init__.py b/csim/__init__.py index 7995c7e..f985312 100644 --- a/csim/__init__.py +++ b/csim/__init__.py @@ -1,7 +1,5 @@ -from csim.CodeSimilarity import Compare -from csim.CodeSimilarity import ANTLR_parse -from csim.CodeSimilarity import Normalize -from csim.CodeSimilarity import PruneAndHash -from csim.CodeSimilarity import SimilarityIndex -from csim.utils import group_by_similarity -from csim.utils import compare_all \ No newline at end of file +from .CodeSimilarity import Compare +from .language.parser import ANTLR_parse +from .processing.tree_processing import Normalize, PruneAndHash +from .processing.distance_metrics import SimilarityIndex +from .utils import group_by_exhaustive_search, report_pairwise_similarity \ No newline at end of file diff --git a/csim/cpp/CPP14Lexer.interp b/csim/cpp/CPP14Lexer.interp new file mode 100644 index 0000000..6cfde35 --- /dev/null +++ b/csim/cpp/CPP14Lexer.interp @@ -0,0 +1,478 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +'alignas' +'alignof' +'asm' +'auto' +'bool' +'break' +'case' +'catch' +'char' +'char16_t' +'char32_t' +'class' +'const' +'constexpr' +'const_cast' +'continue' +'decltype' +'default' +'delete' +'do' +'double' +'dynamic_cast' +'else' +'enum' +'explicit' +'export' +'extern' +'false' +'final' +'float' +'for' +'friend' +'goto' +'if' +'inline' +'int' +'long' +'mutable' +'namespace' +'new' +'noexcept' +'nullptr' +'operator' +'override' +'private' +'protected' +'public' +'register' +'reinterpret_cast' +'return' +'short' +'signed' +'sizeof' +'static' +'static_assert' +'static_cast' +'struct' +'switch' +'template' +'this' +'thread_local' +'throw' +'true' +'try' +'typedef' +'typeid' +'typename' +'union' +'unsigned' +'using' +'virtual' +'void' +'volatile' +'wchar_t' +'while' +'(' +')' +'[' +']' +'{' +'}' +'+' +'-' +'*' +'/' +'%' +'^' +'&' +'|' +'~' +null +'=' +'<' +'>' +'+=' +'-=' +'*=' +'/=' +'%=' +'^=' +'&=' +'|=' +'<<=' +'>>=' +'==' +'!=' +'<=' +'>=' +null +null +'++' +'--' +',' +'->*' +'->' +'?' +':' +'::' +';' +'.' +'.*' +'...' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Identifier +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +Integersuffix +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Whitespace +Newline +BlockComment +LineComment + +rule names: +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Hexquad +Universalcharactername +Identifier +Identifiernondigit +NONDIGIT +DIGIT +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +NONZERODIGIT +OCTALDIGIT +HEXADECIMALDIGIT +BINARYDIGIT +Integersuffix +Unsignedsuffix +Longsuffix +Longlongsuffix +Cchar +Escapesequence +Simpleescapesequence +Octalescapesequence +Hexadecimalescapesequence +Fractionalconstant +Exponentpart +SIGN +Digitsequence +Floatingsuffix +Encodingprefix +Schar +Rawstring +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Udsuffix +Whitespace +Newline +BlockComment +LineComment + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 145, 1460, 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, 1, 0, 1, 0, 3, 0, 346, 8, 0, 1, 0, 1, 0, 3, 0, 350, 8, 0, 1, 0, 1, 0, 3, 0, 354, 8, 0, 1, 0, 1, 0, 3, 0, 358, 8, 0, 3, 0, 360, 8, 0, 1, 1, 3, 1, 363, 8, 1, 1, 1, 1, 1, 4, 1, 367, 8, 1, 11, 1, 12, 1, 368, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 375, 8, 2, 1, 2, 3, 2, 378, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 383, 8, 2, 3, 2, 385, 8, 2, 1, 3, 3, 3, 388, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 393, 8, 3, 10, 3, 12, 3, 396, 9, 3, 1, 3, 3, 3, 399, 8, 3, 1, 4, 1, 4, 3, 4, 403, 8, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 411, 8, 6, 1, 7, 1, 7, 5, 7, 415, 8, 7, 10, 7, 12, 7, 418, 9, 7, 1, 7, 1, 7, 3, 7, 422, 8, 7, 1, 7, 4, 7, 425, 8, 7, 11, 7, 12, 7, 426, 1, 7, 4, 7, 430, 8, 7, 11, 7, 12, 7, 431, 1, 7, 1, 7, 1, 8, 1, 8, 5, 8, 438, 8, 8, 10, 8, 12, 8, 441, 9, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 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, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 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, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 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, 61, 1, 61, 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, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 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, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 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, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 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, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 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, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1029, 8, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1086, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1092, 8, 118, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1142, 8, 132, 1, 133, 1, 133, 1, 133, 5, 133, 1147, 8, 133, 10, 133, 12, 133, 1150, 9, 133, 1, 134, 1, 134, 3, 134, 1154, 8, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 3, 137, 1162, 8, 137, 1, 137, 5, 137, 1165, 8, 137, 10, 137, 12, 137, 1168, 9, 137, 1, 138, 1, 138, 3, 138, 1172, 8, 138, 1, 138, 5, 138, 1175, 8, 138, 10, 138, 12, 138, 1178, 9, 138, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 1184, 8, 139, 1, 139, 1, 139, 3, 139, 1188, 8, 139, 1, 139, 5, 139, 1191, 8, 139, 10, 139, 12, 139, 1194, 9, 139, 1, 140, 1, 140, 1, 140, 1, 140, 3, 140, 1200, 8, 140, 1, 140, 1, 140, 3, 140, 1204, 8, 140, 1, 140, 5, 140, 1207, 8, 140, 10, 140, 12, 140, 1210, 9, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 3, 145, 1222, 8, 145, 1, 145, 1, 145, 3, 145, 1226, 8, 145, 1, 145, 1, 145, 3, 145, 1230, 8, 145, 1, 145, 1, 145, 3, 145, 1234, 8, 145, 3, 145, 1236, 8, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1246, 8, 148, 1, 149, 1, 149, 1, 149, 3, 149, 1251, 8, 149, 1, 150, 1, 150, 1, 150, 3, 150, 1256, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 1279, 8, 151, 1, 151, 3, 151, 1282, 8, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 1288, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 1301, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 4, 153, 1307, 8, 153, 11, 153, 12, 153, 1308, 1, 154, 3, 154, 1312, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 1319, 8, 154, 1, 155, 1, 155, 3, 155, 1323, 8, 155, 1, 155, 1, 155, 1, 155, 3, 155, 1328, 8, 155, 1, 155, 3, 155, 1331, 8, 155, 1, 156, 1, 156, 1, 157, 1, 157, 3, 157, 1337, 8, 157, 1, 157, 5, 157, 1340, 8, 157, 10, 157, 12, 157, 1343, 9, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 3, 159, 1350, 8, 159, 1, 160, 1, 160, 1, 160, 3, 160, 1355, 8, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1363, 8, 161, 10, 161, 12, 161, 1366, 9, 161, 1, 161, 1, 161, 5, 161, 1370, 8, 161, 10, 161, 12, 161, 1373, 9, 161, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1379, 8, 161, 10, 161, 12, 161, 1382, 9, 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, 3, 162, 1398, 8, 162, 1, 163, 1, 163, 3, 163, 1402, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 1410, 8, 163, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 4, 167, 1421, 8, 167, 11, 167, 12, 167, 1422, 1, 167, 1, 167, 1, 168, 1, 168, 3, 168, 1429, 8, 168, 1, 168, 3, 168, 1432, 8, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 5, 169, 1440, 8, 169, 10, 169, 12, 169, 1443, 9, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 1454, 8, 170, 10, 170, 12, 170, 1457, 9, 170, 1, 170, 1, 170, 5, 416, 1364, 1371, 1380, 1441, 0, 171, 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, 0, 265, 0, 267, 132, 269, 0, 271, 0, 273, 0, 275, 133, 277, 134, 279, 135, 281, 136, 283, 0, 285, 0, 287, 0, 289, 0, 291, 137, 293, 0, 295, 0, 297, 0, 299, 0, 301, 0, 303, 0, 305, 0, 307, 0, 309, 0, 311, 0, 313, 0, 315, 0, 317, 0, 319, 0, 321, 0, 323, 0, 325, 138, 327, 139, 329, 140, 331, 141, 333, 0, 335, 142, 337, 143, 339, 144, 341, 145, 1, 0, 20, 3, 0, 76, 76, 85, 85, 117, 117, 1, 0, 10, 10, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 1, 0, 49, 57, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 49, 2, 0, 85, 85, 117, 117, 2, 0, 76, 76, 108, 108, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 2, 0, 43, 43, 45, 45, 4, 0, 70, 70, 76, 76, 102, 102, 108, 108, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 34, 34, 40, 41, 4, 0, 10, 10, 13, 13, 32, 32, 40, 40, 1, 0, 41, 41, 4, 0, 10, 10, 13, 13, 32, 32, 34, 34, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 1528, 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, 267, 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, 291, 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, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 1, 359, 1, 0, 0, 0, 3, 362, 1, 0, 0, 0, 5, 384, 1, 0, 0, 0, 7, 387, 1, 0, 0, 0, 9, 402, 1, 0, 0, 0, 11, 404, 1, 0, 0, 0, 13, 410, 1, 0, 0, 0, 15, 412, 1, 0, 0, 0, 17, 435, 1, 0, 0, 0, 19, 444, 1, 0, 0, 0, 21, 452, 1, 0, 0, 0, 23, 460, 1, 0, 0, 0, 25, 464, 1, 0, 0, 0, 27, 469, 1, 0, 0, 0, 29, 474, 1, 0, 0, 0, 31, 480, 1, 0, 0, 0, 33, 485, 1, 0, 0, 0, 35, 491, 1, 0, 0, 0, 37, 496, 1, 0, 0, 0, 39, 505, 1, 0, 0, 0, 41, 514, 1, 0, 0, 0, 43, 520, 1, 0, 0, 0, 45, 526, 1, 0, 0, 0, 47, 536, 1, 0, 0, 0, 49, 547, 1, 0, 0, 0, 51, 556, 1, 0, 0, 0, 53, 565, 1, 0, 0, 0, 55, 573, 1, 0, 0, 0, 57, 580, 1, 0, 0, 0, 59, 583, 1, 0, 0, 0, 61, 590, 1, 0, 0, 0, 63, 603, 1, 0, 0, 0, 65, 608, 1, 0, 0, 0, 67, 613, 1, 0, 0, 0, 69, 622, 1, 0, 0, 0, 71, 629, 1, 0, 0, 0, 73, 636, 1, 0, 0, 0, 75, 642, 1, 0, 0, 0, 77, 648, 1, 0, 0, 0, 79, 654, 1, 0, 0, 0, 81, 658, 1, 0, 0, 0, 83, 665, 1, 0, 0, 0, 85, 670, 1, 0, 0, 0, 87, 673, 1, 0, 0, 0, 89, 680, 1, 0, 0, 0, 91, 684, 1, 0, 0, 0, 93, 689, 1, 0, 0, 0, 95, 697, 1, 0, 0, 0, 97, 707, 1, 0, 0, 0, 99, 711, 1, 0, 0, 0, 101, 720, 1, 0, 0, 0, 103, 728, 1, 0, 0, 0, 105, 737, 1, 0, 0, 0, 107, 746, 1, 0, 0, 0, 109, 754, 1, 0, 0, 0, 111, 764, 1, 0, 0, 0, 113, 771, 1, 0, 0, 0, 115, 780, 1, 0, 0, 0, 117, 797, 1, 0, 0, 0, 119, 804, 1, 0, 0, 0, 121, 810, 1, 0, 0, 0, 123, 817, 1, 0, 0, 0, 125, 824, 1, 0, 0, 0, 127, 831, 1, 0, 0, 0, 129, 845, 1, 0, 0, 0, 131, 857, 1, 0, 0, 0, 133, 864, 1, 0, 0, 0, 135, 871, 1, 0, 0, 0, 137, 880, 1, 0, 0, 0, 139, 885, 1, 0, 0, 0, 141, 898, 1, 0, 0, 0, 143, 904, 1, 0, 0, 0, 145, 909, 1, 0, 0, 0, 147, 913, 1, 0, 0, 0, 149, 921, 1, 0, 0, 0, 151, 928, 1, 0, 0, 0, 153, 937, 1, 0, 0, 0, 155, 943, 1, 0, 0, 0, 157, 952, 1, 0, 0, 0, 159, 958, 1, 0, 0, 0, 161, 966, 1, 0, 0, 0, 163, 971, 1, 0, 0, 0, 165, 980, 1, 0, 0, 0, 167, 988, 1, 0, 0, 0, 169, 994, 1, 0, 0, 0, 171, 996, 1, 0, 0, 0, 173, 998, 1, 0, 0, 0, 175, 1000, 1, 0, 0, 0, 177, 1002, 1, 0, 0, 0, 179, 1004, 1, 0, 0, 0, 181, 1006, 1, 0, 0, 0, 183, 1008, 1, 0, 0, 0, 185, 1010, 1, 0, 0, 0, 187, 1012, 1, 0, 0, 0, 189, 1014, 1, 0, 0, 0, 191, 1016, 1, 0, 0, 0, 193, 1018, 1, 0, 0, 0, 195, 1020, 1, 0, 0, 0, 197, 1022, 1, 0, 0, 0, 199, 1028, 1, 0, 0, 0, 201, 1030, 1, 0, 0, 0, 203, 1032, 1, 0, 0, 0, 205, 1034, 1, 0, 0, 0, 207, 1036, 1, 0, 0, 0, 209, 1039, 1, 0, 0, 0, 211, 1042, 1, 0, 0, 0, 213, 1045, 1, 0, 0, 0, 215, 1048, 1, 0, 0, 0, 217, 1051, 1, 0, 0, 0, 219, 1054, 1, 0, 0, 0, 221, 1057, 1, 0, 0, 0, 223, 1060, 1, 0, 0, 0, 225, 1064, 1, 0, 0, 0, 227, 1068, 1, 0, 0, 0, 229, 1071, 1, 0, 0, 0, 231, 1074, 1, 0, 0, 0, 233, 1077, 1, 0, 0, 0, 235, 1085, 1, 0, 0, 0, 237, 1091, 1, 0, 0, 0, 239, 1093, 1, 0, 0, 0, 241, 1096, 1, 0, 0, 0, 243, 1099, 1, 0, 0, 0, 245, 1101, 1, 0, 0, 0, 247, 1105, 1, 0, 0, 0, 249, 1108, 1, 0, 0, 0, 251, 1110, 1, 0, 0, 0, 253, 1112, 1, 0, 0, 0, 255, 1115, 1, 0, 0, 0, 257, 1117, 1, 0, 0, 0, 259, 1119, 1, 0, 0, 0, 261, 1122, 1, 0, 0, 0, 263, 1126, 1, 0, 0, 0, 265, 1141, 1, 0, 0, 0, 267, 1143, 1, 0, 0, 0, 269, 1153, 1, 0, 0, 0, 271, 1155, 1, 0, 0, 0, 273, 1157, 1, 0, 0, 0, 275, 1159, 1, 0, 0, 0, 277, 1169, 1, 0, 0, 0, 279, 1183, 1, 0, 0, 0, 281, 1199, 1, 0, 0, 0, 283, 1211, 1, 0, 0, 0, 285, 1213, 1, 0, 0, 0, 287, 1215, 1, 0, 0, 0, 289, 1217, 1, 0, 0, 0, 291, 1235, 1, 0, 0, 0, 293, 1237, 1, 0, 0, 0, 295, 1239, 1, 0, 0, 0, 297, 1245, 1, 0, 0, 0, 299, 1250, 1, 0, 0, 0, 301, 1255, 1, 0, 0, 0, 303, 1287, 1, 0, 0, 0, 305, 1300, 1, 0, 0, 0, 307, 1302, 1, 0, 0, 0, 309, 1318, 1, 0, 0, 0, 311, 1330, 1, 0, 0, 0, 313, 1332, 1, 0, 0, 0, 315, 1334, 1, 0, 0, 0, 317, 1344, 1, 0, 0, 0, 319, 1349, 1, 0, 0, 0, 321, 1354, 1, 0, 0, 0, 323, 1356, 1, 0, 0, 0, 325, 1397, 1, 0, 0, 0, 327, 1409, 1, 0, 0, 0, 329, 1411, 1, 0, 0, 0, 331, 1414, 1, 0, 0, 0, 333, 1417, 1, 0, 0, 0, 335, 1420, 1, 0, 0, 0, 337, 1431, 1, 0, 0, 0, 339, 1435, 1, 0, 0, 0, 341, 1449, 1, 0, 0, 0, 343, 345, 3, 275, 137, 0, 344, 346, 3, 291, 145, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 360, 1, 0, 0, 0, 347, 349, 3, 277, 138, 0, 348, 350, 3, 291, 145, 0, 349, 348, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 360, 1, 0, 0, 0, 351, 353, 3, 279, 139, 0, 352, 354, 3, 291, 145, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 360, 1, 0, 0, 0, 355, 357, 3, 281, 140, 0, 356, 358, 3, 291, 145, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 360, 1, 0, 0, 0, 359, 343, 1, 0, 0, 0, 359, 347, 1, 0, 0, 0, 359, 351, 1, 0, 0, 0, 359, 355, 1, 0, 0, 0, 360, 2, 1, 0, 0, 0, 361, 363, 7, 0, 0, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 366, 5, 39, 0, 0, 365, 367, 3, 299, 149, 0, 366, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 371, 5, 39, 0, 0, 371, 4, 1, 0, 0, 0, 372, 374, 3, 309, 154, 0, 373, 375, 3, 311, 155, 0, 374, 373, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 378, 3, 317, 158, 0, 377, 376, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 385, 1, 0, 0, 0, 379, 380, 3, 315, 157, 0, 380, 382, 3, 311, 155, 0, 381, 383, 3, 317, 158, 0, 382, 381, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 385, 1, 0, 0, 0, 384, 372, 1, 0, 0, 0, 384, 379, 1, 0, 0, 0, 385, 6, 1, 0, 0, 0, 386, 388, 3, 319, 159, 0, 387, 386, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 398, 1, 0, 0, 0, 389, 399, 3, 323, 161, 0, 390, 394, 5, 34, 0, 0, 391, 393, 3, 321, 160, 0, 392, 391, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 5, 34, 0, 0, 398, 389, 1, 0, 0, 0, 398, 390, 1, 0, 0, 0, 399, 8, 1, 0, 0, 0, 400, 403, 3, 73, 36, 0, 401, 403, 3, 143, 71, 0, 402, 400, 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 10, 1, 0, 0, 0, 404, 405, 3, 101, 50, 0, 405, 12, 1, 0, 0, 0, 406, 411, 3, 325, 162, 0, 407, 411, 3, 327, 163, 0, 408, 411, 3, 329, 164, 0, 409, 411, 3, 331, 165, 0, 410, 406, 1, 0, 0, 0, 410, 407, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 409, 1, 0, 0, 0, 411, 14, 1, 0, 0, 0, 412, 424, 5, 35, 0, 0, 413, 415, 8, 1, 0, 0, 414, 413, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 421, 5, 92, 0, 0, 420, 422, 5, 13, 0, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 425, 5, 10, 0, 0, 424, 416, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 429, 1, 0, 0, 0, 428, 430, 8, 1, 0, 0, 429, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 434, 6, 7, 0, 0, 434, 16, 1, 0, 0, 0, 435, 439, 5, 35, 0, 0, 436, 438, 8, 1, 0, 0, 437, 436, 1, 0, 0, 0, 438, 441, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 442, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 442, 443, 6, 8, 0, 0, 443, 18, 1, 0, 0, 0, 444, 445, 5, 97, 0, 0, 445, 446, 5, 108, 0, 0, 446, 447, 5, 105, 0, 0, 447, 448, 5, 103, 0, 0, 448, 449, 5, 110, 0, 0, 449, 450, 5, 97, 0, 0, 450, 451, 5, 115, 0, 0, 451, 20, 1, 0, 0, 0, 452, 453, 5, 97, 0, 0, 453, 454, 5, 108, 0, 0, 454, 455, 5, 105, 0, 0, 455, 456, 5, 103, 0, 0, 456, 457, 5, 110, 0, 0, 457, 458, 5, 111, 0, 0, 458, 459, 5, 102, 0, 0, 459, 22, 1, 0, 0, 0, 460, 461, 5, 97, 0, 0, 461, 462, 5, 115, 0, 0, 462, 463, 5, 109, 0, 0, 463, 24, 1, 0, 0, 0, 464, 465, 5, 97, 0, 0, 465, 466, 5, 117, 0, 0, 466, 467, 5, 116, 0, 0, 467, 468, 5, 111, 0, 0, 468, 26, 1, 0, 0, 0, 469, 470, 5, 98, 0, 0, 470, 471, 5, 111, 0, 0, 471, 472, 5, 111, 0, 0, 472, 473, 5, 108, 0, 0, 473, 28, 1, 0, 0, 0, 474, 475, 5, 98, 0, 0, 475, 476, 5, 114, 0, 0, 476, 477, 5, 101, 0, 0, 477, 478, 5, 97, 0, 0, 478, 479, 5, 107, 0, 0, 479, 30, 1, 0, 0, 0, 480, 481, 5, 99, 0, 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 115, 0, 0, 483, 484, 5, 101, 0, 0, 484, 32, 1, 0, 0, 0, 485, 486, 5, 99, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 99, 0, 0, 489, 490, 5, 104, 0, 0, 490, 34, 1, 0, 0, 0, 491, 492, 5, 99, 0, 0, 492, 493, 5, 104, 0, 0, 493, 494, 5, 97, 0, 0, 494, 495, 5, 114, 0, 0, 495, 36, 1, 0, 0, 0, 496, 497, 5, 99, 0, 0, 497, 498, 5, 104, 0, 0, 498, 499, 5, 97, 0, 0, 499, 500, 5, 114, 0, 0, 500, 501, 5, 49, 0, 0, 501, 502, 5, 54, 0, 0, 502, 503, 5, 95, 0, 0, 503, 504, 5, 116, 0, 0, 504, 38, 1, 0, 0, 0, 505, 506, 5, 99, 0, 0, 506, 507, 5, 104, 0, 0, 507, 508, 5, 97, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 51, 0, 0, 510, 511, 5, 50, 0, 0, 511, 512, 5, 95, 0, 0, 512, 513, 5, 116, 0, 0, 513, 40, 1, 0, 0, 0, 514, 515, 5, 99, 0, 0, 515, 516, 5, 108, 0, 0, 516, 517, 5, 97, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 115, 0, 0, 519, 42, 1, 0, 0, 0, 520, 521, 5, 99, 0, 0, 521, 522, 5, 111, 0, 0, 522, 523, 5, 110, 0, 0, 523, 524, 5, 115, 0, 0, 524, 525, 5, 116, 0, 0, 525, 44, 1, 0, 0, 0, 526, 527, 5, 99, 0, 0, 527, 528, 5, 111, 0, 0, 528, 529, 5, 110, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 116, 0, 0, 531, 532, 5, 101, 0, 0, 532, 533, 5, 120, 0, 0, 533, 534, 5, 112, 0, 0, 534, 535, 5, 114, 0, 0, 535, 46, 1, 0, 0, 0, 536, 537, 5, 99, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 110, 0, 0, 539, 540, 5, 115, 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 95, 0, 0, 542, 543, 5, 99, 0, 0, 543, 544, 5, 97, 0, 0, 544, 545, 5, 115, 0, 0, 545, 546, 5, 116, 0, 0, 546, 48, 1, 0, 0, 0, 547, 548, 5, 99, 0, 0, 548, 549, 5, 111, 0, 0, 549, 550, 5, 110, 0, 0, 550, 551, 5, 116, 0, 0, 551, 552, 5, 105, 0, 0, 552, 553, 5, 110, 0, 0, 553, 554, 5, 117, 0, 0, 554, 555, 5, 101, 0, 0, 555, 50, 1, 0, 0, 0, 556, 557, 5, 100, 0, 0, 557, 558, 5, 101, 0, 0, 558, 559, 5, 99, 0, 0, 559, 560, 5, 108, 0, 0, 560, 561, 5, 116, 0, 0, 561, 562, 5, 121, 0, 0, 562, 563, 5, 112, 0, 0, 563, 564, 5, 101, 0, 0, 564, 52, 1, 0, 0, 0, 565, 566, 5, 100, 0, 0, 566, 567, 5, 101, 0, 0, 567, 568, 5, 102, 0, 0, 568, 569, 5, 97, 0, 0, 569, 570, 5, 117, 0, 0, 570, 571, 5, 108, 0, 0, 571, 572, 5, 116, 0, 0, 572, 54, 1, 0, 0, 0, 573, 574, 5, 100, 0, 0, 574, 575, 5, 101, 0, 0, 575, 576, 5, 108, 0, 0, 576, 577, 5, 101, 0, 0, 577, 578, 5, 116, 0, 0, 578, 579, 5, 101, 0, 0, 579, 56, 1, 0, 0, 0, 580, 581, 5, 100, 0, 0, 581, 582, 5, 111, 0, 0, 582, 58, 1, 0, 0, 0, 583, 584, 5, 100, 0, 0, 584, 585, 5, 111, 0, 0, 585, 586, 5, 117, 0, 0, 586, 587, 5, 98, 0, 0, 587, 588, 5, 108, 0, 0, 588, 589, 5, 101, 0, 0, 589, 60, 1, 0, 0, 0, 590, 591, 5, 100, 0, 0, 591, 592, 5, 121, 0, 0, 592, 593, 5, 110, 0, 0, 593, 594, 5, 97, 0, 0, 594, 595, 5, 109, 0, 0, 595, 596, 5, 105, 0, 0, 596, 597, 5, 99, 0, 0, 597, 598, 5, 95, 0, 0, 598, 599, 5, 99, 0, 0, 599, 600, 5, 97, 0, 0, 600, 601, 5, 115, 0, 0, 601, 602, 5, 116, 0, 0, 602, 62, 1, 0, 0, 0, 603, 604, 5, 101, 0, 0, 604, 605, 5, 108, 0, 0, 605, 606, 5, 115, 0, 0, 606, 607, 5, 101, 0, 0, 607, 64, 1, 0, 0, 0, 608, 609, 5, 101, 0, 0, 609, 610, 5, 110, 0, 0, 610, 611, 5, 117, 0, 0, 611, 612, 5, 109, 0, 0, 612, 66, 1, 0, 0, 0, 613, 614, 5, 101, 0, 0, 614, 615, 5, 120, 0, 0, 615, 616, 5, 112, 0, 0, 616, 617, 5, 108, 0, 0, 617, 618, 5, 105, 0, 0, 618, 619, 5, 99, 0, 0, 619, 620, 5, 105, 0, 0, 620, 621, 5, 116, 0, 0, 621, 68, 1, 0, 0, 0, 622, 623, 5, 101, 0, 0, 623, 624, 5, 120, 0, 0, 624, 625, 5, 112, 0, 0, 625, 626, 5, 111, 0, 0, 626, 627, 5, 114, 0, 0, 627, 628, 5, 116, 0, 0, 628, 70, 1, 0, 0, 0, 629, 630, 5, 101, 0, 0, 630, 631, 5, 120, 0, 0, 631, 632, 5, 116, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 114, 0, 0, 634, 635, 5, 110, 0, 0, 635, 72, 1, 0, 0, 0, 636, 637, 5, 102, 0, 0, 637, 638, 5, 97, 0, 0, 638, 639, 5, 108, 0, 0, 639, 640, 5, 115, 0, 0, 640, 641, 5, 101, 0, 0, 641, 74, 1, 0, 0, 0, 642, 643, 5, 102, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 97, 0, 0, 646, 647, 5, 108, 0, 0, 647, 76, 1, 0, 0, 0, 648, 649, 5, 102, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 111, 0, 0, 651, 652, 5, 97, 0, 0, 652, 653, 5, 116, 0, 0, 653, 78, 1, 0, 0, 0, 654, 655, 5, 102, 0, 0, 655, 656, 5, 111, 0, 0, 656, 657, 5, 114, 0, 0, 657, 80, 1, 0, 0, 0, 658, 659, 5, 102, 0, 0, 659, 660, 5, 114, 0, 0, 660, 661, 5, 105, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 110, 0, 0, 663, 664, 5, 100, 0, 0, 664, 82, 1, 0, 0, 0, 665, 666, 5, 103, 0, 0, 666, 667, 5, 111, 0, 0, 667, 668, 5, 116, 0, 0, 668, 669, 5, 111, 0, 0, 669, 84, 1, 0, 0, 0, 670, 671, 5, 105, 0, 0, 671, 672, 5, 102, 0, 0, 672, 86, 1, 0, 0, 0, 673, 674, 5, 105, 0, 0, 674, 675, 5, 110, 0, 0, 675, 676, 5, 108, 0, 0, 676, 677, 5, 105, 0, 0, 677, 678, 5, 110, 0, 0, 678, 679, 5, 101, 0, 0, 679, 88, 1, 0, 0, 0, 680, 681, 5, 105, 0, 0, 681, 682, 5, 110, 0, 0, 682, 683, 5, 116, 0, 0, 683, 90, 1, 0, 0, 0, 684, 685, 5, 108, 0, 0, 685, 686, 5, 111, 0, 0, 686, 687, 5, 110, 0, 0, 687, 688, 5, 103, 0, 0, 688, 92, 1, 0, 0, 0, 689, 690, 5, 109, 0, 0, 690, 691, 5, 117, 0, 0, 691, 692, 5, 116, 0, 0, 692, 693, 5, 97, 0, 0, 693, 694, 5, 98, 0, 0, 694, 695, 5, 108, 0, 0, 695, 696, 5, 101, 0, 0, 696, 94, 1, 0, 0, 0, 697, 698, 5, 110, 0, 0, 698, 699, 5, 97, 0, 0, 699, 700, 5, 109, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 115, 0, 0, 702, 703, 5, 112, 0, 0, 703, 704, 5, 97, 0, 0, 704, 705, 5, 99, 0, 0, 705, 706, 5, 101, 0, 0, 706, 96, 1, 0, 0, 0, 707, 708, 5, 110, 0, 0, 708, 709, 5, 101, 0, 0, 709, 710, 5, 119, 0, 0, 710, 98, 1, 0, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 111, 0, 0, 713, 714, 5, 101, 0, 0, 714, 715, 5, 120, 0, 0, 715, 716, 5, 99, 0, 0, 716, 717, 5, 101, 0, 0, 717, 718, 5, 112, 0, 0, 718, 719, 5, 116, 0, 0, 719, 100, 1, 0, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 117, 0, 0, 722, 723, 5, 108, 0, 0, 723, 724, 5, 108, 0, 0, 724, 725, 5, 112, 0, 0, 725, 726, 5, 116, 0, 0, 726, 727, 5, 114, 0, 0, 727, 102, 1, 0, 0, 0, 728, 729, 5, 111, 0, 0, 729, 730, 5, 112, 0, 0, 730, 731, 5, 101, 0, 0, 731, 732, 5, 114, 0, 0, 732, 733, 5, 97, 0, 0, 733, 734, 5, 116, 0, 0, 734, 735, 5, 111, 0, 0, 735, 736, 5, 114, 0, 0, 736, 104, 1, 0, 0, 0, 737, 738, 5, 111, 0, 0, 738, 739, 5, 118, 0, 0, 739, 740, 5, 101, 0, 0, 740, 741, 5, 114, 0, 0, 741, 742, 5, 114, 0, 0, 742, 743, 5, 105, 0, 0, 743, 744, 5, 100, 0, 0, 744, 745, 5, 101, 0, 0, 745, 106, 1, 0, 0, 0, 746, 747, 5, 112, 0, 0, 747, 748, 5, 114, 0, 0, 748, 749, 5, 105, 0, 0, 749, 750, 5, 118, 0, 0, 750, 751, 5, 97, 0, 0, 751, 752, 5, 116, 0, 0, 752, 753, 5, 101, 0, 0, 753, 108, 1, 0, 0, 0, 754, 755, 5, 112, 0, 0, 755, 756, 5, 114, 0, 0, 756, 757, 5, 111, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 101, 0, 0, 759, 760, 5, 99, 0, 0, 760, 761, 5, 116, 0, 0, 761, 762, 5, 101, 0, 0, 762, 763, 5, 100, 0, 0, 763, 110, 1, 0, 0, 0, 764, 765, 5, 112, 0, 0, 765, 766, 5, 117, 0, 0, 766, 767, 5, 98, 0, 0, 767, 768, 5, 108, 0, 0, 768, 769, 5, 105, 0, 0, 769, 770, 5, 99, 0, 0, 770, 112, 1, 0, 0, 0, 771, 772, 5, 114, 0, 0, 772, 773, 5, 101, 0, 0, 773, 774, 5, 103, 0, 0, 774, 775, 5, 105, 0, 0, 775, 776, 5, 115, 0, 0, 776, 777, 5, 116, 0, 0, 777, 778, 5, 101, 0, 0, 778, 779, 5, 114, 0, 0, 779, 114, 1, 0, 0, 0, 780, 781, 5, 114, 0, 0, 781, 782, 5, 101, 0, 0, 782, 783, 5, 105, 0, 0, 783, 784, 5, 110, 0, 0, 784, 785, 5, 116, 0, 0, 785, 786, 5, 101, 0, 0, 786, 787, 5, 114, 0, 0, 787, 788, 5, 112, 0, 0, 788, 789, 5, 114, 0, 0, 789, 790, 5, 101, 0, 0, 790, 791, 5, 116, 0, 0, 791, 792, 5, 95, 0, 0, 792, 793, 5, 99, 0, 0, 793, 794, 5, 97, 0, 0, 794, 795, 5, 115, 0, 0, 795, 796, 5, 116, 0, 0, 796, 116, 1, 0, 0, 0, 797, 798, 5, 114, 0, 0, 798, 799, 5, 101, 0, 0, 799, 800, 5, 116, 0, 0, 800, 801, 5, 117, 0, 0, 801, 802, 5, 114, 0, 0, 802, 803, 5, 110, 0, 0, 803, 118, 1, 0, 0, 0, 804, 805, 5, 115, 0, 0, 805, 806, 5, 104, 0, 0, 806, 807, 5, 111, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 116, 0, 0, 809, 120, 1, 0, 0, 0, 810, 811, 5, 115, 0, 0, 811, 812, 5, 105, 0, 0, 812, 813, 5, 103, 0, 0, 813, 814, 5, 110, 0, 0, 814, 815, 5, 101, 0, 0, 815, 816, 5, 100, 0, 0, 816, 122, 1, 0, 0, 0, 817, 818, 5, 115, 0, 0, 818, 819, 5, 105, 0, 0, 819, 820, 5, 122, 0, 0, 820, 821, 5, 101, 0, 0, 821, 822, 5, 111, 0, 0, 822, 823, 5, 102, 0, 0, 823, 124, 1, 0, 0, 0, 824, 825, 5, 115, 0, 0, 825, 826, 5, 116, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 116, 0, 0, 828, 829, 5, 105, 0, 0, 829, 830, 5, 99, 0, 0, 830, 126, 1, 0, 0, 0, 831, 832, 5, 115, 0, 0, 832, 833, 5, 116, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 116, 0, 0, 835, 836, 5, 105, 0, 0, 836, 837, 5, 99, 0, 0, 837, 838, 5, 95, 0, 0, 838, 839, 5, 97, 0, 0, 839, 840, 5, 115, 0, 0, 840, 841, 5, 115, 0, 0, 841, 842, 5, 101, 0, 0, 842, 843, 5, 114, 0, 0, 843, 844, 5, 116, 0, 0, 844, 128, 1, 0, 0, 0, 845, 846, 5, 115, 0, 0, 846, 847, 5, 116, 0, 0, 847, 848, 5, 97, 0, 0, 848, 849, 5, 116, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 99, 0, 0, 851, 852, 5, 95, 0, 0, 852, 853, 5, 99, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 115, 0, 0, 855, 856, 5, 116, 0, 0, 856, 130, 1, 0, 0, 0, 857, 858, 5, 115, 0, 0, 858, 859, 5, 116, 0, 0, 859, 860, 5, 114, 0, 0, 860, 861, 5, 117, 0, 0, 861, 862, 5, 99, 0, 0, 862, 863, 5, 116, 0, 0, 863, 132, 1, 0, 0, 0, 864, 865, 5, 115, 0, 0, 865, 866, 5, 119, 0, 0, 866, 867, 5, 105, 0, 0, 867, 868, 5, 116, 0, 0, 868, 869, 5, 99, 0, 0, 869, 870, 5, 104, 0, 0, 870, 134, 1, 0, 0, 0, 871, 872, 5, 116, 0, 0, 872, 873, 5, 101, 0, 0, 873, 874, 5, 109, 0, 0, 874, 875, 5, 112, 0, 0, 875, 876, 5, 108, 0, 0, 876, 877, 5, 97, 0, 0, 877, 878, 5, 116, 0, 0, 878, 879, 5, 101, 0, 0, 879, 136, 1, 0, 0, 0, 880, 881, 5, 116, 0, 0, 881, 882, 5, 104, 0, 0, 882, 883, 5, 105, 0, 0, 883, 884, 5, 115, 0, 0, 884, 138, 1, 0, 0, 0, 885, 886, 5, 116, 0, 0, 886, 887, 5, 104, 0, 0, 887, 888, 5, 114, 0, 0, 888, 889, 5, 101, 0, 0, 889, 890, 5, 97, 0, 0, 890, 891, 5, 100, 0, 0, 891, 892, 5, 95, 0, 0, 892, 893, 5, 108, 0, 0, 893, 894, 5, 111, 0, 0, 894, 895, 5, 99, 0, 0, 895, 896, 5, 97, 0, 0, 896, 897, 5, 108, 0, 0, 897, 140, 1, 0, 0, 0, 898, 899, 5, 116, 0, 0, 899, 900, 5, 104, 0, 0, 900, 901, 5, 114, 0, 0, 901, 902, 5, 111, 0, 0, 902, 903, 5, 119, 0, 0, 903, 142, 1, 0, 0, 0, 904, 905, 5, 116, 0, 0, 905, 906, 5, 114, 0, 0, 906, 907, 5, 117, 0, 0, 907, 908, 5, 101, 0, 0, 908, 144, 1, 0, 0, 0, 909, 910, 5, 116, 0, 0, 910, 911, 5, 114, 0, 0, 911, 912, 5, 121, 0, 0, 912, 146, 1, 0, 0, 0, 913, 914, 5, 116, 0, 0, 914, 915, 5, 121, 0, 0, 915, 916, 5, 112, 0, 0, 916, 917, 5, 101, 0, 0, 917, 918, 5, 100, 0, 0, 918, 919, 5, 101, 0, 0, 919, 920, 5, 102, 0, 0, 920, 148, 1, 0, 0, 0, 921, 922, 5, 116, 0, 0, 922, 923, 5, 121, 0, 0, 923, 924, 5, 112, 0, 0, 924, 925, 5, 101, 0, 0, 925, 926, 5, 105, 0, 0, 926, 927, 5, 100, 0, 0, 927, 150, 1, 0, 0, 0, 928, 929, 5, 116, 0, 0, 929, 930, 5, 121, 0, 0, 930, 931, 5, 112, 0, 0, 931, 932, 5, 101, 0, 0, 932, 933, 5, 110, 0, 0, 933, 934, 5, 97, 0, 0, 934, 935, 5, 109, 0, 0, 935, 936, 5, 101, 0, 0, 936, 152, 1, 0, 0, 0, 937, 938, 5, 117, 0, 0, 938, 939, 5, 110, 0, 0, 939, 940, 5, 105, 0, 0, 940, 941, 5, 111, 0, 0, 941, 942, 5, 110, 0, 0, 942, 154, 1, 0, 0, 0, 943, 944, 5, 117, 0, 0, 944, 945, 5, 110, 0, 0, 945, 946, 5, 115, 0, 0, 946, 947, 5, 105, 0, 0, 947, 948, 5, 103, 0, 0, 948, 949, 5, 110, 0, 0, 949, 950, 5, 101, 0, 0, 950, 951, 5, 100, 0, 0, 951, 156, 1, 0, 0, 0, 952, 953, 5, 117, 0, 0, 953, 954, 5, 115, 0, 0, 954, 955, 5, 105, 0, 0, 955, 956, 5, 110, 0, 0, 956, 957, 5, 103, 0, 0, 957, 158, 1, 0, 0, 0, 958, 959, 5, 118, 0, 0, 959, 960, 5, 105, 0, 0, 960, 961, 5, 114, 0, 0, 961, 962, 5, 116, 0, 0, 962, 963, 5, 117, 0, 0, 963, 964, 5, 97, 0, 0, 964, 965, 5, 108, 0, 0, 965, 160, 1, 0, 0, 0, 966, 967, 5, 118, 0, 0, 967, 968, 5, 111, 0, 0, 968, 969, 5, 105, 0, 0, 969, 970, 5, 100, 0, 0, 970, 162, 1, 0, 0, 0, 971, 972, 5, 118, 0, 0, 972, 973, 5, 111, 0, 0, 973, 974, 5, 108, 0, 0, 974, 975, 5, 97, 0, 0, 975, 976, 5, 116, 0, 0, 976, 977, 5, 105, 0, 0, 977, 978, 5, 108, 0, 0, 978, 979, 5, 101, 0, 0, 979, 164, 1, 0, 0, 0, 980, 981, 5, 119, 0, 0, 981, 982, 5, 99, 0, 0, 982, 983, 5, 104, 0, 0, 983, 984, 5, 97, 0, 0, 984, 985, 5, 114, 0, 0, 985, 986, 5, 95, 0, 0, 986, 987, 5, 116, 0, 0, 987, 166, 1, 0, 0, 0, 988, 989, 5, 119, 0, 0, 989, 990, 5, 104, 0, 0, 990, 991, 5, 105, 0, 0, 991, 992, 5, 108, 0, 0, 992, 993, 5, 101, 0, 0, 993, 168, 1, 0, 0, 0, 994, 995, 5, 40, 0, 0, 995, 170, 1, 0, 0, 0, 996, 997, 5, 41, 0, 0, 997, 172, 1, 0, 0, 0, 998, 999, 5, 91, 0, 0, 999, 174, 1, 0, 0, 0, 1000, 1001, 5, 93, 0, 0, 1001, 176, 1, 0, 0, 0, 1002, 1003, 5, 123, 0, 0, 1003, 178, 1, 0, 0, 0, 1004, 1005, 5, 125, 0, 0, 1005, 180, 1, 0, 0, 0, 1006, 1007, 5, 43, 0, 0, 1007, 182, 1, 0, 0, 0, 1008, 1009, 5, 45, 0, 0, 1009, 184, 1, 0, 0, 0, 1010, 1011, 5, 42, 0, 0, 1011, 186, 1, 0, 0, 0, 1012, 1013, 5, 47, 0, 0, 1013, 188, 1, 0, 0, 0, 1014, 1015, 5, 37, 0, 0, 1015, 190, 1, 0, 0, 0, 1016, 1017, 5, 94, 0, 0, 1017, 192, 1, 0, 0, 0, 1018, 1019, 5, 38, 0, 0, 1019, 194, 1, 0, 0, 0, 1020, 1021, 5, 124, 0, 0, 1021, 196, 1, 0, 0, 0, 1022, 1023, 5, 126, 0, 0, 1023, 198, 1, 0, 0, 0, 1024, 1029, 5, 33, 0, 0, 1025, 1026, 5, 110, 0, 0, 1026, 1027, 5, 111, 0, 0, 1027, 1029, 5, 116, 0, 0, 1028, 1024, 1, 0, 0, 0, 1028, 1025, 1, 0, 0, 0, 1029, 200, 1, 0, 0, 0, 1030, 1031, 5, 61, 0, 0, 1031, 202, 1, 0, 0, 0, 1032, 1033, 5, 60, 0, 0, 1033, 204, 1, 0, 0, 0, 1034, 1035, 5, 62, 0, 0, 1035, 206, 1, 0, 0, 0, 1036, 1037, 5, 43, 0, 0, 1037, 1038, 5, 61, 0, 0, 1038, 208, 1, 0, 0, 0, 1039, 1040, 5, 45, 0, 0, 1040, 1041, 5, 61, 0, 0, 1041, 210, 1, 0, 0, 0, 1042, 1043, 5, 42, 0, 0, 1043, 1044, 5, 61, 0, 0, 1044, 212, 1, 0, 0, 0, 1045, 1046, 5, 47, 0, 0, 1046, 1047, 5, 61, 0, 0, 1047, 214, 1, 0, 0, 0, 1048, 1049, 5, 37, 0, 0, 1049, 1050, 5, 61, 0, 0, 1050, 216, 1, 0, 0, 0, 1051, 1052, 5, 94, 0, 0, 1052, 1053, 5, 61, 0, 0, 1053, 218, 1, 0, 0, 0, 1054, 1055, 5, 38, 0, 0, 1055, 1056, 5, 61, 0, 0, 1056, 220, 1, 0, 0, 0, 1057, 1058, 5, 124, 0, 0, 1058, 1059, 5, 61, 0, 0, 1059, 222, 1, 0, 0, 0, 1060, 1061, 5, 60, 0, 0, 1061, 1062, 5, 60, 0, 0, 1062, 1063, 5, 61, 0, 0, 1063, 224, 1, 0, 0, 0, 1064, 1065, 5, 62, 0, 0, 1065, 1066, 5, 62, 0, 0, 1066, 1067, 5, 61, 0, 0, 1067, 226, 1, 0, 0, 0, 1068, 1069, 5, 61, 0, 0, 1069, 1070, 5, 61, 0, 0, 1070, 228, 1, 0, 0, 0, 1071, 1072, 5, 33, 0, 0, 1072, 1073, 5, 61, 0, 0, 1073, 230, 1, 0, 0, 0, 1074, 1075, 5, 60, 0, 0, 1075, 1076, 5, 61, 0, 0, 1076, 232, 1, 0, 0, 0, 1077, 1078, 5, 62, 0, 0, 1078, 1079, 5, 61, 0, 0, 1079, 234, 1, 0, 0, 0, 1080, 1081, 5, 38, 0, 0, 1081, 1086, 5, 38, 0, 0, 1082, 1083, 5, 97, 0, 0, 1083, 1084, 5, 110, 0, 0, 1084, 1086, 5, 100, 0, 0, 1085, 1080, 1, 0, 0, 0, 1085, 1082, 1, 0, 0, 0, 1086, 236, 1, 0, 0, 0, 1087, 1088, 5, 124, 0, 0, 1088, 1092, 5, 124, 0, 0, 1089, 1090, 5, 111, 0, 0, 1090, 1092, 5, 114, 0, 0, 1091, 1087, 1, 0, 0, 0, 1091, 1089, 1, 0, 0, 0, 1092, 238, 1, 0, 0, 0, 1093, 1094, 5, 43, 0, 0, 1094, 1095, 5, 43, 0, 0, 1095, 240, 1, 0, 0, 0, 1096, 1097, 5, 45, 0, 0, 1097, 1098, 5, 45, 0, 0, 1098, 242, 1, 0, 0, 0, 1099, 1100, 5, 44, 0, 0, 1100, 244, 1, 0, 0, 0, 1101, 1102, 5, 45, 0, 0, 1102, 1103, 5, 62, 0, 0, 1103, 1104, 5, 42, 0, 0, 1104, 246, 1, 0, 0, 0, 1105, 1106, 5, 45, 0, 0, 1106, 1107, 5, 62, 0, 0, 1107, 248, 1, 0, 0, 0, 1108, 1109, 5, 63, 0, 0, 1109, 250, 1, 0, 0, 0, 1110, 1111, 5, 58, 0, 0, 1111, 252, 1, 0, 0, 0, 1112, 1113, 5, 58, 0, 0, 1113, 1114, 5, 58, 0, 0, 1114, 254, 1, 0, 0, 0, 1115, 1116, 5, 59, 0, 0, 1116, 256, 1, 0, 0, 0, 1117, 1118, 5, 46, 0, 0, 1118, 258, 1, 0, 0, 0, 1119, 1120, 5, 46, 0, 0, 1120, 1121, 5, 42, 0, 0, 1121, 260, 1, 0, 0, 0, 1122, 1123, 5, 46, 0, 0, 1123, 1124, 5, 46, 0, 0, 1124, 1125, 5, 46, 0, 0, 1125, 262, 1, 0, 0, 0, 1126, 1127, 3, 287, 143, 0, 1127, 1128, 3, 287, 143, 0, 1128, 1129, 3, 287, 143, 0, 1129, 1130, 3, 287, 143, 0, 1130, 264, 1, 0, 0, 0, 1131, 1132, 5, 92, 0, 0, 1132, 1133, 5, 117, 0, 0, 1133, 1134, 1, 0, 0, 0, 1134, 1142, 3, 263, 131, 0, 1135, 1136, 5, 92, 0, 0, 1136, 1137, 5, 85, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1139, 3, 263, 131, 0, 1139, 1140, 3, 263, 131, 0, 1140, 1142, 1, 0, 0, 0, 1141, 1131, 1, 0, 0, 0, 1141, 1135, 1, 0, 0, 0, 1142, 266, 1, 0, 0, 0, 1143, 1148, 3, 269, 134, 0, 1144, 1147, 3, 269, 134, 0, 1145, 1147, 3, 273, 136, 0, 1146, 1144, 1, 0, 0, 0, 1146, 1145, 1, 0, 0, 0, 1147, 1150, 1, 0, 0, 0, 1148, 1146, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 268, 1, 0, 0, 0, 1150, 1148, 1, 0, 0, 0, 1151, 1154, 3, 271, 135, 0, 1152, 1154, 3, 265, 132, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1152, 1, 0, 0, 0, 1154, 270, 1, 0, 0, 0, 1155, 1156, 7, 2, 0, 0, 1156, 272, 1, 0, 0, 0, 1157, 1158, 7, 3, 0, 0, 1158, 274, 1, 0, 0, 0, 1159, 1166, 3, 283, 141, 0, 1160, 1162, 5, 39, 0, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 1165, 3, 273, 136, 0, 1164, 1161, 1, 0, 0, 0, 1165, 1168, 1, 0, 0, 0, 1166, 1164, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 276, 1, 0, 0, 0, 1168, 1166, 1, 0, 0, 0, 1169, 1176, 5, 48, 0, 0, 1170, 1172, 5, 39, 0, 0, 1171, 1170, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1175, 3, 285, 142, 0, 1174, 1171, 1, 0, 0, 0, 1175, 1178, 1, 0, 0, 0, 1176, 1174, 1, 0, 0, 0, 1176, 1177, 1, 0, 0, 0, 1177, 278, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1179, 1180, 5, 48, 0, 0, 1180, 1184, 5, 120, 0, 0, 1181, 1182, 5, 48, 0, 0, 1182, 1184, 5, 88, 0, 0, 1183, 1179, 1, 0, 0, 0, 1183, 1181, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1192, 3, 287, 143, 0, 1186, 1188, 5, 39, 0, 0, 1187, 1186, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1189, 1, 0, 0, 0, 1189, 1191, 3, 287, 143, 0, 1190, 1187, 1, 0, 0, 0, 1191, 1194, 1, 0, 0, 0, 1192, 1190, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 280, 1, 0, 0, 0, 1194, 1192, 1, 0, 0, 0, 1195, 1196, 5, 48, 0, 0, 1196, 1200, 5, 98, 0, 0, 1197, 1198, 5, 48, 0, 0, 1198, 1200, 5, 66, 0, 0, 1199, 1195, 1, 0, 0, 0, 1199, 1197, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1208, 3, 289, 144, 0, 1202, 1204, 5, 39, 0, 0, 1203, 1202, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1207, 3, 289, 144, 0, 1206, 1203, 1, 0, 0, 0, 1207, 1210, 1, 0, 0, 0, 1208, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 282, 1, 0, 0, 0, 1210, 1208, 1, 0, 0, 0, 1211, 1212, 7, 4, 0, 0, 1212, 284, 1, 0, 0, 0, 1213, 1214, 7, 5, 0, 0, 1214, 286, 1, 0, 0, 0, 1215, 1216, 7, 6, 0, 0, 1216, 288, 1, 0, 0, 0, 1217, 1218, 7, 7, 0, 0, 1218, 290, 1, 0, 0, 0, 1219, 1221, 3, 293, 146, 0, 1220, 1222, 3, 295, 147, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 1236, 1, 0, 0, 0, 1223, 1225, 3, 293, 146, 0, 1224, 1226, 3, 297, 148, 0, 1225, 1224, 1, 0, 0, 0, 1225, 1226, 1, 0, 0, 0, 1226, 1236, 1, 0, 0, 0, 1227, 1229, 3, 295, 147, 0, 1228, 1230, 3, 293, 146, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1236, 1, 0, 0, 0, 1231, 1233, 3, 297, 148, 0, 1232, 1234, 3, 293, 146, 0, 1233, 1232, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1236, 1, 0, 0, 0, 1235, 1219, 1, 0, 0, 0, 1235, 1223, 1, 0, 0, 0, 1235, 1227, 1, 0, 0, 0, 1235, 1231, 1, 0, 0, 0, 1236, 292, 1, 0, 0, 0, 1237, 1238, 7, 8, 0, 0, 1238, 294, 1, 0, 0, 0, 1239, 1240, 7, 9, 0, 0, 1240, 296, 1, 0, 0, 0, 1241, 1242, 5, 108, 0, 0, 1242, 1246, 5, 108, 0, 0, 1243, 1244, 5, 76, 0, 0, 1244, 1246, 5, 76, 0, 0, 1245, 1241, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1246, 298, 1, 0, 0, 0, 1247, 1251, 8, 10, 0, 0, 1248, 1251, 3, 301, 150, 0, 1249, 1251, 3, 265, 132, 0, 1250, 1247, 1, 0, 0, 0, 1250, 1248, 1, 0, 0, 0, 1250, 1249, 1, 0, 0, 0, 1251, 300, 1, 0, 0, 0, 1252, 1256, 3, 303, 151, 0, 1253, 1256, 3, 305, 152, 0, 1254, 1256, 3, 307, 153, 0, 1255, 1252, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1254, 1, 0, 0, 0, 1256, 302, 1, 0, 0, 0, 1257, 1258, 5, 92, 0, 0, 1258, 1288, 5, 39, 0, 0, 1259, 1260, 5, 92, 0, 0, 1260, 1288, 5, 34, 0, 0, 1261, 1262, 5, 92, 0, 0, 1262, 1288, 5, 63, 0, 0, 1263, 1264, 5, 92, 0, 0, 1264, 1288, 5, 92, 0, 0, 1265, 1266, 5, 92, 0, 0, 1266, 1288, 5, 97, 0, 0, 1267, 1268, 5, 92, 0, 0, 1268, 1288, 5, 98, 0, 0, 1269, 1270, 5, 92, 0, 0, 1270, 1288, 5, 102, 0, 0, 1271, 1272, 5, 92, 0, 0, 1272, 1288, 5, 110, 0, 0, 1273, 1274, 5, 92, 0, 0, 1274, 1288, 5, 114, 0, 0, 1275, 1281, 5, 92, 0, 0, 1276, 1278, 5, 13, 0, 0, 1277, 1279, 5, 10, 0, 0, 1278, 1277, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1282, 1, 0, 0, 0, 1280, 1282, 5, 10, 0, 0, 1281, 1276, 1, 0, 0, 0, 1281, 1280, 1, 0, 0, 0, 1282, 1288, 1, 0, 0, 0, 1283, 1284, 5, 92, 0, 0, 1284, 1288, 5, 116, 0, 0, 1285, 1286, 5, 92, 0, 0, 1286, 1288, 5, 118, 0, 0, 1287, 1257, 1, 0, 0, 0, 1287, 1259, 1, 0, 0, 0, 1287, 1261, 1, 0, 0, 0, 1287, 1263, 1, 0, 0, 0, 1287, 1265, 1, 0, 0, 0, 1287, 1267, 1, 0, 0, 0, 1287, 1269, 1, 0, 0, 0, 1287, 1271, 1, 0, 0, 0, 1287, 1273, 1, 0, 0, 0, 1287, 1275, 1, 0, 0, 0, 1287, 1283, 1, 0, 0, 0, 1287, 1285, 1, 0, 0, 0, 1288, 304, 1, 0, 0, 0, 1289, 1290, 5, 92, 0, 0, 1290, 1301, 3, 285, 142, 0, 1291, 1292, 5, 92, 0, 0, 1292, 1293, 3, 285, 142, 0, 1293, 1294, 3, 285, 142, 0, 1294, 1301, 1, 0, 0, 0, 1295, 1296, 5, 92, 0, 0, 1296, 1297, 3, 285, 142, 0, 1297, 1298, 3, 285, 142, 0, 1298, 1299, 3, 285, 142, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1289, 1, 0, 0, 0, 1300, 1291, 1, 0, 0, 0, 1300, 1295, 1, 0, 0, 0, 1301, 306, 1, 0, 0, 0, 1302, 1303, 5, 92, 0, 0, 1303, 1304, 5, 120, 0, 0, 1304, 1306, 1, 0, 0, 0, 1305, 1307, 3, 287, 143, 0, 1306, 1305, 1, 0, 0, 0, 1307, 1308, 1, 0, 0, 0, 1308, 1306, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 308, 1, 0, 0, 0, 1310, 1312, 3, 315, 157, 0, 1311, 1310, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1314, 5, 46, 0, 0, 1314, 1319, 3, 315, 157, 0, 1315, 1316, 3, 315, 157, 0, 1316, 1317, 5, 46, 0, 0, 1317, 1319, 1, 0, 0, 0, 1318, 1311, 1, 0, 0, 0, 1318, 1315, 1, 0, 0, 0, 1319, 310, 1, 0, 0, 0, 1320, 1322, 5, 101, 0, 0, 1321, 1323, 3, 313, 156, 0, 1322, 1321, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1331, 3, 315, 157, 0, 1325, 1327, 5, 69, 0, 0, 1326, 1328, 3, 313, 156, 0, 1327, 1326, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1331, 3, 315, 157, 0, 1330, 1320, 1, 0, 0, 0, 1330, 1325, 1, 0, 0, 0, 1331, 312, 1, 0, 0, 0, 1332, 1333, 7, 11, 0, 0, 1333, 314, 1, 0, 0, 0, 1334, 1341, 3, 273, 136, 0, 1335, 1337, 5, 39, 0, 0, 1336, 1335, 1, 0, 0, 0, 1336, 1337, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1340, 3, 273, 136, 0, 1339, 1336, 1, 0, 0, 0, 1340, 1343, 1, 0, 0, 0, 1341, 1339, 1, 0, 0, 0, 1341, 1342, 1, 0, 0, 0, 1342, 316, 1, 0, 0, 0, 1343, 1341, 1, 0, 0, 0, 1344, 1345, 7, 12, 0, 0, 1345, 318, 1, 0, 0, 0, 1346, 1347, 5, 117, 0, 0, 1347, 1350, 5, 56, 0, 0, 1348, 1350, 7, 0, 0, 0, 1349, 1346, 1, 0, 0, 0, 1349, 1348, 1, 0, 0, 0, 1350, 320, 1, 0, 0, 0, 1351, 1355, 8, 13, 0, 0, 1352, 1355, 3, 301, 150, 0, 1353, 1355, 3, 265, 132, 0, 1354, 1351, 1, 0, 0, 0, 1354, 1352, 1, 0, 0, 0, 1354, 1353, 1, 0, 0, 0, 1355, 322, 1, 0, 0, 0, 1356, 1357, 5, 82, 0, 0, 1357, 1358, 5, 34, 0, 0, 1358, 1364, 1, 0, 0, 0, 1359, 1360, 5, 92, 0, 0, 1360, 1363, 7, 14, 0, 0, 1361, 1363, 8, 15, 0, 0, 1362, 1359, 1, 0, 0, 0, 1362, 1361, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1365, 1367, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1371, 5, 40, 0, 0, 1368, 1370, 8, 16, 0, 0, 1369, 1368, 1, 0, 0, 0, 1370, 1373, 1, 0, 0, 0, 1371, 1372, 1, 0, 0, 0, 1371, 1369, 1, 0, 0, 0, 1372, 1374, 1, 0, 0, 0, 1373, 1371, 1, 0, 0, 0, 1374, 1380, 5, 41, 0, 0, 1375, 1376, 5, 92, 0, 0, 1376, 1379, 7, 14, 0, 0, 1377, 1379, 8, 17, 0, 0, 1378, 1375, 1, 0, 0, 0, 1378, 1377, 1, 0, 0, 0, 1379, 1382, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1380, 1378, 1, 0, 0, 0, 1381, 1383, 1, 0, 0, 0, 1382, 1380, 1, 0, 0, 0, 1383, 1384, 5, 34, 0, 0, 1384, 324, 1, 0, 0, 0, 1385, 1386, 3, 275, 137, 0, 1386, 1387, 3, 333, 166, 0, 1387, 1398, 1, 0, 0, 0, 1388, 1389, 3, 277, 138, 0, 1389, 1390, 3, 333, 166, 0, 1390, 1398, 1, 0, 0, 0, 1391, 1392, 3, 279, 139, 0, 1392, 1393, 3, 333, 166, 0, 1393, 1398, 1, 0, 0, 0, 1394, 1395, 3, 281, 140, 0, 1395, 1396, 3, 333, 166, 0, 1396, 1398, 1, 0, 0, 0, 1397, 1385, 1, 0, 0, 0, 1397, 1388, 1, 0, 0, 0, 1397, 1391, 1, 0, 0, 0, 1397, 1394, 1, 0, 0, 0, 1398, 326, 1, 0, 0, 0, 1399, 1401, 3, 309, 154, 0, 1400, 1402, 3, 311, 155, 0, 1401, 1400, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1403, 1, 0, 0, 0, 1403, 1404, 3, 333, 166, 0, 1404, 1410, 1, 0, 0, 0, 1405, 1406, 3, 315, 157, 0, 1406, 1407, 3, 311, 155, 0, 1407, 1408, 3, 333, 166, 0, 1408, 1410, 1, 0, 0, 0, 1409, 1399, 1, 0, 0, 0, 1409, 1405, 1, 0, 0, 0, 1410, 328, 1, 0, 0, 0, 1411, 1412, 3, 7, 3, 0, 1412, 1413, 3, 333, 166, 0, 1413, 330, 1, 0, 0, 0, 1414, 1415, 3, 3, 1, 0, 1415, 1416, 3, 333, 166, 0, 1416, 332, 1, 0, 0, 0, 1417, 1418, 3, 267, 133, 0, 1418, 334, 1, 0, 0, 0, 1419, 1421, 7, 18, 0, 0, 1420, 1419, 1, 0, 0, 0, 1421, 1422, 1, 0, 0, 0, 1422, 1420, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1425, 6, 167, 1, 0, 1425, 336, 1, 0, 0, 0, 1426, 1428, 5, 13, 0, 0, 1427, 1429, 5, 10, 0, 0, 1428, 1427, 1, 0, 0, 0, 1428, 1429, 1, 0, 0, 0, 1429, 1432, 1, 0, 0, 0, 1430, 1432, 5, 10, 0, 0, 1431, 1426, 1, 0, 0, 0, 1431, 1430, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 1434, 6, 168, 1, 0, 1434, 338, 1, 0, 0, 0, 1435, 1436, 5, 47, 0, 0, 1436, 1437, 5, 42, 0, 0, 1437, 1441, 1, 0, 0, 0, 1438, 1440, 9, 0, 0, 0, 1439, 1438, 1, 0, 0, 0, 1440, 1443, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1441, 1439, 1, 0, 0, 0, 1442, 1444, 1, 0, 0, 0, 1443, 1441, 1, 0, 0, 0, 1444, 1445, 5, 42, 0, 0, 1445, 1446, 5, 47, 0, 0, 1446, 1447, 1, 0, 0, 0, 1447, 1448, 6, 169, 1, 0, 1448, 340, 1, 0, 0, 0, 1449, 1450, 5, 47, 0, 0, 1450, 1451, 5, 47, 0, 0, 1451, 1455, 1, 0, 0, 0, 1452, 1454, 8, 19, 0, 0, 1453, 1452, 1, 0, 0, 0, 1454, 1457, 1, 0, 0, 0, 1455, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1458, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1458, 1459, 6, 170, 1, 0, 1459, 342, 1, 0, 0, 0, 74, 0, 345, 349, 353, 357, 359, 362, 368, 374, 377, 382, 384, 387, 394, 398, 402, 410, 416, 421, 426, 431, 439, 1028, 1085, 1091, 1141, 1146, 1148, 1153, 1161, 1166, 1171, 1176, 1183, 1187, 1192, 1199, 1203, 1208, 1221, 1225, 1229, 1233, 1235, 1245, 1250, 1255, 1278, 1281, 1287, 1300, 1308, 1311, 1318, 1322, 1327, 1330, 1336, 1341, 1349, 1354, 1362, 1364, 1371, 1378, 1380, 1397, 1401, 1409, 1422, 1428, 1431, 1441, 1455, 2, 0, 1, 0, 6, 0, 0] \ No newline at end of file diff --git a/csim/cpp/CPP14Lexer.py b/csim/cpp/CPP14Lexer.py new file mode 100644 index 0000000..bd90016 --- /dev/null +++ b/csim/cpp/CPP14Lexer.py @@ -0,0 +1,830 @@ +# Generated from CPP14Lexer.g4 by ANTLR 4.13.2 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,145,1460,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,1,0,1,0,3,0,346,8,0,1,0,1,0,3,0,350,8,0,1,0,1, + 0,3,0,354,8,0,1,0,1,0,3,0,358,8,0,3,0,360,8,0,1,1,3,1,363,8,1,1, + 1,1,1,4,1,367,8,1,11,1,12,1,368,1,1,1,1,1,2,1,2,3,2,375,8,2,1,2, + 3,2,378,8,2,1,2,1,2,1,2,3,2,383,8,2,3,2,385,8,2,1,3,3,3,388,8,3, + 1,3,1,3,1,3,5,3,393,8,3,10,3,12,3,396,9,3,1,3,3,3,399,8,3,1,4,1, + 4,3,4,403,8,4,1,5,1,5,1,6,1,6,1,6,1,6,3,6,411,8,6,1,7,1,7,5,7,415, + 8,7,10,7,12,7,418,9,7,1,7,1,7,3,7,422,8,7,1,7,4,7,425,8,7,11,7,12, + 7,426,1,7,4,7,430,8,7,11,7,12,7,431,1,7,1,7,1,8,1,8,5,8,438,8,8, + 10,8,12,8,441,9,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1, + 12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1, + 14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1, + 17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1, + 20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1, + 26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,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,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,32,1, + 32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, + 34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1, + 35,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, + 38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1, + 40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,43,1, + 43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1, + 45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,49,1,49,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1, + 52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1, + 53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1, + 55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1, + 56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 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,61,1,61,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,63,1,63,1,63,1, + 63,1,63,1,64,1,64,1,64,1,64,1,64,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,65,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,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, + 69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1, + 71,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, + 74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1, + 75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1, + 77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1, + 79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1, + 81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1, + 82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,85,1,85,1,86,1, + 86,1,87,1,87,1,88,1,88,1,89,1,89,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,97,1,97,1,98,1,98,1,99,1, + 99,1,99,1,99,3,99,1029,8,99,1,100,1,100,1,101,1,101,1,102,1,102, + 1,103,1,103,1,103,1,104,1,104,1,104,1,105,1,105,1,105,1,106,1,106, + 1,106,1,107,1,107,1,107,1,108,1,108,1,108,1,109,1,109,1,109,1,110, + 1,110,1,110,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,113, + 1,113,1,113,1,114,1,114,1,114,1,115,1,115,1,115,1,116,1,116,1,116, + 1,117,1,117,1,117,1,117,1,117,3,117,1086,8,117,1,118,1,118,1,118, + 1,118,3,118,1092,8,118,1,119,1,119,1,119,1,120,1,120,1,120,1,121, + 1,121,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,124,1,124,1,125, + 1,125,1,126,1,126,1,126,1,127,1,127,1,128,1,128,1,129,1,129,1,129, + 1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,132,1,132, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,3,132,1142,8,132, + 1,133,1,133,1,133,5,133,1147,8,133,10,133,12,133,1150,9,133,1,134, + 1,134,3,134,1154,8,134,1,135,1,135,1,136,1,136,1,137,1,137,3,137, + 1162,8,137,1,137,5,137,1165,8,137,10,137,12,137,1168,9,137,1,138, + 1,138,3,138,1172,8,138,1,138,5,138,1175,8,138,10,138,12,138,1178, + 9,138,1,139,1,139,1,139,1,139,3,139,1184,8,139,1,139,1,139,3,139, + 1188,8,139,1,139,5,139,1191,8,139,10,139,12,139,1194,9,139,1,140, + 1,140,1,140,1,140,3,140,1200,8,140,1,140,1,140,3,140,1204,8,140, + 1,140,5,140,1207,8,140,10,140,12,140,1210,9,140,1,141,1,141,1,142, + 1,142,1,143,1,143,1,144,1,144,1,145,1,145,3,145,1222,8,145,1,145, + 1,145,3,145,1226,8,145,1,145,1,145,3,145,1230,8,145,1,145,1,145, + 3,145,1234,8,145,3,145,1236,8,145,1,146,1,146,1,147,1,147,1,148, + 1,148,1,148,1,148,3,148,1246,8,148,1,149,1,149,1,149,3,149,1251, + 8,149,1,150,1,150,1,150,3,150,1256,8,150,1,151,1,151,1,151,1,151, + 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, + 1,151,1,151,1,151,1,151,1,151,1,151,3,151,1279,8,151,1,151,3,151, + 1282,8,151,1,151,1,151,1,151,1,151,3,151,1288,8,151,1,152,1,152, + 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,3,152,1301, + 8,152,1,153,1,153,1,153,1,153,4,153,1307,8,153,11,153,12,153,1308, + 1,154,3,154,1312,8,154,1,154,1,154,1,154,1,154,1,154,3,154,1319, + 8,154,1,155,1,155,3,155,1323,8,155,1,155,1,155,1,155,3,155,1328, + 8,155,1,155,3,155,1331,8,155,1,156,1,156,1,157,1,157,3,157,1337, + 8,157,1,157,5,157,1340,8,157,10,157,12,157,1343,9,157,1,158,1,158, + 1,159,1,159,1,159,3,159,1350,8,159,1,160,1,160,1,160,3,160,1355, + 8,160,1,161,1,161,1,161,1,161,1,161,1,161,5,161,1363,8,161,10,161, + 12,161,1366,9,161,1,161,1,161,5,161,1370,8,161,10,161,12,161,1373, + 9,161,1,161,1,161,1,161,1,161,5,161,1379,8,161,10,161,12,161,1382, + 9,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,3,162,1398,8,162,1,163,1,163,3,163,1402, + 8,163,1,163,1,163,1,163,1,163,1,163,1,163,3,163,1410,8,163,1,164, + 1,164,1,164,1,165,1,165,1,165,1,166,1,166,1,167,4,167,1421,8,167, + 11,167,12,167,1422,1,167,1,167,1,168,1,168,3,168,1429,8,168,1,168, + 3,168,1432,8,168,1,168,1,168,1,169,1,169,1,169,1,169,5,169,1440, + 8,169,10,169,12,169,1443,9,169,1,169,1,169,1,169,1,169,1,169,1,170, + 1,170,1,170,1,170,5,170,1454,8,170,10,170,12,170,1457,9,170,1,170, + 1,170,5,416,1364,1371,1380,1441,0,171,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,0,265,0,267,132,269,0,271,0,273,0,275,133,277,134,279,135, + 281,136,283,0,285,0,287,0,289,0,291,137,293,0,295,0,297,0,299,0, + 301,0,303,0,305,0,307,0,309,0,311,0,313,0,315,0,317,0,319,0,321, + 0,323,0,325,138,327,139,329,140,331,141,333,0,335,142,337,143,339, + 144,341,145,1,0,20,3,0,76,76,85,85,117,117,1,0,10,10,3,0,65,90,95, + 95,97,122,1,0,48,57,1,0,49,57,1,0,48,55,3,0,48,57,65,70,97,102,1, + 0,48,49,2,0,85,85,117,117,2,0,76,76,108,108,4,0,10,10,13,13,39,39, + 92,92,2,0,43,43,45,45,4,0,70,70,76,76,102,102,108,108,4,0,10,10, + 13,13,34,34,92,92,2,0,34,34,40,41,4,0,10,10,13,13,32,32,40,40,1, + 0,41,41,4,0,10,10,13,13,32,32,34,34,2,0,9,9,32,32,2,0,10,10,13,13, + 1528,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,267,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,291,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,335,1,0,0,0, + 0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,1,359,1,0,0,0,3,362,1, + 0,0,0,5,384,1,0,0,0,7,387,1,0,0,0,9,402,1,0,0,0,11,404,1,0,0,0,13, + 410,1,0,0,0,15,412,1,0,0,0,17,435,1,0,0,0,19,444,1,0,0,0,21,452, + 1,0,0,0,23,460,1,0,0,0,25,464,1,0,0,0,27,469,1,0,0,0,29,474,1,0, + 0,0,31,480,1,0,0,0,33,485,1,0,0,0,35,491,1,0,0,0,37,496,1,0,0,0, + 39,505,1,0,0,0,41,514,1,0,0,0,43,520,1,0,0,0,45,526,1,0,0,0,47,536, + 1,0,0,0,49,547,1,0,0,0,51,556,1,0,0,0,53,565,1,0,0,0,55,573,1,0, + 0,0,57,580,1,0,0,0,59,583,1,0,0,0,61,590,1,0,0,0,63,603,1,0,0,0, + 65,608,1,0,0,0,67,613,1,0,0,0,69,622,1,0,0,0,71,629,1,0,0,0,73,636, + 1,0,0,0,75,642,1,0,0,0,77,648,1,0,0,0,79,654,1,0,0,0,81,658,1,0, + 0,0,83,665,1,0,0,0,85,670,1,0,0,0,87,673,1,0,0,0,89,680,1,0,0,0, + 91,684,1,0,0,0,93,689,1,0,0,0,95,697,1,0,0,0,97,707,1,0,0,0,99,711, + 1,0,0,0,101,720,1,0,0,0,103,728,1,0,0,0,105,737,1,0,0,0,107,746, + 1,0,0,0,109,754,1,0,0,0,111,764,1,0,0,0,113,771,1,0,0,0,115,780, + 1,0,0,0,117,797,1,0,0,0,119,804,1,0,0,0,121,810,1,0,0,0,123,817, + 1,0,0,0,125,824,1,0,0,0,127,831,1,0,0,0,129,845,1,0,0,0,131,857, + 1,0,0,0,133,864,1,0,0,0,135,871,1,0,0,0,137,880,1,0,0,0,139,885, + 1,0,0,0,141,898,1,0,0,0,143,904,1,0,0,0,145,909,1,0,0,0,147,913, + 1,0,0,0,149,921,1,0,0,0,151,928,1,0,0,0,153,937,1,0,0,0,155,943, + 1,0,0,0,157,952,1,0,0,0,159,958,1,0,0,0,161,966,1,0,0,0,163,971, + 1,0,0,0,165,980,1,0,0,0,167,988,1,0,0,0,169,994,1,0,0,0,171,996, + 1,0,0,0,173,998,1,0,0,0,175,1000,1,0,0,0,177,1002,1,0,0,0,179,1004, + 1,0,0,0,181,1006,1,0,0,0,183,1008,1,0,0,0,185,1010,1,0,0,0,187,1012, + 1,0,0,0,189,1014,1,0,0,0,191,1016,1,0,0,0,193,1018,1,0,0,0,195,1020, + 1,0,0,0,197,1022,1,0,0,0,199,1028,1,0,0,0,201,1030,1,0,0,0,203,1032, + 1,0,0,0,205,1034,1,0,0,0,207,1036,1,0,0,0,209,1039,1,0,0,0,211,1042, + 1,0,0,0,213,1045,1,0,0,0,215,1048,1,0,0,0,217,1051,1,0,0,0,219,1054, + 1,0,0,0,221,1057,1,0,0,0,223,1060,1,0,0,0,225,1064,1,0,0,0,227,1068, + 1,0,0,0,229,1071,1,0,0,0,231,1074,1,0,0,0,233,1077,1,0,0,0,235,1085, + 1,0,0,0,237,1091,1,0,0,0,239,1093,1,0,0,0,241,1096,1,0,0,0,243,1099, + 1,0,0,0,245,1101,1,0,0,0,247,1105,1,0,0,0,249,1108,1,0,0,0,251,1110, + 1,0,0,0,253,1112,1,0,0,0,255,1115,1,0,0,0,257,1117,1,0,0,0,259,1119, + 1,0,0,0,261,1122,1,0,0,0,263,1126,1,0,0,0,265,1141,1,0,0,0,267,1143, + 1,0,0,0,269,1153,1,0,0,0,271,1155,1,0,0,0,273,1157,1,0,0,0,275,1159, + 1,0,0,0,277,1169,1,0,0,0,279,1183,1,0,0,0,281,1199,1,0,0,0,283,1211, + 1,0,0,0,285,1213,1,0,0,0,287,1215,1,0,0,0,289,1217,1,0,0,0,291,1235, + 1,0,0,0,293,1237,1,0,0,0,295,1239,1,0,0,0,297,1245,1,0,0,0,299,1250, + 1,0,0,0,301,1255,1,0,0,0,303,1287,1,0,0,0,305,1300,1,0,0,0,307,1302, + 1,0,0,0,309,1318,1,0,0,0,311,1330,1,0,0,0,313,1332,1,0,0,0,315,1334, + 1,0,0,0,317,1344,1,0,0,0,319,1349,1,0,0,0,321,1354,1,0,0,0,323,1356, + 1,0,0,0,325,1397,1,0,0,0,327,1409,1,0,0,0,329,1411,1,0,0,0,331,1414, + 1,0,0,0,333,1417,1,0,0,0,335,1420,1,0,0,0,337,1431,1,0,0,0,339,1435, + 1,0,0,0,341,1449,1,0,0,0,343,345,3,275,137,0,344,346,3,291,145,0, + 345,344,1,0,0,0,345,346,1,0,0,0,346,360,1,0,0,0,347,349,3,277,138, + 0,348,350,3,291,145,0,349,348,1,0,0,0,349,350,1,0,0,0,350,360,1, + 0,0,0,351,353,3,279,139,0,352,354,3,291,145,0,353,352,1,0,0,0,353, + 354,1,0,0,0,354,360,1,0,0,0,355,357,3,281,140,0,356,358,3,291,145, + 0,357,356,1,0,0,0,357,358,1,0,0,0,358,360,1,0,0,0,359,343,1,0,0, + 0,359,347,1,0,0,0,359,351,1,0,0,0,359,355,1,0,0,0,360,2,1,0,0,0, + 361,363,7,0,0,0,362,361,1,0,0,0,362,363,1,0,0,0,363,364,1,0,0,0, + 364,366,5,39,0,0,365,367,3,299,149,0,366,365,1,0,0,0,367,368,1,0, + 0,0,368,366,1,0,0,0,368,369,1,0,0,0,369,370,1,0,0,0,370,371,5,39, + 0,0,371,4,1,0,0,0,372,374,3,309,154,0,373,375,3,311,155,0,374,373, + 1,0,0,0,374,375,1,0,0,0,375,377,1,0,0,0,376,378,3,317,158,0,377, + 376,1,0,0,0,377,378,1,0,0,0,378,385,1,0,0,0,379,380,3,315,157,0, + 380,382,3,311,155,0,381,383,3,317,158,0,382,381,1,0,0,0,382,383, + 1,0,0,0,383,385,1,0,0,0,384,372,1,0,0,0,384,379,1,0,0,0,385,6,1, + 0,0,0,386,388,3,319,159,0,387,386,1,0,0,0,387,388,1,0,0,0,388,398, + 1,0,0,0,389,399,3,323,161,0,390,394,5,34,0,0,391,393,3,321,160,0, + 392,391,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0, + 395,397,1,0,0,0,396,394,1,0,0,0,397,399,5,34,0,0,398,389,1,0,0,0, + 398,390,1,0,0,0,399,8,1,0,0,0,400,403,3,73,36,0,401,403,3,143,71, + 0,402,400,1,0,0,0,402,401,1,0,0,0,403,10,1,0,0,0,404,405,3,101,50, + 0,405,12,1,0,0,0,406,411,3,325,162,0,407,411,3,327,163,0,408,411, + 3,329,164,0,409,411,3,331,165,0,410,406,1,0,0,0,410,407,1,0,0,0, + 410,408,1,0,0,0,410,409,1,0,0,0,411,14,1,0,0,0,412,424,5,35,0,0, + 413,415,8,1,0,0,414,413,1,0,0,0,415,418,1,0,0,0,416,417,1,0,0,0, + 416,414,1,0,0,0,417,419,1,0,0,0,418,416,1,0,0,0,419,421,5,92,0,0, + 420,422,5,13,0,0,421,420,1,0,0,0,421,422,1,0,0,0,422,423,1,0,0,0, + 423,425,5,10,0,0,424,416,1,0,0,0,425,426,1,0,0,0,426,424,1,0,0,0, + 426,427,1,0,0,0,427,429,1,0,0,0,428,430,8,1,0,0,429,428,1,0,0,0, + 430,431,1,0,0,0,431,429,1,0,0,0,431,432,1,0,0,0,432,433,1,0,0,0, + 433,434,6,7,0,0,434,16,1,0,0,0,435,439,5,35,0,0,436,438,8,1,0,0, + 437,436,1,0,0,0,438,441,1,0,0,0,439,437,1,0,0,0,439,440,1,0,0,0, + 440,442,1,0,0,0,441,439,1,0,0,0,442,443,6,8,0,0,443,18,1,0,0,0,444, + 445,5,97,0,0,445,446,5,108,0,0,446,447,5,105,0,0,447,448,5,103,0, + 0,448,449,5,110,0,0,449,450,5,97,0,0,450,451,5,115,0,0,451,20,1, + 0,0,0,452,453,5,97,0,0,453,454,5,108,0,0,454,455,5,105,0,0,455,456, + 5,103,0,0,456,457,5,110,0,0,457,458,5,111,0,0,458,459,5,102,0,0, + 459,22,1,0,0,0,460,461,5,97,0,0,461,462,5,115,0,0,462,463,5,109, + 0,0,463,24,1,0,0,0,464,465,5,97,0,0,465,466,5,117,0,0,466,467,5, + 116,0,0,467,468,5,111,0,0,468,26,1,0,0,0,469,470,5,98,0,0,470,471, + 5,111,0,0,471,472,5,111,0,0,472,473,5,108,0,0,473,28,1,0,0,0,474, + 475,5,98,0,0,475,476,5,114,0,0,476,477,5,101,0,0,477,478,5,97,0, + 0,478,479,5,107,0,0,479,30,1,0,0,0,480,481,5,99,0,0,481,482,5,97, + 0,0,482,483,5,115,0,0,483,484,5,101,0,0,484,32,1,0,0,0,485,486,5, + 99,0,0,486,487,5,97,0,0,487,488,5,116,0,0,488,489,5,99,0,0,489,490, + 5,104,0,0,490,34,1,0,0,0,491,492,5,99,0,0,492,493,5,104,0,0,493, + 494,5,97,0,0,494,495,5,114,0,0,495,36,1,0,0,0,496,497,5,99,0,0,497, + 498,5,104,0,0,498,499,5,97,0,0,499,500,5,114,0,0,500,501,5,49,0, + 0,501,502,5,54,0,0,502,503,5,95,0,0,503,504,5,116,0,0,504,38,1,0, + 0,0,505,506,5,99,0,0,506,507,5,104,0,0,507,508,5,97,0,0,508,509, + 5,114,0,0,509,510,5,51,0,0,510,511,5,50,0,0,511,512,5,95,0,0,512, + 513,5,116,0,0,513,40,1,0,0,0,514,515,5,99,0,0,515,516,5,108,0,0, + 516,517,5,97,0,0,517,518,5,115,0,0,518,519,5,115,0,0,519,42,1,0, + 0,0,520,521,5,99,0,0,521,522,5,111,0,0,522,523,5,110,0,0,523,524, + 5,115,0,0,524,525,5,116,0,0,525,44,1,0,0,0,526,527,5,99,0,0,527, + 528,5,111,0,0,528,529,5,110,0,0,529,530,5,115,0,0,530,531,5,116, + 0,0,531,532,5,101,0,0,532,533,5,120,0,0,533,534,5,112,0,0,534,535, + 5,114,0,0,535,46,1,0,0,0,536,537,5,99,0,0,537,538,5,111,0,0,538, + 539,5,110,0,0,539,540,5,115,0,0,540,541,5,116,0,0,541,542,5,95,0, + 0,542,543,5,99,0,0,543,544,5,97,0,0,544,545,5,115,0,0,545,546,5, + 116,0,0,546,48,1,0,0,0,547,548,5,99,0,0,548,549,5,111,0,0,549,550, + 5,110,0,0,550,551,5,116,0,0,551,552,5,105,0,0,552,553,5,110,0,0, + 553,554,5,117,0,0,554,555,5,101,0,0,555,50,1,0,0,0,556,557,5,100, + 0,0,557,558,5,101,0,0,558,559,5,99,0,0,559,560,5,108,0,0,560,561, + 5,116,0,0,561,562,5,121,0,0,562,563,5,112,0,0,563,564,5,101,0,0, + 564,52,1,0,0,0,565,566,5,100,0,0,566,567,5,101,0,0,567,568,5,102, + 0,0,568,569,5,97,0,0,569,570,5,117,0,0,570,571,5,108,0,0,571,572, + 5,116,0,0,572,54,1,0,0,0,573,574,5,100,0,0,574,575,5,101,0,0,575, + 576,5,108,0,0,576,577,5,101,0,0,577,578,5,116,0,0,578,579,5,101, + 0,0,579,56,1,0,0,0,580,581,5,100,0,0,581,582,5,111,0,0,582,58,1, + 0,0,0,583,584,5,100,0,0,584,585,5,111,0,0,585,586,5,117,0,0,586, + 587,5,98,0,0,587,588,5,108,0,0,588,589,5,101,0,0,589,60,1,0,0,0, + 590,591,5,100,0,0,591,592,5,121,0,0,592,593,5,110,0,0,593,594,5, + 97,0,0,594,595,5,109,0,0,595,596,5,105,0,0,596,597,5,99,0,0,597, + 598,5,95,0,0,598,599,5,99,0,0,599,600,5,97,0,0,600,601,5,115,0,0, + 601,602,5,116,0,0,602,62,1,0,0,0,603,604,5,101,0,0,604,605,5,108, + 0,0,605,606,5,115,0,0,606,607,5,101,0,0,607,64,1,0,0,0,608,609,5, + 101,0,0,609,610,5,110,0,0,610,611,5,117,0,0,611,612,5,109,0,0,612, + 66,1,0,0,0,613,614,5,101,0,0,614,615,5,120,0,0,615,616,5,112,0,0, + 616,617,5,108,0,0,617,618,5,105,0,0,618,619,5,99,0,0,619,620,5,105, + 0,0,620,621,5,116,0,0,621,68,1,0,0,0,622,623,5,101,0,0,623,624,5, + 120,0,0,624,625,5,112,0,0,625,626,5,111,0,0,626,627,5,114,0,0,627, + 628,5,116,0,0,628,70,1,0,0,0,629,630,5,101,0,0,630,631,5,120,0,0, + 631,632,5,116,0,0,632,633,5,101,0,0,633,634,5,114,0,0,634,635,5, + 110,0,0,635,72,1,0,0,0,636,637,5,102,0,0,637,638,5,97,0,0,638,639, + 5,108,0,0,639,640,5,115,0,0,640,641,5,101,0,0,641,74,1,0,0,0,642, + 643,5,102,0,0,643,644,5,105,0,0,644,645,5,110,0,0,645,646,5,97,0, + 0,646,647,5,108,0,0,647,76,1,0,0,0,648,649,5,102,0,0,649,650,5,108, + 0,0,650,651,5,111,0,0,651,652,5,97,0,0,652,653,5,116,0,0,653,78, + 1,0,0,0,654,655,5,102,0,0,655,656,5,111,0,0,656,657,5,114,0,0,657, + 80,1,0,0,0,658,659,5,102,0,0,659,660,5,114,0,0,660,661,5,105,0,0, + 661,662,5,101,0,0,662,663,5,110,0,0,663,664,5,100,0,0,664,82,1,0, + 0,0,665,666,5,103,0,0,666,667,5,111,0,0,667,668,5,116,0,0,668,669, + 5,111,0,0,669,84,1,0,0,0,670,671,5,105,0,0,671,672,5,102,0,0,672, + 86,1,0,0,0,673,674,5,105,0,0,674,675,5,110,0,0,675,676,5,108,0,0, + 676,677,5,105,0,0,677,678,5,110,0,0,678,679,5,101,0,0,679,88,1,0, + 0,0,680,681,5,105,0,0,681,682,5,110,0,0,682,683,5,116,0,0,683,90, + 1,0,0,0,684,685,5,108,0,0,685,686,5,111,0,0,686,687,5,110,0,0,687, + 688,5,103,0,0,688,92,1,0,0,0,689,690,5,109,0,0,690,691,5,117,0,0, + 691,692,5,116,0,0,692,693,5,97,0,0,693,694,5,98,0,0,694,695,5,108, + 0,0,695,696,5,101,0,0,696,94,1,0,0,0,697,698,5,110,0,0,698,699,5, + 97,0,0,699,700,5,109,0,0,700,701,5,101,0,0,701,702,5,115,0,0,702, + 703,5,112,0,0,703,704,5,97,0,0,704,705,5,99,0,0,705,706,5,101,0, + 0,706,96,1,0,0,0,707,708,5,110,0,0,708,709,5,101,0,0,709,710,5,119, + 0,0,710,98,1,0,0,0,711,712,5,110,0,0,712,713,5,111,0,0,713,714,5, + 101,0,0,714,715,5,120,0,0,715,716,5,99,0,0,716,717,5,101,0,0,717, + 718,5,112,0,0,718,719,5,116,0,0,719,100,1,0,0,0,720,721,5,110,0, + 0,721,722,5,117,0,0,722,723,5,108,0,0,723,724,5,108,0,0,724,725, + 5,112,0,0,725,726,5,116,0,0,726,727,5,114,0,0,727,102,1,0,0,0,728, + 729,5,111,0,0,729,730,5,112,0,0,730,731,5,101,0,0,731,732,5,114, + 0,0,732,733,5,97,0,0,733,734,5,116,0,0,734,735,5,111,0,0,735,736, + 5,114,0,0,736,104,1,0,0,0,737,738,5,111,0,0,738,739,5,118,0,0,739, + 740,5,101,0,0,740,741,5,114,0,0,741,742,5,114,0,0,742,743,5,105, + 0,0,743,744,5,100,0,0,744,745,5,101,0,0,745,106,1,0,0,0,746,747, + 5,112,0,0,747,748,5,114,0,0,748,749,5,105,0,0,749,750,5,118,0,0, + 750,751,5,97,0,0,751,752,5,116,0,0,752,753,5,101,0,0,753,108,1,0, + 0,0,754,755,5,112,0,0,755,756,5,114,0,0,756,757,5,111,0,0,757,758, + 5,116,0,0,758,759,5,101,0,0,759,760,5,99,0,0,760,761,5,116,0,0,761, + 762,5,101,0,0,762,763,5,100,0,0,763,110,1,0,0,0,764,765,5,112,0, + 0,765,766,5,117,0,0,766,767,5,98,0,0,767,768,5,108,0,0,768,769,5, + 105,0,0,769,770,5,99,0,0,770,112,1,0,0,0,771,772,5,114,0,0,772,773, + 5,101,0,0,773,774,5,103,0,0,774,775,5,105,0,0,775,776,5,115,0,0, + 776,777,5,116,0,0,777,778,5,101,0,0,778,779,5,114,0,0,779,114,1, + 0,0,0,780,781,5,114,0,0,781,782,5,101,0,0,782,783,5,105,0,0,783, + 784,5,110,0,0,784,785,5,116,0,0,785,786,5,101,0,0,786,787,5,114, + 0,0,787,788,5,112,0,0,788,789,5,114,0,0,789,790,5,101,0,0,790,791, + 5,116,0,0,791,792,5,95,0,0,792,793,5,99,0,0,793,794,5,97,0,0,794, + 795,5,115,0,0,795,796,5,116,0,0,796,116,1,0,0,0,797,798,5,114,0, + 0,798,799,5,101,0,0,799,800,5,116,0,0,800,801,5,117,0,0,801,802, + 5,114,0,0,802,803,5,110,0,0,803,118,1,0,0,0,804,805,5,115,0,0,805, + 806,5,104,0,0,806,807,5,111,0,0,807,808,5,114,0,0,808,809,5,116, + 0,0,809,120,1,0,0,0,810,811,5,115,0,0,811,812,5,105,0,0,812,813, + 5,103,0,0,813,814,5,110,0,0,814,815,5,101,0,0,815,816,5,100,0,0, + 816,122,1,0,0,0,817,818,5,115,0,0,818,819,5,105,0,0,819,820,5,122, + 0,0,820,821,5,101,0,0,821,822,5,111,0,0,822,823,5,102,0,0,823,124, + 1,0,0,0,824,825,5,115,0,0,825,826,5,116,0,0,826,827,5,97,0,0,827, + 828,5,116,0,0,828,829,5,105,0,0,829,830,5,99,0,0,830,126,1,0,0,0, + 831,832,5,115,0,0,832,833,5,116,0,0,833,834,5,97,0,0,834,835,5,116, + 0,0,835,836,5,105,0,0,836,837,5,99,0,0,837,838,5,95,0,0,838,839, + 5,97,0,0,839,840,5,115,0,0,840,841,5,115,0,0,841,842,5,101,0,0,842, + 843,5,114,0,0,843,844,5,116,0,0,844,128,1,0,0,0,845,846,5,115,0, + 0,846,847,5,116,0,0,847,848,5,97,0,0,848,849,5,116,0,0,849,850,5, + 105,0,0,850,851,5,99,0,0,851,852,5,95,0,0,852,853,5,99,0,0,853,854, + 5,97,0,0,854,855,5,115,0,0,855,856,5,116,0,0,856,130,1,0,0,0,857, + 858,5,115,0,0,858,859,5,116,0,0,859,860,5,114,0,0,860,861,5,117, + 0,0,861,862,5,99,0,0,862,863,5,116,0,0,863,132,1,0,0,0,864,865,5, + 115,0,0,865,866,5,119,0,0,866,867,5,105,0,0,867,868,5,116,0,0,868, + 869,5,99,0,0,869,870,5,104,0,0,870,134,1,0,0,0,871,872,5,116,0,0, + 872,873,5,101,0,0,873,874,5,109,0,0,874,875,5,112,0,0,875,876,5, + 108,0,0,876,877,5,97,0,0,877,878,5,116,0,0,878,879,5,101,0,0,879, + 136,1,0,0,0,880,881,5,116,0,0,881,882,5,104,0,0,882,883,5,105,0, + 0,883,884,5,115,0,0,884,138,1,0,0,0,885,886,5,116,0,0,886,887,5, + 104,0,0,887,888,5,114,0,0,888,889,5,101,0,0,889,890,5,97,0,0,890, + 891,5,100,0,0,891,892,5,95,0,0,892,893,5,108,0,0,893,894,5,111,0, + 0,894,895,5,99,0,0,895,896,5,97,0,0,896,897,5,108,0,0,897,140,1, + 0,0,0,898,899,5,116,0,0,899,900,5,104,0,0,900,901,5,114,0,0,901, + 902,5,111,0,0,902,903,5,119,0,0,903,142,1,0,0,0,904,905,5,116,0, + 0,905,906,5,114,0,0,906,907,5,117,0,0,907,908,5,101,0,0,908,144, + 1,0,0,0,909,910,5,116,0,0,910,911,5,114,0,0,911,912,5,121,0,0,912, + 146,1,0,0,0,913,914,5,116,0,0,914,915,5,121,0,0,915,916,5,112,0, + 0,916,917,5,101,0,0,917,918,5,100,0,0,918,919,5,101,0,0,919,920, + 5,102,0,0,920,148,1,0,0,0,921,922,5,116,0,0,922,923,5,121,0,0,923, + 924,5,112,0,0,924,925,5,101,0,0,925,926,5,105,0,0,926,927,5,100, + 0,0,927,150,1,0,0,0,928,929,5,116,0,0,929,930,5,121,0,0,930,931, + 5,112,0,0,931,932,5,101,0,0,932,933,5,110,0,0,933,934,5,97,0,0,934, + 935,5,109,0,0,935,936,5,101,0,0,936,152,1,0,0,0,937,938,5,117,0, + 0,938,939,5,110,0,0,939,940,5,105,0,0,940,941,5,111,0,0,941,942, + 5,110,0,0,942,154,1,0,0,0,943,944,5,117,0,0,944,945,5,110,0,0,945, + 946,5,115,0,0,946,947,5,105,0,0,947,948,5,103,0,0,948,949,5,110, + 0,0,949,950,5,101,0,0,950,951,5,100,0,0,951,156,1,0,0,0,952,953, + 5,117,0,0,953,954,5,115,0,0,954,955,5,105,0,0,955,956,5,110,0,0, + 956,957,5,103,0,0,957,158,1,0,0,0,958,959,5,118,0,0,959,960,5,105, + 0,0,960,961,5,114,0,0,961,962,5,116,0,0,962,963,5,117,0,0,963,964, + 5,97,0,0,964,965,5,108,0,0,965,160,1,0,0,0,966,967,5,118,0,0,967, + 968,5,111,0,0,968,969,5,105,0,0,969,970,5,100,0,0,970,162,1,0,0, + 0,971,972,5,118,0,0,972,973,5,111,0,0,973,974,5,108,0,0,974,975, + 5,97,0,0,975,976,5,116,0,0,976,977,5,105,0,0,977,978,5,108,0,0,978, + 979,5,101,0,0,979,164,1,0,0,0,980,981,5,119,0,0,981,982,5,99,0,0, + 982,983,5,104,0,0,983,984,5,97,0,0,984,985,5,114,0,0,985,986,5,95, + 0,0,986,987,5,116,0,0,987,166,1,0,0,0,988,989,5,119,0,0,989,990, + 5,104,0,0,990,991,5,105,0,0,991,992,5,108,0,0,992,993,5,101,0,0, + 993,168,1,0,0,0,994,995,5,40,0,0,995,170,1,0,0,0,996,997,5,41,0, + 0,997,172,1,0,0,0,998,999,5,91,0,0,999,174,1,0,0,0,1000,1001,5,93, + 0,0,1001,176,1,0,0,0,1002,1003,5,123,0,0,1003,178,1,0,0,0,1004,1005, + 5,125,0,0,1005,180,1,0,0,0,1006,1007,5,43,0,0,1007,182,1,0,0,0,1008, + 1009,5,45,0,0,1009,184,1,0,0,0,1010,1011,5,42,0,0,1011,186,1,0,0, + 0,1012,1013,5,47,0,0,1013,188,1,0,0,0,1014,1015,5,37,0,0,1015,190, + 1,0,0,0,1016,1017,5,94,0,0,1017,192,1,0,0,0,1018,1019,5,38,0,0,1019, + 194,1,0,0,0,1020,1021,5,124,0,0,1021,196,1,0,0,0,1022,1023,5,126, + 0,0,1023,198,1,0,0,0,1024,1029,5,33,0,0,1025,1026,5,110,0,0,1026, + 1027,5,111,0,0,1027,1029,5,116,0,0,1028,1024,1,0,0,0,1028,1025,1, + 0,0,0,1029,200,1,0,0,0,1030,1031,5,61,0,0,1031,202,1,0,0,0,1032, + 1033,5,60,0,0,1033,204,1,0,0,0,1034,1035,5,62,0,0,1035,206,1,0,0, + 0,1036,1037,5,43,0,0,1037,1038,5,61,0,0,1038,208,1,0,0,0,1039,1040, + 5,45,0,0,1040,1041,5,61,0,0,1041,210,1,0,0,0,1042,1043,5,42,0,0, + 1043,1044,5,61,0,0,1044,212,1,0,0,0,1045,1046,5,47,0,0,1046,1047, + 5,61,0,0,1047,214,1,0,0,0,1048,1049,5,37,0,0,1049,1050,5,61,0,0, + 1050,216,1,0,0,0,1051,1052,5,94,0,0,1052,1053,5,61,0,0,1053,218, + 1,0,0,0,1054,1055,5,38,0,0,1055,1056,5,61,0,0,1056,220,1,0,0,0,1057, + 1058,5,124,0,0,1058,1059,5,61,0,0,1059,222,1,0,0,0,1060,1061,5,60, + 0,0,1061,1062,5,60,0,0,1062,1063,5,61,0,0,1063,224,1,0,0,0,1064, + 1065,5,62,0,0,1065,1066,5,62,0,0,1066,1067,5,61,0,0,1067,226,1,0, + 0,0,1068,1069,5,61,0,0,1069,1070,5,61,0,0,1070,228,1,0,0,0,1071, + 1072,5,33,0,0,1072,1073,5,61,0,0,1073,230,1,0,0,0,1074,1075,5,60, + 0,0,1075,1076,5,61,0,0,1076,232,1,0,0,0,1077,1078,5,62,0,0,1078, + 1079,5,61,0,0,1079,234,1,0,0,0,1080,1081,5,38,0,0,1081,1086,5,38, + 0,0,1082,1083,5,97,0,0,1083,1084,5,110,0,0,1084,1086,5,100,0,0,1085, + 1080,1,0,0,0,1085,1082,1,0,0,0,1086,236,1,0,0,0,1087,1088,5,124, + 0,0,1088,1092,5,124,0,0,1089,1090,5,111,0,0,1090,1092,5,114,0,0, + 1091,1087,1,0,0,0,1091,1089,1,0,0,0,1092,238,1,0,0,0,1093,1094,5, + 43,0,0,1094,1095,5,43,0,0,1095,240,1,0,0,0,1096,1097,5,45,0,0,1097, + 1098,5,45,0,0,1098,242,1,0,0,0,1099,1100,5,44,0,0,1100,244,1,0,0, + 0,1101,1102,5,45,0,0,1102,1103,5,62,0,0,1103,1104,5,42,0,0,1104, + 246,1,0,0,0,1105,1106,5,45,0,0,1106,1107,5,62,0,0,1107,248,1,0,0, + 0,1108,1109,5,63,0,0,1109,250,1,0,0,0,1110,1111,5,58,0,0,1111,252, + 1,0,0,0,1112,1113,5,58,0,0,1113,1114,5,58,0,0,1114,254,1,0,0,0,1115, + 1116,5,59,0,0,1116,256,1,0,0,0,1117,1118,5,46,0,0,1118,258,1,0,0, + 0,1119,1120,5,46,0,0,1120,1121,5,42,0,0,1121,260,1,0,0,0,1122,1123, + 5,46,0,0,1123,1124,5,46,0,0,1124,1125,5,46,0,0,1125,262,1,0,0,0, + 1126,1127,3,287,143,0,1127,1128,3,287,143,0,1128,1129,3,287,143, + 0,1129,1130,3,287,143,0,1130,264,1,0,0,0,1131,1132,5,92,0,0,1132, + 1133,5,117,0,0,1133,1134,1,0,0,0,1134,1142,3,263,131,0,1135,1136, + 5,92,0,0,1136,1137,5,85,0,0,1137,1138,1,0,0,0,1138,1139,3,263,131, + 0,1139,1140,3,263,131,0,1140,1142,1,0,0,0,1141,1131,1,0,0,0,1141, + 1135,1,0,0,0,1142,266,1,0,0,0,1143,1148,3,269,134,0,1144,1147,3, + 269,134,0,1145,1147,3,273,136,0,1146,1144,1,0,0,0,1146,1145,1,0, + 0,0,1147,1150,1,0,0,0,1148,1146,1,0,0,0,1148,1149,1,0,0,0,1149,268, + 1,0,0,0,1150,1148,1,0,0,0,1151,1154,3,271,135,0,1152,1154,3,265, + 132,0,1153,1151,1,0,0,0,1153,1152,1,0,0,0,1154,270,1,0,0,0,1155, + 1156,7,2,0,0,1156,272,1,0,0,0,1157,1158,7,3,0,0,1158,274,1,0,0,0, + 1159,1166,3,283,141,0,1160,1162,5,39,0,0,1161,1160,1,0,0,0,1161, + 1162,1,0,0,0,1162,1163,1,0,0,0,1163,1165,3,273,136,0,1164,1161,1, + 0,0,0,1165,1168,1,0,0,0,1166,1164,1,0,0,0,1166,1167,1,0,0,0,1167, + 276,1,0,0,0,1168,1166,1,0,0,0,1169,1176,5,48,0,0,1170,1172,5,39, + 0,0,1171,1170,1,0,0,0,1171,1172,1,0,0,0,1172,1173,1,0,0,0,1173,1175, + 3,285,142,0,1174,1171,1,0,0,0,1175,1178,1,0,0,0,1176,1174,1,0,0, + 0,1176,1177,1,0,0,0,1177,278,1,0,0,0,1178,1176,1,0,0,0,1179,1180, + 5,48,0,0,1180,1184,5,120,0,0,1181,1182,5,48,0,0,1182,1184,5,88,0, + 0,1183,1179,1,0,0,0,1183,1181,1,0,0,0,1184,1185,1,0,0,0,1185,1192, + 3,287,143,0,1186,1188,5,39,0,0,1187,1186,1,0,0,0,1187,1188,1,0,0, + 0,1188,1189,1,0,0,0,1189,1191,3,287,143,0,1190,1187,1,0,0,0,1191, + 1194,1,0,0,0,1192,1190,1,0,0,0,1192,1193,1,0,0,0,1193,280,1,0,0, + 0,1194,1192,1,0,0,0,1195,1196,5,48,0,0,1196,1200,5,98,0,0,1197,1198, + 5,48,0,0,1198,1200,5,66,0,0,1199,1195,1,0,0,0,1199,1197,1,0,0,0, + 1200,1201,1,0,0,0,1201,1208,3,289,144,0,1202,1204,5,39,0,0,1203, + 1202,1,0,0,0,1203,1204,1,0,0,0,1204,1205,1,0,0,0,1205,1207,3,289, + 144,0,1206,1203,1,0,0,0,1207,1210,1,0,0,0,1208,1206,1,0,0,0,1208, + 1209,1,0,0,0,1209,282,1,0,0,0,1210,1208,1,0,0,0,1211,1212,7,4,0, + 0,1212,284,1,0,0,0,1213,1214,7,5,0,0,1214,286,1,0,0,0,1215,1216, + 7,6,0,0,1216,288,1,0,0,0,1217,1218,7,7,0,0,1218,290,1,0,0,0,1219, + 1221,3,293,146,0,1220,1222,3,295,147,0,1221,1220,1,0,0,0,1221,1222, + 1,0,0,0,1222,1236,1,0,0,0,1223,1225,3,293,146,0,1224,1226,3,297, + 148,0,1225,1224,1,0,0,0,1225,1226,1,0,0,0,1226,1236,1,0,0,0,1227, + 1229,3,295,147,0,1228,1230,3,293,146,0,1229,1228,1,0,0,0,1229,1230, + 1,0,0,0,1230,1236,1,0,0,0,1231,1233,3,297,148,0,1232,1234,3,293, + 146,0,1233,1232,1,0,0,0,1233,1234,1,0,0,0,1234,1236,1,0,0,0,1235, + 1219,1,0,0,0,1235,1223,1,0,0,0,1235,1227,1,0,0,0,1235,1231,1,0,0, + 0,1236,292,1,0,0,0,1237,1238,7,8,0,0,1238,294,1,0,0,0,1239,1240, + 7,9,0,0,1240,296,1,0,0,0,1241,1242,5,108,0,0,1242,1246,5,108,0,0, + 1243,1244,5,76,0,0,1244,1246,5,76,0,0,1245,1241,1,0,0,0,1245,1243, + 1,0,0,0,1246,298,1,0,0,0,1247,1251,8,10,0,0,1248,1251,3,301,150, + 0,1249,1251,3,265,132,0,1250,1247,1,0,0,0,1250,1248,1,0,0,0,1250, + 1249,1,0,0,0,1251,300,1,0,0,0,1252,1256,3,303,151,0,1253,1256,3, + 305,152,0,1254,1256,3,307,153,0,1255,1252,1,0,0,0,1255,1253,1,0, + 0,0,1255,1254,1,0,0,0,1256,302,1,0,0,0,1257,1258,5,92,0,0,1258,1288, + 5,39,0,0,1259,1260,5,92,0,0,1260,1288,5,34,0,0,1261,1262,5,92,0, + 0,1262,1288,5,63,0,0,1263,1264,5,92,0,0,1264,1288,5,92,0,0,1265, + 1266,5,92,0,0,1266,1288,5,97,0,0,1267,1268,5,92,0,0,1268,1288,5, + 98,0,0,1269,1270,5,92,0,0,1270,1288,5,102,0,0,1271,1272,5,92,0,0, + 1272,1288,5,110,0,0,1273,1274,5,92,0,0,1274,1288,5,114,0,0,1275, + 1281,5,92,0,0,1276,1278,5,13,0,0,1277,1279,5,10,0,0,1278,1277,1, + 0,0,0,1278,1279,1,0,0,0,1279,1282,1,0,0,0,1280,1282,5,10,0,0,1281, + 1276,1,0,0,0,1281,1280,1,0,0,0,1282,1288,1,0,0,0,1283,1284,5,92, + 0,0,1284,1288,5,116,0,0,1285,1286,5,92,0,0,1286,1288,5,118,0,0,1287, + 1257,1,0,0,0,1287,1259,1,0,0,0,1287,1261,1,0,0,0,1287,1263,1,0,0, + 0,1287,1265,1,0,0,0,1287,1267,1,0,0,0,1287,1269,1,0,0,0,1287,1271, + 1,0,0,0,1287,1273,1,0,0,0,1287,1275,1,0,0,0,1287,1283,1,0,0,0,1287, + 1285,1,0,0,0,1288,304,1,0,0,0,1289,1290,5,92,0,0,1290,1301,3,285, + 142,0,1291,1292,5,92,0,0,1292,1293,3,285,142,0,1293,1294,3,285,142, + 0,1294,1301,1,0,0,0,1295,1296,5,92,0,0,1296,1297,3,285,142,0,1297, + 1298,3,285,142,0,1298,1299,3,285,142,0,1299,1301,1,0,0,0,1300,1289, + 1,0,0,0,1300,1291,1,0,0,0,1300,1295,1,0,0,0,1301,306,1,0,0,0,1302, + 1303,5,92,0,0,1303,1304,5,120,0,0,1304,1306,1,0,0,0,1305,1307,3, + 287,143,0,1306,1305,1,0,0,0,1307,1308,1,0,0,0,1308,1306,1,0,0,0, + 1308,1309,1,0,0,0,1309,308,1,0,0,0,1310,1312,3,315,157,0,1311,1310, + 1,0,0,0,1311,1312,1,0,0,0,1312,1313,1,0,0,0,1313,1314,5,46,0,0,1314, + 1319,3,315,157,0,1315,1316,3,315,157,0,1316,1317,5,46,0,0,1317,1319, + 1,0,0,0,1318,1311,1,0,0,0,1318,1315,1,0,0,0,1319,310,1,0,0,0,1320, + 1322,5,101,0,0,1321,1323,3,313,156,0,1322,1321,1,0,0,0,1322,1323, + 1,0,0,0,1323,1324,1,0,0,0,1324,1331,3,315,157,0,1325,1327,5,69,0, + 0,1326,1328,3,313,156,0,1327,1326,1,0,0,0,1327,1328,1,0,0,0,1328, + 1329,1,0,0,0,1329,1331,3,315,157,0,1330,1320,1,0,0,0,1330,1325,1, + 0,0,0,1331,312,1,0,0,0,1332,1333,7,11,0,0,1333,314,1,0,0,0,1334, + 1341,3,273,136,0,1335,1337,5,39,0,0,1336,1335,1,0,0,0,1336,1337, + 1,0,0,0,1337,1338,1,0,0,0,1338,1340,3,273,136,0,1339,1336,1,0,0, + 0,1340,1343,1,0,0,0,1341,1339,1,0,0,0,1341,1342,1,0,0,0,1342,316, + 1,0,0,0,1343,1341,1,0,0,0,1344,1345,7,12,0,0,1345,318,1,0,0,0,1346, + 1347,5,117,0,0,1347,1350,5,56,0,0,1348,1350,7,0,0,0,1349,1346,1, + 0,0,0,1349,1348,1,0,0,0,1350,320,1,0,0,0,1351,1355,8,13,0,0,1352, + 1355,3,301,150,0,1353,1355,3,265,132,0,1354,1351,1,0,0,0,1354,1352, + 1,0,0,0,1354,1353,1,0,0,0,1355,322,1,0,0,0,1356,1357,5,82,0,0,1357, + 1358,5,34,0,0,1358,1364,1,0,0,0,1359,1360,5,92,0,0,1360,1363,7,14, + 0,0,1361,1363,8,15,0,0,1362,1359,1,0,0,0,1362,1361,1,0,0,0,1363, + 1366,1,0,0,0,1364,1365,1,0,0,0,1364,1362,1,0,0,0,1365,1367,1,0,0, + 0,1366,1364,1,0,0,0,1367,1371,5,40,0,0,1368,1370,8,16,0,0,1369,1368, + 1,0,0,0,1370,1373,1,0,0,0,1371,1372,1,0,0,0,1371,1369,1,0,0,0,1372, + 1374,1,0,0,0,1373,1371,1,0,0,0,1374,1380,5,41,0,0,1375,1376,5,92, + 0,0,1376,1379,7,14,0,0,1377,1379,8,17,0,0,1378,1375,1,0,0,0,1378, + 1377,1,0,0,0,1379,1382,1,0,0,0,1380,1381,1,0,0,0,1380,1378,1,0,0, + 0,1381,1383,1,0,0,0,1382,1380,1,0,0,0,1383,1384,5,34,0,0,1384,324, + 1,0,0,0,1385,1386,3,275,137,0,1386,1387,3,333,166,0,1387,1398,1, + 0,0,0,1388,1389,3,277,138,0,1389,1390,3,333,166,0,1390,1398,1,0, + 0,0,1391,1392,3,279,139,0,1392,1393,3,333,166,0,1393,1398,1,0,0, + 0,1394,1395,3,281,140,0,1395,1396,3,333,166,0,1396,1398,1,0,0,0, + 1397,1385,1,0,0,0,1397,1388,1,0,0,0,1397,1391,1,0,0,0,1397,1394, + 1,0,0,0,1398,326,1,0,0,0,1399,1401,3,309,154,0,1400,1402,3,311,155, + 0,1401,1400,1,0,0,0,1401,1402,1,0,0,0,1402,1403,1,0,0,0,1403,1404, + 3,333,166,0,1404,1410,1,0,0,0,1405,1406,3,315,157,0,1406,1407,3, + 311,155,0,1407,1408,3,333,166,0,1408,1410,1,0,0,0,1409,1399,1,0, + 0,0,1409,1405,1,0,0,0,1410,328,1,0,0,0,1411,1412,3,7,3,0,1412,1413, + 3,333,166,0,1413,330,1,0,0,0,1414,1415,3,3,1,0,1415,1416,3,333,166, + 0,1416,332,1,0,0,0,1417,1418,3,267,133,0,1418,334,1,0,0,0,1419,1421, + 7,18,0,0,1420,1419,1,0,0,0,1421,1422,1,0,0,0,1422,1420,1,0,0,0,1422, + 1423,1,0,0,0,1423,1424,1,0,0,0,1424,1425,6,167,1,0,1425,336,1,0, + 0,0,1426,1428,5,13,0,0,1427,1429,5,10,0,0,1428,1427,1,0,0,0,1428, + 1429,1,0,0,0,1429,1432,1,0,0,0,1430,1432,5,10,0,0,1431,1426,1,0, + 0,0,1431,1430,1,0,0,0,1432,1433,1,0,0,0,1433,1434,6,168,1,0,1434, + 338,1,0,0,0,1435,1436,5,47,0,0,1436,1437,5,42,0,0,1437,1441,1,0, + 0,0,1438,1440,9,0,0,0,1439,1438,1,0,0,0,1440,1443,1,0,0,0,1441,1442, + 1,0,0,0,1441,1439,1,0,0,0,1442,1444,1,0,0,0,1443,1441,1,0,0,0,1444, + 1445,5,42,0,0,1445,1446,5,47,0,0,1446,1447,1,0,0,0,1447,1448,6,169, + 1,0,1448,340,1,0,0,0,1449,1450,5,47,0,0,1450,1451,5,47,0,0,1451, + 1455,1,0,0,0,1452,1454,8,19,0,0,1453,1452,1,0,0,0,1454,1457,1,0, + 0,0,1455,1453,1,0,0,0,1455,1456,1,0,0,0,1456,1458,1,0,0,0,1457,1455, + 1,0,0,0,1458,1459,6,170,1,0,1459,342,1,0,0,0,74,0,345,349,353,357, + 359,362,368,374,377,382,384,387,394,398,402,410,416,421,426,431, + 439,1028,1085,1091,1141,1146,1148,1153,1161,1166,1171,1176,1183, + 1187,1192,1199,1203,1208,1221,1225,1229,1233,1235,1245,1250,1255, + 1278,1281,1287,1300,1308,1311,1318,1322,1327,1330,1336,1341,1349, + 1354,1362,1364,1371,1378,1380,1397,1401,1409,1422,1428,1431,1441, + 1455,2,0,1,0,6,0,0 + ] + +class CPP14Lexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + IntegerLiteral = 1 + CharacterLiteral = 2 + FloatingLiteral = 3 + StringLiteral = 4 + BooleanLiteral = 5 + PointerLiteral = 6 + UserDefinedLiteral = 7 + MultiLineMacro = 8 + Directive = 9 + Alignas = 10 + Alignof = 11 + Asm = 12 + Auto = 13 + Bool = 14 + Break = 15 + Case = 16 + Catch = 17 + Char = 18 + Char16 = 19 + Char32 = 20 + Class = 21 + Const = 22 + Constexpr = 23 + Const_cast = 24 + Continue = 25 + Decltype = 26 + Default = 27 + Delete = 28 + Do = 29 + Double = 30 + Dynamic_cast = 31 + Else = 32 + Enum = 33 + Explicit = 34 + Export = 35 + Extern = 36 + False_ = 37 + Final = 38 + Float = 39 + For = 40 + Friend = 41 + Goto = 42 + If = 43 + Inline = 44 + Int = 45 + Long = 46 + Mutable = 47 + Namespace = 48 + New = 49 + Noexcept = 50 + Nullptr = 51 + Operator = 52 + Override = 53 + Private = 54 + Protected = 55 + Public = 56 + Register = 57 + Reinterpret_cast = 58 + Return = 59 + Short = 60 + Signed = 61 + Sizeof = 62 + Static = 63 + Static_assert = 64 + Static_cast = 65 + Struct = 66 + Switch = 67 + Template = 68 + This = 69 + Thread_local = 70 + Throw = 71 + True_ = 72 + Try = 73 + Typedef = 74 + Typeid_ = 75 + Typename_ = 76 + Union = 77 + Unsigned = 78 + Using = 79 + Virtual = 80 + Void = 81 + Volatile = 82 + Wchar = 83 + While = 84 + LeftParen = 85 + RightParen = 86 + LeftBracket = 87 + RightBracket = 88 + LeftBrace = 89 + RightBrace = 90 + Plus = 91 + Minus = 92 + Star = 93 + Div = 94 + Mod = 95 + Caret = 96 + And = 97 + Or = 98 + Tilde = 99 + Not = 100 + Assign = 101 + Less = 102 + Greater = 103 + PlusAssign = 104 + MinusAssign = 105 + StarAssign = 106 + DivAssign = 107 + ModAssign = 108 + XorAssign = 109 + AndAssign = 110 + OrAssign = 111 + LeftShiftAssign = 112 + RightShiftAssign = 113 + Equal = 114 + NotEqual = 115 + LessEqual = 116 + GreaterEqual = 117 + AndAnd = 118 + OrOr = 119 + PlusPlus = 120 + MinusMinus = 121 + Comma = 122 + ArrowStar = 123 + Arrow = 124 + Question = 125 + Colon = 126 + Doublecolon = 127 + Semi = 128 + Dot = 129 + DotStar = 130 + Ellipsis = 131 + Identifier = 132 + DecimalLiteral = 133 + OctalLiteral = 134 + HexadecimalLiteral = 135 + BinaryLiteral = 136 + Integersuffix = 137 + UserDefinedIntegerLiteral = 138 + UserDefinedFloatingLiteral = 139 + UserDefinedStringLiteral = 140 + UserDefinedCharacterLiteral = 141 + Whitespace = 142 + Newline = 143 + BlockComment = 144 + LineComment = 145 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'alignas'", "'alignof'", "'asm'", "'auto'", "'bool'", "'break'", + "'case'", "'catch'", "'char'", "'char16_t'", "'char32_t'", "'class'", + "'const'", "'constexpr'", "'const_cast'", "'continue'", "'decltype'", + "'default'", "'delete'", "'do'", "'double'", "'dynamic_cast'", + "'else'", "'enum'", "'explicit'", "'export'", "'extern'", "'false'", + "'final'", "'float'", "'for'", "'friend'", "'goto'", "'if'", + "'inline'", "'int'", "'long'", "'mutable'", "'namespace'", "'new'", + "'noexcept'", "'nullptr'", "'operator'", "'override'", "'private'", + "'protected'", "'public'", "'register'", "'reinterpret_cast'", + "'return'", "'short'", "'signed'", "'sizeof'", "'static'", "'static_assert'", + "'static_cast'", "'struct'", "'switch'", "'template'", "'this'", + "'thread_local'", "'throw'", "'true'", "'try'", "'typedef'", + "'typeid'", "'typename'", "'union'", "'unsigned'", "'using'", + "'virtual'", "'void'", "'volatile'", "'wchar_t'", "'while'", + "'('", "')'", "'['", "']'", "'{'", "'}'", "'+'", "'-'", "'*'", + "'/'", "'%'", "'^'", "'&'", "'|'", "'~'", "'='", "'<'", "'>'", + "'+='", "'-='", "'*='", "'/='", "'%='", "'^='", "'&='", "'|='", + "'<<='", "'>>='", "'=='", "'!='", "'<='", "'>='", "'++'", "'--'", + "','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", + "'.*'", "'...'" ] + + symbolicNames = [ "", + "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", + "Case", "Catch", "Char", "Char16", "Char32", "Class", "Const", + "Constexpr", "Const_cast", "Continue", "Decltype", "Default", + "Delete", "Do", "Double", "Dynamic_cast", "Else", "Enum", "Explicit", + "Export", "Extern", "False_", "Final", "Float", "For", "Friend", + "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace", + "New", "Noexcept", "Nullptr", "Operator", "Override", "Private", + "Protected", "Public", "Register", "Reinterpret_cast", "Return", + "Short", "Signed", "Sizeof", "Static", "Static_assert", "Static_cast", + "Struct", "Switch", "Template", "This", "Thread_local", "Throw", + "True_", "Try", "Typedef", "Typeid_", "Typename_", "Union", + "Unsigned", "Using", "Virtual", "Void", "Volatile", "Wchar", + "While", "LeftParen", "RightParen", "LeftBracket", "RightBracket", + "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", "Mod", + "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater", + "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", + "OrOr", "PlusPlus", "MinusMinus", "Comma", "ArrowStar", "Arrow", + "Question", "Colon", "Doublecolon", "Semi", "Dot", "DotStar", + "Ellipsis", "Identifier", "DecimalLiteral", "OctalLiteral", + "HexadecimalLiteral", "BinaryLiteral", "Integersuffix", "UserDefinedIntegerLiteral", + "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", + "Whitespace", "Newline", "BlockComment", "LineComment" ] + + ruleNames = [ "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", + "StringLiteral", "BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", + "MultiLineMacro", "Directive", "Alignas", "Alignof", "Asm", + "Auto", "Bool", "Break", "Case", "Catch", "Char", "Char16", + "Char32", "Class", "Const", "Constexpr", "Const_cast", + "Continue", "Decltype", "Default", "Delete", "Do", "Double", + "Dynamic_cast", "Else", "Enum", "Explicit", "Export", + "Extern", "False_", "Final", "Float", "For", "Friend", + "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace", + "New", "Noexcept", "Nullptr", "Operator", "Override", + "Private", "Protected", "Public", "Register", "Reinterpret_cast", + "Return", "Short", "Signed", "Sizeof", "Static", "Static_assert", + "Static_cast", "Struct", "Switch", "Template", "This", + "Thread_local", "Throw", "True_", "Try", "Typedef", "Typeid_", + "Typename_", "Union", "Unsigned", "Using", "Virtual", + "Void", "Volatile", "Wchar", "While", "LeftParen", "RightParen", + "LeftBracket", "RightBracket", "LeftBrace", "RightBrace", + "Plus", "Minus", "Star", "Div", "Mod", "Caret", "And", + "Or", "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", + "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", + "RightShiftAssign", "Equal", "NotEqual", "LessEqual", + "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", + "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Hexquad", "Universalcharactername", + "Identifier", "Identifiernondigit", "NONDIGIT", "DIGIT", + "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", + "BinaryLiteral", "NONZERODIGIT", "OCTALDIGIT", "HEXADECIMALDIGIT", + "BINARYDIGIT", "Integersuffix", "Unsignedsuffix", "Longsuffix", + "Longlongsuffix", "Cchar", "Escapesequence", "Simpleescapesequence", + "Octalescapesequence", "Hexadecimalescapesequence", "Fractionalconstant", + "Exponentpart", "SIGN", "Digitsequence", "Floatingsuffix", + "Encodingprefix", "Schar", "Rawstring", "UserDefinedIntegerLiteral", + "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", + "UserDefinedCharacterLiteral", "Udsuffix", "Whitespace", + "Newline", "BlockComment", "LineComment" ] + + grammarFileName = "CPP14Lexer.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/csim/cpp/CPP14Lexer.tokens b/csim/cpp/CPP14Lexer.tokens new file mode 100644 index 0000000..97906af --- /dev/null +++ b/csim/cpp/CPP14Lexer.tokens @@ -0,0 +1,264 @@ +IntegerLiteral=1 +CharacterLiteral=2 +FloatingLiteral=3 +StringLiteral=4 +BooleanLiteral=5 +PointerLiteral=6 +UserDefinedLiteral=7 +MultiLineMacro=8 +Directive=9 +Alignas=10 +Alignof=11 +Asm=12 +Auto=13 +Bool=14 +Break=15 +Case=16 +Catch=17 +Char=18 +Char16=19 +Char32=20 +Class=21 +Const=22 +Constexpr=23 +Const_cast=24 +Continue=25 +Decltype=26 +Default=27 +Delete=28 +Do=29 +Double=30 +Dynamic_cast=31 +Else=32 +Enum=33 +Explicit=34 +Export=35 +Extern=36 +False_=37 +Final=38 +Float=39 +For=40 +Friend=41 +Goto=42 +If=43 +Inline=44 +Int=45 +Long=46 +Mutable=47 +Namespace=48 +New=49 +Noexcept=50 +Nullptr=51 +Operator=52 +Override=53 +Private=54 +Protected=55 +Public=56 +Register=57 +Reinterpret_cast=58 +Return=59 +Short=60 +Signed=61 +Sizeof=62 +Static=63 +Static_assert=64 +Static_cast=65 +Struct=66 +Switch=67 +Template=68 +This=69 +Thread_local=70 +Throw=71 +True_=72 +Try=73 +Typedef=74 +Typeid_=75 +Typename_=76 +Union=77 +Unsigned=78 +Using=79 +Virtual=80 +Void=81 +Volatile=82 +Wchar=83 +While=84 +LeftParen=85 +RightParen=86 +LeftBracket=87 +RightBracket=88 +LeftBrace=89 +RightBrace=90 +Plus=91 +Minus=92 +Star=93 +Div=94 +Mod=95 +Caret=96 +And=97 +Or=98 +Tilde=99 +Not=100 +Assign=101 +Less=102 +Greater=103 +PlusAssign=104 +MinusAssign=105 +StarAssign=106 +DivAssign=107 +ModAssign=108 +XorAssign=109 +AndAssign=110 +OrAssign=111 +LeftShiftAssign=112 +RightShiftAssign=113 +Equal=114 +NotEqual=115 +LessEqual=116 +GreaterEqual=117 +AndAnd=118 +OrOr=119 +PlusPlus=120 +MinusMinus=121 +Comma=122 +ArrowStar=123 +Arrow=124 +Question=125 +Colon=126 +Doublecolon=127 +Semi=128 +Dot=129 +DotStar=130 +Ellipsis=131 +Identifier=132 +DecimalLiteral=133 +OctalLiteral=134 +HexadecimalLiteral=135 +BinaryLiteral=136 +Integersuffix=137 +UserDefinedIntegerLiteral=138 +UserDefinedFloatingLiteral=139 +UserDefinedStringLiteral=140 +UserDefinedCharacterLiteral=141 +Whitespace=142 +Newline=143 +BlockComment=144 +LineComment=145 +'alignas'=10 +'alignof'=11 +'asm'=12 +'auto'=13 +'bool'=14 +'break'=15 +'case'=16 +'catch'=17 +'char'=18 +'char16_t'=19 +'char32_t'=20 +'class'=21 +'const'=22 +'constexpr'=23 +'const_cast'=24 +'continue'=25 +'decltype'=26 +'default'=27 +'delete'=28 +'do'=29 +'double'=30 +'dynamic_cast'=31 +'else'=32 +'enum'=33 +'explicit'=34 +'export'=35 +'extern'=36 +'false'=37 +'final'=38 +'float'=39 +'for'=40 +'friend'=41 +'goto'=42 +'if'=43 +'inline'=44 +'int'=45 +'long'=46 +'mutable'=47 +'namespace'=48 +'new'=49 +'noexcept'=50 +'nullptr'=51 +'operator'=52 +'override'=53 +'private'=54 +'protected'=55 +'public'=56 +'register'=57 +'reinterpret_cast'=58 +'return'=59 +'short'=60 +'signed'=61 +'sizeof'=62 +'static'=63 +'static_assert'=64 +'static_cast'=65 +'struct'=66 +'switch'=67 +'template'=68 +'this'=69 +'thread_local'=70 +'throw'=71 +'true'=72 +'try'=73 +'typedef'=74 +'typeid'=75 +'typename'=76 +'union'=77 +'unsigned'=78 +'using'=79 +'virtual'=80 +'void'=81 +'volatile'=82 +'wchar_t'=83 +'while'=84 +'('=85 +')'=86 +'['=87 +']'=88 +'{'=89 +'}'=90 +'+'=91 +'-'=92 +'*'=93 +'/'=94 +'%'=95 +'^'=96 +'&'=97 +'|'=98 +'~'=99 +'='=101 +'<'=102 +'>'=103 +'+='=104 +'-='=105 +'*='=106 +'/='=107 +'%='=108 +'^='=109 +'&='=110 +'|='=111 +'<<='=112 +'>>='=113 +'=='=114 +'!='=115 +'<='=116 +'>='=117 +'++'=120 +'--'=121 +','=122 +'->*'=123 +'->'=124 +'?'=125 +':'=126 +'::'=127 +';'=128 +'.'=129 +'.*'=130 +'...'=131 diff --git a/csim/cpp/CPP14Parser.interp b/csim/cpp/CPP14Parser.interp new file mode 100644 index 0000000..2a3339d --- /dev/null +++ b/csim/cpp/CPP14Parser.interp @@ -0,0 +1,492 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +'alignas' +'alignof' +'asm' +'auto' +'bool' +'break' +'case' +'catch' +'char' +'char16_t' +'char32_t' +'class' +'const' +'constexpr' +'const_cast' +'continue' +'decltype' +'default' +'delete' +'do' +'double' +'dynamic_cast' +'else' +'enum' +'explicit' +'export' +'extern' +'false' +'final' +'float' +'for' +'friend' +'goto' +'if' +'inline' +'int' +'long' +'mutable' +'namespace' +'new' +'noexcept' +'nullptr' +'operator' +'override' +'private' +'protected' +'public' +'register' +'reinterpret_cast' +'return' +'short' +'signed' +'sizeof' +'static' +'static_assert' +'static_cast' +'struct' +'switch' +'template' +'this' +'thread_local' +'throw' +'true' +'try' +'typedef' +'typeid' +'typename' +'union' +'unsigned' +'using' +'virtual' +'void' +'volatile' +'wchar_t' +'while' +'(' +')' +'[' +']' +'{' +'}' +'+' +'-' +'*' +'/' +'%' +'^' +'&' +'|' +'~' +null +'=' +'<' +'>' +'+=' +'-=' +'*=' +'/=' +'%=' +'^=' +'&=' +'|=' +'<<=' +'>>=' +'==' +'!=' +'<=' +'>=' +null +null +'++' +'--' +',' +'->*' +'->' +'?' +':' +'::' +';' +'.' +'.*' +'...' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Identifier +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +Integersuffix +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Whitespace +Newline +BlockComment +LineComment + +rule names: +translationUnit +primaryExpression +idExpression +unqualifiedId +qualifiedId +nestedNameSpecifier +lambdaExpression +lambdaIntroducer +lambdaCapture +captureDefault +captureList +capture +simpleCapture +initcapture +lambdaDeclarator +postfixExpression +typeIdOfTheTypeId +expressionList +pseudoDestructorName +unaryExpression +unaryOperator +newExpression_ +newPlacement +newTypeId +newDeclarator_ +noPointerNewDeclarator +newInitializer_ +deleteExpression +noExceptExpression +castExpression +pointerMemberExpression +multiplicativeExpression +additiveExpression +shiftExpression +shiftOperator +relationalExpression +equalityExpression +andExpression +exclusiveOrExpression +inclusiveOrExpression +logicalAndExpression +logicalOrExpression +conditionalExpression +assignmentExpression +assignmentOperator +expression +constantExpression +statement +labeledStatement +expressionStatement +compoundStatement +statementSeq +selectionStatement +condition +iterationStatement +forInitStatement +forRangeDeclaration +forRangeInitializer +jumpStatement +declarationStatement +declarationseq +declaration +blockDeclaration +aliasDeclaration +simpleDeclaration +staticAssertDeclaration +emptyDeclaration_ +attributeDeclaration +declSpecifier +declSpecifierSeq +storageClassSpecifier +functionSpecifier +typedefName +typeSpecifier +trailingTypeSpecifier +typeSpecifierSeq +trailingTypeSpecifierSeq +simpleTypeLengthModifier +simpleTypeSignednessModifier +simpleTypeSpecifier +theTypeName +decltypeSpecifier +elaboratedTypeSpecifier +enumName +enumSpecifier +enumHead +opaqueEnumDeclaration +enumkey +enumbase +enumeratorList +enumeratorDefinition +enumerator +namespaceName +originalNamespaceName +namespaceDefinition +namespaceAlias +namespaceAliasDefinition +qualifiednamespacespecifier +usingDeclaration +usingDirective +asmDefinition +linkageSpecification +attributeSpecifierSeq +attributeSpecifier +alignmentspecifier +attributeList +attribute +attributeNamespace +attributeArgumentClause +balancedTokenSeq +balancedtoken +initDeclaratorList +initDeclarator +declarator +pointerDeclarator +noPointerDeclarator +parametersAndQualifiers +trailingReturnType +pointerOperator +cvqualifierseq +cvQualifier +refqualifier +declaratorid +theTypeId +abstractDeclarator +pointerAbstractDeclarator +noPointerAbstractDeclarator +abstractPackDeclarator +noPointerAbstractPackDeclarator +parameterDeclarationClause +parameterDeclarationList +parameterDeclaration +functionDefinition +functionBody +initializer +braceOrEqualInitializer +initializerClause +initializerList +bracedInitList +className +classSpecifier +classHead +classHeadName +classVirtSpecifier +classKey +memberSpecification +memberdeclaration +memberDeclaratorList +memberDeclarator +virtualSpecifierSeq +virtualSpecifier +pureSpecifier +baseClause +baseSpecifierList +baseSpecifier +classOrDeclType +baseTypeSpecifier +accessSpecifier +conversionFunctionId +conversionTypeId +conversionDeclarator +constructorInitializer +memInitializerList +memInitializer +meminitializerid +operatorFunctionId +literalOperatorId +templateDeclaration +templateparameterList +templateParameter +typeParameter +simpleTemplateId +templateId +templateName +templateArgumentList +templateArgument +typeNameSpecifier +explicitInstantiation +explicitSpecialization +tryBlock +functionTryBlock +handlerSeq +handler +exceptionDeclaration +throwExpression +exceptionSpecification +dynamicExceptionSpecification +typeIdList +noeExceptSpecification +theOperator +literal + + +atn: +[4, 1, 145, 2062, 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, 1, 0, 3, 0, 384, 8, 0, 1, 0, 1, 0, 1, 1, 4, 1, 389, 8, 1, 11, 1, 12, 1, 390, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 400, 8, 1, 1, 2, 1, 2, 3, 2, 404, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 413, 8, 3, 1, 3, 3, 3, 416, 8, 3, 1, 4, 1, 4, 3, 4, 420, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 428, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 435, 8, 5, 1, 5, 3, 5, 438, 8, 5, 1, 5, 5, 5, 441, 8, 5, 10, 5, 12, 5, 444, 9, 5, 1, 6, 1, 6, 3, 6, 448, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 454, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 462, 8, 8, 3, 8, 464, 8, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 5, 10, 471, 8, 10, 10, 10, 12, 10, 474, 9, 10, 1, 10, 3, 10, 477, 8, 10, 1, 11, 1, 11, 3, 11, 481, 8, 11, 1, 12, 3, 12, 484, 8, 12, 1, 12, 1, 12, 3, 12, 488, 8, 12, 1, 13, 3, 13, 491, 8, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 498, 8, 14, 1, 14, 1, 14, 3, 14, 502, 8, 14, 1, 14, 3, 14, 505, 8, 14, 1, 14, 3, 14, 508, 8, 14, 1, 14, 3, 14, 511, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 517, 8, 15, 1, 15, 1, 15, 3, 15, 521, 8, 15, 1, 15, 1, 15, 3, 15, 525, 8, 15, 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, 539, 8, 15, 1, 15, 1, 15, 3, 15, 543, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 549, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 556, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 562, 8, 15, 1, 15, 1, 15, 3, 15, 566, 8, 15, 1, 15, 1, 15, 5, 15, 570, 8, 15, 10, 15, 12, 15, 573, 9, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 3, 18, 580, 8, 18, 1, 18, 1, 18, 1, 18, 3, 18, 585, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 598, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 605, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 617, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 627, 8, 19, 1, 20, 1, 20, 1, 21, 3, 21, 632, 8, 21, 1, 21, 1, 21, 3, 21, 636, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 643, 8, 21, 1, 21, 3, 21, 646, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 3, 23, 654, 8, 23, 1, 24, 1, 24, 3, 24, 658, 8, 24, 1, 24, 3, 24, 661, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 668, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 675, 8, 25, 5, 25, 677, 8, 25, 10, 25, 12, 25, 680, 9, 25, 1, 26, 1, 26, 3, 26, 684, 8, 26, 1, 26, 1, 26, 3, 26, 688, 8, 26, 1, 27, 3, 27, 691, 8, 27, 1, 27, 1, 27, 1, 27, 3, 27, 696, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 711, 8, 29, 1, 30, 1, 30, 1, 30, 5, 30, 716, 8, 30, 10, 30, 12, 30, 719, 9, 30, 1, 31, 1, 31, 1, 31, 5, 31, 724, 8, 31, 10, 31, 12, 31, 727, 9, 31, 1, 32, 1, 32, 1, 32, 5, 32, 732, 8, 32, 10, 32, 12, 32, 735, 9, 32, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 741, 8, 33, 10, 33, 12, 33, 744, 9, 33, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 750, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 755, 8, 35, 10, 35, 12, 35, 758, 9, 35, 1, 36, 1, 36, 1, 36, 5, 36, 763, 8, 36, 10, 36, 12, 36, 766, 9, 36, 1, 37, 1, 37, 1, 37, 5, 37, 771, 8, 37, 10, 37, 12, 37, 774, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 779, 8, 38, 10, 38, 12, 38, 782, 9, 38, 1, 39, 1, 39, 1, 39, 5, 39, 787, 8, 39, 10, 39, 12, 39, 790, 9, 39, 1, 40, 1, 40, 1, 40, 5, 40, 795, 8, 40, 10, 40, 12, 40, 798, 9, 40, 1, 41, 1, 41, 1, 41, 5, 41, 803, 8, 41, 10, 41, 12, 41, 806, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 814, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 822, 8, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 5, 45, 829, 8, 45, 10, 45, 12, 45, 832, 9, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 839, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 847, 8, 47, 3, 47, 849, 8, 47, 1, 48, 3, 48, 852, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 858, 8, 48, 1, 48, 1, 48, 1, 48, 1, 49, 3, 49, 864, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 3, 50, 870, 8, 50, 1, 50, 1, 50, 1, 51, 4, 51, 875, 8, 51, 11, 51, 12, 51, 876, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 886, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 894, 8, 52, 1, 53, 1, 53, 3, 53, 898, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 905, 8, 53, 3, 53, 907, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 927, 8, 54, 1, 54, 1, 54, 3, 54, 931, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 937, 8, 54, 1, 54, 1, 54, 1, 54, 3, 54, 942, 8, 54, 1, 55, 1, 55, 3, 55, 946, 8, 55, 1, 56, 3, 56, 949, 8, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 3, 57, 956, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 963, 8, 58, 1, 58, 1, 58, 3, 58, 967, 8, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 4, 60, 974, 8, 60, 11, 60, 12, 60, 975, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 987, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 997, 8, 62, 1, 63, 1, 63, 1, 63, 3, 63, 1002, 8, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 3, 64, 1009, 8, 64, 1, 64, 3, 64, 1012, 8, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1017, 8, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1022, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1043, 8, 68, 1, 69, 4, 69, 1046, 8, 69, 11, 69, 12, 69, 1047, 1, 69, 3, 69, 1051, 8, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 3, 73, 1062, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1068, 8, 74, 1, 75, 4, 75, 1071, 8, 75, 11, 75, 12, 75, 1072, 1, 75, 3, 75, 1076, 8, 75, 1, 76, 4, 76, 1079, 8, 76, 11, 76, 12, 76, 1080, 1, 76, 3, 76, 1084, 8, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 3, 79, 1091, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1114, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1120, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1126, 8, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1132, 8, 82, 1, 82, 3, 82, 1135, 8, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1141, 8, 82, 1, 82, 1, 82, 3, 82, 1145, 8, 82, 1, 82, 1, 82, 3, 82, 1149, 8, 82, 1, 82, 3, 82, 1152, 8, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1160, 8, 84, 3, 84, 1162, 8, 84, 1, 84, 1, 84, 1, 85, 1, 85, 3, 85, 1168, 8, 85, 1, 85, 3, 85, 1171, 8, 85, 1, 85, 3, 85, 1174, 8, 85, 1, 85, 3, 85, 1177, 8, 85, 1, 86, 1, 86, 3, 86, 1181, 8, 86, 1, 86, 1, 86, 3, 86, 1185, 8, 86, 1, 86, 1, 86, 1, 87, 1, 87, 3, 87, 1191, 8, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 5, 89, 1199, 8, 89, 10, 89, 12, 89, 1202, 9, 89, 1, 90, 1, 90, 1, 90, 3, 90, 1207, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 3, 92, 1213, 8, 92, 1, 93, 1, 93, 1, 94, 3, 94, 1218, 8, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1223, 8, 94, 1, 94, 1, 94, 3, 94, 1227, 8, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 3, 97, 1240, 8, 97, 1, 97, 1, 97, 1, 98, 1, 98, 3, 98, 1246, 8, 98, 1, 98, 1, 98, 3, 98, 1250, 8, 98, 1, 98, 1, 98, 1, 98, 1, 99, 3, 99, 1256, 8, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1261, 8, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1276, 8, 101, 1, 101, 1, 101, 3, 101, 1280, 8, 101, 1, 102, 4, 102, 1283, 8, 102, 11, 102, 12, 102, 1284, 1, 103, 1, 103, 1, 103, 3, 103, 1290, 8, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1295, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1301, 8, 104, 1, 104, 3, 104, 1304, 8, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 5, 105, 1311, 8, 105, 10, 105, 12, 105, 1314, 9, 105, 1, 105, 3, 105, 1317, 8, 105, 1, 106, 1, 106, 1, 106, 3, 106, 1322, 8, 106, 1, 106, 1, 106, 3, 106, 1326, 8, 106, 1, 107, 1, 107, 1, 108, 1, 108, 3, 108, 1332, 8, 108, 1, 108, 1, 108, 1, 109, 4, 109, 1337, 8, 109, 11, 109, 12, 109, 1338, 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, 4, 110, 1354, 8, 110, 11, 110, 12, 110, 1355, 3, 110, 1358, 8, 110, 1, 111, 1, 111, 1, 111, 5, 111, 1363, 8, 111, 10, 111, 12, 111, 1366, 9, 111, 1, 112, 1, 112, 3, 112, 1370, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1377, 8, 113, 1, 114, 1, 114, 3, 114, 1381, 8, 114, 5, 114, 1383, 8, 114, 10, 114, 12, 114, 1386, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 3, 115, 1393, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1399, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1405, 8, 115, 1, 115, 1, 115, 3, 115, 1409, 8, 115, 3, 115, 1411, 8, 115, 5, 115, 1413, 8, 115, 10, 115, 12, 115, 1416, 9, 115, 1, 116, 1, 116, 3, 116, 1420, 8, 116, 1, 116, 1, 116, 3, 116, 1424, 8, 116, 1, 116, 3, 116, 1427, 8, 116, 1, 116, 3, 116, 1430, 8, 116, 1, 116, 3, 116, 1433, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1438, 8, 117, 1, 118, 1, 118, 3, 118, 1442, 8, 118, 1, 118, 3, 118, 1445, 8, 118, 1, 118, 1, 118, 3, 118, 1449, 8, 118, 1, 118, 3, 118, 1452, 8, 118, 3, 118, 1454, 8, 118, 1, 119, 4, 119, 1457, 8, 119, 11, 119, 12, 119, 1458, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 3, 122, 1466, 8, 122, 1, 122, 1, 122, 1, 123, 1, 123, 3, 123, 1472, 8, 123, 1, 124, 1, 124, 3, 124, 1476, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1482, 8, 124, 1, 125, 5, 125, 1485, 8, 125, 10, 125, 12, 125, 1488, 9, 125, 1, 125, 1, 125, 3, 125, 1492, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1499, 8, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1504, 8, 126, 1, 126, 1, 126, 3, 126, 1508, 8, 126, 5, 126, 1510, 8, 126, 10, 126, 12, 126, 1513, 9, 126, 1, 127, 5, 127, 1516, 8, 127, 10, 127, 12, 127, 1519, 9, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1527, 8, 128, 1, 128, 1, 128, 3, 128, 1531, 8, 128, 5, 128, 1533, 8, 128, 10, 128, 12, 128, 1536, 9, 128, 1, 129, 1, 129, 3, 129, 1540, 8, 129, 1, 129, 3, 129, 1543, 8, 129, 1, 130, 1, 130, 1, 130, 5, 130, 1548, 8, 130, 10, 130, 12, 130, 1551, 9, 130, 1, 131, 3, 131, 1554, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1559, 8, 131, 3, 131, 1561, 8, 131, 1, 131, 1, 131, 3, 131, 1565, 8, 131, 1, 132, 3, 132, 1568, 8, 132, 1, 132, 3, 132, 1571, 8, 132, 1, 132, 1, 132, 3, 132, 1575, 8, 132, 1, 132, 1, 132, 1, 133, 3, 133, 1580, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1587, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1594, 8, 134, 1, 135, 1, 135, 1, 135, 3, 135, 1599, 8, 135, 1, 136, 1, 136, 3, 136, 1603, 8, 136, 1, 137, 1, 137, 3, 137, 1607, 8, 137, 1, 137, 1, 137, 1, 137, 3, 137, 1612, 8, 137, 5, 137, 1614, 8, 137, 10, 137, 12, 137, 1617, 9, 137, 1, 138, 1, 138, 1, 138, 3, 138, 1622, 8, 138, 3, 138, 1624, 8, 138, 1, 138, 1, 138, 1, 139, 1, 139, 3, 139, 1630, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 1635, 8, 140, 1, 140, 1, 140, 1, 141, 1, 141, 3, 141, 1641, 8, 141, 1, 141, 1, 141, 3, 141, 1645, 8, 141, 3, 141, 1647, 8, 141, 1, 141, 3, 141, 1650, 8, 141, 1, 141, 1, 141, 3, 141, 1654, 8, 141, 1, 141, 1, 141, 3, 141, 1658, 8, 141, 3, 141, 1660, 8, 141, 3, 141, 1662, 8, 141, 1, 142, 3, 142, 1665, 8, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 4, 145, 1677, 8, 145, 11, 145, 12, 145, 1678, 1, 146, 3, 146, 1682, 8, 146, 1, 146, 3, 146, 1685, 8, 146, 1, 146, 3, 146, 1688, 8, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 1697, 8, 146, 1, 147, 1, 147, 1, 147, 5, 147, 1702, 8, 147, 10, 147, 12, 147, 1705, 9, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1716, 8, 148, 1, 148, 1, 148, 3, 148, 1720, 8, 148, 1, 148, 3, 148, 1723, 8, 148, 1, 148, 1, 148, 3, 148, 1727, 8, 148, 1, 149, 4, 149, 1730, 8, 149, 11, 149, 12, 149, 1731, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 3, 153, 1744, 8, 153, 1, 153, 1, 153, 1, 153, 3, 153, 1749, 8, 153, 5, 153, 1751, 8, 153, 10, 153, 12, 153, 1754, 9, 153, 1, 154, 3, 154, 1757, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 1762, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 1767, 8, 154, 1, 154, 1, 154, 3, 154, 1771, 8, 154, 1, 155, 3, 155, 1774, 8, 155, 1, 155, 1, 155, 3, 155, 1778, 8, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 3, 159, 1789, 8, 159, 1, 160, 1, 160, 3, 160, 1793, 8, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 3, 162, 1800, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 1805, 8, 162, 5, 162, 1807, 8, 162, 10, 162, 12, 162, 1810, 9, 162, 1, 163, 1, 163, 1, 163, 3, 163, 1815, 8, 163, 1, 163, 1, 163, 3, 163, 1819, 8, 163, 1, 164, 1, 164, 3, 164, 1823, 8, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 1832, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 5, 168, 1843, 8, 168, 10, 168, 12, 168, 1846, 9, 168, 1, 169, 1, 169, 3, 169, 1850, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 1857, 8, 170, 1, 170, 1, 170, 3, 170, 1861, 8, 170, 1, 170, 3, 170, 1864, 8, 170, 1, 170, 3, 170, 1867, 8, 170, 1, 170, 3, 170, 1870, 8, 170, 1, 170, 1, 170, 3, 170, 1874, 8, 170, 1, 171, 1, 171, 1, 171, 3, 171, 1879, 8, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 3, 172, 1886, 8, 172, 1, 172, 1, 172, 3, 172, 1890, 8, 172, 1, 172, 1, 172, 3, 172, 1894, 8, 172, 1, 173, 1, 173, 1, 174, 1, 174, 3, 174, 1900, 8, 174, 1, 174, 1, 174, 1, 174, 3, 174, 1905, 8, 174, 5, 174, 1907, 8, 174, 10, 174, 12, 174, 1910, 9, 174, 1, 175, 1, 175, 1, 175, 3, 175, 1915, 8, 175, 1, 176, 1, 176, 1, 176, 1, 176, 3, 176, 1921, 8, 176, 1, 176, 3, 176, 1924, 8, 176, 1, 177, 3, 177, 1927, 8, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 3, 180, 1943, 8, 180, 1, 180, 1, 180, 1, 180, 1, 181, 4, 181, 1949, 8, 181, 11, 181, 12, 181, 1950, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 3, 183, 1960, 8, 183, 1, 183, 1, 183, 1, 183, 3, 183, 1965, 8, 183, 1, 183, 3, 183, 1968, 8, 183, 1, 184, 1, 184, 3, 184, 1972, 8, 184, 1, 185, 1, 185, 3, 185, 1976, 8, 185, 1, 186, 1, 186, 1, 186, 3, 186, 1981, 8, 186, 1, 186, 1, 186, 1, 187, 1, 187, 3, 187, 1987, 8, 187, 1, 187, 1, 187, 1, 187, 3, 187, 1992, 8, 187, 5, 187, 1994, 8, 187, 10, 187, 12, 187, 1997, 9, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 3, 188, 2005, 8, 188, 1, 189, 1, 189, 1, 189, 3, 189, 2010, 8, 189, 1, 189, 1, 189, 1, 189, 3, 189, 2015, 8, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 2058, 8, 189, 1, 190, 1, 190, 1, 190, 1, 1047, 4, 10, 30, 50, 230, 191, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 0, 23, 2, 0, 97, 97, 101, 101, 4, 0, 24, 24, 31, 31, 58, 58, 65, 65, 2, 0, 124, 124, 129, 129, 1, 0, 120, 121, 2, 0, 91, 93, 97, 100, 2, 0, 123, 123, 130, 130, 1, 0, 93, 95, 1, 0, 91, 92, 2, 0, 102, 103, 116, 117, 1, 0, 114, 115, 2, 0, 101, 101, 104, 113, 5, 0, 36, 36, 47, 47, 57, 57, 63, 63, 70, 70, 3, 0, 34, 34, 44, 44, 80, 80, 2, 0, 46, 46, 60, 60, 2, 0, 61, 61, 78, 78, 2, 0, 21, 21, 66, 66, 1, 0, 85, 90, 2, 0, 97, 97, 118, 118, 2, 0, 22, 22, 82, 82, 1, 0, 27, 28, 2, 0, 38, 38, 53, 53, 1, 0, 54, 56, 1, 0, 1, 7, 2285, 0, 383, 1, 0, 0, 0, 2, 399, 1, 0, 0, 0, 4, 403, 1, 0, 0, 0, 6, 415, 1, 0, 0, 0, 8, 417, 1, 0, 0, 0, 10, 423, 1, 0, 0, 0, 12, 445, 1, 0, 0, 0, 14, 451, 1, 0, 0, 0, 16, 463, 1, 0, 0, 0, 18, 465, 1, 0, 0, 0, 20, 467, 1, 0, 0, 0, 22, 480, 1, 0, 0, 0, 24, 487, 1, 0, 0, 0, 26, 490, 1, 0, 0, 0, 28, 495, 1, 0, 0, 0, 30, 542, 1, 0, 0, 0, 32, 574, 1, 0, 0, 0, 34, 576, 1, 0, 0, 0, 36, 597, 1, 0, 0, 0, 38, 626, 1, 0, 0, 0, 40, 628, 1, 0, 0, 0, 42, 631, 1, 0, 0, 0, 44, 647, 1, 0, 0, 0, 46, 651, 1, 0, 0, 0, 48, 660, 1, 0, 0, 0, 50, 662, 1, 0, 0, 0, 52, 687, 1, 0, 0, 0, 54, 690, 1, 0, 0, 0, 56, 699, 1, 0, 0, 0, 58, 710, 1, 0, 0, 0, 60, 712, 1, 0, 0, 0, 62, 720, 1, 0, 0, 0, 64, 728, 1, 0, 0, 0, 66, 736, 1, 0, 0, 0, 68, 749, 1, 0, 0, 0, 70, 751, 1, 0, 0, 0, 72, 759, 1, 0, 0, 0, 74, 767, 1, 0, 0, 0, 76, 775, 1, 0, 0, 0, 78, 783, 1, 0, 0, 0, 80, 791, 1, 0, 0, 0, 82, 799, 1, 0, 0, 0, 84, 807, 1, 0, 0, 0, 86, 821, 1, 0, 0, 0, 88, 823, 1, 0, 0, 0, 90, 825, 1, 0, 0, 0, 92, 833, 1, 0, 0, 0, 94, 848, 1, 0, 0, 0, 96, 851, 1, 0, 0, 0, 98, 863, 1, 0, 0, 0, 100, 867, 1, 0, 0, 0, 102, 874, 1, 0, 0, 0, 104, 893, 1, 0, 0, 0, 106, 906, 1, 0, 0, 0, 108, 941, 1, 0, 0, 0, 110, 945, 1, 0, 0, 0, 112, 948, 1, 0, 0, 0, 114, 955, 1, 0, 0, 0, 116, 966, 1, 0, 0, 0, 118, 970, 1, 0, 0, 0, 120, 973, 1, 0, 0, 0, 122, 986, 1, 0, 0, 0, 124, 996, 1, 0, 0, 0, 126, 998, 1, 0, 0, 0, 128, 1021, 1, 0, 0, 0, 130, 1023, 1, 0, 0, 0, 132, 1031, 1, 0, 0, 0, 134, 1033, 1, 0, 0, 0, 136, 1042, 1, 0, 0, 0, 138, 1045, 1, 0, 0, 0, 140, 1052, 1, 0, 0, 0, 142, 1054, 1, 0, 0, 0, 144, 1056, 1, 0, 0, 0, 146, 1061, 1, 0, 0, 0, 148, 1067, 1, 0, 0, 0, 150, 1070, 1, 0, 0, 0, 152, 1078, 1, 0, 0, 0, 154, 1085, 1, 0, 0, 0, 156, 1087, 1, 0, 0, 0, 158, 1113, 1, 0, 0, 0, 160, 1119, 1, 0, 0, 0, 162, 1121, 1, 0, 0, 0, 164, 1151, 1, 0, 0, 0, 166, 1153, 1, 0, 0, 0, 168, 1155, 1, 0, 0, 0, 170, 1165, 1, 0, 0, 0, 172, 1178, 1, 0, 0, 0, 174, 1188, 1, 0, 0, 0, 176, 1192, 1, 0, 0, 0, 178, 1195, 1, 0, 0, 0, 180, 1203, 1, 0, 0, 0, 182, 1208, 1, 0, 0, 0, 184, 1212, 1, 0, 0, 0, 186, 1214, 1, 0, 0, 0, 188, 1217, 1, 0, 0, 0, 190, 1230, 1, 0, 0, 0, 192, 1232, 1, 0, 0, 0, 194, 1239, 1, 0, 0, 0, 196, 1243, 1, 0, 0, 0, 198, 1255, 1, 0, 0, 0, 200, 1265, 1, 0, 0, 0, 202, 1271, 1, 0, 0, 0, 204, 1282, 1, 0, 0, 0, 206, 1294, 1, 0, 0, 0, 208, 1296, 1, 0, 0, 0, 210, 1307, 1, 0, 0, 0, 212, 1321, 1, 0, 0, 0, 214, 1327, 1, 0, 0, 0, 216, 1329, 1, 0, 0, 0, 218, 1336, 1, 0, 0, 0, 220, 1357, 1, 0, 0, 0, 222, 1359, 1, 0, 0, 0, 224, 1367, 1, 0, 0, 0, 226, 1376, 1, 0, 0, 0, 228, 1384, 1, 0, 0, 0, 230, 1398, 1, 0, 0, 0, 232, 1417, 1, 0, 0, 0, 234, 1434, 1, 0, 0, 0, 236, 1453, 1, 0, 0, 0, 238, 1456, 1, 0, 0, 0, 240, 1460, 1, 0, 0, 0, 242, 1462, 1, 0, 0, 0, 244, 1465, 1, 0, 0, 0, 246, 1469, 1, 0, 0, 0, 248, 1481, 1, 0, 0, 0, 250, 1486, 1, 0, 0, 0, 252, 1498, 1, 0, 0, 0, 254, 1517, 1, 0, 0, 0, 256, 1522, 1, 0, 0, 0, 258, 1537, 1, 0, 0, 0, 260, 1544, 1, 0, 0, 0, 262, 1553, 1, 0, 0, 0, 264, 1567, 1, 0, 0, 0, 266, 1586, 1, 0, 0, 0, 268, 1593, 1, 0, 0, 0, 270, 1598, 1, 0, 0, 0, 272, 1602, 1, 0, 0, 0, 274, 1604, 1, 0, 0, 0, 276, 1618, 1, 0, 0, 0, 278, 1629, 1, 0, 0, 0, 280, 1631, 1, 0, 0, 0, 282, 1661, 1, 0, 0, 0, 284, 1664, 1, 0, 0, 0, 286, 1668, 1, 0, 0, 0, 288, 1670, 1, 0, 0, 0, 290, 1676, 1, 0, 0, 0, 292, 1696, 1, 0, 0, 0, 294, 1698, 1, 0, 0, 0, 296, 1726, 1, 0, 0, 0, 298, 1729, 1, 0, 0, 0, 300, 1733, 1, 0, 0, 0, 302, 1735, 1, 0, 0, 0, 304, 1738, 1, 0, 0, 0, 306, 1741, 1, 0, 0, 0, 308, 1756, 1, 0, 0, 0, 310, 1777, 1, 0, 0, 0, 312, 1779, 1, 0, 0, 0, 314, 1781, 1, 0, 0, 0, 316, 1783, 1, 0, 0, 0, 318, 1786, 1, 0, 0, 0, 320, 1790, 1, 0, 0, 0, 322, 1794, 1, 0, 0, 0, 324, 1797, 1, 0, 0, 0, 326, 1811, 1, 0, 0, 0, 328, 1822, 1, 0, 0, 0, 330, 1824, 1, 0, 0, 0, 332, 1827, 1, 0, 0, 0, 334, 1833, 1, 0, 0, 0, 336, 1839, 1, 0, 0, 0, 338, 1849, 1, 0, 0, 0, 340, 1860, 1, 0, 0, 0, 342, 1875, 1, 0, 0, 0, 344, 1893, 1, 0, 0, 0, 346, 1895, 1, 0, 0, 0, 348, 1897, 1, 0, 0, 0, 350, 1914, 1, 0, 0, 0, 352, 1916, 1, 0, 0, 0, 354, 1926, 1, 0, 0, 0, 356, 1931, 1, 0, 0, 0, 358, 1936, 1, 0, 0, 0, 360, 1940, 1, 0, 0, 0, 362, 1948, 1, 0, 0, 0, 364, 1952, 1, 0, 0, 0, 366, 1967, 1, 0, 0, 0, 368, 1969, 1, 0, 0, 0, 370, 1975, 1, 0, 0, 0, 372, 1977, 1, 0, 0, 0, 374, 1984, 1, 0, 0, 0, 376, 2004, 1, 0, 0, 0, 378, 2057, 1, 0, 0, 0, 380, 2059, 1, 0, 0, 0, 382, 384, 3, 120, 60, 0, 383, 382, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 5, 0, 0, 1, 386, 1, 1, 0, 0, 0, 387, 389, 3, 380, 190, 0, 388, 387, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 400, 1, 0, 0, 0, 392, 400, 5, 69, 0, 0, 393, 394, 5, 85, 0, 0, 394, 395, 3, 90, 45, 0, 395, 396, 5, 86, 0, 0, 396, 400, 1, 0, 0, 0, 397, 400, 3, 4, 2, 0, 398, 400, 3, 12, 6, 0, 399, 388, 1, 0, 0, 0, 399, 392, 1, 0, 0, 0, 399, 393, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 398, 1, 0, 0, 0, 400, 3, 1, 0, 0, 0, 401, 404, 3, 6, 3, 0, 402, 404, 3, 8, 4, 0, 403, 401, 1, 0, 0, 0, 403, 402, 1, 0, 0, 0, 404, 5, 1, 0, 0, 0, 405, 416, 5, 132, 0, 0, 406, 416, 3, 330, 165, 0, 407, 416, 3, 316, 158, 0, 408, 416, 3, 332, 166, 0, 409, 412, 5, 99, 0, 0, 410, 413, 3, 278, 139, 0, 411, 413, 3, 162, 81, 0, 412, 410, 1, 0, 0, 0, 412, 411, 1, 0, 0, 0, 413, 416, 1, 0, 0, 0, 414, 416, 3, 344, 172, 0, 415, 405, 1, 0, 0, 0, 415, 406, 1, 0, 0, 0, 415, 407, 1, 0, 0, 0, 415, 408, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 414, 1, 0, 0, 0, 416, 7, 1, 0, 0, 0, 417, 419, 3, 10, 5, 0, 418, 420, 5, 68, 0, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 422, 3, 6, 3, 0, 422, 9, 1, 0, 0, 0, 423, 427, 6, 5, -1, 0, 424, 428, 3, 160, 80, 0, 425, 428, 3, 184, 92, 0, 426, 428, 3, 162, 81, 0, 427, 424, 1, 0, 0, 0, 427, 425, 1, 0, 0, 0, 427, 426, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 430, 5, 127, 0, 0, 430, 442, 1, 0, 0, 0, 431, 437, 10, 1, 0, 0, 432, 438, 5, 132, 0, 0, 433, 435, 5, 68, 0, 0, 434, 433, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 438, 3, 342, 171, 0, 437, 432, 1, 0, 0, 0, 437, 434, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 441, 5, 127, 0, 0, 440, 431, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 11, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 447, 3, 14, 7, 0, 446, 448, 3, 28, 14, 0, 447, 446, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 3, 100, 50, 0, 450, 13, 1, 0, 0, 0, 451, 453, 5, 87, 0, 0, 452, 454, 3, 16, 8, 0, 453, 452, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 456, 5, 88, 0, 0, 456, 15, 1, 0, 0, 0, 457, 464, 3, 20, 10, 0, 458, 461, 3, 18, 9, 0, 459, 460, 5, 122, 0, 0, 460, 462, 3, 20, 10, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 464, 1, 0, 0, 0, 463, 457, 1, 0, 0, 0, 463, 458, 1, 0, 0, 0, 464, 17, 1, 0, 0, 0, 465, 466, 7, 0, 0, 0, 466, 19, 1, 0, 0, 0, 467, 472, 3, 22, 11, 0, 468, 469, 5, 122, 0, 0, 469, 471, 3, 22, 11, 0, 470, 468, 1, 0, 0, 0, 471, 474, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 476, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 477, 5, 131, 0, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 21, 1, 0, 0, 0, 478, 481, 3, 24, 12, 0, 479, 481, 3, 26, 13, 0, 480, 478, 1, 0, 0, 0, 480, 479, 1, 0, 0, 0, 481, 23, 1, 0, 0, 0, 482, 484, 5, 97, 0, 0, 483, 482, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 488, 5, 132, 0, 0, 486, 488, 5, 69, 0, 0, 487, 483, 1, 0, 0, 0, 487, 486, 1, 0, 0, 0, 488, 25, 1, 0, 0, 0, 489, 491, 5, 97, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 493, 5, 132, 0, 0, 493, 494, 3, 268, 134, 0, 494, 27, 1, 0, 0, 0, 495, 497, 5, 85, 0, 0, 496, 498, 3, 258, 129, 0, 497, 496, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 501, 5, 86, 0, 0, 500, 502, 5, 47, 0, 0, 501, 500, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 504, 1, 0, 0, 0, 503, 505, 3, 370, 185, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 507, 1, 0, 0, 0, 506, 508, 3, 204, 102, 0, 507, 506, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 510, 1, 0, 0, 0, 509, 511, 3, 234, 117, 0, 510, 509, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 29, 1, 0, 0, 0, 512, 513, 6, 15, -1, 0, 513, 543, 3, 2, 1, 0, 514, 517, 3, 158, 79, 0, 515, 517, 3, 352, 176, 0, 516, 514, 1, 0, 0, 0, 516, 515, 1, 0, 0, 0, 517, 524, 1, 0, 0, 0, 518, 520, 5, 85, 0, 0, 519, 521, 3, 34, 17, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 525, 5, 86, 0, 0, 523, 525, 3, 276, 138, 0, 524, 518, 1, 0, 0, 0, 524, 523, 1, 0, 0, 0, 525, 543, 1, 0, 0, 0, 526, 527, 7, 1, 0, 0, 527, 528, 5, 102, 0, 0, 528, 529, 3, 246, 123, 0, 529, 530, 5, 103, 0, 0, 530, 531, 5, 85, 0, 0, 531, 532, 3, 90, 45, 0, 532, 533, 5, 86, 0, 0, 533, 543, 1, 0, 0, 0, 534, 535, 3, 32, 16, 0, 535, 538, 5, 85, 0, 0, 536, 539, 3, 90, 45, 0, 537, 539, 3, 246, 123, 0, 538, 536, 1, 0, 0, 0, 538, 537, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 5, 86, 0, 0, 541, 543, 1, 0, 0, 0, 542, 512, 1, 0, 0, 0, 542, 516, 1, 0, 0, 0, 542, 526, 1, 0, 0, 0, 542, 534, 1, 0, 0, 0, 543, 571, 1, 0, 0, 0, 544, 545, 10, 7, 0, 0, 545, 548, 5, 87, 0, 0, 546, 549, 3, 90, 45, 0, 547, 549, 3, 276, 138, 0, 548, 546, 1, 0, 0, 0, 548, 547, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 5, 88, 0, 0, 551, 570, 1, 0, 0, 0, 552, 553, 10, 6, 0, 0, 553, 555, 5, 85, 0, 0, 554, 556, 3, 34, 17, 0, 555, 554, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 570, 5, 86, 0, 0, 558, 559, 10, 4, 0, 0, 559, 565, 7, 2, 0, 0, 560, 562, 5, 68, 0, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 566, 3, 4, 2, 0, 564, 566, 3, 36, 18, 0, 565, 561, 1, 0, 0, 0, 565, 564, 1, 0, 0, 0, 566, 570, 1, 0, 0, 0, 567, 568, 10, 3, 0, 0, 568, 570, 7, 3, 0, 0, 569, 544, 1, 0, 0, 0, 569, 552, 1, 0, 0, 0, 569, 558, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 573, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 31, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, 574, 575, 5, 75, 0, 0, 575, 33, 1, 0, 0, 0, 576, 577, 3, 274, 137, 0, 577, 35, 1, 0, 0, 0, 578, 580, 3, 10, 5, 0, 579, 578, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 584, 1, 0, 0, 0, 581, 582, 3, 160, 80, 0, 582, 583, 5, 127, 0, 0, 583, 585, 1, 0, 0, 0, 584, 581, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 5, 99, 0, 0, 587, 598, 3, 160, 80, 0, 588, 589, 3, 10, 5, 0, 589, 590, 5, 68, 0, 0, 590, 591, 3, 342, 171, 0, 591, 592, 5, 127, 0, 0, 592, 593, 5, 99, 0, 0, 593, 594, 3, 160, 80, 0, 594, 598, 1, 0, 0, 0, 595, 596, 5, 99, 0, 0, 596, 598, 3, 162, 81, 0, 597, 579, 1, 0, 0, 0, 597, 588, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 37, 1, 0, 0, 0, 599, 627, 3, 30, 15, 0, 600, 605, 5, 120, 0, 0, 601, 605, 5, 121, 0, 0, 602, 605, 3, 40, 20, 0, 603, 605, 5, 62, 0, 0, 604, 600, 1, 0, 0, 0, 604, 601, 1, 0, 0, 0, 604, 602, 1, 0, 0, 0, 604, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 627, 3, 38, 19, 0, 607, 616, 5, 62, 0, 0, 608, 609, 5, 85, 0, 0, 609, 610, 3, 246, 123, 0, 610, 611, 5, 86, 0, 0, 611, 617, 1, 0, 0, 0, 612, 613, 5, 131, 0, 0, 613, 614, 5, 85, 0, 0, 614, 615, 5, 132, 0, 0, 615, 617, 5, 86, 0, 0, 616, 608, 1, 0, 0, 0, 616, 612, 1, 0, 0, 0, 617, 627, 1, 0, 0, 0, 618, 619, 5, 11, 0, 0, 619, 620, 5, 85, 0, 0, 620, 621, 3, 246, 123, 0, 621, 622, 5, 86, 0, 0, 622, 627, 1, 0, 0, 0, 623, 627, 3, 56, 28, 0, 624, 627, 3, 42, 21, 0, 625, 627, 3, 54, 27, 0, 626, 599, 1, 0, 0, 0, 626, 604, 1, 0, 0, 0, 626, 607, 1, 0, 0, 0, 626, 618, 1, 0, 0, 0, 626, 623, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 625, 1, 0, 0, 0, 627, 39, 1, 0, 0, 0, 628, 629, 7, 4, 0, 0, 629, 41, 1, 0, 0, 0, 630, 632, 5, 127, 0, 0, 631, 630, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 635, 5, 49, 0, 0, 634, 636, 3, 44, 22, 0, 635, 634, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 642, 1, 0, 0, 0, 637, 643, 3, 46, 23, 0, 638, 639, 5, 85, 0, 0, 639, 640, 3, 246, 123, 0, 640, 641, 5, 86, 0, 0, 641, 643, 1, 0, 0, 0, 642, 637, 1, 0, 0, 0, 642, 638, 1, 0, 0, 0, 643, 645, 1, 0, 0, 0, 644, 646, 3, 52, 26, 0, 645, 644, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 43, 1, 0, 0, 0, 647, 648, 5, 85, 0, 0, 648, 649, 3, 34, 17, 0, 649, 650, 5, 86, 0, 0, 650, 45, 1, 0, 0, 0, 651, 653, 3, 150, 75, 0, 652, 654, 3, 48, 24, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 47, 1, 0, 0, 0, 655, 657, 3, 236, 118, 0, 656, 658, 3, 48, 24, 0, 657, 656, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 661, 1, 0, 0, 0, 659, 661, 3, 50, 25, 0, 660, 655, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 49, 1, 0, 0, 0, 662, 663, 6, 25, -1, 0, 663, 664, 5, 87, 0, 0, 664, 665, 3, 90, 45, 0, 665, 667, 5, 88, 0, 0, 666, 668, 3, 204, 102, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 678, 1, 0, 0, 0, 669, 670, 10, 1, 0, 0, 670, 671, 5, 87, 0, 0, 671, 672, 3, 92, 46, 0, 672, 674, 5, 88, 0, 0, 673, 675, 3, 204, 102, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 677, 1, 0, 0, 0, 676, 669, 1, 0, 0, 0, 677, 680, 1, 0, 0, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 51, 1, 0, 0, 0, 680, 678, 1, 0, 0, 0, 681, 683, 5, 85, 0, 0, 682, 684, 3, 34, 17, 0, 683, 682, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 688, 5, 86, 0, 0, 686, 688, 3, 276, 138, 0, 687, 681, 1, 0, 0, 0, 687, 686, 1, 0, 0, 0, 688, 53, 1, 0, 0, 0, 689, 691, 5, 127, 0, 0, 690, 689, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 695, 5, 28, 0, 0, 693, 694, 5, 87, 0, 0, 694, 696, 5, 88, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 3, 58, 29, 0, 698, 55, 1, 0, 0, 0, 699, 700, 5, 50, 0, 0, 700, 701, 5, 85, 0, 0, 701, 702, 3, 90, 45, 0, 702, 703, 5, 86, 0, 0, 703, 57, 1, 0, 0, 0, 704, 711, 3, 38, 19, 0, 705, 706, 5, 85, 0, 0, 706, 707, 3, 246, 123, 0, 707, 708, 5, 86, 0, 0, 708, 709, 3, 58, 29, 0, 709, 711, 1, 0, 0, 0, 710, 704, 1, 0, 0, 0, 710, 705, 1, 0, 0, 0, 711, 59, 1, 0, 0, 0, 712, 717, 3, 58, 29, 0, 713, 714, 7, 5, 0, 0, 714, 716, 3, 58, 29, 0, 715, 713, 1, 0, 0, 0, 716, 719, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 61, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 720, 725, 3, 60, 30, 0, 721, 722, 7, 6, 0, 0, 722, 724, 3, 60, 30, 0, 723, 721, 1, 0, 0, 0, 724, 727, 1, 0, 0, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 63, 1, 0, 0, 0, 727, 725, 1, 0, 0, 0, 728, 733, 3, 62, 31, 0, 729, 730, 7, 7, 0, 0, 730, 732, 3, 62, 31, 0, 731, 729, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 65, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 742, 3, 64, 32, 0, 737, 738, 3, 68, 34, 0, 738, 739, 3, 64, 32, 0, 739, 741, 1, 0, 0, 0, 740, 737, 1, 0, 0, 0, 741, 744, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 67, 1, 0, 0, 0, 744, 742, 1, 0, 0, 0, 745, 746, 5, 103, 0, 0, 746, 750, 5, 103, 0, 0, 747, 748, 5, 102, 0, 0, 748, 750, 5, 102, 0, 0, 749, 745, 1, 0, 0, 0, 749, 747, 1, 0, 0, 0, 750, 69, 1, 0, 0, 0, 751, 756, 3, 66, 33, 0, 752, 753, 7, 8, 0, 0, 753, 755, 3, 66, 33, 0, 754, 752, 1, 0, 0, 0, 755, 758, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 71, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 759, 764, 3, 70, 35, 0, 760, 761, 7, 9, 0, 0, 761, 763, 3, 70, 35, 0, 762, 760, 1, 0, 0, 0, 763, 766, 1, 0, 0, 0, 764, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 73, 1, 0, 0, 0, 766, 764, 1, 0, 0, 0, 767, 772, 3, 72, 36, 0, 768, 769, 5, 97, 0, 0, 769, 771, 3, 72, 36, 0, 770, 768, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 75, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 780, 3, 74, 37, 0, 776, 777, 5, 96, 0, 0, 777, 779, 3, 74, 37, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 77, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 788, 3, 76, 38, 0, 784, 785, 5, 98, 0, 0, 785, 787, 3, 76, 38, 0, 786, 784, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 79, 1, 0, 0, 0, 790, 788, 1, 0, 0, 0, 791, 796, 3, 78, 39, 0, 792, 793, 5, 118, 0, 0, 793, 795, 3, 78, 39, 0, 794, 792, 1, 0, 0, 0, 795, 798, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 81, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 799, 804, 3, 80, 40, 0, 800, 801, 5, 119, 0, 0, 801, 803, 3, 80, 40, 0, 802, 800, 1, 0, 0, 0, 803, 806, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, 805, 1, 0, 0, 0, 805, 83, 1, 0, 0, 0, 806, 804, 1, 0, 0, 0, 807, 813, 3, 82, 41, 0, 808, 809, 5, 125, 0, 0, 809, 810, 3, 90, 45, 0, 810, 811, 5, 126, 0, 0, 811, 812, 3, 86, 43, 0, 812, 814, 1, 0, 0, 0, 813, 808, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 85, 1, 0, 0, 0, 815, 822, 3, 84, 42, 0, 816, 817, 3, 82, 41, 0, 817, 818, 3, 88, 44, 0, 818, 819, 3, 272, 136, 0, 819, 822, 1, 0, 0, 0, 820, 822, 3, 368, 184, 0, 821, 815, 1, 0, 0, 0, 821, 816, 1, 0, 0, 0, 821, 820, 1, 0, 0, 0, 822, 87, 1, 0, 0, 0, 823, 824, 7, 10, 0, 0, 824, 89, 1, 0, 0, 0, 825, 830, 3, 86, 43, 0, 826, 827, 5, 122, 0, 0, 827, 829, 3, 86, 43, 0, 828, 826, 1, 0, 0, 0, 829, 832, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 91, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 834, 3, 84, 42, 0, 834, 93, 1, 0, 0, 0, 835, 849, 3, 96, 48, 0, 836, 849, 3, 118, 59, 0, 837, 839, 3, 204, 102, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 846, 1, 0, 0, 0, 840, 847, 3, 98, 49, 0, 841, 847, 3, 100, 50, 0, 842, 847, 3, 104, 52, 0, 843, 847, 3, 108, 54, 0, 844, 847, 3, 116, 58, 0, 845, 847, 3, 358, 179, 0, 846, 840, 1, 0, 0, 0, 846, 841, 1, 0, 0, 0, 846, 842, 1, 0, 0, 0, 846, 843, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 846, 845, 1, 0, 0, 0, 847, 849, 1, 0, 0, 0, 848, 835, 1, 0, 0, 0, 848, 836, 1, 0, 0, 0, 848, 838, 1, 0, 0, 0, 849, 95, 1, 0, 0, 0, 850, 852, 3, 204, 102, 0, 851, 850, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 857, 1, 0, 0, 0, 853, 858, 5, 132, 0, 0, 854, 855, 5, 16, 0, 0, 855, 858, 3, 92, 46, 0, 856, 858, 5, 27, 0, 0, 857, 853, 1, 0, 0, 0, 857, 854, 1, 0, 0, 0, 857, 856, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 860, 5, 126, 0, 0, 860, 861, 3, 94, 47, 0, 861, 97, 1, 0, 0, 0, 862, 864, 3, 90, 45, 0, 863, 862, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 866, 5, 128, 0, 0, 866, 99, 1, 0, 0, 0, 867, 869, 5, 89, 0, 0, 868, 870, 3, 102, 51, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 5, 90, 0, 0, 872, 101, 1, 0, 0, 0, 873, 875, 3, 94, 47, 0, 874, 873, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 874, 1, 0, 0, 0, 876, 877, 1, 0, 0, 0, 877, 103, 1, 0, 0, 0, 878, 879, 5, 43, 0, 0, 879, 880, 5, 85, 0, 0, 880, 881, 3, 106, 53, 0, 881, 882, 5, 86, 0, 0, 882, 885, 3, 94, 47, 0, 883, 884, 5, 32, 0, 0, 884, 886, 3, 94, 47, 0, 885, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 894, 1, 0, 0, 0, 887, 888, 5, 67, 0, 0, 888, 889, 5, 85, 0, 0, 889, 890, 3, 106, 53, 0, 890, 891, 5, 86, 0, 0, 891, 892, 3, 94, 47, 0, 892, 894, 1, 0, 0, 0, 893, 878, 1, 0, 0, 0, 893, 887, 1, 0, 0, 0, 894, 105, 1, 0, 0, 0, 895, 907, 3, 90, 45, 0, 896, 898, 3, 204, 102, 0, 897, 896, 1, 0, 0, 0, 897, 898, 1, 0, 0, 0, 898, 899, 1, 0, 0, 0, 899, 900, 3, 138, 69, 0, 900, 904, 3, 226, 113, 0, 901, 902, 5, 101, 0, 0, 902, 905, 3, 272, 136, 0, 903, 905, 3, 276, 138, 0, 904, 901, 1, 0, 0, 0, 904, 903, 1, 0, 0, 0, 905, 907, 1, 0, 0, 0, 906, 895, 1, 0, 0, 0, 906, 897, 1, 0, 0, 0, 907, 107, 1, 0, 0, 0, 908, 909, 5, 84, 0, 0, 909, 910, 5, 85, 0, 0, 910, 911, 3, 106, 53, 0, 911, 912, 5, 86, 0, 0, 912, 913, 3, 94, 47, 0, 913, 942, 1, 0, 0, 0, 914, 915, 5, 29, 0, 0, 915, 916, 3, 94, 47, 0, 916, 917, 5, 84, 0, 0, 917, 918, 5, 85, 0, 0, 918, 919, 3, 90, 45, 0, 919, 920, 5, 86, 0, 0, 920, 921, 5, 128, 0, 0, 921, 942, 1, 0, 0, 0, 922, 923, 5, 40, 0, 0, 923, 936, 5, 85, 0, 0, 924, 926, 3, 110, 55, 0, 925, 927, 3, 106, 53, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 930, 5, 128, 0, 0, 929, 931, 3, 90, 45, 0, 930, 929, 1, 0, 0, 0, 930, 931, 1, 0, 0, 0, 931, 937, 1, 0, 0, 0, 932, 933, 3, 112, 56, 0, 933, 934, 5, 126, 0, 0, 934, 935, 3, 114, 57, 0, 935, 937, 1, 0, 0, 0, 936, 924, 1, 0, 0, 0, 936, 932, 1, 0, 0, 0, 937, 938, 1, 0, 0, 0, 938, 939, 5, 86, 0, 0, 939, 940, 3, 94, 47, 0, 940, 942, 1, 0, 0, 0, 941, 908, 1, 0, 0, 0, 941, 914, 1, 0, 0, 0, 941, 922, 1, 0, 0, 0, 942, 109, 1, 0, 0, 0, 943, 946, 3, 98, 49, 0, 944, 946, 3, 128, 64, 0, 945, 943, 1, 0, 0, 0, 945, 944, 1, 0, 0, 0, 946, 111, 1, 0, 0, 0, 947, 949, 3, 204, 102, 0, 948, 947, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 951, 3, 138, 69, 0, 951, 952, 3, 226, 113, 0, 952, 113, 1, 0, 0, 0, 953, 956, 3, 90, 45, 0, 954, 956, 3, 276, 138, 0, 955, 953, 1, 0, 0, 0, 955, 954, 1, 0, 0, 0, 956, 115, 1, 0, 0, 0, 957, 967, 5, 15, 0, 0, 958, 967, 5, 25, 0, 0, 959, 962, 5, 59, 0, 0, 960, 963, 3, 90, 45, 0, 961, 963, 3, 276, 138, 0, 962, 960, 1, 0, 0, 0, 962, 961, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 967, 1, 0, 0, 0, 964, 965, 5, 42, 0, 0, 965, 967, 5, 132, 0, 0, 966, 957, 1, 0, 0, 0, 966, 958, 1, 0, 0, 0, 966, 959, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 5, 128, 0, 0, 969, 117, 1, 0, 0, 0, 970, 971, 3, 124, 62, 0, 971, 119, 1, 0, 0, 0, 972, 974, 3, 122, 61, 0, 973, 972, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 973, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 121, 1, 0, 0, 0, 977, 987, 3, 124, 62, 0, 978, 987, 3, 264, 132, 0, 979, 987, 3, 334, 167, 0, 980, 987, 3, 354, 177, 0, 981, 987, 3, 356, 178, 0, 982, 987, 3, 202, 101, 0, 983, 987, 3, 188, 94, 0, 984, 987, 3, 132, 66, 0, 985, 987, 3, 134, 67, 0, 986, 977, 1, 0, 0, 0, 986, 978, 1, 0, 0, 0, 986, 979, 1, 0, 0, 0, 986, 980, 1, 0, 0, 0, 986, 981, 1, 0, 0, 0, 986, 982, 1, 0, 0, 0, 986, 983, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 985, 1, 0, 0, 0, 987, 123, 1, 0, 0, 0, 988, 997, 3, 128, 64, 0, 989, 997, 3, 200, 100, 0, 990, 997, 3, 192, 96, 0, 991, 997, 3, 196, 98, 0, 992, 997, 3, 198, 99, 0, 993, 997, 3, 130, 65, 0, 994, 997, 3, 126, 63, 0, 995, 997, 3, 172, 86, 0, 996, 988, 1, 0, 0, 0, 996, 989, 1, 0, 0, 0, 996, 990, 1, 0, 0, 0, 996, 991, 1, 0, 0, 0, 996, 992, 1, 0, 0, 0, 996, 993, 1, 0, 0, 0, 996, 994, 1, 0, 0, 0, 996, 995, 1, 0, 0, 0, 997, 125, 1, 0, 0, 0, 998, 999, 5, 79, 0, 0, 999, 1001, 5, 132, 0, 0, 1000, 1002, 3, 204, 102, 0, 1001, 1000, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1004, 5, 101, 0, 0, 1004, 1005, 3, 246, 123, 0, 1005, 1006, 5, 128, 0, 0, 1006, 127, 1, 0, 0, 0, 1007, 1009, 3, 138, 69, 0, 1008, 1007, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1011, 1, 0, 0, 0, 1010, 1012, 3, 222, 111, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1022, 5, 128, 0, 0, 1014, 1016, 3, 204, 102, 0, 1015, 1017, 3, 138, 69, 0, 1016, 1015, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1019, 3, 222, 111, 0, 1019, 1020, 5, 128, 0, 0, 1020, 1022, 1, 0, 0, 0, 1021, 1008, 1, 0, 0, 0, 1021, 1014, 1, 0, 0, 0, 1022, 129, 1, 0, 0, 0, 1023, 1024, 5, 64, 0, 0, 1024, 1025, 5, 85, 0, 0, 1025, 1026, 3, 92, 46, 0, 1026, 1027, 5, 122, 0, 0, 1027, 1028, 5, 4, 0, 0, 1028, 1029, 5, 86, 0, 0, 1029, 1030, 5, 128, 0, 0, 1030, 131, 1, 0, 0, 0, 1031, 1032, 5, 128, 0, 0, 1032, 133, 1, 0, 0, 0, 1033, 1034, 3, 204, 102, 0, 1034, 1035, 5, 128, 0, 0, 1035, 135, 1, 0, 0, 0, 1036, 1043, 3, 140, 70, 0, 1037, 1043, 3, 146, 73, 0, 1038, 1043, 3, 142, 71, 0, 1039, 1043, 5, 41, 0, 0, 1040, 1043, 5, 74, 0, 0, 1041, 1043, 5, 23, 0, 0, 1042, 1036, 1, 0, 0, 0, 1042, 1037, 1, 0, 0, 0, 1042, 1038, 1, 0, 0, 0, 1042, 1039, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1041, 1, 0, 0, 0, 1043, 137, 1, 0, 0, 0, 1044, 1046, 3, 136, 68, 0, 1045, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1050, 1, 0, 0, 0, 1049, 1051, 3, 204, 102, 0, 1050, 1049, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 139, 1, 0, 0, 0, 1052, 1053, 7, 11, 0, 0, 1053, 141, 1, 0, 0, 0, 1054, 1055, 7, 12, 0, 0, 1055, 143, 1, 0, 0, 0, 1056, 1057, 5, 132, 0, 0, 1057, 145, 1, 0, 0, 0, 1058, 1062, 3, 148, 74, 0, 1059, 1062, 3, 280, 140, 0, 1060, 1062, 3, 168, 84, 0, 1061, 1058, 1, 0, 0, 0, 1061, 1059, 1, 0, 0, 0, 1061, 1060, 1, 0, 0, 0, 1062, 147, 1, 0, 0, 0, 1063, 1068, 3, 158, 79, 0, 1064, 1068, 3, 164, 82, 0, 1065, 1068, 3, 352, 176, 0, 1066, 1068, 3, 240, 120, 0, 1067, 1063, 1, 0, 0, 0, 1067, 1064, 1, 0, 0, 0, 1067, 1065, 1, 0, 0, 0, 1067, 1066, 1, 0, 0, 0, 1068, 149, 1, 0, 0, 0, 1069, 1071, 3, 146, 73, 0, 1070, 1069, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1075, 1, 0, 0, 0, 1074, 1076, 3, 204, 102, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 151, 1, 0, 0, 0, 1077, 1079, 3, 148, 74, 0, 1078, 1077, 1, 0, 0, 0, 1079, 1080, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1083, 1, 0, 0, 0, 1082, 1084, 3, 204, 102, 0, 1083, 1082, 1, 0, 0, 0, 1083, 1084, 1, 0, 0, 0, 1084, 153, 1, 0, 0, 0, 1085, 1086, 7, 13, 0, 0, 1086, 155, 1, 0, 0, 0, 1087, 1088, 7, 14, 0, 0, 1088, 157, 1, 0, 0, 0, 1089, 1091, 3, 10, 5, 0, 1090, 1089, 1, 0, 0, 0, 1090, 1091, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1114, 3, 160, 80, 0, 1093, 1094, 3, 10, 5, 0, 1094, 1095, 5, 68, 0, 0, 1095, 1096, 3, 342, 171, 0, 1096, 1114, 1, 0, 0, 0, 1097, 1114, 5, 18, 0, 0, 1098, 1114, 5, 19, 0, 0, 1099, 1114, 5, 20, 0, 0, 1100, 1114, 5, 83, 0, 0, 1101, 1114, 5, 14, 0, 0, 1102, 1114, 5, 60, 0, 0, 1103, 1114, 5, 45, 0, 0, 1104, 1114, 5, 46, 0, 0, 1105, 1114, 5, 39, 0, 0, 1106, 1114, 5, 61, 0, 0, 1107, 1114, 5, 78, 0, 0, 1108, 1114, 5, 39, 0, 0, 1109, 1114, 5, 30, 0, 0, 1110, 1114, 5, 81, 0, 0, 1111, 1114, 5, 13, 0, 0, 1112, 1114, 3, 162, 81, 0, 1113, 1090, 1, 0, 0, 0, 1113, 1093, 1, 0, 0, 0, 1113, 1097, 1, 0, 0, 0, 1113, 1098, 1, 0, 0, 0, 1113, 1099, 1, 0, 0, 0, 1113, 1100, 1, 0, 0, 0, 1113, 1101, 1, 0, 0, 0, 1113, 1102, 1, 0, 0, 0, 1113, 1103, 1, 0, 0, 0, 1113, 1104, 1, 0, 0, 0, 1113, 1105, 1, 0, 0, 0, 1113, 1106, 1, 0, 0, 0, 1113, 1107, 1, 0, 0, 0, 1113, 1108, 1, 0, 0, 0, 1113, 1109, 1, 0, 0, 0, 1113, 1110, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1113, 1112, 1, 0, 0, 0, 1114, 159, 1, 0, 0, 0, 1115, 1120, 3, 278, 139, 0, 1116, 1120, 3, 166, 83, 0, 1117, 1120, 3, 144, 72, 0, 1118, 1120, 3, 342, 171, 0, 1119, 1115, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1119, 1117, 1, 0, 0, 0, 1119, 1118, 1, 0, 0, 0, 1120, 161, 1, 0, 0, 0, 1121, 1122, 5, 26, 0, 0, 1122, 1125, 5, 85, 0, 0, 1123, 1126, 3, 90, 45, 0, 1124, 1126, 5, 13, 0, 0, 1125, 1123, 1, 0, 0, 0, 1125, 1124, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1128, 5, 86, 0, 0, 1128, 163, 1, 0, 0, 0, 1129, 1144, 3, 288, 144, 0, 1130, 1132, 3, 204, 102, 0, 1131, 1130, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, 0, 1132, 1134, 1, 0, 0, 0, 1133, 1135, 3, 10, 5, 0, 1134, 1133, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1145, 5, 132, 0, 0, 1137, 1145, 3, 342, 171, 0, 1138, 1140, 3, 10, 5, 0, 1139, 1141, 5, 68, 0, 0, 1140, 1139, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1143, 3, 342, 171, 0, 1143, 1145, 1, 0, 0, 0, 1144, 1131, 1, 0, 0, 0, 1144, 1137, 1, 0, 0, 0, 1144, 1138, 1, 0, 0, 0, 1145, 1152, 1, 0, 0, 0, 1146, 1148, 5, 33, 0, 0, 1147, 1149, 3, 10, 5, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1152, 5, 132, 0, 0, 1151, 1129, 1, 0, 0, 0, 1151, 1146, 1, 0, 0, 0, 1152, 165, 1, 0, 0, 0, 1153, 1154, 5, 132, 0, 0, 1154, 167, 1, 0, 0, 0, 1155, 1156, 3, 170, 85, 0, 1156, 1161, 5, 89, 0, 0, 1157, 1159, 3, 178, 89, 0, 1158, 1160, 5, 122, 0, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1162, 1, 0, 0, 0, 1161, 1157, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 1164, 5, 90, 0, 0, 1164, 169, 1, 0, 0, 0, 1165, 1167, 3, 174, 87, 0, 1166, 1168, 3, 204, 102, 0, 1167, 1166, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1173, 1, 0, 0, 0, 1169, 1171, 3, 10, 5, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1174, 5, 132, 0, 0, 1173, 1170, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1176, 1, 0, 0, 0, 1175, 1177, 3, 176, 88, 0, 1176, 1175, 1, 0, 0, 0, 1176, 1177, 1, 0, 0, 0, 1177, 171, 1, 0, 0, 0, 1178, 1180, 3, 174, 87, 0, 1179, 1181, 3, 204, 102, 0, 1180, 1179, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1184, 5, 132, 0, 0, 1183, 1185, 3, 176, 88, 0, 1184, 1183, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1187, 5, 128, 0, 0, 1187, 173, 1, 0, 0, 0, 1188, 1190, 5, 33, 0, 0, 1189, 1191, 7, 15, 0, 0, 1190, 1189, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 175, 1, 0, 0, 0, 1192, 1193, 5, 126, 0, 0, 1193, 1194, 3, 150, 75, 0, 1194, 177, 1, 0, 0, 0, 1195, 1200, 3, 180, 90, 0, 1196, 1197, 5, 122, 0, 0, 1197, 1199, 3, 180, 90, 0, 1198, 1196, 1, 0, 0, 0, 1199, 1202, 1, 0, 0, 0, 1200, 1198, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 179, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1203, 1206, 3, 182, 91, 0, 1204, 1205, 5, 101, 0, 0, 1205, 1207, 3, 92, 46, 0, 1206, 1204, 1, 0, 0, 0, 1206, 1207, 1, 0, 0, 0, 1207, 181, 1, 0, 0, 0, 1208, 1209, 5, 132, 0, 0, 1209, 183, 1, 0, 0, 0, 1210, 1213, 3, 186, 93, 0, 1211, 1213, 3, 190, 95, 0, 1212, 1210, 1, 0, 0, 0, 1212, 1211, 1, 0, 0, 0, 1213, 185, 1, 0, 0, 0, 1214, 1215, 5, 132, 0, 0, 1215, 187, 1, 0, 0, 0, 1216, 1218, 5, 44, 0, 0, 1217, 1216, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1222, 5, 48, 0, 0, 1220, 1223, 5, 132, 0, 0, 1221, 1223, 3, 186, 93, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1221, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1226, 5, 89, 0, 0, 1225, 1227, 3, 120, 60, 0, 1226, 1225, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1229, 5, 90, 0, 0, 1229, 189, 1, 0, 0, 0, 1230, 1231, 5, 132, 0, 0, 1231, 191, 1, 0, 0, 0, 1232, 1233, 5, 48, 0, 0, 1233, 1234, 5, 132, 0, 0, 1234, 1235, 5, 101, 0, 0, 1235, 1236, 3, 194, 97, 0, 1236, 1237, 5, 128, 0, 0, 1237, 193, 1, 0, 0, 0, 1238, 1240, 3, 10, 5, 0, 1239, 1238, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1242, 3, 184, 92, 0, 1242, 195, 1, 0, 0, 0, 1243, 1249, 5, 79, 0, 0, 1244, 1246, 5, 76, 0, 0, 1245, 1244, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1246, 1247, 1, 0, 0, 0, 1247, 1250, 3, 10, 5, 0, 1248, 1250, 5, 127, 0, 0, 1249, 1245, 1, 0, 0, 0, 1249, 1248, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1252, 3, 6, 3, 0, 1252, 1253, 5, 128, 0, 0, 1253, 197, 1, 0, 0, 0, 1254, 1256, 3, 204, 102, 0, 1255, 1254, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 5, 79, 0, 0, 1258, 1260, 5, 48, 0, 0, 1259, 1261, 3, 10, 5, 0, 1260, 1259, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1263, 3, 184, 92, 0, 1263, 1264, 5, 128, 0, 0, 1264, 199, 1, 0, 0, 0, 1265, 1266, 5, 12, 0, 0, 1266, 1267, 5, 85, 0, 0, 1267, 1268, 5, 4, 0, 0, 1268, 1269, 5, 86, 0, 0, 1269, 1270, 5, 128, 0, 0, 1270, 201, 1, 0, 0, 0, 1271, 1272, 5, 36, 0, 0, 1272, 1279, 5, 4, 0, 0, 1273, 1275, 5, 89, 0, 0, 1274, 1276, 3, 120, 60, 0, 1275, 1274, 1, 0, 0, 0, 1275, 1276, 1, 0, 0, 0, 1276, 1277, 1, 0, 0, 0, 1277, 1280, 5, 90, 0, 0, 1278, 1280, 3, 122, 61, 0, 1279, 1273, 1, 0, 0, 0, 1279, 1278, 1, 0, 0, 0, 1280, 203, 1, 0, 0, 0, 1281, 1283, 3, 206, 103, 0, 1282, 1281, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 205, 1, 0, 0, 0, 1286, 1287, 5, 87, 0, 0, 1287, 1289, 5, 87, 0, 0, 1288, 1290, 3, 210, 105, 0, 1289, 1288, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 5, 88, 0, 0, 1292, 1295, 5, 88, 0, 0, 1293, 1295, 3, 208, 104, 0, 1294, 1286, 1, 0, 0, 0, 1294, 1293, 1, 0, 0, 0, 1295, 207, 1, 0, 0, 0, 1296, 1297, 5, 10, 0, 0, 1297, 1300, 5, 85, 0, 0, 1298, 1301, 3, 246, 123, 0, 1299, 1301, 3, 92, 46, 0, 1300, 1298, 1, 0, 0, 0, 1300, 1299, 1, 0, 0, 0, 1301, 1303, 1, 0, 0, 0, 1302, 1304, 5, 131, 0, 0, 1303, 1302, 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1306, 5, 86, 0, 0, 1306, 209, 1, 0, 0, 0, 1307, 1312, 3, 212, 106, 0, 1308, 1309, 5, 122, 0, 0, 1309, 1311, 3, 212, 106, 0, 1310, 1308, 1, 0, 0, 0, 1311, 1314, 1, 0, 0, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1316, 1, 0, 0, 0, 1314, 1312, 1, 0, 0, 0, 1315, 1317, 5, 131, 0, 0, 1316, 1315, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1317, 211, 1, 0, 0, 0, 1318, 1319, 3, 214, 107, 0, 1319, 1320, 5, 127, 0, 0, 1320, 1322, 1, 0, 0, 0, 1321, 1318, 1, 0, 0, 0, 1321, 1322, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1325, 5, 132, 0, 0, 1324, 1326, 3, 216, 108, 0, 1325, 1324, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 213, 1, 0, 0, 0, 1327, 1328, 5, 132, 0, 0, 1328, 215, 1, 0, 0, 0, 1329, 1331, 5, 85, 0, 0, 1330, 1332, 3, 218, 109, 0, 1331, 1330, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1334, 5, 86, 0, 0, 1334, 217, 1, 0, 0, 0, 1335, 1337, 3, 220, 110, 0, 1336, 1335, 1, 0, 0, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 219, 1, 0, 0, 0, 1340, 1341, 5, 85, 0, 0, 1341, 1342, 3, 218, 109, 0, 1342, 1343, 5, 86, 0, 0, 1343, 1358, 1, 0, 0, 0, 1344, 1345, 5, 87, 0, 0, 1345, 1346, 3, 218, 109, 0, 1346, 1347, 5, 88, 0, 0, 1347, 1358, 1, 0, 0, 0, 1348, 1349, 5, 89, 0, 0, 1349, 1350, 3, 218, 109, 0, 1350, 1351, 5, 90, 0, 0, 1351, 1358, 1, 0, 0, 0, 1352, 1354, 8, 16, 0, 0, 1353, 1352, 1, 0, 0, 0, 1354, 1355, 1, 0, 0, 0, 1355, 1353, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1358, 1, 0, 0, 0, 1357, 1340, 1, 0, 0, 0, 1357, 1344, 1, 0, 0, 0, 1357, 1348, 1, 0, 0, 0, 1357, 1353, 1, 0, 0, 0, 1358, 221, 1, 0, 0, 0, 1359, 1364, 3, 224, 112, 0, 1360, 1361, 5, 122, 0, 0, 1361, 1363, 3, 224, 112, 0, 1362, 1360, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 223, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1369, 3, 226, 113, 0, 1368, 1370, 3, 268, 134, 0, 1369, 1368, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 225, 1, 0, 0, 0, 1371, 1377, 3, 228, 114, 0, 1372, 1373, 3, 230, 115, 0, 1373, 1374, 3, 232, 116, 0, 1374, 1375, 3, 234, 117, 0, 1375, 1377, 1, 0, 0, 0, 1376, 1371, 1, 0, 0, 0, 1376, 1372, 1, 0, 0, 0, 1377, 227, 1, 0, 0, 0, 1378, 1380, 3, 236, 118, 0, 1379, 1381, 5, 22, 0, 0, 1380, 1379, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1381, 1383, 1, 0, 0, 0, 1382, 1378, 1, 0, 0, 0, 1383, 1386, 1, 0, 0, 0, 1384, 1382, 1, 0, 0, 0, 1384, 1385, 1, 0, 0, 0, 1385, 1387, 1, 0, 0, 0, 1386, 1384, 1, 0, 0, 0, 1387, 1388, 3, 230, 115, 0, 1388, 229, 1, 0, 0, 0, 1389, 1390, 6, 115, -1, 0, 1390, 1392, 3, 244, 122, 0, 1391, 1393, 3, 204, 102, 0, 1392, 1391, 1, 0, 0, 0, 1392, 1393, 1, 0, 0, 0, 1393, 1399, 1, 0, 0, 0, 1394, 1395, 5, 85, 0, 0, 1395, 1396, 3, 228, 114, 0, 1396, 1397, 5, 86, 0, 0, 1397, 1399, 1, 0, 0, 0, 1398, 1389, 1, 0, 0, 0, 1398, 1394, 1, 0, 0, 0, 1399, 1414, 1, 0, 0, 0, 1400, 1410, 10, 2, 0, 0, 1401, 1411, 3, 232, 116, 0, 1402, 1404, 5, 87, 0, 0, 1403, 1405, 3, 92, 46, 0, 1404, 1403, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1406, 1, 0, 0, 0, 1406, 1408, 5, 88, 0, 0, 1407, 1409, 3, 204, 102, 0, 1408, 1407, 1, 0, 0, 0, 1408, 1409, 1, 0, 0, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1401, 1, 0, 0, 0, 1410, 1402, 1, 0, 0, 0, 1411, 1413, 1, 0, 0, 0, 1412, 1400, 1, 0, 0, 0, 1413, 1416, 1, 0, 0, 0, 1414, 1412, 1, 0, 0, 0, 1414, 1415, 1, 0, 0, 0, 1415, 231, 1, 0, 0, 0, 1416, 1414, 1, 0, 0, 0, 1417, 1419, 5, 85, 0, 0, 1418, 1420, 3, 258, 129, 0, 1419, 1418, 1, 0, 0, 0, 1419, 1420, 1, 0, 0, 0, 1420, 1421, 1, 0, 0, 0, 1421, 1423, 5, 86, 0, 0, 1422, 1424, 3, 238, 119, 0, 1423, 1422, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1426, 1, 0, 0, 0, 1425, 1427, 3, 242, 121, 0, 1426, 1425, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1429, 1, 0, 0, 0, 1428, 1430, 3, 370, 185, 0, 1429, 1428, 1, 0, 0, 0, 1429, 1430, 1, 0, 0, 0, 1430, 1432, 1, 0, 0, 0, 1431, 1433, 3, 204, 102, 0, 1432, 1431, 1, 0, 0, 0, 1432, 1433, 1, 0, 0, 0, 1433, 233, 1, 0, 0, 0, 1434, 1435, 5, 124, 0, 0, 1435, 1437, 3, 152, 76, 0, 1436, 1438, 3, 248, 124, 0, 1437, 1436, 1, 0, 0, 0, 1437, 1438, 1, 0, 0, 0, 1438, 235, 1, 0, 0, 0, 1439, 1441, 7, 17, 0, 0, 1440, 1442, 3, 204, 102, 0, 1441, 1440, 1, 0, 0, 0, 1441, 1442, 1, 0, 0, 0, 1442, 1454, 1, 0, 0, 0, 1443, 1445, 3, 10, 5, 0, 1444, 1443, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1448, 5, 93, 0, 0, 1447, 1449, 3, 204, 102, 0, 1448, 1447, 1, 0, 0, 0, 1448, 1449, 1, 0, 0, 0, 1449, 1451, 1, 0, 0, 0, 1450, 1452, 3, 238, 119, 0, 1451, 1450, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 1454, 1, 0, 0, 0, 1453, 1439, 1, 0, 0, 0, 1453, 1444, 1, 0, 0, 0, 1454, 237, 1, 0, 0, 0, 1455, 1457, 3, 240, 120, 0, 1456, 1455, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, 1456, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 239, 1, 0, 0, 0, 1460, 1461, 7, 18, 0, 0, 1461, 241, 1, 0, 0, 0, 1462, 1463, 7, 17, 0, 0, 1463, 243, 1, 0, 0, 0, 1464, 1466, 5, 131, 0, 0, 1465, 1464, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 3, 4, 2, 0, 1468, 245, 1, 0, 0, 0, 1469, 1471, 3, 150, 75, 0, 1470, 1472, 3, 248, 124, 0, 1471, 1470, 1, 0, 0, 0, 1471, 1472, 1, 0, 0, 0, 1472, 247, 1, 0, 0, 0, 1473, 1482, 3, 250, 125, 0, 1474, 1476, 3, 252, 126, 0, 1475, 1474, 1, 0, 0, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1477, 1, 0, 0, 0, 1477, 1478, 3, 232, 116, 0, 1478, 1479, 3, 234, 117, 0, 1479, 1482, 1, 0, 0, 0, 1480, 1482, 3, 254, 127, 0, 1481, 1473, 1, 0, 0, 0, 1481, 1475, 1, 0, 0, 0, 1481, 1480, 1, 0, 0, 0, 1482, 249, 1, 0, 0, 0, 1483, 1485, 3, 236, 118, 0, 1484, 1483, 1, 0, 0, 0, 1485, 1488, 1, 0, 0, 0, 1486, 1484, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1491, 1, 0, 0, 0, 1488, 1486, 1, 0, 0, 0, 1489, 1492, 3, 252, 126, 0, 1490, 1492, 3, 236, 118, 0, 1491, 1489, 1, 0, 0, 0, 1491, 1490, 1, 0, 0, 0, 1492, 251, 1, 0, 0, 0, 1493, 1499, 3, 232, 116, 0, 1494, 1495, 5, 85, 0, 0, 1495, 1496, 3, 250, 125, 0, 1496, 1497, 5, 86, 0, 0, 1497, 1499, 1, 0, 0, 0, 1498, 1493, 1, 0, 0, 0, 1498, 1494, 1, 0, 0, 0, 1499, 1511, 1, 0, 0, 0, 1500, 1510, 3, 232, 116, 0, 1501, 1503, 5, 87, 0, 0, 1502, 1504, 3, 92, 46, 0, 1503, 1502, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1507, 5, 88, 0, 0, 1506, 1508, 3, 204, 102, 0, 1507, 1506, 1, 0, 0, 0, 1507, 1508, 1, 0, 0, 0, 1508, 1510, 1, 0, 0, 0, 1509, 1500, 1, 0, 0, 0, 1509, 1501, 1, 0, 0, 0, 1510, 1513, 1, 0, 0, 0, 1511, 1509, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 253, 1, 0, 0, 0, 1513, 1511, 1, 0, 0, 0, 1514, 1516, 3, 236, 118, 0, 1515, 1514, 1, 0, 0, 0, 1516, 1519, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1520, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1520, 1521, 3, 256, 128, 0, 1521, 255, 1, 0, 0, 0, 1522, 1534, 5, 131, 0, 0, 1523, 1533, 3, 232, 116, 0, 1524, 1526, 5, 87, 0, 0, 1525, 1527, 3, 92, 46, 0, 1526, 1525, 1, 0, 0, 0, 1526, 1527, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1530, 5, 88, 0, 0, 1529, 1531, 3, 204, 102, 0, 1530, 1529, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1533, 1, 0, 0, 0, 1532, 1523, 1, 0, 0, 0, 1532, 1524, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1532, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 257, 1, 0, 0, 0, 1536, 1534, 1, 0, 0, 0, 1537, 1542, 3, 260, 130, 0, 1538, 1540, 5, 122, 0, 0, 1539, 1538, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1543, 5, 131, 0, 0, 1542, 1539, 1, 0, 0, 0, 1542, 1543, 1, 0, 0, 0, 1543, 259, 1, 0, 0, 0, 1544, 1549, 3, 262, 131, 0, 1545, 1546, 5, 122, 0, 0, 1546, 1548, 3, 262, 131, 0, 1547, 1545, 1, 0, 0, 0, 1548, 1551, 1, 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 261, 1, 0, 0, 0, 1551, 1549, 1, 0, 0, 0, 1552, 1554, 3, 204, 102, 0, 1553, 1552, 1, 0, 0, 0, 1553, 1554, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1560, 3, 138, 69, 0, 1556, 1561, 3, 226, 113, 0, 1557, 1559, 3, 248, 124, 0, 1558, 1557, 1, 0, 0, 0, 1558, 1559, 1, 0, 0, 0, 1559, 1561, 1, 0, 0, 0, 1560, 1556, 1, 0, 0, 0, 1560, 1558, 1, 0, 0, 0, 1561, 1564, 1, 0, 0, 0, 1562, 1563, 5, 101, 0, 0, 1563, 1565, 3, 272, 136, 0, 1564, 1562, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 263, 1, 0, 0, 0, 1566, 1568, 3, 204, 102, 0, 1567, 1566, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1570, 1, 0, 0, 0, 1569, 1571, 3, 138, 69, 0, 1570, 1569, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1574, 3, 226, 113, 0, 1573, 1575, 3, 298, 149, 0, 1574, 1573, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1577, 3, 266, 133, 0, 1577, 265, 1, 0, 0, 0, 1578, 1580, 3, 322, 161, 0, 1579, 1578, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 1587, 3, 100, 50, 0, 1582, 1587, 3, 360, 180, 0, 1583, 1584, 5, 101, 0, 0, 1584, 1585, 7, 19, 0, 0, 1585, 1587, 5, 128, 0, 0, 1586, 1579, 1, 0, 0, 0, 1586, 1582, 1, 0, 0, 0, 1586, 1583, 1, 0, 0, 0, 1587, 267, 1, 0, 0, 0, 1588, 1594, 3, 270, 135, 0, 1589, 1590, 5, 85, 0, 0, 1590, 1591, 3, 34, 17, 0, 1591, 1592, 5, 86, 0, 0, 1592, 1594, 1, 0, 0, 0, 1593, 1588, 1, 0, 0, 0, 1593, 1589, 1, 0, 0, 0, 1594, 269, 1, 0, 0, 0, 1595, 1596, 5, 101, 0, 0, 1596, 1599, 3, 272, 136, 0, 1597, 1599, 3, 276, 138, 0, 1598, 1595, 1, 0, 0, 0, 1598, 1597, 1, 0, 0, 0, 1599, 271, 1, 0, 0, 0, 1600, 1603, 3, 86, 43, 0, 1601, 1603, 3, 276, 138, 0, 1602, 1600, 1, 0, 0, 0, 1602, 1601, 1, 0, 0, 0, 1603, 273, 1, 0, 0, 0, 1604, 1606, 3, 272, 136, 0, 1605, 1607, 5, 131, 0, 0, 1606, 1605, 1, 0, 0, 0, 1606, 1607, 1, 0, 0, 0, 1607, 1615, 1, 0, 0, 0, 1608, 1609, 5, 122, 0, 0, 1609, 1611, 3, 272, 136, 0, 1610, 1612, 5, 131, 0, 0, 1611, 1610, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1614, 1, 0, 0, 0, 1613, 1608, 1, 0, 0, 0, 1614, 1617, 1, 0, 0, 0, 1615, 1613, 1, 0, 0, 0, 1615, 1616, 1, 0, 0, 0, 1616, 275, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, 1618, 1623, 5, 89, 0, 0, 1619, 1621, 3, 274, 137, 0, 1620, 1622, 5, 122, 0, 0, 1621, 1620, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 1624, 1, 0, 0, 0, 1623, 1619, 1, 0, 0, 0, 1623, 1624, 1, 0, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 1626, 5, 90, 0, 0, 1626, 277, 1, 0, 0, 0, 1627, 1630, 5, 132, 0, 0, 1628, 1630, 3, 342, 171, 0, 1629, 1627, 1, 0, 0, 0, 1629, 1628, 1, 0, 0, 0, 1630, 279, 1, 0, 0, 0, 1631, 1632, 3, 282, 141, 0, 1632, 1634, 5, 89, 0, 0, 1633, 1635, 3, 290, 145, 0, 1634, 1633, 1, 0, 0, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1637, 5, 90, 0, 0, 1637, 281, 1, 0, 0, 0, 1638, 1640, 3, 288, 144, 0, 1639, 1641, 3, 204, 102, 0, 1640, 1639, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1646, 1, 0, 0, 0, 1642, 1644, 3, 284, 142, 0, 1643, 1645, 3, 286, 143, 0, 1644, 1643, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 1647, 1, 0, 0, 0, 1646, 1642, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 1649, 1, 0, 0, 0, 1648, 1650, 3, 304, 152, 0, 1649, 1648, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1662, 1, 0, 0, 0, 1651, 1653, 5, 77, 0, 0, 1652, 1654, 3, 204, 102, 0, 1653, 1652, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1659, 1, 0, 0, 0, 1655, 1657, 3, 284, 142, 0, 1656, 1658, 3, 286, 143, 0, 1657, 1656, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1660, 1, 0, 0, 0, 1659, 1655, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 1662, 1, 0, 0, 0, 1661, 1638, 1, 0, 0, 0, 1661, 1651, 1, 0, 0, 0, 1662, 283, 1, 0, 0, 0, 1663, 1665, 3, 10, 5, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 1667, 3, 278, 139, 0, 1667, 285, 1, 0, 0, 0, 1668, 1669, 5, 38, 0, 0, 1669, 287, 1, 0, 0, 0, 1670, 1671, 7, 15, 0, 0, 1671, 289, 1, 0, 0, 0, 1672, 1677, 3, 292, 146, 0, 1673, 1674, 3, 314, 157, 0, 1674, 1675, 5, 126, 0, 0, 1675, 1677, 1, 0, 0, 0, 1676, 1672, 1, 0, 0, 0, 1676, 1673, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 291, 1, 0, 0, 0, 1680, 1682, 3, 204, 102, 0, 1681, 1680, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1684, 1, 0, 0, 0, 1683, 1685, 3, 138, 69, 0, 1684, 1683, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1687, 1, 0, 0, 0, 1686, 1688, 3, 294, 147, 0, 1687, 1686, 1, 0, 0, 0, 1687, 1688, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1697, 5, 128, 0, 0, 1690, 1697, 3, 264, 132, 0, 1691, 1697, 3, 196, 98, 0, 1692, 1697, 3, 130, 65, 0, 1693, 1697, 3, 334, 167, 0, 1694, 1697, 3, 126, 63, 0, 1695, 1697, 3, 132, 66, 0, 1696, 1681, 1, 0, 0, 0, 1696, 1690, 1, 0, 0, 0, 1696, 1691, 1, 0, 0, 0, 1696, 1692, 1, 0, 0, 0, 1696, 1693, 1, 0, 0, 0, 1696, 1694, 1, 0, 0, 0, 1696, 1695, 1, 0, 0, 0, 1697, 293, 1, 0, 0, 0, 1698, 1703, 3, 296, 148, 0, 1699, 1700, 5, 122, 0, 0, 1700, 1702, 3, 296, 148, 0, 1701, 1699, 1, 0, 0, 0, 1702, 1705, 1, 0, 0, 0, 1703, 1701, 1, 0, 0, 0, 1703, 1704, 1, 0, 0, 0, 1704, 295, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1706, 1715, 3, 226, 113, 0, 1707, 1716, 3, 298, 149, 0, 1708, 1709, 4, 148, 7, 0, 1709, 1716, 3, 302, 151, 0, 1710, 1711, 4, 148, 8, 0, 1711, 1712, 3, 298, 149, 0, 1712, 1713, 3, 302, 151, 0, 1713, 1716, 1, 0, 0, 0, 1714, 1716, 3, 270, 135, 0, 1715, 1707, 1, 0, 0, 0, 1715, 1708, 1, 0, 0, 0, 1715, 1710, 1, 0, 0, 0, 1715, 1714, 1, 0, 0, 0, 1716, 1727, 1, 0, 0, 0, 1717, 1727, 3, 226, 113, 0, 1718, 1720, 5, 132, 0, 0, 1719, 1718, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1722, 1, 0, 0, 0, 1721, 1723, 3, 204, 102, 0, 1722, 1721, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 5, 126, 0, 0, 1725, 1727, 3, 92, 46, 0, 1726, 1706, 1, 0, 0, 0, 1726, 1717, 1, 0, 0, 0, 1726, 1719, 1, 0, 0, 0, 1727, 297, 1, 0, 0, 0, 1728, 1730, 3, 300, 150, 0, 1729, 1728, 1, 0, 0, 0, 1730, 1731, 1, 0, 0, 0, 1731, 1729, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 299, 1, 0, 0, 0, 1733, 1734, 7, 20, 0, 0, 1734, 301, 1, 0, 0, 0, 1735, 1736, 5, 101, 0, 0, 1736, 1737, 5, 1, 0, 0, 1737, 303, 1, 0, 0, 0, 1738, 1739, 5, 126, 0, 0, 1739, 1740, 3, 306, 153, 0, 1740, 305, 1, 0, 0, 0, 1741, 1743, 3, 308, 154, 0, 1742, 1744, 5, 131, 0, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1752, 1, 0, 0, 0, 1745, 1746, 5, 122, 0, 0, 1746, 1748, 3, 308, 154, 0, 1747, 1749, 5, 131, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1751, 1, 0, 0, 0, 1750, 1745, 1, 0, 0, 0, 1751, 1754, 1, 0, 0, 0, 1752, 1750, 1, 0, 0, 0, 1752, 1753, 1, 0, 0, 0, 1753, 307, 1, 0, 0, 0, 1754, 1752, 1, 0, 0, 0, 1755, 1757, 3, 204, 102, 0, 1756, 1755, 1, 0, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 1770, 1, 0, 0, 0, 1758, 1771, 3, 312, 156, 0, 1759, 1761, 5, 80, 0, 0, 1760, 1762, 3, 314, 157, 0, 1761, 1760, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 1771, 3, 312, 156, 0, 1764, 1766, 3, 314, 157, 0, 1765, 1767, 5, 80, 0, 0, 1766, 1765, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1769, 3, 312, 156, 0, 1769, 1771, 1, 0, 0, 0, 1770, 1758, 1, 0, 0, 0, 1770, 1759, 1, 0, 0, 0, 1770, 1764, 1, 0, 0, 0, 1771, 309, 1, 0, 0, 0, 1772, 1774, 3, 10, 5, 0, 1773, 1772, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1775, 1, 0, 0, 0, 1775, 1778, 3, 278, 139, 0, 1776, 1778, 3, 162, 81, 0, 1777, 1773, 1, 0, 0, 0, 1777, 1776, 1, 0, 0, 0, 1778, 311, 1, 0, 0, 0, 1779, 1780, 3, 310, 155, 0, 1780, 313, 1, 0, 0, 0, 1781, 1782, 7, 21, 0, 0, 1782, 315, 1, 0, 0, 0, 1783, 1784, 5, 52, 0, 0, 1784, 1785, 3, 318, 159, 0, 1785, 317, 1, 0, 0, 0, 1786, 1788, 3, 150, 75, 0, 1787, 1789, 3, 320, 160, 0, 1788, 1787, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 319, 1, 0, 0, 0, 1790, 1792, 3, 236, 118, 0, 1791, 1793, 3, 320, 160, 0, 1792, 1791, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 321, 1, 0, 0, 0, 1794, 1795, 5, 126, 0, 0, 1795, 1796, 3, 324, 162, 0, 1796, 323, 1, 0, 0, 0, 1797, 1799, 3, 326, 163, 0, 1798, 1800, 5, 131, 0, 0, 1799, 1798, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 1808, 1, 0, 0, 0, 1801, 1802, 5, 122, 0, 0, 1802, 1804, 3, 326, 163, 0, 1803, 1805, 5, 131, 0, 0, 1804, 1803, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1801, 1, 0, 0, 0, 1807, 1810, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 325, 1, 0, 0, 0, 1810, 1808, 1, 0, 0, 0, 1811, 1818, 3, 328, 164, 0, 1812, 1814, 5, 85, 0, 0, 1813, 1815, 3, 34, 17, 0, 1814, 1813, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1819, 5, 86, 0, 0, 1817, 1819, 3, 276, 138, 0, 1818, 1812, 1, 0, 0, 0, 1818, 1817, 1, 0, 0, 0, 1819, 327, 1, 0, 0, 0, 1820, 1823, 3, 310, 155, 0, 1821, 1823, 5, 132, 0, 0, 1822, 1820, 1, 0, 0, 0, 1822, 1821, 1, 0, 0, 0, 1823, 329, 1, 0, 0, 0, 1824, 1825, 5, 52, 0, 0, 1825, 1826, 3, 378, 189, 0, 1826, 331, 1, 0, 0, 0, 1827, 1831, 5, 52, 0, 0, 1828, 1829, 5, 4, 0, 0, 1829, 1832, 5, 132, 0, 0, 1830, 1832, 5, 140, 0, 0, 1831, 1828, 1, 0, 0, 0, 1831, 1830, 1, 0, 0, 0, 1832, 333, 1, 0, 0, 0, 1833, 1834, 5, 68, 0, 0, 1834, 1835, 5, 102, 0, 0, 1835, 1836, 3, 336, 168, 0, 1836, 1837, 5, 103, 0, 0, 1837, 1838, 3, 122, 61, 0, 1838, 335, 1, 0, 0, 0, 1839, 1844, 3, 338, 169, 0, 1840, 1841, 5, 122, 0, 0, 1841, 1843, 3, 338, 169, 0, 1842, 1840, 1, 0, 0, 0, 1843, 1846, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 337, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1847, 1850, 3, 340, 170, 0, 1848, 1850, 3, 262, 131, 0, 1849, 1847, 1, 0, 0, 0, 1849, 1848, 1, 0, 0, 0, 1850, 339, 1, 0, 0, 0, 1851, 1852, 5, 68, 0, 0, 1852, 1853, 5, 102, 0, 0, 1853, 1854, 3, 336, 168, 0, 1854, 1855, 5, 103, 0, 0, 1855, 1857, 1, 0, 0, 0, 1856, 1851, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 1858, 1, 0, 0, 0, 1858, 1861, 5, 21, 0, 0, 1859, 1861, 5, 76, 0, 0, 1860, 1856, 1, 0, 0, 0, 1860, 1859, 1, 0, 0, 0, 1861, 1873, 1, 0, 0, 0, 1862, 1864, 5, 131, 0, 0, 1863, 1862, 1, 0, 0, 0, 1863, 1864, 1, 0, 0, 0, 1864, 1866, 1, 0, 0, 0, 1865, 1867, 5, 132, 0, 0, 1866, 1865, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 1874, 1, 0, 0, 0, 1868, 1870, 5, 132, 0, 0, 1869, 1868, 1, 0, 0, 0, 1869, 1870, 1, 0, 0, 0, 1870, 1871, 1, 0, 0, 0, 1871, 1872, 5, 101, 0, 0, 1872, 1874, 3, 246, 123, 0, 1873, 1863, 1, 0, 0, 0, 1873, 1869, 1, 0, 0, 0, 1874, 341, 1, 0, 0, 0, 1875, 1876, 3, 346, 173, 0, 1876, 1878, 5, 102, 0, 0, 1877, 1879, 3, 348, 174, 0, 1878, 1877, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 1881, 5, 103, 0, 0, 1881, 343, 1, 0, 0, 0, 1882, 1894, 3, 342, 171, 0, 1883, 1886, 3, 330, 165, 0, 1884, 1886, 3, 332, 166, 0, 1885, 1883, 1, 0, 0, 0, 1885, 1884, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1889, 5, 102, 0, 0, 1888, 1890, 3, 348, 174, 0, 1889, 1888, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1891, 1, 0, 0, 0, 1891, 1892, 5, 103, 0, 0, 1892, 1894, 1, 0, 0, 0, 1893, 1882, 1, 0, 0, 0, 1893, 1885, 1, 0, 0, 0, 1894, 345, 1, 0, 0, 0, 1895, 1896, 5, 132, 0, 0, 1896, 347, 1, 0, 0, 0, 1897, 1899, 3, 350, 175, 0, 1898, 1900, 5, 131, 0, 0, 1899, 1898, 1, 0, 0, 0, 1899, 1900, 1, 0, 0, 0, 1900, 1908, 1, 0, 0, 0, 1901, 1902, 5, 122, 0, 0, 1902, 1904, 3, 350, 175, 0, 1903, 1905, 5, 131, 0, 0, 1904, 1903, 1, 0, 0, 0, 1904, 1905, 1, 0, 0, 0, 1905, 1907, 1, 0, 0, 0, 1906, 1901, 1, 0, 0, 0, 1907, 1910, 1, 0, 0, 0, 1908, 1906, 1, 0, 0, 0, 1908, 1909, 1, 0, 0, 0, 1909, 349, 1, 0, 0, 0, 1910, 1908, 1, 0, 0, 0, 1911, 1915, 3, 246, 123, 0, 1912, 1915, 3, 92, 46, 0, 1913, 1915, 3, 4, 2, 0, 1914, 1911, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1913, 1, 0, 0, 0, 1915, 351, 1, 0, 0, 0, 1916, 1917, 5, 76, 0, 0, 1917, 1923, 3, 10, 5, 0, 1918, 1924, 5, 132, 0, 0, 1919, 1921, 5, 68, 0, 0, 1920, 1919, 1, 0, 0, 0, 1920, 1921, 1, 0, 0, 0, 1921, 1922, 1, 0, 0, 0, 1922, 1924, 3, 342, 171, 0, 1923, 1918, 1, 0, 0, 0, 1923, 1920, 1, 0, 0, 0, 1924, 353, 1, 0, 0, 0, 1925, 1927, 5, 36, 0, 0, 1926, 1925, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 5, 68, 0, 0, 1929, 1930, 3, 122, 61, 0, 1930, 355, 1, 0, 0, 0, 1931, 1932, 5, 68, 0, 0, 1932, 1933, 5, 102, 0, 0, 1933, 1934, 5, 103, 0, 0, 1934, 1935, 3, 122, 61, 0, 1935, 357, 1, 0, 0, 0, 1936, 1937, 5, 73, 0, 0, 1937, 1938, 3, 100, 50, 0, 1938, 1939, 3, 362, 181, 0, 1939, 359, 1, 0, 0, 0, 1940, 1942, 5, 73, 0, 0, 1941, 1943, 3, 322, 161, 0, 1942, 1941, 1, 0, 0, 0, 1942, 1943, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1945, 3, 100, 50, 0, 1945, 1946, 3, 362, 181, 0, 1946, 361, 1, 0, 0, 0, 1947, 1949, 3, 364, 182, 0, 1948, 1947, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 363, 1, 0, 0, 0, 1952, 1953, 5, 17, 0, 0, 1953, 1954, 5, 85, 0, 0, 1954, 1955, 3, 366, 183, 0, 1955, 1956, 5, 86, 0, 0, 1956, 1957, 3, 100, 50, 0, 1957, 365, 1, 0, 0, 0, 1958, 1960, 3, 204, 102, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1964, 3, 150, 75, 0, 1962, 1965, 3, 226, 113, 0, 1963, 1965, 3, 248, 124, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1968, 5, 131, 0, 0, 1967, 1959, 1, 0, 0, 0, 1967, 1966, 1, 0, 0, 0, 1968, 367, 1, 0, 0, 0, 1969, 1971, 5, 71, 0, 0, 1970, 1972, 3, 86, 43, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 369, 1, 0, 0, 0, 1973, 1976, 3, 372, 186, 0, 1974, 1976, 3, 376, 188, 0, 1975, 1973, 1, 0, 0, 0, 1975, 1974, 1, 0, 0, 0, 1976, 371, 1, 0, 0, 0, 1977, 1978, 5, 71, 0, 0, 1978, 1980, 5, 85, 0, 0, 1979, 1981, 3, 374, 187, 0, 1980, 1979, 1, 0, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1982, 1, 0, 0, 0, 1982, 1983, 5, 86, 0, 0, 1983, 373, 1, 0, 0, 0, 1984, 1986, 3, 246, 123, 0, 1985, 1987, 5, 131, 0, 0, 1986, 1985, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1995, 1, 0, 0, 0, 1988, 1989, 5, 122, 0, 0, 1989, 1991, 3, 246, 123, 0, 1990, 1992, 5, 131, 0, 0, 1991, 1990, 1, 0, 0, 0, 1991, 1992, 1, 0, 0, 0, 1992, 1994, 1, 0, 0, 0, 1993, 1988, 1, 0, 0, 0, 1994, 1997, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 375, 1, 0, 0, 0, 1997, 1995, 1, 0, 0, 0, 1998, 1999, 5, 50, 0, 0, 1999, 2000, 5, 85, 0, 0, 2000, 2001, 3, 92, 46, 0, 2001, 2002, 5, 86, 0, 0, 2002, 2005, 1, 0, 0, 0, 2003, 2005, 5, 50, 0, 0, 2004, 1998, 1, 0, 0, 0, 2004, 2003, 1, 0, 0, 0, 2005, 377, 1, 0, 0, 0, 2006, 2009, 5, 49, 0, 0, 2007, 2008, 5, 87, 0, 0, 2008, 2010, 5, 88, 0, 0, 2009, 2007, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2058, 1, 0, 0, 0, 2011, 2014, 5, 28, 0, 0, 2012, 2013, 5, 87, 0, 0, 2013, 2015, 5, 88, 0, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2058, 1, 0, 0, 0, 2016, 2058, 5, 91, 0, 0, 2017, 2058, 5, 92, 0, 0, 2018, 2058, 5, 93, 0, 0, 2019, 2058, 5, 94, 0, 0, 2020, 2058, 5, 95, 0, 0, 2021, 2058, 5, 96, 0, 0, 2022, 2058, 5, 97, 0, 0, 2023, 2058, 5, 98, 0, 0, 2024, 2058, 5, 99, 0, 0, 2025, 2058, 5, 100, 0, 0, 2026, 2058, 5, 101, 0, 0, 2027, 2058, 5, 103, 0, 0, 2028, 2058, 5, 102, 0, 0, 2029, 2058, 5, 117, 0, 0, 2030, 2058, 5, 104, 0, 0, 2031, 2058, 5, 105, 0, 0, 2032, 2058, 5, 106, 0, 0, 2033, 2058, 5, 108, 0, 0, 2034, 2058, 5, 109, 0, 0, 2035, 2058, 5, 110, 0, 0, 2036, 2058, 5, 111, 0, 0, 2037, 2038, 5, 102, 0, 0, 2038, 2058, 5, 102, 0, 0, 2039, 2040, 5, 103, 0, 0, 2040, 2058, 5, 103, 0, 0, 2041, 2058, 5, 113, 0, 0, 2042, 2058, 5, 112, 0, 0, 2043, 2058, 5, 114, 0, 0, 2044, 2058, 5, 115, 0, 0, 2045, 2058, 5, 116, 0, 0, 2046, 2058, 5, 118, 0, 0, 2047, 2058, 5, 119, 0, 0, 2048, 2058, 5, 120, 0, 0, 2049, 2058, 5, 121, 0, 0, 2050, 2058, 5, 122, 0, 0, 2051, 2058, 5, 123, 0, 0, 2052, 2058, 5, 124, 0, 0, 2053, 2054, 5, 85, 0, 0, 2054, 2058, 5, 86, 0, 0, 2055, 2056, 5, 87, 0, 0, 2056, 2058, 5, 88, 0, 0, 2057, 2006, 1, 0, 0, 0, 2057, 2011, 1, 0, 0, 0, 2057, 2016, 1, 0, 0, 0, 2057, 2017, 1, 0, 0, 0, 2057, 2018, 1, 0, 0, 0, 2057, 2019, 1, 0, 0, 0, 2057, 2020, 1, 0, 0, 0, 2057, 2021, 1, 0, 0, 0, 2057, 2022, 1, 0, 0, 0, 2057, 2023, 1, 0, 0, 0, 2057, 2024, 1, 0, 0, 0, 2057, 2025, 1, 0, 0, 0, 2057, 2026, 1, 0, 0, 0, 2057, 2027, 1, 0, 0, 0, 2057, 2028, 1, 0, 0, 0, 2057, 2029, 1, 0, 0, 0, 2057, 2030, 1, 0, 0, 0, 2057, 2031, 1, 0, 0, 0, 2057, 2032, 1, 0, 0, 0, 2057, 2033, 1, 0, 0, 0, 2057, 2034, 1, 0, 0, 0, 2057, 2035, 1, 0, 0, 0, 2057, 2036, 1, 0, 0, 0, 2057, 2037, 1, 0, 0, 0, 2057, 2039, 1, 0, 0, 0, 2057, 2041, 1, 0, 0, 0, 2057, 2042, 1, 0, 0, 0, 2057, 2043, 1, 0, 0, 0, 2057, 2044, 1, 0, 0, 0, 2057, 2045, 1, 0, 0, 0, 2057, 2046, 1, 0, 0, 0, 2057, 2047, 1, 0, 0, 0, 2057, 2048, 1, 0, 0, 0, 2057, 2049, 1, 0, 0, 0, 2057, 2050, 1, 0, 0, 0, 2057, 2051, 1, 0, 0, 0, 2057, 2052, 1, 0, 0, 0, 2057, 2053, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2058, 379, 1, 0, 0, 0, 2059, 2060, 7, 22, 0, 0, 2060, 381, 1, 0, 0, 0, 291, 383, 390, 399, 403, 412, 415, 419, 427, 434, 437, 442, 447, 453, 461, 463, 472, 476, 480, 483, 487, 490, 497, 501, 504, 507, 510, 516, 520, 524, 538, 542, 548, 555, 561, 565, 569, 571, 579, 584, 597, 604, 616, 626, 631, 635, 642, 645, 653, 657, 660, 667, 674, 678, 683, 687, 690, 695, 710, 717, 725, 733, 742, 749, 756, 764, 772, 780, 788, 796, 804, 813, 821, 830, 838, 846, 848, 851, 857, 863, 869, 876, 885, 893, 897, 904, 906, 926, 930, 936, 941, 945, 948, 955, 962, 966, 975, 986, 996, 1001, 1008, 1011, 1016, 1021, 1042, 1047, 1050, 1061, 1067, 1072, 1075, 1080, 1083, 1090, 1113, 1119, 1125, 1131, 1134, 1140, 1144, 1148, 1151, 1159, 1161, 1167, 1170, 1173, 1176, 1180, 1184, 1190, 1200, 1206, 1212, 1217, 1222, 1226, 1239, 1245, 1249, 1255, 1260, 1275, 1279, 1284, 1289, 1294, 1300, 1303, 1312, 1316, 1321, 1325, 1331, 1338, 1355, 1357, 1364, 1369, 1376, 1380, 1384, 1392, 1398, 1404, 1408, 1410, 1414, 1419, 1423, 1426, 1429, 1432, 1437, 1441, 1444, 1448, 1451, 1453, 1458, 1465, 1471, 1475, 1481, 1486, 1491, 1498, 1503, 1507, 1509, 1511, 1517, 1526, 1530, 1532, 1534, 1539, 1542, 1549, 1553, 1558, 1560, 1564, 1567, 1570, 1574, 1579, 1586, 1593, 1598, 1602, 1606, 1611, 1615, 1621, 1623, 1629, 1634, 1640, 1644, 1646, 1649, 1653, 1657, 1659, 1661, 1664, 1676, 1678, 1681, 1684, 1687, 1696, 1703, 1715, 1719, 1722, 1726, 1731, 1743, 1748, 1752, 1756, 1761, 1766, 1770, 1773, 1777, 1788, 1792, 1799, 1804, 1808, 1814, 1818, 1822, 1831, 1844, 1849, 1856, 1860, 1863, 1866, 1869, 1873, 1878, 1885, 1889, 1893, 1899, 1904, 1908, 1914, 1920, 1923, 1926, 1942, 1950, 1959, 1964, 1967, 1971, 1975, 1980, 1986, 1991, 1995, 2004, 2009, 2014, 2057] \ No newline at end of file diff --git a/csim/cpp/CPP14Parser.py b/csim/cpp/CPP14Parser.py new file mode 100644 index 0000000..8e10b3f --- /dev/null +++ b/csim/cpp/CPP14Parser.py @@ -0,0 +1,15777 @@ +# Generated from CPP14Parser.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +if "." in __name__: + from .CPP14ParserBase import CPP14ParserBase +else: + from CPP14ParserBase import CPP14ParserBase + +def serializedATN(): + return [ + 4,1,145,2062,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,1,0,3,0,384, + 8,0,1,0,1,0,1,1,4,1,389,8,1,11,1,12,1,390,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,3,1,400,8,1,1,2,1,2,3,2,404,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,3,3,413,8,3,1,3,3,3,416,8,3,1,4,1,4,3,4,420,8,4,1,4,1,4,1,5,1, + 5,1,5,1,5,3,5,428,8,5,1,5,1,5,1,5,1,5,1,5,3,5,435,8,5,1,5,3,5,438, + 8,5,1,5,5,5,441,8,5,10,5,12,5,444,9,5,1,6,1,6,3,6,448,8,6,1,6,1, + 6,1,7,1,7,3,7,454,8,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,462,8,8,3,8,464, + 8,8,1,9,1,9,1,10,1,10,1,10,5,10,471,8,10,10,10,12,10,474,9,10,1, + 10,3,10,477,8,10,1,11,1,11,3,11,481,8,11,1,12,3,12,484,8,12,1,12, + 1,12,3,12,488,8,12,1,13,3,13,491,8,13,1,13,1,13,1,13,1,14,1,14,3, + 14,498,8,14,1,14,1,14,3,14,502,8,14,1,14,3,14,505,8,14,1,14,3,14, + 508,8,14,1,14,3,14,511,8,14,1,15,1,15,1,15,1,15,3,15,517,8,15,1, + 15,1,15,3,15,521,8,15,1,15,1,15,3,15,525,8,15,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,539,8,15,1,15,1,15, + 3,15,543,8,15,1,15,1,15,1,15,1,15,3,15,549,8,15,1,15,1,15,1,15,1, + 15,1,15,3,15,556,8,15,1,15,1,15,1,15,1,15,3,15,562,8,15,1,15,1,15, + 3,15,566,8,15,1,15,1,15,5,15,570,8,15,10,15,12,15,573,9,15,1,16, + 1,16,1,17,1,17,1,18,3,18,580,8,18,1,18,1,18,1,18,3,18,585,8,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,598,8, + 18,1,19,1,19,1,19,1,19,1,19,3,19,605,8,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,3,19,617,8,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,3,19,627,8,19,1,20,1,20,1,21,3,21,632,8,21,1,21, + 1,21,3,21,636,8,21,1,21,1,21,1,21,1,21,1,21,3,21,643,8,21,1,21,3, + 21,646,8,21,1,22,1,22,1,22,1,22,1,23,1,23,3,23,654,8,23,1,24,1,24, + 3,24,658,8,24,1,24,3,24,661,8,24,1,25,1,25,1,25,1,25,1,25,3,25,668, + 8,25,1,25,1,25,1,25,1,25,1,25,3,25,675,8,25,5,25,677,8,25,10,25, + 12,25,680,9,25,1,26,1,26,3,26,684,8,26,1,26,1,26,3,26,688,8,26,1, + 27,3,27,691,8,27,1,27,1,27,1,27,3,27,696,8,27,1,27,1,27,1,28,1,28, + 1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,3,29,711,8,29,1,30, + 1,30,1,30,5,30,716,8,30,10,30,12,30,719,9,30,1,31,1,31,1,31,5,31, + 724,8,31,10,31,12,31,727,9,31,1,32,1,32,1,32,5,32,732,8,32,10,32, + 12,32,735,9,32,1,33,1,33,1,33,1,33,5,33,741,8,33,10,33,12,33,744, + 9,33,1,34,1,34,1,34,1,34,3,34,750,8,34,1,35,1,35,1,35,5,35,755,8, + 35,10,35,12,35,758,9,35,1,36,1,36,1,36,5,36,763,8,36,10,36,12,36, + 766,9,36,1,37,1,37,1,37,5,37,771,8,37,10,37,12,37,774,9,37,1,38, + 1,38,1,38,5,38,779,8,38,10,38,12,38,782,9,38,1,39,1,39,1,39,5,39, + 787,8,39,10,39,12,39,790,9,39,1,40,1,40,1,40,5,40,795,8,40,10,40, + 12,40,798,9,40,1,41,1,41,1,41,5,41,803,8,41,10,41,12,41,806,9,41, + 1,42,1,42,1,42,1,42,1,42,1,42,3,42,814,8,42,1,43,1,43,1,43,1,43, + 1,43,1,43,3,43,822,8,43,1,44,1,44,1,45,1,45,1,45,5,45,829,8,45,10, + 45,12,45,832,9,45,1,46,1,46,1,47,1,47,1,47,3,47,839,8,47,1,47,1, + 47,1,47,1,47,1,47,1,47,3,47,847,8,47,3,47,849,8,47,1,48,3,48,852, + 8,48,1,48,1,48,1,48,1,48,3,48,858,8,48,1,48,1,48,1,48,1,49,3,49, + 864,8,49,1,49,1,49,1,50,1,50,3,50,870,8,50,1,50,1,50,1,51,4,51,875, + 8,51,11,51,12,51,876,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,886, + 8,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,894,8,52,1,53,1,53,3,53, + 898,8,53,1,53,1,53,1,53,1,53,1,53,3,53,905,8,53,3,53,907,8,53,1, + 54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1, + 54,1,54,1,54,1,54,1,54,3,54,927,8,54,1,54,1,54,3,54,931,8,54,1,54, + 1,54,1,54,1,54,3,54,937,8,54,1,54,1,54,1,54,3,54,942,8,54,1,55,1, + 55,3,55,946,8,55,1,56,3,56,949,8,56,1,56,1,56,1,56,1,57,1,57,3,57, + 956,8,57,1,58,1,58,1,58,1,58,1,58,3,58,963,8,58,1,58,1,58,3,58,967, + 8,58,1,58,1,58,1,59,1,59,1,60,4,60,974,8,60,11,60,12,60,975,1,61, + 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,3,61,987,8,61,1,62,1,62, + 1,62,1,62,1,62,1,62,1,62,1,62,3,62,997,8,62,1,63,1,63,1,63,3,63, + 1002,8,63,1,63,1,63,1,63,1,63,1,64,3,64,1009,8,64,1,64,3,64,1012, + 8,64,1,64,1,64,1,64,3,64,1017,8,64,1,64,1,64,1,64,3,64,1022,8,64, + 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,67,1,67,1,67, + 1,68,1,68,1,68,1,68,1,68,1,68,3,68,1043,8,68,1,69,4,69,1046,8,69, + 11,69,12,69,1047,1,69,3,69,1051,8,69,1,70,1,70,1,71,1,71,1,72,1, + 72,1,73,1,73,1,73,3,73,1062,8,73,1,74,1,74,1,74,1,74,3,74,1068,8, + 74,1,75,4,75,1071,8,75,11,75,12,75,1072,1,75,3,75,1076,8,75,1,76, + 4,76,1079,8,76,11,76,12,76,1080,1,76,3,76,1084,8,76,1,77,1,77,1, + 78,1,78,1,79,3,79,1091,8,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, + 79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, + 79,3,79,1114,8,79,1,80,1,80,1,80,1,80,3,80,1120,8,80,1,81,1,81,1, + 81,1,81,3,81,1126,8,81,1,81,1,81,1,82,1,82,3,82,1132,8,82,1,82,3, + 82,1135,8,82,1,82,1,82,1,82,1,82,3,82,1141,8,82,1,82,1,82,3,82,1145, + 8,82,1,82,1,82,3,82,1149,8,82,1,82,3,82,1152,8,82,1,83,1,83,1,84, + 1,84,1,84,1,84,3,84,1160,8,84,3,84,1162,8,84,1,84,1,84,1,85,1,85, + 3,85,1168,8,85,1,85,3,85,1171,8,85,1,85,3,85,1174,8,85,1,85,3,85, + 1177,8,85,1,86,1,86,3,86,1181,8,86,1,86,1,86,3,86,1185,8,86,1,86, + 1,86,1,87,1,87,3,87,1191,8,87,1,88,1,88,1,88,1,89,1,89,1,89,5,89, + 1199,8,89,10,89,12,89,1202,9,89,1,90,1,90,1,90,3,90,1207,8,90,1, + 91,1,91,1,92,1,92,3,92,1213,8,92,1,93,1,93,1,94,3,94,1218,8,94,1, + 94,1,94,1,94,3,94,1223,8,94,1,94,1,94,3,94,1227,8,94,1,94,1,94,1, + 95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,97,3,97,1240,8,97,1,97,1, + 97,1,98,1,98,3,98,1246,8,98,1,98,1,98,3,98,1250,8,98,1,98,1,98,1, + 98,1,99,3,99,1256,8,99,1,99,1,99,1,99,3,99,1261,8,99,1,99,1,99,1, + 99,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,3, + 101,1276,8,101,1,101,1,101,3,101,1280,8,101,1,102,4,102,1283,8,102, + 11,102,12,102,1284,1,103,1,103,1,103,3,103,1290,8,103,1,103,1,103, + 1,103,3,103,1295,8,103,1,104,1,104,1,104,1,104,3,104,1301,8,104, + 1,104,3,104,1304,8,104,1,104,1,104,1,105,1,105,1,105,5,105,1311, + 8,105,10,105,12,105,1314,9,105,1,105,3,105,1317,8,105,1,106,1,106, + 1,106,3,106,1322,8,106,1,106,1,106,3,106,1326,8,106,1,107,1,107, + 1,108,1,108,3,108,1332,8,108,1,108,1,108,1,109,4,109,1337,8,109, + 11,109,12,109,1338,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,4,110,1354,8,110,11,110,12,110,1355, + 3,110,1358,8,110,1,111,1,111,1,111,5,111,1363,8,111,10,111,12,111, + 1366,9,111,1,112,1,112,3,112,1370,8,112,1,113,1,113,1,113,1,113, + 1,113,3,113,1377,8,113,1,114,1,114,3,114,1381,8,114,5,114,1383,8, + 114,10,114,12,114,1386,9,114,1,114,1,114,1,115,1,115,1,115,3,115, + 1393,8,115,1,115,1,115,1,115,1,115,3,115,1399,8,115,1,115,1,115, + 1,115,1,115,3,115,1405,8,115,1,115,1,115,3,115,1409,8,115,3,115, + 1411,8,115,5,115,1413,8,115,10,115,12,115,1416,9,115,1,116,1,116, + 3,116,1420,8,116,1,116,1,116,3,116,1424,8,116,1,116,3,116,1427,8, + 116,1,116,3,116,1430,8,116,1,116,3,116,1433,8,116,1,117,1,117,1, + 117,3,117,1438,8,117,1,118,1,118,3,118,1442,8,118,1,118,3,118,1445, + 8,118,1,118,1,118,3,118,1449,8,118,1,118,3,118,1452,8,118,3,118, + 1454,8,118,1,119,4,119,1457,8,119,11,119,12,119,1458,1,120,1,120, + 1,121,1,121,1,122,3,122,1466,8,122,1,122,1,122,1,123,1,123,3,123, + 1472,8,123,1,124,1,124,3,124,1476,8,124,1,124,1,124,1,124,1,124, + 3,124,1482,8,124,1,125,5,125,1485,8,125,10,125,12,125,1488,9,125, + 1,125,1,125,3,125,1492,8,125,1,126,1,126,1,126,1,126,1,126,3,126, + 1499,8,126,1,126,1,126,1,126,3,126,1504,8,126,1,126,1,126,3,126, + 1508,8,126,5,126,1510,8,126,10,126,12,126,1513,9,126,1,127,5,127, + 1516,8,127,10,127,12,127,1519,9,127,1,127,1,127,1,128,1,128,1,128, + 1,128,3,128,1527,8,128,1,128,1,128,3,128,1531,8,128,5,128,1533,8, + 128,10,128,12,128,1536,9,128,1,129,1,129,3,129,1540,8,129,1,129, + 3,129,1543,8,129,1,130,1,130,1,130,5,130,1548,8,130,10,130,12,130, + 1551,9,130,1,131,3,131,1554,8,131,1,131,1,131,1,131,3,131,1559,8, + 131,3,131,1561,8,131,1,131,1,131,3,131,1565,8,131,1,132,3,132,1568, + 8,132,1,132,3,132,1571,8,132,1,132,1,132,3,132,1575,8,132,1,132, + 1,132,1,133,3,133,1580,8,133,1,133,1,133,1,133,1,133,1,133,3,133, + 1587,8,133,1,134,1,134,1,134,1,134,1,134,3,134,1594,8,134,1,135, + 1,135,1,135,3,135,1599,8,135,1,136,1,136,3,136,1603,8,136,1,137, + 1,137,3,137,1607,8,137,1,137,1,137,1,137,3,137,1612,8,137,5,137, + 1614,8,137,10,137,12,137,1617,9,137,1,138,1,138,1,138,3,138,1622, + 8,138,3,138,1624,8,138,1,138,1,138,1,139,1,139,3,139,1630,8,139, + 1,140,1,140,1,140,3,140,1635,8,140,1,140,1,140,1,141,1,141,3,141, + 1641,8,141,1,141,1,141,3,141,1645,8,141,3,141,1647,8,141,1,141,3, + 141,1650,8,141,1,141,1,141,3,141,1654,8,141,1,141,1,141,3,141,1658, + 8,141,3,141,1660,8,141,3,141,1662,8,141,1,142,3,142,1665,8,142,1, + 142,1,142,1,143,1,143,1,144,1,144,1,145,1,145,1,145,1,145,4,145, + 1677,8,145,11,145,12,145,1678,1,146,3,146,1682,8,146,1,146,3,146, + 1685,8,146,1,146,3,146,1688,8,146,1,146,1,146,1,146,1,146,1,146, + 1,146,1,146,3,146,1697,8,146,1,147,1,147,1,147,5,147,1702,8,147, + 10,147,12,147,1705,9,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148, + 1,148,1,148,3,148,1716,8,148,1,148,1,148,3,148,1720,8,148,1,148, + 3,148,1723,8,148,1,148,1,148,3,148,1727,8,148,1,149,4,149,1730,8, + 149,11,149,12,149,1731,1,150,1,150,1,151,1,151,1,151,1,152,1,152, + 1,152,1,153,1,153,3,153,1744,8,153,1,153,1,153,1,153,3,153,1749, + 8,153,5,153,1751,8,153,10,153,12,153,1754,9,153,1,154,3,154,1757, + 8,154,1,154,1,154,1,154,3,154,1762,8,154,1,154,1,154,1,154,3,154, + 1767,8,154,1,154,1,154,3,154,1771,8,154,1,155,3,155,1774,8,155,1, + 155,1,155,3,155,1778,8,155,1,156,1,156,1,157,1,157,1,158,1,158,1, + 158,1,159,1,159,3,159,1789,8,159,1,160,1,160,3,160,1793,8,160,1, + 161,1,161,1,161,1,162,1,162,3,162,1800,8,162,1,162,1,162,1,162,3, + 162,1805,8,162,5,162,1807,8,162,10,162,12,162,1810,9,162,1,163,1, + 163,1,163,3,163,1815,8,163,1,163,1,163,3,163,1819,8,163,1,164,1, + 164,3,164,1823,8,164,1,165,1,165,1,165,1,166,1,166,1,166,1,166,3, + 166,1832,8,166,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1, + 168,5,168,1843,8,168,10,168,12,168,1846,9,168,1,169,1,169,3,169, + 1850,8,169,1,170,1,170,1,170,1,170,1,170,3,170,1857,8,170,1,170, + 1,170,3,170,1861,8,170,1,170,3,170,1864,8,170,1,170,3,170,1867,8, + 170,1,170,3,170,1870,8,170,1,170,1,170,3,170,1874,8,170,1,171,1, + 171,1,171,3,171,1879,8,171,1,171,1,171,1,172,1,172,1,172,3,172,1886, + 8,172,1,172,1,172,3,172,1890,8,172,1,172,1,172,3,172,1894,8,172, + 1,173,1,173,1,174,1,174,3,174,1900,8,174,1,174,1,174,1,174,3,174, + 1905,8,174,5,174,1907,8,174,10,174,12,174,1910,9,174,1,175,1,175, + 1,175,3,175,1915,8,175,1,176,1,176,1,176,1,176,3,176,1921,8,176, + 1,176,3,176,1924,8,176,1,177,3,177,1927,8,177,1,177,1,177,1,177, + 1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,180,1,180, + 3,180,1943,8,180,1,180,1,180,1,180,1,181,4,181,1949,8,181,11,181, + 12,181,1950,1,182,1,182,1,182,1,182,1,182,1,182,1,183,3,183,1960, + 8,183,1,183,1,183,1,183,3,183,1965,8,183,1,183,3,183,1968,8,183, + 1,184,1,184,3,184,1972,8,184,1,185,1,185,3,185,1976,8,185,1,186, + 1,186,1,186,3,186,1981,8,186,1,186,1,186,1,187,1,187,3,187,1987, + 8,187,1,187,1,187,1,187,3,187,1992,8,187,5,187,1994,8,187,10,187, + 12,187,1997,9,187,1,188,1,188,1,188,1,188,1,188,1,188,3,188,2005, + 8,188,1,189,1,189,1,189,3,189,2010,8,189,1,189,1,189,1,189,3,189, + 2015,8,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,3,189, + 2058,8,189,1,190,1,190,1,190,1,1047,4,10,30,50,230,191,0,2,4,6,8, + 10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52, + 54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96, + 98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130, + 132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162, + 164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194, + 196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226, + 228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258, + 260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290, + 292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322, + 324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354, + 356,358,360,362,364,366,368,370,372,374,376,378,380,0,23,2,0,97, + 97,101,101,4,0,24,24,31,31,58,58,65,65,2,0,124,124,129,129,1,0,120, + 121,2,0,91,93,97,100,2,0,123,123,130,130,1,0,93,95,1,0,91,92,2,0, + 102,103,116,117,1,0,114,115,2,0,101,101,104,113,5,0,36,36,47,47, + 57,57,63,63,70,70,3,0,34,34,44,44,80,80,2,0,46,46,60,60,2,0,61,61, + 78,78,2,0,21,21,66,66,1,0,85,90,2,0,97,97,118,118,2,0,22,22,82,82, + 1,0,27,28,2,0,38,38,53,53,1,0,54,56,1,0,1,7,2285,0,383,1,0,0,0,2, + 399,1,0,0,0,4,403,1,0,0,0,6,415,1,0,0,0,8,417,1,0,0,0,10,423,1,0, + 0,0,12,445,1,0,0,0,14,451,1,0,0,0,16,463,1,0,0,0,18,465,1,0,0,0, + 20,467,1,0,0,0,22,480,1,0,0,0,24,487,1,0,0,0,26,490,1,0,0,0,28,495, + 1,0,0,0,30,542,1,0,0,0,32,574,1,0,0,0,34,576,1,0,0,0,36,597,1,0, + 0,0,38,626,1,0,0,0,40,628,1,0,0,0,42,631,1,0,0,0,44,647,1,0,0,0, + 46,651,1,0,0,0,48,660,1,0,0,0,50,662,1,0,0,0,52,687,1,0,0,0,54,690, + 1,0,0,0,56,699,1,0,0,0,58,710,1,0,0,0,60,712,1,0,0,0,62,720,1,0, + 0,0,64,728,1,0,0,0,66,736,1,0,0,0,68,749,1,0,0,0,70,751,1,0,0,0, + 72,759,1,0,0,0,74,767,1,0,0,0,76,775,1,0,0,0,78,783,1,0,0,0,80,791, + 1,0,0,0,82,799,1,0,0,0,84,807,1,0,0,0,86,821,1,0,0,0,88,823,1,0, + 0,0,90,825,1,0,0,0,92,833,1,0,0,0,94,848,1,0,0,0,96,851,1,0,0,0, + 98,863,1,0,0,0,100,867,1,0,0,0,102,874,1,0,0,0,104,893,1,0,0,0,106, + 906,1,0,0,0,108,941,1,0,0,0,110,945,1,0,0,0,112,948,1,0,0,0,114, + 955,1,0,0,0,116,966,1,0,0,0,118,970,1,0,0,0,120,973,1,0,0,0,122, + 986,1,0,0,0,124,996,1,0,0,0,126,998,1,0,0,0,128,1021,1,0,0,0,130, + 1023,1,0,0,0,132,1031,1,0,0,0,134,1033,1,0,0,0,136,1042,1,0,0,0, + 138,1045,1,0,0,0,140,1052,1,0,0,0,142,1054,1,0,0,0,144,1056,1,0, + 0,0,146,1061,1,0,0,0,148,1067,1,0,0,0,150,1070,1,0,0,0,152,1078, + 1,0,0,0,154,1085,1,0,0,0,156,1087,1,0,0,0,158,1113,1,0,0,0,160,1119, + 1,0,0,0,162,1121,1,0,0,0,164,1151,1,0,0,0,166,1153,1,0,0,0,168,1155, + 1,0,0,0,170,1165,1,0,0,0,172,1178,1,0,0,0,174,1188,1,0,0,0,176,1192, + 1,0,0,0,178,1195,1,0,0,0,180,1203,1,0,0,0,182,1208,1,0,0,0,184,1212, + 1,0,0,0,186,1214,1,0,0,0,188,1217,1,0,0,0,190,1230,1,0,0,0,192,1232, + 1,0,0,0,194,1239,1,0,0,0,196,1243,1,0,0,0,198,1255,1,0,0,0,200,1265, + 1,0,0,0,202,1271,1,0,0,0,204,1282,1,0,0,0,206,1294,1,0,0,0,208,1296, + 1,0,0,0,210,1307,1,0,0,0,212,1321,1,0,0,0,214,1327,1,0,0,0,216,1329, + 1,0,0,0,218,1336,1,0,0,0,220,1357,1,0,0,0,222,1359,1,0,0,0,224,1367, + 1,0,0,0,226,1376,1,0,0,0,228,1384,1,0,0,0,230,1398,1,0,0,0,232,1417, + 1,0,0,0,234,1434,1,0,0,0,236,1453,1,0,0,0,238,1456,1,0,0,0,240,1460, + 1,0,0,0,242,1462,1,0,0,0,244,1465,1,0,0,0,246,1469,1,0,0,0,248,1481, + 1,0,0,0,250,1486,1,0,0,0,252,1498,1,0,0,0,254,1517,1,0,0,0,256,1522, + 1,0,0,0,258,1537,1,0,0,0,260,1544,1,0,0,0,262,1553,1,0,0,0,264,1567, + 1,0,0,0,266,1586,1,0,0,0,268,1593,1,0,0,0,270,1598,1,0,0,0,272,1602, + 1,0,0,0,274,1604,1,0,0,0,276,1618,1,0,0,0,278,1629,1,0,0,0,280,1631, + 1,0,0,0,282,1661,1,0,0,0,284,1664,1,0,0,0,286,1668,1,0,0,0,288,1670, + 1,0,0,0,290,1676,1,0,0,0,292,1696,1,0,0,0,294,1698,1,0,0,0,296,1726, + 1,0,0,0,298,1729,1,0,0,0,300,1733,1,0,0,0,302,1735,1,0,0,0,304,1738, + 1,0,0,0,306,1741,1,0,0,0,308,1756,1,0,0,0,310,1777,1,0,0,0,312,1779, + 1,0,0,0,314,1781,1,0,0,0,316,1783,1,0,0,0,318,1786,1,0,0,0,320,1790, + 1,0,0,0,322,1794,1,0,0,0,324,1797,1,0,0,0,326,1811,1,0,0,0,328,1822, + 1,0,0,0,330,1824,1,0,0,0,332,1827,1,0,0,0,334,1833,1,0,0,0,336,1839, + 1,0,0,0,338,1849,1,0,0,0,340,1860,1,0,0,0,342,1875,1,0,0,0,344,1893, + 1,0,0,0,346,1895,1,0,0,0,348,1897,1,0,0,0,350,1914,1,0,0,0,352,1916, + 1,0,0,0,354,1926,1,0,0,0,356,1931,1,0,0,0,358,1936,1,0,0,0,360,1940, + 1,0,0,0,362,1948,1,0,0,0,364,1952,1,0,0,0,366,1967,1,0,0,0,368,1969, + 1,0,0,0,370,1975,1,0,0,0,372,1977,1,0,0,0,374,1984,1,0,0,0,376,2004, + 1,0,0,0,378,2057,1,0,0,0,380,2059,1,0,0,0,382,384,3,120,60,0,383, + 382,1,0,0,0,383,384,1,0,0,0,384,385,1,0,0,0,385,386,5,0,0,1,386, + 1,1,0,0,0,387,389,3,380,190,0,388,387,1,0,0,0,389,390,1,0,0,0,390, + 388,1,0,0,0,390,391,1,0,0,0,391,400,1,0,0,0,392,400,5,69,0,0,393, + 394,5,85,0,0,394,395,3,90,45,0,395,396,5,86,0,0,396,400,1,0,0,0, + 397,400,3,4,2,0,398,400,3,12,6,0,399,388,1,0,0,0,399,392,1,0,0,0, + 399,393,1,0,0,0,399,397,1,0,0,0,399,398,1,0,0,0,400,3,1,0,0,0,401, + 404,3,6,3,0,402,404,3,8,4,0,403,401,1,0,0,0,403,402,1,0,0,0,404, + 5,1,0,0,0,405,416,5,132,0,0,406,416,3,330,165,0,407,416,3,316,158, + 0,408,416,3,332,166,0,409,412,5,99,0,0,410,413,3,278,139,0,411,413, + 3,162,81,0,412,410,1,0,0,0,412,411,1,0,0,0,413,416,1,0,0,0,414,416, + 3,344,172,0,415,405,1,0,0,0,415,406,1,0,0,0,415,407,1,0,0,0,415, + 408,1,0,0,0,415,409,1,0,0,0,415,414,1,0,0,0,416,7,1,0,0,0,417,419, + 3,10,5,0,418,420,5,68,0,0,419,418,1,0,0,0,419,420,1,0,0,0,420,421, + 1,0,0,0,421,422,3,6,3,0,422,9,1,0,0,0,423,427,6,5,-1,0,424,428,3, + 160,80,0,425,428,3,184,92,0,426,428,3,162,81,0,427,424,1,0,0,0,427, + 425,1,0,0,0,427,426,1,0,0,0,427,428,1,0,0,0,428,429,1,0,0,0,429, + 430,5,127,0,0,430,442,1,0,0,0,431,437,10,1,0,0,432,438,5,132,0,0, + 433,435,5,68,0,0,434,433,1,0,0,0,434,435,1,0,0,0,435,436,1,0,0,0, + 436,438,3,342,171,0,437,432,1,0,0,0,437,434,1,0,0,0,438,439,1,0, + 0,0,439,441,5,127,0,0,440,431,1,0,0,0,441,444,1,0,0,0,442,440,1, + 0,0,0,442,443,1,0,0,0,443,11,1,0,0,0,444,442,1,0,0,0,445,447,3,14, + 7,0,446,448,3,28,14,0,447,446,1,0,0,0,447,448,1,0,0,0,448,449,1, + 0,0,0,449,450,3,100,50,0,450,13,1,0,0,0,451,453,5,87,0,0,452,454, + 3,16,8,0,453,452,1,0,0,0,453,454,1,0,0,0,454,455,1,0,0,0,455,456, + 5,88,0,0,456,15,1,0,0,0,457,464,3,20,10,0,458,461,3,18,9,0,459,460, + 5,122,0,0,460,462,3,20,10,0,461,459,1,0,0,0,461,462,1,0,0,0,462, + 464,1,0,0,0,463,457,1,0,0,0,463,458,1,0,0,0,464,17,1,0,0,0,465,466, + 7,0,0,0,466,19,1,0,0,0,467,472,3,22,11,0,468,469,5,122,0,0,469,471, + 3,22,11,0,470,468,1,0,0,0,471,474,1,0,0,0,472,470,1,0,0,0,472,473, + 1,0,0,0,473,476,1,0,0,0,474,472,1,0,0,0,475,477,5,131,0,0,476,475, + 1,0,0,0,476,477,1,0,0,0,477,21,1,0,0,0,478,481,3,24,12,0,479,481, + 3,26,13,0,480,478,1,0,0,0,480,479,1,0,0,0,481,23,1,0,0,0,482,484, + 5,97,0,0,483,482,1,0,0,0,483,484,1,0,0,0,484,485,1,0,0,0,485,488, + 5,132,0,0,486,488,5,69,0,0,487,483,1,0,0,0,487,486,1,0,0,0,488,25, + 1,0,0,0,489,491,5,97,0,0,490,489,1,0,0,0,490,491,1,0,0,0,491,492, + 1,0,0,0,492,493,5,132,0,0,493,494,3,268,134,0,494,27,1,0,0,0,495, + 497,5,85,0,0,496,498,3,258,129,0,497,496,1,0,0,0,497,498,1,0,0,0, + 498,499,1,0,0,0,499,501,5,86,0,0,500,502,5,47,0,0,501,500,1,0,0, + 0,501,502,1,0,0,0,502,504,1,0,0,0,503,505,3,370,185,0,504,503,1, + 0,0,0,504,505,1,0,0,0,505,507,1,0,0,0,506,508,3,204,102,0,507,506, + 1,0,0,0,507,508,1,0,0,0,508,510,1,0,0,0,509,511,3,234,117,0,510, + 509,1,0,0,0,510,511,1,0,0,0,511,29,1,0,0,0,512,513,6,15,-1,0,513, + 543,3,2,1,0,514,517,3,158,79,0,515,517,3,352,176,0,516,514,1,0,0, + 0,516,515,1,0,0,0,517,524,1,0,0,0,518,520,5,85,0,0,519,521,3,34, + 17,0,520,519,1,0,0,0,520,521,1,0,0,0,521,522,1,0,0,0,522,525,5,86, + 0,0,523,525,3,276,138,0,524,518,1,0,0,0,524,523,1,0,0,0,525,543, + 1,0,0,0,526,527,7,1,0,0,527,528,5,102,0,0,528,529,3,246,123,0,529, + 530,5,103,0,0,530,531,5,85,0,0,531,532,3,90,45,0,532,533,5,86,0, + 0,533,543,1,0,0,0,534,535,3,32,16,0,535,538,5,85,0,0,536,539,3,90, + 45,0,537,539,3,246,123,0,538,536,1,0,0,0,538,537,1,0,0,0,539,540, + 1,0,0,0,540,541,5,86,0,0,541,543,1,0,0,0,542,512,1,0,0,0,542,516, + 1,0,0,0,542,526,1,0,0,0,542,534,1,0,0,0,543,571,1,0,0,0,544,545, + 10,7,0,0,545,548,5,87,0,0,546,549,3,90,45,0,547,549,3,276,138,0, + 548,546,1,0,0,0,548,547,1,0,0,0,549,550,1,0,0,0,550,551,5,88,0,0, + 551,570,1,0,0,0,552,553,10,6,0,0,553,555,5,85,0,0,554,556,3,34,17, + 0,555,554,1,0,0,0,555,556,1,0,0,0,556,557,1,0,0,0,557,570,5,86,0, + 0,558,559,10,4,0,0,559,565,7,2,0,0,560,562,5,68,0,0,561,560,1,0, + 0,0,561,562,1,0,0,0,562,563,1,0,0,0,563,566,3,4,2,0,564,566,3,36, + 18,0,565,561,1,0,0,0,565,564,1,0,0,0,566,570,1,0,0,0,567,568,10, + 3,0,0,568,570,7,3,0,0,569,544,1,0,0,0,569,552,1,0,0,0,569,558,1, + 0,0,0,569,567,1,0,0,0,570,573,1,0,0,0,571,569,1,0,0,0,571,572,1, + 0,0,0,572,31,1,0,0,0,573,571,1,0,0,0,574,575,5,75,0,0,575,33,1,0, + 0,0,576,577,3,274,137,0,577,35,1,0,0,0,578,580,3,10,5,0,579,578, + 1,0,0,0,579,580,1,0,0,0,580,584,1,0,0,0,581,582,3,160,80,0,582,583, + 5,127,0,0,583,585,1,0,0,0,584,581,1,0,0,0,584,585,1,0,0,0,585,586, + 1,0,0,0,586,587,5,99,0,0,587,598,3,160,80,0,588,589,3,10,5,0,589, + 590,5,68,0,0,590,591,3,342,171,0,591,592,5,127,0,0,592,593,5,99, + 0,0,593,594,3,160,80,0,594,598,1,0,0,0,595,596,5,99,0,0,596,598, + 3,162,81,0,597,579,1,0,0,0,597,588,1,0,0,0,597,595,1,0,0,0,598,37, + 1,0,0,0,599,627,3,30,15,0,600,605,5,120,0,0,601,605,5,121,0,0,602, + 605,3,40,20,0,603,605,5,62,0,0,604,600,1,0,0,0,604,601,1,0,0,0,604, + 602,1,0,0,0,604,603,1,0,0,0,605,606,1,0,0,0,606,627,3,38,19,0,607, + 616,5,62,0,0,608,609,5,85,0,0,609,610,3,246,123,0,610,611,5,86,0, + 0,611,617,1,0,0,0,612,613,5,131,0,0,613,614,5,85,0,0,614,615,5,132, + 0,0,615,617,5,86,0,0,616,608,1,0,0,0,616,612,1,0,0,0,617,627,1,0, + 0,0,618,619,5,11,0,0,619,620,5,85,0,0,620,621,3,246,123,0,621,622, + 5,86,0,0,622,627,1,0,0,0,623,627,3,56,28,0,624,627,3,42,21,0,625, + 627,3,54,27,0,626,599,1,0,0,0,626,604,1,0,0,0,626,607,1,0,0,0,626, + 618,1,0,0,0,626,623,1,0,0,0,626,624,1,0,0,0,626,625,1,0,0,0,627, + 39,1,0,0,0,628,629,7,4,0,0,629,41,1,0,0,0,630,632,5,127,0,0,631, + 630,1,0,0,0,631,632,1,0,0,0,632,633,1,0,0,0,633,635,5,49,0,0,634, + 636,3,44,22,0,635,634,1,0,0,0,635,636,1,0,0,0,636,642,1,0,0,0,637, + 643,3,46,23,0,638,639,5,85,0,0,639,640,3,246,123,0,640,641,5,86, + 0,0,641,643,1,0,0,0,642,637,1,0,0,0,642,638,1,0,0,0,643,645,1,0, + 0,0,644,646,3,52,26,0,645,644,1,0,0,0,645,646,1,0,0,0,646,43,1,0, + 0,0,647,648,5,85,0,0,648,649,3,34,17,0,649,650,5,86,0,0,650,45,1, + 0,0,0,651,653,3,150,75,0,652,654,3,48,24,0,653,652,1,0,0,0,653,654, + 1,0,0,0,654,47,1,0,0,0,655,657,3,236,118,0,656,658,3,48,24,0,657, + 656,1,0,0,0,657,658,1,0,0,0,658,661,1,0,0,0,659,661,3,50,25,0,660, + 655,1,0,0,0,660,659,1,0,0,0,661,49,1,0,0,0,662,663,6,25,-1,0,663, + 664,5,87,0,0,664,665,3,90,45,0,665,667,5,88,0,0,666,668,3,204,102, + 0,667,666,1,0,0,0,667,668,1,0,0,0,668,678,1,0,0,0,669,670,10,1,0, + 0,670,671,5,87,0,0,671,672,3,92,46,0,672,674,5,88,0,0,673,675,3, + 204,102,0,674,673,1,0,0,0,674,675,1,0,0,0,675,677,1,0,0,0,676,669, + 1,0,0,0,677,680,1,0,0,0,678,676,1,0,0,0,678,679,1,0,0,0,679,51,1, + 0,0,0,680,678,1,0,0,0,681,683,5,85,0,0,682,684,3,34,17,0,683,682, + 1,0,0,0,683,684,1,0,0,0,684,685,1,0,0,0,685,688,5,86,0,0,686,688, + 3,276,138,0,687,681,1,0,0,0,687,686,1,0,0,0,688,53,1,0,0,0,689,691, + 5,127,0,0,690,689,1,0,0,0,690,691,1,0,0,0,691,692,1,0,0,0,692,695, + 5,28,0,0,693,694,5,87,0,0,694,696,5,88,0,0,695,693,1,0,0,0,695,696, + 1,0,0,0,696,697,1,0,0,0,697,698,3,58,29,0,698,55,1,0,0,0,699,700, + 5,50,0,0,700,701,5,85,0,0,701,702,3,90,45,0,702,703,5,86,0,0,703, + 57,1,0,0,0,704,711,3,38,19,0,705,706,5,85,0,0,706,707,3,246,123, + 0,707,708,5,86,0,0,708,709,3,58,29,0,709,711,1,0,0,0,710,704,1,0, + 0,0,710,705,1,0,0,0,711,59,1,0,0,0,712,717,3,58,29,0,713,714,7,5, + 0,0,714,716,3,58,29,0,715,713,1,0,0,0,716,719,1,0,0,0,717,715,1, + 0,0,0,717,718,1,0,0,0,718,61,1,0,0,0,719,717,1,0,0,0,720,725,3,60, + 30,0,721,722,7,6,0,0,722,724,3,60,30,0,723,721,1,0,0,0,724,727,1, + 0,0,0,725,723,1,0,0,0,725,726,1,0,0,0,726,63,1,0,0,0,727,725,1,0, + 0,0,728,733,3,62,31,0,729,730,7,7,0,0,730,732,3,62,31,0,731,729, + 1,0,0,0,732,735,1,0,0,0,733,731,1,0,0,0,733,734,1,0,0,0,734,65,1, + 0,0,0,735,733,1,0,0,0,736,742,3,64,32,0,737,738,3,68,34,0,738,739, + 3,64,32,0,739,741,1,0,0,0,740,737,1,0,0,0,741,744,1,0,0,0,742,740, + 1,0,0,0,742,743,1,0,0,0,743,67,1,0,0,0,744,742,1,0,0,0,745,746,5, + 103,0,0,746,750,5,103,0,0,747,748,5,102,0,0,748,750,5,102,0,0,749, + 745,1,0,0,0,749,747,1,0,0,0,750,69,1,0,0,0,751,756,3,66,33,0,752, + 753,7,8,0,0,753,755,3,66,33,0,754,752,1,0,0,0,755,758,1,0,0,0,756, + 754,1,0,0,0,756,757,1,0,0,0,757,71,1,0,0,0,758,756,1,0,0,0,759,764, + 3,70,35,0,760,761,7,9,0,0,761,763,3,70,35,0,762,760,1,0,0,0,763, + 766,1,0,0,0,764,762,1,0,0,0,764,765,1,0,0,0,765,73,1,0,0,0,766,764, + 1,0,0,0,767,772,3,72,36,0,768,769,5,97,0,0,769,771,3,72,36,0,770, + 768,1,0,0,0,771,774,1,0,0,0,772,770,1,0,0,0,772,773,1,0,0,0,773, + 75,1,0,0,0,774,772,1,0,0,0,775,780,3,74,37,0,776,777,5,96,0,0,777, + 779,3,74,37,0,778,776,1,0,0,0,779,782,1,0,0,0,780,778,1,0,0,0,780, + 781,1,0,0,0,781,77,1,0,0,0,782,780,1,0,0,0,783,788,3,76,38,0,784, + 785,5,98,0,0,785,787,3,76,38,0,786,784,1,0,0,0,787,790,1,0,0,0,788, + 786,1,0,0,0,788,789,1,0,0,0,789,79,1,0,0,0,790,788,1,0,0,0,791,796, + 3,78,39,0,792,793,5,118,0,0,793,795,3,78,39,0,794,792,1,0,0,0,795, + 798,1,0,0,0,796,794,1,0,0,0,796,797,1,0,0,0,797,81,1,0,0,0,798,796, + 1,0,0,0,799,804,3,80,40,0,800,801,5,119,0,0,801,803,3,80,40,0,802, + 800,1,0,0,0,803,806,1,0,0,0,804,802,1,0,0,0,804,805,1,0,0,0,805, + 83,1,0,0,0,806,804,1,0,0,0,807,813,3,82,41,0,808,809,5,125,0,0,809, + 810,3,90,45,0,810,811,5,126,0,0,811,812,3,86,43,0,812,814,1,0,0, + 0,813,808,1,0,0,0,813,814,1,0,0,0,814,85,1,0,0,0,815,822,3,84,42, + 0,816,817,3,82,41,0,817,818,3,88,44,0,818,819,3,272,136,0,819,822, + 1,0,0,0,820,822,3,368,184,0,821,815,1,0,0,0,821,816,1,0,0,0,821, + 820,1,0,0,0,822,87,1,0,0,0,823,824,7,10,0,0,824,89,1,0,0,0,825,830, + 3,86,43,0,826,827,5,122,0,0,827,829,3,86,43,0,828,826,1,0,0,0,829, + 832,1,0,0,0,830,828,1,0,0,0,830,831,1,0,0,0,831,91,1,0,0,0,832,830, + 1,0,0,0,833,834,3,84,42,0,834,93,1,0,0,0,835,849,3,96,48,0,836,849, + 3,118,59,0,837,839,3,204,102,0,838,837,1,0,0,0,838,839,1,0,0,0,839, + 846,1,0,0,0,840,847,3,98,49,0,841,847,3,100,50,0,842,847,3,104,52, + 0,843,847,3,108,54,0,844,847,3,116,58,0,845,847,3,358,179,0,846, + 840,1,0,0,0,846,841,1,0,0,0,846,842,1,0,0,0,846,843,1,0,0,0,846, + 844,1,0,0,0,846,845,1,0,0,0,847,849,1,0,0,0,848,835,1,0,0,0,848, + 836,1,0,0,0,848,838,1,0,0,0,849,95,1,0,0,0,850,852,3,204,102,0,851, + 850,1,0,0,0,851,852,1,0,0,0,852,857,1,0,0,0,853,858,5,132,0,0,854, + 855,5,16,0,0,855,858,3,92,46,0,856,858,5,27,0,0,857,853,1,0,0,0, + 857,854,1,0,0,0,857,856,1,0,0,0,858,859,1,0,0,0,859,860,5,126,0, + 0,860,861,3,94,47,0,861,97,1,0,0,0,862,864,3,90,45,0,863,862,1,0, + 0,0,863,864,1,0,0,0,864,865,1,0,0,0,865,866,5,128,0,0,866,99,1,0, + 0,0,867,869,5,89,0,0,868,870,3,102,51,0,869,868,1,0,0,0,869,870, + 1,0,0,0,870,871,1,0,0,0,871,872,5,90,0,0,872,101,1,0,0,0,873,875, + 3,94,47,0,874,873,1,0,0,0,875,876,1,0,0,0,876,874,1,0,0,0,876,877, + 1,0,0,0,877,103,1,0,0,0,878,879,5,43,0,0,879,880,5,85,0,0,880,881, + 3,106,53,0,881,882,5,86,0,0,882,885,3,94,47,0,883,884,5,32,0,0,884, + 886,3,94,47,0,885,883,1,0,0,0,885,886,1,0,0,0,886,894,1,0,0,0,887, + 888,5,67,0,0,888,889,5,85,0,0,889,890,3,106,53,0,890,891,5,86,0, + 0,891,892,3,94,47,0,892,894,1,0,0,0,893,878,1,0,0,0,893,887,1,0, + 0,0,894,105,1,0,0,0,895,907,3,90,45,0,896,898,3,204,102,0,897,896, + 1,0,0,0,897,898,1,0,0,0,898,899,1,0,0,0,899,900,3,138,69,0,900,904, + 3,226,113,0,901,902,5,101,0,0,902,905,3,272,136,0,903,905,3,276, + 138,0,904,901,1,0,0,0,904,903,1,0,0,0,905,907,1,0,0,0,906,895,1, + 0,0,0,906,897,1,0,0,0,907,107,1,0,0,0,908,909,5,84,0,0,909,910,5, + 85,0,0,910,911,3,106,53,0,911,912,5,86,0,0,912,913,3,94,47,0,913, + 942,1,0,0,0,914,915,5,29,0,0,915,916,3,94,47,0,916,917,5,84,0,0, + 917,918,5,85,0,0,918,919,3,90,45,0,919,920,5,86,0,0,920,921,5,128, + 0,0,921,942,1,0,0,0,922,923,5,40,0,0,923,936,5,85,0,0,924,926,3, + 110,55,0,925,927,3,106,53,0,926,925,1,0,0,0,926,927,1,0,0,0,927, + 928,1,0,0,0,928,930,5,128,0,0,929,931,3,90,45,0,930,929,1,0,0,0, + 930,931,1,0,0,0,931,937,1,0,0,0,932,933,3,112,56,0,933,934,5,126, + 0,0,934,935,3,114,57,0,935,937,1,0,0,0,936,924,1,0,0,0,936,932,1, + 0,0,0,937,938,1,0,0,0,938,939,5,86,0,0,939,940,3,94,47,0,940,942, + 1,0,0,0,941,908,1,0,0,0,941,914,1,0,0,0,941,922,1,0,0,0,942,109, + 1,0,0,0,943,946,3,98,49,0,944,946,3,128,64,0,945,943,1,0,0,0,945, + 944,1,0,0,0,946,111,1,0,0,0,947,949,3,204,102,0,948,947,1,0,0,0, + 948,949,1,0,0,0,949,950,1,0,0,0,950,951,3,138,69,0,951,952,3,226, + 113,0,952,113,1,0,0,0,953,956,3,90,45,0,954,956,3,276,138,0,955, + 953,1,0,0,0,955,954,1,0,0,0,956,115,1,0,0,0,957,967,5,15,0,0,958, + 967,5,25,0,0,959,962,5,59,0,0,960,963,3,90,45,0,961,963,3,276,138, + 0,962,960,1,0,0,0,962,961,1,0,0,0,962,963,1,0,0,0,963,967,1,0,0, + 0,964,965,5,42,0,0,965,967,5,132,0,0,966,957,1,0,0,0,966,958,1,0, + 0,0,966,959,1,0,0,0,966,964,1,0,0,0,967,968,1,0,0,0,968,969,5,128, + 0,0,969,117,1,0,0,0,970,971,3,124,62,0,971,119,1,0,0,0,972,974,3, + 122,61,0,973,972,1,0,0,0,974,975,1,0,0,0,975,973,1,0,0,0,975,976, + 1,0,0,0,976,121,1,0,0,0,977,987,3,124,62,0,978,987,3,264,132,0,979, + 987,3,334,167,0,980,987,3,354,177,0,981,987,3,356,178,0,982,987, + 3,202,101,0,983,987,3,188,94,0,984,987,3,132,66,0,985,987,3,134, + 67,0,986,977,1,0,0,0,986,978,1,0,0,0,986,979,1,0,0,0,986,980,1,0, + 0,0,986,981,1,0,0,0,986,982,1,0,0,0,986,983,1,0,0,0,986,984,1,0, + 0,0,986,985,1,0,0,0,987,123,1,0,0,0,988,997,3,128,64,0,989,997,3, + 200,100,0,990,997,3,192,96,0,991,997,3,196,98,0,992,997,3,198,99, + 0,993,997,3,130,65,0,994,997,3,126,63,0,995,997,3,172,86,0,996,988, + 1,0,0,0,996,989,1,0,0,0,996,990,1,0,0,0,996,991,1,0,0,0,996,992, + 1,0,0,0,996,993,1,0,0,0,996,994,1,0,0,0,996,995,1,0,0,0,997,125, + 1,0,0,0,998,999,5,79,0,0,999,1001,5,132,0,0,1000,1002,3,204,102, + 0,1001,1000,1,0,0,0,1001,1002,1,0,0,0,1002,1003,1,0,0,0,1003,1004, + 5,101,0,0,1004,1005,3,246,123,0,1005,1006,5,128,0,0,1006,127,1,0, + 0,0,1007,1009,3,138,69,0,1008,1007,1,0,0,0,1008,1009,1,0,0,0,1009, + 1011,1,0,0,0,1010,1012,3,222,111,0,1011,1010,1,0,0,0,1011,1012,1, + 0,0,0,1012,1013,1,0,0,0,1013,1022,5,128,0,0,1014,1016,3,204,102, + 0,1015,1017,3,138,69,0,1016,1015,1,0,0,0,1016,1017,1,0,0,0,1017, + 1018,1,0,0,0,1018,1019,3,222,111,0,1019,1020,5,128,0,0,1020,1022, + 1,0,0,0,1021,1008,1,0,0,0,1021,1014,1,0,0,0,1022,129,1,0,0,0,1023, + 1024,5,64,0,0,1024,1025,5,85,0,0,1025,1026,3,92,46,0,1026,1027,5, + 122,0,0,1027,1028,5,4,0,0,1028,1029,5,86,0,0,1029,1030,5,128,0,0, + 1030,131,1,0,0,0,1031,1032,5,128,0,0,1032,133,1,0,0,0,1033,1034, + 3,204,102,0,1034,1035,5,128,0,0,1035,135,1,0,0,0,1036,1043,3,140, + 70,0,1037,1043,3,146,73,0,1038,1043,3,142,71,0,1039,1043,5,41,0, + 0,1040,1043,5,74,0,0,1041,1043,5,23,0,0,1042,1036,1,0,0,0,1042,1037, + 1,0,0,0,1042,1038,1,0,0,0,1042,1039,1,0,0,0,1042,1040,1,0,0,0,1042, + 1041,1,0,0,0,1043,137,1,0,0,0,1044,1046,3,136,68,0,1045,1044,1,0, + 0,0,1046,1047,1,0,0,0,1047,1048,1,0,0,0,1047,1045,1,0,0,0,1048,1050, + 1,0,0,0,1049,1051,3,204,102,0,1050,1049,1,0,0,0,1050,1051,1,0,0, + 0,1051,139,1,0,0,0,1052,1053,7,11,0,0,1053,141,1,0,0,0,1054,1055, + 7,12,0,0,1055,143,1,0,0,0,1056,1057,5,132,0,0,1057,145,1,0,0,0,1058, + 1062,3,148,74,0,1059,1062,3,280,140,0,1060,1062,3,168,84,0,1061, + 1058,1,0,0,0,1061,1059,1,0,0,0,1061,1060,1,0,0,0,1062,147,1,0,0, + 0,1063,1068,3,158,79,0,1064,1068,3,164,82,0,1065,1068,3,352,176, + 0,1066,1068,3,240,120,0,1067,1063,1,0,0,0,1067,1064,1,0,0,0,1067, + 1065,1,0,0,0,1067,1066,1,0,0,0,1068,149,1,0,0,0,1069,1071,3,146, + 73,0,1070,1069,1,0,0,0,1071,1072,1,0,0,0,1072,1070,1,0,0,0,1072, + 1073,1,0,0,0,1073,1075,1,0,0,0,1074,1076,3,204,102,0,1075,1074,1, + 0,0,0,1075,1076,1,0,0,0,1076,151,1,0,0,0,1077,1079,3,148,74,0,1078, + 1077,1,0,0,0,1079,1080,1,0,0,0,1080,1078,1,0,0,0,1080,1081,1,0,0, + 0,1081,1083,1,0,0,0,1082,1084,3,204,102,0,1083,1082,1,0,0,0,1083, + 1084,1,0,0,0,1084,153,1,0,0,0,1085,1086,7,13,0,0,1086,155,1,0,0, + 0,1087,1088,7,14,0,0,1088,157,1,0,0,0,1089,1091,3,10,5,0,1090,1089, + 1,0,0,0,1090,1091,1,0,0,0,1091,1092,1,0,0,0,1092,1114,3,160,80,0, + 1093,1094,3,10,5,0,1094,1095,5,68,0,0,1095,1096,3,342,171,0,1096, + 1114,1,0,0,0,1097,1114,5,18,0,0,1098,1114,5,19,0,0,1099,1114,5,20, + 0,0,1100,1114,5,83,0,0,1101,1114,5,14,0,0,1102,1114,5,60,0,0,1103, + 1114,5,45,0,0,1104,1114,5,46,0,0,1105,1114,5,39,0,0,1106,1114,5, + 61,0,0,1107,1114,5,78,0,0,1108,1114,5,39,0,0,1109,1114,5,30,0,0, + 1110,1114,5,81,0,0,1111,1114,5,13,0,0,1112,1114,3,162,81,0,1113, + 1090,1,0,0,0,1113,1093,1,0,0,0,1113,1097,1,0,0,0,1113,1098,1,0,0, + 0,1113,1099,1,0,0,0,1113,1100,1,0,0,0,1113,1101,1,0,0,0,1113,1102, + 1,0,0,0,1113,1103,1,0,0,0,1113,1104,1,0,0,0,1113,1105,1,0,0,0,1113, + 1106,1,0,0,0,1113,1107,1,0,0,0,1113,1108,1,0,0,0,1113,1109,1,0,0, + 0,1113,1110,1,0,0,0,1113,1111,1,0,0,0,1113,1112,1,0,0,0,1114,159, + 1,0,0,0,1115,1120,3,278,139,0,1116,1120,3,166,83,0,1117,1120,3,144, + 72,0,1118,1120,3,342,171,0,1119,1115,1,0,0,0,1119,1116,1,0,0,0,1119, + 1117,1,0,0,0,1119,1118,1,0,0,0,1120,161,1,0,0,0,1121,1122,5,26,0, + 0,1122,1125,5,85,0,0,1123,1126,3,90,45,0,1124,1126,5,13,0,0,1125, + 1123,1,0,0,0,1125,1124,1,0,0,0,1126,1127,1,0,0,0,1127,1128,5,86, + 0,0,1128,163,1,0,0,0,1129,1144,3,288,144,0,1130,1132,3,204,102,0, + 1131,1130,1,0,0,0,1131,1132,1,0,0,0,1132,1134,1,0,0,0,1133,1135, + 3,10,5,0,1134,1133,1,0,0,0,1134,1135,1,0,0,0,1135,1136,1,0,0,0,1136, + 1145,5,132,0,0,1137,1145,3,342,171,0,1138,1140,3,10,5,0,1139,1141, + 5,68,0,0,1140,1139,1,0,0,0,1140,1141,1,0,0,0,1141,1142,1,0,0,0,1142, + 1143,3,342,171,0,1143,1145,1,0,0,0,1144,1131,1,0,0,0,1144,1137,1, + 0,0,0,1144,1138,1,0,0,0,1145,1152,1,0,0,0,1146,1148,5,33,0,0,1147, + 1149,3,10,5,0,1148,1147,1,0,0,0,1148,1149,1,0,0,0,1149,1150,1,0, + 0,0,1150,1152,5,132,0,0,1151,1129,1,0,0,0,1151,1146,1,0,0,0,1152, + 165,1,0,0,0,1153,1154,5,132,0,0,1154,167,1,0,0,0,1155,1156,3,170, + 85,0,1156,1161,5,89,0,0,1157,1159,3,178,89,0,1158,1160,5,122,0,0, + 1159,1158,1,0,0,0,1159,1160,1,0,0,0,1160,1162,1,0,0,0,1161,1157, + 1,0,0,0,1161,1162,1,0,0,0,1162,1163,1,0,0,0,1163,1164,5,90,0,0,1164, + 169,1,0,0,0,1165,1167,3,174,87,0,1166,1168,3,204,102,0,1167,1166, + 1,0,0,0,1167,1168,1,0,0,0,1168,1173,1,0,0,0,1169,1171,3,10,5,0,1170, + 1169,1,0,0,0,1170,1171,1,0,0,0,1171,1172,1,0,0,0,1172,1174,5,132, + 0,0,1173,1170,1,0,0,0,1173,1174,1,0,0,0,1174,1176,1,0,0,0,1175,1177, + 3,176,88,0,1176,1175,1,0,0,0,1176,1177,1,0,0,0,1177,171,1,0,0,0, + 1178,1180,3,174,87,0,1179,1181,3,204,102,0,1180,1179,1,0,0,0,1180, + 1181,1,0,0,0,1181,1182,1,0,0,0,1182,1184,5,132,0,0,1183,1185,3,176, + 88,0,1184,1183,1,0,0,0,1184,1185,1,0,0,0,1185,1186,1,0,0,0,1186, + 1187,5,128,0,0,1187,173,1,0,0,0,1188,1190,5,33,0,0,1189,1191,7,15, + 0,0,1190,1189,1,0,0,0,1190,1191,1,0,0,0,1191,175,1,0,0,0,1192,1193, + 5,126,0,0,1193,1194,3,150,75,0,1194,177,1,0,0,0,1195,1200,3,180, + 90,0,1196,1197,5,122,0,0,1197,1199,3,180,90,0,1198,1196,1,0,0,0, + 1199,1202,1,0,0,0,1200,1198,1,0,0,0,1200,1201,1,0,0,0,1201,179,1, + 0,0,0,1202,1200,1,0,0,0,1203,1206,3,182,91,0,1204,1205,5,101,0,0, + 1205,1207,3,92,46,0,1206,1204,1,0,0,0,1206,1207,1,0,0,0,1207,181, + 1,0,0,0,1208,1209,5,132,0,0,1209,183,1,0,0,0,1210,1213,3,186,93, + 0,1211,1213,3,190,95,0,1212,1210,1,0,0,0,1212,1211,1,0,0,0,1213, + 185,1,0,0,0,1214,1215,5,132,0,0,1215,187,1,0,0,0,1216,1218,5,44, + 0,0,1217,1216,1,0,0,0,1217,1218,1,0,0,0,1218,1219,1,0,0,0,1219,1222, + 5,48,0,0,1220,1223,5,132,0,0,1221,1223,3,186,93,0,1222,1220,1,0, + 0,0,1222,1221,1,0,0,0,1222,1223,1,0,0,0,1223,1224,1,0,0,0,1224,1226, + 5,89,0,0,1225,1227,3,120,60,0,1226,1225,1,0,0,0,1226,1227,1,0,0, + 0,1227,1228,1,0,0,0,1228,1229,5,90,0,0,1229,189,1,0,0,0,1230,1231, + 5,132,0,0,1231,191,1,0,0,0,1232,1233,5,48,0,0,1233,1234,5,132,0, + 0,1234,1235,5,101,0,0,1235,1236,3,194,97,0,1236,1237,5,128,0,0,1237, + 193,1,0,0,0,1238,1240,3,10,5,0,1239,1238,1,0,0,0,1239,1240,1,0,0, + 0,1240,1241,1,0,0,0,1241,1242,3,184,92,0,1242,195,1,0,0,0,1243,1249, + 5,79,0,0,1244,1246,5,76,0,0,1245,1244,1,0,0,0,1245,1246,1,0,0,0, + 1246,1247,1,0,0,0,1247,1250,3,10,5,0,1248,1250,5,127,0,0,1249,1245, + 1,0,0,0,1249,1248,1,0,0,0,1250,1251,1,0,0,0,1251,1252,3,6,3,0,1252, + 1253,5,128,0,0,1253,197,1,0,0,0,1254,1256,3,204,102,0,1255,1254, + 1,0,0,0,1255,1256,1,0,0,0,1256,1257,1,0,0,0,1257,1258,5,79,0,0,1258, + 1260,5,48,0,0,1259,1261,3,10,5,0,1260,1259,1,0,0,0,1260,1261,1,0, + 0,0,1261,1262,1,0,0,0,1262,1263,3,184,92,0,1263,1264,5,128,0,0,1264, + 199,1,0,0,0,1265,1266,5,12,0,0,1266,1267,5,85,0,0,1267,1268,5,4, + 0,0,1268,1269,5,86,0,0,1269,1270,5,128,0,0,1270,201,1,0,0,0,1271, + 1272,5,36,0,0,1272,1279,5,4,0,0,1273,1275,5,89,0,0,1274,1276,3,120, + 60,0,1275,1274,1,0,0,0,1275,1276,1,0,0,0,1276,1277,1,0,0,0,1277, + 1280,5,90,0,0,1278,1280,3,122,61,0,1279,1273,1,0,0,0,1279,1278,1, + 0,0,0,1280,203,1,0,0,0,1281,1283,3,206,103,0,1282,1281,1,0,0,0,1283, + 1284,1,0,0,0,1284,1282,1,0,0,0,1284,1285,1,0,0,0,1285,205,1,0,0, + 0,1286,1287,5,87,0,0,1287,1289,5,87,0,0,1288,1290,3,210,105,0,1289, + 1288,1,0,0,0,1289,1290,1,0,0,0,1290,1291,1,0,0,0,1291,1292,5,88, + 0,0,1292,1295,5,88,0,0,1293,1295,3,208,104,0,1294,1286,1,0,0,0,1294, + 1293,1,0,0,0,1295,207,1,0,0,0,1296,1297,5,10,0,0,1297,1300,5,85, + 0,0,1298,1301,3,246,123,0,1299,1301,3,92,46,0,1300,1298,1,0,0,0, + 1300,1299,1,0,0,0,1301,1303,1,0,0,0,1302,1304,5,131,0,0,1303,1302, + 1,0,0,0,1303,1304,1,0,0,0,1304,1305,1,0,0,0,1305,1306,5,86,0,0,1306, + 209,1,0,0,0,1307,1312,3,212,106,0,1308,1309,5,122,0,0,1309,1311, + 3,212,106,0,1310,1308,1,0,0,0,1311,1314,1,0,0,0,1312,1310,1,0,0, + 0,1312,1313,1,0,0,0,1313,1316,1,0,0,0,1314,1312,1,0,0,0,1315,1317, + 5,131,0,0,1316,1315,1,0,0,0,1316,1317,1,0,0,0,1317,211,1,0,0,0,1318, + 1319,3,214,107,0,1319,1320,5,127,0,0,1320,1322,1,0,0,0,1321,1318, + 1,0,0,0,1321,1322,1,0,0,0,1322,1323,1,0,0,0,1323,1325,5,132,0,0, + 1324,1326,3,216,108,0,1325,1324,1,0,0,0,1325,1326,1,0,0,0,1326,213, + 1,0,0,0,1327,1328,5,132,0,0,1328,215,1,0,0,0,1329,1331,5,85,0,0, + 1330,1332,3,218,109,0,1331,1330,1,0,0,0,1331,1332,1,0,0,0,1332,1333, + 1,0,0,0,1333,1334,5,86,0,0,1334,217,1,0,0,0,1335,1337,3,220,110, + 0,1336,1335,1,0,0,0,1337,1338,1,0,0,0,1338,1336,1,0,0,0,1338,1339, + 1,0,0,0,1339,219,1,0,0,0,1340,1341,5,85,0,0,1341,1342,3,218,109, + 0,1342,1343,5,86,0,0,1343,1358,1,0,0,0,1344,1345,5,87,0,0,1345,1346, + 3,218,109,0,1346,1347,5,88,0,0,1347,1358,1,0,0,0,1348,1349,5,89, + 0,0,1349,1350,3,218,109,0,1350,1351,5,90,0,0,1351,1358,1,0,0,0,1352, + 1354,8,16,0,0,1353,1352,1,0,0,0,1354,1355,1,0,0,0,1355,1353,1,0, + 0,0,1355,1356,1,0,0,0,1356,1358,1,0,0,0,1357,1340,1,0,0,0,1357,1344, + 1,0,0,0,1357,1348,1,0,0,0,1357,1353,1,0,0,0,1358,221,1,0,0,0,1359, + 1364,3,224,112,0,1360,1361,5,122,0,0,1361,1363,3,224,112,0,1362, + 1360,1,0,0,0,1363,1366,1,0,0,0,1364,1362,1,0,0,0,1364,1365,1,0,0, + 0,1365,223,1,0,0,0,1366,1364,1,0,0,0,1367,1369,3,226,113,0,1368, + 1370,3,268,134,0,1369,1368,1,0,0,0,1369,1370,1,0,0,0,1370,225,1, + 0,0,0,1371,1377,3,228,114,0,1372,1373,3,230,115,0,1373,1374,3,232, + 116,0,1374,1375,3,234,117,0,1375,1377,1,0,0,0,1376,1371,1,0,0,0, + 1376,1372,1,0,0,0,1377,227,1,0,0,0,1378,1380,3,236,118,0,1379,1381, + 5,22,0,0,1380,1379,1,0,0,0,1380,1381,1,0,0,0,1381,1383,1,0,0,0,1382, + 1378,1,0,0,0,1383,1386,1,0,0,0,1384,1382,1,0,0,0,1384,1385,1,0,0, + 0,1385,1387,1,0,0,0,1386,1384,1,0,0,0,1387,1388,3,230,115,0,1388, + 229,1,0,0,0,1389,1390,6,115,-1,0,1390,1392,3,244,122,0,1391,1393, + 3,204,102,0,1392,1391,1,0,0,0,1392,1393,1,0,0,0,1393,1399,1,0,0, + 0,1394,1395,5,85,0,0,1395,1396,3,228,114,0,1396,1397,5,86,0,0,1397, + 1399,1,0,0,0,1398,1389,1,0,0,0,1398,1394,1,0,0,0,1399,1414,1,0,0, + 0,1400,1410,10,2,0,0,1401,1411,3,232,116,0,1402,1404,5,87,0,0,1403, + 1405,3,92,46,0,1404,1403,1,0,0,0,1404,1405,1,0,0,0,1405,1406,1,0, + 0,0,1406,1408,5,88,0,0,1407,1409,3,204,102,0,1408,1407,1,0,0,0,1408, + 1409,1,0,0,0,1409,1411,1,0,0,0,1410,1401,1,0,0,0,1410,1402,1,0,0, + 0,1411,1413,1,0,0,0,1412,1400,1,0,0,0,1413,1416,1,0,0,0,1414,1412, + 1,0,0,0,1414,1415,1,0,0,0,1415,231,1,0,0,0,1416,1414,1,0,0,0,1417, + 1419,5,85,0,0,1418,1420,3,258,129,0,1419,1418,1,0,0,0,1419,1420, + 1,0,0,0,1420,1421,1,0,0,0,1421,1423,5,86,0,0,1422,1424,3,238,119, + 0,1423,1422,1,0,0,0,1423,1424,1,0,0,0,1424,1426,1,0,0,0,1425,1427, + 3,242,121,0,1426,1425,1,0,0,0,1426,1427,1,0,0,0,1427,1429,1,0,0, + 0,1428,1430,3,370,185,0,1429,1428,1,0,0,0,1429,1430,1,0,0,0,1430, + 1432,1,0,0,0,1431,1433,3,204,102,0,1432,1431,1,0,0,0,1432,1433,1, + 0,0,0,1433,233,1,0,0,0,1434,1435,5,124,0,0,1435,1437,3,152,76,0, + 1436,1438,3,248,124,0,1437,1436,1,0,0,0,1437,1438,1,0,0,0,1438,235, + 1,0,0,0,1439,1441,7,17,0,0,1440,1442,3,204,102,0,1441,1440,1,0,0, + 0,1441,1442,1,0,0,0,1442,1454,1,0,0,0,1443,1445,3,10,5,0,1444,1443, + 1,0,0,0,1444,1445,1,0,0,0,1445,1446,1,0,0,0,1446,1448,5,93,0,0,1447, + 1449,3,204,102,0,1448,1447,1,0,0,0,1448,1449,1,0,0,0,1449,1451,1, + 0,0,0,1450,1452,3,238,119,0,1451,1450,1,0,0,0,1451,1452,1,0,0,0, + 1452,1454,1,0,0,0,1453,1439,1,0,0,0,1453,1444,1,0,0,0,1454,237,1, + 0,0,0,1455,1457,3,240,120,0,1456,1455,1,0,0,0,1457,1458,1,0,0,0, + 1458,1456,1,0,0,0,1458,1459,1,0,0,0,1459,239,1,0,0,0,1460,1461,7, + 18,0,0,1461,241,1,0,0,0,1462,1463,7,17,0,0,1463,243,1,0,0,0,1464, + 1466,5,131,0,0,1465,1464,1,0,0,0,1465,1466,1,0,0,0,1466,1467,1,0, + 0,0,1467,1468,3,4,2,0,1468,245,1,0,0,0,1469,1471,3,150,75,0,1470, + 1472,3,248,124,0,1471,1470,1,0,0,0,1471,1472,1,0,0,0,1472,247,1, + 0,0,0,1473,1482,3,250,125,0,1474,1476,3,252,126,0,1475,1474,1,0, + 0,0,1475,1476,1,0,0,0,1476,1477,1,0,0,0,1477,1478,3,232,116,0,1478, + 1479,3,234,117,0,1479,1482,1,0,0,0,1480,1482,3,254,127,0,1481,1473, + 1,0,0,0,1481,1475,1,0,0,0,1481,1480,1,0,0,0,1482,249,1,0,0,0,1483, + 1485,3,236,118,0,1484,1483,1,0,0,0,1485,1488,1,0,0,0,1486,1484,1, + 0,0,0,1486,1487,1,0,0,0,1487,1491,1,0,0,0,1488,1486,1,0,0,0,1489, + 1492,3,252,126,0,1490,1492,3,236,118,0,1491,1489,1,0,0,0,1491,1490, + 1,0,0,0,1492,251,1,0,0,0,1493,1499,3,232,116,0,1494,1495,5,85,0, + 0,1495,1496,3,250,125,0,1496,1497,5,86,0,0,1497,1499,1,0,0,0,1498, + 1493,1,0,0,0,1498,1494,1,0,0,0,1499,1511,1,0,0,0,1500,1510,3,232, + 116,0,1501,1503,5,87,0,0,1502,1504,3,92,46,0,1503,1502,1,0,0,0,1503, + 1504,1,0,0,0,1504,1505,1,0,0,0,1505,1507,5,88,0,0,1506,1508,3,204, + 102,0,1507,1506,1,0,0,0,1507,1508,1,0,0,0,1508,1510,1,0,0,0,1509, + 1500,1,0,0,0,1509,1501,1,0,0,0,1510,1513,1,0,0,0,1511,1509,1,0,0, + 0,1511,1512,1,0,0,0,1512,253,1,0,0,0,1513,1511,1,0,0,0,1514,1516, + 3,236,118,0,1515,1514,1,0,0,0,1516,1519,1,0,0,0,1517,1515,1,0,0, + 0,1517,1518,1,0,0,0,1518,1520,1,0,0,0,1519,1517,1,0,0,0,1520,1521, + 3,256,128,0,1521,255,1,0,0,0,1522,1534,5,131,0,0,1523,1533,3,232, + 116,0,1524,1526,5,87,0,0,1525,1527,3,92,46,0,1526,1525,1,0,0,0,1526, + 1527,1,0,0,0,1527,1528,1,0,0,0,1528,1530,5,88,0,0,1529,1531,3,204, + 102,0,1530,1529,1,0,0,0,1530,1531,1,0,0,0,1531,1533,1,0,0,0,1532, + 1523,1,0,0,0,1532,1524,1,0,0,0,1533,1536,1,0,0,0,1534,1532,1,0,0, + 0,1534,1535,1,0,0,0,1535,257,1,0,0,0,1536,1534,1,0,0,0,1537,1542, + 3,260,130,0,1538,1540,5,122,0,0,1539,1538,1,0,0,0,1539,1540,1,0, + 0,0,1540,1541,1,0,0,0,1541,1543,5,131,0,0,1542,1539,1,0,0,0,1542, + 1543,1,0,0,0,1543,259,1,0,0,0,1544,1549,3,262,131,0,1545,1546,5, + 122,0,0,1546,1548,3,262,131,0,1547,1545,1,0,0,0,1548,1551,1,0,0, + 0,1549,1547,1,0,0,0,1549,1550,1,0,0,0,1550,261,1,0,0,0,1551,1549, + 1,0,0,0,1552,1554,3,204,102,0,1553,1552,1,0,0,0,1553,1554,1,0,0, + 0,1554,1555,1,0,0,0,1555,1560,3,138,69,0,1556,1561,3,226,113,0,1557, + 1559,3,248,124,0,1558,1557,1,0,0,0,1558,1559,1,0,0,0,1559,1561,1, + 0,0,0,1560,1556,1,0,0,0,1560,1558,1,0,0,0,1561,1564,1,0,0,0,1562, + 1563,5,101,0,0,1563,1565,3,272,136,0,1564,1562,1,0,0,0,1564,1565, + 1,0,0,0,1565,263,1,0,0,0,1566,1568,3,204,102,0,1567,1566,1,0,0,0, + 1567,1568,1,0,0,0,1568,1570,1,0,0,0,1569,1571,3,138,69,0,1570,1569, + 1,0,0,0,1570,1571,1,0,0,0,1571,1572,1,0,0,0,1572,1574,3,226,113, + 0,1573,1575,3,298,149,0,1574,1573,1,0,0,0,1574,1575,1,0,0,0,1575, + 1576,1,0,0,0,1576,1577,3,266,133,0,1577,265,1,0,0,0,1578,1580,3, + 322,161,0,1579,1578,1,0,0,0,1579,1580,1,0,0,0,1580,1581,1,0,0,0, + 1581,1587,3,100,50,0,1582,1587,3,360,180,0,1583,1584,5,101,0,0,1584, + 1585,7,19,0,0,1585,1587,5,128,0,0,1586,1579,1,0,0,0,1586,1582,1, + 0,0,0,1586,1583,1,0,0,0,1587,267,1,0,0,0,1588,1594,3,270,135,0,1589, + 1590,5,85,0,0,1590,1591,3,34,17,0,1591,1592,5,86,0,0,1592,1594,1, + 0,0,0,1593,1588,1,0,0,0,1593,1589,1,0,0,0,1594,269,1,0,0,0,1595, + 1596,5,101,0,0,1596,1599,3,272,136,0,1597,1599,3,276,138,0,1598, + 1595,1,0,0,0,1598,1597,1,0,0,0,1599,271,1,0,0,0,1600,1603,3,86,43, + 0,1601,1603,3,276,138,0,1602,1600,1,0,0,0,1602,1601,1,0,0,0,1603, + 273,1,0,0,0,1604,1606,3,272,136,0,1605,1607,5,131,0,0,1606,1605, + 1,0,0,0,1606,1607,1,0,0,0,1607,1615,1,0,0,0,1608,1609,5,122,0,0, + 1609,1611,3,272,136,0,1610,1612,5,131,0,0,1611,1610,1,0,0,0,1611, + 1612,1,0,0,0,1612,1614,1,0,0,0,1613,1608,1,0,0,0,1614,1617,1,0,0, + 0,1615,1613,1,0,0,0,1615,1616,1,0,0,0,1616,275,1,0,0,0,1617,1615, + 1,0,0,0,1618,1623,5,89,0,0,1619,1621,3,274,137,0,1620,1622,5,122, + 0,0,1621,1620,1,0,0,0,1621,1622,1,0,0,0,1622,1624,1,0,0,0,1623,1619, + 1,0,0,0,1623,1624,1,0,0,0,1624,1625,1,0,0,0,1625,1626,5,90,0,0,1626, + 277,1,0,0,0,1627,1630,5,132,0,0,1628,1630,3,342,171,0,1629,1627, + 1,0,0,0,1629,1628,1,0,0,0,1630,279,1,0,0,0,1631,1632,3,282,141,0, + 1632,1634,5,89,0,0,1633,1635,3,290,145,0,1634,1633,1,0,0,0,1634, + 1635,1,0,0,0,1635,1636,1,0,0,0,1636,1637,5,90,0,0,1637,281,1,0,0, + 0,1638,1640,3,288,144,0,1639,1641,3,204,102,0,1640,1639,1,0,0,0, + 1640,1641,1,0,0,0,1641,1646,1,0,0,0,1642,1644,3,284,142,0,1643,1645, + 3,286,143,0,1644,1643,1,0,0,0,1644,1645,1,0,0,0,1645,1647,1,0,0, + 0,1646,1642,1,0,0,0,1646,1647,1,0,0,0,1647,1649,1,0,0,0,1648,1650, + 3,304,152,0,1649,1648,1,0,0,0,1649,1650,1,0,0,0,1650,1662,1,0,0, + 0,1651,1653,5,77,0,0,1652,1654,3,204,102,0,1653,1652,1,0,0,0,1653, + 1654,1,0,0,0,1654,1659,1,0,0,0,1655,1657,3,284,142,0,1656,1658,3, + 286,143,0,1657,1656,1,0,0,0,1657,1658,1,0,0,0,1658,1660,1,0,0,0, + 1659,1655,1,0,0,0,1659,1660,1,0,0,0,1660,1662,1,0,0,0,1661,1638, + 1,0,0,0,1661,1651,1,0,0,0,1662,283,1,0,0,0,1663,1665,3,10,5,0,1664, + 1663,1,0,0,0,1664,1665,1,0,0,0,1665,1666,1,0,0,0,1666,1667,3,278, + 139,0,1667,285,1,0,0,0,1668,1669,5,38,0,0,1669,287,1,0,0,0,1670, + 1671,7,15,0,0,1671,289,1,0,0,0,1672,1677,3,292,146,0,1673,1674,3, + 314,157,0,1674,1675,5,126,0,0,1675,1677,1,0,0,0,1676,1672,1,0,0, + 0,1676,1673,1,0,0,0,1677,1678,1,0,0,0,1678,1676,1,0,0,0,1678,1679, + 1,0,0,0,1679,291,1,0,0,0,1680,1682,3,204,102,0,1681,1680,1,0,0,0, + 1681,1682,1,0,0,0,1682,1684,1,0,0,0,1683,1685,3,138,69,0,1684,1683, + 1,0,0,0,1684,1685,1,0,0,0,1685,1687,1,0,0,0,1686,1688,3,294,147, + 0,1687,1686,1,0,0,0,1687,1688,1,0,0,0,1688,1689,1,0,0,0,1689,1697, + 5,128,0,0,1690,1697,3,264,132,0,1691,1697,3,196,98,0,1692,1697,3, + 130,65,0,1693,1697,3,334,167,0,1694,1697,3,126,63,0,1695,1697,3, + 132,66,0,1696,1681,1,0,0,0,1696,1690,1,0,0,0,1696,1691,1,0,0,0,1696, + 1692,1,0,0,0,1696,1693,1,0,0,0,1696,1694,1,0,0,0,1696,1695,1,0,0, + 0,1697,293,1,0,0,0,1698,1703,3,296,148,0,1699,1700,5,122,0,0,1700, + 1702,3,296,148,0,1701,1699,1,0,0,0,1702,1705,1,0,0,0,1703,1701,1, + 0,0,0,1703,1704,1,0,0,0,1704,295,1,0,0,0,1705,1703,1,0,0,0,1706, + 1715,3,226,113,0,1707,1716,3,298,149,0,1708,1709,4,148,7,0,1709, + 1716,3,302,151,0,1710,1711,4,148,8,0,1711,1712,3,298,149,0,1712, + 1713,3,302,151,0,1713,1716,1,0,0,0,1714,1716,3,270,135,0,1715,1707, + 1,0,0,0,1715,1708,1,0,0,0,1715,1710,1,0,0,0,1715,1714,1,0,0,0,1716, + 1727,1,0,0,0,1717,1727,3,226,113,0,1718,1720,5,132,0,0,1719,1718, + 1,0,0,0,1719,1720,1,0,0,0,1720,1722,1,0,0,0,1721,1723,3,204,102, + 0,1722,1721,1,0,0,0,1722,1723,1,0,0,0,1723,1724,1,0,0,0,1724,1725, + 5,126,0,0,1725,1727,3,92,46,0,1726,1706,1,0,0,0,1726,1717,1,0,0, + 0,1726,1719,1,0,0,0,1727,297,1,0,0,0,1728,1730,3,300,150,0,1729, + 1728,1,0,0,0,1730,1731,1,0,0,0,1731,1729,1,0,0,0,1731,1732,1,0,0, + 0,1732,299,1,0,0,0,1733,1734,7,20,0,0,1734,301,1,0,0,0,1735,1736, + 5,101,0,0,1736,1737,5,1,0,0,1737,303,1,0,0,0,1738,1739,5,126,0,0, + 1739,1740,3,306,153,0,1740,305,1,0,0,0,1741,1743,3,308,154,0,1742, + 1744,5,131,0,0,1743,1742,1,0,0,0,1743,1744,1,0,0,0,1744,1752,1,0, + 0,0,1745,1746,5,122,0,0,1746,1748,3,308,154,0,1747,1749,5,131,0, + 0,1748,1747,1,0,0,0,1748,1749,1,0,0,0,1749,1751,1,0,0,0,1750,1745, + 1,0,0,0,1751,1754,1,0,0,0,1752,1750,1,0,0,0,1752,1753,1,0,0,0,1753, + 307,1,0,0,0,1754,1752,1,0,0,0,1755,1757,3,204,102,0,1756,1755,1, + 0,0,0,1756,1757,1,0,0,0,1757,1770,1,0,0,0,1758,1771,3,312,156,0, + 1759,1761,5,80,0,0,1760,1762,3,314,157,0,1761,1760,1,0,0,0,1761, + 1762,1,0,0,0,1762,1763,1,0,0,0,1763,1771,3,312,156,0,1764,1766,3, + 314,157,0,1765,1767,5,80,0,0,1766,1765,1,0,0,0,1766,1767,1,0,0,0, + 1767,1768,1,0,0,0,1768,1769,3,312,156,0,1769,1771,1,0,0,0,1770,1758, + 1,0,0,0,1770,1759,1,0,0,0,1770,1764,1,0,0,0,1771,309,1,0,0,0,1772, + 1774,3,10,5,0,1773,1772,1,0,0,0,1773,1774,1,0,0,0,1774,1775,1,0, + 0,0,1775,1778,3,278,139,0,1776,1778,3,162,81,0,1777,1773,1,0,0,0, + 1777,1776,1,0,0,0,1778,311,1,0,0,0,1779,1780,3,310,155,0,1780,313, + 1,0,0,0,1781,1782,7,21,0,0,1782,315,1,0,0,0,1783,1784,5,52,0,0,1784, + 1785,3,318,159,0,1785,317,1,0,0,0,1786,1788,3,150,75,0,1787,1789, + 3,320,160,0,1788,1787,1,0,0,0,1788,1789,1,0,0,0,1789,319,1,0,0,0, + 1790,1792,3,236,118,0,1791,1793,3,320,160,0,1792,1791,1,0,0,0,1792, + 1793,1,0,0,0,1793,321,1,0,0,0,1794,1795,5,126,0,0,1795,1796,3,324, + 162,0,1796,323,1,0,0,0,1797,1799,3,326,163,0,1798,1800,5,131,0,0, + 1799,1798,1,0,0,0,1799,1800,1,0,0,0,1800,1808,1,0,0,0,1801,1802, + 5,122,0,0,1802,1804,3,326,163,0,1803,1805,5,131,0,0,1804,1803,1, + 0,0,0,1804,1805,1,0,0,0,1805,1807,1,0,0,0,1806,1801,1,0,0,0,1807, + 1810,1,0,0,0,1808,1806,1,0,0,0,1808,1809,1,0,0,0,1809,325,1,0,0, + 0,1810,1808,1,0,0,0,1811,1818,3,328,164,0,1812,1814,5,85,0,0,1813, + 1815,3,34,17,0,1814,1813,1,0,0,0,1814,1815,1,0,0,0,1815,1816,1,0, + 0,0,1816,1819,5,86,0,0,1817,1819,3,276,138,0,1818,1812,1,0,0,0,1818, + 1817,1,0,0,0,1819,327,1,0,0,0,1820,1823,3,310,155,0,1821,1823,5, + 132,0,0,1822,1820,1,0,0,0,1822,1821,1,0,0,0,1823,329,1,0,0,0,1824, + 1825,5,52,0,0,1825,1826,3,378,189,0,1826,331,1,0,0,0,1827,1831,5, + 52,0,0,1828,1829,5,4,0,0,1829,1832,5,132,0,0,1830,1832,5,140,0,0, + 1831,1828,1,0,0,0,1831,1830,1,0,0,0,1832,333,1,0,0,0,1833,1834,5, + 68,0,0,1834,1835,5,102,0,0,1835,1836,3,336,168,0,1836,1837,5,103, + 0,0,1837,1838,3,122,61,0,1838,335,1,0,0,0,1839,1844,3,338,169,0, + 1840,1841,5,122,0,0,1841,1843,3,338,169,0,1842,1840,1,0,0,0,1843, + 1846,1,0,0,0,1844,1842,1,0,0,0,1844,1845,1,0,0,0,1845,337,1,0,0, + 0,1846,1844,1,0,0,0,1847,1850,3,340,170,0,1848,1850,3,262,131,0, + 1849,1847,1,0,0,0,1849,1848,1,0,0,0,1850,339,1,0,0,0,1851,1852,5, + 68,0,0,1852,1853,5,102,0,0,1853,1854,3,336,168,0,1854,1855,5,103, + 0,0,1855,1857,1,0,0,0,1856,1851,1,0,0,0,1856,1857,1,0,0,0,1857,1858, + 1,0,0,0,1858,1861,5,21,0,0,1859,1861,5,76,0,0,1860,1856,1,0,0,0, + 1860,1859,1,0,0,0,1861,1873,1,0,0,0,1862,1864,5,131,0,0,1863,1862, + 1,0,0,0,1863,1864,1,0,0,0,1864,1866,1,0,0,0,1865,1867,5,132,0,0, + 1866,1865,1,0,0,0,1866,1867,1,0,0,0,1867,1874,1,0,0,0,1868,1870, + 5,132,0,0,1869,1868,1,0,0,0,1869,1870,1,0,0,0,1870,1871,1,0,0,0, + 1871,1872,5,101,0,0,1872,1874,3,246,123,0,1873,1863,1,0,0,0,1873, + 1869,1,0,0,0,1874,341,1,0,0,0,1875,1876,3,346,173,0,1876,1878,5, + 102,0,0,1877,1879,3,348,174,0,1878,1877,1,0,0,0,1878,1879,1,0,0, + 0,1879,1880,1,0,0,0,1880,1881,5,103,0,0,1881,343,1,0,0,0,1882,1894, + 3,342,171,0,1883,1886,3,330,165,0,1884,1886,3,332,166,0,1885,1883, + 1,0,0,0,1885,1884,1,0,0,0,1886,1887,1,0,0,0,1887,1889,5,102,0,0, + 1888,1890,3,348,174,0,1889,1888,1,0,0,0,1889,1890,1,0,0,0,1890,1891, + 1,0,0,0,1891,1892,5,103,0,0,1892,1894,1,0,0,0,1893,1882,1,0,0,0, + 1893,1885,1,0,0,0,1894,345,1,0,0,0,1895,1896,5,132,0,0,1896,347, + 1,0,0,0,1897,1899,3,350,175,0,1898,1900,5,131,0,0,1899,1898,1,0, + 0,0,1899,1900,1,0,0,0,1900,1908,1,0,0,0,1901,1902,5,122,0,0,1902, + 1904,3,350,175,0,1903,1905,5,131,0,0,1904,1903,1,0,0,0,1904,1905, + 1,0,0,0,1905,1907,1,0,0,0,1906,1901,1,0,0,0,1907,1910,1,0,0,0,1908, + 1906,1,0,0,0,1908,1909,1,0,0,0,1909,349,1,0,0,0,1910,1908,1,0,0, + 0,1911,1915,3,246,123,0,1912,1915,3,92,46,0,1913,1915,3,4,2,0,1914, + 1911,1,0,0,0,1914,1912,1,0,0,0,1914,1913,1,0,0,0,1915,351,1,0,0, + 0,1916,1917,5,76,0,0,1917,1923,3,10,5,0,1918,1924,5,132,0,0,1919, + 1921,5,68,0,0,1920,1919,1,0,0,0,1920,1921,1,0,0,0,1921,1922,1,0, + 0,0,1922,1924,3,342,171,0,1923,1918,1,0,0,0,1923,1920,1,0,0,0,1924, + 353,1,0,0,0,1925,1927,5,36,0,0,1926,1925,1,0,0,0,1926,1927,1,0,0, + 0,1927,1928,1,0,0,0,1928,1929,5,68,0,0,1929,1930,3,122,61,0,1930, + 355,1,0,0,0,1931,1932,5,68,0,0,1932,1933,5,102,0,0,1933,1934,5,103, + 0,0,1934,1935,3,122,61,0,1935,357,1,0,0,0,1936,1937,5,73,0,0,1937, + 1938,3,100,50,0,1938,1939,3,362,181,0,1939,359,1,0,0,0,1940,1942, + 5,73,0,0,1941,1943,3,322,161,0,1942,1941,1,0,0,0,1942,1943,1,0,0, + 0,1943,1944,1,0,0,0,1944,1945,3,100,50,0,1945,1946,3,362,181,0,1946, + 361,1,0,0,0,1947,1949,3,364,182,0,1948,1947,1,0,0,0,1949,1950,1, + 0,0,0,1950,1948,1,0,0,0,1950,1951,1,0,0,0,1951,363,1,0,0,0,1952, + 1953,5,17,0,0,1953,1954,5,85,0,0,1954,1955,3,366,183,0,1955,1956, + 5,86,0,0,1956,1957,3,100,50,0,1957,365,1,0,0,0,1958,1960,3,204,102, + 0,1959,1958,1,0,0,0,1959,1960,1,0,0,0,1960,1961,1,0,0,0,1961,1964, + 3,150,75,0,1962,1965,3,226,113,0,1963,1965,3,248,124,0,1964,1962, + 1,0,0,0,1964,1963,1,0,0,0,1964,1965,1,0,0,0,1965,1968,1,0,0,0,1966, + 1968,5,131,0,0,1967,1959,1,0,0,0,1967,1966,1,0,0,0,1968,367,1,0, + 0,0,1969,1971,5,71,0,0,1970,1972,3,86,43,0,1971,1970,1,0,0,0,1971, + 1972,1,0,0,0,1972,369,1,0,0,0,1973,1976,3,372,186,0,1974,1976,3, + 376,188,0,1975,1973,1,0,0,0,1975,1974,1,0,0,0,1976,371,1,0,0,0,1977, + 1978,5,71,0,0,1978,1980,5,85,0,0,1979,1981,3,374,187,0,1980,1979, + 1,0,0,0,1980,1981,1,0,0,0,1981,1982,1,0,0,0,1982,1983,5,86,0,0,1983, + 373,1,0,0,0,1984,1986,3,246,123,0,1985,1987,5,131,0,0,1986,1985, + 1,0,0,0,1986,1987,1,0,0,0,1987,1995,1,0,0,0,1988,1989,5,122,0,0, + 1989,1991,3,246,123,0,1990,1992,5,131,0,0,1991,1990,1,0,0,0,1991, + 1992,1,0,0,0,1992,1994,1,0,0,0,1993,1988,1,0,0,0,1994,1997,1,0,0, + 0,1995,1993,1,0,0,0,1995,1996,1,0,0,0,1996,375,1,0,0,0,1997,1995, + 1,0,0,0,1998,1999,5,50,0,0,1999,2000,5,85,0,0,2000,2001,3,92,46, + 0,2001,2002,5,86,0,0,2002,2005,1,0,0,0,2003,2005,5,50,0,0,2004,1998, + 1,0,0,0,2004,2003,1,0,0,0,2005,377,1,0,0,0,2006,2009,5,49,0,0,2007, + 2008,5,87,0,0,2008,2010,5,88,0,0,2009,2007,1,0,0,0,2009,2010,1,0, + 0,0,2010,2058,1,0,0,0,2011,2014,5,28,0,0,2012,2013,5,87,0,0,2013, + 2015,5,88,0,0,2014,2012,1,0,0,0,2014,2015,1,0,0,0,2015,2058,1,0, + 0,0,2016,2058,5,91,0,0,2017,2058,5,92,0,0,2018,2058,5,93,0,0,2019, + 2058,5,94,0,0,2020,2058,5,95,0,0,2021,2058,5,96,0,0,2022,2058,5, + 97,0,0,2023,2058,5,98,0,0,2024,2058,5,99,0,0,2025,2058,5,100,0,0, + 2026,2058,5,101,0,0,2027,2058,5,103,0,0,2028,2058,5,102,0,0,2029, + 2058,5,117,0,0,2030,2058,5,104,0,0,2031,2058,5,105,0,0,2032,2058, + 5,106,0,0,2033,2058,5,108,0,0,2034,2058,5,109,0,0,2035,2058,5,110, + 0,0,2036,2058,5,111,0,0,2037,2038,5,102,0,0,2038,2058,5,102,0,0, + 2039,2040,5,103,0,0,2040,2058,5,103,0,0,2041,2058,5,113,0,0,2042, + 2058,5,112,0,0,2043,2058,5,114,0,0,2044,2058,5,115,0,0,2045,2058, + 5,116,0,0,2046,2058,5,118,0,0,2047,2058,5,119,0,0,2048,2058,5,120, + 0,0,2049,2058,5,121,0,0,2050,2058,5,122,0,0,2051,2058,5,123,0,0, + 2052,2058,5,124,0,0,2053,2054,5,85,0,0,2054,2058,5,86,0,0,2055,2056, + 5,87,0,0,2056,2058,5,88,0,0,2057,2006,1,0,0,0,2057,2011,1,0,0,0, + 2057,2016,1,0,0,0,2057,2017,1,0,0,0,2057,2018,1,0,0,0,2057,2019, + 1,0,0,0,2057,2020,1,0,0,0,2057,2021,1,0,0,0,2057,2022,1,0,0,0,2057, + 2023,1,0,0,0,2057,2024,1,0,0,0,2057,2025,1,0,0,0,2057,2026,1,0,0, + 0,2057,2027,1,0,0,0,2057,2028,1,0,0,0,2057,2029,1,0,0,0,2057,2030, + 1,0,0,0,2057,2031,1,0,0,0,2057,2032,1,0,0,0,2057,2033,1,0,0,0,2057, + 2034,1,0,0,0,2057,2035,1,0,0,0,2057,2036,1,0,0,0,2057,2037,1,0,0, + 0,2057,2039,1,0,0,0,2057,2041,1,0,0,0,2057,2042,1,0,0,0,2057,2043, + 1,0,0,0,2057,2044,1,0,0,0,2057,2045,1,0,0,0,2057,2046,1,0,0,0,2057, + 2047,1,0,0,0,2057,2048,1,0,0,0,2057,2049,1,0,0,0,2057,2050,1,0,0, + 0,2057,2051,1,0,0,0,2057,2052,1,0,0,0,2057,2053,1,0,0,0,2057,2055, + 1,0,0,0,2058,379,1,0,0,0,2059,2060,7,22,0,0,2060,381,1,0,0,0,291, + 383,390,399,403,412,415,419,427,434,437,442,447,453,461,463,472, + 476,480,483,487,490,497,501,504,507,510,516,520,524,538,542,548, + 555,561,565,569,571,579,584,597,604,616,626,631,635,642,645,653, + 657,660,667,674,678,683,687,690,695,710,717,725,733,742,749,756, + 764,772,780,788,796,804,813,821,830,838,846,848,851,857,863,869, + 876,885,893,897,904,906,926,930,936,941,945,948,955,962,966,975, + 986,996,1001,1008,1011,1016,1021,1042,1047,1050,1061,1067,1072,1075, + 1080,1083,1090,1113,1119,1125,1131,1134,1140,1144,1148,1151,1159, + 1161,1167,1170,1173,1176,1180,1184,1190,1200,1206,1212,1217,1222, + 1226,1239,1245,1249,1255,1260,1275,1279,1284,1289,1294,1300,1303, + 1312,1316,1321,1325,1331,1338,1355,1357,1364,1369,1376,1380,1384, + 1392,1398,1404,1408,1410,1414,1419,1423,1426,1429,1432,1437,1441, + 1444,1448,1451,1453,1458,1465,1471,1475,1481,1486,1491,1498,1503, + 1507,1509,1511,1517,1526,1530,1532,1534,1539,1542,1549,1553,1558, + 1560,1564,1567,1570,1574,1579,1586,1593,1598,1602,1606,1611,1615, + 1621,1623,1629,1634,1640,1644,1646,1649,1653,1657,1659,1661,1664, + 1676,1678,1681,1684,1687,1696,1703,1715,1719,1722,1726,1731,1743, + 1748,1752,1756,1761,1766,1770,1773,1777,1788,1792,1799,1804,1808, + 1814,1818,1822,1831,1844,1849,1856,1860,1863,1866,1869,1873,1878, + 1885,1889,1893,1899,1904,1908,1914,1920,1923,1926,1942,1950,1959, + 1964,1967,1971,1975,1980,1986,1991,1995,2004,2009,2014,2057 + ] + +class CPP14Parser ( CPP14ParserBase ): + + grammarFileName = "CPP14Parser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "", "", "", + "", "", "", "", + "", "", "'alignas'", "'alignof'", + "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", + "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", + "'constexpr'", "'const_cast'", "'continue'", "'decltype'", + "'default'", "'delete'", "'do'", "'double'", "'dynamic_cast'", + "'else'", "'enum'", "'explicit'", "'export'", "'extern'", + "'false'", "'final'", "'float'", "'for'", "'friend'", + "'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", + "'namespace'", "'new'", "'noexcept'", "'nullptr'", + "'operator'", "'override'", "'private'", "'protected'", + "'public'", "'register'", "'reinterpret_cast'", "'return'", + "'short'", "'signed'", "'sizeof'", "'static'", "'static_assert'", + "'static_cast'", "'struct'", "'switch'", "'template'", + "'this'", "'thread_local'", "'throw'", "'true'", "'try'", + "'typedef'", "'typeid'", "'typename'", "'union'", "'unsigned'", + "'using'", "'virtual'", "'void'", "'volatile'", "'wchar_t'", + "'while'", "'('", "')'", "'['", "']'", "'{'", "'}'", + "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "'&'", "'|'", + "'~'", "", "'='", "'<'", "'>'", "'+='", "'-='", + "'*='", "'/='", "'%='", "'^='", "'&='", "'|='", "'<<='", + "'>>='", "'=='", "'!='", "'<='", "'>='", "", + "", "'++'", "'--'", "','", "'->*'", "'->'", + "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'" ] + + symbolicNames = [ "", "IntegerLiteral", "CharacterLiteral", + "FloatingLiteral", "StringLiteral", "BooleanLiteral", + "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", + "Bool", "Break", "Case", "Catch", "Char", "Char16", + "Char32", "Class", "Const", "Constexpr", "Const_cast", + "Continue", "Decltype", "Default", "Delete", "Do", + "Double", "Dynamic_cast", "Else", "Enum", "Explicit", + "Export", "Extern", "False_", "Final", "Float", "For", + "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", + "Namespace", "New", "Noexcept", "Nullptr", "Operator", + "Override", "Private", "Protected", "Public", "Register", + "Reinterpret_cast", "Return", "Short", "Signed", "Sizeof", + "Static", "Static_assert", "Static_cast", "Struct", + "Switch", "Template", "This", "Thread_local", "Throw", + "True_", "Try", "Typedef", "Typeid_", "Typename_", + "Union", "Unsigned", "Using", "Virtual", "Void", "Volatile", + "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "LeftBrace", "RightBrace", "Plus", + "Minus", "Star", "Div", "Mod", "Caret", "And", "Or", + "Tilde", "Not", "Assign", "Less", "Greater", "PlusAssign", + "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", + "RightShiftAssign", "Equal", "NotEqual", "LessEqual", + "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", "MinusMinus", + "Comma", "ArrowStar", "Arrow", "Question", "Colon", + "Doublecolon", "Semi", "Dot", "DotStar", "Ellipsis", + "Identifier", "DecimalLiteral", "OctalLiteral", "HexadecimalLiteral", + "BinaryLiteral", "Integersuffix", "UserDefinedIntegerLiteral", + "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", + "UserDefinedCharacterLiteral", "Whitespace", "Newline", + "BlockComment", "LineComment" ] + + RULE_translationUnit = 0 + RULE_primaryExpression = 1 + RULE_idExpression = 2 + RULE_unqualifiedId = 3 + RULE_qualifiedId = 4 + RULE_nestedNameSpecifier = 5 + RULE_lambdaExpression = 6 + RULE_lambdaIntroducer = 7 + RULE_lambdaCapture = 8 + RULE_captureDefault = 9 + RULE_captureList = 10 + RULE_capture = 11 + RULE_simpleCapture = 12 + RULE_initcapture = 13 + RULE_lambdaDeclarator = 14 + RULE_postfixExpression = 15 + RULE_typeIdOfTheTypeId = 16 + RULE_expressionList = 17 + RULE_pseudoDestructorName = 18 + RULE_unaryExpression = 19 + RULE_unaryOperator = 20 + RULE_newExpression_ = 21 + RULE_newPlacement = 22 + RULE_newTypeId = 23 + RULE_newDeclarator_ = 24 + RULE_noPointerNewDeclarator = 25 + RULE_newInitializer_ = 26 + RULE_deleteExpression = 27 + RULE_noExceptExpression = 28 + RULE_castExpression = 29 + RULE_pointerMemberExpression = 30 + RULE_multiplicativeExpression = 31 + RULE_additiveExpression = 32 + RULE_shiftExpression = 33 + RULE_shiftOperator = 34 + RULE_relationalExpression = 35 + RULE_equalityExpression = 36 + RULE_andExpression = 37 + RULE_exclusiveOrExpression = 38 + RULE_inclusiveOrExpression = 39 + RULE_logicalAndExpression = 40 + RULE_logicalOrExpression = 41 + RULE_conditionalExpression = 42 + RULE_assignmentExpression = 43 + RULE_assignmentOperator = 44 + RULE_expression = 45 + RULE_constantExpression = 46 + RULE_statement = 47 + RULE_labeledStatement = 48 + RULE_expressionStatement = 49 + RULE_compoundStatement = 50 + RULE_statementSeq = 51 + RULE_selectionStatement = 52 + RULE_condition = 53 + RULE_iterationStatement = 54 + RULE_forInitStatement = 55 + RULE_forRangeDeclaration = 56 + RULE_forRangeInitializer = 57 + RULE_jumpStatement = 58 + RULE_declarationStatement = 59 + RULE_declarationseq = 60 + RULE_declaration = 61 + RULE_blockDeclaration = 62 + RULE_aliasDeclaration = 63 + RULE_simpleDeclaration = 64 + RULE_staticAssertDeclaration = 65 + RULE_emptyDeclaration_ = 66 + RULE_attributeDeclaration = 67 + RULE_declSpecifier = 68 + RULE_declSpecifierSeq = 69 + RULE_storageClassSpecifier = 70 + RULE_functionSpecifier = 71 + RULE_typedefName = 72 + RULE_typeSpecifier = 73 + RULE_trailingTypeSpecifier = 74 + RULE_typeSpecifierSeq = 75 + RULE_trailingTypeSpecifierSeq = 76 + RULE_simpleTypeLengthModifier = 77 + RULE_simpleTypeSignednessModifier = 78 + RULE_simpleTypeSpecifier = 79 + RULE_theTypeName = 80 + RULE_decltypeSpecifier = 81 + RULE_elaboratedTypeSpecifier = 82 + RULE_enumName = 83 + RULE_enumSpecifier = 84 + RULE_enumHead = 85 + RULE_opaqueEnumDeclaration = 86 + RULE_enumkey = 87 + RULE_enumbase = 88 + RULE_enumeratorList = 89 + RULE_enumeratorDefinition = 90 + RULE_enumerator = 91 + RULE_namespaceName = 92 + RULE_originalNamespaceName = 93 + RULE_namespaceDefinition = 94 + RULE_namespaceAlias = 95 + RULE_namespaceAliasDefinition = 96 + RULE_qualifiednamespacespecifier = 97 + RULE_usingDeclaration = 98 + RULE_usingDirective = 99 + RULE_asmDefinition = 100 + RULE_linkageSpecification = 101 + RULE_attributeSpecifierSeq = 102 + RULE_attributeSpecifier = 103 + RULE_alignmentspecifier = 104 + RULE_attributeList = 105 + RULE_attribute = 106 + RULE_attributeNamespace = 107 + RULE_attributeArgumentClause = 108 + RULE_balancedTokenSeq = 109 + RULE_balancedtoken = 110 + RULE_initDeclaratorList = 111 + RULE_initDeclarator = 112 + RULE_declarator = 113 + RULE_pointerDeclarator = 114 + RULE_noPointerDeclarator = 115 + RULE_parametersAndQualifiers = 116 + RULE_trailingReturnType = 117 + RULE_pointerOperator = 118 + RULE_cvqualifierseq = 119 + RULE_cvQualifier = 120 + RULE_refqualifier = 121 + RULE_declaratorid = 122 + RULE_theTypeId = 123 + RULE_abstractDeclarator = 124 + RULE_pointerAbstractDeclarator = 125 + RULE_noPointerAbstractDeclarator = 126 + RULE_abstractPackDeclarator = 127 + RULE_noPointerAbstractPackDeclarator = 128 + RULE_parameterDeclarationClause = 129 + RULE_parameterDeclarationList = 130 + RULE_parameterDeclaration = 131 + RULE_functionDefinition = 132 + RULE_functionBody = 133 + RULE_initializer = 134 + RULE_braceOrEqualInitializer = 135 + RULE_initializerClause = 136 + RULE_initializerList = 137 + RULE_bracedInitList = 138 + RULE_className = 139 + RULE_classSpecifier = 140 + RULE_classHead = 141 + RULE_classHeadName = 142 + RULE_classVirtSpecifier = 143 + RULE_classKey = 144 + RULE_memberSpecification = 145 + RULE_memberdeclaration = 146 + RULE_memberDeclaratorList = 147 + RULE_memberDeclarator = 148 + RULE_virtualSpecifierSeq = 149 + RULE_virtualSpecifier = 150 + RULE_pureSpecifier = 151 + RULE_baseClause = 152 + RULE_baseSpecifierList = 153 + RULE_baseSpecifier = 154 + RULE_classOrDeclType = 155 + RULE_baseTypeSpecifier = 156 + RULE_accessSpecifier = 157 + RULE_conversionFunctionId = 158 + RULE_conversionTypeId = 159 + RULE_conversionDeclarator = 160 + RULE_constructorInitializer = 161 + RULE_memInitializerList = 162 + RULE_memInitializer = 163 + RULE_meminitializerid = 164 + RULE_operatorFunctionId = 165 + RULE_literalOperatorId = 166 + RULE_templateDeclaration = 167 + RULE_templateparameterList = 168 + RULE_templateParameter = 169 + RULE_typeParameter = 170 + RULE_simpleTemplateId = 171 + RULE_templateId = 172 + RULE_templateName = 173 + RULE_templateArgumentList = 174 + RULE_templateArgument = 175 + RULE_typeNameSpecifier = 176 + RULE_explicitInstantiation = 177 + RULE_explicitSpecialization = 178 + RULE_tryBlock = 179 + RULE_functionTryBlock = 180 + RULE_handlerSeq = 181 + RULE_handler = 182 + RULE_exceptionDeclaration = 183 + RULE_throwExpression = 184 + RULE_exceptionSpecification = 185 + RULE_dynamicExceptionSpecification = 186 + RULE_typeIdList = 187 + RULE_noeExceptSpecification = 188 + RULE_theOperator = 189 + RULE_literal = 190 + + ruleNames = [ "translationUnit", "primaryExpression", "idExpression", + "unqualifiedId", "qualifiedId", "nestedNameSpecifier", + "lambdaExpression", "lambdaIntroducer", "lambdaCapture", + "captureDefault", "captureList", "capture", "simpleCapture", + "initcapture", "lambdaDeclarator", "postfixExpression", + "typeIdOfTheTypeId", "expressionList", "pseudoDestructorName", + "unaryExpression", "unaryOperator", "newExpression_", + "newPlacement", "newTypeId", "newDeclarator_", "noPointerNewDeclarator", + "newInitializer_", "deleteExpression", "noExceptExpression", + "castExpression", "pointerMemberExpression", "multiplicativeExpression", + "additiveExpression", "shiftExpression", "shiftOperator", + "relationalExpression", "equalityExpression", "andExpression", + "exclusiveOrExpression", "inclusiveOrExpression", "logicalAndExpression", + "logicalOrExpression", "conditionalExpression", "assignmentExpression", + "assignmentOperator", "expression", "constantExpression", + "statement", "labeledStatement", "expressionStatement", + "compoundStatement", "statementSeq", "selectionStatement", + "condition", "iterationStatement", "forInitStatement", + "forRangeDeclaration", "forRangeInitializer", "jumpStatement", + "declarationStatement", "declarationseq", "declaration", + "blockDeclaration", "aliasDeclaration", "simpleDeclaration", + "staticAssertDeclaration", "emptyDeclaration_", "attributeDeclaration", + "declSpecifier", "declSpecifierSeq", "storageClassSpecifier", + "functionSpecifier", "typedefName", "typeSpecifier", + "trailingTypeSpecifier", "typeSpecifierSeq", "trailingTypeSpecifierSeq", + "simpleTypeLengthModifier", "simpleTypeSignednessModifier", + "simpleTypeSpecifier", "theTypeName", "decltypeSpecifier", + "elaboratedTypeSpecifier", "enumName", "enumSpecifier", + "enumHead", "opaqueEnumDeclaration", "enumkey", "enumbase", + "enumeratorList", "enumeratorDefinition", "enumerator", + "namespaceName", "originalNamespaceName", "namespaceDefinition", + "namespaceAlias", "namespaceAliasDefinition", "qualifiednamespacespecifier", + "usingDeclaration", "usingDirective", "asmDefinition", + "linkageSpecification", "attributeSpecifierSeq", "attributeSpecifier", + "alignmentspecifier", "attributeList", "attribute", "attributeNamespace", + "attributeArgumentClause", "balancedTokenSeq", "balancedtoken", + "initDeclaratorList", "initDeclarator", "declarator", + "pointerDeclarator", "noPointerDeclarator", "parametersAndQualifiers", + "trailingReturnType", "pointerOperator", "cvqualifierseq", + "cvQualifier", "refqualifier", "declaratorid", "theTypeId", + "abstractDeclarator", "pointerAbstractDeclarator", "noPointerAbstractDeclarator", + "abstractPackDeclarator", "noPointerAbstractPackDeclarator", + "parameterDeclarationClause", "parameterDeclarationList", + "parameterDeclaration", "functionDefinition", "functionBody", + "initializer", "braceOrEqualInitializer", "initializerClause", + "initializerList", "bracedInitList", "className", "classSpecifier", + "classHead", "classHeadName", "classVirtSpecifier", "classKey", + "memberSpecification", "memberdeclaration", "memberDeclaratorList", + "memberDeclarator", "virtualSpecifierSeq", "virtualSpecifier", + "pureSpecifier", "baseClause", "baseSpecifierList", "baseSpecifier", + "classOrDeclType", "baseTypeSpecifier", "accessSpecifier", + "conversionFunctionId", "conversionTypeId", "conversionDeclarator", + "constructorInitializer", "memInitializerList", "memInitializer", + "meminitializerid", "operatorFunctionId", "literalOperatorId", + "templateDeclaration", "templateparameterList", "templateParameter", + "typeParameter", "simpleTemplateId", "templateId", "templateName", + "templateArgumentList", "templateArgument", "typeNameSpecifier", + "explicitInstantiation", "explicitSpecialization", "tryBlock", + "functionTryBlock", "handlerSeq", "handler", "exceptionDeclaration", + "throwExpression", "exceptionSpecification", "dynamicExceptionSpecification", + "typeIdList", "noeExceptSpecification", "theOperator", + "literal" ] + + EOF = Token.EOF + IntegerLiteral=1 + CharacterLiteral=2 + FloatingLiteral=3 + StringLiteral=4 + BooleanLiteral=5 + PointerLiteral=6 + UserDefinedLiteral=7 + MultiLineMacro=8 + Directive=9 + Alignas=10 + Alignof=11 + Asm=12 + Auto=13 + Bool=14 + Break=15 + Case=16 + Catch=17 + Char=18 + Char16=19 + Char32=20 + Class=21 + Const=22 + Constexpr=23 + Const_cast=24 + Continue=25 + Decltype=26 + Default=27 + Delete=28 + Do=29 + Double=30 + Dynamic_cast=31 + Else=32 + Enum=33 + Explicit=34 + Export=35 + Extern=36 + False_=37 + Final=38 + Float=39 + For=40 + Friend=41 + Goto=42 + If=43 + Inline=44 + Int=45 + Long=46 + Mutable=47 + Namespace=48 + New=49 + Noexcept=50 + Nullptr=51 + Operator=52 + Override=53 + Private=54 + Protected=55 + Public=56 + Register=57 + Reinterpret_cast=58 + Return=59 + Short=60 + Signed=61 + Sizeof=62 + Static=63 + Static_assert=64 + Static_cast=65 + Struct=66 + Switch=67 + Template=68 + This=69 + Thread_local=70 + Throw=71 + True_=72 + Try=73 + Typedef=74 + Typeid_=75 + Typename_=76 + Union=77 + Unsigned=78 + Using=79 + Virtual=80 + Void=81 + Volatile=82 + Wchar=83 + While=84 + LeftParen=85 + RightParen=86 + LeftBracket=87 + RightBracket=88 + LeftBrace=89 + RightBrace=90 + Plus=91 + Minus=92 + Star=93 + Div=94 + Mod=95 + Caret=96 + And=97 + Or=98 + Tilde=99 + Not=100 + Assign=101 + Less=102 + Greater=103 + PlusAssign=104 + MinusAssign=105 + StarAssign=106 + DivAssign=107 + ModAssign=108 + XorAssign=109 + AndAssign=110 + OrAssign=111 + LeftShiftAssign=112 + RightShiftAssign=113 + Equal=114 + NotEqual=115 + LessEqual=116 + GreaterEqual=117 + AndAnd=118 + OrOr=119 + PlusPlus=120 + MinusMinus=121 + Comma=122 + ArrowStar=123 + Arrow=124 + Question=125 + Colon=126 + Doublecolon=127 + Semi=128 + Dot=129 + DotStar=130 + Ellipsis=131 + Identifier=132 + DecimalLiteral=133 + OctalLiteral=134 + HexadecimalLiteral=135 + BinaryLiteral=136 + Integersuffix=137 + UserDefinedIntegerLiteral=138 + UserDefinedFloatingLiteral=139 + UserDefinedStringLiteral=140 + UserDefinedCharacterLiteral=141 + Whitespace=142 + Newline=143 + BlockComment=144 + LineComment=145 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class TranslationUnitContext(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(CPP14Parser.EOF, 0) + + def declarationseq(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationseqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_translationUnit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTranslationUnit" ): + return visitor.visitTranslationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def translationUnit(self): + + localctx = CPP14Parser.TranslationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_translationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 383 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543754443169808157) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 459384754220313597) != 0): + self.state = 382 + self.declarationseq() + + + self.state = 385 + self.match(CPP14Parser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def literal(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.LiteralContext) + else: + return self.getTypedRuleContext(CPP14Parser.LiteralContext,i) + + + def This(self): + return self.getToken(CPP14Parser.This, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def idExpression(self): + return self.getTypedRuleContext(CPP14Parser.IdExpressionContext,0) + + + def lambdaExpression(self): + return self.getTypedRuleContext(CPP14Parser.LambdaExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_primaryExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimaryExpression" ): + return visitor.visitPrimaryExpression(self) + else: + return visitor.visitChildren(self) + + + + + def primaryExpression(self): + + localctx = CPP14Parser.PrimaryExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_primaryExpression) + try: + self.state = 399 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7]: + self.enterOuterAlt(localctx, 1) + self.state = 388 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 387 + self.literal() + + else: + raise NoViableAltException(self) + self.state = 390 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,1,self._ctx) + + pass + elif token in [69]: + self.enterOuterAlt(localctx, 2) + self.state = 392 + self.match(CPP14Parser.This) + pass + elif token in [85]: + self.enterOuterAlt(localctx, 3) + self.state = 393 + self.match(CPP14Parser.LeftParen) + self.state = 394 + self.expression() + self.state = 395 + self.match(CPP14Parser.RightParen) + pass + elif token in [26, 52, 99, 127, 132]: + self.enterOuterAlt(localctx, 4) + self.state = 397 + self.idExpression() + pass + elif token in [87]: + self.enterOuterAlt(localctx, 5) + self.state = 398 + self.lambdaExpression() + 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 IdExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedId(self): + return self.getTypedRuleContext(CPP14Parser.UnqualifiedIdContext,0) + + + def qualifiedId(self): + return self.getTypedRuleContext(CPP14Parser.QualifiedIdContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_idExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIdExpression" ): + return visitor.visitIdExpression(self) + else: + return visitor.visitChildren(self) + + + + + def idExpression(self): + + localctx = CPP14Parser.IdExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_idExpression) + try: + self.state = 403 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 401 + self.unqualifiedId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 402 + self.qualifiedId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnqualifiedIdContext(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(CPP14Parser.Identifier, 0) + + def operatorFunctionId(self): + return self.getTypedRuleContext(CPP14Parser.OperatorFunctionIdContext,0) + + + def conversionFunctionId(self): + return self.getTypedRuleContext(CPP14Parser.ConversionFunctionIdContext,0) + + + def literalOperatorId(self): + return self.getTypedRuleContext(CPP14Parser.LiteralOperatorIdContext,0) + + + def Tilde(self): + return self.getToken(CPP14Parser.Tilde, 0) + + def className(self): + return self.getTypedRuleContext(CPP14Parser.ClassNameContext,0) + + + def decltypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.DecltypeSpecifierContext,0) + + + def templateId(self): + return self.getTypedRuleContext(CPP14Parser.TemplateIdContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_unqualifiedId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnqualifiedId" ): + return visitor.visitUnqualifiedId(self) + else: + return visitor.visitChildren(self) + + + + + def unqualifiedId(self): + + localctx = CPP14Parser.UnqualifiedIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_unqualifiedId) + try: + self.state = 415 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,5,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 405 + self.match(CPP14Parser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 406 + self.operatorFunctionId() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 407 + self.conversionFunctionId() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 408 + self.literalOperatorId() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 409 + self.match(CPP14Parser.Tilde) + self.state = 412 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [132]: + self.state = 410 + self.className() + pass + elif token in [26]: + self.state = 411 + self.decltypeSpecifier() + pass + else: + raise NoViableAltException(self) + + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 414 + self.templateId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class QualifiedIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def unqualifiedId(self): + return self.getTypedRuleContext(CPP14Parser.UnqualifiedIdContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_qualifiedId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitQualifiedId" ): + return visitor.visitQualifiedId(self) + else: + return visitor.visitChildren(self) + + + + + def qualifiedId(self): + + localctx = CPP14Parser.QualifiedIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_qualifiedId) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 417 + self.nestedNameSpecifier(0) + self.state = 419 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 418 + self.match(CPP14Parser.Template) + + + self.state = 421 + self.unqualifiedId() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NestedNameSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def theTypeName(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeNameContext,0) + + + def namespaceName(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceNameContext,0) + + + def decltypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.DecltypeSpecifierContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_nestedNameSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNestedNameSpecifier" ): + return visitor.visitNestedNameSpecifier(self) + else: + return visitor.visitChildren(self) + + + + def nestedNameSpecifier(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = CPP14Parser.NestedNameSpecifierContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 10 + self.enterRecursionRule(localctx, 10, self.RULE_nestedNameSpecifier, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 427 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,7,self._ctx) + if la_ == 1: + self.state = 424 + self.theTypeName() + + elif la_ == 2: + self.state = 425 + self.namespaceName() + + elif la_ == 3: + self.state = 426 + self.decltypeSpecifier() + + + self.state = 429 + self.match(CPP14Parser.Doublecolon) + self._ctx.stop = self._input.LT(-1) + self.state = 442 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,10,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = CPP14Parser.NestedNameSpecifierContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_nestedNameSpecifier) + self.state = 431 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 437 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,9,self._ctx) + if la_ == 1: + self.state = 432 + self.match(CPP14Parser.Identifier) + pass + + elif la_ == 2: + self.state = 434 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 433 + self.match(CPP14Parser.Template) + + + self.state = 436 + self.simpleTemplateId() + pass + + + self.state = 439 + self.match(CPP14Parser.Doublecolon) + self.state = 444 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,10,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 LambdaExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaIntroducer(self): + return self.getTypedRuleContext(CPP14Parser.LambdaIntroducerContext,0) + + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def lambdaDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.LambdaDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_lambdaExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaExpression" ): + return visitor.visitLambdaExpression(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaExpression(self): + + localctx = CPP14Parser.LambdaExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_lambdaExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 445 + self.lambdaIntroducer() + self.state = 447 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==85: + self.state = 446 + self.lambdaDeclarator() + + + self.state = 449 + self.compoundStatement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaIntroducerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def lambdaCapture(self): + return self.getTypedRuleContext(CPP14Parser.LambdaCaptureContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_lambdaIntroducer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaIntroducer" ): + return visitor.visitLambdaIntroducer(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaIntroducer(self): + + localctx = CPP14Parser.LambdaIntroducerContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_lambdaIntroducer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 451 + self.match(CPP14Parser.LeftBracket) + self.state = 453 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & -9223372032291373055) != 0): + self.state = 452 + self.lambdaCapture() + + + self.state = 455 + self.match(CPP14Parser.RightBracket) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaCaptureContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def captureList(self): + return self.getTypedRuleContext(CPP14Parser.CaptureListContext,0) + + + def captureDefault(self): + return self.getTypedRuleContext(CPP14Parser.CaptureDefaultContext,0) + + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_lambdaCapture + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaCapture" ): + return visitor.visitLambdaCapture(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaCapture(self): + + localctx = CPP14Parser.LambdaCaptureContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_lambdaCapture) + self._la = 0 # Token type + try: + self.state = 463 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,14,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 457 + self.captureList() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 458 + self.captureDefault() + self.state = 461 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==122: + self.state = 459 + self.match(CPP14Parser.Comma) + self.state = 460 + self.captureList() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaptureDefaultContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_captureDefault + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCaptureDefault" ): + return visitor.visitCaptureDefault(self) + else: + return visitor.visitChildren(self) + + + + + def captureDefault(self): + + localctx = CPP14Parser.CaptureDefaultContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_captureDefault) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 465 + _la = self._input.LA(1) + if not(_la==97 or _la==101): + 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 CaptureListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def capture(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.CaptureContext) + else: + return self.getTypedRuleContext(CPP14Parser.CaptureContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_captureList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCaptureList" ): + return visitor.visitCaptureList(self) + else: + return visitor.visitChildren(self) + + + + + def captureList(self): + + localctx = CPP14Parser.CaptureListContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_captureList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 467 + self.capture() + self.state = 472 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 468 + self.match(CPP14Parser.Comma) + self.state = 469 + self.capture() + self.state = 474 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 476 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 475 + self.match(CPP14Parser.Ellipsis) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaptureContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleCapture(self): + return self.getTypedRuleContext(CPP14Parser.SimpleCaptureContext,0) + + + def initcapture(self): + return self.getTypedRuleContext(CPP14Parser.InitcaptureContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_capture + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCapture" ): + return visitor.visitCapture(self) + else: + return visitor.visitChildren(self) + + + + + def capture(self): + + localctx = CPP14Parser.CaptureContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_capture) + try: + self.state = 480 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,17,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 478 + self.simpleCapture() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 479 + self.initcapture() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleCaptureContext(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(CPP14Parser.Identifier, 0) + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def This(self): + return self.getToken(CPP14Parser.This, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleCapture + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleCapture" ): + return visitor.visitSimpleCapture(self) + else: + return visitor.visitChildren(self) + + + + + def simpleCapture(self): + + localctx = CPP14Parser.SimpleCaptureContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_simpleCapture) + self._la = 0 # Token type + try: + self.state = 487 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [97, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 483 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==97: + self.state = 482 + self.match(CPP14Parser.And) + + + self.state = 485 + self.match(CPP14Parser.Identifier) + pass + elif token in [69]: + self.enterOuterAlt(localctx, 2) + self.state = 486 + self.match(CPP14Parser.This) + 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 InitcaptureContext(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(CPP14Parser.Identifier, 0) + + def initializer(self): + return self.getTypedRuleContext(CPP14Parser.InitializerContext,0) + + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_initcapture + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitcapture" ): + return visitor.visitInitcapture(self) + else: + return visitor.visitChildren(self) + + + + + def initcapture(self): + + localctx = CPP14Parser.InitcaptureContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_initcapture) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 490 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==97: + self.state = 489 + self.match(CPP14Parser.And) + + + self.state = 492 + self.match(CPP14Parser.Identifier) + self.state = 493 + self.initializer() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def parameterDeclarationClause(self): + return self.getTypedRuleContext(CPP14Parser.ParameterDeclarationClauseContext,0) + + + def Mutable(self): + return self.getToken(CPP14Parser.Mutable, 0) + + def exceptionSpecification(self): + return self.getTypedRuleContext(CPP14Parser.ExceptionSpecificationContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def trailingReturnType(self): + return self.getTypedRuleContext(CPP14Parser.TrailingReturnTypeContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_lambdaDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaDeclarator" ): + return visitor.visitLambdaDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaDeclarator(self): + + localctx = CPP14Parser.LambdaDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_lambdaDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 495 + self.match(CPP14Parser.LeftParen) + self.state = 497 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1237504995584196377) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 297237575406461917) != 0): + self.state = 496 + self.parameterDeclarationClause() + + + self.state = 499 + self.match(CPP14Parser.RightParen) + self.state = 501 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==47: + self.state = 500 + self.match(CPP14Parser.Mutable) + + + self.state = 504 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==50 or _la==71: + self.state = 503 + self.exceptionSpecification() + + + self.state = 507 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 506 + self.attributeSpecifierSeq() + + + self.state = 510 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==124: + self.state = 509 + self.trailingReturnType() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostfixExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primaryExpression(self): + return self.getTypedRuleContext(CPP14Parser.PrimaryExpressionContext,0) + + + def simpleTypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTypeSpecifierContext,0) + + + def typeNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.TypeNameSpecifierContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def expressionList(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionListContext,0) + + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def Dynamic_cast(self): + return self.getToken(CPP14Parser.Dynamic_cast, 0) + + def Static_cast(self): + return self.getToken(CPP14Parser.Static_cast, 0) + + def Reinterpret_cast(self): + return self.getToken(CPP14Parser.Reinterpret_cast, 0) + + def Const_cast(self): + return self.getToken(CPP14Parser.Const_cast, 0) + + def typeIdOfTheTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TypeIdOfTheTypeIdContext,0) + + + def postfixExpression(self): + return self.getTypedRuleContext(CPP14Parser.PostfixExpressionContext,0) + + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def Dot(self): + return self.getToken(CPP14Parser.Dot, 0) + + def Arrow(self): + return self.getToken(CPP14Parser.Arrow, 0) + + def idExpression(self): + return self.getTypedRuleContext(CPP14Parser.IdExpressionContext,0) + + + def pseudoDestructorName(self): + return self.getTypedRuleContext(CPP14Parser.PseudoDestructorNameContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def PlusPlus(self): + return self.getToken(CPP14Parser.PlusPlus, 0) + + def MinusMinus(self): + return self.getToken(CPP14Parser.MinusMinus, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_postfixExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostfixExpression" ): + return visitor.visitPostfixExpression(self) + else: + return visitor.visitChildren(self) + + + + def postfixExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = CPP14Parser.PostfixExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 30 + self.enterRecursionRule(localctx, 30, self.RULE_postfixExpression, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 542 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,30,self._ctx) + if la_ == 1: + self.state = 513 + self.primaryExpression() + pass + + elif la_ == 2: + self.state = 516 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [13, 14, 18, 19, 20, 26, 30, 39, 45, 46, 60, 61, 78, 81, 83, 127, 132]: + self.state = 514 + self.simpleTypeSpecifier() + pass + elif token in [76]: + self.state = 515 + self.typeNameSpecifier() + pass + else: + raise NoViableAltException(self) + + self.state = 524 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 518 + self.match(CPP14Parser.LeftParen) + self.state = 520 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474400910417) != 0) or _la==132: + self.state = 519 + self.expressionList() + + + self.state = 522 + self.match(CPP14Parser.RightParen) + pass + elif token in [89]: + self.state = 523 + self.bracedInitList() + pass + else: + raise NoViableAltException(self) + + pass + + elif la_ == 3: + self.state = 526 + _la = self._input.LA(1) + if not(((((_la - 24)) & ~0x3f) == 0 and ((1 << (_la - 24)) & 2216203124865) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 527 + self.match(CPP14Parser.Less) + self.state = 528 + self.theTypeId() + self.state = 529 + self.match(CPP14Parser.Greater) + self.state = 530 + self.match(CPP14Parser.LeftParen) + self.state = 531 + self.expression() + self.state = 532 + self.match(CPP14Parser.RightParen) + pass + + elif la_ == 4: + self.state = 534 + self.typeIdOfTheTypeId() + self.state = 535 + self.match(CPP14Parser.LeftParen) + self.state = 538 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + if la_ == 1: + self.state = 536 + self.expression() + pass + + elif la_ == 2: + self.state = 537 + self.theTypeId() + pass + + + self.state = 540 + self.match(CPP14Parser.RightParen) + pass + + + self._ctx.stop = self._input.LT(-1) + self.state = 571 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,36,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 569 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,35,self._ctx) + if la_ == 1: + localctx = CPP14Parser.PostfixExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_postfixExpression) + self.state = 544 + if not self.precpred(self._ctx, 7): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") + self.state = 545 + self.match(CPP14Parser.LeftBracket) + self.state = 548 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 18, 19, 20, 24, 26, 28, 30, 31, 39, 45, 46, 49, 50, 52, 58, 60, 61, 62, 65, 69, 71, 75, 76, 78, 81, 83, 85, 87, 91, 92, 93, 97, 98, 99, 100, 120, 121, 127, 132]: + self.state = 546 + self.expression() + pass + elif token in [89]: + self.state = 547 + self.bracedInitList() + pass + else: + raise NoViableAltException(self) + + self.state = 550 + self.match(CPP14Parser.RightBracket) + pass + + elif la_ == 2: + localctx = CPP14Parser.PostfixExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_postfixExpression) + self.state = 552 + if not self.precpred(self._ctx, 6): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") + self.state = 553 + self.match(CPP14Parser.LeftParen) + self.state = 555 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474400910417) != 0) or _la==132: + self.state = 554 + self.expressionList() + + + self.state = 557 + self.match(CPP14Parser.RightParen) + pass + + elif la_ == 3: + localctx = CPP14Parser.PostfixExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_postfixExpression) + self.state = 558 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 559 + _la = self._input.LA(1) + if not(_la==124 or _la==129): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 565 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,34,self._ctx) + if la_ == 1: + self.state = 561 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 560 + self.match(CPP14Parser.Template) + + + self.state = 563 + self.idExpression() + pass + + elif la_ == 2: + self.state = 564 + self.pseudoDestructorName() + pass + + + pass + + elif la_ == 4: + localctx = CPP14Parser.PostfixExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_postfixExpression) + self.state = 567 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 568 + _la = self._input.LA(1) + if not(_la==120 or _la==121): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + pass + + + self.state = 573 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,36,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 TypeIdOfTheTypeIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Typeid_(self): + return self.getToken(CPP14Parser.Typeid_, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_typeIdOfTheTypeId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeIdOfTheTypeId" ): + return visitor.visitTypeIdOfTheTypeId(self) + else: + return visitor.visitChildren(self) + + + + + def typeIdOfTheTypeId(self): + + localctx = CPP14Parser.TypeIdOfTheTypeIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_typeIdOfTheTypeId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 574 + self.match(CPP14Parser.Typeid_) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def initializerList(self): + return self.getTypedRuleContext(CPP14Parser.InitializerListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_expressionList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionList" ): + return visitor.visitExpressionList(self) + else: + return visitor.visitChildren(self) + + + + + def expressionList(self): + + localctx = CPP14Parser.ExpressionListContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_expressionList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 576 + self.initializerList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PseudoDestructorNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Tilde(self): + return self.getToken(CPP14Parser.Tilde, 0) + + def theTypeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TheTypeNameContext) + else: + return self.getTypedRuleContext(CPP14Parser.TheTypeNameContext,i) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def decltypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.DecltypeSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_pseudoDestructorName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPseudoDestructorName" ): + return visitor.visitPseudoDestructorName(self) + else: + return visitor.visitChildren(self) + + + + + def pseudoDestructorName(self): + + localctx = CPP14Parser.PseudoDestructorNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_pseudoDestructorName) + self._la = 0 # Token type + try: + self.state = 597 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 579 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + if la_ == 1: + self.state = 578 + self.nestedNameSpecifier(0) + + + self.state = 584 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 581 + self.theTypeName() + self.state = 582 + self.match(CPP14Parser.Doublecolon) + + + self.state = 586 + self.match(CPP14Parser.Tilde) + self.state = 587 + self.theTypeName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 588 + self.nestedNameSpecifier(0) + self.state = 589 + self.match(CPP14Parser.Template) + self.state = 590 + self.simpleTemplateId() + self.state = 591 + self.match(CPP14Parser.Doublecolon) + self.state = 592 + self.match(CPP14Parser.Tilde) + self.state = 593 + self.theTypeName() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 595 + self.match(CPP14Parser.Tilde) + self.state = 596 + self.decltypeSpecifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(CPP14Parser.PostfixExpressionContext,0) + + + def unaryExpression(self): + return self.getTypedRuleContext(CPP14Parser.UnaryExpressionContext,0) + + + def PlusPlus(self): + return self.getToken(CPP14Parser.PlusPlus, 0) + + def MinusMinus(self): + return self.getToken(CPP14Parser.MinusMinus, 0) + + def unaryOperator(self): + return self.getTypedRuleContext(CPP14Parser.UnaryOperatorContext,0) + + + def Sizeof(self): + return self.getToken(CPP14Parser.Sizeof, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def Alignof(self): + return self.getToken(CPP14Parser.Alignof, 0) + + def noExceptExpression(self): + return self.getTypedRuleContext(CPP14Parser.NoExceptExpressionContext,0) + + + def newExpression_(self): + return self.getTypedRuleContext(CPP14Parser.NewExpression_Context,0) + + + def deleteExpression(self): + return self.getTypedRuleContext(CPP14Parser.DeleteExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_unaryExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryExpression" ): + return visitor.visitUnaryExpression(self) + else: + return visitor.visitChildren(self) + + + + + def unaryExpression(self): + + localctx = CPP14Parser.UnaryExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_unaryExpression) + try: + self.state = 626 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,42,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 599 + self.postfixExpression(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 604 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [120]: + self.state = 600 + self.match(CPP14Parser.PlusPlus) + pass + elif token in [121]: + self.state = 601 + self.match(CPP14Parser.MinusMinus) + pass + elif token in [91, 92, 93, 97, 98, 99, 100]: + self.state = 602 + self.unaryOperator() + pass + elif token in [62]: + self.state = 603 + self.match(CPP14Parser.Sizeof) + pass + else: + raise NoViableAltException(self) + + self.state = 606 + self.unaryExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 607 + self.match(CPP14Parser.Sizeof) + self.state = 616 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 608 + self.match(CPP14Parser.LeftParen) + self.state = 609 + self.theTypeId() + self.state = 610 + self.match(CPP14Parser.RightParen) + pass + elif token in [131]: + self.state = 612 + self.match(CPP14Parser.Ellipsis) + self.state = 613 + self.match(CPP14Parser.LeftParen) + self.state = 614 + self.match(CPP14Parser.Identifier) + self.state = 615 + self.match(CPP14Parser.RightParen) + pass + else: + raise NoViableAltException(self) + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 618 + self.match(CPP14Parser.Alignof) + self.state = 619 + self.match(CPP14Parser.LeftParen) + self.state = 620 + self.theTypeId() + self.state = 621 + self.match(CPP14Parser.RightParen) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 623 + self.noExceptExpression() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 624 + self.newExpression_() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 625 + self.deleteExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Or(self): + return self.getToken(CPP14Parser.Or, 0) + + def Star(self): + return self.getToken(CPP14Parser.Star, 0) + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def Plus(self): + return self.getToken(CPP14Parser.Plus, 0) + + def Tilde(self): + return self.getToken(CPP14Parser.Tilde, 0) + + def Minus(self): + return self.getToken(CPP14Parser.Minus, 0) + + def Not(self): + return self.getToken(CPP14Parser.Not, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_unaryOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryOperator" ): + return visitor.visitUnaryOperator(self) + else: + return visitor.visitChildren(self) + + + + + def unaryOperator(self): + + localctx = CPP14Parser.UnaryOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_unaryOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 628 + _la = self._input.LA(1) + if not(((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & 967) != 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 NewExpression_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def New(self): + return self.getToken(CPP14Parser.New, 0) + + def newTypeId(self): + return self.getTypedRuleContext(CPP14Parser.NewTypeIdContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def newPlacement(self): + return self.getTypedRuleContext(CPP14Parser.NewPlacementContext,0) + + + def newInitializer_(self): + return self.getTypedRuleContext(CPP14Parser.NewInitializer_Context,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_newExpression_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNewExpression_" ): + return visitor.visitNewExpression_(self) + else: + return visitor.visitChildren(self) + + + + + def newExpression_(self): + + localctx = CPP14Parser.NewExpression_Context(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_newExpression_) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 631 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==127: + self.state = 630 + self.match(CPP14Parser.Doublecolon) + + + self.state = 633 + self.match(CPP14Parser.New) + self.state = 635 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,44,self._ctx) + if la_ == 1: + self.state = 634 + self.newPlacement() + + + self.state = 642 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [13, 14, 18, 19, 20, 21, 22, 26, 30, 33, 39, 45, 46, 60, 61, 66, 76, 77, 78, 81, 82, 83, 127, 132]: + self.state = 637 + self.newTypeId() + pass + elif token in [85]: + self.state = 638 + self.match(CPP14Parser.LeftParen) + self.state = 639 + self.theTypeId() + self.state = 640 + self.match(CPP14Parser.RightParen) + pass + else: + raise NoViableAltException(self) + + self.state = 645 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==85 or _la==89: + self.state = 644 + self.newInitializer_() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NewPlacementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def expressionList(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionListContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_newPlacement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNewPlacement" ): + return visitor.visitNewPlacement(self) + else: + return visitor.visitChildren(self) + + + + + def newPlacement(self): + + localctx = CPP14Parser.NewPlacementContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_newPlacement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 647 + self.match(CPP14Parser.LeftParen) + self.state = 648 + self.expressionList() + self.state = 649 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NewTypeIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierSeqContext,0) + + + def newDeclarator_(self): + return self.getTypedRuleContext(CPP14Parser.NewDeclarator_Context,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_newTypeId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNewTypeId" ): + return visitor.visitNewTypeId(self) + else: + return visitor.visitChildren(self) + + + + + def newTypeId(self): + + localctx = CPP14Parser.NewTypeIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_newTypeId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 651 + self.typeSpecifierSeq() + self.state = 653 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,47,self._ctx) + if la_ == 1: + self.state = 652 + self.newDeclarator_() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NewDeclarator_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def pointerOperator(self): + return self.getTypedRuleContext(CPP14Parser.PointerOperatorContext,0) + + + def newDeclarator_(self): + return self.getTypedRuleContext(CPP14Parser.NewDeclarator_Context,0) + + + def noPointerNewDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerNewDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_newDeclarator_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNewDeclarator_" ): + return visitor.visitNewDeclarator_(self) + else: + return visitor.visitChildren(self) + + + + + def newDeclarator_(self): + + localctx = CPP14Parser.NewDeclarator_Context(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_newDeclarator_) + try: + self.state = 660 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26, 93, 97, 118, 127, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 655 + self.pointerOperator() + self.state = 657 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,48,self._ctx) + if la_ == 1: + self.state = 656 + self.newDeclarator_() + + + pass + elif token in [87]: + self.enterOuterAlt(localctx, 2) + self.state = 659 + self.noPointerNewDeclarator(0) + 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 NoPointerNewDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def noPointerNewDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerNewDeclaratorContext,0) + + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_noPointerNewDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoPointerNewDeclarator" ): + return visitor.visitNoPointerNewDeclarator(self) + else: + return visitor.visitChildren(self) + + + + def noPointerNewDeclarator(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = CPP14Parser.NoPointerNewDeclaratorContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 50 + self.enterRecursionRule(localctx, 50, self.RULE_noPointerNewDeclarator, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 663 + self.match(CPP14Parser.LeftBracket) + self.state = 664 + self.expression() + self.state = 665 + self.match(CPP14Parser.RightBracket) + self.state = 667 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,50,self._ctx) + if la_ == 1: + self.state = 666 + self.attributeSpecifierSeq() + + + self._ctx.stop = self._input.LT(-1) + self.state = 678 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,52,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = CPP14Parser.NoPointerNewDeclaratorContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_noPointerNewDeclarator) + self.state = 669 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 670 + self.match(CPP14Parser.LeftBracket) + self.state = 671 + self.constantExpression() + self.state = 672 + self.match(CPP14Parser.RightBracket) + self.state = 674 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,51,self._ctx) + if la_ == 1: + self.state = 673 + self.attributeSpecifierSeq() + + + self.state = 680 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,52,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 NewInitializer_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def expressionList(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionListContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_newInitializer_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNewInitializer_" ): + return visitor.visitNewInitializer_(self) + else: + return visitor.visitChildren(self) + + + + + def newInitializer_(self): + + localctx = CPP14Parser.NewInitializer_Context(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_newInitializer_) + self._la = 0 # Token type + try: + self.state = 687 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.enterOuterAlt(localctx, 1) + self.state = 681 + self.match(CPP14Parser.LeftParen) + self.state = 683 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474400910417) != 0) or _la==132: + self.state = 682 + self.expressionList() + + + self.state = 685 + self.match(CPP14Parser.RightParen) + pass + elif token in [89]: + self.enterOuterAlt(localctx, 2) + self.state = 686 + self.bracedInitList() + 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 DeleteExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Delete(self): + return self.getToken(CPP14Parser.Delete, 0) + + def castExpression(self): + return self.getTypedRuleContext(CPP14Parser.CastExpressionContext,0) + + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_deleteExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeleteExpression" ): + return visitor.visitDeleteExpression(self) + else: + return visitor.visitChildren(self) + + + + + def deleteExpression(self): + + localctx = CPP14Parser.DeleteExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_deleteExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 690 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==127: + self.state = 689 + self.match(CPP14Parser.Doublecolon) + + + self.state = 692 + self.match(CPP14Parser.Delete) + self.state = 695 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,56,self._ctx) + if la_ == 1: + self.state = 693 + self.match(CPP14Parser.LeftBracket) + self.state = 694 + self.match(CPP14Parser.RightBracket) + + + self.state = 697 + self.castExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NoExceptExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Noexcept(self): + return self.getToken(CPP14Parser.Noexcept, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_noExceptExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoExceptExpression" ): + return visitor.visitNoExceptExpression(self) + else: + return visitor.visitChildren(self) + + + + + def noExceptExpression(self): + + localctx = CPP14Parser.NoExceptExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_noExceptExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 699 + self.match(CPP14Parser.Noexcept) + self.state = 700 + self.match(CPP14Parser.LeftParen) + self.state = 701 + self.expression() + self.state = 702 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CastExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unaryExpression(self): + return self.getTypedRuleContext(CPP14Parser.UnaryExpressionContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def castExpression(self): + return self.getTypedRuleContext(CPP14Parser.CastExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_castExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCastExpression" ): + return visitor.visitCastExpression(self) + else: + return visitor.visitChildren(self) + + + + + def castExpression(self): + + localctx = CPP14Parser.CastExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_castExpression) + try: + self.state = 710 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,57,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 704 + self.unaryExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 705 + self.match(CPP14Parser.LeftParen) + self.state = 706 + self.theTypeId() + self.state = 707 + self.match(CPP14Parser.RightParen) + self.state = 708 + self.castExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PointerMemberExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def castExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.CastExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.CastExpressionContext,i) + + + def DotStar(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.DotStar) + else: + return self.getToken(CPP14Parser.DotStar, i) + + def ArrowStar(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.ArrowStar) + else: + return self.getToken(CPP14Parser.ArrowStar, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_pointerMemberExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPointerMemberExpression" ): + return visitor.visitPointerMemberExpression(self) + else: + return visitor.visitChildren(self) + + + + + def pointerMemberExpression(self): + + localctx = CPP14Parser.PointerMemberExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_pointerMemberExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 712 + self.castExpression() + self.state = 717 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==123 or _la==130: + self.state = 713 + _la = self._input.LA(1) + if not(_la==123 or _la==130): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 714 + self.castExpression() + self.state = 719 + 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 MultiplicativeExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def pointerMemberExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.PointerMemberExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.PointerMemberExpressionContext,i) + + + def Star(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Star) + else: + return self.getToken(CPP14Parser.Star, i) + + def Div(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Div) + else: + return self.getToken(CPP14Parser.Div, i) + + def Mod(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Mod) + else: + return self.getToken(CPP14Parser.Mod, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_multiplicativeExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMultiplicativeExpression" ): + return visitor.visitMultiplicativeExpression(self) + else: + return visitor.visitChildren(self) + + + + + def multiplicativeExpression(self): + + localctx = CPP14Parser.MultiplicativeExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_multiplicativeExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 720 + self.pointerMemberExpression() + self.state = 725 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 93)) & ~0x3f) == 0 and ((1 << (_la - 93)) & 7) != 0): + self.state = 721 + _la = self._input.LA(1) + if not(((((_la - 93)) & ~0x3f) == 0 and ((1 << (_la - 93)) & 7) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 722 + self.pointerMemberExpression() + self.state = 727 + 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 AdditiveExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def multiplicativeExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.MultiplicativeExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.MultiplicativeExpressionContext,i) + + + def Plus(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Plus) + else: + return self.getToken(CPP14Parser.Plus, i) + + def Minus(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Minus) + else: + return self.getToken(CPP14Parser.Minus, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_additiveExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAdditiveExpression" ): + return visitor.visitAdditiveExpression(self) + else: + return visitor.visitChildren(self) + + + + + def additiveExpression(self): + + localctx = CPP14Parser.AdditiveExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_additiveExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 728 + self.multiplicativeExpression() + self.state = 733 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==91 or _la==92: + self.state = 729 + _la = self._input.LA(1) + if not(_la==91 or _la==92): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 730 + self.multiplicativeExpression() + self.state = 735 + 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 ShiftExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def additiveExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AdditiveExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.AdditiveExpressionContext,i) + + + def shiftOperator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ShiftOperatorContext) + else: + return self.getTypedRuleContext(CPP14Parser.ShiftOperatorContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_shiftExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitShiftExpression" ): + return visitor.visitShiftExpression(self) + else: + return visitor.visitChildren(self) + + + + + def shiftExpression(self): + + localctx = CPP14Parser.ShiftExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_shiftExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 736 + self.additiveExpression() + self.state = 742 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 737 + self.shiftOperator() + self.state = 738 + self.additiveExpression() + self.state = 744 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ShiftOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Greater(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Greater) + else: + return self.getToken(CPP14Parser.Greater, i) + + def Less(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Less) + else: + return self.getToken(CPP14Parser.Less, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_shiftOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitShiftOperator" ): + return visitor.visitShiftOperator(self) + else: + return visitor.visitChildren(self) + + + + + def shiftOperator(self): + + localctx = CPP14Parser.ShiftOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_shiftOperator) + try: + self.state = 749 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [103]: + self.enterOuterAlt(localctx, 1) + self.state = 745 + self.match(CPP14Parser.Greater) + self.state = 746 + self.match(CPP14Parser.Greater) + pass + elif token in [102]: + self.enterOuterAlt(localctx, 2) + self.state = 747 + self.match(CPP14Parser.Less) + self.state = 748 + self.match(CPP14Parser.Less) + 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 RelationalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def shiftExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ShiftExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.ShiftExpressionContext,i) + + + def Less(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Less) + else: + return self.getToken(CPP14Parser.Less, i) + + def Greater(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Greater) + else: + return self.getToken(CPP14Parser.Greater, i) + + def LessEqual(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LessEqual) + else: + return self.getToken(CPP14Parser.LessEqual, i) + + def GreaterEqual(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.GreaterEqual) + else: + return self.getToken(CPP14Parser.GreaterEqual, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_relationalExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRelationalExpression" ): + return visitor.visitRelationalExpression(self) + else: + return visitor.visitChildren(self) + + + + + def relationalExpression(self): + + localctx = CPP14Parser.RelationalExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_relationalExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 751 + self.shiftExpression() + self.state = 756 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,63,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 752 + _la = self._input.LA(1) + if not(((((_la - 102)) & ~0x3f) == 0 and ((1 << (_la - 102)) & 49155) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 753 + self.shiftExpression() + self.state = 758 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,63,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EqualityExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def relationalExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.RelationalExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.RelationalExpressionContext,i) + + + def Equal(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Equal) + else: + return self.getToken(CPP14Parser.Equal, i) + + def NotEqual(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.NotEqual) + else: + return self.getToken(CPP14Parser.NotEqual, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_equalityExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEqualityExpression" ): + return visitor.visitEqualityExpression(self) + else: + return visitor.visitChildren(self) + + + + + def equalityExpression(self): + + localctx = CPP14Parser.EqualityExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_equalityExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 759 + self.relationalExpression() + self.state = 764 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==114 or _la==115: + self.state = 760 + _la = self._input.LA(1) + if not(_la==114 or _la==115): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 761 + self.relationalExpression() + self.state = 766 + 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 AndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def equalityExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.EqualityExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.EqualityExpressionContext,i) + + + def And(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.And) + else: + return self.getToken(CPP14Parser.And, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_andExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAndExpression" ): + return visitor.visitAndExpression(self) + else: + return visitor.visitChildren(self) + + + + + def andExpression(self): + + localctx = CPP14Parser.AndExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_andExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 767 + self.equalityExpression() + self.state = 772 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==97: + self.state = 768 + self.match(CPP14Parser.And) + self.state = 769 + self.equalityExpression() + self.state = 774 + 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 ExclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def andExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AndExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.AndExpressionContext,i) + + + def Caret(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Caret) + else: + return self.getToken(CPP14Parser.Caret, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_exclusiveOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExclusiveOrExpression" ): + return visitor.visitExclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + + def exclusiveOrExpression(self): + + localctx = CPP14Parser.ExclusiveOrExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_exclusiveOrExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 775 + self.andExpression() + self.state = 780 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==96: + self.state = 776 + self.match(CPP14Parser.Caret) + self.state = 777 + self.andExpression() + self.state = 782 + 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 InclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def exclusiveOrExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ExclusiveOrExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.ExclusiveOrExpressionContext,i) + + + def Or(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Or) + else: + return self.getToken(CPP14Parser.Or, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_inclusiveOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInclusiveOrExpression" ): + return visitor.visitInclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + + def inclusiveOrExpression(self): + + localctx = CPP14Parser.InclusiveOrExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_inclusiveOrExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 783 + self.exclusiveOrExpression() + self.state = 788 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==98: + self.state = 784 + self.match(CPP14Parser.Or) + self.state = 785 + self.exclusiveOrExpression() + self.state = 790 + 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 LogicalAndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def inclusiveOrExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.InclusiveOrExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.InclusiveOrExpressionContext,i) + + + def AndAnd(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.AndAnd) + else: + return self.getToken(CPP14Parser.AndAnd, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_logicalAndExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLogicalAndExpression" ): + return visitor.visitLogicalAndExpression(self) + else: + return visitor.visitChildren(self) + + + + + def logicalAndExpression(self): + + localctx = CPP14Parser.LogicalAndExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_logicalAndExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 791 + self.inclusiveOrExpression() + self.state = 796 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==118: + self.state = 792 + self.match(CPP14Parser.AndAnd) + self.state = 793 + self.inclusiveOrExpression() + self.state = 798 + 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 LogicalOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def logicalAndExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.LogicalAndExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.LogicalAndExpressionContext,i) + + + def OrOr(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.OrOr) + else: + return self.getToken(CPP14Parser.OrOr, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_logicalOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLogicalOrExpression" ): + return visitor.visitLogicalOrExpression(self) + else: + return visitor.visitChildren(self) + + + + + def logicalOrExpression(self): + + localctx = CPP14Parser.LogicalOrExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_logicalOrExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 799 + self.logicalAndExpression() + self.state = 804 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==119: + self.state = 800 + self.match(CPP14Parser.OrOr) + self.state = 801 + self.logicalAndExpression() + self.state = 806 + 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 ConditionalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def logicalOrExpression(self): + return self.getTypedRuleContext(CPP14Parser.LogicalOrExpressionContext,0) + + + def Question(self): + return self.getToken(CPP14Parser.Question, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def assignmentExpression(self): + return self.getTypedRuleContext(CPP14Parser.AssignmentExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_conditionalExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalExpression" ): + return visitor.visitConditionalExpression(self) + else: + return visitor.visitChildren(self) + + + + + def conditionalExpression(self): + + localctx = CPP14Parser.ConditionalExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_conditionalExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 807 + self.logicalOrExpression() + self.state = 813 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==125: + self.state = 808 + self.match(CPP14Parser.Question) + self.state = 809 + self.expression() + self.state = 810 + self.match(CPP14Parser.Colon) + self.state = 811 + self.assignmentExpression() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConditionalExpressionContext,0) + + + def logicalOrExpression(self): + return self.getTypedRuleContext(CPP14Parser.LogicalOrExpressionContext,0) + + + def assignmentOperator(self): + return self.getTypedRuleContext(CPP14Parser.AssignmentOperatorContext,0) + + + def initializerClause(self): + return self.getTypedRuleContext(CPP14Parser.InitializerClauseContext,0) + + + def throwExpression(self): + return self.getTypedRuleContext(CPP14Parser.ThrowExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_assignmentExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentExpression" ): + return visitor.visitAssignmentExpression(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentExpression(self): + + localctx = CPP14Parser.AssignmentExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_assignmentExpression) + try: + self.state = 821 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,71,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 815 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 816 + self.logicalOrExpression() + self.state = 817 + self.assignmentOperator() + self.state = 818 + self.initializerClause() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 820 + self.throwExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def StarAssign(self): + return self.getToken(CPP14Parser.StarAssign, 0) + + def DivAssign(self): + return self.getToken(CPP14Parser.DivAssign, 0) + + def ModAssign(self): + return self.getToken(CPP14Parser.ModAssign, 0) + + def PlusAssign(self): + return self.getToken(CPP14Parser.PlusAssign, 0) + + def MinusAssign(self): + return self.getToken(CPP14Parser.MinusAssign, 0) + + def RightShiftAssign(self): + return self.getToken(CPP14Parser.RightShiftAssign, 0) + + def LeftShiftAssign(self): + return self.getToken(CPP14Parser.LeftShiftAssign, 0) + + def AndAssign(self): + return self.getToken(CPP14Parser.AndAssign, 0) + + def XorAssign(self): + return self.getToken(CPP14Parser.XorAssign, 0) + + def OrAssign(self): + return self.getToken(CPP14Parser.OrAssign, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_assignmentOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentOperator" ): + return visitor.visitAssignmentOperator(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentOperator(self): + + localctx = CPP14Parser.AssignmentOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_assignmentOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 823 + _la = self._input.LA(1) + if not(((((_la - 101)) & ~0x3f) == 0 and ((1 << (_la - 101)) & 8185) != 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 ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignmentExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AssignmentExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.AssignmentExpressionContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_expression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpression" ): + return visitor.visitExpression(self) + else: + return visitor.visitChildren(self) + + + + + def expression(self): + + localctx = CPP14Parser.ExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_expression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 825 + self.assignmentExpression() + self.state = 830 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 826 + self.match(CPP14Parser.Comma) + self.state = 827 + self.assignmentExpression() + self.state = 832 + 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 ConstantExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConditionalExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_constantExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantExpression" ): + return visitor.visitConstantExpression(self) + else: + return visitor.visitChildren(self) + + + + + def constantExpression(self): + + localctx = CPP14Parser.ConstantExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_constantExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 833 + self.conditionalExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def labeledStatement(self): + return self.getTypedRuleContext(CPP14Parser.LabeledStatementContext,0) + + + def declarationStatement(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationStatementContext,0) + + + def expressionStatement(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionStatementContext,0) + + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def selectionStatement(self): + return self.getTypedRuleContext(CPP14Parser.SelectionStatementContext,0) + + + def iterationStatement(self): + return self.getTypedRuleContext(CPP14Parser.IterationStatementContext,0) + + + def jumpStatement(self): + return self.getTypedRuleContext(CPP14Parser.JumpStatementContext,0) + + + def tryBlock(self): + return self.getTypedRuleContext(CPP14Parser.TryBlockContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_statement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatement" ): + return visitor.visitStatement(self) + else: + return visitor.visitChildren(self) + + + + + def statement(self): + + localctx = CPP14Parser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_statement) + try: + self.state = 848 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 835 + self.labeledStatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 836 + self.declarationStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 838 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,73,self._ctx) + if la_ == 1: + self.state = 837 + self.attributeSpecifierSeq() + + + self.state = 846 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 18, 19, 20, 24, 26, 28, 30, 31, 39, 45, 46, 49, 50, 52, 58, 60, 61, 62, 65, 69, 71, 75, 76, 78, 81, 83, 85, 87, 91, 92, 93, 97, 98, 99, 100, 120, 121, 127, 128, 132]: + self.state = 840 + self.expressionStatement() + pass + elif token in [89]: + self.state = 841 + self.compoundStatement() + pass + elif token in [43, 67]: + self.state = 842 + self.selectionStatement() + pass + elif token in [29, 40, 84]: + self.state = 843 + self.iterationStatement() + pass + elif token in [15, 25, 42, 59]: + self.state = 844 + self.jumpStatement() + pass + elif token in [73]: + self.state = 845 + self.tryBlock() + pass + else: + raise NoViableAltException(self) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabeledStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def statement(self): + return self.getTypedRuleContext(CPP14Parser.StatementContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def Case(self): + return self.getToken(CPP14Parser.Case, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def Default(self): + return self.getToken(CPP14Parser.Default, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_labeledStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLabeledStatement" ): + return visitor.visitLabeledStatement(self) + else: + return visitor.visitChildren(self) + + + + + def labeledStatement(self): + + localctx = CPP14Parser.LabeledStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_labeledStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 851 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 850 + self.attributeSpecifierSeq() + + + self.state = 857 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [132]: + self.state = 853 + self.match(CPP14Parser.Identifier) + pass + elif token in [16]: + self.state = 854 + self.match(CPP14Parser.Case) + self.state = 855 + self.constantExpression() + pass + elif token in [27]: + self.state = 856 + self.match(CPP14Parser.Default) + pass + else: + raise NoViableAltException(self) + + self.state = 859 + self.match(CPP14Parser.Colon) + self.state = 860 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_expressionStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionStatement" ): + return visitor.visitExpressionStatement(self) + else: + return visitor.visitChildren(self) + + + + + def expressionStatement(self): + + localctx = CPP14Parser.ExpressionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_expressionStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 863 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133201) != 0) or _la==132: + self.state = 862 + self.expression() + + + self.state = 865 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CompoundStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def statementSeq(self): + return self.getTypedRuleContext(CPP14Parser.StatementSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_compoundStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCompoundStatement" ): + return visitor.visitCompoundStatement(self) + else: + return visitor.visitChildren(self) + + + + + def compoundStatement(self): + + localctx = CPP14Parser.CompoundStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_compoundStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 867 + self.match(CPP14Parser.LeftBrace) + self.state = 869 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -137360239606498050) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -8989184726396829969) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 25) != 0): + self.state = 868 + self.statementSeq() + + + self.state = 871 + self.match(CPP14Parser.RightBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.StatementContext) + else: + return self.getTypedRuleContext(CPP14Parser.StatementContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_statementSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementSeq" ): + return visitor.visitStatementSeq(self) + else: + return visitor.visitChildren(self) + + + + + def statementSeq(self): + + localctx = CPP14Parser.StatementSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_statementSeq) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 874 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 873 + self.statement() + self.state = 876 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -137360239606498050) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -8989184726396829969) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 25) != 0)): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SelectionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def If(self): + return self.getToken(CPP14Parser.If, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def condition(self): + return self.getTypedRuleContext(CPP14Parser.ConditionContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.StatementContext) + else: + return self.getTypedRuleContext(CPP14Parser.StatementContext,i) + + + def Else(self): + return self.getToken(CPP14Parser.Else, 0) + + def Switch(self): + return self.getToken(CPP14Parser.Switch, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_selectionStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSelectionStatement" ): + return visitor.visitSelectionStatement(self) + else: + return visitor.visitChildren(self) + + + + + def selectionStatement(self): + + localctx = CPP14Parser.SelectionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_selectionStatement) + try: + self.state = 893 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [43]: + self.enterOuterAlt(localctx, 1) + self.state = 878 + self.match(CPP14Parser.If) + self.state = 879 + self.match(CPP14Parser.LeftParen) + self.state = 880 + self.condition() + self.state = 881 + self.match(CPP14Parser.RightParen) + self.state = 882 + self.statement() + self.state = 885 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) + if la_ == 1: + self.state = 883 + self.match(CPP14Parser.Else) + self.state = 884 + self.statement() + + + pass + elif token in [67]: + self.enterOuterAlt(localctx, 2) + self.state = 887 + self.match(CPP14Parser.Switch) + self.state = 888 + self.match(CPP14Parser.LeftParen) + self.state = 889 + self.condition() + self.state = 890 + self.match(CPP14Parser.RightParen) + self.state = 891 + self.statement() + 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 ConditionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def initializerClause(self): + return self.getTypedRuleContext(CPP14Parser.InitializerClauseContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_condition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCondition" ): + return visitor.visitCondition(self) + else: + return visitor.visitChildren(self) + + + + + def condition(self): + + localctx = CPP14Parser.ConditionContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_condition) + self._la = 0 # Token type + try: + self.state = 906 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,85,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 895 + self.expression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 897 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 896 + self.attributeSpecifierSeq() + + + self.state = 899 + self.declSpecifierSeq() + self.state = 900 + self.declarator() + self.state = 904 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [101]: + self.state = 901 + self.match(CPP14Parser.Assign) + self.state = 902 + self.initializerClause() + pass + elif token in [89]: + self.state = 903 + self.bracedInitList() + pass + else: + raise NoViableAltException(self) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IterationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def While(self): + return self.getToken(CPP14Parser.While, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def condition(self): + return self.getTypedRuleContext(CPP14Parser.ConditionContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def statement(self): + return self.getTypedRuleContext(CPP14Parser.StatementContext,0) + + + def Do(self): + return self.getToken(CPP14Parser.Do, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def For(self): + return self.getToken(CPP14Parser.For, 0) + + def forInitStatement(self): + return self.getTypedRuleContext(CPP14Parser.ForInitStatementContext,0) + + + def forRangeDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.ForRangeDeclarationContext,0) + + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def forRangeInitializer(self): + return self.getTypedRuleContext(CPP14Parser.ForRangeInitializerContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_iterationStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIterationStatement" ): + return visitor.visitIterationStatement(self) + else: + return visitor.visitChildren(self) + + + + + def iterationStatement(self): + + localctx = CPP14Parser.IterationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_iterationStatement) + self._la = 0 # Token type + try: + self.state = 941 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [84]: + self.enterOuterAlt(localctx, 1) + self.state = 908 + self.match(CPP14Parser.While) + self.state = 909 + self.match(CPP14Parser.LeftParen) + self.state = 910 + self.condition() + self.state = 911 + self.match(CPP14Parser.RightParen) + self.state = 912 + self.statement() + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 914 + self.match(CPP14Parser.Do) + self.state = 915 + self.statement() + self.state = 916 + self.match(CPP14Parser.While) + self.state = 917 + self.match(CPP14Parser.LeftParen) + self.state = 918 + self.expression() + self.state = 919 + self.match(CPP14Parser.RightParen) + self.state = 920 + self.match(CPP14Parser.Semi) + pass + elif token in [40]: + self.enterOuterAlt(localctx, 3) + self.state = 922 + self.match(CPP14Parser.For) + self.state = 923 + self.match(CPP14Parser.LeftParen) + self.state = 936 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,88,self._ctx) + if la_ == 1: + self.state = 924 + self.forInitStatement() + self.state = 926 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -714116761242538754) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384301683) != 0) or _la==132: + self.state = 925 + self.condition() + + + self.state = 928 + self.match(CPP14Parser.Semi) + self.state = 930 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133201) != 0) or _la==132: + self.state = 929 + self.expression() + + + pass + + elif la_ == 2: + self.state = 932 + self.forRangeDeclaration() + self.state = 933 + self.match(CPP14Parser.Colon) + self.state = 934 + self.forRangeInitializer() + pass + + + self.state = 938 + self.match(CPP14Parser.RightParen) + self.state = 939 + self.statement() + 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 ForInitStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionStatement(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionStatementContext,0) + + + def simpleDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.SimpleDeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_forInitStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForInitStatement" ): + return visitor.visitForInitStatement(self) + else: + return visitor.visitChildren(self) + + + + + def forInitStatement(self): + + localctx = CPP14Parser.ForInitStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_forInitStatement) + try: + self.state = 945 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,90,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 943 + self.expressionStatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 944 + self.simpleDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForRangeDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_forRangeDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForRangeDeclaration" ): + return visitor.visitForRangeDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def forRangeDeclaration(self): + + localctx = CPP14Parser.ForRangeDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_forRangeDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 948 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 947 + self.attributeSpecifierSeq() + + + self.state = 950 + self.declSpecifierSeq() + self.state = 951 + self.declarator() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForRangeInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_forRangeInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForRangeInitializer" ): + return visitor.visitForRangeInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def forRangeInitializer(self): + + localctx = CPP14Parser.ForRangeInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_forRangeInitializer) + try: + self.state = 955 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 18, 19, 20, 24, 26, 28, 30, 31, 39, 45, 46, 49, 50, 52, 58, 60, 61, 62, 65, 69, 71, 75, 76, 78, 81, 83, 85, 87, 91, 92, 93, 97, 98, 99, 100, 120, 121, 127, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 953 + self.expression() + pass + elif token in [89]: + self.enterOuterAlt(localctx, 2) + self.state = 954 + self.bracedInitList() + 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 JumpStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def Break(self): + return self.getToken(CPP14Parser.Break, 0) + + def Continue(self): + return self.getToken(CPP14Parser.Continue, 0) + + def Return(self): + return self.getToken(CPP14Parser.Return, 0) + + def Goto(self): + return self.getToken(CPP14Parser.Goto, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_jumpStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitJumpStatement" ): + return visitor.visitJumpStatement(self) + else: + return visitor.visitChildren(self) + + + + + def jumpStatement(self): + + localctx = CPP14Parser.JumpStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_jumpStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 966 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [15]: + self.state = 957 + self.match(CPP14Parser.Break) + pass + elif token in [25]: + self.state = 958 + self.match(CPP14Parser.Continue) + pass + elif token in [59]: + self.state = 959 + self.match(CPP14Parser.Return) + self.state = 962 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 18, 19, 20, 24, 26, 28, 30, 31, 39, 45, 46, 49, 50, 52, 58, 60, 61, 62, 65, 69, 71, 75, 76, 78, 81, 83, 85, 87, 91, 92, 93, 97, 98, 99, 100, 120, 121, 127, 132]: + self.state = 960 + self.expression() + pass + elif token in [89]: + self.state = 961 + self.bracedInitList() + pass + elif token in [128]: + pass + else: + pass + pass + elif token in [42]: + self.state = 964 + self.match(CPP14Parser.Goto) + self.state = 965 + self.match(CPP14Parser.Identifier) + pass + else: + raise NoViableAltException(self) + + self.state = 968 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclarationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def blockDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.BlockDeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_declarationStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclarationStatement" ): + return visitor.visitDeclarationStatement(self) + else: + return visitor.visitChildren(self) + + + + + def declarationStatement(self): + + localctx = CPP14Parser.DeclarationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_declarationStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 970 + self.blockDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclarationseqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.DeclarationContext) + else: + return self.getTypedRuleContext(CPP14Parser.DeclarationContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_declarationseq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclarationseq" ): + return visitor.visitDeclarationseq(self) + else: + return visitor.visitChildren(self) + + + + + def declarationseq(self): + + localctx = CPP14Parser.DeclarationseqContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_declarationseq) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 973 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 972 + self.declaration() + self.state = 975 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543754443169808157) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 459384754220313597) != 0)): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def blockDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.BlockDeclarationContext,0) + + + def functionDefinition(self): + return self.getTypedRuleContext(CPP14Parser.FunctionDefinitionContext,0) + + + def templateDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.TemplateDeclarationContext,0) + + + def explicitInstantiation(self): + return self.getTypedRuleContext(CPP14Parser.ExplicitInstantiationContext,0) + + + def explicitSpecialization(self): + return self.getTypedRuleContext(CPP14Parser.ExplicitSpecializationContext,0) + + + def linkageSpecification(self): + return self.getTypedRuleContext(CPP14Parser.LinkageSpecificationContext,0) + + + def namespaceDefinition(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceDefinitionContext,0) + + + def emptyDeclaration_(self): + return self.getTypedRuleContext(CPP14Parser.EmptyDeclaration_Context,0) + + + def attributeDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.AttributeDeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_declaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclaration" ): + return visitor.visitDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def declaration(self): + + localctx = CPP14Parser.DeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_declaration) + try: + self.state = 986 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,96,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 977 + self.blockDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 978 + self.functionDefinition() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 979 + self.templateDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 980 + self.explicitInstantiation() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 981 + self.explicitSpecialization() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 982 + self.linkageSpecification() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 983 + self.namespaceDefinition() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 984 + self.emptyDeclaration_() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 985 + self.attributeDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.SimpleDeclarationContext,0) + + + def asmDefinition(self): + return self.getTypedRuleContext(CPP14Parser.AsmDefinitionContext,0) + + + def namespaceAliasDefinition(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceAliasDefinitionContext,0) + + + def usingDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.UsingDeclarationContext,0) + + + def usingDirective(self): + return self.getTypedRuleContext(CPP14Parser.UsingDirectiveContext,0) + + + def staticAssertDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.StaticAssertDeclarationContext,0) + + + def aliasDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.AliasDeclarationContext,0) + + + def opaqueEnumDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.OpaqueEnumDeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_blockDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlockDeclaration" ): + return visitor.visitBlockDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def blockDeclaration(self): + + localctx = CPP14Parser.BlockDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_blockDeclaration) + try: + self.state = 996 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,97,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 988 + self.simpleDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 989 + self.asmDefinition() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 990 + self.namespaceAliasDefinition() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 991 + self.usingDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 992 + self.usingDirective() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 993 + self.staticAssertDeclaration() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 994 + self.aliasDeclaration() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 995 + self.opaqueEnumDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AliasDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Using(self): + return self.getToken(CPP14Parser.Using, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_aliasDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAliasDeclaration" ): + return visitor.visitAliasDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def aliasDeclaration(self): + + localctx = CPP14Parser.AliasDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_aliasDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 998 + self.match(CPP14Parser.Using) + self.state = 999 + self.match(CPP14Parser.Identifier) + self.state = 1001 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1000 + self.attributeSpecifierSeq() + + + self.state = 1003 + self.match(CPP14Parser.Assign) + self.state = 1004 + self.theTypeId() + self.state = 1005 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def initDeclaratorList(self): + return self.getTypedRuleContext(CPP14Parser.InitDeclaratorListContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleDeclaration" ): + return visitor.visitSimpleDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def simpleDeclaration(self): + + localctx = CPP14Parser.SimpleDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_simpleDeclaration) + self._la = 0 # Token type + try: + self.state = 1021 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [13, 14, 18, 19, 20, 21, 22, 23, 26, 30, 33, 34, 36, 39, 41, 44, 45, 46, 47, 52, 57, 60, 61, 63, 66, 70, 74, 76, 77, 78, 80, 81, 82, 83, 85, 93, 97, 99, 118, 127, 128, 131, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 1008 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,99,self._ctx) + if la_ == 1: + self.state = 1007 + self.declSpecifierSeq() + + + self.state = 1011 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26 or _la==52 or ((((_la - 85)) & ~0x3f) == 0 and ((1 << (_la - 85)) & 215512868999425) != 0): + self.state = 1010 + self.initDeclaratorList() + + + self.state = 1013 + self.match(CPP14Parser.Semi) + pass + elif token in [10, 87]: + self.enterOuterAlt(localctx, 2) + self.state = 1014 + self.attributeSpecifierSeq() + self.state = 1016 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,101,self._ctx) + if la_ == 1: + self.state = 1015 + self.declSpecifierSeq() + + + self.state = 1018 + self.initDeclaratorList() + self.state = 1019 + self.match(CPP14Parser.Semi) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StaticAssertDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Static_assert(self): + return self.getToken(CPP14Parser.Static_assert, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def StringLiteral(self): + return self.getToken(CPP14Parser.StringLiteral, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_staticAssertDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStaticAssertDeclaration" ): + return visitor.visitStaticAssertDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def staticAssertDeclaration(self): + + localctx = CPP14Parser.StaticAssertDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_staticAssertDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1023 + self.match(CPP14Parser.Static_assert) + self.state = 1024 + self.match(CPP14Parser.LeftParen) + self.state = 1025 + self.constantExpression() + self.state = 1026 + self.match(CPP14Parser.Comma) + self.state = 1027 + self.match(CPP14Parser.StringLiteral) + self.state = 1028 + self.match(CPP14Parser.RightParen) + self.state = 1029 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EmptyDeclaration_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_emptyDeclaration_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEmptyDeclaration_" ): + return visitor.visitEmptyDeclaration_(self) + else: + return visitor.visitChildren(self) + + + + + def emptyDeclaration_(self): + + localctx = CPP14Parser.EmptyDeclaration_Context(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_emptyDeclaration_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1031 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeDeclaration" ): + return visitor.visitAttributeDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def attributeDeclaration(self): + + localctx = CPP14Parser.AttributeDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_attributeDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1033 + self.attributeSpecifierSeq() + self.state = 1034 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def storageClassSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.StorageClassSpecifierContext,0) + + + def typeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierContext,0) + + + def functionSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.FunctionSpecifierContext,0) + + + def Friend(self): + return self.getToken(CPP14Parser.Friend, 0) + + def Typedef(self): + return self.getToken(CPP14Parser.Typedef, 0) + + def Constexpr(self): + return self.getToken(CPP14Parser.Constexpr, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_declSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclSpecifier" ): + return visitor.visitDeclSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def declSpecifier(self): + + localctx = CPP14Parser.DeclSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_declSpecifier) + try: + self.state = 1042 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [36, 47, 57, 63, 70]: + self.enterOuterAlt(localctx, 1) + self.state = 1036 + self.storageClassSpecifier() + pass + elif token in [13, 14, 18, 19, 20, 21, 22, 26, 30, 33, 39, 45, 46, 60, 61, 66, 76, 77, 78, 81, 82, 83, 127, 132]: + self.enterOuterAlt(localctx, 2) + self.state = 1037 + self.typeSpecifier() + pass + elif token in [34, 44, 80]: + self.enterOuterAlt(localctx, 3) + self.state = 1038 + self.functionSpecifier() + pass + elif token in [41]: + self.enterOuterAlt(localctx, 4) + self.state = 1039 + self.match(CPP14Parser.Friend) + pass + elif token in [74]: + self.enterOuterAlt(localctx, 5) + self.state = 1040 + self.match(CPP14Parser.Typedef) + pass + elif token in [23]: + self.enterOuterAlt(localctx, 6) + self.state = 1041 + self.match(CPP14Parser.Constexpr) + 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 DeclSpecifierSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.DeclSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierContext,i) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_declSpecifierSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclSpecifierSeq" ): + return visitor.visitDeclSpecifierSeq(self) + else: + return visitor.visitChildren(self) + + + + + def declSpecifierSeq(self): + + localctx = CPP14Parser.DeclSpecifierSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_declSpecifierSeq) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1045 + self._errHandler.sync(self) + _alt = 1+1 + while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1+1: + self.state = 1044 + self.declSpecifier() + + else: + raise NoViableAltException(self) + self.state = 1047 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,104,self._ctx) + + self.state = 1050 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,105,self._ctx) + if la_ == 1: + self.state = 1049 + self.attributeSpecifierSeq() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StorageClassSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Register(self): + return self.getToken(CPP14Parser.Register, 0) + + def Static(self): + return self.getToken(CPP14Parser.Static, 0) + + def Thread_local(self): + return self.getToken(CPP14Parser.Thread_local, 0) + + def Extern(self): + return self.getToken(CPP14Parser.Extern, 0) + + def Mutable(self): + return self.getToken(CPP14Parser.Mutable, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_storageClassSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStorageClassSpecifier" ): + return visitor.visitStorageClassSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def storageClassSpecifier(self): + + localctx = CPP14Parser.StorageClassSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_storageClassSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1052 + _la = self._input.LA(1) + if not(((((_la - 36)) & ~0x3f) == 0 and ((1 << (_la - 36)) & 17316186113) != 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 FunctionSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Inline(self): + return self.getToken(CPP14Parser.Inline, 0) + + def Virtual(self): + return self.getToken(CPP14Parser.Virtual, 0) + + def Explicit(self): + return self.getToken(CPP14Parser.Explicit, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_functionSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunctionSpecifier" ): + return visitor.visitFunctionSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def functionSpecifier(self): + + localctx = CPP14Parser.FunctionSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_functionSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1054 + _la = self._input.LA(1) + if not(((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & 70368744178689) != 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 TypedefNameContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_typedefName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypedefName" ): + return visitor.visitTypedefName(self) + else: + return visitor.visitChildren(self) + + + + + def typedefName(self): + + localctx = CPP14Parser.TypedefNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_typedefName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1056 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def trailingTypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.TrailingTypeSpecifierContext,0) + + + def classSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.ClassSpecifierContext,0) + + + def enumSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.EnumSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_typeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeSpecifier" ): + return visitor.visitTypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeSpecifier(self): + + localctx = CPP14Parser.TypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_typeSpecifier) + try: + self.state = 1061 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,106,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1058 + self.trailingTypeSpecifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1059 + self.classSpecifier() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1060 + self.enumSpecifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TrailingTypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTypeSpecifierContext,0) + + + def elaboratedTypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.ElaboratedTypeSpecifierContext,0) + + + def typeNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.TypeNameSpecifierContext,0) + + + def cvQualifier(self): + return self.getTypedRuleContext(CPP14Parser.CvQualifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_trailingTypeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTrailingTypeSpecifier" ): + return visitor.visitTrailingTypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def trailingTypeSpecifier(self): + + localctx = CPP14Parser.TrailingTypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_trailingTypeSpecifier) + try: + self.state = 1067 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [13, 14, 18, 19, 20, 26, 30, 39, 45, 46, 60, 61, 78, 81, 83, 127, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 1063 + self.simpleTypeSpecifier() + pass + elif token in [21, 33, 66]: + self.enterOuterAlt(localctx, 2) + self.state = 1064 + self.elaboratedTypeSpecifier() + pass + elif token in [76]: + self.enterOuterAlt(localctx, 3) + self.state = 1065 + self.typeNameSpecifier() + pass + elif token in [22, 82]: + self.enterOuterAlt(localctx, 4) + self.state = 1066 + self.cvQualifier() + 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 TypeSpecifierSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TypeSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierContext,i) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_typeSpecifierSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeSpecifierSeq" ): + return visitor.visitTypeSpecifierSeq(self) + else: + return visitor.visitChildren(self) + + + + + def typeSpecifierSeq(self): + + localctx = CPP14Parser.TypeSpecifierSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_typeSpecifierSeq) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1070 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1069 + self.typeSpecifier() + + else: + raise NoViableAltException(self) + self.state = 1072 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,108,self._ctx) + + self.state = 1075 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,109,self._ctx) + if la_ == 1: + self.state = 1074 + self.attributeSpecifierSeq() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TrailingTypeSpecifierSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def trailingTypeSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TrailingTypeSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.TrailingTypeSpecifierContext,i) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_trailingTypeSpecifierSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTrailingTypeSpecifierSeq" ): + return visitor.visitTrailingTypeSpecifierSeq(self) + else: + return visitor.visitChildren(self) + + + + + def trailingTypeSpecifierSeq(self): + + localctx = CPP14Parser.TrailingTypeSpecifierSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_trailingTypeSpecifierSeq) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1078 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1077 + self.trailingTypeSpecifier() + + else: + raise NoViableAltException(self) + self.state = 1080 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,110,self._ctx) + + self.state = 1083 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,111,self._ctx) + if la_ == 1: + self.state = 1082 + self.attributeSpecifierSeq() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleTypeLengthModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Short(self): + return self.getToken(CPP14Parser.Short, 0) + + def Long(self): + return self.getToken(CPP14Parser.Long, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleTypeLengthModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTypeLengthModifier" ): + return visitor.visitSimpleTypeLengthModifier(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTypeLengthModifier(self): + + localctx = CPP14Parser.SimpleTypeLengthModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_simpleTypeLengthModifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1085 + _la = self._input.LA(1) + if not(_la==46 or _la==60): + 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 SimpleTypeSignednessModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Unsigned(self): + return self.getToken(CPP14Parser.Unsigned, 0) + + def Signed(self): + return self.getToken(CPP14Parser.Signed, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleTypeSignednessModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTypeSignednessModifier" ): + return visitor.visitSimpleTypeSignednessModifier(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTypeSignednessModifier(self): + + localctx = CPP14Parser.SimpleTypeSignednessModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_simpleTypeSignednessModifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1087 + _la = self._input.LA(1) + if not(_la==61 or _la==78): + 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 SimpleTypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def theTypeName(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeNameContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def Char(self): + return self.getToken(CPP14Parser.Char, 0) + + def Char16(self): + return self.getToken(CPP14Parser.Char16, 0) + + def Char32(self): + return self.getToken(CPP14Parser.Char32, 0) + + def Wchar(self): + return self.getToken(CPP14Parser.Wchar, 0) + + def Bool(self): + return self.getToken(CPP14Parser.Bool, 0) + + def Short(self): + return self.getToken(CPP14Parser.Short, 0) + + def Int(self): + return self.getToken(CPP14Parser.Int, 0) + + def Long(self): + return self.getToken(CPP14Parser.Long, 0) + + def Float(self): + return self.getToken(CPP14Parser.Float, 0) + + def Signed(self): + return self.getToken(CPP14Parser.Signed, 0) + + def Unsigned(self): + return self.getToken(CPP14Parser.Unsigned, 0) + + def Double(self): + return self.getToken(CPP14Parser.Double, 0) + + def Void(self): + return self.getToken(CPP14Parser.Void, 0) + + def Auto(self): + return self.getToken(CPP14Parser.Auto, 0) + + def decltypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.DecltypeSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleTypeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTypeSpecifier" ): + return visitor.visitSimpleTypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTypeSpecifier(self): + + localctx = CPP14Parser.SimpleTypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_simpleTypeSpecifier) + try: + self.state = 1113 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,113,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1090 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,112,self._ctx) + if la_ == 1: + self.state = 1089 + self.nestedNameSpecifier(0) + + + self.state = 1092 + self.theTypeName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1093 + self.nestedNameSpecifier(0) + self.state = 1094 + self.match(CPP14Parser.Template) + self.state = 1095 + self.simpleTemplateId() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1097 + self.match(CPP14Parser.Char) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1098 + self.match(CPP14Parser.Char16) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1099 + self.match(CPP14Parser.Char32) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1100 + self.match(CPP14Parser.Wchar) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1101 + self.match(CPP14Parser.Bool) + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 1102 + self.match(CPP14Parser.Short) + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 1103 + self.match(CPP14Parser.Int) + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 1104 + self.match(CPP14Parser.Long) + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 1105 + self.match(CPP14Parser.Float) + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 1106 + self.match(CPP14Parser.Signed) + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 1107 + self.match(CPP14Parser.Unsigned) + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 1108 + self.match(CPP14Parser.Float) + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 1109 + self.match(CPP14Parser.Double) + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 1110 + self.match(CPP14Parser.Void) + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 1111 + self.match(CPP14Parser.Auto) + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 1112 + self.decltypeSpecifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TheTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def className(self): + return self.getTypedRuleContext(CPP14Parser.ClassNameContext,0) + + + def enumName(self): + return self.getTypedRuleContext(CPP14Parser.EnumNameContext,0) + + + def typedefName(self): + return self.getTypedRuleContext(CPP14Parser.TypedefNameContext,0) + + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_theTypeName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTheTypeName" ): + return visitor.visitTheTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def theTypeName(self): + + localctx = CPP14Parser.TheTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_theTypeName) + try: + self.state = 1119 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,114,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1115 + self.className() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1116 + self.enumName() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1117 + self.typedefName() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1118 + self.simpleTemplateId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DecltypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Decltype(self): + return self.getToken(CPP14Parser.Decltype, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def expression(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionContext,0) + + + def Auto(self): + return self.getToken(CPP14Parser.Auto, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_decltypeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDecltypeSpecifier" ): + return visitor.visitDecltypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def decltypeSpecifier(self): + + localctx = CPP14Parser.DecltypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_decltypeSpecifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1121 + self.match(CPP14Parser.Decltype) + self.state = 1122 + self.match(CPP14Parser.LeftParen) + self.state = 1125 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,115,self._ctx) + if la_ == 1: + self.state = 1123 + self.expression() + pass + + elif la_ == 2: + self.state = 1124 + self.match(CPP14Parser.Auto) + pass + + + self.state = 1127 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElaboratedTypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classKey(self): + return self.getTypedRuleContext(CPP14Parser.ClassKeyContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def Enum(self): + return self.getToken(CPP14Parser.Enum, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_elaboratedTypeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElaboratedTypeSpecifier" ): + return visitor.visitElaboratedTypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def elaboratedTypeSpecifier(self): + + localctx = CPP14Parser.ElaboratedTypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_elaboratedTypeSpecifier) + self._la = 0 # Token type + try: + self.state = 1151 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [21, 66]: + self.enterOuterAlt(localctx, 1) + self.state = 1129 + self.classKey() + self.state = 1144 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,119,self._ctx) + if la_ == 1: + self.state = 1131 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1130 + self.attributeSpecifierSeq() + + + self.state = 1134 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,117,self._ctx) + if la_ == 1: + self.state = 1133 + self.nestedNameSpecifier(0) + + + self.state = 1136 + self.match(CPP14Parser.Identifier) + pass + + elif la_ == 2: + self.state = 1137 + self.simpleTemplateId() + pass + + elif la_ == 3: + self.state = 1138 + self.nestedNameSpecifier(0) + self.state = 1140 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 1139 + self.match(CPP14Parser.Template) + + + self.state = 1142 + self.simpleTemplateId() + pass + + + pass + elif token in [33]: + self.enterOuterAlt(localctx, 2) + self.state = 1146 + self.match(CPP14Parser.Enum) + self.state = 1148 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,120,self._ctx) + if la_ == 1: + self.state = 1147 + self.nestedNameSpecifier(0) + + + self.state = 1150 + self.match(CPP14Parser.Identifier) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumNameContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_enumName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumName" ): + return visitor.visitEnumName(self) + else: + return visitor.visitChildren(self) + + + + + def enumName(self): + + localctx = CPP14Parser.EnumNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_enumName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1153 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumHead(self): + return self.getTypedRuleContext(CPP14Parser.EnumHeadContext,0) + + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def enumeratorList(self): + return self.getTypedRuleContext(CPP14Parser.EnumeratorListContext,0) + + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_enumSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumSpecifier" ): + return visitor.visitEnumSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def enumSpecifier(self): + + localctx = CPP14Parser.EnumSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_enumSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1155 + self.enumHead() + self.state = 1156 + self.match(CPP14Parser.LeftBrace) + self.state = 1161 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 1157 + self.enumeratorList() + self.state = 1159 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==122: + self.state = 1158 + self.match(CPP14Parser.Comma) + + + + + self.state = 1163 + self.match(CPP14Parser.RightBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumHeadContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumkey(self): + return self.getTypedRuleContext(CPP14Parser.EnumkeyContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def enumbase(self): + return self.getTypedRuleContext(CPP14Parser.EnumbaseContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_enumHead + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumHead" ): + return visitor.visitEnumHead(self) + else: + return visitor.visitChildren(self) + + + + + def enumHead(self): + + localctx = CPP14Parser.EnumHeadContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_enumHead) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1165 + self.enumkey() + self.state = 1167 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1166 + self.attributeSpecifierSeq() + + + self.state = 1173 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26 or _la==127 or _la==132: + self.state = 1170 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,125,self._ctx) + if la_ == 1: + self.state = 1169 + self.nestedNameSpecifier(0) + + + self.state = 1172 + self.match(CPP14Parser.Identifier) + + + self.state = 1176 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==126: + self.state = 1175 + self.enumbase() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OpaqueEnumDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumkey(self): + return self.getTypedRuleContext(CPP14Parser.EnumkeyContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def enumbase(self): + return self.getTypedRuleContext(CPP14Parser.EnumbaseContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_opaqueEnumDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOpaqueEnumDeclaration" ): + return visitor.visitOpaqueEnumDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def opaqueEnumDeclaration(self): + + localctx = CPP14Parser.OpaqueEnumDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_opaqueEnumDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1178 + self.enumkey() + self.state = 1180 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1179 + self.attributeSpecifierSeq() + + + self.state = 1182 + self.match(CPP14Parser.Identifier) + self.state = 1184 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==126: + self.state = 1183 + self.enumbase() + + + self.state = 1186 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumkeyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Enum(self): + return self.getToken(CPP14Parser.Enum, 0) + + def Class(self): + return self.getToken(CPP14Parser.Class, 0) + + def Struct(self): + return self.getToken(CPP14Parser.Struct, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_enumkey + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumkey" ): + return visitor.visitEnumkey(self) + else: + return visitor.visitChildren(self) + + + + + def enumkey(self): + + localctx = CPP14Parser.EnumkeyContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_enumkey) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1188 + self.match(CPP14Parser.Enum) + self.state = 1190 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==21 or _la==66: + self.state = 1189 + _la = self._input.LA(1) + if not(_la==21 or _la==66): + 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 EnumbaseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def typeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_enumbase + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumbase" ): + return visitor.visitEnumbase(self) + else: + return visitor.visitChildren(self) + + + + + def enumbase(self): + + localctx = CPP14Parser.EnumbaseContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_enumbase) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1192 + self.match(CPP14Parser.Colon) + self.state = 1193 + self.typeSpecifierSeq() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumeratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumeratorDefinition(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.EnumeratorDefinitionContext) + else: + return self.getTypedRuleContext(CPP14Parser.EnumeratorDefinitionContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_enumeratorList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumeratorList" ): + return visitor.visitEnumeratorList(self) + else: + return visitor.visitChildren(self) + + + + + def enumeratorList(self): + + localctx = CPP14Parser.EnumeratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_enumeratorList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1195 + self.enumeratorDefinition() + self.state = 1200 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,131,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1196 + self.match(CPP14Parser.Comma) + self.state = 1197 + self.enumeratorDefinition() + self.state = 1202 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,131,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumeratorDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumerator(self): + return self.getTypedRuleContext(CPP14Parser.EnumeratorContext,0) + + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_enumeratorDefinition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumeratorDefinition" ): + return visitor.visitEnumeratorDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def enumeratorDefinition(self): + + localctx = CPP14Parser.EnumeratorDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_enumeratorDefinition) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1203 + self.enumerator() + self.state = 1206 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==101: + self.state = 1204 + self.match(CPP14Parser.Assign) + self.state = 1205 + self.constantExpression() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumeratorContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_enumerator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumerator" ): + return visitor.visitEnumerator(self) + else: + return visitor.visitChildren(self) + + + + + def enumerator(self): + + localctx = CPP14Parser.EnumeratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_enumerator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1208 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NamespaceNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def originalNamespaceName(self): + return self.getTypedRuleContext(CPP14Parser.OriginalNamespaceNameContext,0) + + + def namespaceAlias(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceAliasContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_namespaceName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNamespaceName" ): + return visitor.visitNamespaceName(self) + else: + return visitor.visitChildren(self) + + + + + def namespaceName(self): + + localctx = CPP14Parser.NamespaceNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_namespaceName) + try: + self.state = 1212 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,133,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1210 + self.originalNamespaceName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1211 + self.namespaceAlias() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OriginalNamespaceNameContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_originalNamespaceName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOriginalNamespaceName" ): + return visitor.visitOriginalNamespaceName(self) + else: + return visitor.visitChildren(self) + + + + + def originalNamespaceName(self): + + localctx = CPP14Parser.OriginalNamespaceNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_originalNamespaceName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1214 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NamespaceDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.namespaceBody = None # DeclarationseqContext + + def Namespace(self): + return self.getToken(CPP14Parser.Namespace, 0) + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def Inline(self): + return self.getToken(CPP14Parser.Inline, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def originalNamespaceName(self): + return self.getTypedRuleContext(CPP14Parser.OriginalNamespaceNameContext,0) + + + def declarationseq(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationseqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_namespaceDefinition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNamespaceDefinition" ): + return visitor.visitNamespaceDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def namespaceDefinition(self): + + localctx = CPP14Parser.NamespaceDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_namespaceDefinition) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1217 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==44: + self.state = 1216 + self.match(CPP14Parser.Inline) + + + self.state = 1219 + self.match(CPP14Parser.Namespace) + self.state = 1222 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,135,self._ctx) + if la_ == 1: + self.state = 1220 + self.match(CPP14Parser.Identifier) + + elif la_ == 2: + self.state = 1221 + self.originalNamespaceName() + + + self.state = 1224 + self.match(CPP14Parser.LeftBrace) + self.state = 1226 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543754443169808157) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 459384754220313597) != 0): + self.state = 1225 + localctx.namespaceBody = self.declarationseq() + + + self.state = 1228 + self.match(CPP14Parser.RightBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NamespaceAliasContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_namespaceAlias + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNamespaceAlias" ): + return visitor.visitNamespaceAlias(self) + else: + return visitor.visitChildren(self) + + + + + def namespaceAlias(self): + + localctx = CPP14Parser.NamespaceAliasContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_namespaceAlias) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1230 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NamespaceAliasDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Namespace(self): + return self.getToken(CPP14Parser.Namespace, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def qualifiednamespacespecifier(self): + return self.getTypedRuleContext(CPP14Parser.QualifiednamespacespecifierContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_namespaceAliasDefinition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNamespaceAliasDefinition" ): + return visitor.visitNamespaceAliasDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def namespaceAliasDefinition(self): + + localctx = CPP14Parser.NamespaceAliasDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_namespaceAliasDefinition) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1232 + self.match(CPP14Parser.Namespace) + self.state = 1233 + self.match(CPP14Parser.Identifier) + self.state = 1234 + self.match(CPP14Parser.Assign) + self.state = 1235 + self.qualifiednamespacespecifier() + self.state = 1236 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class QualifiednamespacespecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def namespaceName(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceNameContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_qualifiednamespacespecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitQualifiednamespacespecifier" ): + return visitor.visitQualifiednamespacespecifier(self) + else: + return visitor.visitChildren(self) + + + + + def qualifiednamespacespecifier(self): + + localctx = CPP14Parser.QualifiednamespacespecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 194, self.RULE_qualifiednamespacespecifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1239 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,137,self._ctx) + if la_ == 1: + self.state = 1238 + self.nestedNameSpecifier(0) + + + self.state = 1241 + self.namespaceName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UsingDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Using(self): + return self.getToken(CPP14Parser.Using, 0) + + def unqualifiedId(self): + return self.getTypedRuleContext(CPP14Parser.UnqualifiedIdContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def Typename_(self): + return self.getToken(CPP14Parser.Typename_, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_usingDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUsingDeclaration" ): + return visitor.visitUsingDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def usingDeclaration(self): + + localctx = CPP14Parser.UsingDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_usingDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1243 + self.match(CPP14Parser.Using) + self.state = 1249 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,139,self._ctx) + if la_ == 1: + self.state = 1245 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==76: + self.state = 1244 + self.match(CPP14Parser.Typename_) + + + self.state = 1247 + self.nestedNameSpecifier(0) + pass + + elif la_ == 2: + self.state = 1248 + self.match(CPP14Parser.Doublecolon) + pass + + + self.state = 1251 + self.unqualifiedId() + self.state = 1252 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UsingDirectiveContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Using(self): + return self.getToken(CPP14Parser.Using, 0) + + def Namespace(self): + return self.getToken(CPP14Parser.Namespace, 0) + + def namespaceName(self): + return self.getTypedRuleContext(CPP14Parser.NamespaceNameContext,0) + + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_usingDirective + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUsingDirective" ): + return visitor.visitUsingDirective(self) + else: + return visitor.visitChildren(self) + + + + + def usingDirective(self): + + localctx = CPP14Parser.UsingDirectiveContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_usingDirective) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1255 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1254 + self.attributeSpecifierSeq() + + + self.state = 1257 + self.match(CPP14Parser.Using) + self.state = 1258 + self.match(CPP14Parser.Namespace) + self.state = 1260 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,141,self._ctx) + if la_ == 1: + self.state = 1259 + self.nestedNameSpecifier(0) + + + self.state = 1262 + self.namespaceName() + self.state = 1263 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AsmDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Asm(self): + return self.getToken(CPP14Parser.Asm, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def StringLiteral(self): + return self.getToken(CPP14Parser.StringLiteral, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_asmDefinition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAsmDefinition" ): + return visitor.visitAsmDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def asmDefinition(self): + + localctx = CPP14Parser.AsmDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 200, self.RULE_asmDefinition) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1265 + self.match(CPP14Parser.Asm) + self.state = 1266 + self.match(CPP14Parser.LeftParen) + self.state = 1267 + self.match(CPP14Parser.StringLiteral) + self.state = 1268 + self.match(CPP14Parser.RightParen) + self.state = 1269 + self.match(CPP14Parser.Semi) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LinkageSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Extern(self): + return self.getToken(CPP14Parser.Extern, 0) + + def StringLiteral(self): + return self.getToken(CPP14Parser.StringLiteral, 0) + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def declaration(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationContext,0) + + + def declarationseq(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationseqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_linkageSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLinkageSpecification" ): + return visitor.visitLinkageSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def linkageSpecification(self): + + localctx = CPP14Parser.LinkageSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 202, self.RULE_linkageSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1271 + self.match(CPP14Parser.Extern) + self.state = 1272 + self.match(CPP14Parser.StringLiteral) + self.state = 1279 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89]: + self.state = 1273 + self.match(CPP14Parser.LeftBrace) + self.state = 1275 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543754443169808157) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 459384754220313597) != 0): + self.state = 1274 + self.declarationseq() + + + self.state = 1277 + self.match(CPP14Parser.RightBrace) + pass + elif token in [10, 12, 13, 14, 18, 19, 20, 21, 22, 23, 26, 30, 33, 34, 36, 39, 41, 44, 45, 46, 47, 48, 52, 57, 60, 61, 63, 64, 66, 68, 70, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, 93, 97, 99, 118, 127, 128, 131, 132]: + self.state = 1278 + self.declaration() + 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 AttributeSpecifierSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def attributeSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AttributeSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeSpecifierSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeSpecifierSeq" ): + return visitor.visitAttributeSpecifierSeq(self) + else: + return visitor.visitChildren(self) + + + + + def attributeSpecifierSeq(self): + + localctx = CPP14Parser.AttributeSpecifierSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 204, self.RULE_attributeSpecifierSeq) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1282 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1281 + self.attributeSpecifier() + + else: + raise NoViableAltException(self) + self.state = 1284 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,144,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftBracket) + else: + return self.getToken(CPP14Parser.LeftBracket, i) + + def RightBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightBracket) + else: + return self.getToken(CPP14Parser.RightBracket, i) + + def attributeList(self): + return self.getTypedRuleContext(CPP14Parser.AttributeListContext,0) + + + def alignmentspecifier(self): + return self.getTypedRuleContext(CPP14Parser.AlignmentspecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeSpecifier" ): + return visitor.visitAttributeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def attributeSpecifier(self): + + localctx = CPP14Parser.AttributeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 206, self.RULE_attributeSpecifier) + self._la = 0 # Token type + try: + self.state = 1294 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [87]: + self.enterOuterAlt(localctx, 1) + self.state = 1286 + self.match(CPP14Parser.LeftBracket) + self.state = 1287 + self.match(CPP14Parser.LeftBracket) + self.state = 1289 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 1288 + self.attributeList() + + + self.state = 1291 + self.match(CPP14Parser.RightBracket) + self.state = 1292 + self.match(CPP14Parser.RightBracket) + pass + elif token in [10]: + self.enterOuterAlt(localctx, 2) + self.state = 1293 + self.alignmentspecifier() + 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 AlignmentspecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Alignas(self): + return self.getToken(CPP14Parser.Alignas, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_alignmentspecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAlignmentspecifier" ): + return visitor.visitAlignmentspecifier(self) + else: + return visitor.visitChildren(self) + + + + + def alignmentspecifier(self): + + localctx = CPP14Parser.AlignmentspecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 208, self.RULE_alignmentspecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1296 + self.match(CPP14Parser.Alignas) + self.state = 1297 + self.match(CPP14Parser.LeftParen) + self.state = 1300 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,147,self._ctx) + if la_ == 1: + self.state = 1298 + self.theTypeId() + pass + + elif la_ == 2: + self.state = 1299 + self.constantExpression() + pass + + + self.state = 1303 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1302 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1305 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def attribute(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AttributeContext) + else: + return self.getTypedRuleContext(CPP14Parser.AttributeContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeList" ): + return visitor.visitAttributeList(self) + else: + return visitor.visitChildren(self) + + + + + def attributeList(self): + + localctx = CPP14Parser.AttributeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 210, self.RULE_attributeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1307 + self.attribute() + self.state = 1312 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1308 + self.match(CPP14Parser.Comma) + self.state = 1309 + self.attribute() + self.state = 1314 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1316 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1315 + self.match(CPP14Parser.Ellipsis) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeContext(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(CPP14Parser.Identifier, 0) + + def attributeNamespace(self): + return self.getTypedRuleContext(CPP14Parser.AttributeNamespaceContext,0) + + + def Doublecolon(self): + return self.getToken(CPP14Parser.Doublecolon, 0) + + def attributeArgumentClause(self): + return self.getTypedRuleContext(CPP14Parser.AttributeArgumentClauseContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_attribute + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttribute" ): + return visitor.visitAttribute(self) + else: + return visitor.visitChildren(self) + + + + + def attribute(self): + + localctx = CPP14Parser.AttributeContext(self, self._ctx, self.state) + self.enterRule(localctx, 212, self.RULE_attribute) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1321 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,151,self._ctx) + if la_ == 1: + self.state = 1318 + self.attributeNamespace() + self.state = 1319 + self.match(CPP14Parser.Doublecolon) + + + self.state = 1323 + self.match(CPP14Parser.Identifier) + self.state = 1325 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==85: + self.state = 1324 + self.attributeArgumentClause() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeNamespaceContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeNamespace + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeNamespace" ): + return visitor.visitAttributeNamespace(self) + else: + return visitor.visitChildren(self) + + + + + def attributeNamespace(self): + + localctx = CPP14Parser.AttributeNamespaceContext(self, self._ctx, self.state) + self.enterRule(localctx, 214, self.RULE_attributeNamespace) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1327 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AttributeArgumentClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def balancedTokenSeq(self): + return self.getTypedRuleContext(CPP14Parser.BalancedTokenSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_attributeArgumentClause + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAttributeArgumentClause" ): + return visitor.visitAttributeArgumentClause(self) + else: + return visitor.visitChildren(self) + + + + + def attributeArgumentClause(self): + + localctx = CPP14Parser.AttributeArgumentClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 216, self.RULE_attributeArgumentClause) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1329 + self.match(CPP14Parser.LeftParen) + self.state = 1331 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -88080385) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 262143) != 0): + self.state = 1330 + self.balancedTokenSeq() + + + self.state = 1333 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BalancedTokenSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def balancedtoken(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.BalancedtokenContext) + else: + return self.getTypedRuleContext(CPP14Parser.BalancedtokenContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_balancedTokenSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBalancedTokenSeq" ): + return visitor.visitBalancedTokenSeq(self) + else: + return visitor.visitChildren(self) + + + + + def balancedTokenSeq(self): + + localctx = CPP14Parser.BalancedTokenSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 218, self.RULE_balancedTokenSeq) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1336 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 1335 + self.balancedtoken() + self.state = 1338 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -88080385) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 262143) != 0)): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BalancedtokenContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftParen) + else: + return self.getToken(CPP14Parser.LeftParen, i) + + def balancedTokenSeq(self): + return self.getTypedRuleContext(CPP14Parser.BalancedTokenSeqContext,0) + + + def RightParen(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightParen) + else: + return self.getToken(CPP14Parser.RightParen, i) + + def LeftBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftBracket) + else: + return self.getToken(CPP14Parser.LeftBracket, i) + + def RightBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightBracket) + else: + return self.getToken(CPP14Parser.RightBracket, i) + + def LeftBrace(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftBrace) + else: + return self.getToken(CPP14Parser.LeftBrace, i) + + def RightBrace(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightBrace) + else: + return self.getToken(CPP14Parser.RightBrace, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_balancedtoken + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBalancedtoken" ): + return visitor.visitBalancedtoken(self) + else: + return visitor.visitChildren(self) + + + + + def balancedtoken(self): + + localctx = CPP14Parser.BalancedtokenContext(self, self._ctx, self.state) + self.enterRule(localctx, 220, self.RULE_balancedtoken) + self._la = 0 # Token type + try: + self.state = 1357 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.enterOuterAlt(localctx, 1) + self.state = 1340 + self.match(CPP14Parser.LeftParen) + self.state = 1341 + self.balancedTokenSeq() + self.state = 1342 + self.match(CPP14Parser.RightParen) + pass + elif token in [87]: + self.enterOuterAlt(localctx, 2) + self.state = 1344 + self.match(CPP14Parser.LeftBracket) + self.state = 1345 + self.balancedTokenSeq() + self.state = 1346 + self.match(CPP14Parser.RightBracket) + pass + elif token in [89]: + self.enterOuterAlt(localctx, 3) + self.state = 1348 + self.match(CPP14Parser.LeftBrace) + self.state = 1349 + self.balancedTokenSeq() + self.state = 1350 + self.match(CPP14Parser.RightBrace) + pass + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145]: + self.enterOuterAlt(localctx, 4) + self.state = 1353 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1352 + _la = self._input.LA(1) + if _la <= 0 or ((((_la - 85)) & ~0x3f) == 0 and ((1 << (_la - 85)) & 63) != 0): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + + else: + raise NoViableAltException(self) + self.state = 1355 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,155,self._ctx) + + 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 InitDeclaratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def initDeclarator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.InitDeclaratorContext) + else: + return self.getTypedRuleContext(CPP14Parser.InitDeclaratorContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_initDeclaratorList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitDeclaratorList" ): + return visitor.visitInitDeclaratorList(self) + else: + return visitor.visitChildren(self) + + + + + def initDeclaratorList(self): + + localctx = CPP14Parser.InitDeclaratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 222, self.RULE_initDeclaratorList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1359 + self.initDeclarator() + self.state = 1364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1360 + self.match(CPP14Parser.Comma) + self.state = 1361 + self.initDeclarator() + self.state = 1366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InitDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def initializer(self): + return self.getTypedRuleContext(CPP14Parser.InitializerContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_initDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitDeclarator" ): + return visitor.visitInitDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def initDeclarator(self): + + localctx = CPP14Parser.InitDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 224, self.RULE_initDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1367 + self.declarator() + self.state = 1369 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 85)) & ~0x3f) == 0 and ((1 << (_la - 85)) & 65553) != 0): + self.state = 1368 + self.initializer() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def pointerDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.PointerDeclaratorContext,0) + + + def noPointerDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerDeclaratorContext,0) + + + def parametersAndQualifiers(self): + return self.getTypedRuleContext(CPP14Parser.ParametersAndQualifiersContext,0) + + + def trailingReturnType(self): + return self.getTypedRuleContext(CPP14Parser.TrailingReturnTypeContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_declarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclarator" ): + return visitor.visitDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def declarator(self): + + localctx = CPP14Parser.DeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 226, self.RULE_declarator) + try: + self.state = 1376 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,159,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1371 + self.pointerDeclarator() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1372 + self.noPointerDeclarator(0) + self.state = 1373 + self.parametersAndQualifiers() + self.state = 1374 + self.trailingReturnType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PointerDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def noPointerDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerDeclaratorContext,0) + + + def pointerOperator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.PointerOperatorContext) + else: + return self.getTypedRuleContext(CPP14Parser.PointerOperatorContext,i) + + + def Const(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Const) + else: + return self.getToken(CPP14Parser.Const, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_pointerDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPointerDeclarator" ): + return visitor.visitPointerDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def pointerDeclarator(self): + + localctx = CPP14Parser.PointerDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 228, self.RULE_pointerDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1384 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,161,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1378 + self.pointerOperator() + self.state = 1380 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==22: + self.state = 1379 + self.match(CPP14Parser.Const) + + + self.state = 1386 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,161,self._ctx) + + self.state = 1387 + self.noPointerDeclarator(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NoPointerDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declaratorid(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratoridContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def pointerDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.PointerDeclaratorContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def noPointerDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerDeclaratorContext,0) + + + def parametersAndQualifiers(self): + return self.getTypedRuleContext(CPP14Parser.ParametersAndQualifiersContext,0) + + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_noPointerDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoPointerDeclarator" ): + return visitor.visitNoPointerDeclarator(self) + else: + return visitor.visitChildren(self) + + + + def noPointerDeclarator(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = CPP14Parser.NoPointerDeclaratorContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 230 + self.enterRecursionRule(localctx, 230, self.RULE_noPointerDeclarator, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1398 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26, 52, 99, 127, 131, 132]: + self.state = 1390 + self.declaratorid() + self.state = 1392 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,162,self._ctx) + if la_ == 1: + self.state = 1391 + self.attributeSpecifierSeq() + + + pass + elif token in [85]: + self.state = 1394 + self.match(CPP14Parser.LeftParen) + self.state = 1395 + self.pointerDeclarator() + self.state = 1396 + self.match(CPP14Parser.RightParen) + pass + else: + raise NoViableAltException(self) + + self._ctx.stop = self._input.LT(-1) + self.state = 1414 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,167,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = CPP14Parser.NoPointerDeclaratorContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_noPointerDeclarator) + self.state = 1400 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 1410 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 1401 + self.parametersAndQualifiers() + pass + elif token in [87]: + self.state = 1402 + self.match(CPP14Parser.LeftBracket) + self.state = 1404 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133137) != 0) or _la==132: + self.state = 1403 + self.constantExpression() + + + self.state = 1406 + self.match(CPP14Parser.RightBracket) + self.state = 1408 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + if la_ == 1: + self.state = 1407 + self.attributeSpecifierSeq() + + + pass + else: + raise NoViableAltException(self) + + self.state = 1416 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,167,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 ParametersAndQualifiersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def parameterDeclarationClause(self): + return self.getTypedRuleContext(CPP14Parser.ParameterDeclarationClauseContext,0) + + + def cvqualifierseq(self): + return self.getTypedRuleContext(CPP14Parser.CvqualifierseqContext,0) + + + def refqualifier(self): + return self.getTypedRuleContext(CPP14Parser.RefqualifierContext,0) + + + def exceptionSpecification(self): + return self.getTypedRuleContext(CPP14Parser.ExceptionSpecificationContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_parametersAndQualifiers + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitParametersAndQualifiers" ): + return visitor.visitParametersAndQualifiers(self) + else: + return visitor.visitChildren(self) + + + + + def parametersAndQualifiers(self): + + localctx = CPP14Parser.ParametersAndQualifiersContext(self, self._ctx, self.state) + self.enterRule(localctx, 232, self.RULE_parametersAndQualifiers) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1417 + self.match(CPP14Parser.LeftParen) + self.state = 1419 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1237504995584196377) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 297237575406461917) != 0): + self.state = 1418 + self.parameterDeclarationClause() + + + self.state = 1421 + self.match(CPP14Parser.RightParen) + self.state = 1423 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,169,self._ctx) + if la_ == 1: + self.state = 1422 + self.cvqualifierseq() + + + self.state = 1426 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,170,self._ctx) + if la_ == 1: + self.state = 1425 + self.refqualifier() + + + self.state = 1429 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,171,self._ctx) + if la_ == 1: + self.state = 1428 + self.exceptionSpecification() + + + self.state = 1432 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,172,self._ctx) + if la_ == 1: + self.state = 1431 + self.attributeSpecifierSeq() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TrailingReturnTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Arrow(self): + return self.getToken(CPP14Parser.Arrow, 0) + + def trailingTypeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TrailingTypeSpecifierSeqContext,0) + + + def abstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.AbstractDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_trailingReturnType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTrailingReturnType" ): + return visitor.visitTrailingReturnType(self) + else: + return visitor.visitChildren(self) + + + + + def trailingReturnType(self): + + localctx = CPP14Parser.TrailingReturnTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 234, self.RULE_trailingReturnType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1434 + self.match(CPP14Parser.Arrow) + self.state = 1435 + self.trailingTypeSpecifierSeq() + self.state = 1437 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,173,self._ctx) + if la_ == 1: + self.state = 1436 + self.abstractDeclarator() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PointerOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def AndAnd(self): + return self.getToken(CPP14Parser.AndAnd, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def Star(self): + return self.getToken(CPP14Parser.Star, 0) + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def cvqualifierseq(self): + return self.getTypedRuleContext(CPP14Parser.CvqualifierseqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_pointerOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPointerOperator" ): + return visitor.visitPointerOperator(self) + else: + return visitor.visitChildren(self) + + + + + def pointerOperator(self): + + localctx = CPP14Parser.PointerOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 236, self.RULE_pointerOperator) + self._la = 0 # Token type + try: + self.state = 1453 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [97, 118]: + self.enterOuterAlt(localctx, 1) + self.state = 1439 + _la = self._input.LA(1) + if not(_la==97 or _la==118): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1441 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,174,self._ctx) + if la_ == 1: + self.state = 1440 + self.attributeSpecifierSeq() + + + pass + elif token in [26, 93, 127, 132]: + self.enterOuterAlt(localctx, 2) + self.state = 1444 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26 or _la==127 or _la==132: + self.state = 1443 + self.nestedNameSpecifier(0) + + + self.state = 1446 + self.match(CPP14Parser.Star) + self.state = 1448 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,176,self._ctx) + if la_ == 1: + self.state = 1447 + self.attributeSpecifierSeq() + + + self.state = 1451 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,177,self._ctx) + if la_ == 1: + self.state = 1450 + self.cvqualifierseq() + + + 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 CvqualifierseqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def cvQualifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.CvQualifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.CvQualifierContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_cvqualifierseq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCvqualifierseq" ): + return visitor.visitCvqualifierseq(self) + else: + return visitor.visitChildren(self) + + + + + def cvqualifierseq(self): + + localctx = CPP14Parser.CvqualifierseqContext(self, self._ctx, self.state) + self.enterRule(localctx, 238, self.RULE_cvqualifierseq) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1456 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 1455 + self.cvQualifier() + + else: + raise NoViableAltException(self) + self.state = 1458 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CvQualifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Const(self): + return self.getToken(CPP14Parser.Const, 0) + + def Volatile(self): + return self.getToken(CPP14Parser.Volatile, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_cvQualifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCvQualifier" ): + return visitor.visitCvQualifier(self) + else: + return visitor.visitChildren(self) + + + + + def cvQualifier(self): + + localctx = CPP14Parser.CvQualifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 240, self.RULE_cvQualifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1460 + _la = self._input.LA(1) + if not(_la==22 or _la==82): + 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 RefqualifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def AndAnd(self): + return self.getToken(CPP14Parser.AndAnd, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_refqualifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRefqualifier" ): + return visitor.visitRefqualifier(self) + else: + return visitor.visitChildren(self) + + + + + def refqualifier(self): + + localctx = CPP14Parser.RefqualifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 242, self.RULE_refqualifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1462 + _la = self._input.LA(1) + if not(_la==97 or _la==118): + 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 DeclaratoridContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def idExpression(self): + return self.getTypedRuleContext(CPP14Parser.IdExpressionContext,0) + + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_declaratorid + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDeclaratorid" ): + return visitor.visitDeclaratorid(self) + else: + return visitor.visitChildren(self) + + + + + def declaratorid(self): + + localctx = CPP14Parser.DeclaratoridContext(self, self._ctx, self.state) + self.enterRule(localctx, 244, self.RULE_declaratorid) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1465 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1464 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1467 + self.idExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TheTypeIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierSeqContext,0) + + + def abstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.AbstractDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_theTypeId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTheTypeId" ): + return visitor.visitTheTypeId(self) + else: + return visitor.visitChildren(self) + + + + + def theTypeId(self): + + localctx = CPP14Parser.TheTypeIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 246, self.RULE_theTypeId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1469 + self.typeSpecifierSeq() + self.state = 1471 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,181,self._ctx) + if la_ == 1: + self.state = 1470 + self.abstractDeclarator() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AbstractDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def pointerAbstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.PointerAbstractDeclaratorContext,0) + + + def parametersAndQualifiers(self): + return self.getTypedRuleContext(CPP14Parser.ParametersAndQualifiersContext,0) + + + def trailingReturnType(self): + return self.getTypedRuleContext(CPP14Parser.TrailingReturnTypeContext,0) + + + def noPointerAbstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerAbstractDeclaratorContext,0) + + + def abstractPackDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.AbstractPackDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_abstractDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAbstractDeclarator" ): + return visitor.visitAbstractDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def abstractDeclarator(self): + + localctx = CPP14Parser.AbstractDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 248, self.RULE_abstractDeclarator) + try: + self.state = 1481 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,183,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1473 + self.pointerAbstractDeclarator() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1475 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,182,self._ctx) + if la_ == 1: + self.state = 1474 + self.noPointerAbstractDeclarator() + + + self.state = 1477 + self.parametersAndQualifiers() + self.state = 1478 + self.trailingReturnType() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1480 + self.abstractPackDeclarator() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PointerAbstractDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def noPointerAbstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerAbstractDeclaratorContext,0) + + + def pointerOperator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.PointerOperatorContext) + else: + return self.getTypedRuleContext(CPP14Parser.PointerOperatorContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_pointerAbstractDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPointerAbstractDeclarator" ): + return visitor.visitPointerAbstractDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def pointerAbstractDeclarator(self): + + localctx = CPP14Parser.PointerAbstractDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 250, self.RULE_pointerAbstractDeclarator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1486 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,184,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1483 + self.pointerOperator() + self.state = 1488 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,184,self._ctx) + + self.state = 1491 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 1489 + self.noPointerAbstractDeclarator() + pass + elif token in [26, 93, 97, 118, 127, 132]: + self.state = 1490 + self.pointerOperator() + 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 NoPointerAbstractDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def parametersAndQualifiers(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ParametersAndQualifiersContext) + else: + return self.getTypedRuleContext(CPP14Parser.ParametersAndQualifiersContext,i) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def pointerAbstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.PointerAbstractDeclaratorContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def LeftBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftBracket) + else: + return self.getToken(CPP14Parser.LeftBracket, i) + + def RightBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightBracket) + else: + return self.getToken(CPP14Parser.RightBracket, i) + + def constantExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ConstantExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,i) + + + def attributeSpecifierSeq(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AttributeSpecifierSeqContext) + else: + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_noPointerAbstractDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoPointerAbstractDeclarator" ): + return visitor.visitNoPointerAbstractDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def noPointerAbstractDeclarator(self): + + localctx = CPP14Parser.NoPointerAbstractDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 252, self.RULE_noPointerAbstractDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1498 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,186,self._ctx) + if la_ == 1: + self.state = 1493 + self.parametersAndQualifiers() + pass + + elif la_ == 2: + self.state = 1494 + self.match(CPP14Parser.LeftParen) + self.state = 1495 + self.pointerAbstractDeclarator() + self.state = 1496 + self.match(CPP14Parser.RightParen) + pass + + + self.state = 1511 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,190,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1509 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 1500 + self.parametersAndQualifiers() + pass + elif token in [87]: + self.state = 1501 + self.match(CPP14Parser.LeftBracket) + self.state = 1503 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133137) != 0) or _la==132: + self.state = 1502 + self.constantExpression() + + + self.state = 1505 + self.match(CPP14Parser.RightBracket) + self.state = 1507 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,188,self._ctx) + if la_ == 1: + self.state = 1506 + self.attributeSpecifierSeq() + + + pass + else: + raise NoViableAltException(self) + + self.state = 1513 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,190,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AbstractPackDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def noPointerAbstractPackDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.NoPointerAbstractPackDeclaratorContext,0) + + + def pointerOperator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.PointerOperatorContext) + else: + return self.getTypedRuleContext(CPP14Parser.PointerOperatorContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_abstractPackDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAbstractPackDeclarator" ): + return visitor.visitAbstractPackDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def abstractPackDeclarator(self): + + localctx = CPP14Parser.AbstractPackDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 254, self.RULE_abstractPackDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1517 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==26 or ((((_la - 93)) & ~0x3f) == 0 and ((1 << (_la - 93)) & 566969237521) != 0): + self.state = 1514 + self.pointerOperator() + self.state = 1519 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1520 + self.noPointerAbstractPackDeclarator() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NoPointerAbstractPackDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def parametersAndQualifiers(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ParametersAndQualifiersContext) + else: + return self.getTypedRuleContext(CPP14Parser.ParametersAndQualifiersContext,i) + + + def LeftBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.LeftBracket) + else: + return self.getToken(CPP14Parser.LeftBracket, i) + + def RightBracket(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.RightBracket) + else: + return self.getToken(CPP14Parser.RightBracket, i) + + def constantExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ConstantExpressionContext) + else: + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,i) + + + def attributeSpecifierSeq(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AttributeSpecifierSeqContext) + else: + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_noPointerAbstractPackDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoPointerAbstractPackDeclarator" ): + return visitor.visitNoPointerAbstractPackDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def noPointerAbstractPackDeclarator(self): + + localctx = CPP14Parser.NoPointerAbstractPackDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 256, self.RULE_noPointerAbstractPackDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1522 + self.match(CPP14Parser.Ellipsis) + self.state = 1534 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,195,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1532 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 1523 + self.parametersAndQualifiers() + pass + elif token in [87]: + self.state = 1524 + self.match(CPP14Parser.LeftBracket) + self.state = 1526 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133137) != 0) or _la==132: + self.state = 1525 + self.constantExpression() + + + self.state = 1528 + self.match(CPP14Parser.RightBracket) + self.state = 1530 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,193,self._ctx) + if la_ == 1: + self.state = 1529 + self.attributeSpecifierSeq() + + + pass + else: + raise NoViableAltException(self) + + self.state = 1536 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,195,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ParameterDeclarationClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def parameterDeclarationList(self): + return self.getTypedRuleContext(CPP14Parser.ParameterDeclarationListContext,0) + + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_parameterDeclarationClause + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitParameterDeclarationClause" ): + return visitor.visitParameterDeclarationClause(self) + else: + return visitor.visitChildren(self) + + + + + def parameterDeclarationClause(self): + + localctx = CPP14Parser.ParameterDeclarationClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 258, self.RULE_parameterDeclarationClause) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1537 + self.parameterDeclarationList() + self.state = 1542 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==122 or _la==131: + self.state = 1539 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==122: + self.state = 1538 + self.match(CPP14Parser.Comma) + + + self.state = 1541 + self.match(CPP14Parser.Ellipsis) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ParameterDeclarationListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def parameterDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.ParameterDeclarationContext) + else: + return self.getTypedRuleContext(CPP14Parser.ParameterDeclarationContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_parameterDeclarationList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitParameterDeclarationList" ): + return visitor.visitParameterDeclarationList(self) + else: + return visitor.visitChildren(self) + + + + + def parameterDeclarationList(self): + + localctx = CPP14Parser.ParameterDeclarationListContext(self, self._ctx, self.state) + self.enterRule(localctx, 260, self.RULE_parameterDeclarationList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1544 + self.parameterDeclaration() + self.state = 1549 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,198,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1545 + self.match(CPP14Parser.Comma) + self.state = 1546 + self.parameterDeclaration() + self.state = 1551 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,198,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ParameterDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def initializerClause(self): + return self.getTypedRuleContext(CPP14Parser.InitializerClauseContext,0) + + + def abstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.AbstractDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_parameterDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitParameterDeclaration" ): + return visitor.visitParameterDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def parameterDeclaration(self): + + localctx = CPP14Parser.ParameterDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 262, self.RULE_parameterDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1553 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1552 + self.attributeSpecifierSeq() + + + self.state = 1555 + self.declSpecifierSeq() + self.state = 1560 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,201,self._ctx) + if la_ == 1: + self.state = 1556 + self.declarator() + pass + + elif la_ == 2: + self.state = 1558 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,200,self._ctx) + if la_ == 1: + self.state = 1557 + self.abstractDeclarator() + + + pass + + + self.state = 1564 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==101: + self.state = 1562 + self.match(CPP14Parser.Assign) + self.state = 1563 + self.initializerClause() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def functionBody(self): + return self.getTypedRuleContext(CPP14Parser.FunctionBodyContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def virtualSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.VirtualSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_functionDefinition + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunctionDefinition" ): + return visitor.visitFunctionDefinition(self) + else: + return visitor.visitChildren(self) + + + + + def functionDefinition(self): + + localctx = CPP14Parser.FunctionDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 264, self.RULE_functionDefinition) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1567 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1566 + self.attributeSpecifierSeq() + + + self.state = 1570 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,204,self._ctx) + if la_ == 1: + self.state = 1569 + self.declSpecifierSeq() + + + self.state = 1572 + self.declarator() + self.state = 1574 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==38 or _la==53: + self.state = 1573 + self.virtualSpecifierSeq() + + + self.state = 1576 + self.functionBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def constructorInitializer(self): + return self.getTypedRuleContext(CPP14Parser.ConstructorInitializerContext,0) + + + def functionTryBlock(self): + return self.getTypedRuleContext(CPP14Parser.FunctionTryBlockContext,0) + + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def Default(self): + return self.getToken(CPP14Parser.Default, 0) + + def Delete(self): + return self.getToken(CPP14Parser.Delete, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_functionBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunctionBody" ): + return visitor.visitFunctionBody(self) + else: + return visitor.visitChildren(self) + + + + + def functionBody(self): + + localctx = CPP14Parser.FunctionBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 266, self.RULE_functionBody) + self._la = 0 # Token type + try: + self.state = 1586 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 126]: + self.enterOuterAlt(localctx, 1) + self.state = 1579 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==126: + self.state = 1578 + self.constructorInitializer() + + + self.state = 1581 + self.compoundStatement() + pass + elif token in [73]: + self.enterOuterAlt(localctx, 2) + self.state = 1582 + self.functionTryBlock() + pass + elif token in [101]: + self.enterOuterAlt(localctx, 3) + self.state = 1583 + self.match(CPP14Parser.Assign) + self.state = 1584 + _la = self._input.LA(1) + if not(_la==27 or _la==28): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1585 + self.match(CPP14Parser.Semi) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def braceOrEqualInitializer(self): + return self.getTypedRuleContext(CPP14Parser.BraceOrEqualInitializerContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def expressionList(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionListContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_initializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitializer" ): + return visitor.visitInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def initializer(self): + + localctx = CPP14Parser.InitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 268, self.RULE_initializer) + try: + self.state = 1593 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [89, 101]: + self.enterOuterAlt(localctx, 1) + self.state = 1588 + self.braceOrEqualInitializer() + pass + elif token in [85]: + self.enterOuterAlt(localctx, 2) + self.state = 1589 + self.match(CPP14Parser.LeftParen) + self.state = 1590 + self.expressionList() + self.state = 1591 + self.match(CPP14Parser.RightParen) + 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 BraceOrEqualInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def initializerClause(self): + return self.getTypedRuleContext(CPP14Parser.InitializerClauseContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_braceOrEqualInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBraceOrEqualInitializer" ): + return visitor.visitBraceOrEqualInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def braceOrEqualInitializer(self): + + localctx = CPP14Parser.BraceOrEqualInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 270, self.RULE_braceOrEqualInitializer) + try: + self.state = 1598 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [101]: + self.enterOuterAlt(localctx, 1) + self.state = 1595 + self.match(CPP14Parser.Assign) + self.state = 1596 + self.initializerClause() + pass + elif token in [89]: + self.enterOuterAlt(localctx, 2) + self.state = 1597 + self.bracedInitList() + 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 InitializerClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignmentExpression(self): + return self.getTypedRuleContext(CPP14Parser.AssignmentExpressionContext,0) + + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_initializerClause + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitializerClause" ): + return visitor.visitInitializerClause(self) + else: + return visitor.visitChildren(self) + + + + + def initializerClause(self): + + localctx = CPP14Parser.InitializerClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 272, self.RULE_initializerClause) + try: + self.state = 1602 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 18, 19, 20, 24, 26, 28, 30, 31, 39, 45, 46, 49, 50, 52, 58, 60, 61, 62, 65, 69, 71, 75, 76, 78, 81, 83, 85, 87, 91, 92, 93, 97, 98, 99, 100, 120, 121, 127, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 1600 + self.assignmentExpression() + pass + elif token in [89]: + self.enterOuterAlt(localctx, 2) + self.state = 1601 + self.bracedInitList() + 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 InitializerListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def initializerClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.InitializerClauseContext) + else: + return self.getTypedRuleContext(CPP14Parser.InitializerClauseContext,i) + + + def Ellipsis(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Ellipsis) + else: + return self.getToken(CPP14Parser.Ellipsis, i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_initializerList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInitializerList" ): + return visitor.visitInitializerList(self) + else: + return visitor.visitChildren(self) + + + + + def initializerList(self): + + localctx = CPP14Parser.InitializerListContext(self, self._ctx, self.state) + self.enterRule(localctx, 274, self.RULE_initializerList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1604 + self.initializerClause() + self.state = 1606 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1605 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1615 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,213,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1608 + self.match(CPP14Parser.Comma) + self.state = 1609 + self.initializerClause() + self.state = 1611 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1610 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1617 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,213,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BracedInitListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def initializerList(self): + return self.getTypedRuleContext(CPP14Parser.InitializerListContext,0) + + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_bracedInitList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBracedInitList" ): + return visitor.visitBracedInitList(self) + else: + return visitor.visitChildren(self) + + + + + def bracedInitList(self): + + localctx = CPP14Parser.BracedInitListContext(self, self._ctx, self.state) + self.enterRule(localctx, 276, self.RULE_bracedInitList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1618 + self.match(CPP14Parser.LeftBrace) + self.state = 1623 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474400910417) != 0) or _la==132: + self.state = 1619 + self.initializerList() + self.state = 1621 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==122: + self.state = 1620 + self.match(CPP14Parser.Comma) + + + + + self.state = 1625 + self.match(CPP14Parser.RightBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassNameContext(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(CPP14Parser.Identifier, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_className + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassName" ): + return visitor.visitClassName(self) + else: + return visitor.visitChildren(self) + + + + + def className(self): + + localctx = CPP14Parser.ClassNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 278, self.RULE_className) + try: + self.state = 1629 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,216,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1627 + self.match(CPP14Parser.Identifier) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1628 + self.simpleTemplateId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classHead(self): + return self.getTypedRuleContext(CPP14Parser.ClassHeadContext,0) + + + def LeftBrace(self): + return self.getToken(CPP14Parser.LeftBrace, 0) + + def RightBrace(self): + return self.getToken(CPP14Parser.RightBrace, 0) + + def memberSpecification(self): + return self.getTypedRuleContext(CPP14Parser.MemberSpecificationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_classSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassSpecifier" ): + return visitor.visitClassSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def classSpecifier(self): + + localctx = CPP14Parser.ClassSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 280, self.RULE_classSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1631 + self.classHead() + self.state = 1632 + self.match(CPP14Parser.LeftBrace) + self.state = 1634 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543877313594212121) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 463888353847684093) != 0): + self.state = 1633 + self.memberSpecification() + + + self.state = 1636 + self.match(CPP14Parser.RightBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassHeadContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classKey(self): + return self.getTypedRuleContext(CPP14Parser.ClassKeyContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def classHeadName(self): + return self.getTypedRuleContext(CPP14Parser.ClassHeadNameContext,0) + + + def baseClause(self): + return self.getTypedRuleContext(CPP14Parser.BaseClauseContext,0) + + + def classVirtSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.ClassVirtSpecifierContext,0) + + + def Union(self): + return self.getToken(CPP14Parser.Union, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_classHead + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassHead" ): + return visitor.visitClassHead(self) + else: + return visitor.visitChildren(self) + + + + + def classHead(self): + + localctx = CPP14Parser.ClassHeadContext(self, self._ctx, self.state) + self.enterRule(localctx, 282, self.RULE_classHead) + self._la = 0 # Token type + try: + self.state = 1661 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [21, 66]: + self.enterOuterAlt(localctx, 1) + self.state = 1638 + self.classKey() + self.state = 1640 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1639 + self.attributeSpecifierSeq() + + + self.state = 1646 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26 or _la==127 or _la==132: + self.state = 1642 + self.classHeadName() + self.state = 1644 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==38: + self.state = 1643 + self.classVirtSpecifier() + + + + + self.state = 1649 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==126: + self.state = 1648 + self.baseClause() + + + pass + elif token in [77]: + self.enterOuterAlt(localctx, 2) + self.state = 1651 + self.match(CPP14Parser.Union) + self.state = 1653 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1652 + self.attributeSpecifierSeq() + + + self.state = 1659 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26 or _la==127 or _la==132: + self.state = 1655 + self.classHeadName() + self.state = 1657 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==38: + self.state = 1656 + self.classVirtSpecifier() + + + + + 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 ClassHeadNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def className(self): + return self.getTypedRuleContext(CPP14Parser.ClassNameContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_classHeadName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassHeadName" ): + return visitor.visitClassHeadName(self) + else: + return visitor.visitChildren(self) + + + + + def classHeadName(self): + + localctx = CPP14Parser.ClassHeadNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 284, self.RULE_classHeadName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1664 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,226,self._ctx) + if la_ == 1: + self.state = 1663 + self.nestedNameSpecifier(0) + + + self.state = 1666 + self.className() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassVirtSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Final(self): + return self.getToken(CPP14Parser.Final, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_classVirtSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassVirtSpecifier" ): + return visitor.visitClassVirtSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def classVirtSpecifier(self): + + localctx = CPP14Parser.ClassVirtSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 286, self.RULE_classVirtSpecifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1668 + self.match(CPP14Parser.Final) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassKeyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Class(self): + return self.getToken(CPP14Parser.Class, 0) + + def Struct(self): + return self.getToken(CPP14Parser.Struct, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_classKey + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassKey" ): + return visitor.visitClassKey(self) + else: + return visitor.visitChildren(self) + + + + + def classKey(self): + + localctx = CPP14Parser.ClassKeyContext(self, self._ctx, self.state) + self.enterRule(localctx, 288, self.RULE_classKey) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1670 + _la = self._input.LA(1) + if not(_la==21 or _la==66): + 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 MemberSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def memberdeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.MemberdeclarationContext) + else: + return self.getTypedRuleContext(CPP14Parser.MemberdeclarationContext,i) + + + def accessSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.AccessSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.AccessSpecifierContext,i) + + + def Colon(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Colon) + else: + return self.getToken(CPP14Parser.Colon, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_memberSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemberSpecification" ): + return visitor.visitMemberSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def memberSpecification(self): + + localctx = CPP14Parser.MemberSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 290, self.RULE_memberSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1676 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 1676 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [10, 13, 14, 18, 19, 20, 21, 22, 23, 26, 30, 33, 34, 36, 39, 41, 44, 45, 46, 47, 52, 57, 60, 61, 63, 64, 66, 68, 70, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, 93, 97, 99, 118, 126, 127, 128, 131, 132]: + self.state = 1672 + self.memberdeclaration() + pass + elif token in [54, 55, 56]: + self.state = 1673 + self.accessSpecifier() + self.state = 1674 + self.match(CPP14Parser.Colon) + pass + else: + raise NoViableAltException(self) + + self.state = 1678 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (((((_la - 10)) & ~0x3f) == 0 and ((1 << (_la - 10)) & 1543877313594212121) != 0) or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & 463888353847684093) != 0)): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MemberdeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Semi(self): + return self.getToken(CPP14Parser.Semi, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def declSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.DeclSpecifierSeqContext,0) + + + def memberDeclaratorList(self): + return self.getTypedRuleContext(CPP14Parser.MemberDeclaratorListContext,0) + + + def functionDefinition(self): + return self.getTypedRuleContext(CPP14Parser.FunctionDefinitionContext,0) + + + def usingDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.UsingDeclarationContext,0) + + + def staticAssertDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.StaticAssertDeclarationContext,0) + + + def templateDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.TemplateDeclarationContext,0) + + + def aliasDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.AliasDeclarationContext,0) + + + def emptyDeclaration_(self): + return self.getTypedRuleContext(CPP14Parser.EmptyDeclaration_Context,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_memberdeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemberdeclaration" ): + return visitor.visitMemberdeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def memberdeclaration(self): + + localctx = CPP14Parser.MemberdeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 292, self.RULE_memberdeclaration) + self._la = 0 # Token type + try: + self.state = 1696 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,232,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1681 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,229,self._ctx) + if la_ == 1: + self.state = 1680 + self.attributeSpecifierSeq() + + + self.state = 1684 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,230,self._ctx) + if la_ == 1: + self.state = 1683 + self.declSpecifierSeq() + + + self.state = 1687 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4503599694480384) != 0) or ((((_la - 85)) & ~0x3f) == 0 and ((1 << (_la - 85)) & 217711892254981) != 0): + self.state = 1686 + self.memberDeclaratorList() + + + self.state = 1689 + self.match(CPP14Parser.Semi) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1690 + self.functionDefinition() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1691 + self.usingDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1692 + self.staticAssertDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1693 + self.templateDeclaration() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1694 + self.aliasDeclaration() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1695 + self.emptyDeclaration_() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MemberDeclaratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def memberDeclarator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.MemberDeclaratorContext) + else: + return self.getTypedRuleContext(CPP14Parser.MemberDeclaratorContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_memberDeclaratorList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemberDeclaratorList" ): + return visitor.visitMemberDeclaratorList(self) + else: + return visitor.visitChildren(self) + + + + + def memberDeclaratorList(self): + + localctx = CPP14Parser.MemberDeclaratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 294, self.RULE_memberDeclaratorList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1698 + self.memberDeclarator() + self.state = 1703 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1699 + self.match(CPP14Parser.Comma) + self.state = 1700 + self.memberDeclarator() + self.state = 1705 + 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 MemberDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def virtualSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.VirtualSpecifierSeqContext,0) + + + def pureSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.PureSpecifierContext,0) + + + def braceOrEqualInitializer(self): + return self.getTypedRuleContext(CPP14Parser.BraceOrEqualInitializerContext,0) + + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_memberDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemberDeclarator" ): + return visitor.visitMemberDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def memberDeclarator(self): + + localctx = CPP14Parser.MemberDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 296, self.RULE_memberDeclarator) + self._la = 0 # Token type + try: + self.state = 1726 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,237,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1706 + self.declarator() + self.state = 1715 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,234,self._ctx) + if la_ == 1: + self.state = 1707 + self.virtualSpecifierSeq() + pass + + elif la_ == 2: + self.state = 1708 + if not this.IsPureSpecifierAllowed() : + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " this.IsPureSpecifierAllowed() ") + self.state = 1709 + self.pureSpecifier() + pass + + elif la_ == 3: + self.state = 1710 + if not this.IsPureSpecifierAllowed() : + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, " this.IsPureSpecifierAllowed() ") + self.state = 1711 + self.virtualSpecifierSeq() + self.state = 1712 + self.pureSpecifier() + pass + + elif la_ == 4: + self.state = 1714 + self.braceOrEqualInitializer() + pass + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1717 + self.declarator() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1719 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 1718 + self.match(CPP14Parser.Identifier) + + + self.state = 1722 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1721 + self.attributeSpecifierSeq() + + + self.state = 1724 + self.match(CPP14Parser.Colon) + self.state = 1725 + self.constantExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VirtualSpecifierSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def virtualSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.VirtualSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.VirtualSpecifierContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_virtualSpecifierSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVirtualSpecifierSeq" ): + return visitor.visitVirtualSpecifierSeq(self) + else: + return visitor.visitChildren(self) + + + + + def virtualSpecifierSeq(self): + + localctx = CPP14Parser.VirtualSpecifierSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 298, self.RULE_virtualSpecifierSeq) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1729 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 1728 + self.virtualSpecifier() + self.state = 1731 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==38 or _la==53): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VirtualSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Override(self): + return self.getToken(CPP14Parser.Override, 0) + + def Final(self): + return self.getToken(CPP14Parser.Final, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_virtualSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVirtualSpecifier" ): + return visitor.visitVirtualSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def virtualSpecifier(self): + + localctx = CPP14Parser.VirtualSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 300, self.RULE_virtualSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1733 + _la = self._input.LA(1) + if not(_la==38 or _la==53): + 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 PureSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def IntegerLiteral(self): + return self.getToken(CPP14Parser.IntegerLiteral, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_pureSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPureSpecifier" ): + return visitor.visitPureSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def pureSpecifier(self): + + localctx = CPP14Parser.PureSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 302, self.RULE_pureSpecifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1735 + self.match(CPP14Parser.Assign) + self.state = 1736 + self.match(CPP14Parser.IntegerLiteral) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BaseClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def baseSpecifierList(self): + return self.getTypedRuleContext(CPP14Parser.BaseSpecifierListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_baseClause + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBaseClause" ): + return visitor.visitBaseClause(self) + else: + return visitor.visitChildren(self) + + + + + def baseClause(self): + + localctx = CPP14Parser.BaseClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 304, self.RULE_baseClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1738 + self.match(CPP14Parser.Colon) + self.state = 1739 + self.baseSpecifierList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BaseSpecifierListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def baseSpecifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.BaseSpecifierContext) + else: + return self.getTypedRuleContext(CPP14Parser.BaseSpecifierContext,i) + + + def Ellipsis(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Ellipsis) + else: + return self.getToken(CPP14Parser.Ellipsis, i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_baseSpecifierList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBaseSpecifierList" ): + return visitor.visitBaseSpecifierList(self) + else: + return visitor.visitChildren(self) + + + + + def baseSpecifierList(self): + + localctx = CPP14Parser.BaseSpecifierListContext(self, self._ctx, self.state) + self.enterRule(localctx, 306, self.RULE_baseSpecifierList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1741 + self.baseSpecifier() + self.state = 1743 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1742 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1752 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1745 + self.match(CPP14Parser.Comma) + self.state = 1746 + self.baseSpecifier() + self.state = 1748 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1747 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1754 + 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 BaseSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def baseTypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.BaseTypeSpecifierContext,0) + + + def Virtual(self): + return self.getToken(CPP14Parser.Virtual, 0) + + def accessSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.AccessSpecifierContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_baseSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBaseSpecifier" ): + return visitor.visitBaseSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def baseSpecifier(self): + + localctx = CPP14Parser.BaseSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 308, self.RULE_baseSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1756 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1755 + self.attributeSpecifierSeq() + + + self.state = 1770 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26, 127, 132]: + self.state = 1758 + self.baseTypeSpecifier() + pass + elif token in [80]: + self.state = 1759 + self.match(CPP14Parser.Virtual) + self.state = 1761 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 126100789566373888) != 0): + self.state = 1760 + self.accessSpecifier() + + + self.state = 1763 + self.baseTypeSpecifier() + pass + elif token in [54, 55, 56]: + self.state = 1764 + self.accessSpecifier() + self.state = 1766 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==80: + self.state = 1765 + self.match(CPP14Parser.Virtual) + + + self.state = 1768 + self.baseTypeSpecifier() + 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 ClassOrDeclTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def className(self): + return self.getTypedRuleContext(CPP14Parser.ClassNameContext,0) + + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def decltypeSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.DecltypeSpecifierContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_classOrDeclType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassOrDeclType" ): + return visitor.visitClassOrDeclType(self) + else: + return visitor.visitChildren(self) + + + + + def classOrDeclType(self): + + localctx = CPP14Parser.ClassOrDeclTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 310, self.RULE_classOrDeclType) + try: + self.state = 1777 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,247,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1773 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,246,self._ctx) + if la_ == 1: + self.state = 1772 + self.nestedNameSpecifier(0) + + + self.state = 1775 + self.className() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1776 + self.decltypeSpecifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BaseTypeSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classOrDeclType(self): + return self.getTypedRuleContext(CPP14Parser.ClassOrDeclTypeContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_baseTypeSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBaseTypeSpecifier" ): + return visitor.visitBaseTypeSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def baseTypeSpecifier(self): + + localctx = CPP14Parser.BaseTypeSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 312, self.RULE_baseTypeSpecifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1779 + self.classOrDeclType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AccessSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Private(self): + return self.getToken(CPP14Parser.Private, 0) + + def Protected(self): + return self.getToken(CPP14Parser.Protected, 0) + + def Public(self): + return self.getToken(CPP14Parser.Public, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_accessSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAccessSpecifier" ): + return visitor.visitAccessSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def accessSpecifier(self): + + localctx = CPP14Parser.AccessSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 314, self.RULE_accessSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1781 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 126100789566373888) != 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 ConversionFunctionIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Operator(self): + return self.getToken(CPP14Parser.Operator, 0) + + def conversionTypeId(self): + return self.getTypedRuleContext(CPP14Parser.ConversionTypeIdContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_conversionFunctionId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConversionFunctionId" ): + return visitor.visitConversionFunctionId(self) + else: + return visitor.visitChildren(self) + + + + + def conversionFunctionId(self): + + localctx = CPP14Parser.ConversionFunctionIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 316, self.RULE_conversionFunctionId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1783 + self.match(CPP14Parser.Operator) + self.state = 1784 + self.conversionTypeId() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConversionTypeIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierSeqContext,0) + + + def conversionDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.ConversionDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_conversionTypeId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConversionTypeId" ): + return visitor.visitConversionTypeId(self) + else: + return visitor.visitChildren(self) + + + + + def conversionTypeId(self): + + localctx = CPP14Parser.ConversionTypeIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 318, self.RULE_conversionTypeId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1786 + self.typeSpecifierSeq() + self.state = 1788 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,248,self._ctx) + if la_ == 1: + self.state = 1787 + self.conversionDeclarator() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConversionDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def pointerOperator(self): + return self.getTypedRuleContext(CPP14Parser.PointerOperatorContext,0) + + + def conversionDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.ConversionDeclaratorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_conversionDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConversionDeclarator" ): + return visitor.visitConversionDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def conversionDeclarator(self): + + localctx = CPP14Parser.ConversionDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 320, self.RULE_conversionDeclarator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1790 + self.pointerOperator() + self.state = 1792 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,249,self._ctx) + if la_ == 1: + self.state = 1791 + self.conversionDeclarator() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Colon(self): + return self.getToken(CPP14Parser.Colon, 0) + + def memInitializerList(self): + return self.getTypedRuleContext(CPP14Parser.MemInitializerListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_constructorInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorInitializer" ): + return visitor.visitConstructorInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def constructorInitializer(self): + + localctx = CPP14Parser.ConstructorInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 322, self.RULE_constructorInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1794 + self.match(CPP14Parser.Colon) + self.state = 1795 + self.memInitializerList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MemInitializerListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def memInitializer(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.MemInitializerContext) + else: + return self.getTypedRuleContext(CPP14Parser.MemInitializerContext,i) + + + def Ellipsis(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Ellipsis) + else: + return self.getToken(CPP14Parser.Ellipsis, i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_memInitializerList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemInitializerList" ): + return visitor.visitMemInitializerList(self) + else: + return visitor.visitChildren(self) + + + + + def memInitializerList(self): + + localctx = CPP14Parser.MemInitializerListContext(self, self._ctx, self.state) + self.enterRule(localctx, 324, self.RULE_memInitializerList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1797 + self.memInitializer() + self.state = 1799 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1798 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1808 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1801 + self.match(CPP14Parser.Comma) + self.state = 1802 + self.memInitializer() + self.state = 1804 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1803 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1810 + 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 MemInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def meminitializerid(self): + return self.getTypedRuleContext(CPP14Parser.MeminitializeridContext,0) + + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def bracedInitList(self): + return self.getTypedRuleContext(CPP14Parser.BracedInitListContext,0) + + + def expressionList(self): + return self.getTypedRuleContext(CPP14Parser.ExpressionListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_memInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMemInitializer" ): + return visitor.visitMemInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def memInitializer(self): + + localctx = CPP14Parser.MemInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 326, self.RULE_memInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1811 + self.meminitializerid() + self.state = 1818 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [85]: + self.state = 1812 + self.match(CPP14Parser.LeftParen) + self.state = 1814 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474400910417) != 0) or _la==132: + self.state = 1813 + self.expressionList() + + + self.state = 1816 + self.match(CPP14Parser.RightParen) + pass + elif token in [89]: + self.state = 1817 + self.bracedInitList() + 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 MeminitializeridContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classOrDeclType(self): + return self.getTypedRuleContext(CPP14Parser.ClassOrDeclTypeContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_meminitializerid + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMeminitializerid" ): + return visitor.visitMeminitializerid(self) + else: + return visitor.visitChildren(self) + + + + + def meminitializerid(self): + + localctx = CPP14Parser.MeminitializeridContext(self, self._ctx, self.state) + self.enterRule(localctx, 328, self.RULE_meminitializerid) + try: + self.state = 1822 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,255,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1820 + self.classOrDeclType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1821 + self.match(CPP14Parser.Identifier) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OperatorFunctionIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Operator(self): + return self.getToken(CPP14Parser.Operator, 0) + + def theOperator(self): + return self.getTypedRuleContext(CPP14Parser.TheOperatorContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_operatorFunctionId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOperatorFunctionId" ): + return visitor.visitOperatorFunctionId(self) + else: + return visitor.visitChildren(self) + + + + + def operatorFunctionId(self): + + localctx = CPP14Parser.OperatorFunctionIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 330, self.RULE_operatorFunctionId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1824 + self.match(CPP14Parser.Operator) + self.state = 1825 + self.theOperator() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LiteralOperatorIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Operator(self): + return self.getToken(CPP14Parser.Operator, 0) + + def StringLiteral(self): + return self.getToken(CPP14Parser.StringLiteral, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def UserDefinedStringLiteral(self): + return self.getToken(CPP14Parser.UserDefinedStringLiteral, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_literalOperatorId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLiteralOperatorId" ): + return visitor.visitLiteralOperatorId(self) + else: + return visitor.visitChildren(self) + + + + + def literalOperatorId(self): + + localctx = CPP14Parser.LiteralOperatorIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 332, self.RULE_literalOperatorId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1827 + self.match(CPP14Parser.Operator) + self.state = 1831 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [4]: + self.state = 1828 + self.match(CPP14Parser.StringLiteral) + self.state = 1829 + self.match(CPP14Parser.Identifier) + pass + elif token in [140]: + self.state = 1830 + self.match(CPP14Parser.UserDefinedStringLiteral) + 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 TemplateDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def templateparameterList(self): + return self.getTypedRuleContext(CPP14Parser.TemplateparameterListContext,0) + + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def declaration(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_templateDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateDeclaration" ): + return visitor.visitTemplateDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def templateDeclaration(self): + + localctx = CPP14Parser.TemplateDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 334, self.RULE_templateDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1833 + self.match(CPP14Parser.Template) + self.state = 1834 + self.match(CPP14Parser.Less) + self.state = 1835 + self.templateparameterList() + self.state = 1836 + self.match(CPP14Parser.Greater) + self.state = 1837 + self.declaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TemplateparameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def templateParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TemplateParameterContext) + else: + return self.getTypedRuleContext(CPP14Parser.TemplateParameterContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_templateparameterList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateparameterList" ): + return visitor.visitTemplateparameterList(self) + else: + return visitor.visitChildren(self) + + + + + def templateparameterList(self): + + localctx = CPP14Parser.TemplateparameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 336, self.RULE_templateparameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1839 + self.templateParameter() + self.state = 1844 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1840 + self.match(CPP14Parser.Comma) + self.state = 1841 + self.templateParameter() + self.state = 1846 + 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 TemplateParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeParameter(self): + return self.getTypedRuleContext(CPP14Parser.TypeParameterContext,0) + + + def parameterDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.ParameterDeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_templateParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateParameter" ): + return visitor.visitTemplateParameter(self) + else: + return visitor.visitChildren(self) + + + + + def templateParameter(self): + + localctx = CPP14Parser.TemplateParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 338, self.RULE_templateParameter) + try: + self.state = 1849 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,258,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1847 + self.typeParameter() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1848 + self.parameterDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Class(self): + return self.getToken(CPP14Parser.Class, 0) + + def Typename_(self): + return self.getToken(CPP14Parser.Typename_, 0) + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def templateparameterList(self): + return self.getTypedRuleContext(CPP14Parser.TemplateparameterListContext,0) + + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_typeParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameter" ): + return visitor.visitTypeParameter(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameter(self): + + localctx = CPP14Parser.TypeParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 340, self.RULE_typeParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1860 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [21, 68]: + self.state = 1856 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 1851 + self.match(CPP14Parser.Template) + self.state = 1852 + self.match(CPP14Parser.Less) + self.state = 1853 + self.templateparameterList() + self.state = 1854 + self.match(CPP14Parser.Greater) + + + self.state = 1858 + self.match(CPP14Parser.Class) + pass + elif token in [76]: + self.state = 1859 + self.match(CPP14Parser.Typename_) + pass + else: + raise NoViableAltException(self) + + self.state = 1873 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,264,self._ctx) + if la_ == 1: + self.state = 1863 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1862 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1866 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 1865 + self.match(CPP14Parser.Identifier) + + + pass + + elif la_ == 2: + self.state = 1869 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==132: + self.state = 1868 + self.match(CPP14Parser.Identifier) + + + self.state = 1871 + self.match(CPP14Parser.Assign) + self.state = 1872 + self.theTypeId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleTemplateIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def templateName(self): + return self.getTypedRuleContext(CPP14Parser.TemplateNameContext,0) + + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def templateArgumentList(self): + return self.getTypedRuleContext(CPP14Parser.TemplateArgumentListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_simpleTemplateId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTemplateId" ): + return visitor.visitSimpleTemplateId(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTemplateId(self): + + localctx = CPP14Parser.SimpleTemplateIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 342, self.RULE_simpleTemplateId) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1875 + self.templateName() + self.state = 1876 + self.match(CPP14Parser.Less) + self.state = 1878 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979472930990334) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384268307) != 0) or _la==132: + self.state = 1877 + self.templateArgumentList() + + + self.state = 1880 + self.match(CPP14Parser.Greater) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TemplateIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def operatorFunctionId(self): + return self.getTypedRuleContext(CPP14Parser.OperatorFunctionIdContext,0) + + + def literalOperatorId(self): + return self.getTypedRuleContext(CPP14Parser.LiteralOperatorIdContext,0) + + + def templateArgumentList(self): + return self.getTypedRuleContext(CPP14Parser.TemplateArgumentListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_templateId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateId" ): + return visitor.visitTemplateId(self) + else: + return visitor.visitChildren(self) + + + + + def templateId(self): + + localctx = CPP14Parser.TemplateIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 344, self.RULE_templateId) + self._la = 0 # Token type + try: + self.state = 1893 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [132]: + self.enterOuterAlt(localctx, 1) + self.state = 1882 + self.simpleTemplateId() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1885 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,266,self._ctx) + if la_ == 1: + self.state = 1883 + self.operatorFunctionId() + pass + + elif la_ == 2: + self.state = 1884 + self.literalOperatorId() + pass + + + self.state = 1887 + self.match(CPP14Parser.Less) + self.state = 1889 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979472930990334) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384268307) != 0) or _la==132: + self.state = 1888 + self.templateArgumentList() + + + self.state = 1891 + self.match(CPP14Parser.Greater) + 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 TemplateNameContext(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(CPP14Parser.Identifier, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_templateName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateName" ): + return visitor.visitTemplateName(self) + else: + return visitor.visitChildren(self) + + + + + def templateName(self): + + localctx = CPP14Parser.TemplateNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 346, self.RULE_templateName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1895 + self.match(CPP14Parser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TemplateArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def templateArgument(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TemplateArgumentContext) + else: + return self.getTypedRuleContext(CPP14Parser.TemplateArgumentContext,i) + + + def Ellipsis(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Ellipsis) + else: + return self.getToken(CPP14Parser.Ellipsis, i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_templateArgumentList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateArgumentList" ): + return visitor.visitTemplateArgumentList(self) + else: + return visitor.visitChildren(self) + + + + + def templateArgumentList(self): + + localctx = CPP14Parser.TemplateArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 348, self.RULE_templateArgumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1897 + self.templateArgument() + self.state = 1899 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1898 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1908 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1901 + self.match(CPP14Parser.Comma) + self.state = 1902 + self.templateArgument() + self.state = 1904 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1903 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1910 + 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 TemplateArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def theTypeId(self): + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,0) + + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def idExpression(self): + return self.getTypedRuleContext(CPP14Parser.IdExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_templateArgument + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTemplateArgument" ): + return visitor.visitTemplateArgument(self) + else: + return visitor.visitChildren(self) + + + + + def templateArgument(self): + + localctx = CPP14Parser.TemplateArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 350, self.RULE_templateArgument) + try: + self.state = 1914 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,272,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1911 + self.theTypeId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1912 + self.constantExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1913 + self.idExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeNameSpecifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Typename_(self): + return self.getToken(CPP14Parser.Typename_, 0) + + def nestedNameSpecifier(self): + return self.getTypedRuleContext(CPP14Parser.NestedNameSpecifierContext,0) + + + def Identifier(self): + return self.getToken(CPP14Parser.Identifier, 0) + + def simpleTemplateId(self): + return self.getTypedRuleContext(CPP14Parser.SimpleTemplateIdContext,0) + + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_typeNameSpecifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeNameSpecifier" ): + return visitor.visitTypeNameSpecifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeNameSpecifier(self): + + localctx = CPP14Parser.TypeNameSpecifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 352, self.RULE_typeNameSpecifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1916 + self.match(CPP14Parser.Typename_) + self.state = 1917 + self.nestedNameSpecifier(0) + self.state = 1923 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,274,self._ctx) + if la_ == 1: + self.state = 1918 + self.match(CPP14Parser.Identifier) + pass + + elif la_ == 2: + self.state = 1920 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 1919 + self.match(CPP14Parser.Template) + + + self.state = 1922 + self.simpleTemplateId() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExplicitInstantiationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def declaration(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationContext,0) + + + def Extern(self): + return self.getToken(CPP14Parser.Extern, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_explicitInstantiation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExplicitInstantiation" ): + return visitor.visitExplicitInstantiation(self) + else: + return visitor.visitChildren(self) + + + + + def explicitInstantiation(self): + + localctx = CPP14Parser.ExplicitInstantiationContext(self, self._ctx, self.state) + self.enterRule(localctx, 354, self.RULE_explicitInstantiation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1926 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==36: + self.state = 1925 + self.match(CPP14Parser.Extern) + + + self.state = 1928 + self.match(CPP14Parser.Template) + self.state = 1929 + self.declaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExplicitSpecializationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Template(self): + return self.getToken(CPP14Parser.Template, 0) + + def Less(self): + return self.getToken(CPP14Parser.Less, 0) + + def Greater(self): + return self.getToken(CPP14Parser.Greater, 0) + + def declaration(self): + return self.getTypedRuleContext(CPP14Parser.DeclarationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_explicitSpecialization + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExplicitSpecialization" ): + return visitor.visitExplicitSpecialization(self) + else: + return visitor.visitChildren(self) + + + + + def explicitSpecialization(self): + + localctx = CPP14Parser.ExplicitSpecializationContext(self, self._ctx, self.state) + self.enterRule(localctx, 356, self.RULE_explicitSpecialization) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1931 + self.match(CPP14Parser.Template) + self.state = 1932 + self.match(CPP14Parser.Less) + self.state = 1933 + self.match(CPP14Parser.Greater) + self.state = 1934 + self.declaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Try(self): + return self.getToken(CPP14Parser.Try, 0) + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def handlerSeq(self): + return self.getTypedRuleContext(CPP14Parser.HandlerSeqContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_tryBlock + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryBlock" ): + return visitor.visitTryBlock(self) + else: + return visitor.visitChildren(self) + + + + + def tryBlock(self): + + localctx = CPP14Parser.TryBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 358, self.RULE_tryBlock) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1936 + self.match(CPP14Parser.Try) + self.state = 1937 + self.compoundStatement() + self.state = 1938 + self.handlerSeq() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionTryBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Try(self): + return self.getToken(CPP14Parser.Try, 0) + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def handlerSeq(self): + return self.getTypedRuleContext(CPP14Parser.HandlerSeqContext,0) + + + def constructorInitializer(self): + return self.getTypedRuleContext(CPP14Parser.ConstructorInitializerContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_functionTryBlock + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFunctionTryBlock" ): + return visitor.visitFunctionTryBlock(self) + else: + return visitor.visitChildren(self) + + + + + def functionTryBlock(self): + + localctx = CPP14Parser.FunctionTryBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 360, self.RULE_functionTryBlock) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1940 + self.match(CPP14Parser.Try) + self.state = 1942 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==126: + self.state = 1941 + self.constructorInitializer() + + + self.state = 1944 + self.compoundStatement() + self.state = 1945 + self.handlerSeq() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class HandlerSeqContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def handler(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.HandlerContext) + else: + return self.getTypedRuleContext(CPP14Parser.HandlerContext,i) + + + def getRuleIndex(self): + return CPP14Parser.RULE_handlerSeq + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHandlerSeq" ): + return visitor.visitHandlerSeq(self) + else: + return visitor.visitChildren(self) + + + + + def handlerSeq(self): + + localctx = CPP14Parser.HandlerSeqContext(self, self._ctx, self.state) + self.enterRule(localctx, 362, self.RULE_handlerSeq) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1948 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 1947 + self.handler() + self.state = 1950 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==17): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class HandlerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Catch(self): + return self.getToken(CPP14Parser.Catch, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def exceptionDeclaration(self): + return self.getTypedRuleContext(CPP14Parser.ExceptionDeclarationContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def compoundStatement(self): + return self.getTypedRuleContext(CPP14Parser.CompoundStatementContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_handler + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHandler" ): + return visitor.visitHandler(self) + else: + return visitor.visitChildren(self) + + + + + def handler(self): + + localctx = CPP14Parser.HandlerContext(self, self._ctx, self.state) + self.enterRule(localctx, 364, self.RULE_handler) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1952 + self.match(CPP14Parser.Catch) + self.state = 1953 + self.match(CPP14Parser.LeftParen) + self.state = 1954 + self.exceptionDeclaration() + self.state = 1955 + self.match(CPP14Parser.RightParen) + self.state = 1956 + self.compoundStatement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.TypeSpecifierSeqContext,0) + + + def attributeSpecifierSeq(self): + return self.getTypedRuleContext(CPP14Parser.AttributeSpecifierSeqContext,0) + + + def declarator(self): + return self.getTypedRuleContext(CPP14Parser.DeclaratorContext,0) + + + def abstractDeclarator(self): + return self.getTypedRuleContext(CPP14Parser.AbstractDeclaratorContext,0) + + + def Ellipsis(self): + return self.getToken(CPP14Parser.Ellipsis, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_exceptionDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionDeclaration" ): + return visitor.visitExceptionDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionDeclaration(self): + + localctx = CPP14Parser.ExceptionDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 366, self.RULE_exceptionDeclaration) + self._la = 0 # Token type + try: + self.state = 1967 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [10, 13, 14, 18, 19, 20, 21, 22, 26, 30, 33, 39, 45, 46, 60, 61, 66, 76, 77, 78, 81, 82, 83, 87, 127, 132]: + self.enterOuterAlt(localctx, 1) + self.state = 1959 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10 or _la==87: + self.state = 1958 + self.attributeSpecifierSeq() + + + self.state = 1961 + self.typeSpecifierSeq() + self.state = 1964 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,279,self._ctx) + if la_ == 1: + self.state = 1962 + self.declarator() + + elif la_ == 2: + self.state = 1963 + self.abstractDeclarator() + + + pass + elif token in [131]: + self.enterOuterAlt(localctx, 2) + self.state = 1966 + self.match(CPP14Parser.Ellipsis) + 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 ThrowExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Throw(self): + return self.getToken(CPP14Parser.Throw, 0) + + def assignmentExpression(self): + return self.getTypedRuleContext(CPP14Parser.AssignmentExpressionContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_throwExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitThrowExpression" ): + return visitor.visitThrowExpression(self) + else: + return visitor.visitChildren(self) + + + + + def throwExpression(self): + + localctx = CPP14Parser.ThrowExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 368, self.RULE_throwExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1969 + self.match(CPP14Parser.Throw) + self.state = 1971 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 8364979464334764286) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 4719772474384133201) != 0) or _la==132: + self.state = 1970 + self.assignmentExpression() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def dynamicExceptionSpecification(self): + return self.getTypedRuleContext(CPP14Parser.DynamicExceptionSpecificationContext,0) + + + def noeExceptSpecification(self): + return self.getTypedRuleContext(CPP14Parser.NoeExceptSpecificationContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_exceptionSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionSpecification" ): + return visitor.visitExceptionSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionSpecification(self): + + localctx = CPP14Parser.ExceptionSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 370, self.RULE_exceptionSpecification) + try: + self.state = 1975 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [71]: + self.enterOuterAlt(localctx, 1) + self.state = 1973 + self.dynamicExceptionSpecification() + pass + elif token in [50]: + self.enterOuterAlt(localctx, 2) + self.state = 1974 + self.noeExceptSpecification() + 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 DynamicExceptionSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Throw(self): + return self.getToken(CPP14Parser.Throw, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def typeIdList(self): + return self.getTypedRuleContext(CPP14Parser.TypeIdListContext,0) + + + def getRuleIndex(self): + return CPP14Parser.RULE_dynamicExceptionSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDynamicExceptionSpecification" ): + return visitor.visitDynamicExceptionSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def dynamicExceptionSpecification(self): + + localctx = CPP14Parser.DynamicExceptionSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 372, self.RULE_dynamicExceptionSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1977 + self.match(CPP14Parser.Throw) + self.state = 1978 + self.match(CPP14Parser.LeftParen) + self.state = 1980 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 13)) & ~0x3f) == 0 and ((1 << (_la - 13)) & -9213942612181769245) != 0) or ((((_la - 77)) & ~0x3f) == 0 and ((1 << (_la - 77)) & 37154696925806707) != 0): + self.state = 1979 + self.typeIdList() + + + self.state = 1982 + self.match(CPP14Parser.RightParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeIdListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def theTypeId(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(CPP14Parser.TheTypeIdContext) + else: + return self.getTypedRuleContext(CPP14Parser.TheTypeIdContext,i) + + + def Ellipsis(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Ellipsis) + else: + return self.getToken(CPP14Parser.Ellipsis, i) + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Comma) + else: + return self.getToken(CPP14Parser.Comma, i) + + def getRuleIndex(self): + return CPP14Parser.RULE_typeIdList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeIdList" ): + return visitor.visitTypeIdList(self) + else: + return visitor.visitChildren(self) + + + + + def typeIdList(self): + + localctx = CPP14Parser.TypeIdListContext(self, self._ctx, self.state) + self.enterRule(localctx, 374, self.RULE_typeIdList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1984 + self.theTypeId() + self.state = 1986 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1985 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1995 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==122: + self.state = 1988 + self.match(CPP14Parser.Comma) + self.state = 1989 + self.theTypeId() + self.state = 1991 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==131: + self.state = 1990 + self.match(CPP14Parser.Ellipsis) + + + self.state = 1997 + 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 NoeExceptSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Noexcept(self): + return self.getToken(CPP14Parser.Noexcept, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def constantExpression(self): + return self.getTypedRuleContext(CPP14Parser.ConstantExpressionContext,0) + + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_noeExceptSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNoeExceptSpecification" ): + return visitor.visitNoeExceptSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def noeExceptSpecification(self): + + localctx = CPP14Parser.NoeExceptSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 376, self.RULE_noeExceptSpecification) + try: + self.state = 2004 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,287,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1998 + self.match(CPP14Parser.Noexcept) + self.state = 1999 + self.match(CPP14Parser.LeftParen) + self.state = 2000 + self.constantExpression() + self.state = 2001 + self.match(CPP14Parser.RightParen) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2003 + self.match(CPP14Parser.Noexcept) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TheOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def New(self): + return self.getToken(CPP14Parser.New, 0) + + def LeftBracket(self): + return self.getToken(CPP14Parser.LeftBracket, 0) + + def RightBracket(self): + return self.getToken(CPP14Parser.RightBracket, 0) + + def Delete(self): + return self.getToken(CPP14Parser.Delete, 0) + + def Plus(self): + return self.getToken(CPP14Parser.Plus, 0) + + def Minus(self): + return self.getToken(CPP14Parser.Minus, 0) + + def Star(self): + return self.getToken(CPP14Parser.Star, 0) + + def Div(self): + return self.getToken(CPP14Parser.Div, 0) + + def Mod(self): + return self.getToken(CPP14Parser.Mod, 0) + + def Caret(self): + return self.getToken(CPP14Parser.Caret, 0) + + def And(self): + return self.getToken(CPP14Parser.And, 0) + + def Or(self): + return self.getToken(CPP14Parser.Or, 0) + + def Tilde(self): + return self.getToken(CPP14Parser.Tilde, 0) + + def Not(self): + return self.getToken(CPP14Parser.Not, 0) + + def Assign(self): + return self.getToken(CPP14Parser.Assign, 0) + + def Greater(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Greater) + else: + return self.getToken(CPP14Parser.Greater, i) + + def Less(self, i:int=None): + if i is None: + return self.getTokens(CPP14Parser.Less) + else: + return self.getToken(CPP14Parser.Less, i) + + def GreaterEqual(self): + return self.getToken(CPP14Parser.GreaterEqual, 0) + + def PlusAssign(self): + return self.getToken(CPP14Parser.PlusAssign, 0) + + def MinusAssign(self): + return self.getToken(CPP14Parser.MinusAssign, 0) + + def StarAssign(self): + return self.getToken(CPP14Parser.StarAssign, 0) + + def ModAssign(self): + return self.getToken(CPP14Parser.ModAssign, 0) + + def XorAssign(self): + return self.getToken(CPP14Parser.XorAssign, 0) + + def AndAssign(self): + return self.getToken(CPP14Parser.AndAssign, 0) + + def OrAssign(self): + return self.getToken(CPP14Parser.OrAssign, 0) + + def RightShiftAssign(self): + return self.getToken(CPP14Parser.RightShiftAssign, 0) + + def LeftShiftAssign(self): + return self.getToken(CPP14Parser.LeftShiftAssign, 0) + + def Equal(self): + return self.getToken(CPP14Parser.Equal, 0) + + def NotEqual(self): + return self.getToken(CPP14Parser.NotEqual, 0) + + def LessEqual(self): + return self.getToken(CPP14Parser.LessEqual, 0) + + def AndAnd(self): + return self.getToken(CPP14Parser.AndAnd, 0) + + def OrOr(self): + return self.getToken(CPP14Parser.OrOr, 0) + + def PlusPlus(self): + return self.getToken(CPP14Parser.PlusPlus, 0) + + def MinusMinus(self): + return self.getToken(CPP14Parser.MinusMinus, 0) + + def Comma(self): + return self.getToken(CPP14Parser.Comma, 0) + + def ArrowStar(self): + return self.getToken(CPP14Parser.ArrowStar, 0) + + def Arrow(self): + return self.getToken(CPP14Parser.Arrow, 0) + + def LeftParen(self): + return self.getToken(CPP14Parser.LeftParen, 0) + + def RightParen(self): + return self.getToken(CPP14Parser.RightParen, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_theOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTheOperator" ): + return visitor.visitTheOperator(self) + else: + return visitor.visitChildren(self) + + + + + def theOperator(self): + + localctx = CPP14Parser.TheOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 378, self.RULE_theOperator) + try: + self.state = 2057 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,290,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2006 + self.match(CPP14Parser.New) + self.state = 2009 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,288,self._ctx) + if la_ == 1: + self.state = 2007 + self.match(CPP14Parser.LeftBracket) + self.state = 2008 + self.match(CPP14Parser.RightBracket) + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2011 + self.match(CPP14Parser.Delete) + self.state = 2014 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,289,self._ctx) + if la_ == 1: + self.state = 2012 + self.match(CPP14Parser.LeftBracket) + self.state = 2013 + self.match(CPP14Parser.RightBracket) + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2016 + self.match(CPP14Parser.Plus) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2017 + self.match(CPP14Parser.Minus) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2018 + self.match(CPP14Parser.Star) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2019 + self.match(CPP14Parser.Div) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2020 + self.match(CPP14Parser.Mod) + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 2021 + self.match(CPP14Parser.Caret) + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 2022 + self.match(CPP14Parser.And) + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 2023 + self.match(CPP14Parser.Or) + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 2024 + self.match(CPP14Parser.Tilde) + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 2025 + self.match(CPP14Parser.Not) + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 2026 + self.match(CPP14Parser.Assign) + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 2027 + self.match(CPP14Parser.Greater) + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 2028 + self.match(CPP14Parser.Less) + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 2029 + self.match(CPP14Parser.GreaterEqual) + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 2030 + self.match(CPP14Parser.PlusAssign) + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 2031 + self.match(CPP14Parser.MinusAssign) + pass + + elif la_ == 19: + self.enterOuterAlt(localctx, 19) + self.state = 2032 + self.match(CPP14Parser.StarAssign) + pass + + elif la_ == 20: + self.enterOuterAlt(localctx, 20) + self.state = 2033 + self.match(CPP14Parser.ModAssign) + pass + + elif la_ == 21: + self.enterOuterAlt(localctx, 21) + self.state = 2034 + self.match(CPP14Parser.XorAssign) + pass + + elif la_ == 22: + self.enterOuterAlt(localctx, 22) + self.state = 2035 + self.match(CPP14Parser.AndAssign) + pass + + elif la_ == 23: + self.enterOuterAlt(localctx, 23) + self.state = 2036 + self.match(CPP14Parser.OrAssign) + pass + + elif la_ == 24: + self.enterOuterAlt(localctx, 24) + self.state = 2037 + self.match(CPP14Parser.Less) + self.state = 2038 + self.match(CPP14Parser.Less) + pass + + elif la_ == 25: + self.enterOuterAlt(localctx, 25) + self.state = 2039 + self.match(CPP14Parser.Greater) + self.state = 2040 + self.match(CPP14Parser.Greater) + pass + + elif la_ == 26: + self.enterOuterAlt(localctx, 26) + self.state = 2041 + self.match(CPP14Parser.RightShiftAssign) + pass + + elif la_ == 27: + self.enterOuterAlt(localctx, 27) + self.state = 2042 + self.match(CPP14Parser.LeftShiftAssign) + pass + + elif la_ == 28: + self.enterOuterAlt(localctx, 28) + self.state = 2043 + self.match(CPP14Parser.Equal) + pass + + elif la_ == 29: + self.enterOuterAlt(localctx, 29) + self.state = 2044 + self.match(CPP14Parser.NotEqual) + pass + + elif la_ == 30: + self.enterOuterAlt(localctx, 30) + self.state = 2045 + self.match(CPP14Parser.LessEqual) + pass + + elif la_ == 31: + self.enterOuterAlt(localctx, 31) + self.state = 2046 + self.match(CPP14Parser.AndAnd) + pass + + elif la_ == 32: + self.enterOuterAlt(localctx, 32) + self.state = 2047 + self.match(CPP14Parser.OrOr) + pass + + elif la_ == 33: + self.enterOuterAlt(localctx, 33) + self.state = 2048 + self.match(CPP14Parser.PlusPlus) + pass + + elif la_ == 34: + self.enterOuterAlt(localctx, 34) + self.state = 2049 + self.match(CPP14Parser.MinusMinus) + pass + + elif la_ == 35: + self.enterOuterAlt(localctx, 35) + self.state = 2050 + self.match(CPP14Parser.Comma) + pass + + elif la_ == 36: + self.enterOuterAlt(localctx, 36) + self.state = 2051 + self.match(CPP14Parser.ArrowStar) + pass + + elif la_ == 37: + self.enterOuterAlt(localctx, 37) + self.state = 2052 + self.match(CPP14Parser.Arrow) + pass + + elif la_ == 38: + self.enterOuterAlt(localctx, 38) + self.state = 2053 + self.match(CPP14Parser.LeftParen) + self.state = 2054 + self.match(CPP14Parser.RightParen) + pass + + elif la_ == 39: + self.enterOuterAlt(localctx, 39) + self.state = 2055 + self.match(CPP14Parser.LeftBracket) + self.state = 2056 + self.match(CPP14Parser.RightBracket) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IntegerLiteral(self): + return self.getToken(CPP14Parser.IntegerLiteral, 0) + + def CharacterLiteral(self): + return self.getToken(CPP14Parser.CharacterLiteral, 0) + + def FloatingLiteral(self): + return self.getToken(CPP14Parser.FloatingLiteral, 0) + + def StringLiteral(self): + return self.getToken(CPP14Parser.StringLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(CPP14Parser.BooleanLiteral, 0) + + def PointerLiteral(self): + return self.getToken(CPP14Parser.PointerLiteral, 0) + + def UserDefinedLiteral(self): + return self.getToken(CPP14Parser.UserDefinedLiteral, 0) + + def getRuleIndex(self): + return CPP14Parser.RULE_literal + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLiteral" ): + return visitor.visitLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def literal(self): + + localctx = CPP14Parser.LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 380, self.RULE_literal) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2059 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 254) != 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 + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[5] = self.nestedNameSpecifier_sempred + self._predicates[15] = self.postfixExpression_sempred + self._predicates[25] = self.noPointerNewDeclarator_sempred + self._predicates[115] = self.noPointerDeclarator_sempred + self._predicates[148] = self.memberDeclarator_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 nestedNameSpecifier_sempred(self, localctx:NestedNameSpecifierContext, predIndex:int): + if predIndex == 0: + return self.precpred(self._ctx, 1) + + + def postfixExpression_sempred(self, localctx:PostfixExpressionContext, predIndex:int): + if predIndex == 1: + return self.precpred(self._ctx, 7) + + + if predIndex == 2: + return self.precpred(self._ctx, 6) + + + if predIndex == 3: + return self.precpred(self._ctx, 4) + + + if predIndex == 4: + return self.precpred(self._ctx, 3) + + + def noPointerNewDeclarator_sempred(self, localctx:NoPointerNewDeclaratorContext, predIndex:int): + if predIndex == 5: + return self.precpred(self._ctx, 1) + + + def noPointerDeclarator_sempred(self, localctx:NoPointerDeclaratorContext, predIndex:int): + if predIndex == 6: + return self.precpred(self._ctx, 2) + + + def memberDeclarator_sempred(self, localctx:MemberDeclaratorContext, predIndex:int): + if predIndex == 7: + return this.IsPureSpecifierAllowed() + + + if predIndex == 8: + return this.IsPureSpecifierAllowed() + + + + + diff --git a/csim/cpp/CPP14Parser.tokens b/csim/cpp/CPP14Parser.tokens new file mode 100644 index 0000000..97906af --- /dev/null +++ b/csim/cpp/CPP14Parser.tokens @@ -0,0 +1,264 @@ +IntegerLiteral=1 +CharacterLiteral=2 +FloatingLiteral=3 +StringLiteral=4 +BooleanLiteral=5 +PointerLiteral=6 +UserDefinedLiteral=7 +MultiLineMacro=8 +Directive=9 +Alignas=10 +Alignof=11 +Asm=12 +Auto=13 +Bool=14 +Break=15 +Case=16 +Catch=17 +Char=18 +Char16=19 +Char32=20 +Class=21 +Const=22 +Constexpr=23 +Const_cast=24 +Continue=25 +Decltype=26 +Default=27 +Delete=28 +Do=29 +Double=30 +Dynamic_cast=31 +Else=32 +Enum=33 +Explicit=34 +Export=35 +Extern=36 +False_=37 +Final=38 +Float=39 +For=40 +Friend=41 +Goto=42 +If=43 +Inline=44 +Int=45 +Long=46 +Mutable=47 +Namespace=48 +New=49 +Noexcept=50 +Nullptr=51 +Operator=52 +Override=53 +Private=54 +Protected=55 +Public=56 +Register=57 +Reinterpret_cast=58 +Return=59 +Short=60 +Signed=61 +Sizeof=62 +Static=63 +Static_assert=64 +Static_cast=65 +Struct=66 +Switch=67 +Template=68 +This=69 +Thread_local=70 +Throw=71 +True_=72 +Try=73 +Typedef=74 +Typeid_=75 +Typename_=76 +Union=77 +Unsigned=78 +Using=79 +Virtual=80 +Void=81 +Volatile=82 +Wchar=83 +While=84 +LeftParen=85 +RightParen=86 +LeftBracket=87 +RightBracket=88 +LeftBrace=89 +RightBrace=90 +Plus=91 +Minus=92 +Star=93 +Div=94 +Mod=95 +Caret=96 +And=97 +Or=98 +Tilde=99 +Not=100 +Assign=101 +Less=102 +Greater=103 +PlusAssign=104 +MinusAssign=105 +StarAssign=106 +DivAssign=107 +ModAssign=108 +XorAssign=109 +AndAssign=110 +OrAssign=111 +LeftShiftAssign=112 +RightShiftAssign=113 +Equal=114 +NotEqual=115 +LessEqual=116 +GreaterEqual=117 +AndAnd=118 +OrOr=119 +PlusPlus=120 +MinusMinus=121 +Comma=122 +ArrowStar=123 +Arrow=124 +Question=125 +Colon=126 +Doublecolon=127 +Semi=128 +Dot=129 +DotStar=130 +Ellipsis=131 +Identifier=132 +DecimalLiteral=133 +OctalLiteral=134 +HexadecimalLiteral=135 +BinaryLiteral=136 +Integersuffix=137 +UserDefinedIntegerLiteral=138 +UserDefinedFloatingLiteral=139 +UserDefinedStringLiteral=140 +UserDefinedCharacterLiteral=141 +Whitespace=142 +Newline=143 +BlockComment=144 +LineComment=145 +'alignas'=10 +'alignof'=11 +'asm'=12 +'auto'=13 +'bool'=14 +'break'=15 +'case'=16 +'catch'=17 +'char'=18 +'char16_t'=19 +'char32_t'=20 +'class'=21 +'const'=22 +'constexpr'=23 +'const_cast'=24 +'continue'=25 +'decltype'=26 +'default'=27 +'delete'=28 +'do'=29 +'double'=30 +'dynamic_cast'=31 +'else'=32 +'enum'=33 +'explicit'=34 +'export'=35 +'extern'=36 +'false'=37 +'final'=38 +'float'=39 +'for'=40 +'friend'=41 +'goto'=42 +'if'=43 +'inline'=44 +'int'=45 +'long'=46 +'mutable'=47 +'namespace'=48 +'new'=49 +'noexcept'=50 +'nullptr'=51 +'operator'=52 +'override'=53 +'private'=54 +'protected'=55 +'public'=56 +'register'=57 +'reinterpret_cast'=58 +'return'=59 +'short'=60 +'signed'=61 +'sizeof'=62 +'static'=63 +'static_assert'=64 +'static_cast'=65 +'struct'=66 +'switch'=67 +'template'=68 +'this'=69 +'thread_local'=70 +'throw'=71 +'true'=72 +'try'=73 +'typedef'=74 +'typeid'=75 +'typename'=76 +'union'=77 +'unsigned'=78 +'using'=79 +'virtual'=80 +'void'=81 +'volatile'=82 +'wchar_t'=83 +'while'=84 +'('=85 +')'=86 +'['=87 +']'=88 +'{'=89 +'}'=90 +'+'=91 +'-'=92 +'*'=93 +'/'=94 +'%'=95 +'^'=96 +'&'=97 +'|'=98 +'~'=99 +'='=101 +'<'=102 +'>'=103 +'+='=104 +'-='=105 +'*='=106 +'/='=107 +'%='=108 +'^='=109 +'&='=110 +'|='=111 +'<<='=112 +'>>='=113 +'=='=114 +'!='=115 +'<='=116 +'>='=117 +'++'=120 +'--'=121 +','=122 +'->*'=123 +'->'=124 +'?'=125 +':'=126 +'::'=127 +';'=128 +'.'=129 +'.*'=130 +'...'=131 diff --git a/csim/cpp/CPP14ParserBase.py b/csim/cpp/CPP14ParserBase.py new file mode 100644 index 0000000..896c735 --- /dev/null +++ b/csim/cpp/CPP14ParserBase.py @@ -0,0 +1,29 @@ + +from antlr4 import * + +relativeImport = False +if __name__ is not None and "." in __name__: + relativeImport = True + +class CPP14ParserBase(Parser): + @staticmethod + def parser(): + if relativeImport: + from .CPP14Parser import CPP14Parser + else: + from CPP14Parser import CPP14Parser + return CPP14Parser + + def IsPureSpecifierAllowed(self) -> bool: + try: + x = self._ctx # memberDeclarator + c = x.getChild(0).getChild(0) + c2 = c.getChild(0) + p = c2.getChild(1) + if p is None: + return False + yo = isinstance(p, self.parser().ParametersAndQualifiersContext) + return yo + except: + pass + return False \ No newline at end of file diff --git a/csim/cpp/CPP14ParserVisitor.py b/csim/cpp/CPP14ParserVisitor.py new file mode 100644 index 0000000..8b0f3e0 --- /dev/null +++ b/csim/cpp/CPP14ParserVisitor.py @@ -0,0 +1,968 @@ +# Generated from CPP14Parser.g4 by ANTLR 4.13.2 +from antlr4 import * +if "." in __name__: + from .CPP14Parser import CPP14Parser +else: + from CPP14Parser import CPP14Parser + +# This class defines a complete generic visitor for a parse tree produced by CPP14Parser. + +class CPP14ParserVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by CPP14Parser#translationUnit. + def visitTranslationUnit(self, ctx:CPP14Parser.TranslationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#primaryExpression. + def visitPrimaryExpression(self, ctx:CPP14Parser.PrimaryExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#idExpression. + def visitIdExpression(self, ctx:CPP14Parser.IdExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#unqualifiedId. + def visitUnqualifiedId(self, ctx:CPP14Parser.UnqualifiedIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#qualifiedId. + def visitQualifiedId(self, ctx:CPP14Parser.QualifiedIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#nestedNameSpecifier. + def visitNestedNameSpecifier(self, ctx:CPP14Parser.NestedNameSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#lambdaExpression. + def visitLambdaExpression(self, ctx:CPP14Parser.LambdaExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#lambdaIntroducer. + def visitLambdaIntroducer(self, ctx:CPP14Parser.LambdaIntroducerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#lambdaCapture. + def visitLambdaCapture(self, ctx:CPP14Parser.LambdaCaptureContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#captureDefault. + def visitCaptureDefault(self, ctx:CPP14Parser.CaptureDefaultContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#captureList. + def visitCaptureList(self, ctx:CPP14Parser.CaptureListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#capture. + def visitCapture(self, ctx:CPP14Parser.CaptureContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleCapture. + def visitSimpleCapture(self, ctx:CPP14Parser.SimpleCaptureContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initcapture. + def visitInitcapture(self, ctx:CPP14Parser.InitcaptureContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#lambdaDeclarator. + def visitLambdaDeclarator(self, ctx:CPP14Parser.LambdaDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#postfixExpression. + def visitPostfixExpression(self, ctx:CPP14Parser.PostfixExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeIdOfTheTypeId. + def visitTypeIdOfTheTypeId(self, ctx:CPP14Parser.TypeIdOfTheTypeIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#expressionList. + def visitExpressionList(self, ctx:CPP14Parser.ExpressionListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pseudoDestructorName. + def visitPseudoDestructorName(self, ctx:CPP14Parser.PseudoDestructorNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#unaryExpression. + def visitUnaryExpression(self, ctx:CPP14Parser.UnaryExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#unaryOperator. + def visitUnaryOperator(self, ctx:CPP14Parser.UnaryOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#newExpression_. + def visitNewExpression_(self, ctx:CPP14Parser.NewExpression_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#newPlacement. + def visitNewPlacement(self, ctx:CPP14Parser.NewPlacementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#newTypeId. + def visitNewTypeId(self, ctx:CPP14Parser.NewTypeIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#newDeclarator_. + def visitNewDeclarator_(self, ctx:CPP14Parser.NewDeclarator_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noPointerNewDeclarator. + def visitNoPointerNewDeclarator(self, ctx:CPP14Parser.NoPointerNewDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#newInitializer_. + def visitNewInitializer_(self, ctx:CPP14Parser.NewInitializer_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#deleteExpression. + def visitDeleteExpression(self, ctx:CPP14Parser.DeleteExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noExceptExpression. + def visitNoExceptExpression(self, ctx:CPP14Parser.NoExceptExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#castExpression. + def visitCastExpression(self, ctx:CPP14Parser.CastExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pointerMemberExpression. + def visitPointerMemberExpression(self, ctx:CPP14Parser.PointerMemberExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#multiplicativeExpression. + def visitMultiplicativeExpression(self, ctx:CPP14Parser.MultiplicativeExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#additiveExpression. + def visitAdditiveExpression(self, ctx:CPP14Parser.AdditiveExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#shiftExpression. + def visitShiftExpression(self, ctx:CPP14Parser.ShiftExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#shiftOperator. + def visitShiftOperator(self, ctx:CPP14Parser.ShiftOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#relationalExpression. + def visitRelationalExpression(self, ctx:CPP14Parser.RelationalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#equalityExpression. + def visitEqualityExpression(self, ctx:CPP14Parser.EqualityExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#andExpression. + def visitAndExpression(self, ctx:CPP14Parser.AndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#exclusiveOrExpression. + def visitExclusiveOrExpression(self, ctx:CPP14Parser.ExclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#inclusiveOrExpression. + def visitInclusiveOrExpression(self, ctx:CPP14Parser.InclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#logicalAndExpression. + def visitLogicalAndExpression(self, ctx:CPP14Parser.LogicalAndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#logicalOrExpression. + def visitLogicalOrExpression(self, ctx:CPP14Parser.LogicalOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#conditionalExpression. + def visitConditionalExpression(self, ctx:CPP14Parser.ConditionalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#assignmentExpression. + def visitAssignmentExpression(self, ctx:CPP14Parser.AssignmentExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#assignmentOperator. + def visitAssignmentOperator(self, ctx:CPP14Parser.AssignmentOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#expression. + def visitExpression(self, ctx:CPP14Parser.ExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#constantExpression. + def visitConstantExpression(self, ctx:CPP14Parser.ConstantExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#statement. + def visitStatement(self, ctx:CPP14Parser.StatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#labeledStatement. + def visitLabeledStatement(self, ctx:CPP14Parser.LabeledStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#expressionStatement. + def visitExpressionStatement(self, ctx:CPP14Parser.ExpressionStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#compoundStatement. + def visitCompoundStatement(self, ctx:CPP14Parser.CompoundStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#statementSeq. + def visitStatementSeq(self, ctx:CPP14Parser.StatementSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#selectionStatement. + def visitSelectionStatement(self, ctx:CPP14Parser.SelectionStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#condition. + def visitCondition(self, ctx:CPP14Parser.ConditionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#iterationStatement. + def visitIterationStatement(self, ctx:CPP14Parser.IterationStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#forInitStatement. + def visitForInitStatement(self, ctx:CPP14Parser.ForInitStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#forRangeDeclaration. + def visitForRangeDeclaration(self, ctx:CPP14Parser.ForRangeDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#forRangeInitializer. + def visitForRangeInitializer(self, ctx:CPP14Parser.ForRangeInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#jumpStatement. + def visitJumpStatement(self, ctx:CPP14Parser.JumpStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declarationStatement. + def visitDeclarationStatement(self, ctx:CPP14Parser.DeclarationStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declarationseq. + def visitDeclarationseq(self, ctx:CPP14Parser.DeclarationseqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declaration. + def visitDeclaration(self, ctx:CPP14Parser.DeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#blockDeclaration. + def visitBlockDeclaration(self, ctx:CPP14Parser.BlockDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#aliasDeclaration. + def visitAliasDeclaration(self, ctx:CPP14Parser.AliasDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleDeclaration. + def visitSimpleDeclaration(self, ctx:CPP14Parser.SimpleDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#staticAssertDeclaration. + def visitStaticAssertDeclaration(self, ctx:CPP14Parser.StaticAssertDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#emptyDeclaration_. + def visitEmptyDeclaration_(self, ctx:CPP14Parser.EmptyDeclaration_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeDeclaration. + def visitAttributeDeclaration(self, ctx:CPP14Parser.AttributeDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declSpecifier. + def visitDeclSpecifier(self, ctx:CPP14Parser.DeclSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declSpecifierSeq. + def visitDeclSpecifierSeq(self, ctx:CPP14Parser.DeclSpecifierSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#storageClassSpecifier. + def visitStorageClassSpecifier(self, ctx:CPP14Parser.StorageClassSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#functionSpecifier. + def visitFunctionSpecifier(self, ctx:CPP14Parser.FunctionSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typedefName. + def visitTypedefName(self, ctx:CPP14Parser.TypedefNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeSpecifier. + def visitTypeSpecifier(self, ctx:CPP14Parser.TypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#trailingTypeSpecifier. + def visitTrailingTypeSpecifier(self, ctx:CPP14Parser.TrailingTypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeSpecifierSeq. + def visitTypeSpecifierSeq(self, ctx:CPP14Parser.TypeSpecifierSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#trailingTypeSpecifierSeq. + def visitTrailingTypeSpecifierSeq(self, ctx:CPP14Parser.TrailingTypeSpecifierSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleTypeLengthModifier. + def visitSimpleTypeLengthModifier(self, ctx:CPP14Parser.SimpleTypeLengthModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleTypeSignednessModifier. + def visitSimpleTypeSignednessModifier(self, ctx:CPP14Parser.SimpleTypeSignednessModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleTypeSpecifier. + def visitSimpleTypeSpecifier(self, ctx:CPP14Parser.SimpleTypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#theTypeName. + def visitTheTypeName(self, ctx:CPP14Parser.TheTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#decltypeSpecifier. + def visitDecltypeSpecifier(self, ctx:CPP14Parser.DecltypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#elaboratedTypeSpecifier. + def visitElaboratedTypeSpecifier(self, ctx:CPP14Parser.ElaboratedTypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumName. + def visitEnumName(self, ctx:CPP14Parser.EnumNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumSpecifier. + def visitEnumSpecifier(self, ctx:CPP14Parser.EnumSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumHead. + def visitEnumHead(self, ctx:CPP14Parser.EnumHeadContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#opaqueEnumDeclaration. + def visitOpaqueEnumDeclaration(self, ctx:CPP14Parser.OpaqueEnumDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumkey. + def visitEnumkey(self, ctx:CPP14Parser.EnumkeyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumbase. + def visitEnumbase(self, ctx:CPP14Parser.EnumbaseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumeratorList. + def visitEnumeratorList(self, ctx:CPP14Parser.EnumeratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumeratorDefinition. + def visitEnumeratorDefinition(self, ctx:CPP14Parser.EnumeratorDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#enumerator. + def visitEnumerator(self, ctx:CPP14Parser.EnumeratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#namespaceName. + def visitNamespaceName(self, ctx:CPP14Parser.NamespaceNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#originalNamespaceName. + def visitOriginalNamespaceName(self, ctx:CPP14Parser.OriginalNamespaceNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#namespaceDefinition. + def visitNamespaceDefinition(self, ctx:CPP14Parser.NamespaceDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#namespaceAlias. + def visitNamespaceAlias(self, ctx:CPP14Parser.NamespaceAliasContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#namespaceAliasDefinition. + def visitNamespaceAliasDefinition(self, ctx:CPP14Parser.NamespaceAliasDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#qualifiednamespacespecifier. + def visitQualifiednamespacespecifier(self, ctx:CPP14Parser.QualifiednamespacespecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#usingDeclaration. + def visitUsingDeclaration(self, ctx:CPP14Parser.UsingDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#usingDirective. + def visitUsingDirective(self, ctx:CPP14Parser.UsingDirectiveContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#asmDefinition. + def visitAsmDefinition(self, ctx:CPP14Parser.AsmDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#linkageSpecification. + def visitLinkageSpecification(self, ctx:CPP14Parser.LinkageSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeSpecifierSeq. + def visitAttributeSpecifierSeq(self, ctx:CPP14Parser.AttributeSpecifierSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeSpecifier. + def visitAttributeSpecifier(self, ctx:CPP14Parser.AttributeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#alignmentspecifier. + def visitAlignmentspecifier(self, ctx:CPP14Parser.AlignmentspecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeList. + def visitAttributeList(self, ctx:CPP14Parser.AttributeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attribute. + def visitAttribute(self, ctx:CPP14Parser.AttributeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeNamespace. + def visitAttributeNamespace(self, ctx:CPP14Parser.AttributeNamespaceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#attributeArgumentClause. + def visitAttributeArgumentClause(self, ctx:CPP14Parser.AttributeArgumentClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#balancedTokenSeq. + def visitBalancedTokenSeq(self, ctx:CPP14Parser.BalancedTokenSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#balancedtoken. + def visitBalancedtoken(self, ctx:CPP14Parser.BalancedtokenContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initDeclaratorList. + def visitInitDeclaratorList(self, ctx:CPP14Parser.InitDeclaratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initDeclarator. + def visitInitDeclarator(self, ctx:CPP14Parser.InitDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declarator. + def visitDeclarator(self, ctx:CPP14Parser.DeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pointerDeclarator. + def visitPointerDeclarator(self, ctx:CPP14Parser.PointerDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noPointerDeclarator. + def visitNoPointerDeclarator(self, ctx:CPP14Parser.NoPointerDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#parametersAndQualifiers. + def visitParametersAndQualifiers(self, ctx:CPP14Parser.ParametersAndQualifiersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#trailingReturnType. + def visitTrailingReturnType(self, ctx:CPP14Parser.TrailingReturnTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pointerOperator. + def visitPointerOperator(self, ctx:CPP14Parser.PointerOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#cvqualifierseq. + def visitCvqualifierseq(self, ctx:CPP14Parser.CvqualifierseqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#cvQualifier. + def visitCvQualifier(self, ctx:CPP14Parser.CvQualifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#refqualifier. + def visitRefqualifier(self, ctx:CPP14Parser.RefqualifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#declaratorid. + def visitDeclaratorid(self, ctx:CPP14Parser.DeclaratoridContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#theTypeId. + def visitTheTypeId(self, ctx:CPP14Parser.TheTypeIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#abstractDeclarator. + def visitAbstractDeclarator(self, ctx:CPP14Parser.AbstractDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pointerAbstractDeclarator. + def visitPointerAbstractDeclarator(self, ctx:CPP14Parser.PointerAbstractDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noPointerAbstractDeclarator. + def visitNoPointerAbstractDeclarator(self, ctx:CPP14Parser.NoPointerAbstractDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#abstractPackDeclarator. + def visitAbstractPackDeclarator(self, ctx:CPP14Parser.AbstractPackDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noPointerAbstractPackDeclarator. + def visitNoPointerAbstractPackDeclarator(self, ctx:CPP14Parser.NoPointerAbstractPackDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#parameterDeclarationClause. + def visitParameterDeclarationClause(self, ctx:CPP14Parser.ParameterDeclarationClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#parameterDeclarationList. + def visitParameterDeclarationList(self, ctx:CPP14Parser.ParameterDeclarationListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#parameterDeclaration. + def visitParameterDeclaration(self, ctx:CPP14Parser.ParameterDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#functionDefinition. + def visitFunctionDefinition(self, ctx:CPP14Parser.FunctionDefinitionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#functionBody. + def visitFunctionBody(self, ctx:CPP14Parser.FunctionBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initializer. + def visitInitializer(self, ctx:CPP14Parser.InitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#braceOrEqualInitializer. + def visitBraceOrEqualInitializer(self, ctx:CPP14Parser.BraceOrEqualInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initializerClause. + def visitInitializerClause(self, ctx:CPP14Parser.InitializerClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#initializerList. + def visitInitializerList(self, ctx:CPP14Parser.InitializerListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#bracedInitList. + def visitBracedInitList(self, ctx:CPP14Parser.BracedInitListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#className. + def visitClassName(self, ctx:CPP14Parser.ClassNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classSpecifier. + def visitClassSpecifier(self, ctx:CPP14Parser.ClassSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classHead. + def visitClassHead(self, ctx:CPP14Parser.ClassHeadContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classHeadName. + def visitClassHeadName(self, ctx:CPP14Parser.ClassHeadNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classVirtSpecifier. + def visitClassVirtSpecifier(self, ctx:CPP14Parser.ClassVirtSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classKey. + def visitClassKey(self, ctx:CPP14Parser.ClassKeyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memberSpecification. + def visitMemberSpecification(self, ctx:CPP14Parser.MemberSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memberdeclaration. + def visitMemberdeclaration(self, ctx:CPP14Parser.MemberdeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memberDeclaratorList. + def visitMemberDeclaratorList(self, ctx:CPP14Parser.MemberDeclaratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memberDeclarator. + def visitMemberDeclarator(self, ctx:CPP14Parser.MemberDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#virtualSpecifierSeq. + def visitVirtualSpecifierSeq(self, ctx:CPP14Parser.VirtualSpecifierSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#virtualSpecifier. + def visitVirtualSpecifier(self, ctx:CPP14Parser.VirtualSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#pureSpecifier. + def visitPureSpecifier(self, ctx:CPP14Parser.PureSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#baseClause. + def visitBaseClause(self, ctx:CPP14Parser.BaseClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#baseSpecifierList. + def visitBaseSpecifierList(self, ctx:CPP14Parser.BaseSpecifierListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#baseSpecifier. + def visitBaseSpecifier(self, ctx:CPP14Parser.BaseSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#classOrDeclType. + def visitClassOrDeclType(self, ctx:CPP14Parser.ClassOrDeclTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#baseTypeSpecifier. + def visitBaseTypeSpecifier(self, ctx:CPP14Parser.BaseTypeSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#accessSpecifier. + def visitAccessSpecifier(self, ctx:CPP14Parser.AccessSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#conversionFunctionId. + def visitConversionFunctionId(self, ctx:CPP14Parser.ConversionFunctionIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#conversionTypeId. + def visitConversionTypeId(self, ctx:CPP14Parser.ConversionTypeIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#conversionDeclarator. + def visitConversionDeclarator(self, ctx:CPP14Parser.ConversionDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#constructorInitializer. + def visitConstructorInitializer(self, ctx:CPP14Parser.ConstructorInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memInitializerList. + def visitMemInitializerList(self, ctx:CPP14Parser.MemInitializerListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#memInitializer. + def visitMemInitializer(self, ctx:CPP14Parser.MemInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#meminitializerid. + def visitMeminitializerid(self, ctx:CPP14Parser.MeminitializeridContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#operatorFunctionId. + def visitOperatorFunctionId(self, ctx:CPP14Parser.OperatorFunctionIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#literalOperatorId. + def visitLiteralOperatorId(self, ctx:CPP14Parser.LiteralOperatorIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateDeclaration. + def visitTemplateDeclaration(self, ctx:CPP14Parser.TemplateDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateparameterList. + def visitTemplateparameterList(self, ctx:CPP14Parser.TemplateparameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateParameter. + def visitTemplateParameter(self, ctx:CPP14Parser.TemplateParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeParameter. + def visitTypeParameter(self, ctx:CPP14Parser.TypeParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#simpleTemplateId. + def visitSimpleTemplateId(self, ctx:CPP14Parser.SimpleTemplateIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateId. + def visitTemplateId(self, ctx:CPP14Parser.TemplateIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateName. + def visitTemplateName(self, ctx:CPP14Parser.TemplateNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateArgumentList. + def visitTemplateArgumentList(self, ctx:CPP14Parser.TemplateArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#templateArgument. + def visitTemplateArgument(self, ctx:CPP14Parser.TemplateArgumentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeNameSpecifier. + def visitTypeNameSpecifier(self, ctx:CPP14Parser.TypeNameSpecifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#explicitInstantiation. + def visitExplicitInstantiation(self, ctx:CPP14Parser.ExplicitInstantiationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#explicitSpecialization. + def visitExplicitSpecialization(self, ctx:CPP14Parser.ExplicitSpecializationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#tryBlock. + def visitTryBlock(self, ctx:CPP14Parser.TryBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#functionTryBlock. + def visitFunctionTryBlock(self, ctx:CPP14Parser.FunctionTryBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#handlerSeq. + def visitHandlerSeq(self, ctx:CPP14Parser.HandlerSeqContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#handler. + def visitHandler(self, ctx:CPP14Parser.HandlerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#exceptionDeclaration. + def visitExceptionDeclaration(self, ctx:CPP14Parser.ExceptionDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#throwExpression. + def visitThrowExpression(self, ctx:CPP14Parser.ThrowExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#exceptionSpecification. + def visitExceptionSpecification(self, ctx:CPP14Parser.ExceptionSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#dynamicExceptionSpecification. + def visitDynamicExceptionSpecification(self, ctx:CPP14Parser.DynamicExceptionSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#typeIdList. + def visitTypeIdList(self, ctx:CPP14Parser.TypeIdListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#noeExceptSpecification. + def visitNoeExceptSpecification(self, ctx:CPP14Parser.NoeExceptSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#theOperator. + def visitTheOperator(self, ctx:CPP14Parser.TheOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by CPP14Parser#literal. + def visitLiteral(self, ctx:CPP14Parser.LiteralContext): + return self.visitChildren(ctx) + + + +del CPP14Parser \ No newline at end of file diff --git a/csim/cpp/__init__.py b/csim/cpp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csim/cpp/transformGrammar.py b/csim/cpp/transformGrammar.py new file mode 100644 index 0000000..8a5f785 --- /dev/null +++ b/csim/cpp/transformGrammar.py @@ -0,0 +1,31 @@ +"""The script transforms the grammar to fit for the python target """ +import sys +import re +import shutil +from glob import glob +from pathlib import Path + +def main(): + """Executes the script.""" + for file in glob("./*.g4"): + transform_grammar(file) + +def transform_grammar(file_path): + """Transforms the grammar to fit for the python target""" + print("Altering " + file_path) + if not Path(file_path).is_file: + print(f"Could not find file: {file_path}") + sys.exit(1) + + shutil.move(file_path, file_path + ".bak") + with open(file_path + ".bak",'r', encoding="utf-8") as input_file: + with open(file_path, 'w', encoding="utf-8") as output_file: + for line in input_file: + line = re.sub(r"(!this\.)", 'not self.', line) + line = re.sub(r"(this\.)", 'self.', line) + output_file.write(line) + + print("Writing ...") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/csim/cpp/utils.py b/csim/cpp/utils.py new file mode 100644 index 0000000..987aca2 --- /dev/null +++ b/csim/cpp/utils.py @@ -0,0 +1,54 @@ +from .CPP14Lexer import CPP14Lexer +from .CPP14Parser import CPP14Parser +from antlr4 import Token + +COLLAPSED_RULE_INDICES = set() + +EXCLUDED_TOKEN_TYPES = { + # Punctuation that does not contribute to structural similarity + CPP14Lexer.LeftParen, + CPP14Lexer.RightParen, + CPP14Lexer.LeftBrace, + CPP14Lexer.RightBrace, + CPP14Lexer.Colon, + CPP14Lexer.Comma, + CPP14Lexer.Semi, + CPP14Lexer.Identifier, + # Keywords that do not contribute to structural similarity + CPP14Lexer.Public, + CPP14Lexer.Class, + CPP14Lexer.Static, + CPP14Lexer.New, + CPP14Lexer.Void, + CPP14Lexer.Return, + CPP14Lexer.Break, + CPP14Lexer.Continue, + # Keywords related to control flow + CPP14Lexer.If, + CPP14Lexer.Else, + CPP14Lexer.For, + CPP14Lexer.While, + CPP14Lexer.Do, + CPP14Lexer.Switch, + CPP14Lexer.Case, + CPP14Lexer.Default, + CPP14Lexer.Try, + CPP14Lexer.Catch, + CPP14Lexer.Throw, + # Keywords related to data types + CPP14Lexer.Int, + CPP14Lexer.Bool, + CPP14Lexer.BinaryLiteral, + CPP14Lexer.Char, + CPP14Lexer.Double, + CPP14Lexer.Float, + CPP14Lexer.Long, + CPP14Lexer.Short, + CPP14Lexer.IntegerLiteral, + CPP14Lexer.FloatingLiteral, + CPP14Lexer.BooleanLiteral, + CPP14Lexer.CharacterLiteral, + CPP14Lexer.StringLiteral, + # Whitespace and comments + Token.EOF, +} diff --git a/csim/java/Java20Lexer.interp b/csim/java/Java20Lexer.interp new file mode 100644 index 0000000..be424a0 --- /dev/null +++ b/csim/java/Java20Lexer.interp @@ -0,0 +1,441 @@ +token literal names: +null +'exports' +'module' +'non-sealed' +'<>' +'open' +'opens' +'permits' +'provides' +'record' +'requires' +'sealed' +'to' +'transitive' +'uses' +'var' +'with' +'yield' +'abstract' +'assert' +'boolean' +'break' +'byte' +'case' +'catch' +'char' +'class' +'const' +'continue' +'default' +'do' +'double' +'else' +'enum' +'extends' +'final' +'finally' +'float' +'for' +'if' +'goto' +'implements' +'import' +'instanceof' +'int' +'interface' +'long' +'native' +'new' +'package' +'private' +'protected' +'public' +'return' +'short' +'static' +'strictfp' +'super' +'switch' +'synchronized' +'this' +'throw' +'throws' +'transient' +'try' +'void' +'volatile' +'while' +'_' +null +null +null +null +null +null +'null' +'(' +')' +'{' +'}' +'[' +']' +';' +',' +'.' +'...' +'@' +'::' +'=' +'>' +'<' +'!' +'~' +'?' +':' +'->' +'==' +'<=' +'>=' +'!=' +'&&' +'||' +'++' +'--' +'+' +'-' +'*' +'/' +'&' +'|' +'^' +'%' +'+=' +'-=' +'*=' +'/=' +'&=' +'|=' +'^=' +'%=' +'<<=' +'>>=' +'>>>=' +null +null +null +null + +token symbolic names: +null +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +FloatingPointLiteral +BooleanLiteral +CharacterLiteral +StringLiteral +TextBlock +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +WS +COMMENT +LINE_COMMENT + +rule names: +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +DecimalIntegerLiteral +HexIntegerLiteral +OctalIntegerLiteral +BinaryIntegerLiteral +IntegerTypeSuffix +DecimalNumeral +Digits +Digit +NonZeroDigit +DigitsAndUnderscores +DigitOrUnderscore +Underscores +HexNumeral +HexDigits +HexDigit +HexDigitsAndUnderscores +HexDigitOrUnderscore +OctalNumeral +OctalDigits +OctalDigit +OctalDigitsAndUnderscores +OctalDigitOrUnderscore +BinaryNumeral +BinaryDigits +BinaryDigit +BinaryDigitsAndUnderscores +BinaryDigitOrUnderscore +FloatingPointLiteral +DecimalFloatingPointLiteral +ExponentPart +ExponentIndicator +SignedInteger +Sign +FloatTypeSuffix +HexadecimalFloatingPointLiteral +HexSignificand +BinaryExponent +BinaryExponentIndicator +BooleanLiteral +CharacterLiteral +SingleCharacter +StringLiteral +StringCharacters +StringCharacter +TextBlock +EscapeSequence +OctalEscape +ZeroToThree +UnicodeEscape +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +IdentifierStart +IdentifierPart +WS +COMMENT +LINE_COMMENT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 126, 1264, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 805, 8, 68, 1, 69, 1, 69, 3, 69, 809, 8, 69, 1, 70, 1, 70, 3, 70, 813, 8, 70, 1, 71, 1, 71, 3, 71, 817, 8, 71, 1, 72, 1, 72, 3, 72, 821, 8, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 3, 74, 828, 8, 74, 1, 74, 1, 74, 1, 74, 3, 74, 833, 8, 74, 3, 74, 835, 8, 74, 1, 75, 1, 75, 3, 75, 839, 8, 75, 1, 75, 3, 75, 842, 8, 75, 1, 76, 1, 76, 3, 76, 846, 8, 76, 1, 77, 1, 77, 1, 78, 4, 78, 851, 8, 78, 11, 78, 12, 78, 852, 1, 79, 1, 79, 3, 79, 857, 8, 79, 1, 80, 4, 80, 860, 8, 80, 11, 80, 12, 80, 861, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 870, 8, 82, 1, 82, 3, 82, 873, 8, 82, 1, 83, 1, 83, 1, 84, 4, 84, 878, 8, 84, 11, 84, 12, 84, 879, 1, 85, 1, 85, 3, 85, 884, 8, 85, 1, 86, 1, 86, 3, 86, 888, 8, 86, 1, 86, 1, 86, 1, 87, 1, 87, 3, 87, 894, 8, 87, 1, 87, 3, 87, 897, 8, 87, 1, 88, 1, 88, 1, 89, 4, 89, 902, 8, 89, 11, 89, 12, 89, 903, 1, 90, 1, 90, 3, 90, 908, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 3, 92, 916, 8, 92, 1, 92, 3, 92, 919, 8, 92, 1, 93, 1, 93, 1, 94, 4, 94, 924, 8, 94, 11, 94, 12, 94, 925, 1, 95, 1, 95, 3, 95, 930, 8, 95, 1, 96, 1, 96, 3, 96, 934, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 939, 8, 97, 1, 97, 3, 97, 942, 8, 97, 1, 97, 3, 97, 945, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 950, 8, 97, 1, 97, 3, 97, 953, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 958, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 963, 8, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 3, 100, 971, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 3, 103, 982, 8, 103, 1, 104, 1, 104, 3, 104, 986, 8, 104, 1, 104, 1, 104, 1, 104, 3, 104, 991, 8, 104, 1, 104, 1, 104, 3, 104, 995, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1011, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1021, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 1027, 8, 110, 1, 110, 1, 110, 1, 111, 4, 111, 1032, 8, 111, 11, 111, 12, 111, 1033, 1, 112, 1, 112, 3, 112, 1038, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1045, 8, 113, 10, 113, 12, 113, 1048, 9, 113, 1, 113, 1, 113, 5, 113, 1052, 8, 113, 10, 113, 12, 113, 1055, 9, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1065, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1078, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 4, 117, 1084, 8, 117, 11, 117, 12, 117, 1085, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 5, 166, 1221, 8, 166, 10, 166, 12, 166, 1224, 9, 166, 1, 167, 3, 167, 1227, 8, 167, 1, 168, 1, 168, 3, 168, 1231, 8, 168, 1, 169, 4, 169, 1234, 8, 169, 11, 169, 12, 169, 1235, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 1244, 8, 170, 10, 170, 12, 170, 1247, 9, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 5, 171, 1258, 8, 171, 10, 171, 12, 171, 1261, 9, 171, 1, 171, 1, 171, 1, 1245, 0, 172, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 0, 141, 0, 143, 0, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 169, 0, 171, 0, 173, 0, 175, 0, 177, 0, 179, 0, 181, 0, 183, 0, 185, 0, 187, 0, 189, 0, 191, 0, 193, 70, 195, 0, 197, 0, 199, 0, 201, 0, 203, 0, 205, 0, 207, 0, 209, 0, 211, 0, 213, 0, 215, 71, 217, 72, 219, 0, 221, 73, 223, 0, 225, 0, 227, 74, 229, 0, 231, 0, 233, 0, 235, 0, 237, 75, 239, 76, 241, 77, 243, 78, 245, 79, 247, 80, 249, 81, 251, 82, 253, 83, 255, 84, 257, 85, 259, 86, 261, 87, 263, 88, 265, 89, 267, 90, 269, 91, 271, 92, 273, 93, 275, 94, 277, 95, 279, 96, 281, 97, 283, 98, 285, 99, 287, 100, 289, 101, 291, 102, 293, 103, 295, 104, 297, 105, 299, 106, 301, 107, 303, 108, 305, 109, 307, 110, 309, 111, 311, 112, 313, 113, 315, 114, 317, 115, 319, 116, 321, 117, 323, 118, 325, 119, 327, 120, 329, 121, 331, 122, 333, 123, 335, 0, 337, 0, 339, 124, 341, 125, 343, 126, 1, 0, 21, 2, 0, 76, 76, 108, 108, 1, 0, 49, 57, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 55, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 68, 68, 70, 70, 100, 100, 102, 102, 2, 0, 80, 80, 112, 112, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 3, 0, 8, 8, 13, 13, 46, 46, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 1, 0, 48, 51, 402, 0, 36, 36, 65, 90, 95, 95, 97, 122, 162, 165, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1377, 1415, 1423, 1423, 1488, 1514, 1520, 1522, 1547, 1547, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2547, 2555, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2801, 2801, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3065, 3065, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3647, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6107, 6108, 6176, 6263, 6272, 6276, 6279, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8352, 8383, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12590, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40938, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42926, 42928, 42935, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43064, 43064, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43261, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43877, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65020, 65075, 65076, 65101, 65103, 65129, 65129, 65136, 65140, 65142, 65276, 65284, 65284, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65504, 65505, 65509, 65510, 228, 0, 48, 57, 127, 159, 173, 173, 768, 879, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1536, 1541, 1552, 1562, 1564, 1564, 1611, 1641, 1648, 1648, 1750, 1757, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1807, 1807, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2260, 2307, 2362, 2364, 2366, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2435, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2563, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2673, 2677, 2677, 2689, 2691, 2748, 2748, 2750, 2757, 2759, 2761, 2763, 2765, 2786, 2787, 2790, 2799, 2810, 2815, 2817, 2819, 2876, 2876, 2878, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3046, 3055, 3072, 3075, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3203, 3260, 3260, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3328, 3331, 3387, 3388, 3390, 3396, 3398, 3400, 3402, 3405, 3415, 3415, 3426, 3427, 3430, 3439, 3458, 3459, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3903, 3953, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4139, 4158, 4160, 4169, 4182, 4185, 4190, 4192, 4194, 4196, 4199, 4205, 4209, 4212, 4226, 4237, 4239, 4253, 4957, 4959, 5906, 5908, 5938, 5940, 5970, 5971, 6002, 6003, 6068, 6099, 6109, 6109, 6112, 6121, 6155, 6158, 6160, 6169, 6277, 6278, 6313, 6313, 6432, 6443, 6448, 6459, 6470, 6479, 6608, 6617, 6679, 6683, 6741, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6832, 6845, 6912, 6916, 6964, 6980, 6992, 7001, 7019, 7027, 7040, 7042, 7073, 7085, 7088, 7097, 7142, 7155, 7204, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7400, 7405, 7405, 7410, 7412, 7415, 7417, 7616, 7673, 7675, 7679, 8203, 8207, 8234, 8238, 8288, 8292, 8294, 8303, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12335, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42654, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43043, 43047, 43136, 43137, 43188, 43205, 43216, 43225, 43232, 43249, 43264, 43273, 43302, 43309, 43335, 43347, 43392, 43395, 43443, 43456, 43472, 43481, 43493, 43493, 43504, 43513, 43561, 43574, 43587, 43587, 43596, 43597, 43600, 43609, 43643, 43645, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43755, 43759, 43765, 43766, 44003, 44010, 44012, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65071, 65279, 65279, 65296, 65305, 65529, 65531, 3, 0, 9, 10, 12, 13, 32, 32, 1278, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 1, 345, 1, 0, 0, 0, 3, 353, 1, 0, 0, 0, 5, 360, 1, 0, 0, 0, 7, 371, 1, 0, 0, 0, 9, 374, 1, 0, 0, 0, 11, 379, 1, 0, 0, 0, 13, 385, 1, 0, 0, 0, 15, 393, 1, 0, 0, 0, 17, 402, 1, 0, 0, 0, 19, 409, 1, 0, 0, 0, 21, 418, 1, 0, 0, 0, 23, 425, 1, 0, 0, 0, 25, 428, 1, 0, 0, 0, 27, 439, 1, 0, 0, 0, 29, 444, 1, 0, 0, 0, 31, 448, 1, 0, 0, 0, 33, 453, 1, 0, 0, 0, 35, 459, 1, 0, 0, 0, 37, 468, 1, 0, 0, 0, 39, 475, 1, 0, 0, 0, 41, 483, 1, 0, 0, 0, 43, 489, 1, 0, 0, 0, 45, 494, 1, 0, 0, 0, 47, 499, 1, 0, 0, 0, 49, 505, 1, 0, 0, 0, 51, 510, 1, 0, 0, 0, 53, 516, 1, 0, 0, 0, 55, 522, 1, 0, 0, 0, 57, 531, 1, 0, 0, 0, 59, 539, 1, 0, 0, 0, 61, 542, 1, 0, 0, 0, 63, 549, 1, 0, 0, 0, 65, 554, 1, 0, 0, 0, 67, 559, 1, 0, 0, 0, 69, 567, 1, 0, 0, 0, 71, 573, 1, 0, 0, 0, 73, 581, 1, 0, 0, 0, 75, 587, 1, 0, 0, 0, 77, 591, 1, 0, 0, 0, 79, 594, 1, 0, 0, 0, 81, 599, 1, 0, 0, 0, 83, 610, 1, 0, 0, 0, 85, 617, 1, 0, 0, 0, 87, 628, 1, 0, 0, 0, 89, 632, 1, 0, 0, 0, 91, 642, 1, 0, 0, 0, 93, 647, 1, 0, 0, 0, 95, 654, 1, 0, 0, 0, 97, 658, 1, 0, 0, 0, 99, 666, 1, 0, 0, 0, 101, 674, 1, 0, 0, 0, 103, 684, 1, 0, 0, 0, 105, 691, 1, 0, 0, 0, 107, 698, 1, 0, 0, 0, 109, 704, 1, 0, 0, 0, 111, 711, 1, 0, 0, 0, 113, 720, 1, 0, 0, 0, 115, 726, 1, 0, 0, 0, 117, 733, 1, 0, 0, 0, 119, 746, 1, 0, 0, 0, 121, 751, 1, 0, 0, 0, 123, 757, 1, 0, 0, 0, 125, 764, 1, 0, 0, 0, 127, 774, 1, 0, 0, 0, 129, 778, 1, 0, 0, 0, 131, 783, 1, 0, 0, 0, 133, 792, 1, 0, 0, 0, 135, 798, 1, 0, 0, 0, 137, 804, 1, 0, 0, 0, 139, 806, 1, 0, 0, 0, 141, 810, 1, 0, 0, 0, 143, 814, 1, 0, 0, 0, 145, 818, 1, 0, 0, 0, 147, 822, 1, 0, 0, 0, 149, 834, 1, 0, 0, 0, 151, 836, 1, 0, 0, 0, 153, 845, 1, 0, 0, 0, 155, 847, 1, 0, 0, 0, 157, 850, 1, 0, 0, 0, 159, 856, 1, 0, 0, 0, 161, 859, 1, 0, 0, 0, 163, 863, 1, 0, 0, 0, 165, 867, 1, 0, 0, 0, 167, 874, 1, 0, 0, 0, 169, 877, 1, 0, 0, 0, 171, 883, 1, 0, 0, 0, 173, 885, 1, 0, 0, 0, 175, 891, 1, 0, 0, 0, 177, 898, 1, 0, 0, 0, 179, 901, 1, 0, 0, 0, 181, 907, 1, 0, 0, 0, 183, 909, 1, 0, 0, 0, 185, 913, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 923, 1, 0, 0, 0, 191, 929, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 962, 1, 0, 0, 0, 197, 964, 1, 0, 0, 0, 199, 967, 1, 0, 0, 0, 201, 970, 1, 0, 0, 0, 203, 974, 1, 0, 0, 0, 205, 976, 1, 0, 0, 0, 207, 978, 1, 0, 0, 0, 209, 994, 1, 0, 0, 0, 211, 996, 1, 0, 0, 0, 213, 999, 1, 0, 0, 0, 215, 1010, 1, 0, 0, 0, 217, 1020, 1, 0, 0, 0, 219, 1022, 1, 0, 0, 0, 221, 1024, 1, 0, 0, 0, 223, 1031, 1, 0, 0, 0, 225, 1037, 1, 0, 0, 0, 227, 1039, 1, 0, 0, 0, 229, 1064, 1, 0, 0, 0, 231, 1077, 1, 0, 0, 0, 233, 1079, 1, 0, 0, 0, 235, 1081, 1, 0, 0, 0, 237, 1092, 1, 0, 0, 0, 239, 1097, 1, 0, 0, 0, 241, 1099, 1, 0, 0, 0, 243, 1101, 1, 0, 0, 0, 245, 1103, 1, 0, 0, 0, 247, 1105, 1, 0, 0, 0, 249, 1107, 1, 0, 0, 0, 251, 1109, 1, 0, 0, 0, 253, 1111, 1, 0, 0, 0, 255, 1113, 1, 0, 0, 0, 257, 1115, 1, 0, 0, 0, 259, 1119, 1, 0, 0, 0, 261, 1121, 1, 0, 0, 0, 263, 1124, 1, 0, 0, 0, 265, 1126, 1, 0, 0, 0, 267, 1128, 1, 0, 0, 0, 269, 1130, 1, 0, 0, 0, 271, 1132, 1, 0, 0, 0, 273, 1134, 1, 0, 0, 0, 275, 1136, 1, 0, 0, 0, 277, 1138, 1, 0, 0, 0, 279, 1141, 1, 0, 0, 0, 281, 1144, 1, 0, 0, 0, 283, 1147, 1, 0, 0, 0, 285, 1150, 1, 0, 0, 0, 287, 1153, 1, 0, 0, 0, 289, 1156, 1, 0, 0, 0, 291, 1159, 1, 0, 0, 0, 293, 1162, 1, 0, 0, 0, 295, 1165, 1, 0, 0, 0, 297, 1167, 1, 0, 0, 0, 299, 1169, 1, 0, 0, 0, 301, 1171, 1, 0, 0, 0, 303, 1173, 1, 0, 0, 0, 305, 1175, 1, 0, 0, 0, 307, 1177, 1, 0, 0, 0, 309, 1179, 1, 0, 0, 0, 311, 1181, 1, 0, 0, 0, 313, 1184, 1, 0, 0, 0, 315, 1187, 1, 0, 0, 0, 317, 1190, 1, 0, 0, 0, 319, 1193, 1, 0, 0, 0, 321, 1196, 1, 0, 0, 0, 323, 1199, 1, 0, 0, 0, 325, 1202, 1, 0, 0, 0, 327, 1205, 1, 0, 0, 0, 329, 1209, 1, 0, 0, 0, 331, 1213, 1, 0, 0, 0, 333, 1218, 1, 0, 0, 0, 335, 1226, 1, 0, 0, 0, 337, 1230, 1, 0, 0, 0, 339, 1233, 1, 0, 0, 0, 341, 1239, 1, 0, 0, 0, 343, 1253, 1, 0, 0, 0, 345, 346, 5, 101, 0, 0, 346, 347, 5, 120, 0, 0, 347, 348, 5, 112, 0, 0, 348, 349, 5, 111, 0, 0, 349, 350, 5, 114, 0, 0, 350, 351, 5, 116, 0, 0, 351, 352, 5, 115, 0, 0, 352, 2, 1, 0, 0, 0, 353, 354, 5, 109, 0, 0, 354, 355, 5, 111, 0, 0, 355, 356, 5, 100, 0, 0, 356, 357, 5, 117, 0, 0, 357, 358, 5, 108, 0, 0, 358, 359, 5, 101, 0, 0, 359, 4, 1, 0, 0, 0, 360, 361, 5, 110, 0, 0, 361, 362, 5, 111, 0, 0, 362, 363, 5, 110, 0, 0, 363, 364, 5, 45, 0, 0, 364, 365, 5, 115, 0, 0, 365, 366, 5, 101, 0, 0, 366, 367, 5, 97, 0, 0, 367, 368, 5, 108, 0, 0, 368, 369, 5, 101, 0, 0, 369, 370, 5, 100, 0, 0, 370, 6, 1, 0, 0, 0, 371, 372, 5, 60, 0, 0, 372, 373, 5, 62, 0, 0, 373, 8, 1, 0, 0, 0, 374, 375, 5, 111, 0, 0, 375, 376, 5, 112, 0, 0, 376, 377, 5, 101, 0, 0, 377, 378, 5, 110, 0, 0, 378, 10, 1, 0, 0, 0, 379, 380, 5, 111, 0, 0, 380, 381, 5, 112, 0, 0, 381, 382, 5, 101, 0, 0, 382, 383, 5, 110, 0, 0, 383, 384, 5, 115, 0, 0, 384, 12, 1, 0, 0, 0, 385, 386, 5, 112, 0, 0, 386, 387, 5, 101, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, 109, 0, 0, 389, 390, 5, 105, 0, 0, 390, 391, 5, 116, 0, 0, 391, 392, 5, 115, 0, 0, 392, 14, 1, 0, 0, 0, 393, 394, 5, 112, 0, 0, 394, 395, 5, 114, 0, 0, 395, 396, 5, 111, 0, 0, 396, 397, 5, 118, 0, 0, 397, 398, 5, 105, 0, 0, 398, 399, 5, 100, 0, 0, 399, 400, 5, 101, 0, 0, 400, 401, 5, 115, 0, 0, 401, 16, 1, 0, 0, 0, 402, 403, 5, 114, 0, 0, 403, 404, 5, 101, 0, 0, 404, 405, 5, 99, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 114, 0, 0, 407, 408, 5, 100, 0, 0, 408, 18, 1, 0, 0, 0, 409, 410, 5, 114, 0, 0, 410, 411, 5, 101, 0, 0, 411, 412, 5, 113, 0, 0, 412, 413, 5, 117, 0, 0, 413, 414, 5, 105, 0, 0, 414, 415, 5, 114, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 115, 0, 0, 417, 20, 1, 0, 0, 0, 418, 419, 5, 115, 0, 0, 419, 420, 5, 101, 0, 0, 420, 421, 5, 97, 0, 0, 421, 422, 5, 108, 0, 0, 422, 423, 5, 101, 0, 0, 423, 424, 5, 100, 0, 0, 424, 22, 1, 0, 0, 0, 425, 426, 5, 116, 0, 0, 426, 427, 5, 111, 0, 0, 427, 24, 1, 0, 0, 0, 428, 429, 5, 116, 0, 0, 429, 430, 5, 114, 0, 0, 430, 431, 5, 97, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 115, 0, 0, 433, 434, 5, 105, 0, 0, 434, 435, 5, 116, 0, 0, 435, 436, 5, 105, 0, 0, 436, 437, 5, 118, 0, 0, 437, 438, 5, 101, 0, 0, 438, 26, 1, 0, 0, 0, 439, 440, 5, 117, 0, 0, 440, 441, 5, 115, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 115, 0, 0, 443, 28, 1, 0, 0, 0, 444, 445, 5, 118, 0, 0, 445, 446, 5, 97, 0, 0, 446, 447, 5, 114, 0, 0, 447, 30, 1, 0, 0, 0, 448, 449, 5, 119, 0, 0, 449, 450, 5, 105, 0, 0, 450, 451, 5, 116, 0, 0, 451, 452, 5, 104, 0, 0, 452, 32, 1, 0, 0, 0, 453, 454, 5, 121, 0, 0, 454, 455, 5, 105, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 108, 0, 0, 457, 458, 5, 100, 0, 0, 458, 34, 1, 0, 0, 0, 459, 460, 5, 97, 0, 0, 460, 461, 5, 98, 0, 0, 461, 462, 5, 115, 0, 0, 462, 463, 5, 116, 0, 0, 463, 464, 5, 114, 0, 0, 464, 465, 5, 97, 0, 0, 465, 466, 5, 99, 0, 0, 466, 467, 5, 116, 0, 0, 467, 36, 1, 0, 0, 0, 468, 469, 5, 97, 0, 0, 469, 470, 5, 115, 0, 0, 470, 471, 5, 115, 0, 0, 471, 472, 5, 101, 0, 0, 472, 473, 5, 114, 0, 0, 473, 474, 5, 116, 0, 0, 474, 38, 1, 0, 0, 0, 475, 476, 5, 98, 0, 0, 476, 477, 5, 111, 0, 0, 477, 478, 5, 111, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 101, 0, 0, 480, 481, 5, 97, 0, 0, 481, 482, 5, 110, 0, 0, 482, 40, 1, 0, 0, 0, 483, 484, 5, 98, 0, 0, 484, 485, 5, 114, 0, 0, 485, 486, 5, 101, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 107, 0, 0, 488, 42, 1, 0, 0, 0, 489, 490, 5, 98, 0, 0, 490, 491, 5, 121, 0, 0, 491, 492, 5, 116, 0, 0, 492, 493, 5, 101, 0, 0, 493, 44, 1, 0, 0, 0, 494, 495, 5, 99, 0, 0, 495, 496, 5, 97, 0, 0, 496, 497, 5, 115, 0, 0, 497, 498, 5, 101, 0, 0, 498, 46, 1, 0, 0, 0, 499, 500, 5, 99, 0, 0, 500, 501, 5, 97, 0, 0, 501, 502, 5, 116, 0, 0, 502, 503, 5, 99, 0, 0, 503, 504, 5, 104, 0, 0, 504, 48, 1, 0, 0, 0, 505, 506, 5, 99, 0, 0, 506, 507, 5, 104, 0, 0, 507, 508, 5, 97, 0, 0, 508, 509, 5, 114, 0, 0, 509, 50, 1, 0, 0, 0, 510, 511, 5, 99, 0, 0, 511, 512, 5, 108, 0, 0, 512, 513, 5, 97, 0, 0, 513, 514, 5, 115, 0, 0, 514, 515, 5, 115, 0, 0, 515, 52, 1, 0, 0, 0, 516, 517, 5, 99, 0, 0, 517, 518, 5, 111, 0, 0, 518, 519, 5, 110, 0, 0, 519, 520, 5, 115, 0, 0, 520, 521, 5, 116, 0, 0, 521, 54, 1, 0, 0, 0, 522, 523, 5, 99, 0, 0, 523, 524, 5, 111, 0, 0, 524, 525, 5, 110, 0, 0, 525, 526, 5, 116, 0, 0, 526, 527, 5, 105, 0, 0, 527, 528, 5, 110, 0, 0, 528, 529, 5, 117, 0, 0, 529, 530, 5, 101, 0, 0, 530, 56, 1, 0, 0, 0, 531, 532, 5, 100, 0, 0, 532, 533, 5, 101, 0, 0, 533, 534, 5, 102, 0, 0, 534, 535, 5, 97, 0, 0, 535, 536, 5, 117, 0, 0, 536, 537, 5, 108, 0, 0, 537, 538, 5, 116, 0, 0, 538, 58, 1, 0, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 111, 0, 0, 541, 60, 1, 0, 0, 0, 542, 543, 5, 100, 0, 0, 543, 544, 5, 111, 0, 0, 544, 545, 5, 117, 0, 0, 545, 546, 5, 98, 0, 0, 546, 547, 5, 108, 0, 0, 547, 548, 5, 101, 0, 0, 548, 62, 1, 0, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 108, 0, 0, 551, 552, 5, 115, 0, 0, 552, 553, 5, 101, 0, 0, 553, 64, 1, 0, 0, 0, 554, 555, 5, 101, 0, 0, 555, 556, 5, 110, 0, 0, 556, 557, 5, 117, 0, 0, 557, 558, 5, 109, 0, 0, 558, 66, 1, 0, 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 120, 0, 0, 561, 562, 5, 116, 0, 0, 562, 563, 5, 101, 0, 0, 563, 564, 5, 110, 0, 0, 564, 565, 5, 100, 0, 0, 565, 566, 5, 115, 0, 0, 566, 68, 1, 0, 0, 0, 567, 568, 5, 102, 0, 0, 568, 569, 5, 105, 0, 0, 569, 570, 5, 110, 0, 0, 570, 571, 5, 97, 0, 0, 571, 572, 5, 108, 0, 0, 572, 70, 1, 0, 0, 0, 573, 574, 5, 102, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 110, 0, 0, 576, 577, 5, 97, 0, 0, 577, 578, 5, 108, 0, 0, 578, 579, 5, 108, 0, 0, 579, 580, 5, 121, 0, 0, 580, 72, 1, 0, 0, 0, 581, 582, 5, 102, 0, 0, 582, 583, 5, 108, 0, 0, 583, 584, 5, 111, 0, 0, 584, 585, 5, 97, 0, 0, 585, 586, 5, 116, 0, 0, 586, 74, 1, 0, 0, 0, 587, 588, 5, 102, 0, 0, 588, 589, 5, 111, 0, 0, 589, 590, 5, 114, 0, 0, 590, 76, 1, 0, 0, 0, 591, 592, 5, 105, 0, 0, 592, 593, 5, 102, 0, 0, 593, 78, 1, 0, 0, 0, 594, 595, 5, 103, 0, 0, 595, 596, 5, 111, 0, 0, 596, 597, 5, 116, 0, 0, 597, 598, 5, 111, 0, 0, 598, 80, 1, 0, 0, 0, 599, 600, 5, 105, 0, 0, 600, 601, 5, 109, 0, 0, 601, 602, 5, 112, 0, 0, 602, 603, 5, 108, 0, 0, 603, 604, 5, 101, 0, 0, 604, 605, 5, 109, 0, 0, 605, 606, 5, 101, 0, 0, 606, 607, 5, 110, 0, 0, 607, 608, 5, 116, 0, 0, 608, 609, 5, 115, 0, 0, 609, 82, 1, 0, 0, 0, 610, 611, 5, 105, 0, 0, 611, 612, 5, 109, 0, 0, 612, 613, 5, 112, 0, 0, 613, 614, 5, 111, 0, 0, 614, 615, 5, 114, 0, 0, 615, 616, 5, 116, 0, 0, 616, 84, 1, 0, 0, 0, 617, 618, 5, 105, 0, 0, 618, 619, 5, 110, 0, 0, 619, 620, 5, 115, 0, 0, 620, 621, 5, 116, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 110, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 101, 0, 0, 625, 626, 5, 111, 0, 0, 626, 627, 5, 102, 0, 0, 627, 86, 1, 0, 0, 0, 628, 629, 5, 105, 0, 0, 629, 630, 5, 110, 0, 0, 630, 631, 5, 116, 0, 0, 631, 88, 1, 0, 0, 0, 632, 633, 5, 105, 0, 0, 633, 634, 5, 110, 0, 0, 634, 635, 5, 116, 0, 0, 635, 636, 5, 101, 0, 0, 636, 637, 5, 114, 0, 0, 637, 638, 5, 102, 0, 0, 638, 639, 5, 97, 0, 0, 639, 640, 5, 99, 0, 0, 640, 641, 5, 101, 0, 0, 641, 90, 1, 0, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 111, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 103, 0, 0, 646, 92, 1, 0, 0, 0, 647, 648, 5, 110, 0, 0, 648, 649, 5, 97, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, 5, 105, 0, 0, 651, 652, 5, 118, 0, 0, 652, 653, 5, 101, 0, 0, 653, 94, 1, 0, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 101, 0, 0, 656, 657, 5, 119, 0, 0, 657, 96, 1, 0, 0, 0, 658, 659, 5, 112, 0, 0, 659, 660, 5, 97, 0, 0, 660, 661, 5, 99, 0, 0, 661, 662, 5, 107, 0, 0, 662, 663, 5, 97, 0, 0, 663, 664, 5, 103, 0, 0, 664, 665, 5, 101, 0, 0, 665, 98, 1, 0, 0, 0, 666, 667, 5, 112, 0, 0, 667, 668, 5, 114, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 118, 0, 0, 670, 671, 5, 97, 0, 0, 671, 672, 5, 116, 0, 0, 672, 673, 5, 101, 0, 0, 673, 100, 1, 0, 0, 0, 674, 675, 5, 112, 0, 0, 675, 676, 5, 114, 0, 0, 676, 677, 5, 111, 0, 0, 677, 678, 5, 116, 0, 0, 678, 679, 5, 101, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 116, 0, 0, 681, 682, 5, 101, 0, 0, 682, 683, 5, 100, 0, 0, 683, 102, 1, 0, 0, 0, 684, 685, 5, 112, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 98, 0, 0, 687, 688, 5, 108, 0, 0, 688, 689, 5, 105, 0, 0, 689, 690, 5, 99, 0, 0, 690, 104, 1, 0, 0, 0, 691, 692, 5, 114, 0, 0, 692, 693, 5, 101, 0, 0, 693, 694, 5, 116, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 114, 0, 0, 696, 697, 5, 110, 0, 0, 697, 106, 1, 0, 0, 0, 698, 699, 5, 115, 0, 0, 699, 700, 5, 104, 0, 0, 700, 701, 5, 111, 0, 0, 701, 702, 5, 114, 0, 0, 702, 703, 5, 116, 0, 0, 703, 108, 1, 0, 0, 0, 704, 705, 5, 115, 0, 0, 705, 706, 5, 116, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, 116, 0, 0, 708, 709, 5, 105, 0, 0, 709, 710, 5, 99, 0, 0, 710, 110, 1, 0, 0, 0, 711, 712, 5, 115, 0, 0, 712, 713, 5, 116, 0, 0, 713, 714, 5, 114, 0, 0, 714, 715, 5, 105, 0, 0, 715, 716, 5, 99, 0, 0, 716, 717, 5, 116, 0, 0, 717, 718, 5, 102, 0, 0, 718, 719, 5, 112, 0, 0, 719, 112, 1, 0, 0, 0, 720, 721, 5, 115, 0, 0, 721, 722, 5, 117, 0, 0, 722, 723, 5, 112, 0, 0, 723, 724, 5, 101, 0, 0, 724, 725, 5, 114, 0, 0, 725, 114, 1, 0, 0, 0, 726, 727, 5, 115, 0, 0, 727, 728, 5, 119, 0, 0, 728, 729, 5, 105, 0, 0, 729, 730, 5, 116, 0, 0, 730, 731, 5, 99, 0, 0, 731, 732, 5, 104, 0, 0, 732, 116, 1, 0, 0, 0, 733, 734, 5, 115, 0, 0, 734, 735, 5, 121, 0, 0, 735, 736, 5, 110, 0, 0, 736, 737, 5, 99, 0, 0, 737, 738, 5, 104, 0, 0, 738, 739, 5, 114, 0, 0, 739, 740, 5, 111, 0, 0, 740, 741, 5, 110, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 122, 0, 0, 743, 744, 5, 101, 0, 0, 744, 745, 5, 100, 0, 0, 745, 118, 1, 0, 0, 0, 746, 747, 5, 116, 0, 0, 747, 748, 5, 104, 0, 0, 748, 749, 5, 105, 0, 0, 749, 750, 5, 115, 0, 0, 750, 120, 1, 0, 0, 0, 751, 752, 5, 116, 0, 0, 752, 753, 5, 104, 0, 0, 753, 754, 5, 114, 0, 0, 754, 755, 5, 111, 0, 0, 755, 756, 5, 119, 0, 0, 756, 122, 1, 0, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 104, 0, 0, 759, 760, 5, 114, 0, 0, 760, 761, 5, 111, 0, 0, 761, 762, 5, 119, 0, 0, 762, 763, 5, 115, 0, 0, 763, 124, 1, 0, 0, 0, 764, 765, 5, 116, 0, 0, 765, 766, 5, 114, 0, 0, 766, 767, 5, 97, 0, 0, 767, 768, 5, 110, 0, 0, 768, 769, 5, 115, 0, 0, 769, 770, 5, 105, 0, 0, 770, 771, 5, 101, 0, 0, 771, 772, 5, 110, 0, 0, 772, 773, 5, 116, 0, 0, 773, 126, 1, 0, 0, 0, 774, 775, 5, 116, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 121, 0, 0, 777, 128, 1, 0, 0, 0, 778, 779, 5, 118, 0, 0, 779, 780, 5, 111, 0, 0, 780, 781, 5, 105, 0, 0, 781, 782, 5, 100, 0, 0, 782, 130, 1, 0, 0, 0, 783, 784, 5, 118, 0, 0, 784, 785, 5, 111, 0, 0, 785, 786, 5, 108, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, 5, 105, 0, 0, 789, 790, 5, 108, 0, 0, 790, 791, 5, 101, 0, 0, 791, 132, 1, 0, 0, 0, 792, 793, 5, 119, 0, 0, 793, 794, 5, 104, 0, 0, 794, 795, 5, 105, 0, 0, 795, 796, 5, 108, 0, 0, 796, 797, 5, 101, 0, 0, 797, 134, 1, 0, 0, 0, 798, 799, 5, 95, 0, 0, 799, 136, 1, 0, 0, 0, 800, 805, 3, 139, 69, 0, 801, 805, 3, 141, 70, 0, 802, 805, 3, 143, 71, 0, 803, 805, 3, 145, 72, 0, 804, 800, 1, 0, 0, 0, 804, 801, 1, 0, 0, 0, 804, 802, 1, 0, 0, 0, 804, 803, 1, 0, 0, 0, 805, 138, 1, 0, 0, 0, 806, 808, 3, 149, 74, 0, 807, 809, 3, 147, 73, 0, 808, 807, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 140, 1, 0, 0, 0, 810, 812, 3, 163, 81, 0, 811, 813, 3, 147, 73, 0, 812, 811, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 142, 1, 0, 0, 0, 814, 816, 3, 173, 86, 0, 815, 817, 3, 147, 73, 0, 816, 815, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 144, 1, 0, 0, 0, 818, 820, 3, 183, 91, 0, 819, 821, 3, 147, 73, 0, 820, 819, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 146, 1, 0, 0, 0, 822, 823, 7, 0, 0, 0, 823, 148, 1, 0, 0, 0, 824, 835, 5, 48, 0, 0, 825, 832, 3, 155, 77, 0, 826, 828, 3, 151, 75, 0, 827, 826, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 833, 1, 0, 0, 0, 829, 830, 3, 161, 80, 0, 830, 831, 3, 151, 75, 0, 831, 833, 1, 0, 0, 0, 832, 827, 1, 0, 0, 0, 832, 829, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 824, 1, 0, 0, 0, 834, 825, 1, 0, 0, 0, 835, 150, 1, 0, 0, 0, 836, 841, 3, 153, 76, 0, 837, 839, 3, 157, 78, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 3, 153, 76, 0, 841, 838, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 152, 1, 0, 0, 0, 843, 846, 5, 48, 0, 0, 844, 846, 3, 155, 77, 0, 845, 843, 1, 0, 0, 0, 845, 844, 1, 0, 0, 0, 846, 154, 1, 0, 0, 0, 847, 848, 7, 1, 0, 0, 848, 156, 1, 0, 0, 0, 849, 851, 3, 159, 79, 0, 850, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 158, 1, 0, 0, 0, 854, 857, 3, 153, 76, 0, 855, 857, 5, 95, 0, 0, 856, 854, 1, 0, 0, 0, 856, 855, 1, 0, 0, 0, 857, 160, 1, 0, 0, 0, 858, 860, 5, 95, 0, 0, 859, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 859, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 162, 1, 0, 0, 0, 863, 864, 5, 48, 0, 0, 864, 865, 7, 2, 0, 0, 865, 866, 3, 165, 82, 0, 866, 164, 1, 0, 0, 0, 867, 872, 3, 167, 83, 0, 868, 870, 3, 169, 84, 0, 869, 868, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 873, 3, 167, 83, 0, 872, 869, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 166, 1, 0, 0, 0, 874, 875, 7, 3, 0, 0, 875, 168, 1, 0, 0, 0, 876, 878, 3, 171, 85, 0, 877, 876, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 170, 1, 0, 0, 0, 881, 884, 3, 167, 83, 0, 882, 884, 5, 95, 0, 0, 883, 881, 1, 0, 0, 0, 883, 882, 1, 0, 0, 0, 884, 172, 1, 0, 0, 0, 885, 887, 5, 48, 0, 0, 886, 888, 3, 161, 80, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 3, 175, 87, 0, 890, 174, 1, 0, 0, 0, 891, 896, 3, 177, 88, 0, 892, 894, 3, 179, 89, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 3, 177, 88, 0, 896, 893, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 176, 1, 0, 0, 0, 898, 899, 7, 4, 0, 0, 899, 178, 1, 0, 0, 0, 900, 902, 3, 181, 90, 0, 901, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 180, 1, 0, 0, 0, 905, 908, 3, 177, 88, 0, 906, 908, 5, 95, 0, 0, 907, 905, 1, 0, 0, 0, 907, 906, 1, 0, 0, 0, 908, 182, 1, 0, 0, 0, 909, 910, 5, 48, 0, 0, 910, 911, 7, 5, 0, 0, 911, 912, 3, 185, 92, 0, 912, 184, 1, 0, 0, 0, 913, 918, 3, 187, 93, 0, 914, 916, 3, 189, 94, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 919, 3, 187, 93, 0, 918, 915, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 7, 6, 0, 0, 921, 188, 1, 0, 0, 0, 922, 924, 3, 191, 95, 0, 923, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 190, 1, 0, 0, 0, 927, 930, 3, 187, 93, 0, 928, 930, 5, 95, 0, 0, 929, 927, 1, 0, 0, 0, 929, 928, 1, 0, 0, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 97, 0, 932, 934, 3, 207, 103, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 936, 3, 151, 75, 0, 936, 938, 5, 46, 0, 0, 937, 939, 3, 151, 75, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 941, 1, 0, 0, 0, 940, 942, 3, 197, 98, 0, 941, 940, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 944, 1, 0, 0, 0, 943, 945, 3, 205, 102, 0, 944, 943, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 963, 1, 0, 0, 0, 946, 947, 5, 46, 0, 0, 947, 949, 3, 151, 75, 0, 948, 950, 3, 197, 98, 0, 949, 948, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 952, 1, 0, 0, 0, 951, 953, 3, 205, 102, 0, 952, 951, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 963, 1, 0, 0, 0, 954, 955, 3, 151, 75, 0, 955, 957, 3, 197, 98, 0, 956, 958, 3, 205, 102, 0, 957, 956, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 963, 1, 0, 0, 0, 959, 960, 3, 151, 75, 0, 960, 961, 3, 205, 102, 0, 961, 963, 1, 0, 0, 0, 962, 935, 1, 0, 0, 0, 962, 946, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 959, 1, 0, 0, 0, 963, 196, 1, 0, 0, 0, 964, 965, 3, 199, 99, 0, 965, 966, 3, 201, 100, 0, 966, 198, 1, 0, 0, 0, 967, 968, 7, 7, 0, 0, 968, 200, 1, 0, 0, 0, 969, 971, 3, 203, 101, 0, 970, 969, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 973, 3, 151, 75, 0, 973, 202, 1, 0, 0, 0, 974, 975, 7, 8, 0, 0, 975, 204, 1, 0, 0, 0, 976, 977, 7, 9, 0, 0, 977, 206, 1, 0, 0, 0, 978, 979, 3, 209, 104, 0, 979, 981, 3, 211, 105, 0, 980, 982, 3, 205, 102, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 208, 1, 0, 0, 0, 983, 985, 3, 163, 81, 0, 984, 986, 5, 46, 0, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 995, 1, 0, 0, 0, 987, 988, 5, 48, 0, 0, 988, 990, 7, 2, 0, 0, 989, 991, 3, 165, 82, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 46, 0, 0, 993, 995, 3, 165, 82, 0, 994, 983, 1, 0, 0, 0, 994, 987, 1, 0, 0, 0, 995, 210, 1, 0, 0, 0, 996, 997, 3, 213, 106, 0, 997, 998, 3, 201, 100, 0, 998, 212, 1, 0, 0, 0, 999, 1000, 7, 10, 0, 0, 1000, 214, 1, 0, 0, 0, 1001, 1002, 5, 116, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 117, 0, 0, 1004, 1011, 5, 101, 0, 0, 1005, 1006, 5, 102, 0, 0, 1006, 1007, 5, 97, 0, 0, 1007, 1008, 5, 108, 0, 0, 1008, 1009, 5, 115, 0, 0, 1009, 1011, 5, 101, 0, 0, 1010, 1001, 1, 0, 0, 0, 1010, 1005, 1, 0, 0, 0, 1011, 216, 1, 0, 0, 0, 1012, 1013, 5, 39, 0, 0, 1013, 1014, 3, 219, 109, 0, 1014, 1015, 5, 39, 0, 0, 1015, 1021, 1, 0, 0, 0, 1016, 1017, 5, 39, 0, 0, 1017, 1018, 3, 229, 114, 0, 1018, 1019, 5, 39, 0, 0, 1019, 1021, 1, 0, 0, 0, 1020, 1012, 1, 0, 0, 0, 1020, 1016, 1, 0, 0, 0, 1021, 218, 1, 0, 0, 0, 1022, 1023, 8, 11, 0, 0, 1023, 220, 1, 0, 0, 0, 1024, 1026, 5, 34, 0, 0, 1025, 1027, 3, 223, 111, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1029, 5, 34, 0, 0, 1029, 222, 1, 0, 0, 0, 1030, 1032, 3, 225, 112, 0, 1031, 1030, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 224, 1, 0, 0, 0, 1035, 1038, 8, 12, 0, 0, 1036, 1038, 3, 229, 114, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 226, 1, 0, 0, 0, 1039, 1040, 5, 34, 0, 0, 1040, 1041, 5, 34, 0, 0, 1041, 1042, 5, 34, 0, 0, 1042, 1046, 1, 0, 0, 0, 1043, 1045, 7, 13, 0, 0, 1044, 1043, 1, 0, 0, 0, 1045, 1048, 1, 0, 0, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1049, 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1053, 7, 14, 0, 0, 1050, 1052, 7, 15, 0, 0, 1051, 1050, 1, 0, 0, 0, 1052, 1055, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1056, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1056, 1057, 5, 34, 0, 0, 1057, 1058, 5, 34, 0, 0, 1058, 1059, 5, 34, 0, 0, 1059, 228, 1, 0, 0, 0, 1060, 1061, 5, 92, 0, 0, 1061, 1065, 7, 16, 0, 0, 1062, 1065, 3, 231, 115, 0, 1063, 1065, 3, 235, 117, 0, 1064, 1060, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 230, 1, 0, 0, 0, 1066, 1067, 5, 92, 0, 0, 1067, 1078, 3, 177, 88, 0, 1068, 1069, 5, 92, 0, 0, 1069, 1070, 3, 177, 88, 0, 1070, 1071, 3, 177, 88, 0, 1071, 1078, 1, 0, 0, 0, 1072, 1073, 5, 92, 0, 0, 1073, 1074, 3, 233, 116, 0, 1074, 1075, 3, 177, 88, 0, 1075, 1076, 3, 177, 88, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1066, 1, 0, 0, 0, 1077, 1068, 1, 0, 0, 0, 1077, 1072, 1, 0, 0, 0, 1078, 232, 1, 0, 0, 0, 1079, 1080, 7, 17, 0, 0, 1080, 234, 1, 0, 0, 0, 1081, 1083, 5, 92, 0, 0, 1082, 1084, 5, 117, 0, 0, 1083, 1082, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1083, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 3, 167, 83, 0, 1088, 1089, 3, 167, 83, 0, 1089, 1090, 3, 167, 83, 0, 1090, 1091, 3, 167, 83, 0, 1091, 236, 1, 0, 0, 0, 1092, 1093, 5, 110, 0, 0, 1093, 1094, 5, 117, 0, 0, 1094, 1095, 5, 108, 0, 0, 1095, 1096, 5, 108, 0, 0, 1096, 238, 1, 0, 0, 0, 1097, 1098, 5, 40, 0, 0, 1098, 240, 1, 0, 0, 0, 1099, 1100, 5, 41, 0, 0, 1100, 242, 1, 0, 0, 0, 1101, 1102, 5, 123, 0, 0, 1102, 244, 1, 0, 0, 0, 1103, 1104, 5, 125, 0, 0, 1104, 246, 1, 0, 0, 0, 1105, 1106, 5, 91, 0, 0, 1106, 248, 1, 0, 0, 0, 1107, 1108, 5, 93, 0, 0, 1108, 250, 1, 0, 0, 0, 1109, 1110, 5, 59, 0, 0, 1110, 252, 1, 0, 0, 0, 1111, 1112, 5, 44, 0, 0, 1112, 254, 1, 0, 0, 0, 1113, 1114, 5, 46, 0, 0, 1114, 256, 1, 0, 0, 0, 1115, 1116, 5, 46, 0, 0, 1116, 1117, 5, 46, 0, 0, 1117, 1118, 5, 46, 0, 0, 1118, 258, 1, 0, 0, 0, 1119, 1120, 5, 64, 0, 0, 1120, 260, 1, 0, 0, 0, 1121, 1122, 5, 58, 0, 0, 1122, 1123, 5, 58, 0, 0, 1123, 262, 1, 0, 0, 0, 1124, 1125, 5, 61, 0, 0, 1125, 264, 1, 0, 0, 0, 1126, 1127, 5, 62, 0, 0, 1127, 266, 1, 0, 0, 0, 1128, 1129, 5, 60, 0, 0, 1129, 268, 1, 0, 0, 0, 1130, 1131, 5, 33, 0, 0, 1131, 270, 1, 0, 0, 0, 1132, 1133, 5, 126, 0, 0, 1133, 272, 1, 0, 0, 0, 1134, 1135, 5, 63, 0, 0, 1135, 274, 1, 0, 0, 0, 1136, 1137, 5, 58, 0, 0, 1137, 276, 1, 0, 0, 0, 1138, 1139, 5, 45, 0, 0, 1139, 1140, 5, 62, 0, 0, 1140, 278, 1, 0, 0, 0, 1141, 1142, 5, 61, 0, 0, 1142, 1143, 5, 61, 0, 0, 1143, 280, 1, 0, 0, 0, 1144, 1145, 5, 60, 0, 0, 1145, 1146, 5, 61, 0, 0, 1146, 282, 1, 0, 0, 0, 1147, 1148, 5, 62, 0, 0, 1148, 1149, 5, 61, 0, 0, 1149, 284, 1, 0, 0, 0, 1150, 1151, 5, 33, 0, 0, 1151, 1152, 5, 61, 0, 0, 1152, 286, 1, 0, 0, 0, 1153, 1154, 5, 38, 0, 0, 1154, 1155, 5, 38, 0, 0, 1155, 288, 1, 0, 0, 0, 1156, 1157, 5, 124, 0, 0, 1157, 1158, 5, 124, 0, 0, 1158, 290, 1, 0, 0, 0, 1159, 1160, 5, 43, 0, 0, 1160, 1161, 5, 43, 0, 0, 1161, 292, 1, 0, 0, 0, 1162, 1163, 5, 45, 0, 0, 1163, 1164, 5, 45, 0, 0, 1164, 294, 1, 0, 0, 0, 1165, 1166, 5, 43, 0, 0, 1166, 296, 1, 0, 0, 0, 1167, 1168, 5, 45, 0, 0, 1168, 298, 1, 0, 0, 0, 1169, 1170, 5, 42, 0, 0, 1170, 300, 1, 0, 0, 0, 1171, 1172, 5, 47, 0, 0, 1172, 302, 1, 0, 0, 0, 1173, 1174, 5, 38, 0, 0, 1174, 304, 1, 0, 0, 0, 1175, 1176, 5, 124, 0, 0, 1176, 306, 1, 0, 0, 0, 1177, 1178, 5, 94, 0, 0, 1178, 308, 1, 0, 0, 0, 1179, 1180, 5, 37, 0, 0, 1180, 310, 1, 0, 0, 0, 1181, 1182, 5, 43, 0, 0, 1182, 1183, 5, 61, 0, 0, 1183, 312, 1, 0, 0, 0, 1184, 1185, 5, 45, 0, 0, 1185, 1186, 5, 61, 0, 0, 1186, 314, 1, 0, 0, 0, 1187, 1188, 5, 42, 0, 0, 1188, 1189, 5, 61, 0, 0, 1189, 316, 1, 0, 0, 0, 1190, 1191, 5, 47, 0, 0, 1191, 1192, 5, 61, 0, 0, 1192, 318, 1, 0, 0, 0, 1193, 1194, 5, 38, 0, 0, 1194, 1195, 5, 61, 0, 0, 1195, 320, 1, 0, 0, 0, 1196, 1197, 5, 124, 0, 0, 1197, 1198, 5, 61, 0, 0, 1198, 322, 1, 0, 0, 0, 1199, 1200, 5, 94, 0, 0, 1200, 1201, 5, 61, 0, 0, 1201, 324, 1, 0, 0, 0, 1202, 1203, 5, 37, 0, 0, 1203, 1204, 5, 61, 0, 0, 1204, 326, 1, 0, 0, 0, 1205, 1206, 5, 60, 0, 0, 1206, 1207, 5, 60, 0, 0, 1207, 1208, 5, 61, 0, 0, 1208, 328, 1, 0, 0, 0, 1209, 1210, 5, 62, 0, 0, 1210, 1211, 5, 62, 0, 0, 1211, 1212, 5, 61, 0, 0, 1212, 330, 1, 0, 0, 0, 1213, 1214, 5, 62, 0, 0, 1214, 1215, 5, 62, 0, 0, 1215, 1216, 5, 62, 0, 0, 1216, 1217, 5, 61, 0, 0, 1217, 332, 1, 0, 0, 0, 1218, 1222, 3, 335, 167, 0, 1219, 1221, 3, 337, 168, 0, 1220, 1219, 1, 0, 0, 0, 1221, 1224, 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 334, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1225, 1227, 7, 18, 0, 0, 1226, 1225, 1, 0, 0, 0, 1227, 336, 1, 0, 0, 0, 1228, 1231, 3, 335, 167, 0, 1229, 1231, 7, 19, 0, 0, 1230, 1228, 1, 0, 0, 0, 1230, 1229, 1, 0, 0, 0, 1231, 338, 1, 0, 0, 0, 1232, 1234, 7, 20, 0, 0, 1233, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1233, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1238, 6, 169, 0, 0, 1238, 340, 1, 0, 0, 0, 1239, 1240, 5, 47, 0, 0, 1240, 1241, 5, 42, 0, 0, 1241, 1245, 1, 0, 0, 0, 1242, 1244, 9, 0, 0, 0, 1243, 1242, 1, 0, 0, 0, 1244, 1247, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1246, 1248, 1, 0, 0, 0, 1247, 1245, 1, 0, 0, 0, 1248, 1249, 5, 42, 0, 0, 1249, 1250, 5, 47, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1252, 6, 170, 1, 0, 1252, 342, 1, 0, 0, 0, 1253, 1254, 5, 47, 0, 0, 1254, 1255, 5, 47, 0, 0, 1255, 1259, 1, 0, 0, 0, 1256, 1258, 8, 14, 0, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1262, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1263, 6, 171, 1, 0, 1263, 344, 1, 0, 0, 0, 57, 0, 804, 808, 812, 816, 820, 827, 832, 834, 838, 841, 845, 852, 856, 861, 869, 872, 879, 883, 887, 893, 896, 903, 907, 915, 918, 925, 929, 933, 938, 941, 944, 949, 952, 957, 962, 970, 981, 985, 990, 994, 1010, 1020, 1026, 1033, 1037, 1046, 1053, 1064, 1077, 1085, 1222, 1226, 1230, 1235, 1245, 1259, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file diff --git a/csim/java/Java20Lexer.py b/csim/java/Java20Lexer.py new file mode 100644 index 0000000..cb86268 --- /dev/null +++ b/csim/java/Java20Lexer.py @@ -0,0 +1,813 @@ +# Generated from Java20Lexer.g4 by ANTLR 4.13.2 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,126,1264,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, + 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, + 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, + 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, + 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45, + 7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51, + 2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58, + 7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64, + 2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71, + 7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77, + 2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90, + 2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97, + 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136, + 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, + 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, + 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, + 2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158, + 7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163, + 2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, + 7,169,2,170,7,170,2,171,7,171,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, + 9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1, + 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, + 13,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1, + 16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 19,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1, + 22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1, + 24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1, + 26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1, + 30,1,30,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1, + 35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1, + 36,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1, + 40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1, + 41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1, + 44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1, + 51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1, + 53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1, + 55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1, + 57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1, + 60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1, + 62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1, + 64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1, + 66,1,66,1,66,1,66,1,67,1,67,1,68,1,68,1,68,1,68,3,68,805,8,68,1, + 69,1,69,3,69,809,8,69,1,70,1,70,3,70,813,8,70,1,71,1,71,3,71,817, + 8,71,1,72,1,72,3,72,821,8,72,1,73,1,73,1,74,1,74,1,74,3,74,828,8, + 74,1,74,1,74,1,74,3,74,833,8,74,3,74,835,8,74,1,75,1,75,3,75,839, + 8,75,1,75,3,75,842,8,75,1,76,1,76,3,76,846,8,76,1,77,1,77,1,78,4, + 78,851,8,78,11,78,12,78,852,1,79,1,79,3,79,857,8,79,1,80,4,80,860, + 8,80,11,80,12,80,861,1,81,1,81,1,81,1,81,1,82,1,82,3,82,870,8,82, + 1,82,3,82,873,8,82,1,83,1,83,1,84,4,84,878,8,84,11,84,12,84,879, + 1,85,1,85,3,85,884,8,85,1,86,1,86,3,86,888,8,86,1,86,1,86,1,87,1, + 87,3,87,894,8,87,1,87,3,87,897,8,87,1,88,1,88,1,89,4,89,902,8,89, + 11,89,12,89,903,1,90,1,90,3,90,908,8,90,1,91,1,91,1,91,1,91,1,92, + 1,92,3,92,916,8,92,1,92,3,92,919,8,92,1,93,1,93,1,94,4,94,924,8, + 94,11,94,12,94,925,1,95,1,95,3,95,930,8,95,1,96,1,96,3,96,934,8, + 96,1,97,1,97,1,97,3,97,939,8,97,1,97,3,97,942,8,97,1,97,3,97,945, + 8,97,1,97,1,97,1,97,3,97,950,8,97,1,97,3,97,953,8,97,1,97,1,97,1, + 97,3,97,958,8,97,1,97,1,97,1,97,3,97,963,8,97,1,98,1,98,1,98,1,99, + 1,99,1,100,3,100,971,8,100,1,100,1,100,1,101,1,101,1,102,1,102,1, + 103,1,103,1,103,3,103,982,8,103,1,104,1,104,3,104,986,8,104,1,104, + 1,104,1,104,3,104,991,8,104,1,104,1,104,3,104,995,8,104,1,105,1, + 105,1,105,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107, + 1,107,1,107,3,107,1011,8,107,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,108,3,108,1021,8,108,1,109,1,109,1,110,1,110,3,110,1027, + 8,110,1,110,1,110,1,111,4,111,1032,8,111,11,111,12,111,1033,1,112, + 1,112,3,112,1038,8,112,1,113,1,113,1,113,1,113,1,113,5,113,1045, + 8,113,10,113,12,113,1048,9,113,1,113,1,113,5,113,1052,8,113,10,113, + 12,113,1055,9,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 3,114,1065,8,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,3,115,1078,8,115,1,116,1,116,1,117,1,117,4,117, + 1084,8,117,11,117,12,117,1085,1,117,1,117,1,117,1,117,1,117,1,118, + 1,118,1,118,1,118,1,118,1,119,1,119,1,120,1,120,1,121,1,121,1,122, + 1,122,1,123,1,123,1,124,1,124,1,125,1,125,1,126,1,126,1,127,1,127, + 1,128,1,128,1,128,1,128,1,129,1,129,1,130,1,130,1,130,1,131,1,131, + 1,132,1,132,1,133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137, + 1,137,1,138,1,138,1,138,1,139,1,139,1,139,1,140,1,140,1,140,1,141, + 1,141,1,141,1,142,1,142,1,142,1,143,1,143,1,143,1,144,1,144,1,144, + 1,145,1,145,1,145,1,146,1,146,1,146,1,147,1,147,1,148,1,148,1,149, + 1,149,1,150,1,150,1,151,1,151,1,152,1,152,1,153,1,153,1,154,1,154, + 1,155,1,155,1,155,1,156,1,156,1,156,1,157,1,157,1,157,1,158,1,158, + 1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,161,1,161,1,161,1,162, + 1,162,1,162,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,165, + 1,165,1,165,1,165,1,165,1,166,1,166,5,166,1221,8,166,10,166,12,166, + 1224,9,166,1,167,3,167,1227,8,167,1,168,1,168,3,168,1231,8,168,1, + 169,4,169,1234,8,169,11,169,12,169,1235,1,169,1,169,1,170,1,170, + 1,170,1,170,5,170,1244,8,170,10,170,12,170,1247,9,170,1,170,1,170, + 1,170,1,170,1,170,1,171,1,171,1,171,1,171,5,171,1258,8,171,10,171, + 12,171,1261,9,171,1,171,1,171,1,1245,0,172,1,1,3,2,5,3,7,4,9,5,11, + 6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17, + 35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28, + 57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39, + 79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50, + 101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119, + 60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69, + 139,0,141,0,143,0,145,0,147,0,149,0,151,0,153,0,155,0,157,0,159, + 0,161,0,163,0,165,0,167,0,169,0,171,0,173,0,175,0,177,0,179,0,181, + 0,183,0,185,0,187,0,189,0,191,0,193,70,195,0,197,0,199,0,201,0,203, + 0,205,0,207,0,209,0,211,0,213,0,215,71,217,72,219,0,221,73,223,0, + 225,0,227,74,229,0,231,0,233,0,235,0,237,75,239,76,241,77,243,78, + 245,79,247,80,249,81,251,82,253,83,255,84,257,85,259,86,261,87,263, + 88,265,89,267,90,269,91,271,92,273,93,275,94,277,95,279,96,281,97, + 283,98,285,99,287,100,289,101,291,102,293,103,295,104,297,105,299, + 106,301,107,303,108,305,109,307,110,309,111,311,112,313,113,315, + 114,317,115,319,116,321,117,323,118,325,119,327,120,329,121,331, + 122,333,123,335,0,337,0,339,124,341,125,343,126,1,0,21,2,0,76,76, + 108,108,1,0,49,57,2,0,88,88,120,120,3,0,48,57,65,70,97,102,1,0,48, + 55,2,0,66,66,98,98,1,0,48,49,2,0,69,69,101,101,2,0,43,43,45,45,4, + 0,68,68,70,70,100,100,102,102,2,0,80,80,112,112,4,0,10,10,13,13, + 39,39,92,92,4,0,10,10,13,13,34,34,92,92,2,0,9,9,32,32,2,0,10,10, + 13,13,3,0,8,8,13,13,46,46,8,0,34,34,39,39,92,92,98,98,102,102,110, + 110,114,114,116,116,1,0,48,51,402,0,36,36,65,90,95,95,97,122,162, + 165,170,170,181,181,186,186,192,214,216,246,248,705,710,721,736, + 740,748,748,750,750,880,884,886,887,890,893,895,895,902,902,904, + 906,908,908,910,929,931,1013,1015,1153,1162,1327,1329,1366,1369, + 1369,1377,1415,1423,1423,1488,1514,1520,1522,1547,1547,1568,1610, + 1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791, + 1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037, + 2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2144, + 2154,2208,2228,2230,2237,2308,2361,2365,2365,2384,2384,2392,2401, + 2417,2432,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486, + 2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2547,2555,2556, + 2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616, + 2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728, + 2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2801, + 2801,2809,2809,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867, + 2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949, + 2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980, + 2984,2986,2990,3001,3024,3024,3065,3065,3077,3084,3086,3088,3090, + 3112,3114,3129,3133,3133,3160,3162,3168,3169,3200,3200,3205,3212, + 3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296, + 3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406, + 3412,3414,3423,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517, + 3517,3520,3526,3585,3632,3634,3635,3647,3654,3713,3714,3716,3716, + 3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749, + 3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780, + 3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096, + 4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208, + 4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348, + 4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749, + 4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824, + 4880,4882,4885,4888,4954,4992,5007,5024,5109,5112,5117,5121,5740, + 5743,5759,5761,5786,5792,5866,5870,5880,5888,5900,5902,5905,5920, + 5937,5952,5969,5984,5996,5998,6000,6016,6067,6103,6103,6107,6108, + 6176,6263,6272,6276,6279,6312,6314,6314,6320,6389,6400,6430,6480, + 6509,6512,6516,6528,6571,6576,6601,6656,6678,6688,6740,6823,6823, + 6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245, + 7247,7258,7293,7296,7304,7401,7404,7406,7409,7413,7414,7424,7615, + 7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027, + 8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132, + 8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255, + 8256,8276,8276,8305,8305,8319,8319,8336,8348,8352,8383,8450,8450, + 8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488, + 8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584, + 11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520, + 11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670, + 11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720, + 11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329, + 12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540, + 12543,12549,12590,12593,12686,12704,12730,12784,12799,13312,19893, + 19968,40938,40960,42124,42192,42237,42240,42508,42512,42527,42538, + 42539,42560,42606,42623,42653,42656,42735,42775,42783,42786,42888, + 42891,42926,42928,42935,42999,43009,43011,43013,43015,43018,43020, + 43042,43064,43064,43072,43123,43138,43187,43250,43255,43259,43259, + 43261,43261,43274,43301,43312,43334,43360,43388,43396,43442,43471, + 43471,43488,43492,43494,43503,43514,43518,43520,43560,43584,43586, + 43588,43595,43616,43638,43642,43642,43646,43695,43697,43697,43701, + 43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754, + 43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816, + 43822,43824,43866,43868,43877,43888,44002,44032,55203,55216,55238, + 55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285, + 64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321, + 64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008, + 65020,65075,65076,65101,65103,65129,65129,65136,65140,65142,65276, + 65284,65284,65313,65338,65343,65343,65345,65370,65382,65470,65474, + 65479,65482,65487,65490,65495,65498,65500,65504,65505,65509,65510, + 228,0,48,57,127,159,173,173,768,879,1155,1159,1425,1469,1471,1471, + 1473,1474,1476,1477,1479,1479,1536,1541,1552,1562,1564,1564,1611, + 1641,1648,1648,1750,1757,1759,1764,1767,1768,1770,1773,1776,1785, + 1807,1807,1809,1809,1840,1866,1958,1968,1984,1993,2027,2035,2070, + 2073,2075,2083,2085,2087,2089,2093,2137,2139,2260,2307,2362,2364, + 2366,2383,2385,2391,2402,2403,2406,2415,2433,2435,2492,2492,2494, + 2500,2503,2504,2507,2509,2519,2519,2530,2531,2534,2543,2561,2563, + 2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2662,2673,2677, + 2677,2689,2691,2748,2748,2750,2757,2759,2761,2763,2765,2786,2787, + 2790,2799,2810,2815,2817,2819,2876,2876,2878,2884,2887,2888,2891, + 2893,2902,2903,2914,2915,2918,2927,2946,2946,3006,3010,3014,3016, + 3018,3021,3031,3031,3046,3055,3072,3075,3134,3140,3142,3144,3146, + 3149,3157,3158,3170,3171,3174,3183,3201,3203,3260,3260,3262,3268, + 3270,3272,3274,3277,3285,3286,3298,3299,3302,3311,3328,3331,3387, + 3388,3390,3396,3398,3400,3402,3405,3415,3415,3426,3427,3430,3439, + 3458,3459,3530,3530,3535,3540,3542,3542,3544,3551,3558,3567,3570, + 3571,3633,3633,3636,3642,3655,3662,3664,3673,3761,3761,3764,3769, + 3771,3772,3784,3789,3792,3801,3864,3865,3872,3881,3893,3893,3895, + 3895,3897,3897,3902,3903,3953,3972,3974,3975,3981,3991,3993,4028, + 4038,4038,4139,4158,4160,4169,4182,4185,4190,4192,4194,4196,4199, + 4205,4209,4212,4226,4237,4239,4253,4957,4959,5906,5908,5938,5940, + 5970,5971,6002,6003,6068,6099,6109,6109,6112,6121,6155,6158,6160, + 6169,6277,6278,6313,6313,6432,6443,6448,6459,6470,6479,6608,6617, + 6679,6683,6741,6750,6752,6780,6783,6793,6800,6809,6832,6845,6912, + 6916,6964,6980,6992,7001,7019,7027,7040,7042,7073,7085,7088,7097, + 7142,7155,7204,7223,7232,7241,7248,7257,7376,7378,7380,7400,7405, + 7405,7410,7412,7415,7417,7616,7673,7675,7679,8203,8207,8234,8238, + 8288,8292,8294,8303,8400,8412,8417,8417,8421,8432,11503,11505,11647, + 11647,11744,11775,12330,12335,12441,12442,42528,42537,42607,42607, + 42612,42621,42654,42655,42736,42737,43010,43010,43014,43014,43019, + 43019,43043,43047,43136,43137,43188,43205,43216,43225,43232,43249, + 43264,43273,43302,43309,43335,43347,43392,43395,43443,43456,43472, + 43481,43493,43493,43504,43513,43561,43574,43587,43587,43596,43597, + 43600,43609,43643,43645,43696,43696,43698,43700,43703,43704,43710, + 43711,43713,43713,43755,43759,43765,43766,44003,44010,44012,44013, + 44016,44025,64286,64286,65024,65039,65056,65071,65279,65279,65296, + 65305,65529,65531,3,0,9,10,12,13,32,32,1278,0,1,1,0,0,0,0,3,1,0, + 0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0, + 0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0, + 0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0, + 0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0, + 0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0, + 0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0, + 0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0, + 0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0, + 0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0, + 0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0, + 0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113, + 1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0, + 0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1, + 0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,193,1,0,0,0,0, + 215,1,0,0,0,0,217,1,0,0,0,0,221,1,0,0,0,0,227,1,0,0,0,0,237,1,0, + 0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247, + 1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0, + 0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1, + 0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0, + 275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0, + 0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293, + 1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0, + 0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1, + 0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0, + 321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0, + 0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343, + 1,0,0,0,1,345,1,0,0,0,3,353,1,0,0,0,5,360,1,0,0,0,7,371,1,0,0,0, + 9,374,1,0,0,0,11,379,1,0,0,0,13,385,1,0,0,0,15,393,1,0,0,0,17,402, + 1,0,0,0,19,409,1,0,0,0,21,418,1,0,0,0,23,425,1,0,0,0,25,428,1,0, + 0,0,27,439,1,0,0,0,29,444,1,0,0,0,31,448,1,0,0,0,33,453,1,0,0,0, + 35,459,1,0,0,0,37,468,1,0,0,0,39,475,1,0,0,0,41,483,1,0,0,0,43,489, + 1,0,0,0,45,494,1,0,0,0,47,499,1,0,0,0,49,505,1,0,0,0,51,510,1,0, + 0,0,53,516,1,0,0,0,55,522,1,0,0,0,57,531,1,0,0,0,59,539,1,0,0,0, + 61,542,1,0,0,0,63,549,1,0,0,0,65,554,1,0,0,0,67,559,1,0,0,0,69,567, + 1,0,0,0,71,573,1,0,0,0,73,581,1,0,0,0,75,587,1,0,0,0,77,591,1,0, + 0,0,79,594,1,0,0,0,81,599,1,0,0,0,83,610,1,0,0,0,85,617,1,0,0,0, + 87,628,1,0,0,0,89,632,1,0,0,0,91,642,1,0,0,0,93,647,1,0,0,0,95,654, + 1,0,0,0,97,658,1,0,0,0,99,666,1,0,0,0,101,674,1,0,0,0,103,684,1, + 0,0,0,105,691,1,0,0,0,107,698,1,0,0,0,109,704,1,0,0,0,111,711,1, + 0,0,0,113,720,1,0,0,0,115,726,1,0,0,0,117,733,1,0,0,0,119,746,1, + 0,0,0,121,751,1,0,0,0,123,757,1,0,0,0,125,764,1,0,0,0,127,774,1, + 0,0,0,129,778,1,0,0,0,131,783,1,0,0,0,133,792,1,0,0,0,135,798,1, + 0,0,0,137,804,1,0,0,0,139,806,1,0,0,0,141,810,1,0,0,0,143,814,1, + 0,0,0,145,818,1,0,0,0,147,822,1,0,0,0,149,834,1,0,0,0,151,836,1, + 0,0,0,153,845,1,0,0,0,155,847,1,0,0,0,157,850,1,0,0,0,159,856,1, + 0,0,0,161,859,1,0,0,0,163,863,1,0,0,0,165,867,1,0,0,0,167,874,1, + 0,0,0,169,877,1,0,0,0,171,883,1,0,0,0,173,885,1,0,0,0,175,891,1, + 0,0,0,177,898,1,0,0,0,179,901,1,0,0,0,181,907,1,0,0,0,183,909,1, + 0,0,0,185,913,1,0,0,0,187,920,1,0,0,0,189,923,1,0,0,0,191,929,1, + 0,0,0,193,933,1,0,0,0,195,962,1,0,0,0,197,964,1,0,0,0,199,967,1, + 0,0,0,201,970,1,0,0,0,203,974,1,0,0,0,205,976,1,0,0,0,207,978,1, + 0,0,0,209,994,1,0,0,0,211,996,1,0,0,0,213,999,1,0,0,0,215,1010,1, + 0,0,0,217,1020,1,0,0,0,219,1022,1,0,0,0,221,1024,1,0,0,0,223,1031, + 1,0,0,0,225,1037,1,0,0,0,227,1039,1,0,0,0,229,1064,1,0,0,0,231,1077, + 1,0,0,0,233,1079,1,0,0,0,235,1081,1,0,0,0,237,1092,1,0,0,0,239,1097, + 1,0,0,0,241,1099,1,0,0,0,243,1101,1,0,0,0,245,1103,1,0,0,0,247,1105, + 1,0,0,0,249,1107,1,0,0,0,251,1109,1,0,0,0,253,1111,1,0,0,0,255,1113, + 1,0,0,0,257,1115,1,0,0,0,259,1119,1,0,0,0,261,1121,1,0,0,0,263,1124, + 1,0,0,0,265,1126,1,0,0,0,267,1128,1,0,0,0,269,1130,1,0,0,0,271,1132, + 1,0,0,0,273,1134,1,0,0,0,275,1136,1,0,0,0,277,1138,1,0,0,0,279,1141, + 1,0,0,0,281,1144,1,0,0,0,283,1147,1,0,0,0,285,1150,1,0,0,0,287,1153, + 1,0,0,0,289,1156,1,0,0,0,291,1159,1,0,0,0,293,1162,1,0,0,0,295,1165, + 1,0,0,0,297,1167,1,0,0,0,299,1169,1,0,0,0,301,1171,1,0,0,0,303,1173, + 1,0,0,0,305,1175,1,0,0,0,307,1177,1,0,0,0,309,1179,1,0,0,0,311,1181, + 1,0,0,0,313,1184,1,0,0,0,315,1187,1,0,0,0,317,1190,1,0,0,0,319,1193, + 1,0,0,0,321,1196,1,0,0,0,323,1199,1,0,0,0,325,1202,1,0,0,0,327,1205, + 1,0,0,0,329,1209,1,0,0,0,331,1213,1,0,0,0,333,1218,1,0,0,0,335,1226, + 1,0,0,0,337,1230,1,0,0,0,339,1233,1,0,0,0,341,1239,1,0,0,0,343,1253, + 1,0,0,0,345,346,5,101,0,0,346,347,5,120,0,0,347,348,5,112,0,0,348, + 349,5,111,0,0,349,350,5,114,0,0,350,351,5,116,0,0,351,352,5,115, + 0,0,352,2,1,0,0,0,353,354,5,109,0,0,354,355,5,111,0,0,355,356,5, + 100,0,0,356,357,5,117,0,0,357,358,5,108,0,0,358,359,5,101,0,0,359, + 4,1,0,0,0,360,361,5,110,0,0,361,362,5,111,0,0,362,363,5,110,0,0, + 363,364,5,45,0,0,364,365,5,115,0,0,365,366,5,101,0,0,366,367,5,97, + 0,0,367,368,5,108,0,0,368,369,5,101,0,0,369,370,5,100,0,0,370,6, + 1,0,0,0,371,372,5,60,0,0,372,373,5,62,0,0,373,8,1,0,0,0,374,375, + 5,111,0,0,375,376,5,112,0,0,376,377,5,101,0,0,377,378,5,110,0,0, + 378,10,1,0,0,0,379,380,5,111,0,0,380,381,5,112,0,0,381,382,5,101, + 0,0,382,383,5,110,0,0,383,384,5,115,0,0,384,12,1,0,0,0,385,386,5, + 112,0,0,386,387,5,101,0,0,387,388,5,114,0,0,388,389,5,109,0,0,389, + 390,5,105,0,0,390,391,5,116,0,0,391,392,5,115,0,0,392,14,1,0,0,0, + 393,394,5,112,0,0,394,395,5,114,0,0,395,396,5,111,0,0,396,397,5, + 118,0,0,397,398,5,105,0,0,398,399,5,100,0,0,399,400,5,101,0,0,400, + 401,5,115,0,0,401,16,1,0,0,0,402,403,5,114,0,0,403,404,5,101,0,0, + 404,405,5,99,0,0,405,406,5,111,0,0,406,407,5,114,0,0,407,408,5,100, + 0,0,408,18,1,0,0,0,409,410,5,114,0,0,410,411,5,101,0,0,411,412,5, + 113,0,0,412,413,5,117,0,0,413,414,5,105,0,0,414,415,5,114,0,0,415, + 416,5,101,0,0,416,417,5,115,0,0,417,20,1,0,0,0,418,419,5,115,0,0, + 419,420,5,101,0,0,420,421,5,97,0,0,421,422,5,108,0,0,422,423,5,101, + 0,0,423,424,5,100,0,0,424,22,1,0,0,0,425,426,5,116,0,0,426,427,5, + 111,0,0,427,24,1,0,0,0,428,429,5,116,0,0,429,430,5,114,0,0,430,431, + 5,97,0,0,431,432,5,110,0,0,432,433,5,115,0,0,433,434,5,105,0,0,434, + 435,5,116,0,0,435,436,5,105,0,0,436,437,5,118,0,0,437,438,5,101, + 0,0,438,26,1,0,0,0,439,440,5,117,0,0,440,441,5,115,0,0,441,442,5, + 101,0,0,442,443,5,115,0,0,443,28,1,0,0,0,444,445,5,118,0,0,445,446, + 5,97,0,0,446,447,5,114,0,0,447,30,1,0,0,0,448,449,5,119,0,0,449, + 450,5,105,0,0,450,451,5,116,0,0,451,452,5,104,0,0,452,32,1,0,0,0, + 453,454,5,121,0,0,454,455,5,105,0,0,455,456,5,101,0,0,456,457,5, + 108,0,0,457,458,5,100,0,0,458,34,1,0,0,0,459,460,5,97,0,0,460,461, + 5,98,0,0,461,462,5,115,0,0,462,463,5,116,0,0,463,464,5,114,0,0,464, + 465,5,97,0,0,465,466,5,99,0,0,466,467,5,116,0,0,467,36,1,0,0,0,468, + 469,5,97,0,0,469,470,5,115,0,0,470,471,5,115,0,0,471,472,5,101,0, + 0,472,473,5,114,0,0,473,474,5,116,0,0,474,38,1,0,0,0,475,476,5,98, + 0,0,476,477,5,111,0,0,477,478,5,111,0,0,478,479,5,108,0,0,479,480, + 5,101,0,0,480,481,5,97,0,0,481,482,5,110,0,0,482,40,1,0,0,0,483, + 484,5,98,0,0,484,485,5,114,0,0,485,486,5,101,0,0,486,487,5,97,0, + 0,487,488,5,107,0,0,488,42,1,0,0,0,489,490,5,98,0,0,490,491,5,121, + 0,0,491,492,5,116,0,0,492,493,5,101,0,0,493,44,1,0,0,0,494,495,5, + 99,0,0,495,496,5,97,0,0,496,497,5,115,0,0,497,498,5,101,0,0,498, + 46,1,0,0,0,499,500,5,99,0,0,500,501,5,97,0,0,501,502,5,116,0,0,502, + 503,5,99,0,0,503,504,5,104,0,0,504,48,1,0,0,0,505,506,5,99,0,0,506, + 507,5,104,0,0,507,508,5,97,0,0,508,509,5,114,0,0,509,50,1,0,0,0, + 510,511,5,99,0,0,511,512,5,108,0,0,512,513,5,97,0,0,513,514,5,115, + 0,0,514,515,5,115,0,0,515,52,1,0,0,0,516,517,5,99,0,0,517,518,5, + 111,0,0,518,519,5,110,0,0,519,520,5,115,0,0,520,521,5,116,0,0,521, + 54,1,0,0,0,522,523,5,99,0,0,523,524,5,111,0,0,524,525,5,110,0,0, + 525,526,5,116,0,0,526,527,5,105,0,0,527,528,5,110,0,0,528,529,5, + 117,0,0,529,530,5,101,0,0,530,56,1,0,0,0,531,532,5,100,0,0,532,533, + 5,101,0,0,533,534,5,102,0,0,534,535,5,97,0,0,535,536,5,117,0,0,536, + 537,5,108,0,0,537,538,5,116,0,0,538,58,1,0,0,0,539,540,5,100,0,0, + 540,541,5,111,0,0,541,60,1,0,0,0,542,543,5,100,0,0,543,544,5,111, + 0,0,544,545,5,117,0,0,545,546,5,98,0,0,546,547,5,108,0,0,547,548, + 5,101,0,0,548,62,1,0,0,0,549,550,5,101,0,0,550,551,5,108,0,0,551, + 552,5,115,0,0,552,553,5,101,0,0,553,64,1,0,0,0,554,555,5,101,0,0, + 555,556,5,110,0,0,556,557,5,117,0,0,557,558,5,109,0,0,558,66,1,0, + 0,0,559,560,5,101,0,0,560,561,5,120,0,0,561,562,5,116,0,0,562,563, + 5,101,0,0,563,564,5,110,0,0,564,565,5,100,0,0,565,566,5,115,0,0, + 566,68,1,0,0,0,567,568,5,102,0,0,568,569,5,105,0,0,569,570,5,110, + 0,0,570,571,5,97,0,0,571,572,5,108,0,0,572,70,1,0,0,0,573,574,5, + 102,0,0,574,575,5,105,0,0,575,576,5,110,0,0,576,577,5,97,0,0,577, + 578,5,108,0,0,578,579,5,108,0,0,579,580,5,121,0,0,580,72,1,0,0,0, + 581,582,5,102,0,0,582,583,5,108,0,0,583,584,5,111,0,0,584,585,5, + 97,0,0,585,586,5,116,0,0,586,74,1,0,0,0,587,588,5,102,0,0,588,589, + 5,111,0,0,589,590,5,114,0,0,590,76,1,0,0,0,591,592,5,105,0,0,592, + 593,5,102,0,0,593,78,1,0,0,0,594,595,5,103,0,0,595,596,5,111,0,0, + 596,597,5,116,0,0,597,598,5,111,0,0,598,80,1,0,0,0,599,600,5,105, + 0,0,600,601,5,109,0,0,601,602,5,112,0,0,602,603,5,108,0,0,603,604, + 5,101,0,0,604,605,5,109,0,0,605,606,5,101,0,0,606,607,5,110,0,0, + 607,608,5,116,0,0,608,609,5,115,0,0,609,82,1,0,0,0,610,611,5,105, + 0,0,611,612,5,109,0,0,612,613,5,112,0,0,613,614,5,111,0,0,614,615, + 5,114,0,0,615,616,5,116,0,0,616,84,1,0,0,0,617,618,5,105,0,0,618, + 619,5,110,0,0,619,620,5,115,0,0,620,621,5,116,0,0,621,622,5,97,0, + 0,622,623,5,110,0,0,623,624,5,99,0,0,624,625,5,101,0,0,625,626,5, + 111,0,0,626,627,5,102,0,0,627,86,1,0,0,0,628,629,5,105,0,0,629,630, + 5,110,0,0,630,631,5,116,0,0,631,88,1,0,0,0,632,633,5,105,0,0,633, + 634,5,110,0,0,634,635,5,116,0,0,635,636,5,101,0,0,636,637,5,114, + 0,0,637,638,5,102,0,0,638,639,5,97,0,0,639,640,5,99,0,0,640,641, + 5,101,0,0,641,90,1,0,0,0,642,643,5,108,0,0,643,644,5,111,0,0,644, + 645,5,110,0,0,645,646,5,103,0,0,646,92,1,0,0,0,647,648,5,110,0,0, + 648,649,5,97,0,0,649,650,5,116,0,0,650,651,5,105,0,0,651,652,5,118, + 0,0,652,653,5,101,0,0,653,94,1,0,0,0,654,655,5,110,0,0,655,656,5, + 101,0,0,656,657,5,119,0,0,657,96,1,0,0,0,658,659,5,112,0,0,659,660, + 5,97,0,0,660,661,5,99,0,0,661,662,5,107,0,0,662,663,5,97,0,0,663, + 664,5,103,0,0,664,665,5,101,0,0,665,98,1,0,0,0,666,667,5,112,0,0, + 667,668,5,114,0,0,668,669,5,105,0,0,669,670,5,118,0,0,670,671,5, + 97,0,0,671,672,5,116,0,0,672,673,5,101,0,0,673,100,1,0,0,0,674,675, + 5,112,0,0,675,676,5,114,0,0,676,677,5,111,0,0,677,678,5,116,0,0, + 678,679,5,101,0,0,679,680,5,99,0,0,680,681,5,116,0,0,681,682,5,101, + 0,0,682,683,5,100,0,0,683,102,1,0,0,0,684,685,5,112,0,0,685,686, + 5,117,0,0,686,687,5,98,0,0,687,688,5,108,0,0,688,689,5,105,0,0,689, + 690,5,99,0,0,690,104,1,0,0,0,691,692,5,114,0,0,692,693,5,101,0,0, + 693,694,5,116,0,0,694,695,5,117,0,0,695,696,5,114,0,0,696,697,5, + 110,0,0,697,106,1,0,0,0,698,699,5,115,0,0,699,700,5,104,0,0,700, + 701,5,111,0,0,701,702,5,114,0,0,702,703,5,116,0,0,703,108,1,0,0, + 0,704,705,5,115,0,0,705,706,5,116,0,0,706,707,5,97,0,0,707,708,5, + 116,0,0,708,709,5,105,0,0,709,710,5,99,0,0,710,110,1,0,0,0,711,712, + 5,115,0,0,712,713,5,116,0,0,713,714,5,114,0,0,714,715,5,105,0,0, + 715,716,5,99,0,0,716,717,5,116,0,0,717,718,5,102,0,0,718,719,5,112, + 0,0,719,112,1,0,0,0,720,721,5,115,0,0,721,722,5,117,0,0,722,723, + 5,112,0,0,723,724,5,101,0,0,724,725,5,114,0,0,725,114,1,0,0,0,726, + 727,5,115,0,0,727,728,5,119,0,0,728,729,5,105,0,0,729,730,5,116, + 0,0,730,731,5,99,0,0,731,732,5,104,0,0,732,116,1,0,0,0,733,734,5, + 115,0,0,734,735,5,121,0,0,735,736,5,110,0,0,736,737,5,99,0,0,737, + 738,5,104,0,0,738,739,5,114,0,0,739,740,5,111,0,0,740,741,5,110, + 0,0,741,742,5,105,0,0,742,743,5,122,0,0,743,744,5,101,0,0,744,745, + 5,100,0,0,745,118,1,0,0,0,746,747,5,116,0,0,747,748,5,104,0,0,748, + 749,5,105,0,0,749,750,5,115,0,0,750,120,1,0,0,0,751,752,5,116,0, + 0,752,753,5,104,0,0,753,754,5,114,0,0,754,755,5,111,0,0,755,756, + 5,119,0,0,756,122,1,0,0,0,757,758,5,116,0,0,758,759,5,104,0,0,759, + 760,5,114,0,0,760,761,5,111,0,0,761,762,5,119,0,0,762,763,5,115, + 0,0,763,124,1,0,0,0,764,765,5,116,0,0,765,766,5,114,0,0,766,767, + 5,97,0,0,767,768,5,110,0,0,768,769,5,115,0,0,769,770,5,105,0,0,770, + 771,5,101,0,0,771,772,5,110,0,0,772,773,5,116,0,0,773,126,1,0,0, + 0,774,775,5,116,0,0,775,776,5,114,0,0,776,777,5,121,0,0,777,128, + 1,0,0,0,778,779,5,118,0,0,779,780,5,111,0,0,780,781,5,105,0,0,781, + 782,5,100,0,0,782,130,1,0,0,0,783,784,5,118,0,0,784,785,5,111,0, + 0,785,786,5,108,0,0,786,787,5,97,0,0,787,788,5,116,0,0,788,789,5, + 105,0,0,789,790,5,108,0,0,790,791,5,101,0,0,791,132,1,0,0,0,792, + 793,5,119,0,0,793,794,5,104,0,0,794,795,5,105,0,0,795,796,5,108, + 0,0,796,797,5,101,0,0,797,134,1,0,0,0,798,799,5,95,0,0,799,136,1, + 0,0,0,800,805,3,139,69,0,801,805,3,141,70,0,802,805,3,143,71,0,803, + 805,3,145,72,0,804,800,1,0,0,0,804,801,1,0,0,0,804,802,1,0,0,0,804, + 803,1,0,0,0,805,138,1,0,0,0,806,808,3,149,74,0,807,809,3,147,73, + 0,808,807,1,0,0,0,808,809,1,0,0,0,809,140,1,0,0,0,810,812,3,163, + 81,0,811,813,3,147,73,0,812,811,1,0,0,0,812,813,1,0,0,0,813,142, + 1,0,0,0,814,816,3,173,86,0,815,817,3,147,73,0,816,815,1,0,0,0,816, + 817,1,0,0,0,817,144,1,0,0,0,818,820,3,183,91,0,819,821,3,147,73, + 0,820,819,1,0,0,0,820,821,1,0,0,0,821,146,1,0,0,0,822,823,7,0,0, + 0,823,148,1,0,0,0,824,835,5,48,0,0,825,832,3,155,77,0,826,828,3, + 151,75,0,827,826,1,0,0,0,827,828,1,0,0,0,828,833,1,0,0,0,829,830, + 3,161,80,0,830,831,3,151,75,0,831,833,1,0,0,0,832,827,1,0,0,0,832, + 829,1,0,0,0,833,835,1,0,0,0,834,824,1,0,0,0,834,825,1,0,0,0,835, + 150,1,0,0,0,836,841,3,153,76,0,837,839,3,157,78,0,838,837,1,0,0, + 0,838,839,1,0,0,0,839,840,1,0,0,0,840,842,3,153,76,0,841,838,1,0, + 0,0,841,842,1,0,0,0,842,152,1,0,0,0,843,846,5,48,0,0,844,846,3,155, + 77,0,845,843,1,0,0,0,845,844,1,0,0,0,846,154,1,0,0,0,847,848,7,1, + 0,0,848,156,1,0,0,0,849,851,3,159,79,0,850,849,1,0,0,0,851,852,1, + 0,0,0,852,850,1,0,0,0,852,853,1,0,0,0,853,158,1,0,0,0,854,857,3, + 153,76,0,855,857,5,95,0,0,856,854,1,0,0,0,856,855,1,0,0,0,857,160, + 1,0,0,0,858,860,5,95,0,0,859,858,1,0,0,0,860,861,1,0,0,0,861,859, + 1,0,0,0,861,862,1,0,0,0,862,162,1,0,0,0,863,864,5,48,0,0,864,865, + 7,2,0,0,865,866,3,165,82,0,866,164,1,0,0,0,867,872,3,167,83,0,868, + 870,3,169,84,0,869,868,1,0,0,0,869,870,1,0,0,0,870,871,1,0,0,0,871, + 873,3,167,83,0,872,869,1,0,0,0,872,873,1,0,0,0,873,166,1,0,0,0,874, + 875,7,3,0,0,875,168,1,0,0,0,876,878,3,171,85,0,877,876,1,0,0,0,878, + 879,1,0,0,0,879,877,1,0,0,0,879,880,1,0,0,0,880,170,1,0,0,0,881, + 884,3,167,83,0,882,884,5,95,0,0,883,881,1,0,0,0,883,882,1,0,0,0, + 884,172,1,0,0,0,885,887,5,48,0,0,886,888,3,161,80,0,887,886,1,0, + 0,0,887,888,1,0,0,0,888,889,1,0,0,0,889,890,3,175,87,0,890,174,1, + 0,0,0,891,896,3,177,88,0,892,894,3,179,89,0,893,892,1,0,0,0,893, + 894,1,0,0,0,894,895,1,0,0,0,895,897,3,177,88,0,896,893,1,0,0,0,896, + 897,1,0,0,0,897,176,1,0,0,0,898,899,7,4,0,0,899,178,1,0,0,0,900, + 902,3,181,90,0,901,900,1,0,0,0,902,903,1,0,0,0,903,901,1,0,0,0,903, + 904,1,0,0,0,904,180,1,0,0,0,905,908,3,177,88,0,906,908,5,95,0,0, + 907,905,1,0,0,0,907,906,1,0,0,0,908,182,1,0,0,0,909,910,5,48,0,0, + 910,911,7,5,0,0,911,912,3,185,92,0,912,184,1,0,0,0,913,918,3,187, + 93,0,914,916,3,189,94,0,915,914,1,0,0,0,915,916,1,0,0,0,916,917, + 1,0,0,0,917,919,3,187,93,0,918,915,1,0,0,0,918,919,1,0,0,0,919,186, + 1,0,0,0,920,921,7,6,0,0,921,188,1,0,0,0,922,924,3,191,95,0,923,922, + 1,0,0,0,924,925,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926,190, + 1,0,0,0,927,930,3,187,93,0,928,930,5,95,0,0,929,927,1,0,0,0,929, + 928,1,0,0,0,930,192,1,0,0,0,931,934,3,195,97,0,932,934,3,207,103, + 0,933,931,1,0,0,0,933,932,1,0,0,0,934,194,1,0,0,0,935,936,3,151, + 75,0,936,938,5,46,0,0,937,939,3,151,75,0,938,937,1,0,0,0,938,939, + 1,0,0,0,939,941,1,0,0,0,940,942,3,197,98,0,941,940,1,0,0,0,941,942, + 1,0,0,0,942,944,1,0,0,0,943,945,3,205,102,0,944,943,1,0,0,0,944, + 945,1,0,0,0,945,963,1,0,0,0,946,947,5,46,0,0,947,949,3,151,75,0, + 948,950,3,197,98,0,949,948,1,0,0,0,949,950,1,0,0,0,950,952,1,0,0, + 0,951,953,3,205,102,0,952,951,1,0,0,0,952,953,1,0,0,0,953,963,1, + 0,0,0,954,955,3,151,75,0,955,957,3,197,98,0,956,958,3,205,102,0, + 957,956,1,0,0,0,957,958,1,0,0,0,958,963,1,0,0,0,959,960,3,151,75, + 0,960,961,3,205,102,0,961,963,1,0,0,0,962,935,1,0,0,0,962,946,1, + 0,0,0,962,954,1,0,0,0,962,959,1,0,0,0,963,196,1,0,0,0,964,965,3, + 199,99,0,965,966,3,201,100,0,966,198,1,0,0,0,967,968,7,7,0,0,968, + 200,1,0,0,0,969,971,3,203,101,0,970,969,1,0,0,0,970,971,1,0,0,0, + 971,972,1,0,0,0,972,973,3,151,75,0,973,202,1,0,0,0,974,975,7,8,0, + 0,975,204,1,0,0,0,976,977,7,9,0,0,977,206,1,0,0,0,978,979,3,209, + 104,0,979,981,3,211,105,0,980,982,3,205,102,0,981,980,1,0,0,0,981, + 982,1,0,0,0,982,208,1,0,0,0,983,985,3,163,81,0,984,986,5,46,0,0, + 985,984,1,0,0,0,985,986,1,0,0,0,986,995,1,0,0,0,987,988,5,48,0,0, + 988,990,7,2,0,0,989,991,3,165,82,0,990,989,1,0,0,0,990,991,1,0,0, + 0,991,992,1,0,0,0,992,993,5,46,0,0,993,995,3,165,82,0,994,983,1, + 0,0,0,994,987,1,0,0,0,995,210,1,0,0,0,996,997,3,213,106,0,997,998, + 3,201,100,0,998,212,1,0,0,0,999,1000,7,10,0,0,1000,214,1,0,0,0,1001, + 1002,5,116,0,0,1002,1003,5,114,0,0,1003,1004,5,117,0,0,1004,1011, + 5,101,0,0,1005,1006,5,102,0,0,1006,1007,5,97,0,0,1007,1008,5,108, + 0,0,1008,1009,5,115,0,0,1009,1011,5,101,0,0,1010,1001,1,0,0,0,1010, + 1005,1,0,0,0,1011,216,1,0,0,0,1012,1013,5,39,0,0,1013,1014,3,219, + 109,0,1014,1015,5,39,0,0,1015,1021,1,0,0,0,1016,1017,5,39,0,0,1017, + 1018,3,229,114,0,1018,1019,5,39,0,0,1019,1021,1,0,0,0,1020,1012, + 1,0,0,0,1020,1016,1,0,0,0,1021,218,1,0,0,0,1022,1023,8,11,0,0,1023, + 220,1,0,0,0,1024,1026,5,34,0,0,1025,1027,3,223,111,0,1026,1025,1, + 0,0,0,1026,1027,1,0,0,0,1027,1028,1,0,0,0,1028,1029,5,34,0,0,1029, + 222,1,0,0,0,1030,1032,3,225,112,0,1031,1030,1,0,0,0,1032,1033,1, + 0,0,0,1033,1031,1,0,0,0,1033,1034,1,0,0,0,1034,224,1,0,0,0,1035, + 1038,8,12,0,0,1036,1038,3,229,114,0,1037,1035,1,0,0,0,1037,1036, + 1,0,0,0,1038,226,1,0,0,0,1039,1040,5,34,0,0,1040,1041,5,34,0,0,1041, + 1042,5,34,0,0,1042,1046,1,0,0,0,1043,1045,7,13,0,0,1044,1043,1,0, + 0,0,1045,1048,1,0,0,0,1046,1044,1,0,0,0,1046,1047,1,0,0,0,1047,1049, + 1,0,0,0,1048,1046,1,0,0,0,1049,1053,7,14,0,0,1050,1052,7,15,0,0, + 1051,1050,1,0,0,0,1052,1055,1,0,0,0,1053,1051,1,0,0,0,1053,1054, + 1,0,0,0,1054,1056,1,0,0,0,1055,1053,1,0,0,0,1056,1057,5,34,0,0,1057, + 1058,5,34,0,0,1058,1059,5,34,0,0,1059,228,1,0,0,0,1060,1061,5,92, + 0,0,1061,1065,7,16,0,0,1062,1065,3,231,115,0,1063,1065,3,235,117, + 0,1064,1060,1,0,0,0,1064,1062,1,0,0,0,1064,1063,1,0,0,0,1065,230, + 1,0,0,0,1066,1067,5,92,0,0,1067,1078,3,177,88,0,1068,1069,5,92,0, + 0,1069,1070,3,177,88,0,1070,1071,3,177,88,0,1071,1078,1,0,0,0,1072, + 1073,5,92,0,0,1073,1074,3,233,116,0,1074,1075,3,177,88,0,1075,1076, + 3,177,88,0,1076,1078,1,0,0,0,1077,1066,1,0,0,0,1077,1068,1,0,0,0, + 1077,1072,1,0,0,0,1078,232,1,0,0,0,1079,1080,7,17,0,0,1080,234,1, + 0,0,0,1081,1083,5,92,0,0,1082,1084,5,117,0,0,1083,1082,1,0,0,0,1084, + 1085,1,0,0,0,1085,1083,1,0,0,0,1085,1086,1,0,0,0,1086,1087,1,0,0, + 0,1087,1088,3,167,83,0,1088,1089,3,167,83,0,1089,1090,3,167,83,0, + 1090,1091,3,167,83,0,1091,236,1,0,0,0,1092,1093,5,110,0,0,1093,1094, + 5,117,0,0,1094,1095,5,108,0,0,1095,1096,5,108,0,0,1096,238,1,0,0, + 0,1097,1098,5,40,0,0,1098,240,1,0,0,0,1099,1100,5,41,0,0,1100,242, + 1,0,0,0,1101,1102,5,123,0,0,1102,244,1,0,0,0,1103,1104,5,125,0,0, + 1104,246,1,0,0,0,1105,1106,5,91,0,0,1106,248,1,0,0,0,1107,1108,5, + 93,0,0,1108,250,1,0,0,0,1109,1110,5,59,0,0,1110,252,1,0,0,0,1111, + 1112,5,44,0,0,1112,254,1,0,0,0,1113,1114,5,46,0,0,1114,256,1,0,0, + 0,1115,1116,5,46,0,0,1116,1117,5,46,0,0,1117,1118,5,46,0,0,1118, + 258,1,0,0,0,1119,1120,5,64,0,0,1120,260,1,0,0,0,1121,1122,5,58,0, + 0,1122,1123,5,58,0,0,1123,262,1,0,0,0,1124,1125,5,61,0,0,1125,264, + 1,0,0,0,1126,1127,5,62,0,0,1127,266,1,0,0,0,1128,1129,5,60,0,0,1129, + 268,1,0,0,0,1130,1131,5,33,0,0,1131,270,1,0,0,0,1132,1133,5,126, + 0,0,1133,272,1,0,0,0,1134,1135,5,63,0,0,1135,274,1,0,0,0,1136,1137, + 5,58,0,0,1137,276,1,0,0,0,1138,1139,5,45,0,0,1139,1140,5,62,0,0, + 1140,278,1,0,0,0,1141,1142,5,61,0,0,1142,1143,5,61,0,0,1143,280, + 1,0,0,0,1144,1145,5,60,0,0,1145,1146,5,61,0,0,1146,282,1,0,0,0,1147, + 1148,5,62,0,0,1148,1149,5,61,0,0,1149,284,1,0,0,0,1150,1151,5,33, + 0,0,1151,1152,5,61,0,0,1152,286,1,0,0,0,1153,1154,5,38,0,0,1154, + 1155,5,38,0,0,1155,288,1,0,0,0,1156,1157,5,124,0,0,1157,1158,5,124, + 0,0,1158,290,1,0,0,0,1159,1160,5,43,0,0,1160,1161,5,43,0,0,1161, + 292,1,0,0,0,1162,1163,5,45,0,0,1163,1164,5,45,0,0,1164,294,1,0,0, + 0,1165,1166,5,43,0,0,1166,296,1,0,0,0,1167,1168,5,45,0,0,1168,298, + 1,0,0,0,1169,1170,5,42,0,0,1170,300,1,0,0,0,1171,1172,5,47,0,0,1172, + 302,1,0,0,0,1173,1174,5,38,0,0,1174,304,1,0,0,0,1175,1176,5,124, + 0,0,1176,306,1,0,0,0,1177,1178,5,94,0,0,1178,308,1,0,0,0,1179,1180, + 5,37,0,0,1180,310,1,0,0,0,1181,1182,5,43,0,0,1182,1183,5,61,0,0, + 1183,312,1,0,0,0,1184,1185,5,45,0,0,1185,1186,5,61,0,0,1186,314, + 1,0,0,0,1187,1188,5,42,0,0,1188,1189,5,61,0,0,1189,316,1,0,0,0,1190, + 1191,5,47,0,0,1191,1192,5,61,0,0,1192,318,1,0,0,0,1193,1194,5,38, + 0,0,1194,1195,5,61,0,0,1195,320,1,0,0,0,1196,1197,5,124,0,0,1197, + 1198,5,61,0,0,1198,322,1,0,0,0,1199,1200,5,94,0,0,1200,1201,5,61, + 0,0,1201,324,1,0,0,0,1202,1203,5,37,0,0,1203,1204,5,61,0,0,1204, + 326,1,0,0,0,1205,1206,5,60,0,0,1206,1207,5,60,0,0,1207,1208,5,61, + 0,0,1208,328,1,0,0,0,1209,1210,5,62,0,0,1210,1211,5,62,0,0,1211, + 1212,5,61,0,0,1212,330,1,0,0,0,1213,1214,5,62,0,0,1214,1215,5,62, + 0,0,1215,1216,5,62,0,0,1216,1217,5,61,0,0,1217,332,1,0,0,0,1218, + 1222,3,335,167,0,1219,1221,3,337,168,0,1220,1219,1,0,0,0,1221,1224, + 1,0,0,0,1222,1220,1,0,0,0,1222,1223,1,0,0,0,1223,334,1,0,0,0,1224, + 1222,1,0,0,0,1225,1227,7,18,0,0,1226,1225,1,0,0,0,1227,336,1,0,0, + 0,1228,1231,3,335,167,0,1229,1231,7,19,0,0,1230,1228,1,0,0,0,1230, + 1229,1,0,0,0,1231,338,1,0,0,0,1232,1234,7,20,0,0,1233,1232,1,0,0, + 0,1234,1235,1,0,0,0,1235,1233,1,0,0,0,1235,1236,1,0,0,0,1236,1237, + 1,0,0,0,1237,1238,6,169,0,0,1238,340,1,0,0,0,1239,1240,5,47,0,0, + 1240,1241,5,42,0,0,1241,1245,1,0,0,0,1242,1244,9,0,0,0,1243,1242, + 1,0,0,0,1244,1247,1,0,0,0,1245,1246,1,0,0,0,1245,1243,1,0,0,0,1246, + 1248,1,0,0,0,1247,1245,1,0,0,0,1248,1249,5,42,0,0,1249,1250,5,47, + 0,0,1250,1251,1,0,0,0,1251,1252,6,170,1,0,1252,342,1,0,0,0,1253, + 1254,5,47,0,0,1254,1255,5,47,0,0,1255,1259,1,0,0,0,1256,1258,8,14, + 0,0,1257,1256,1,0,0,0,1258,1261,1,0,0,0,1259,1257,1,0,0,0,1259,1260, + 1,0,0,0,1260,1262,1,0,0,0,1261,1259,1,0,0,0,1262,1263,6,171,1,0, + 1263,344,1,0,0,0,57,0,804,808,812,816,820,827,832,834,838,841,845, + 852,856,861,869,872,879,883,887,893,896,903,907,915,918,925,929, + 933,938,941,944,949,952,957,962,970,981,985,990,994,1010,1020,1026, + 1033,1037,1046,1053,1064,1077,1085,1222,1226,1230,1235,1245,1259, + 2,6,0,0,0,1,0 + ] + +class Java20Lexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + EXPORTS = 1 + MODULE = 2 + NONSEALED = 3 + OACA = 4 + OPEN = 5 + OPENS = 6 + PERMITS = 7 + PROVIDES = 8 + RECORD = 9 + REQUIRES = 10 + SEALED = 11 + TO = 12 + TRANSITIVE = 13 + USES = 14 + VAR = 15 + WITH = 16 + YIELD = 17 + ABSTRACT = 18 + ASSERT = 19 + BOOLEAN = 20 + BREAK = 21 + BYTE = 22 + CASE = 23 + CATCH = 24 + CHAR = 25 + CLASS = 26 + CONST = 27 + CONTINUE = 28 + DEFAULT = 29 + DO = 30 + DOUBLE = 31 + ELSE = 32 + ENUM = 33 + EXTENDS = 34 + FINAL = 35 + FINALLY = 36 + FLOAT = 37 + FOR = 38 + IF = 39 + GOTO = 40 + IMPLEMENTS = 41 + IMPORT = 42 + INSTANCEOF = 43 + INT = 44 + INTERFACE = 45 + LONG = 46 + NATIVE = 47 + NEW = 48 + PACKAGE = 49 + PRIVATE = 50 + PROTECTED = 51 + PUBLIC = 52 + RETURN = 53 + SHORT = 54 + STATIC = 55 + STRICTFP = 56 + SUPER = 57 + SWITCH = 58 + SYNCHRONIZED = 59 + THIS = 60 + THROW = 61 + THROWS = 62 + TRANSIENT = 63 + TRY = 64 + VOID = 65 + VOLATILE = 66 + WHILE = 67 + UNDER_SCORE = 68 + IntegerLiteral = 69 + FloatingPointLiteral = 70 + BooleanLiteral = 71 + CharacterLiteral = 72 + StringLiteral = 73 + TextBlock = 74 + NullLiteral = 75 + LPAREN = 76 + RPAREN = 77 + LBRACE = 78 + RBRACE = 79 + LBRACK = 80 + RBRACK = 81 + SEMI = 82 + COMMA = 83 + DOT = 84 + ELLIPSIS = 85 + AT = 86 + COLONCOLON = 87 + ASSIGN = 88 + GT = 89 + LT = 90 + BANG = 91 + TILDE = 92 + QUESTION = 93 + COLON = 94 + ARROW = 95 + EQUAL = 96 + LE = 97 + GE = 98 + NOTEQUAL = 99 + AND = 100 + OR = 101 + INC = 102 + DEC = 103 + ADD = 104 + SUB = 105 + MUL = 106 + DIV = 107 + BITAND = 108 + BITOR = 109 + CARET = 110 + MOD = 111 + ADD_ASSIGN = 112 + SUB_ASSIGN = 113 + MUL_ASSIGN = 114 + DIV_ASSIGN = 115 + AND_ASSIGN = 116 + OR_ASSIGN = 117 + XOR_ASSIGN = 118 + MOD_ASSIGN = 119 + LSHIFT_ASSIGN = 120 + RSHIFT_ASSIGN = 121 + URSHIFT_ASSIGN = 122 + Identifier = 123 + WS = 124 + COMMENT = 125 + LINE_COMMENT = 126 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'exports'", "'module'", "'non-sealed'", "'<>'", "'open'", "'opens'", + "'permits'", "'provides'", "'record'", "'requires'", "'sealed'", + "'to'", "'transitive'", "'uses'", "'var'", "'with'", "'yield'", + "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", + "'case'", "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", "'extends'", + "'final'", "'finally'", "'float'", "'for'", "'if'", "'goto'", + "'implements'", "'import'", "'instanceof'", "'int'", "'interface'", + "'long'", "'native'", "'new'", "'package'", "'private'", "'protected'", + "'public'", "'return'", "'short'", "'static'", "'strictfp'", + "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "'null'", "'('", "')'", "'{'", "'}'", "'['", + "']'", "';'", "','", "'.'", "'...'", "'@'", "'::'", "'='", "'>'", + "'<'", "'!'", "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", "'*'", + "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", "'*='", "'/='", + "'&='", "'|='", "'^='", "'%='", "'<<='", "'>>='", "'>>>='" ] + + symbolicNames = [ "", + "EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", "PERMITS", + "PROVIDES", "RECORD", "REQUIRES", "SEALED", "TO", "TRANSITIVE", + "USES", "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", "CONST", + "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", + "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", + "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", + "NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", "VOLATILE", + "WHILE", "UNDER_SCORE", "IntegerLiteral", "FloatingPointLiteral", + "BooleanLiteral", "CharacterLiteral", "StringLiteral", "TextBlock", + "NullLiteral", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", + "RBRACK", "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", + "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", + "DEC", "ADD", "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", + "MOD", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", + "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", + "LINE_COMMENT" ] + + ruleNames = [ "EXPORTS", "MODULE", "NONSEALED", "OACA", "OPEN", "OPENS", + "PERMITS", "PROVIDES", "RECORD", "REQUIRES", "SEALED", + "TO", "TRANSITIVE", "USES", "VAR", "WITH", "YIELD", "ABSTRACT", + "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", + "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", + "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FINAL", "FINALLY", + "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS", "IMPORT", + "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW", + "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", + "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "DecimalIntegerLiteral", "HexIntegerLiteral", "OctalIntegerLiteral", + "BinaryIntegerLiteral", "IntegerTypeSuffix", "DecimalNumeral", + "Digits", "Digit", "NonZeroDigit", "DigitsAndUnderscores", + "DigitOrUnderscore", "Underscores", "HexNumeral", "HexDigits", + "HexDigit", "HexDigitsAndUnderscores", "HexDigitOrUnderscore", + "OctalNumeral", "OctalDigits", "OctalDigit", "OctalDigitsAndUnderscores", + "OctalDigitOrUnderscore", "BinaryNumeral", "BinaryDigits", + "BinaryDigit", "BinaryDigitsAndUnderscores", "BinaryDigitOrUnderscore", + "FloatingPointLiteral", "DecimalFloatingPointLiteral", + "ExponentPart", "ExponentIndicator", "SignedInteger", + "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral", + "HexSignificand", "BinaryExponent", "BinaryExponentIndicator", + "BooleanLiteral", "CharacterLiteral", "SingleCharacter", + "StringLiteral", "StringCharacters", "StringCharacter", + "TextBlock", "EscapeSequence", "OctalEscape", "ZeroToThree", + "UnicodeEscape", "NullLiteral", "LPAREN", "RPAREN", "LBRACE", + "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT", + "ELLIPSIS", "AT", "COLONCOLON", "ASSIGN", "GT", "LT", + "BANG", "TILDE", "QUESTION", "COLON", "ARROW", "EQUAL", + "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", + "SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", "MOD", + "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", + "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", + "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier", + "IdentifierStart", "IdentifierPart", "WS", "COMMENT", + "LINE_COMMENT" ] + + grammarFileName = "Java20Lexer.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/csim/java/Java20Lexer.tokens b/csim/java/Java20Lexer.tokens new file mode 100644 index 0000000..891a5f2 --- /dev/null +++ b/csim/java/Java20Lexer.tokens @@ -0,0 +1,242 @@ +EXPORTS=1 +MODULE=2 +NONSEALED=3 +OACA=4 +OPEN=5 +OPENS=6 +PERMITS=7 +PROVIDES=8 +RECORD=9 +REQUIRES=10 +SEALED=11 +TO=12 +TRANSITIVE=13 +USES=14 +VAR=15 +WITH=16 +YIELD=17 +ABSTRACT=18 +ASSERT=19 +BOOLEAN=20 +BREAK=21 +BYTE=22 +CASE=23 +CATCH=24 +CHAR=25 +CLASS=26 +CONST=27 +CONTINUE=28 +DEFAULT=29 +DO=30 +DOUBLE=31 +ELSE=32 +ENUM=33 +EXTENDS=34 +FINAL=35 +FINALLY=36 +FLOAT=37 +FOR=38 +IF=39 +GOTO=40 +IMPLEMENTS=41 +IMPORT=42 +INSTANCEOF=43 +INT=44 +INTERFACE=45 +LONG=46 +NATIVE=47 +NEW=48 +PACKAGE=49 +PRIVATE=50 +PROTECTED=51 +PUBLIC=52 +RETURN=53 +SHORT=54 +STATIC=55 +STRICTFP=56 +SUPER=57 +SWITCH=58 +SYNCHRONIZED=59 +THIS=60 +THROW=61 +THROWS=62 +TRANSIENT=63 +TRY=64 +VOID=65 +VOLATILE=66 +WHILE=67 +UNDER_SCORE=68 +IntegerLiteral=69 +FloatingPointLiteral=70 +BooleanLiteral=71 +CharacterLiteral=72 +StringLiteral=73 +TextBlock=74 +NullLiteral=75 +LPAREN=76 +RPAREN=77 +LBRACE=78 +RBRACE=79 +LBRACK=80 +RBRACK=81 +SEMI=82 +COMMA=83 +DOT=84 +ELLIPSIS=85 +AT=86 +COLONCOLON=87 +ASSIGN=88 +GT=89 +LT=90 +BANG=91 +TILDE=92 +QUESTION=93 +COLON=94 +ARROW=95 +EQUAL=96 +LE=97 +GE=98 +NOTEQUAL=99 +AND=100 +OR=101 +INC=102 +DEC=103 +ADD=104 +SUB=105 +MUL=106 +DIV=107 +BITAND=108 +BITOR=109 +CARET=110 +MOD=111 +ADD_ASSIGN=112 +SUB_ASSIGN=113 +MUL_ASSIGN=114 +DIV_ASSIGN=115 +AND_ASSIGN=116 +OR_ASSIGN=117 +XOR_ASSIGN=118 +MOD_ASSIGN=119 +LSHIFT_ASSIGN=120 +RSHIFT_ASSIGN=121 +URSHIFT_ASSIGN=122 +Identifier=123 +WS=124 +COMMENT=125 +LINE_COMMENT=126 +'exports'=1 +'module'=2 +'non-sealed'=3 +'<>'=4 +'open'=5 +'opens'=6 +'permits'=7 +'provides'=8 +'record'=9 +'requires'=10 +'sealed'=11 +'to'=12 +'transitive'=13 +'uses'=14 +'var'=15 +'with'=16 +'yield'=17 +'abstract'=18 +'assert'=19 +'boolean'=20 +'break'=21 +'byte'=22 +'case'=23 +'catch'=24 +'char'=25 +'class'=26 +'const'=27 +'continue'=28 +'default'=29 +'do'=30 +'double'=31 +'else'=32 +'enum'=33 +'extends'=34 +'final'=35 +'finally'=36 +'float'=37 +'for'=38 +'if'=39 +'goto'=40 +'implements'=41 +'import'=42 +'instanceof'=43 +'int'=44 +'interface'=45 +'long'=46 +'native'=47 +'new'=48 +'package'=49 +'private'=50 +'protected'=51 +'public'=52 +'return'=53 +'short'=54 +'static'=55 +'strictfp'=56 +'super'=57 +'switch'=58 +'synchronized'=59 +'this'=60 +'throw'=61 +'throws'=62 +'transient'=63 +'try'=64 +'void'=65 +'volatile'=66 +'while'=67 +'_'=68 +'null'=75 +'('=76 +')'=77 +'{'=78 +'}'=79 +'['=80 +']'=81 +';'=82 +','=83 +'.'=84 +'...'=85 +'@'=86 +'::'=87 +'='=88 +'>'=89 +'<'=90 +'!'=91 +'~'=92 +'?'=93 +':'=94 +'->'=95 +'=='=96 +'<='=97 +'>='=98 +'!='=99 +'&&'=100 +'||'=101 +'++'=102 +'--'=103 +'+'=104 +'-'=105 +'*'=106 +'/'=107 +'&'=108 +'|'=109 +'^'=110 +'%'=111 +'+='=112 +'-='=113 +'*='=114 +'/='=115 +'&='=116 +'|='=117 +'^='=118 +'%='=119 +'<<='=120 +'>>='=121 +'>>>='=122 diff --git a/csim/java/Java20Parser.interp b/csim/java/Java20Parser.interp new file mode 100644 index 0000000..23f25c8 --- /dev/null +++ b/csim/java/Java20Parser.interp @@ -0,0 +1,512 @@ +token literal names: +null +'exports' +'module' +'non-sealed' +'<>' +'open' +'opens' +'permits' +'provides' +'record' +'requires' +'sealed' +'to' +'transitive' +'uses' +'var' +'with' +'yield' +'abstract' +'assert' +'boolean' +'break' +'byte' +'case' +'catch' +'char' +'class' +'const' +'continue' +'default' +'do' +'double' +'else' +'enum' +'extends' +'final' +'finally' +'float' +'for' +'if' +'goto' +'implements' +'import' +'instanceof' +'int' +'interface' +'long' +'native' +'new' +'package' +'private' +'protected' +'public' +'return' +'short' +'static' +'strictfp' +'super' +'switch' +'synchronized' +'this' +'throw' +'throws' +'transient' +'try' +'void' +'volatile' +'while' +'_' +null +null +null +null +null +null +'null' +'(' +')' +'{' +'}' +'[' +']' +';' +',' +'.' +'...' +'@' +'::' +'=' +'>' +'<' +'!' +'~' +'?' +':' +'->' +'==' +'<=' +'>=' +'!=' +'&&' +'||' +'++' +'--' +'+' +'-' +'*' +'/' +'&' +'|' +'^' +'%' +'+=' +'-=' +'*=' +'/=' +'&=' +'|=' +'^=' +'%=' +'<<=' +'>>=' +'>>>=' +null +null +null +null + +token symbolic names: +null +EXPORTS +MODULE +NONSEALED +OACA +OPEN +OPENS +PERMITS +PROVIDES +RECORD +REQUIRES +SEALED +TO +TRANSITIVE +USES +VAR +WITH +YIELD +ABSTRACT +ASSERT +BOOLEAN +BREAK +BYTE +CASE +CATCH +CHAR +CLASS +CONST +CONTINUE +DEFAULT +DO +DOUBLE +ELSE +ENUM +EXTENDS +FINAL +FINALLY +FLOAT +FOR +IF +GOTO +IMPLEMENTS +IMPORT +INSTANCEOF +INT +INTERFACE +LONG +NATIVE +NEW +PACKAGE +PRIVATE +PROTECTED +PUBLIC +RETURN +SHORT +STATIC +STRICTFP +SUPER +SWITCH +SYNCHRONIZED +THIS +THROW +THROWS +TRANSIENT +TRY +VOID +VOLATILE +WHILE +UNDER_SCORE +IntegerLiteral +FloatingPointLiteral +BooleanLiteral +CharacterLiteral +StringLiteral +TextBlock +NullLiteral +LPAREN +RPAREN +LBRACE +RBRACE +LBRACK +RBRACK +SEMI +COMMA +DOT +ELLIPSIS +AT +COLONCOLON +ASSIGN +GT +LT +BANG +TILDE +QUESTION +COLON +ARROW +EQUAL +LE +GE +NOTEQUAL +AND +OR +INC +DEC +ADD +SUB +MUL +DIV +BITAND +BITOR +CARET +MOD +ADD_ASSIGN +SUB_ASSIGN +MUL_ASSIGN +DIV_ASSIGN +AND_ASSIGN +OR_ASSIGN +XOR_ASSIGN +MOD_ASSIGN +LSHIFT_ASSIGN +RSHIFT_ASSIGN +URSHIFT_ASSIGN +Identifier +WS +COMMENT +LINE_COMMENT + +rule names: +start_ +identifier +typeIdentifier +unqualifiedMethodIdentifier +contextualKeyword +contextualKeywordMinusForTypeIdentifier +contextualKeywordMinusForUnqualifiedMethodIdentifier +literal +primitiveType +numericType +integralType +floatingPointType +referenceType +coit +classOrInterfaceType +classType +interfaceType +typeVariable +arrayType +dims +typeParameter +typeParameterModifier +typeBound +additionalBound +typeArguments +typeArgumentList +typeArgument +wildcard +wildcardBounds +moduleName +packageName +typeName +packageOrTypeName +expressionName +methodName +ambiguousName +compilationUnit +ordinaryCompilationUnit +modularCompilationUnit +packageDeclaration +packageModifier +importDeclaration +singleTypeImportDeclaration +typeImportOnDemandDeclaration +singleStaticImportDeclaration +staticImportOnDemandDeclaration +topLevelClassOrInterfaceDeclaration +moduleDeclaration +moduleDirective +requiresModifier +classDeclaration +normalClassDeclaration +classModifier +typeParameters +typeParameterList +classExtends +classImplements +interfaceTypeList +classPermits +classBody +classBodyDeclaration +classMemberDeclaration +fieldDeclaration +fieldModifier +variableDeclaratorList +variableDeclarator +variableDeclaratorId +variableInitializer +unannType +unannPrimitiveType +unannReferenceType +unannClassOrInterfaceType +uCOIT +unannClassType +unannInterfaceType +unannTypeVariable +unannArrayType +methodDeclaration +methodModifier +methodHeader +result +methodDeclarator +receiverParameter +formalParameterList +formalParameter +variableArityParameter +variableModifier +throwsT +exceptionTypeList +exceptionType +methodBody +instanceInitializer +staticInitializer +constructorDeclaration +constructorModifier +constructorDeclarator +simpleTypeName +constructorBody +explicitConstructorInvocation +enumDeclaration +enumBody +enumConstantList +enumConstant +enumConstantModifier +enumBodyDeclarations +recordDeclaration +recordHeader +recordComponentList +recordComponent +variableArityRecordComponent +recordComponentModifier +recordBody +recordBodyDeclaration +compactConstructorDeclaration +interfaceDeclaration +normalInterfaceDeclaration +interfaceModifier +interfaceExtends +interfacePermits +interfaceBody +interfaceMemberDeclaration +constantDeclaration +constantModifier +interfaceMethodDeclaration +interfaceMethodModifier +annotationInterfaceDeclaration +annotationInterfaceBody +annotationInterfaceMemberDeclaration +annotationInterfaceElementDeclaration +annotationInterfaceElementModifier +defaultValue +annotation +normalAnnotation +elementValuePairList +elementValuePair +elementValue +elementValueArrayInitializer +elementValueList +markerAnnotation +singleElementAnnotation +arrayInitializer +variableInitializerList +block +blockStatements +blockStatement +localClassOrInterfaceDeclaration +localVariableDeclaration +localVariableType +localVariableDeclarationStatement +statement +statementNoShortIf +statementWithoutTrailingSubstatement +emptyStatement_ +labeledStatement +labeledStatementNoShortIf +expressionStatement +statementExpression +ifThenStatement +ifThenElseStatement +ifThenElseStatementNoShortIf +assertStatement +switchStatement +switchBlock +switchRule +switchBlockStatementGroup +switchLabel +caseConstant +whileStatement +whileStatementNoShortIf +doStatement +forStatement +forStatementNoShortIf +basicForStatement +basicForStatementNoShortIf +forInit +forUpdate +statementExpressionList +enhancedForStatement +enhancedForStatementNoShortIf +breakStatement +continueStatement +returnStatement +throwStatement +synchronizedStatement +tryStatement +catches +catchClause +catchFormalParameter +catchType +finallyBlock +tryWithResourcesStatement +resourceSpecification +resourceList +resource +variableAccess +yieldStatement +pattern +typePattern +expression +primary +primaryNoNewArray +pNNA +classLiteral +classInstanceCreationExpression +unqualifiedClassInstanceCreationExpression +classOrInterfaceTypeToInstantiate +typeArgumentsOrDiamond +arrayCreationExpression +arrayCreationExpressionWithoutInitializer +arrayCreationExpressionWithInitializer +dimExprs +dimExpr +arrayAccess +fieldAccess +methodInvocation +argumentList +methodReference +postfixExpression +pfE +postIncrementExpression +postDecrementExpression +unaryExpression +preIncrementExpression +preDecrementExpression +unaryExpressionNotPlusMinus +castExpression +multiplicativeExpression +additiveExpression +shiftExpression +relationalExpression +equalityExpression +andExpression +exclusiveOrExpression +inclusiveOrExpression +conditionalAndExpression +conditionalOrExpression +conditionalExpression +assignmentExpression +assignment +leftHandSide +assignmentOperator +lambdaExpression +lambdaParameters +lambdaParameterList +lambdaParameter +lambdaParameterType +lambdaBody +switchExpression +constantExpression + + +atn: +[4, 1, 126, 2969, 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, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 504, 8, 1, 1, 2, 1, 2, 3, 2, 508, 8, 2, 1, 3, 1, 3, 3, 3, 512, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 5, 8, 523, 8, 8, 10, 8, 12, 8, 526, 9, 8, 1, 8, 1, 8, 3, 8, 530, 8, 8, 1, 9, 1, 9, 3, 9, 534, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 3, 12, 543, 8, 12, 1, 13, 1, 13, 5, 13, 547, 8, 13, 10, 13, 12, 13, 550, 9, 13, 1, 13, 1, 13, 3, 13, 554, 8, 13, 1, 13, 3, 13, 557, 8, 13, 1, 14, 1, 14, 1, 14, 3, 14, 562, 8, 14, 1, 14, 5, 14, 565, 8, 14, 10, 14, 12, 14, 568, 9, 14, 1, 14, 1, 14, 3, 14, 572, 8, 14, 1, 14, 3, 14, 575, 8, 14, 1, 15, 5, 15, 578, 8, 15, 10, 15, 12, 15, 581, 9, 15, 1, 15, 1, 15, 3, 15, 585, 8, 15, 1, 15, 1, 15, 1, 15, 5, 15, 590, 8, 15, 10, 15, 12, 15, 593, 9, 15, 1, 15, 1, 15, 3, 15, 597, 8, 15, 1, 15, 1, 15, 1, 15, 5, 15, 602, 8, 15, 10, 15, 12, 15, 605, 9, 15, 1, 15, 1, 15, 3, 15, 609, 8, 15, 3, 15, 611, 8, 15, 1, 16, 1, 16, 1, 17, 5, 17, 616, 8, 17, 10, 17, 12, 17, 619, 9, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 632, 8, 18, 1, 19, 5, 19, 635, 8, 19, 10, 19, 12, 19, 638, 9, 19, 1, 19, 1, 19, 1, 19, 5, 19, 643, 8, 19, 10, 19, 12, 19, 646, 9, 19, 1, 19, 1, 19, 5, 19, 650, 8, 19, 10, 19, 12, 19, 653, 9, 19, 1, 20, 5, 20, 656, 8, 20, 10, 20, 12, 20, 659, 9, 20, 1, 20, 1, 20, 3, 20, 663, 8, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 671, 8, 22, 10, 22, 12, 22, 674, 9, 22, 3, 22, 676, 8, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 5, 25, 688, 8, 25, 10, 25, 12, 25, 691, 9, 25, 1, 26, 1, 26, 3, 26, 695, 8, 26, 1, 27, 5, 27, 698, 8, 27, 10, 27, 12, 27, 701, 9, 27, 1, 27, 1, 27, 3, 27, 705, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 711, 8, 28, 1, 29, 1, 29, 1, 29, 3, 29, 716, 8, 29, 1, 30, 1, 30, 1, 30, 3, 30, 721, 8, 30, 1, 31, 1, 31, 1, 31, 3, 31, 726, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 731, 8, 32, 1, 33, 1, 33, 1, 33, 3, 33, 736, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 3, 35, 745, 8, 35, 1, 36, 1, 36, 3, 36, 749, 8, 36, 1, 37, 3, 37, 752, 8, 37, 1, 37, 5, 37, 755, 8, 37, 10, 37, 12, 37, 758, 9, 37, 1, 37, 5, 37, 761, 8, 37, 10, 37, 12, 37, 764, 9, 37, 1, 38, 5, 38, 767, 8, 38, 10, 38, 12, 38, 770, 9, 38, 1, 38, 1, 38, 1, 39, 5, 39, 775, 8, 39, 10, 39, 12, 39, 778, 9, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 784, 8, 39, 10, 39, 12, 39, 787, 9, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 797, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 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, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 3, 46, 826, 8, 46, 1, 47, 5, 47, 829, 8, 47, 10, 47, 12, 47, 832, 9, 47, 1, 47, 3, 47, 835, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 841, 8, 47, 10, 47, 12, 47, 844, 9, 47, 1, 47, 1, 47, 5, 47, 848, 8, 47, 10, 47, 12, 47, 851, 9, 47, 1, 47, 1, 47, 1, 48, 1, 48, 5, 48, 857, 8, 48, 10, 48, 12, 48, 860, 9, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 871, 8, 48, 10, 48, 12, 48, 874, 9, 48, 3, 48, 876, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 886, 8, 48, 10, 48, 12, 48, 889, 9, 48, 3, 48, 891, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 905, 8, 48, 10, 48, 12, 48, 908, 9, 48, 1, 48, 1, 48, 3, 48, 912, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 3, 50, 919, 8, 50, 1, 51, 5, 51, 922, 8, 51, 10, 51, 12, 51, 925, 9, 51, 1, 51, 1, 51, 1, 51, 3, 51, 930, 8, 51, 1, 51, 3, 51, 933, 8, 51, 1, 51, 3, 51, 936, 8, 51, 1, 51, 3, 51, 939, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 953, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 5, 54, 962, 8, 54, 10, 54, 12, 54, 965, 9, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 5, 57, 976, 8, 57, 10, 57, 12, 57, 979, 9, 57, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 985, 8, 58, 10, 58, 12, 58, 988, 9, 58, 1, 59, 1, 59, 5, 59, 992, 8, 59, 10, 59, 12, 59, 995, 9, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1003, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 1010, 8, 61, 1, 62, 5, 62, 1013, 8, 62, 10, 62, 12, 62, 1016, 9, 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, 3, 63, 1030, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 1035, 8, 64, 10, 64, 12, 64, 1038, 9, 64, 1, 65, 1, 65, 1, 65, 3, 65, 1043, 8, 65, 1, 66, 1, 66, 3, 66, 1047, 8, 66, 1, 67, 1, 67, 3, 67, 1051, 8, 67, 1, 68, 1, 68, 3, 68, 1055, 8, 68, 1, 69, 1, 69, 3, 69, 1059, 8, 69, 1, 70, 1, 70, 1, 70, 3, 70, 1064, 8, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1069, 8, 71, 10, 71, 12, 71, 1072, 9, 71, 3, 71, 1074, 8, 71, 1, 71, 1, 71, 3, 71, 1078, 8, 71, 1, 71, 3, 71, 1081, 8, 71, 1, 72, 1, 72, 5, 72, 1085, 8, 72, 10, 72, 12, 72, 1088, 9, 72, 1, 72, 1, 72, 3, 72, 1092, 8, 72, 1, 72, 3, 72, 1095, 8, 72, 1, 73, 1, 73, 3, 73, 1099, 8, 73, 1, 73, 1, 73, 3, 73, 1103, 8, 73, 1, 73, 1, 73, 5, 73, 1107, 8, 73, 10, 73, 12, 73, 1110, 9, 73, 1, 73, 1, 73, 3, 73, 1114, 8, 73, 3, 73, 1116, 8, 73, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 3, 76, 1125, 8, 76, 1, 76, 1, 76, 1, 77, 5, 77, 1130, 8, 77, 10, 77, 12, 77, 1133, 9, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1148, 8, 78, 1, 79, 1, 79, 5, 79, 1152, 8, 79, 10, 79, 12, 79, 1155, 9, 79, 3, 79, 1157, 8, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1162, 8, 79, 1, 80, 1, 80, 3, 80, 1166, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1173, 8, 81, 1, 81, 3, 81, 1176, 8, 81, 1, 81, 1, 81, 3, 81, 1180, 8, 81, 1, 82, 5, 82, 1183, 8, 82, 10, 82, 12, 82, 1186, 9, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1192, 8, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 5, 83, 1199, 8, 83, 10, 83, 12, 83, 1202, 9, 83, 1, 84, 5, 84, 1205, 8, 84, 10, 84, 12, 84, 1208, 9, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1214, 8, 84, 1, 85, 5, 85, 1217, 8, 85, 10, 85, 12, 85, 1220, 9, 85, 1, 85, 1, 85, 5, 85, 1224, 8, 85, 10, 85, 12, 85, 1227, 9, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 3, 86, 1234, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 5, 88, 1242, 8, 88, 10, 88, 12, 88, 1245, 9, 88, 1, 89, 1, 89, 3, 89, 1249, 8, 89, 1, 90, 1, 90, 3, 90, 1253, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 93, 5, 93, 1261, 8, 93, 10, 93, 12, 93, 1264, 9, 93, 1, 93, 1, 93, 3, 93, 1268, 8, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1276, 8, 94, 1, 95, 3, 95, 1279, 8, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1286, 8, 95, 1, 95, 3, 95, 1289, 8, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 3, 97, 1297, 8, 97, 1, 97, 3, 97, 1300, 8, 97, 1, 97, 1, 97, 1, 98, 3, 98, 1305, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1310, 8, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1316, 8, 98, 1, 98, 1, 98, 3, 98, 1320, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1325, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1330, 8, 98, 1, 99, 5, 99, 1333, 8, 99, 10, 99, 12, 99, 1336, 9, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1341, 8, 99, 1, 99, 1, 99, 1, 100, 1, 100, 3, 100, 1347, 8, 100, 1, 100, 3, 100, 1350, 8, 100, 1, 100, 3, 100, 1353, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 5, 101, 1360, 8, 101, 10, 101, 12, 101, 1363, 9, 101, 1, 102, 5, 102, 1366, 8, 102, 10, 102, 12, 102, 1369, 9, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1374, 8, 102, 1, 102, 3, 102, 1377, 8, 102, 1, 102, 3, 102, 1380, 8, 102, 1, 103, 1, 103, 1, 104, 1, 104, 5, 104, 1386, 8, 104, 10, 104, 12, 104, 1389, 9, 104, 1, 105, 5, 105, 1392, 8, 105, 10, 105, 12, 105, 1395, 9, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1400, 8, 105, 1, 105, 1, 105, 3, 105, 1404, 8, 105, 1, 105, 1, 105, 1, 106, 1, 106, 3, 106, 1410, 8, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 5, 107, 1417, 8, 107, 10, 107, 12, 107, 1420, 9, 107, 1, 108, 5, 108, 1423, 8, 108, 10, 108, 12, 108, 1426, 9, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1432, 8, 108, 1, 109, 5, 109, 1435, 8, 109, 10, 109, 12, 109, 1438, 9, 109, 1, 109, 1, 109, 5, 109, 1442, 8, 109, 10, 109, 12, 109, 1445, 9, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 5, 111, 1454, 8, 111, 10, 111, 12, 111, 1457, 9, 111, 1, 111, 1, 111, 1, 112, 1, 112, 3, 112, 1463, 8, 112, 1, 113, 5, 113, 1466, 8, 113, 10, 113, 12, 113, 1469, 9, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 3, 114, 1476, 8, 114, 1, 115, 5, 115, 1479, 8, 115, 10, 115, 12, 115, 1482, 9, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1487, 8, 115, 1, 115, 3, 115, 1490, 8, 115, 1, 115, 3, 115, 1493, 8, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1506, 8, 116, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1515, 8, 118, 10, 118, 12, 118, 1518, 9, 118, 1, 119, 1, 119, 5, 119, 1522, 8, 119, 10, 119, 12, 119, 1525, 9, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1534, 8, 120, 1, 121, 5, 121, 1537, 8, 121, 10, 121, 12, 121, 1540, 9, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1550, 8, 122, 1, 123, 5, 123, 1553, 8, 123, 10, 123, 12, 123, 1556, 9, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1568, 8, 124, 1, 125, 5, 125, 1571, 8, 125, 10, 125, 12, 125, 1574, 9, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 5, 126, 1583, 8, 126, 10, 126, 12, 126, 1586, 9, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1595, 8, 127, 1, 128, 5, 128, 1598, 8, 128, 10, 128, 12, 128, 1601, 9, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 1608, 8, 128, 1, 128, 3, 128, 1611, 8, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 3, 129, 1618, 8, 129, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 3, 131, 1626, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1632, 8, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 5, 133, 1639, 8, 133, 10, 133, 12, 133, 1642, 9, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 3, 135, 1651, 8, 135, 1, 136, 1, 136, 3, 136, 1655, 8, 136, 1, 136, 3, 136, 1658, 8, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 5, 137, 1665, 8, 137, 10, 137, 12, 137, 1668, 9, 137, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 3, 140, 1681, 8, 140, 1, 140, 3, 140, 1684, 8, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 5, 141, 1691, 8, 141, 10, 141, 12, 141, 1694, 9, 141, 1, 142, 1, 142, 3, 142, 1698, 8, 142, 1, 142, 1, 142, 1, 143, 1, 143, 5, 143, 1704, 8, 143, 10, 143, 12, 143, 1707, 9, 143, 1, 144, 1, 144, 1, 144, 3, 144, 1712, 8, 144, 1, 145, 1, 145, 3, 145, 1716, 8, 145, 1, 146, 5, 146, 1719, 8, 146, 10, 146, 12, 146, 1722, 9, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 3, 147, 1729, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 1740, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 3, 150, 1747, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 1762, 8, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 1784, 8, 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, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 1812, 8, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 5, 162, 1825, 8, 162, 10, 162, 12, 162, 1828, 9, 162, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1834, 8, 162, 10, 162, 12, 162, 1837, 9, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1842, 8, 162, 10, 162, 12, 162, 1845, 9, 162, 1, 162, 3, 162, 1848, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 1857, 8, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 5, 164, 1864, 8, 164, 10, 164, 12, 164, 1867, 9, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 5, 165, 1875, 8, 165, 10, 165, 12, 165, 1878, 9, 165, 1, 165, 3, 165, 1881, 8, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 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, 170, 1, 170, 3, 170, 1907, 8, 170, 1, 171, 1, 171, 3, 171, 1911, 8, 171, 1, 172, 1, 172, 1, 172, 3, 172, 1916, 8, 172, 1, 172, 1, 172, 3, 172, 1920, 8, 172, 1, 172, 1, 172, 3, 172, 1924, 8, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 3, 173, 1932, 8, 173, 1, 173, 1, 173, 3, 173, 1936, 8, 173, 1, 173, 1, 173, 3, 173, 1940, 8, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 3, 174, 1947, 8, 174, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 5, 176, 1954, 8, 176, 10, 176, 12, 176, 1957, 9, 176, 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, 178, 1, 178, 1, 178, 1, 179, 1, 179, 3, 179, 1977, 8, 179, 1, 179, 1, 179, 1, 180, 1, 180, 3, 180, 1983, 8, 180, 1, 180, 1, 180, 1, 181, 1, 181, 3, 181, 1989, 8, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 2014, 8, 184, 1, 184, 1, 184, 1, 184, 3, 184, 2019, 8, 184, 1, 185, 1, 185, 5, 185, 2023, 8, 185, 10, 185, 12, 185, 2026, 9, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 5, 187, 2035, 8, 187, 10, 187, 12, 187, 2038, 9, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 5, 188, 2046, 8, 188, 10, 188, 12, 188, 2049, 9, 188, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 2058, 8, 190, 1, 190, 3, 190, 2061, 8, 190, 1, 191, 1, 191, 1, 191, 3, 191, 2066, 8, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 5, 192, 2073, 8, 192, 10, 192, 12, 192, 2076, 9, 192, 1, 193, 1, 193, 3, 193, 2080, 8, 193, 1, 194, 1, 194, 3, 194, 2084, 8, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 197, 1, 197, 1, 198, 1, 198, 3, 198, 2096, 8, 198, 1, 199, 1, 199, 3, 199, 2100, 8, 199, 1, 200, 1, 200, 3, 200, 2104, 8, 200, 1, 200, 1, 200, 3, 200, 2108, 8, 200, 1, 200, 1, 200, 3, 200, 2112, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2118, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2124, 8, 200, 1, 200, 1, 200, 3, 200, 2128, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2134, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2140, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2146, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2152, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2160, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2167, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2174, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2179, 8, 200, 1, 200, 1, 200, 3, 200, 2183, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2188, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2193, 8, 200, 1, 200, 1, 200, 3, 200, 2197, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2202, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2207, 8, 200, 1, 200, 1, 200, 3, 200, 2211, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2216, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2221, 8, 200, 1, 200, 1, 200, 3, 200, 2225, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2230, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2235, 8, 200, 1, 200, 1, 200, 3, 200, 2239, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2246, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2251, 8, 200, 1, 200, 1, 200, 3, 200, 2255, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2260, 8, 200, 1, 200, 1, 200, 3, 200, 2264, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2269, 8, 200, 1, 200, 1, 200, 3, 200, 2273, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2278, 8, 200, 1, 200, 1, 200, 3, 200, 2282, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2287, 8, 200, 1, 200, 1, 200, 3, 200, 2291, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2298, 8, 200, 1, 200, 1, 200, 3, 200, 2302, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2307, 8, 200, 1, 200, 1, 200, 3, 200, 2311, 8, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2317, 8, 200, 3, 200, 2319, 8, 200, 1, 201, 1, 201, 1, 201, 3, 201, 2324, 8, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2329, 8, 201, 1, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2335, 8, 201, 1, 201, 1, 201, 3, 201, 2339, 8, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2344, 8, 201, 1, 201, 1, 201, 3, 201, 2348, 8, 201, 1, 201, 1, 201, 3, 201, 2352, 8, 201, 1, 201, 1, 201, 3, 201, 2356, 8, 201, 3, 201, 2358, 8, 201, 1, 202, 1, 202, 1, 202, 5, 202, 2363, 8, 202, 10, 202, 12, 202, 2366, 9, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 5, 202, 2374, 8, 202, 10, 202, 12, 202, 2377, 9, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 5, 202, 2385, 8, 202, 10, 202, 12, 202, 2388, 9, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 2395, 8, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 3, 203, 2406, 8, 203, 1, 204, 1, 204, 3, 204, 2410, 8, 204, 1, 204, 1, 204, 1, 204, 3, 204, 2415, 8, 204, 1, 204, 1, 204, 3, 204, 2419, 8, 204, 1, 205, 5, 205, 2422, 8, 205, 10, 205, 12, 205, 2425, 9, 205, 1, 205, 1, 205, 1, 205, 5, 205, 2430, 8, 205, 10, 205, 12, 205, 2433, 9, 205, 1, 205, 5, 205, 2436, 8, 205, 10, 205, 12, 205, 2439, 9, 205, 1, 205, 3, 205, 2442, 8, 205, 1, 206, 1, 206, 3, 206, 2446, 8, 206, 1, 207, 1, 207, 3, 207, 2450, 8, 207, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2456, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2462, 8, 208, 3, 208, 2464, 8, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 2476, 8, 209, 1, 210, 1, 210, 5, 210, 2480, 8, 210, 10, 210, 12, 210, 2483, 9, 210, 1, 211, 5, 211, 2486, 8, 211, 10, 211, 12, 211, 2489, 9, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 2510, 8, 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, 3, 213, 2525, 8, 213, 1, 214, 1, 214, 1, 214, 3, 214, 2530, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2537, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2542, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2549, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2554, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2561, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2566, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2573, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2578, 8, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2587, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 2592, 8, 214, 1, 214, 1, 214, 3, 214, 2596, 8, 214, 1, 215, 1, 215, 1, 215, 5, 215, 2601, 8, 215, 10, 215, 12, 215, 2604, 9, 215, 1, 216, 1, 216, 1, 216, 3, 216, 2609, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2616, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2623, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2630, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2638, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2645, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 2653, 8, 216, 1, 217, 1, 217, 3, 217, 2657, 8, 217, 1, 217, 1, 217, 3, 217, 2661, 8, 217, 3, 217, 2663, 8, 217, 1, 218, 1, 218, 3, 218, 2667, 8, 218, 1, 218, 1, 218, 3, 218, 2671, 8, 218, 3, 218, 2673, 8, 218, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 3, 221, 2688, 8, 221, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 3, 224, 2703, 8, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 5, 225, 2713, 8, 225, 10, 225, 12, 225, 2716, 9, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 5, 225, 2724, 8, 225, 10, 225, 12, 225, 2727, 9, 225, 1, 225, 1, 225, 1, 225, 3, 225, 2732, 8, 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, 5, 226, 2746, 8, 226, 10, 226, 12, 226, 2749, 9, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 5, 227, 2760, 8, 227, 10, 227, 12, 227, 2763, 9, 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, 228, 1, 228, 1, 228, 1, 228, 5, 228, 2781, 8, 228, 10, 228, 12, 228, 2784, 9, 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, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 3, 229, 2805, 8, 229, 5, 229, 2807, 8, 229, 10, 229, 12, 229, 2810, 9, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 5, 230, 2821, 8, 230, 10, 230, 12, 230, 2824, 9, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 2832, 8, 231, 10, 231, 12, 231, 2835, 9, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 5, 232, 2843, 8, 232, 10, 232, 12, 232, 2846, 9, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 5, 233, 2854, 8, 233, 10, 233, 12, 233, 2857, 9, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 5, 234, 2865, 8, 234, 10, 234, 12, 234, 2868, 9, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 5, 235, 2876, 8, 235, 10, 235, 12, 235, 2879, 9, 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, 3, 236, 2894, 8, 236, 1, 237, 1, 237, 3, 237, 2898, 8, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 3, 239, 2907, 8, 239, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 3, 242, 2917, 8, 242, 1, 242, 1, 242, 3, 242, 2921, 8, 242, 1, 243, 1, 243, 1, 243, 5, 243, 2926, 8, 243, 10, 243, 12, 243, 2929, 9, 243, 1, 243, 1, 243, 1, 243, 5, 243, 2934, 8, 243, 10, 243, 12, 243, 2937, 9, 243, 3, 243, 2939, 8, 243, 1, 244, 5, 244, 2942, 8, 244, 10, 244, 12, 244, 2945, 9, 244, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 2951, 8, 244, 1, 245, 1, 245, 3, 245, 2955, 8, 245, 1, 246, 1, 246, 3, 246, 2959, 8, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 0, 10, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 249, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 0, 9, 2, 0, 1, 3, 5, 17, 6, 0, 1, 3, 5, 6, 8, 8, 10, 10, 12, 14, 16, 16, 2, 0, 1, 3, 5, 16, 1, 0, 69, 75, 5, 0, 22, 22, 25, 25, 44, 44, 46, 46, 54, 54, 2, 0, 31, 31, 37, 37, 2, 0, 13, 13, 55, 55, 2, 0, 57, 57, 60, 60, 2, 0, 88, 88, 112, 122, 3227, 0, 498, 1, 0, 0, 0, 2, 503, 1, 0, 0, 0, 4, 507, 1, 0, 0, 0, 6, 511, 1, 0, 0, 0, 8, 513, 1, 0, 0, 0, 10, 515, 1, 0, 0, 0, 12, 517, 1, 0, 0, 0, 14, 519, 1, 0, 0, 0, 16, 524, 1, 0, 0, 0, 18, 533, 1, 0, 0, 0, 20, 535, 1, 0, 0, 0, 22, 537, 1, 0, 0, 0, 24, 542, 1, 0, 0, 0, 26, 544, 1, 0, 0, 0, 28, 561, 1, 0, 0, 0, 30, 610, 1, 0, 0, 0, 32, 612, 1, 0, 0, 0, 34, 617, 1, 0, 0, 0, 36, 631, 1, 0, 0, 0, 38, 636, 1, 0, 0, 0, 40, 657, 1, 0, 0, 0, 42, 664, 1, 0, 0, 0, 44, 666, 1, 0, 0, 0, 46, 677, 1, 0, 0, 0, 48, 680, 1, 0, 0, 0, 50, 684, 1, 0, 0, 0, 52, 694, 1, 0, 0, 0, 54, 699, 1, 0, 0, 0, 56, 710, 1, 0, 0, 0, 58, 712, 1, 0, 0, 0, 60, 717, 1, 0, 0, 0, 62, 722, 1, 0, 0, 0, 64, 727, 1, 0, 0, 0, 66, 735, 1, 0, 0, 0, 68, 739, 1, 0, 0, 0, 70, 741, 1, 0, 0, 0, 72, 748, 1, 0, 0, 0, 74, 751, 1, 0, 0, 0, 76, 768, 1, 0, 0, 0, 78, 776, 1, 0, 0, 0, 80, 790, 1, 0, 0, 0, 82, 796, 1, 0, 0, 0, 84, 798, 1, 0, 0, 0, 86, 802, 1, 0, 0, 0, 88, 808, 1, 0, 0, 0, 90, 815, 1, 0, 0, 0, 92, 825, 1, 0, 0, 0, 94, 830, 1, 0, 0, 0, 96, 911, 1, 0, 0, 0, 98, 913, 1, 0, 0, 0, 100, 918, 1, 0, 0, 0, 102, 923, 1, 0, 0, 0, 104, 952, 1, 0, 0, 0, 106, 954, 1, 0, 0, 0, 108, 958, 1, 0, 0, 0, 110, 966, 1, 0, 0, 0, 112, 969, 1, 0, 0, 0, 114, 972, 1, 0, 0, 0, 116, 980, 1, 0, 0, 0, 118, 989, 1, 0, 0, 0, 120, 1002, 1, 0, 0, 0, 122, 1009, 1, 0, 0, 0, 124, 1014, 1, 0, 0, 0, 126, 1029, 1, 0, 0, 0, 128, 1031, 1, 0, 0, 0, 130, 1039, 1, 0, 0, 0, 132, 1044, 1, 0, 0, 0, 134, 1050, 1, 0, 0, 0, 136, 1054, 1, 0, 0, 0, 138, 1058, 1, 0, 0, 0, 140, 1063, 1, 0, 0, 0, 142, 1073, 1, 0, 0, 0, 144, 1082, 1, 0, 0, 0, 146, 1115, 1, 0, 0, 0, 148, 1117, 1, 0, 0, 0, 150, 1119, 1, 0, 0, 0, 152, 1124, 1, 0, 0, 0, 154, 1131, 1, 0, 0, 0, 156, 1147, 1, 0, 0, 0, 158, 1156, 1, 0, 0, 0, 160, 1165, 1, 0, 0, 0, 162, 1167, 1, 0, 0, 0, 164, 1184, 1, 0, 0, 0, 166, 1195, 1, 0, 0, 0, 168, 1213, 1, 0, 0, 0, 170, 1218, 1, 0, 0, 0, 172, 1233, 1, 0, 0, 0, 174, 1235, 1, 0, 0, 0, 176, 1238, 1, 0, 0, 0, 178, 1248, 1, 0, 0, 0, 180, 1252, 1, 0, 0, 0, 182, 1254, 1, 0, 0, 0, 184, 1256, 1, 0, 0, 0, 186, 1262, 1, 0, 0, 0, 188, 1275, 1, 0, 0, 0, 190, 1278, 1, 0, 0, 0, 192, 1292, 1, 0, 0, 0, 194, 1294, 1, 0, 0, 0, 196, 1329, 1, 0, 0, 0, 198, 1334, 1, 0, 0, 0, 200, 1344, 1, 0, 0, 0, 202, 1356, 1, 0, 0, 0, 204, 1367, 1, 0, 0, 0, 206, 1381, 1, 0, 0, 0, 208, 1383, 1, 0, 0, 0, 210, 1393, 1, 0, 0, 0, 212, 1407, 1, 0, 0, 0, 214, 1413, 1, 0, 0, 0, 216, 1431, 1, 0, 0, 0, 218, 1436, 1, 0, 0, 0, 220, 1449, 1, 0, 0, 0, 222, 1451, 1, 0, 0, 0, 224, 1462, 1, 0, 0, 0, 226, 1467, 1, 0, 0, 0, 228, 1475, 1, 0, 0, 0, 230, 1480, 1, 0, 0, 0, 232, 1505, 1, 0, 0, 0, 234, 1507, 1, 0, 0, 0, 236, 1510, 1, 0, 0, 0, 238, 1519, 1, 0, 0, 0, 240, 1533, 1, 0, 0, 0, 242, 1538, 1, 0, 0, 0, 244, 1549, 1, 0, 0, 0, 246, 1554, 1, 0, 0, 0, 248, 1567, 1, 0, 0, 0, 250, 1572, 1, 0, 0, 0, 252, 1580, 1, 0, 0, 0, 254, 1594, 1, 0, 0, 0, 256, 1599, 1, 0, 0, 0, 258, 1617, 1, 0, 0, 0, 260, 1619, 1, 0, 0, 0, 262, 1625, 1, 0, 0, 0, 264, 1627, 1, 0, 0, 0, 266, 1635, 1, 0, 0, 0, 268, 1643, 1, 0, 0, 0, 270, 1650, 1, 0, 0, 0, 272, 1652, 1, 0, 0, 0, 274, 1661, 1, 0, 0, 0, 276, 1669, 1, 0, 0, 0, 278, 1672, 1, 0, 0, 0, 280, 1678, 1, 0, 0, 0, 282, 1687, 1, 0, 0, 0, 284, 1695, 1, 0, 0, 0, 286, 1701, 1, 0, 0, 0, 288, 1711, 1, 0, 0, 0, 290, 1715, 1, 0, 0, 0, 292, 1720, 1, 0, 0, 0, 294, 1728, 1, 0, 0, 0, 296, 1730, 1, 0, 0, 0, 298, 1739, 1, 0, 0, 0, 300, 1746, 1, 0, 0, 0, 302, 1761, 1, 0, 0, 0, 304, 1763, 1, 0, 0, 0, 306, 1765, 1, 0, 0, 0, 308, 1769, 1, 0, 0, 0, 310, 1773, 1, 0, 0, 0, 312, 1783, 1, 0, 0, 0, 314, 1785, 1, 0, 0, 0, 316, 1791, 1, 0, 0, 0, 318, 1799, 1, 0, 0, 0, 320, 1807, 1, 0, 0, 0, 322, 1815, 1, 0, 0, 0, 324, 1847, 1, 0, 0, 0, 326, 1849, 1, 0, 0, 0, 328, 1858, 1, 0, 0, 0, 330, 1880, 1, 0, 0, 0, 332, 1882, 1, 0, 0, 0, 334, 1884, 1, 0, 0, 0, 336, 1890, 1, 0, 0, 0, 338, 1896, 1, 0, 0, 0, 340, 1906, 1, 0, 0, 0, 342, 1910, 1, 0, 0, 0, 344, 1912, 1, 0, 0, 0, 346, 1928, 1, 0, 0, 0, 348, 1946, 1, 0, 0, 0, 350, 1948, 1, 0, 0, 0, 352, 1950, 1, 0, 0, 0, 354, 1958, 1, 0, 0, 0, 356, 1966, 1, 0, 0, 0, 358, 1974, 1, 0, 0, 0, 360, 1980, 1, 0, 0, 0, 362, 1986, 1, 0, 0, 0, 364, 1992, 1, 0, 0, 0, 366, 1996, 1, 0, 0, 0, 368, 2018, 1, 0, 0, 0, 370, 2020, 1, 0, 0, 0, 372, 2027, 1, 0, 0, 0, 374, 2036, 1, 0, 0, 0, 376, 2042, 1, 0, 0, 0, 378, 2050, 1, 0, 0, 0, 380, 2053, 1, 0, 0, 0, 382, 2062, 1, 0, 0, 0, 384, 2069, 1, 0, 0, 0, 386, 2079, 1, 0, 0, 0, 388, 2083, 1, 0, 0, 0, 390, 2085, 1, 0, 0, 0, 392, 2089, 1, 0, 0, 0, 394, 2091, 1, 0, 0, 0, 396, 2095, 1, 0, 0, 0, 398, 2099, 1, 0, 0, 0, 400, 2318, 1, 0, 0, 0, 402, 2357, 1, 0, 0, 0, 404, 2394, 1, 0, 0, 0, 406, 2405, 1, 0, 0, 0, 408, 2407, 1, 0, 0, 0, 410, 2423, 1, 0, 0, 0, 412, 2445, 1, 0, 0, 0, 414, 2449, 1, 0, 0, 0, 416, 2463, 1, 0, 0, 0, 418, 2475, 1, 0, 0, 0, 420, 2477, 1, 0, 0, 0, 422, 2487, 1, 0, 0, 0, 424, 2509, 1, 0, 0, 0, 426, 2524, 1, 0, 0, 0, 428, 2595, 1, 0, 0, 0, 430, 2597, 1, 0, 0, 0, 432, 2652, 1, 0, 0, 0, 434, 2662, 1, 0, 0, 0, 436, 2672, 1, 0, 0, 0, 438, 2674, 1, 0, 0, 0, 440, 2677, 1, 0, 0, 0, 442, 2687, 1, 0, 0, 0, 444, 2689, 1, 0, 0, 0, 446, 2692, 1, 0, 0, 0, 448, 2702, 1, 0, 0, 0, 450, 2731, 1, 0, 0, 0, 452, 2733, 1, 0, 0, 0, 454, 2750, 1, 0, 0, 0, 456, 2764, 1, 0, 0, 0, 458, 2785, 1, 0, 0, 0, 460, 2811, 1, 0, 0, 0, 462, 2825, 1, 0, 0, 0, 464, 2836, 1, 0, 0, 0, 466, 2847, 1, 0, 0, 0, 468, 2858, 1, 0, 0, 0, 470, 2869, 1, 0, 0, 0, 472, 2893, 1, 0, 0, 0, 474, 2897, 1, 0, 0, 0, 476, 2899, 1, 0, 0, 0, 478, 2906, 1, 0, 0, 0, 480, 2908, 1, 0, 0, 0, 482, 2910, 1, 0, 0, 0, 484, 2920, 1, 0, 0, 0, 486, 2938, 1, 0, 0, 0, 488, 2950, 1, 0, 0, 0, 490, 2954, 1, 0, 0, 0, 492, 2958, 1, 0, 0, 0, 494, 2960, 1, 0, 0, 0, 496, 2966, 1, 0, 0, 0, 498, 499, 3, 72, 36, 0, 499, 500, 5, 0, 0, 1, 500, 1, 1, 0, 0, 0, 501, 504, 5, 123, 0, 0, 502, 504, 3, 8, 4, 0, 503, 501, 1, 0, 0, 0, 503, 502, 1, 0, 0, 0, 504, 3, 1, 0, 0, 0, 505, 508, 5, 123, 0, 0, 506, 508, 3, 10, 5, 0, 507, 505, 1, 0, 0, 0, 507, 506, 1, 0, 0, 0, 508, 5, 1, 0, 0, 0, 509, 512, 5, 123, 0, 0, 510, 512, 3, 12, 6, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 7, 1, 0, 0, 0, 513, 514, 7, 0, 0, 0, 514, 9, 1, 0, 0, 0, 515, 516, 7, 1, 0, 0, 516, 11, 1, 0, 0, 0, 517, 518, 7, 2, 0, 0, 518, 13, 1, 0, 0, 0, 519, 520, 7, 3, 0, 0, 520, 15, 1, 0, 0, 0, 521, 523, 3, 262, 131, 0, 522, 521, 1, 0, 0, 0, 523, 526, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 529, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 527, 530, 3, 18, 9, 0, 528, 530, 5, 20, 0, 0, 529, 527, 1, 0, 0, 0, 529, 528, 1, 0, 0, 0, 530, 17, 1, 0, 0, 0, 531, 534, 3, 20, 10, 0, 532, 534, 3, 22, 11, 0, 533, 531, 1, 0, 0, 0, 533, 532, 1, 0, 0, 0, 534, 19, 1, 0, 0, 0, 535, 536, 7, 4, 0, 0, 536, 21, 1, 0, 0, 0, 537, 538, 7, 5, 0, 0, 538, 23, 1, 0, 0, 0, 539, 543, 3, 28, 14, 0, 540, 543, 3, 34, 17, 0, 541, 543, 3, 36, 18, 0, 542, 539, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 542, 541, 1, 0, 0, 0, 543, 25, 1, 0, 0, 0, 544, 548, 5, 84, 0, 0, 545, 547, 3, 262, 131, 0, 546, 545, 1, 0, 0, 0, 547, 550, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 551, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 553, 3, 4, 2, 0, 552, 554, 3, 48, 24, 0, 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 556, 1, 0, 0, 0, 555, 557, 3, 26, 13, 0, 556, 555, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 27, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 5, 84, 0, 0, 560, 562, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 566, 1, 0, 0, 0, 563, 565, 3, 262, 131, 0, 564, 563, 1, 0, 0, 0, 565, 568, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 569, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 569, 571, 3, 4, 2, 0, 570, 572, 3, 48, 24, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 574, 1, 0, 0, 0, 573, 575, 3, 26, 13, 0, 574, 573, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 29, 1, 0, 0, 0, 576, 578, 3, 262, 131, 0, 577, 576, 1, 0, 0, 0, 578, 581, 1, 0, 0, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 582, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 582, 584, 3, 4, 2, 0, 583, 585, 3, 48, 24, 0, 584, 583, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 611, 1, 0, 0, 0, 586, 587, 3, 60, 30, 0, 587, 591, 5, 84, 0, 0, 588, 590, 3, 262, 131, 0, 589, 588, 1, 0, 0, 0, 590, 593, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 594, 596, 3, 4, 2, 0, 595, 597, 3, 48, 24, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 611, 1, 0, 0, 0, 598, 599, 3, 28, 14, 0, 599, 603, 5, 84, 0, 0, 600, 602, 3, 262, 131, 0, 601, 600, 1, 0, 0, 0, 602, 605, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 606, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 606, 608, 3, 4, 2, 0, 607, 609, 3, 48, 24, 0, 608, 607, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 611, 1, 0, 0, 0, 610, 579, 1, 0, 0, 0, 610, 586, 1, 0, 0, 0, 610, 598, 1, 0, 0, 0, 611, 31, 1, 0, 0, 0, 612, 613, 3, 30, 15, 0, 613, 33, 1, 0, 0, 0, 614, 616, 3, 262, 131, 0, 615, 614, 1, 0, 0, 0, 616, 619, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 620, 621, 3, 4, 2, 0, 621, 35, 1, 0, 0, 0, 622, 623, 3, 16, 8, 0, 623, 624, 3, 38, 19, 0, 624, 632, 1, 0, 0, 0, 625, 626, 3, 30, 15, 0, 626, 627, 3, 38, 19, 0, 627, 632, 1, 0, 0, 0, 628, 629, 3, 34, 17, 0, 629, 630, 3, 38, 19, 0, 630, 632, 1, 0, 0, 0, 631, 622, 1, 0, 0, 0, 631, 625, 1, 0, 0, 0, 631, 628, 1, 0, 0, 0, 632, 37, 1, 0, 0, 0, 633, 635, 3, 262, 131, 0, 634, 633, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 640, 5, 80, 0, 0, 640, 651, 5, 81, 0, 0, 641, 643, 3, 262, 131, 0, 642, 641, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 642, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 647, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 647, 648, 5, 80, 0, 0, 648, 650, 5, 81, 0, 0, 649, 644, 1, 0, 0, 0, 650, 653, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 651, 652, 1, 0, 0, 0, 652, 39, 1, 0, 0, 0, 653, 651, 1, 0, 0, 0, 654, 656, 3, 42, 21, 0, 655, 654, 1, 0, 0, 0, 656, 659, 1, 0, 0, 0, 657, 655, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 660, 1, 0, 0, 0, 659, 657, 1, 0, 0, 0, 660, 662, 3, 4, 2, 0, 661, 663, 3, 44, 22, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 41, 1, 0, 0, 0, 664, 665, 3, 262, 131, 0, 665, 43, 1, 0, 0, 0, 666, 675, 5, 34, 0, 0, 667, 676, 3, 34, 17, 0, 668, 672, 3, 28, 14, 0, 669, 671, 3, 46, 23, 0, 670, 669, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 676, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 675, 667, 1, 0, 0, 0, 675, 668, 1, 0, 0, 0, 676, 45, 1, 0, 0, 0, 677, 678, 5, 108, 0, 0, 678, 679, 3, 32, 16, 0, 679, 47, 1, 0, 0, 0, 680, 681, 5, 90, 0, 0, 681, 682, 3, 50, 25, 0, 682, 683, 5, 89, 0, 0, 683, 49, 1, 0, 0, 0, 684, 689, 3, 52, 26, 0, 685, 686, 5, 83, 0, 0, 686, 688, 3, 52, 26, 0, 687, 685, 1, 0, 0, 0, 688, 691, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 51, 1, 0, 0, 0, 691, 689, 1, 0, 0, 0, 692, 695, 3, 24, 12, 0, 693, 695, 3, 54, 27, 0, 694, 692, 1, 0, 0, 0, 694, 693, 1, 0, 0, 0, 695, 53, 1, 0, 0, 0, 696, 698, 3, 262, 131, 0, 697, 696, 1, 0, 0, 0, 698, 701, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 702, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 702, 704, 5, 93, 0, 0, 703, 705, 3, 56, 28, 0, 704, 703, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 55, 1, 0, 0, 0, 706, 707, 5, 34, 0, 0, 707, 711, 3, 24, 12, 0, 708, 709, 5, 57, 0, 0, 709, 711, 3, 24, 12, 0, 710, 706, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 711, 57, 1, 0, 0, 0, 712, 715, 3, 2, 1, 0, 713, 714, 5, 84, 0, 0, 714, 716, 3, 58, 29, 0, 715, 713, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 59, 1, 0, 0, 0, 717, 720, 3, 2, 1, 0, 718, 719, 5, 84, 0, 0, 719, 721, 3, 60, 30, 0, 720, 718, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 61, 1, 0, 0, 0, 722, 725, 3, 60, 30, 0, 723, 724, 5, 84, 0, 0, 724, 726, 3, 4, 2, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 63, 1, 0, 0, 0, 727, 730, 3, 2, 1, 0, 728, 729, 5, 84, 0, 0, 729, 731, 3, 64, 32, 0, 730, 728, 1, 0, 0, 0, 730, 731, 1, 0, 0, 0, 731, 65, 1, 0, 0, 0, 732, 733, 3, 70, 35, 0, 733, 734, 5, 84, 0, 0, 734, 736, 1, 0, 0, 0, 735, 732, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 738, 3, 2, 1, 0, 738, 67, 1, 0, 0, 0, 739, 740, 3, 6, 3, 0, 740, 69, 1, 0, 0, 0, 741, 744, 3, 2, 1, 0, 742, 743, 5, 84, 0, 0, 743, 745, 3, 70, 35, 0, 744, 742, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 71, 1, 0, 0, 0, 746, 749, 3, 74, 37, 0, 747, 749, 3, 76, 38, 0, 748, 746, 1, 0, 0, 0, 748, 747, 1, 0, 0, 0, 749, 73, 1, 0, 0, 0, 750, 752, 3, 78, 39, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 756, 1, 0, 0, 0, 753, 755, 3, 82, 41, 0, 754, 753, 1, 0, 0, 0, 755, 758, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 762, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 759, 761, 3, 92, 46, 0, 760, 759, 1, 0, 0, 0, 761, 764, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 75, 1, 0, 0, 0, 764, 762, 1, 0, 0, 0, 765, 767, 3, 82, 41, 0, 766, 765, 1, 0, 0, 0, 767, 770, 1, 0, 0, 0, 768, 766, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 771, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 771, 772, 3, 94, 47, 0, 772, 77, 1, 0, 0, 0, 773, 775, 3, 80, 40, 0, 774, 773, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 779, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 779, 780, 5, 49, 0, 0, 780, 785, 3, 2, 1, 0, 781, 782, 5, 84, 0, 0, 782, 784, 3, 2, 1, 0, 783, 781, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 788, 789, 5, 82, 0, 0, 789, 79, 1, 0, 0, 0, 790, 791, 3, 262, 131, 0, 791, 81, 1, 0, 0, 0, 792, 797, 3, 84, 42, 0, 793, 797, 3, 86, 43, 0, 794, 797, 3, 88, 44, 0, 795, 797, 3, 90, 45, 0, 796, 792, 1, 0, 0, 0, 796, 793, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 796, 795, 1, 0, 0, 0, 797, 83, 1, 0, 0, 0, 798, 799, 5, 42, 0, 0, 799, 800, 3, 62, 31, 0, 800, 801, 5, 82, 0, 0, 801, 85, 1, 0, 0, 0, 802, 803, 5, 42, 0, 0, 803, 804, 3, 64, 32, 0, 804, 805, 5, 84, 0, 0, 805, 806, 5, 106, 0, 0, 806, 807, 5, 82, 0, 0, 807, 87, 1, 0, 0, 0, 808, 809, 5, 42, 0, 0, 809, 810, 5, 55, 0, 0, 810, 811, 3, 62, 31, 0, 811, 812, 5, 84, 0, 0, 812, 813, 3, 2, 1, 0, 813, 814, 5, 82, 0, 0, 814, 89, 1, 0, 0, 0, 815, 816, 5, 42, 0, 0, 816, 817, 5, 55, 0, 0, 817, 818, 3, 62, 31, 0, 818, 819, 5, 84, 0, 0, 819, 820, 5, 106, 0, 0, 820, 821, 5, 82, 0, 0, 821, 91, 1, 0, 0, 0, 822, 826, 3, 100, 50, 0, 823, 826, 3, 228, 114, 0, 824, 826, 5, 82, 0, 0, 825, 822, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 825, 824, 1, 0, 0, 0, 826, 93, 1, 0, 0, 0, 827, 829, 3, 262, 131, 0, 828, 827, 1, 0, 0, 0, 829, 832, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 834, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 835, 5, 5, 0, 0, 834, 833, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 837, 5, 2, 0, 0, 837, 842, 3, 2, 1, 0, 838, 839, 5, 84, 0, 0, 839, 841, 3, 2, 1, 0, 840, 838, 1, 0, 0, 0, 841, 844, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 845, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 845, 849, 5, 78, 0, 0, 846, 848, 3, 96, 48, 0, 847, 846, 1, 0, 0, 0, 848, 851, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 852, 853, 5, 79, 0, 0, 853, 95, 1, 0, 0, 0, 854, 858, 5, 10, 0, 0, 855, 857, 3, 98, 49, 0, 856, 855, 1, 0, 0, 0, 857, 860, 1, 0, 0, 0, 858, 856, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 861, 1, 0, 0, 0, 860, 858, 1, 0, 0, 0, 861, 862, 3, 58, 29, 0, 862, 863, 5, 82, 0, 0, 863, 912, 1, 0, 0, 0, 864, 865, 5, 1, 0, 0, 865, 875, 3, 60, 30, 0, 866, 867, 5, 12, 0, 0, 867, 872, 3, 58, 29, 0, 868, 869, 5, 83, 0, 0, 869, 871, 3, 58, 29, 0, 870, 868, 1, 0, 0, 0, 871, 874, 1, 0, 0, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 876, 1, 0, 0, 0, 874, 872, 1, 0, 0, 0, 875, 866, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 877, 1, 0, 0, 0, 877, 878, 5, 82, 0, 0, 878, 912, 1, 0, 0, 0, 879, 880, 5, 6, 0, 0, 880, 890, 3, 60, 30, 0, 881, 882, 5, 12, 0, 0, 882, 887, 3, 58, 29, 0, 883, 884, 5, 83, 0, 0, 884, 886, 3, 58, 29, 0, 885, 883, 1, 0, 0, 0, 886, 889, 1, 0, 0, 0, 887, 885, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 891, 1, 0, 0, 0, 889, 887, 1, 0, 0, 0, 890, 881, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 893, 5, 82, 0, 0, 893, 912, 1, 0, 0, 0, 894, 895, 5, 14, 0, 0, 895, 896, 3, 62, 31, 0, 896, 897, 5, 82, 0, 0, 897, 912, 1, 0, 0, 0, 898, 899, 5, 8, 0, 0, 899, 900, 3, 62, 31, 0, 900, 901, 5, 16, 0, 0, 901, 906, 3, 62, 31, 0, 902, 903, 5, 83, 0, 0, 903, 905, 3, 62, 31, 0, 904, 902, 1, 0, 0, 0, 905, 908, 1, 0, 0, 0, 906, 904, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 909, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 909, 910, 5, 82, 0, 0, 910, 912, 1, 0, 0, 0, 911, 854, 1, 0, 0, 0, 911, 864, 1, 0, 0, 0, 911, 879, 1, 0, 0, 0, 911, 894, 1, 0, 0, 0, 911, 898, 1, 0, 0, 0, 912, 97, 1, 0, 0, 0, 913, 914, 7, 6, 0, 0, 914, 99, 1, 0, 0, 0, 915, 919, 3, 102, 51, 0, 916, 919, 3, 198, 99, 0, 917, 919, 3, 210, 105, 0, 918, 915, 1, 0, 0, 0, 918, 916, 1, 0, 0, 0, 918, 917, 1, 0, 0, 0, 919, 101, 1, 0, 0, 0, 920, 922, 3, 104, 52, 0, 921, 920, 1, 0, 0, 0, 922, 925, 1, 0, 0, 0, 923, 921, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 926, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 926, 927, 5, 26, 0, 0, 927, 929, 3, 4, 2, 0, 928, 930, 3, 106, 53, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 933, 3, 110, 55, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 935, 1, 0, 0, 0, 934, 936, 3, 112, 56, 0, 935, 934, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 939, 3, 116, 58, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 941, 3, 118, 59, 0, 941, 103, 1, 0, 0, 0, 942, 953, 3, 262, 131, 0, 943, 953, 5, 52, 0, 0, 944, 953, 5, 51, 0, 0, 945, 953, 5, 50, 0, 0, 946, 953, 5, 18, 0, 0, 947, 953, 5, 55, 0, 0, 948, 953, 5, 35, 0, 0, 949, 953, 5, 11, 0, 0, 950, 953, 5, 3, 0, 0, 951, 953, 5, 56, 0, 0, 952, 942, 1, 0, 0, 0, 952, 943, 1, 0, 0, 0, 952, 944, 1, 0, 0, 0, 952, 945, 1, 0, 0, 0, 952, 946, 1, 0, 0, 0, 952, 947, 1, 0, 0, 0, 952, 948, 1, 0, 0, 0, 952, 949, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 952, 951, 1, 0, 0, 0, 953, 105, 1, 0, 0, 0, 954, 955, 5, 90, 0, 0, 955, 956, 3, 108, 54, 0, 956, 957, 5, 89, 0, 0, 957, 107, 1, 0, 0, 0, 958, 963, 3, 40, 20, 0, 959, 960, 5, 83, 0, 0, 960, 962, 3, 40, 20, 0, 961, 959, 1, 0, 0, 0, 962, 965, 1, 0, 0, 0, 963, 961, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 109, 1, 0, 0, 0, 965, 963, 1, 0, 0, 0, 966, 967, 5, 34, 0, 0, 967, 968, 3, 30, 15, 0, 968, 111, 1, 0, 0, 0, 969, 970, 5, 41, 0, 0, 970, 971, 3, 114, 57, 0, 971, 113, 1, 0, 0, 0, 972, 977, 3, 32, 16, 0, 973, 974, 5, 83, 0, 0, 974, 976, 3, 32, 16, 0, 975, 973, 1, 0, 0, 0, 976, 979, 1, 0, 0, 0, 977, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 115, 1, 0, 0, 0, 979, 977, 1, 0, 0, 0, 980, 981, 5, 7, 0, 0, 981, 986, 3, 62, 31, 0, 982, 983, 5, 83, 0, 0, 983, 985, 3, 62, 31, 0, 984, 982, 1, 0, 0, 0, 985, 988, 1, 0, 0, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 117, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 989, 993, 5, 78, 0, 0, 990, 992, 3, 120, 60, 0, 991, 990, 1, 0, 0, 0, 992, 995, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 996, 1, 0, 0, 0, 995, 993, 1, 0, 0, 0, 996, 997, 5, 79, 0, 0, 997, 119, 1, 0, 0, 0, 998, 1003, 3, 122, 61, 0, 999, 1003, 3, 182, 91, 0, 1000, 1003, 3, 184, 92, 0, 1001, 1003, 3, 186, 93, 0, 1002, 998, 1, 0, 0, 0, 1002, 999, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1001, 1, 0, 0, 0, 1003, 121, 1, 0, 0, 0, 1004, 1010, 3, 124, 62, 0, 1005, 1010, 3, 154, 77, 0, 1006, 1010, 3, 100, 50, 0, 1007, 1010, 3, 228, 114, 0, 1008, 1010, 5, 82, 0, 0, 1009, 1004, 1, 0, 0, 0, 1009, 1005, 1, 0, 0, 0, 1009, 1006, 1, 0, 0, 0, 1009, 1007, 1, 0, 0, 0, 1009, 1008, 1, 0, 0, 0, 1010, 123, 1, 0, 0, 0, 1011, 1013, 3, 126, 63, 0, 1012, 1011, 1, 0, 0, 0, 1013, 1016, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1017, 1, 0, 0, 0, 1016, 1014, 1, 0, 0, 0, 1017, 1018, 3, 136, 68, 0, 1018, 1019, 3, 128, 64, 0, 1019, 1020, 5, 82, 0, 0, 1020, 125, 1, 0, 0, 0, 1021, 1030, 3, 262, 131, 0, 1022, 1030, 5, 52, 0, 0, 1023, 1030, 5, 51, 0, 0, 1024, 1030, 5, 50, 0, 0, 1025, 1030, 5, 55, 0, 0, 1026, 1030, 5, 35, 0, 0, 1027, 1030, 5, 63, 0, 0, 1028, 1030, 5, 66, 0, 0, 1029, 1021, 1, 0, 0, 0, 1029, 1022, 1, 0, 0, 0, 1029, 1023, 1, 0, 0, 0, 1029, 1024, 1, 0, 0, 0, 1029, 1025, 1, 0, 0, 0, 1029, 1026, 1, 0, 0, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1028, 1, 0, 0, 0, 1030, 127, 1, 0, 0, 0, 1031, 1036, 3, 130, 65, 0, 1032, 1033, 5, 83, 0, 0, 1033, 1035, 3, 130, 65, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1038, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 129, 1, 0, 0, 0, 1038, 1036, 1, 0, 0, 0, 1039, 1042, 3, 132, 66, 0, 1040, 1041, 5, 88, 0, 0, 1041, 1043, 3, 134, 67, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 131, 1, 0, 0, 0, 1044, 1046, 3, 2, 1, 0, 1045, 1047, 3, 38, 19, 0, 1046, 1045, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 133, 1, 0, 0, 0, 1048, 1051, 3, 396, 198, 0, 1049, 1051, 3, 280, 140, 0, 1050, 1048, 1, 0, 0, 0, 1050, 1049, 1, 0, 0, 0, 1051, 135, 1, 0, 0, 0, 1052, 1055, 3, 138, 69, 0, 1053, 1055, 3, 140, 70, 0, 1054, 1052, 1, 0, 0, 0, 1054, 1053, 1, 0, 0, 0, 1055, 137, 1, 0, 0, 0, 1056, 1059, 3, 18, 9, 0, 1057, 1059, 5, 20, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1057, 1, 0, 0, 0, 1059, 139, 1, 0, 0, 0, 1060, 1064, 3, 142, 71, 0, 1061, 1064, 3, 150, 75, 0, 1062, 1064, 3, 152, 76, 0, 1063, 1060, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1063, 1062, 1, 0, 0, 0, 1064, 141, 1, 0, 0, 0, 1065, 1066, 3, 60, 30, 0, 1066, 1070, 5, 84, 0, 0, 1067, 1069, 3, 262, 131, 0, 1068, 1067, 1, 0, 0, 0, 1069, 1072, 1, 0, 0, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1074, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1073, 1065, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1077, 3, 4, 2, 0, 1076, 1078, 3, 48, 24, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 3, 144, 72, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 143, 1, 0, 0, 0, 1082, 1086, 5, 84, 0, 0, 1083, 1085, 3, 262, 131, 0, 1084, 1083, 1, 0, 0, 0, 1085, 1088, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1086, 1, 0, 0, 0, 1089, 1091, 3, 4, 2, 0, 1090, 1092, 3, 48, 24, 0, 1091, 1090, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1094, 1, 0, 0, 0, 1093, 1095, 3, 144, 72, 0, 1094, 1093, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 145, 1, 0, 0, 0, 1096, 1098, 3, 4, 2, 0, 1097, 1099, 3, 48, 24, 0, 1098, 1097, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1116, 1, 0, 0, 0, 1100, 1103, 3, 60, 30, 0, 1101, 1103, 3, 142, 71, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1108, 5, 84, 0, 0, 1105, 1107, 3, 262, 131, 0, 1106, 1105, 1, 0, 0, 0, 1107, 1110, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1111, 1, 0, 0, 0, 1110, 1108, 1, 0, 0, 0, 1111, 1113, 3, 4, 2, 0, 1112, 1114, 3, 48, 24, 0, 1113, 1112, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1116, 1, 0, 0, 0, 1115, 1096, 1, 0, 0, 0, 1115, 1102, 1, 0, 0, 0, 1116, 147, 1, 0, 0, 0, 1117, 1118, 3, 146, 73, 0, 1118, 149, 1, 0, 0, 0, 1119, 1120, 3, 4, 2, 0, 1120, 151, 1, 0, 0, 0, 1121, 1125, 3, 138, 69, 0, 1122, 1125, 3, 142, 71, 0, 1123, 1125, 3, 150, 75, 0, 1124, 1121, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1123, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1127, 3, 38, 19, 0, 1127, 153, 1, 0, 0, 0, 1128, 1130, 3, 156, 78, 0, 1129, 1128, 1, 0, 0, 0, 1130, 1133, 1, 0, 0, 0, 1131, 1129, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, 0, 1132, 1134, 1, 0, 0, 0, 1133, 1131, 1, 0, 0, 0, 1134, 1135, 3, 158, 79, 0, 1135, 1136, 3, 180, 90, 0, 1136, 155, 1, 0, 0, 0, 1137, 1148, 3, 262, 131, 0, 1138, 1148, 5, 52, 0, 0, 1139, 1148, 5, 51, 0, 0, 1140, 1148, 5, 50, 0, 0, 1141, 1148, 5, 18, 0, 0, 1142, 1148, 5, 55, 0, 0, 1143, 1148, 5, 35, 0, 0, 1144, 1148, 5, 59, 0, 0, 1145, 1148, 5, 47, 0, 0, 1146, 1148, 5, 56, 0, 0, 1147, 1137, 1, 0, 0, 0, 1147, 1138, 1, 0, 0, 0, 1147, 1139, 1, 0, 0, 0, 1147, 1140, 1, 0, 0, 0, 1147, 1141, 1, 0, 0, 0, 1147, 1142, 1, 0, 0, 0, 1147, 1143, 1, 0, 0, 0, 1147, 1144, 1, 0, 0, 0, 1147, 1145, 1, 0, 0, 0, 1147, 1146, 1, 0, 0, 0, 1148, 157, 1, 0, 0, 0, 1149, 1153, 3, 106, 53, 0, 1150, 1152, 3, 262, 131, 0, 1151, 1150, 1, 0, 0, 0, 1152, 1155, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1157, 1, 0, 0, 0, 1155, 1153, 1, 0, 0, 0, 1156, 1149, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1159, 3, 160, 80, 0, 1159, 1161, 3, 162, 81, 0, 1160, 1162, 3, 174, 87, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 159, 1, 0, 0, 0, 1163, 1166, 3, 136, 68, 0, 1164, 1166, 5, 65, 0, 0, 1165, 1163, 1, 0, 0, 0, 1165, 1164, 1, 0, 0, 0, 1166, 161, 1, 0, 0, 0, 1167, 1168, 3, 2, 1, 0, 1168, 1172, 5, 76, 0, 0, 1169, 1170, 3, 164, 82, 0, 1170, 1171, 5, 83, 0, 0, 1171, 1173, 1, 0, 0, 0, 1172, 1169, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1175, 1, 0, 0, 0, 1174, 1176, 3, 166, 83, 0, 1175, 1174, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1177, 1, 0, 0, 0, 1177, 1179, 5, 77, 0, 0, 1178, 1180, 3, 38, 19, 0, 1179, 1178, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 163, 1, 0, 0, 0, 1181, 1183, 3, 262, 131, 0, 1182, 1181, 1, 0, 0, 0, 1183, 1186, 1, 0, 0, 0, 1184, 1182, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1187, 1, 0, 0, 0, 1186, 1184, 1, 0, 0, 0, 1187, 1191, 3, 136, 68, 0, 1188, 1189, 3, 2, 1, 0, 1189, 1190, 5, 84, 0, 0, 1190, 1192, 1, 0, 0, 0, 1191, 1188, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 1194, 5, 60, 0, 0, 1194, 165, 1, 0, 0, 0, 1195, 1200, 3, 168, 84, 0, 1196, 1197, 5, 83, 0, 0, 1197, 1199, 3, 168, 84, 0, 1198, 1196, 1, 0, 0, 0, 1199, 1202, 1, 0, 0, 0, 1200, 1198, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 167, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1203, 1205, 3, 172, 86, 0, 1204, 1203, 1, 0, 0, 0, 1205, 1208, 1, 0, 0, 0, 1206, 1204, 1, 0, 0, 0, 1206, 1207, 1, 0, 0, 0, 1207, 1209, 1, 0, 0, 0, 1208, 1206, 1, 0, 0, 0, 1209, 1210, 3, 136, 68, 0, 1210, 1211, 3, 132, 66, 0, 1211, 1214, 1, 0, 0, 0, 1212, 1214, 3, 170, 85, 0, 1213, 1206, 1, 0, 0, 0, 1213, 1212, 1, 0, 0, 0, 1214, 169, 1, 0, 0, 0, 1215, 1217, 3, 172, 86, 0, 1216, 1215, 1, 0, 0, 0, 1217, 1220, 1, 0, 0, 0, 1218, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1221, 1, 0, 0, 0, 1220, 1218, 1, 0, 0, 0, 1221, 1225, 3, 136, 68, 0, 1222, 1224, 3, 262, 131, 0, 1223, 1222, 1, 0, 0, 0, 1224, 1227, 1, 0, 0, 0, 1225, 1223, 1, 0, 0, 0, 1225, 1226, 1, 0, 0, 0, 1226, 1228, 1, 0, 0, 0, 1227, 1225, 1, 0, 0, 0, 1228, 1229, 5, 85, 0, 0, 1229, 1230, 3, 2, 1, 0, 1230, 171, 1, 0, 0, 0, 1231, 1234, 3, 262, 131, 0, 1232, 1234, 5, 35, 0, 0, 1233, 1231, 1, 0, 0, 0, 1233, 1232, 1, 0, 0, 0, 1234, 173, 1, 0, 0, 0, 1235, 1236, 5, 62, 0, 0, 1236, 1237, 3, 176, 88, 0, 1237, 175, 1, 0, 0, 0, 1238, 1243, 3, 178, 89, 0, 1239, 1240, 5, 83, 0, 0, 1240, 1242, 3, 178, 89, 0, 1241, 1239, 1, 0, 0, 0, 1242, 1245, 1, 0, 0, 0, 1243, 1241, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 177, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1246, 1249, 3, 30, 15, 0, 1247, 1249, 3, 34, 17, 0, 1248, 1246, 1, 0, 0, 0, 1248, 1247, 1, 0, 0, 0, 1249, 179, 1, 0, 0, 0, 1250, 1253, 3, 284, 142, 0, 1251, 1253, 5, 82, 0, 0, 1252, 1250, 1, 0, 0, 0, 1252, 1251, 1, 0, 0, 0, 1253, 181, 1, 0, 0, 0, 1254, 1255, 3, 284, 142, 0, 1255, 183, 1, 0, 0, 0, 1256, 1257, 5, 55, 0, 0, 1257, 1258, 3, 284, 142, 0, 1258, 185, 1, 0, 0, 0, 1259, 1261, 3, 188, 94, 0, 1260, 1259, 1, 0, 0, 0, 1261, 1264, 1, 0, 0, 0, 1262, 1260, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1265, 1, 0, 0, 0, 1264, 1262, 1, 0, 0, 0, 1265, 1267, 3, 190, 95, 0, 1266, 1268, 3, 174, 87, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1270, 3, 194, 97, 0, 1270, 187, 1, 0, 0, 0, 1271, 1276, 3, 262, 131, 0, 1272, 1276, 5, 52, 0, 0, 1273, 1276, 5, 51, 0, 0, 1274, 1276, 5, 50, 0, 0, 1275, 1271, 1, 0, 0, 0, 1275, 1272, 1, 0, 0, 0, 1275, 1273, 1, 0, 0, 0, 1275, 1274, 1, 0, 0, 0, 1276, 189, 1, 0, 0, 0, 1277, 1279, 3, 106, 53, 0, 1278, 1277, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1280, 1, 0, 0, 0, 1280, 1281, 3, 192, 96, 0, 1281, 1285, 5, 76, 0, 0, 1282, 1283, 3, 164, 82, 0, 1283, 1284, 5, 83, 0, 0, 1284, 1286, 1, 0, 0, 0, 1285, 1282, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1288, 1, 0, 0, 0, 1287, 1289, 3, 166, 83, 0, 1288, 1287, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 5, 77, 0, 0, 1291, 191, 1, 0, 0, 0, 1292, 1293, 3, 4, 2, 0, 1293, 193, 1, 0, 0, 0, 1294, 1296, 5, 78, 0, 0, 1295, 1297, 3, 196, 98, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1299, 1, 0, 0, 0, 1298, 1300, 3, 286, 143, 0, 1299, 1298, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1302, 5, 79, 0, 0, 1302, 195, 1, 0, 0, 0, 1303, 1305, 3, 48, 24, 0, 1304, 1303, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1307, 7, 7, 0, 0, 1307, 1309, 5, 76, 0, 0, 1308, 1310, 3, 430, 215, 0, 1309, 1308, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1312, 5, 77, 0, 0, 1312, 1330, 5, 82, 0, 0, 1313, 1316, 3, 66, 33, 0, 1314, 1316, 3, 398, 199, 0, 1315, 1313, 1, 0, 0, 0, 1315, 1314, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1317, 1319, 5, 84, 0, 0, 1318, 1320, 3, 48, 24, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1322, 5, 57, 0, 0, 1322, 1324, 5, 76, 0, 0, 1323, 1325, 3, 430, 215, 0, 1324, 1323, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1327, 5, 77, 0, 0, 1327, 1328, 5, 82, 0, 0, 1328, 1330, 1, 0, 0, 0, 1329, 1304, 1, 0, 0, 0, 1329, 1315, 1, 0, 0, 0, 1330, 197, 1, 0, 0, 0, 1331, 1333, 3, 104, 52, 0, 1332, 1331, 1, 0, 0, 0, 1333, 1336, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1334, 1335, 1, 0, 0, 0, 1335, 1337, 1, 0, 0, 0, 1336, 1334, 1, 0, 0, 0, 1337, 1338, 5, 33, 0, 0, 1338, 1340, 3, 4, 2, 0, 1339, 1341, 3, 112, 56, 0, 1340, 1339, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1342, 1, 0, 0, 0, 1342, 1343, 3, 200, 100, 0, 1343, 199, 1, 0, 0, 0, 1344, 1346, 5, 78, 0, 0, 1345, 1347, 3, 202, 101, 0, 1346, 1345, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 1, 0, 0, 0, 1348, 1350, 5, 83, 0, 0, 1349, 1348, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1352, 1, 0, 0, 0, 1351, 1353, 3, 208, 104, 0, 1352, 1351, 1, 0, 0, 0, 1352, 1353, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1355, 5, 79, 0, 0, 1355, 201, 1, 0, 0, 0, 1356, 1361, 3, 204, 102, 0, 1357, 1358, 5, 83, 0, 0, 1358, 1360, 3, 204, 102, 0, 1359, 1357, 1, 0, 0, 0, 1360, 1363, 1, 0, 0, 0, 1361, 1359, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 203, 1, 0, 0, 0, 1363, 1361, 1, 0, 0, 0, 1364, 1366, 3, 206, 103, 0, 1365, 1364, 1, 0, 0, 0, 1366, 1369, 1, 0, 0, 0, 1367, 1365, 1, 0, 0, 0, 1367, 1368, 1, 0, 0, 0, 1368, 1370, 1, 0, 0, 0, 1369, 1367, 1, 0, 0, 0, 1370, 1376, 3, 2, 1, 0, 1371, 1373, 5, 76, 0, 0, 1372, 1374, 3, 430, 215, 0, 1373, 1372, 1, 0, 0, 0, 1373, 1374, 1, 0, 0, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1377, 5, 77, 0, 0, 1376, 1371, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1379, 1, 0, 0, 0, 1378, 1380, 3, 118, 59, 0, 1379, 1378, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 205, 1, 0, 0, 0, 1381, 1382, 3, 262, 131, 0, 1382, 207, 1, 0, 0, 0, 1383, 1387, 5, 82, 0, 0, 1384, 1386, 3, 120, 60, 0, 1385, 1384, 1, 0, 0, 0, 1386, 1389, 1, 0, 0, 0, 1387, 1385, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 209, 1, 0, 0, 0, 1389, 1387, 1, 0, 0, 0, 1390, 1392, 3, 104, 52, 0, 1391, 1390, 1, 0, 0, 0, 1392, 1395, 1, 0, 0, 0, 1393, 1391, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1396, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1397, 5, 9, 0, 0, 1397, 1399, 3, 4, 2, 0, 1398, 1400, 3, 106, 53, 0, 1399, 1398, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 1401, 1, 0, 0, 0, 1401, 1403, 3, 212, 106, 0, 1402, 1404, 3, 112, 56, 0, 1403, 1402, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1406, 3, 222, 111, 0, 1406, 211, 1, 0, 0, 0, 1407, 1409, 5, 76, 0, 0, 1408, 1410, 3, 214, 107, 0, 1409, 1408, 1, 0, 0, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1411, 1, 0, 0, 0, 1411, 1412, 5, 77, 0, 0, 1412, 213, 1, 0, 0, 0, 1413, 1418, 3, 216, 108, 0, 1414, 1415, 5, 83, 0, 0, 1415, 1417, 3, 216, 108, 0, 1416, 1414, 1, 0, 0, 0, 1417, 1420, 1, 0, 0, 0, 1418, 1416, 1, 0, 0, 0, 1418, 1419, 1, 0, 0, 0, 1419, 215, 1, 0, 0, 0, 1420, 1418, 1, 0, 0, 0, 1421, 1423, 3, 220, 110, 0, 1422, 1421, 1, 0, 0, 0, 1423, 1426, 1, 0, 0, 0, 1424, 1422, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1427, 1, 0, 0, 0, 1426, 1424, 1, 0, 0, 0, 1427, 1428, 3, 136, 68, 0, 1428, 1429, 3, 2, 1, 0, 1429, 1432, 1, 0, 0, 0, 1430, 1432, 3, 218, 109, 0, 1431, 1424, 1, 0, 0, 0, 1431, 1430, 1, 0, 0, 0, 1432, 217, 1, 0, 0, 0, 1433, 1435, 3, 220, 110, 0, 1434, 1433, 1, 0, 0, 0, 1435, 1438, 1, 0, 0, 0, 1436, 1434, 1, 0, 0, 0, 1436, 1437, 1, 0, 0, 0, 1437, 1439, 1, 0, 0, 0, 1438, 1436, 1, 0, 0, 0, 1439, 1443, 3, 136, 68, 0, 1440, 1442, 3, 262, 131, 0, 1441, 1440, 1, 0, 0, 0, 1442, 1445, 1, 0, 0, 0, 1443, 1441, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1446, 1, 0, 0, 0, 1445, 1443, 1, 0, 0, 0, 1446, 1447, 5, 85, 0, 0, 1447, 1448, 3, 2, 1, 0, 1448, 219, 1, 0, 0, 0, 1449, 1450, 3, 262, 131, 0, 1450, 221, 1, 0, 0, 0, 1451, 1455, 5, 78, 0, 0, 1452, 1454, 3, 224, 112, 0, 1453, 1452, 1, 0, 0, 0, 1454, 1457, 1, 0, 0, 0, 1455, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1458, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1458, 1459, 5, 79, 0, 0, 1459, 223, 1, 0, 0, 0, 1460, 1463, 3, 120, 60, 0, 1461, 1463, 3, 226, 113, 0, 1462, 1460, 1, 0, 0, 0, 1462, 1461, 1, 0, 0, 0, 1463, 225, 1, 0, 0, 0, 1464, 1466, 3, 188, 94, 0, 1465, 1464, 1, 0, 0, 0, 1466, 1469, 1, 0, 0, 0, 1467, 1465, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1470, 1, 0, 0, 0, 1469, 1467, 1, 0, 0, 0, 1470, 1471, 3, 192, 96, 0, 1471, 1472, 3, 194, 97, 0, 1472, 227, 1, 0, 0, 0, 1473, 1476, 3, 230, 115, 0, 1474, 1476, 3, 250, 125, 0, 1475, 1473, 1, 0, 0, 0, 1475, 1474, 1, 0, 0, 0, 1476, 229, 1, 0, 0, 0, 1477, 1479, 3, 232, 116, 0, 1478, 1477, 1, 0, 0, 0, 1479, 1482, 1, 0, 0, 0, 1480, 1478, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1483, 1, 0, 0, 0, 1482, 1480, 1, 0, 0, 0, 1483, 1484, 5, 45, 0, 0, 1484, 1486, 3, 4, 2, 0, 1485, 1487, 3, 106, 53, 0, 1486, 1485, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1490, 3, 234, 117, 0, 1489, 1488, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1492, 1, 0, 0, 0, 1491, 1493, 3, 236, 118, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 1495, 3, 238, 119, 0, 1495, 231, 1, 0, 0, 0, 1496, 1506, 3, 262, 131, 0, 1497, 1506, 5, 52, 0, 0, 1498, 1506, 5, 51, 0, 0, 1499, 1506, 5, 50, 0, 0, 1500, 1506, 5, 18, 0, 0, 1501, 1506, 5, 55, 0, 0, 1502, 1506, 5, 11, 0, 0, 1503, 1506, 5, 3, 0, 0, 1504, 1506, 5, 56, 0, 0, 1505, 1496, 1, 0, 0, 0, 1505, 1497, 1, 0, 0, 0, 1505, 1498, 1, 0, 0, 0, 1505, 1499, 1, 0, 0, 0, 1505, 1500, 1, 0, 0, 0, 1505, 1501, 1, 0, 0, 0, 1505, 1502, 1, 0, 0, 0, 1505, 1503, 1, 0, 0, 0, 1505, 1504, 1, 0, 0, 0, 1506, 233, 1, 0, 0, 0, 1507, 1508, 5, 34, 0, 0, 1508, 1509, 3, 114, 57, 0, 1509, 235, 1, 0, 0, 0, 1510, 1511, 5, 7, 0, 0, 1511, 1516, 3, 62, 31, 0, 1512, 1513, 5, 83, 0, 0, 1513, 1515, 3, 62, 31, 0, 1514, 1512, 1, 0, 0, 0, 1515, 1518, 1, 0, 0, 0, 1516, 1514, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 237, 1, 0, 0, 0, 1518, 1516, 1, 0, 0, 0, 1519, 1523, 5, 78, 0, 0, 1520, 1522, 3, 240, 120, 0, 1521, 1520, 1, 0, 0, 0, 1522, 1525, 1, 0, 0, 0, 1523, 1521, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1526, 1, 0, 0, 0, 1525, 1523, 1, 0, 0, 0, 1526, 1527, 5, 79, 0, 0, 1527, 239, 1, 0, 0, 0, 1528, 1534, 3, 242, 121, 0, 1529, 1534, 3, 246, 123, 0, 1530, 1534, 3, 100, 50, 0, 1531, 1534, 3, 228, 114, 0, 1532, 1534, 5, 82, 0, 0, 1533, 1528, 1, 0, 0, 0, 1533, 1529, 1, 0, 0, 0, 1533, 1530, 1, 0, 0, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1532, 1, 0, 0, 0, 1534, 241, 1, 0, 0, 0, 1535, 1537, 3, 244, 122, 0, 1536, 1535, 1, 0, 0, 0, 1537, 1540, 1, 0, 0, 0, 1538, 1536, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1541, 1, 0, 0, 0, 1540, 1538, 1, 0, 0, 0, 1541, 1542, 3, 136, 68, 0, 1542, 1543, 3, 128, 64, 0, 1543, 1544, 5, 82, 0, 0, 1544, 243, 1, 0, 0, 0, 1545, 1550, 3, 262, 131, 0, 1546, 1550, 5, 52, 0, 0, 1547, 1550, 5, 55, 0, 0, 1548, 1550, 5, 35, 0, 0, 1549, 1545, 1, 0, 0, 0, 1549, 1546, 1, 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1548, 1, 0, 0, 0, 1550, 245, 1, 0, 0, 0, 1551, 1553, 3, 248, 124, 0, 1552, 1551, 1, 0, 0, 0, 1553, 1556, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1557, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1557, 1558, 3, 158, 79, 0, 1558, 1559, 3, 180, 90, 0, 1559, 247, 1, 0, 0, 0, 1560, 1568, 3, 262, 131, 0, 1561, 1568, 5, 52, 0, 0, 1562, 1568, 5, 50, 0, 0, 1563, 1568, 5, 18, 0, 0, 1564, 1568, 5, 29, 0, 0, 1565, 1568, 5, 55, 0, 0, 1566, 1568, 5, 56, 0, 0, 1567, 1560, 1, 0, 0, 0, 1567, 1561, 1, 0, 0, 0, 1567, 1562, 1, 0, 0, 0, 1567, 1563, 1, 0, 0, 0, 1567, 1564, 1, 0, 0, 0, 1567, 1565, 1, 0, 0, 0, 1567, 1566, 1, 0, 0, 0, 1568, 249, 1, 0, 0, 0, 1569, 1571, 3, 232, 116, 0, 1570, 1569, 1, 0, 0, 0, 1571, 1574, 1, 0, 0, 0, 1572, 1570, 1, 0, 0, 0, 1572, 1573, 1, 0, 0, 0, 1573, 1575, 1, 0, 0, 0, 1574, 1572, 1, 0, 0, 0, 1575, 1576, 5, 86, 0, 0, 1576, 1577, 5, 45, 0, 0, 1577, 1578, 3, 4, 2, 0, 1578, 1579, 3, 252, 126, 0, 1579, 251, 1, 0, 0, 0, 1580, 1584, 5, 78, 0, 0, 1581, 1583, 3, 254, 127, 0, 1582, 1581, 1, 0, 0, 0, 1583, 1586, 1, 0, 0, 0, 1584, 1582, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1587, 1, 0, 0, 0, 1586, 1584, 1, 0, 0, 0, 1587, 1588, 5, 79, 0, 0, 1588, 253, 1, 0, 0, 0, 1589, 1595, 3, 256, 128, 0, 1590, 1595, 3, 242, 121, 0, 1591, 1595, 3, 100, 50, 0, 1592, 1595, 3, 228, 114, 0, 1593, 1595, 5, 82, 0, 0, 1594, 1589, 1, 0, 0, 0, 1594, 1590, 1, 0, 0, 0, 1594, 1591, 1, 0, 0, 0, 1594, 1592, 1, 0, 0, 0, 1594, 1593, 1, 0, 0, 0, 1595, 255, 1, 0, 0, 0, 1596, 1598, 3, 258, 129, 0, 1597, 1596, 1, 0, 0, 0, 1598, 1601, 1, 0, 0, 0, 1599, 1597, 1, 0, 0, 0, 1599, 1600, 1, 0, 0, 0, 1600, 1602, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 1603, 3, 136, 68, 0, 1603, 1604, 3, 2, 1, 0, 1604, 1605, 5, 76, 0, 0, 1605, 1607, 5, 77, 0, 0, 1606, 1608, 3, 38, 19, 0, 1607, 1606, 1, 0, 0, 0, 1607, 1608, 1, 0, 0, 0, 1608, 1610, 1, 0, 0, 0, 1609, 1611, 3, 260, 130, 0, 1610, 1609, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1613, 5, 82, 0, 0, 1613, 257, 1, 0, 0, 0, 1614, 1618, 3, 262, 131, 0, 1615, 1618, 5, 52, 0, 0, 1616, 1618, 5, 18, 0, 0, 1617, 1614, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 259, 1, 0, 0, 0, 1619, 1620, 5, 29, 0, 0, 1620, 1621, 3, 270, 135, 0, 1621, 261, 1, 0, 0, 0, 1622, 1626, 3, 264, 132, 0, 1623, 1626, 3, 276, 138, 0, 1624, 1626, 3, 278, 139, 0, 1625, 1622, 1, 0, 0, 0, 1625, 1623, 1, 0, 0, 0, 1625, 1624, 1, 0, 0, 0, 1626, 263, 1, 0, 0, 0, 1627, 1628, 5, 86, 0, 0, 1628, 1629, 3, 62, 31, 0, 1629, 1631, 5, 76, 0, 0, 1630, 1632, 3, 266, 133, 0, 1631, 1630, 1, 0, 0, 0, 1631, 1632, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1634, 5, 77, 0, 0, 1634, 265, 1, 0, 0, 0, 1635, 1640, 3, 268, 134, 0, 1636, 1637, 5, 83, 0, 0, 1637, 1639, 3, 268, 134, 0, 1638, 1636, 1, 0, 0, 0, 1639, 1642, 1, 0, 0, 0, 1640, 1638, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 267, 1, 0, 0, 0, 1642, 1640, 1, 0, 0, 0, 1643, 1644, 3, 2, 1, 0, 1644, 1645, 5, 88, 0, 0, 1645, 1646, 3, 270, 135, 0, 1646, 269, 1, 0, 0, 0, 1647, 1651, 3, 472, 236, 0, 1648, 1651, 3, 272, 136, 0, 1649, 1651, 3, 262, 131, 0, 1650, 1647, 1, 0, 0, 0, 1650, 1648, 1, 0, 0, 0, 1650, 1649, 1, 0, 0, 0, 1651, 271, 1, 0, 0, 0, 1652, 1654, 5, 78, 0, 0, 1653, 1655, 3, 274, 137, 0, 1654, 1653, 1, 0, 0, 0, 1654, 1655, 1, 0, 0, 0, 1655, 1657, 1, 0, 0, 0, 1656, 1658, 5, 83, 0, 0, 1657, 1656, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1660, 5, 79, 0, 0, 1660, 273, 1, 0, 0, 0, 1661, 1666, 3, 270, 135, 0, 1662, 1663, 5, 83, 0, 0, 1663, 1665, 3, 270, 135, 0, 1664, 1662, 1, 0, 0, 0, 1665, 1668, 1, 0, 0, 0, 1666, 1664, 1, 0, 0, 0, 1666, 1667, 1, 0, 0, 0, 1667, 275, 1, 0, 0, 0, 1668, 1666, 1, 0, 0, 0, 1669, 1670, 5, 86, 0, 0, 1670, 1671, 3, 62, 31, 0, 1671, 277, 1, 0, 0, 0, 1672, 1673, 5, 86, 0, 0, 1673, 1674, 3, 62, 31, 0, 1674, 1675, 5, 76, 0, 0, 1675, 1676, 3, 270, 135, 0, 1676, 1677, 5, 77, 0, 0, 1677, 279, 1, 0, 0, 0, 1678, 1680, 5, 78, 0, 0, 1679, 1681, 3, 282, 141, 0, 1680, 1679, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1681, 1683, 1, 0, 0, 0, 1682, 1684, 5, 83, 0, 0, 1683, 1682, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1686, 5, 79, 0, 0, 1686, 281, 1, 0, 0, 0, 1687, 1692, 3, 134, 67, 0, 1688, 1689, 5, 83, 0, 0, 1689, 1691, 3, 134, 67, 0, 1690, 1688, 1, 0, 0, 0, 1691, 1694, 1, 0, 0, 0, 1692, 1690, 1, 0, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 283, 1, 0, 0, 0, 1694, 1692, 1, 0, 0, 0, 1695, 1697, 5, 78, 0, 0, 1696, 1698, 3, 286, 143, 0, 1697, 1696, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 1699, 1, 0, 0, 0, 1699, 1700, 5, 79, 0, 0, 1700, 285, 1, 0, 0, 0, 1701, 1705, 3, 288, 144, 0, 1702, 1704, 3, 288, 144, 0, 1703, 1702, 1, 0, 0, 0, 1704, 1707, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 287, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1712, 3, 290, 145, 0, 1709, 1712, 3, 296, 148, 0, 1710, 1712, 3, 298, 149, 0, 1711, 1708, 1, 0, 0, 0, 1711, 1709, 1, 0, 0, 0, 1711, 1710, 1, 0, 0, 0, 1712, 289, 1, 0, 0, 0, 1713, 1716, 3, 100, 50, 0, 1714, 1716, 3, 230, 115, 0, 1715, 1713, 1, 0, 0, 0, 1715, 1714, 1, 0, 0, 0, 1716, 291, 1, 0, 0, 0, 1717, 1719, 3, 172, 86, 0, 1718, 1717, 1, 0, 0, 0, 1719, 1722, 1, 0, 0, 0, 1720, 1718, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1723, 1, 0, 0, 0, 1722, 1720, 1, 0, 0, 0, 1723, 1724, 3, 294, 147, 0, 1724, 1725, 3, 128, 64, 0, 1725, 293, 1, 0, 0, 0, 1726, 1729, 3, 136, 68, 0, 1727, 1729, 5, 15, 0, 0, 1728, 1726, 1, 0, 0, 0, 1728, 1727, 1, 0, 0, 0, 1729, 295, 1, 0, 0, 0, 1730, 1731, 3, 292, 146, 0, 1731, 1732, 5, 82, 0, 0, 1732, 297, 1, 0, 0, 0, 1733, 1740, 3, 302, 151, 0, 1734, 1740, 3, 306, 153, 0, 1735, 1740, 3, 314, 157, 0, 1736, 1740, 3, 316, 158, 0, 1737, 1740, 3, 334, 167, 0, 1738, 1740, 3, 340, 170, 0, 1739, 1733, 1, 0, 0, 0, 1739, 1734, 1, 0, 0, 0, 1739, 1735, 1, 0, 0, 0, 1739, 1736, 1, 0, 0, 0, 1739, 1737, 1, 0, 0, 0, 1739, 1738, 1, 0, 0, 0, 1740, 299, 1, 0, 0, 0, 1741, 1747, 3, 302, 151, 0, 1742, 1747, 3, 308, 154, 0, 1743, 1747, 3, 318, 159, 0, 1744, 1747, 3, 336, 168, 0, 1745, 1747, 3, 342, 171, 0, 1746, 1741, 1, 0, 0, 0, 1746, 1742, 1, 0, 0, 0, 1746, 1743, 1, 0, 0, 0, 1746, 1744, 1, 0, 0, 0, 1746, 1745, 1, 0, 0, 0, 1747, 301, 1, 0, 0, 0, 1748, 1762, 3, 284, 142, 0, 1749, 1762, 3, 304, 152, 0, 1750, 1762, 3, 310, 155, 0, 1751, 1762, 3, 320, 160, 0, 1752, 1762, 3, 322, 161, 0, 1753, 1762, 3, 338, 169, 0, 1754, 1762, 3, 358, 179, 0, 1755, 1762, 3, 360, 180, 0, 1756, 1762, 3, 362, 181, 0, 1757, 1762, 3, 366, 183, 0, 1758, 1762, 3, 364, 182, 0, 1759, 1762, 3, 368, 184, 0, 1760, 1762, 3, 390, 195, 0, 1761, 1748, 1, 0, 0, 0, 1761, 1749, 1, 0, 0, 0, 1761, 1750, 1, 0, 0, 0, 1761, 1751, 1, 0, 0, 0, 1761, 1752, 1, 0, 0, 0, 1761, 1753, 1, 0, 0, 0, 1761, 1754, 1, 0, 0, 0, 1761, 1755, 1, 0, 0, 0, 1761, 1756, 1, 0, 0, 0, 1761, 1757, 1, 0, 0, 0, 1761, 1758, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1761, 1760, 1, 0, 0, 0, 1762, 303, 1, 0, 0, 0, 1763, 1764, 5, 82, 0, 0, 1764, 305, 1, 0, 0, 0, 1765, 1766, 3, 2, 1, 0, 1766, 1767, 5, 94, 0, 0, 1767, 1768, 3, 298, 149, 0, 1768, 307, 1, 0, 0, 0, 1769, 1770, 3, 2, 1, 0, 1770, 1771, 5, 94, 0, 0, 1771, 1772, 3, 300, 150, 0, 1772, 309, 1, 0, 0, 0, 1773, 1774, 3, 312, 156, 0, 1774, 1775, 5, 82, 0, 0, 1775, 311, 1, 0, 0, 0, 1776, 1784, 3, 476, 238, 0, 1777, 1784, 3, 444, 222, 0, 1778, 1784, 3, 446, 223, 0, 1779, 1784, 3, 438, 219, 0, 1780, 1784, 3, 440, 220, 0, 1781, 1784, 3, 428, 214, 0, 1782, 1784, 3, 406, 203, 0, 1783, 1776, 1, 0, 0, 0, 1783, 1777, 1, 0, 0, 0, 1783, 1778, 1, 0, 0, 0, 1783, 1779, 1, 0, 0, 0, 1783, 1780, 1, 0, 0, 0, 1783, 1781, 1, 0, 0, 0, 1783, 1782, 1, 0, 0, 0, 1784, 313, 1, 0, 0, 0, 1785, 1786, 5, 39, 0, 0, 1786, 1787, 5, 76, 0, 0, 1787, 1788, 3, 396, 198, 0, 1788, 1789, 5, 77, 0, 0, 1789, 1790, 3, 298, 149, 0, 1790, 315, 1, 0, 0, 0, 1791, 1792, 5, 39, 0, 0, 1792, 1793, 5, 76, 0, 0, 1793, 1794, 3, 396, 198, 0, 1794, 1795, 5, 77, 0, 0, 1795, 1796, 3, 300, 150, 0, 1796, 1797, 5, 32, 0, 0, 1797, 1798, 3, 298, 149, 0, 1798, 317, 1, 0, 0, 0, 1799, 1800, 5, 39, 0, 0, 1800, 1801, 5, 76, 0, 0, 1801, 1802, 3, 396, 198, 0, 1802, 1803, 5, 77, 0, 0, 1803, 1804, 3, 300, 150, 0, 1804, 1805, 5, 32, 0, 0, 1805, 1806, 3, 300, 150, 0, 1806, 319, 1, 0, 0, 0, 1807, 1808, 5, 19, 0, 0, 1808, 1811, 3, 396, 198, 0, 1809, 1810, 5, 94, 0, 0, 1810, 1812, 3, 396, 198, 0, 1811, 1809, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 1813, 1, 0, 0, 0, 1813, 1814, 5, 82, 0, 0, 1814, 321, 1, 0, 0, 0, 1815, 1816, 5, 58, 0, 0, 1816, 1817, 5, 76, 0, 0, 1817, 1818, 3, 396, 198, 0, 1818, 1819, 5, 77, 0, 0, 1819, 1820, 3, 324, 162, 0, 1820, 323, 1, 0, 0, 0, 1821, 1822, 5, 78, 0, 0, 1822, 1826, 3, 326, 163, 0, 1823, 1825, 3, 326, 163, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1828, 1, 0, 0, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1830, 5, 79, 0, 0, 1830, 1848, 1, 0, 0, 0, 1831, 1835, 5, 78, 0, 0, 1832, 1834, 3, 328, 164, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1837, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1843, 1, 0, 0, 0, 1837, 1835, 1, 0, 0, 0, 1838, 1839, 3, 330, 165, 0, 1839, 1840, 5, 94, 0, 0, 1840, 1842, 1, 0, 0, 0, 1841, 1838, 1, 0, 0, 0, 1842, 1845, 1, 0, 0, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1846, 1, 0, 0, 0, 1845, 1843, 1, 0, 0, 0, 1846, 1848, 5, 79, 0, 0, 1847, 1821, 1, 0, 0, 0, 1847, 1831, 1, 0, 0, 0, 1848, 325, 1, 0, 0, 0, 1849, 1850, 3, 330, 165, 0, 1850, 1856, 5, 95, 0, 0, 1851, 1852, 3, 396, 198, 0, 1852, 1853, 5, 82, 0, 0, 1853, 1857, 1, 0, 0, 0, 1854, 1857, 3, 284, 142, 0, 1855, 1857, 3, 364, 182, 0, 1856, 1851, 1, 0, 0, 0, 1856, 1854, 1, 0, 0, 0, 1856, 1855, 1, 0, 0, 0, 1857, 327, 1, 0, 0, 0, 1858, 1859, 3, 330, 165, 0, 1859, 1865, 5, 94, 0, 0, 1860, 1861, 3, 330, 165, 0, 1861, 1862, 5, 94, 0, 0, 1862, 1864, 1, 0, 0, 0, 1863, 1860, 1, 0, 0, 0, 1864, 1867, 1, 0, 0, 0, 1865, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1868, 1, 0, 0, 0, 1867, 1865, 1, 0, 0, 0, 1868, 1869, 3, 286, 143, 0, 1869, 329, 1, 0, 0, 0, 1870, 1871, 5, 23, 0, 0, 1871, 1876, 3, 332, 166, 0, 1872, 1873, 5, 83, 0, 0, 1873, 1875, 3, 332, 166, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1878, 1, 0, 0, 0, 1876, 1874, 1, 0, 0, 0, 1876, 1877, 1, 0, 0, 0, 1877, 1881, 1, 0, 0, 0, 1878, 1876, 1, 0, 0, 0, 1879, 1881, 5, 29, 0, 0, 1880, 1870, 1, 0, 0, 0, 1880, 1879, 1, 0, 0, 0, 1881, 331, 1, 0, 0, 0, 1882, 1883, 3, 472, 236, 0, 1883, 333, 1, 0, 0, 0, 1884, 1885, 5, 67, 0, 0, 1885, 1886, 5, 76, 0, 0, 1886, 1887, 3, 396, 198, 0, 1887, 1888, 5, 77, 0, 0, 1888, 1889, 3, 298, 149, 0, 1889, 335, 1, 0, 0, 0, 1890, 1891, 5, 67, 0, 0, 1891, 1892, 5, 76, 0, 0, 1892, 1893, 3, 396, 198, 0, 1893, 1894, 5, 77, 0, 0, 1894, 1895, 3, 300, 150, 0, 1895, 337, 1, 0, 0, 0, 1896, 1897, 5, 30, 0, 0, 1897, 1898, 3, 298, 149, 0, 1898, 1899, 5, 67, 0, 0, 1899, 1900, 5, 76, 0, 0, 1900, 1901, 3, 396, 198, 0, 1901, 1902, 5, 77, 0, 0, 1902, 1903, 5, 82, 0, 0, 1903, 339, 1, 0, 0, 0, 1904, 1907, 3, 344, 172, 0, 1905, 1907, 3, 354, 177, 0, 1906, 1904, 1, 0, 0, 0, 1906, 1905, 1, 0, 0, 0, 1907, 341, 1, 0, 0, 0, 1908, 1911, 3, 346, 173, 0, 1909, 1911, 3, 356, 178, 0, 1910, 1908, 1, 0, 0, 0, 1910, 1909, 1, 0, 0, 0, 1911, 343, 1, 0, 0, 0, 1912, 1913, 5, 38, 0, 0, 1913, 1915, 5, 76, 0, 0, 1914, 1916, 3, 348, 174, 0, 1915, 1914, 1, 0, 0, 0, 1915, 1916, 1, 0, 0, 0, 1916, 1917, 1, 0, 0, 0, 1917, 1919, 5, 82, 0, 0, 1918, 1920, 3, 396, 198, 0, 1919, 1918, 1, 0, 0, 0, 1919, 1920, 1, 0, 0, 0, 1920, 1921, 1, 0, 0, 0, 1921, 1923, 5, 82, 0, 0, 1922, 1924, 3, 350, 175, 0, 1923, 1922, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1926, 5, 77, 0, 0, 1926, 1927, 3, 298, 149, 0, 1927, 345, 1, 0, 0, 0, 1928, 1929, 5, 38, 0, 0, 1929, 1931, 5, 76, 0, 0, 1930, 1932, 3, 348, 174, 0, 1931, 1930, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1933, 1, 0, 0, 0, 1933, 1935, 5, 82, 0, 0, 1934, 1936, 3, 396, 198, 0, 1935, 1934, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1939, 5, 82, 0, 0, 1938, 1940, 3, 350, 175, 0, 1939, 1938, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 1942, 5, 77, 0, 0, 1942, 1943, 3, 300, 150, 0, 1943, 347, 1, 0, 0, 0, 1944, 1947, 3, 352, 176, 0, 1945, 1947, 3, 292, 146, 0, 1946, 1944, 1, 0, 0, 0, 1946, 1945, 1, 0, 0, 0, 1947, 349, 1, 0, 0, 0, 1948, 1949, 3, 352, 176, 0, 1949, 351, 1, 0, 0, 0, 1950, 1955, 3, 312, 156, 0, 1951, 1952, 5, 83, 0, 0, 1952, 1954, 3, 312, 156, 0, 1953, 1951, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 353, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1959, 5, 38, 0, 0, 1959, 1960, 5, 76, 0, 0, 1960, 1961, 3, 292, 146, 0, 1961, 1962, 5, 94, 0, 0, 1962, 1963, 3, 396, 198, 0, 1963, 1964, 5, 77, 0, 0, 1964, 1965, 3, 298, 149, 0, 1965, 355, 1, 0, 0, 0, 1966, 1967, 5, 38, 0, 0, 1967, 1968, 5, 76, 0, 0, 1968, 1969, 3, 292, 146, 0, 1969, 1970, 5, 94, 0, 0, 1970, 1971, 3, 396, 198, 0, 1971, 1972, 5, 77, 0, 0, 1972, 1973, 3, 300, 150, 0, 1973, 357, 1, 0, 0, 0, 1974, 1976, 5, 21, 0, 0, 1975, 1977, 3, 2, 1, 0, 1976, 1975, 1, 0, 0, 0, 1976, 1977, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1979, 5, 82, 0, 0, 1979, 359, 1, 0, 0, 0, 1980, 1982, 5, 28, 0, 0, 1981, 1983, 3, 2, 1, 0, 1982, 1981, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1985, 5, 82, 0, 0, 1985, 361, 1, 0, 0, 0, 1986, 1988, 5, 53, 0, 0, 1987, 1989, 3, 396, 198, 0, 1988, 1987, 1, 0, 0, 0, 1988, 1989, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1991, 5, 82, 0, 0, 1991, 363, 1, 0, 0, 0, 1992, 1993, 5, 61, 0, 0, 1993, 1994, 3, 396, 198, 0, 1994, 1995, 5, 82, 0, 0, 1995, 365, 1, 0, 0, 0, 1996, 1997, 5, 59, 0, 0, 1997, 1998, 5, 76, 0, 0, 1998, 1999, 3, 396, 198, 0, 1999, 2000, 5, 77, 0, 0, 2000, 2001, 3, 284, 142, 0, 2001, 367, 1, 0, 0, 0, 2002, 2003, 5, 64, 0, 0, 2003, 2004, 3, 284, 142, 0, 2004, 2005, 3, 370, 185, 0, 2005, 2019, 1, 0, 0, 0, 2006, 2007, 5, 64, 0, 0, 2007, 2008, 3, 284, 142, 0, 2008, 2009, 3, 378, 189, 0, 2009, 2019, 1, 0, 0, 0, 2010, 2011, 5, 64, 0, 0, 2011, 2013, 3, 284, 142, 0, 2012, 2014, 3, 370, 185, 0, 2013, 2012, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2016, 3, 378, 189, 0, 2016, 2019, 1, 0, 0, 0, 2017, 2019, 3, 380, 190, 0, 2018, 2002, 1, 0, 0, 0, 2018, 2006, 1, 0, 0, 0, 2018, 2010, 1, 0, 0, 0, 2018, 2017, 1, 0, 0, 0, 2019, 369, 1, 0, 0, 0, 2020, 2024, 3, 372, 186, 0, 2021, 2023, 3, 372, 186, 0, 2022, 2021, 1, 0, 0, 0, 2023, 2026, 1, 0, 0, 0, 2024, 2022, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 371, 1, 0, 0, 0, 2026, 2024, 1, 0, 0, 0, 2027, 2028, 5, 24, 0, 0, 2028, 2029, 5, 76, 0, 0, 2029, 2030, 3, 374, 187, 0, 2030, 2031, 5, 77, 0, 0, 2031, 2032, 3, 284, 142, 0, 2032, 373, 1, 0, 0, 0, 2033, 2035, 3, 172, 86, 0, 2034, 2033, 1, 0, 0, 0, 2035, 2038, 1, 0, 0, 0, 2036, 2034, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2039, 1, 0, 0, 0, 2038, 2036, 1, 0, 0, 0, 2039, 2040, 3, 376, 188, 0, 2040, 2041, 3, 132, 66, 0, 2041, 375, 1, 0, 0, 0, 2042, 2047, 3, 146, 73, 0, 2043, 2044, 5, 109, 0, 0, 2044, 2046, 3, 30, 15, 0, 2045, 2043, 1, 0, 0, 0, 2046, 2049, 1, 0, 0, 0, 2047, 2045, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 377, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2050, 2051, 5, 36, 0, 0, 2051, 2052, 3, 284, 142, 0, 2052, 379, 1, 0, 0, 0, 2053, 2054, 5, 64, 0, 0, 2054, 2055, 3, 382, 191, 0, 2055, 2057, 3, 284, 142, 0, 2056, 2058, 3, 370, 185, 0, 2057, 2056, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2060, 1, 0, 0, 0, 2059, 2061, 3, 378, 189, 0, 2060, 2059, 1, 0, 0, 0, 2060, 2061, 1, 0, 0, 0, 2061, 381, 1, 0, 0, 0, 2062, 2063, 5, 76, 0, 0, 2063, 2065, 3, 384, 192, 0, 2064, 2066, 5, 82, 0, 0, 2065, 2064, 1, 0, 0, 0, 2065, 2066, 1, 0, 0, 0, 2066, 2067, 1, 0, 0, 0, 2067, 2068, 5, 77, 0, 0, 2068, 383, 1, 0, 0, 0, 2069, 2074, 3, 386, 193, 0, 2070, 2071, 5, 82, 0, 0, 2071, 2073, 3, 386, 193, 0, 2072, 2070, 1, 0, 0, 0, 2073, 2076, 1, 0, 0, 0, 2074, 2072, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 385, 1, 0, 0, 0, 2076, 2074, 1, 0, 0, 0, 2077, 2080, 3, 292, 146, 0, 2078, 2080, 3, 388, 194, 0, 2079, 2077, 1, 0, 0, 0, 2079, 2078, 1, 0, 0, 0, 2080, 387, 1, 0, 0, 0, 2081, 2084, 3, 66, 33, 0, 2082, 2084, 3, 426, 213, 0, 2083, 2081, 1, 0, 0, 0, 2083, 2082, 1, 0, 0, 0, 2084, 389, 1, 0, 0, 0, 2085, 2086, 5, 17, 0, 0, 2086, 2087, 3, 396, 198, 0, 2087, 2088, 5, 82, 0, 0, 2088, 391, 1, 0, 0, 0, 2089, 2090, 3, 394, 197, 0, 2090, 393, 1, 0, 0, 0, 2091, 2092, 3, 292, 146, 0, 2092, 395, 1, 0, 0, 0, 2093, 2096, 3, 482, 241, 0, 2094, 2096, 3, 474, 237, 0, 2095, 2093, 1, 0, 0, 0, 2095, 2094, 1, 0, 0, 0, 2096, 397, 1, 0, 0, 0, 2097, 2100, 3, 400, 200, 0, 2098, 2100, 3, 414, 207, 0, 2099, 2097, 1, 0, 0, 0, 2099, 2098, 1, 0, 0, 0, 2100, 399, 1, 0, 0, 0, 2101, 2103, 3, 14, 7, 0, 2102, 2104, 3, 402, 201, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2319, 1, 0, 0, 0, 2105, 2107, 3, 404, 202, 0, 2106, 2108, 3, 402, 201, 0, 2107, 2106, 1, 0, 0, 0, 2107, 2108, 1, 0, 0, 0, 2108, 2319, 1, 0, 0, 0, 2109, 2111, 5, 60, 0, 0, 2110, 2112, 3, 402, 201, 0, 2111, 2110, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2319, 1, 0, 0, 0, 2113, 2114, 3, 62, 31, 0, 2114, 2115, 5, 84, 0, 0, 2115, 2117, 5, 60, 0, 0, 2116, 2118, 3, 402, 201, 0, 2117, 2116, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, 2319, 1, 0, 0, 0, 2119, 2120, 5, 76, 0, 0, 2120, 2121, 3, 396, 198, 0, 2121, 2123, 5, 77, 0, 0, 2122, 2124, 3, 402, 201, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2319, 1, 0, 0, 0, 2125, 2127, 3, 408, 204, 0, 2126, 2128, 3, 402, 201, 0, 2127, 2126, 1, 0, 0, 0, 2127, 2128, 1, 0, 0, 0, 2128, 2319, 1, 0, 0, 0, 2129, 2130, 3, 66, 33, 0, 2130, 2131, 5, 84, 0, 0, 2131, 2133, 3, 408, 204, 0, 2132, 2134, 3, 402, 201, 0, 2133, 2132, 1, 0, 0, 0, 2133, 2134, 1, 0, 0, 0, 2134, 2319, 1, 0, 0, 0, 2135, 2136, 3, 414, 207, 0, 2136, 2137, 5, 84, 0, 0, 2137, 2139, 3, 408, 204, 0, 2138, 2140, 3, 402, 201, 0, 2139, 2138, 1, 0, 0, 0, 2139, 2140, 1, 0, 0, 0, 2140, 2319, 1, 0, 0, 0, 2141, 2142, 3, 414, 207, 0, 2142, 2143, 5, 84, 0, 0, 2143, 2145, 3, 2, 1, 0, 2144, 2146, 3, 402, 201, 0, 2145, 2144, 1, 0, 0, 0, 2145, 2146, 1, 0, 0, 0, 2146, 2319, 1, 0, 0, 0, 2147, 2148, 5, 57, 0, 0, 2148, 2149, 5, 84, 0, 0, 2149, 2151, 3, 2, 1, 0, 2150, 2152, 3, 402, 201, 0, 2151, 2150, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2319, 1, 0, 0, 0, 2153, 2154, 3, 62, 31, 0, 2154, 2155, 5, 84, 0, 0, 2155, 2156, 5, 57, 0, 0, 2156, 2157, 5, 84, 0, 0, 2157, 2159, 3, 2, 1, 0, 2158, 2160, 3, 402, 201, 0, 2159, 2158, 1, 0, 0, 0, 2159, 2160, 1, 0, 0, 0, 2160, 2319, 1, 0, 0, 0, 2161, 2162, 3, 66, 33, 0, 2162, 2163, 5, 80, 0, 0, 2163, 2164, 3, 396, 198, 0, 2164, 2166, 5, 81, 0, 0, 2165, 2167, 3, 402, 201, 0, 2166, 2165, 1, 0, 0, 0, 2166, 2167, 1, 0, 0, 0, 2167, 2319, 1, 0, 0, 0, 2168, 2169, 3, 418, 209, 0, 2169, 2170, 5, 80, 0, 0, 2170, 2171, 3, 396, 198, 0, 2171, 2173, 5, 81, 0, 0, 2172, 2174, 3, 402, 201, 0, 2173, 2172, 1, 0, 0, 0, 2173, 2174, 1, 0, 0, 0, 2174, 2319, 1, 0, 0, 0, 2175, 2176, 3, 68, 34, 0, 2176, 2178, 5, 76, 0, 0, 2177, 2179, 3, 430, 215, 0, 2178, 2177, 1, 0, 0, 0, 2178, 2179, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 2182, 5, 77, 0, 0, 2181, 2183, 3, 402, 201, 0, 2182, 2181, 1, 0, 0, 0, 2182, 2183, 1, 0, 0, 0, 2183, 2319, 1, 0, 0, 0, 2184, 2185, 3, 62, 31, 0, 2185, 2187, 5, 84, 0, 0, 2186, 2188, 3, 48, 24, 0, 2187, 2186, 1, 0, 0, 0, 2187, 2188, 1, 0, 0, 0, 2188, 2189, 1, 0, 0, 0, 2189, 2190, 3, 2, 1, 0, 2190, 2192, 5, 76, 0, 0, 2191, 2193, 3, 430, 215, 0, 2192, 2191, 1, 0, 0, 0, 2192, 2193, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2196, 5, 77, 0, 0, 2195, 2197, 3, 402, 201, 0, 2196, 2195, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2197, 2319, 1, 0, 0, 0, 2198, 2199, 3, 66, 33, 0, 2199, 2201, 5, 84, 0, 0, 2200, 2202, 3, 48, 24, 0, 2201, 2200, 1, 0, 0, 0, 2201, 2202, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2204, 3, 2, 1, 0, 2204, 2206, 5, 76, 0, 0, 2205, 2207, 3, 430, 215, 0, 2206, 2205, 1, 0, 0, 0, 2206, 2207, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2210, 5, 77, 0, 0, 2209, 2211, 3, 402, 201, 0, 2210, 2209, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2319, 1, 0, 0, 0, 2212, 2213, 3, 414, 207, 0, 2213, 2215, 5, 84, 0, 0, 2214, 2216, 3, 48, 24, 0, 2215, 2214, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2218, 3, 2, 1, 0, 2218, 2220, 5, 76, 0, 0, 2219, 2221, 3, 430, 215, 0, 2220, 2219, 1, 0, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2224, 5, 77, 0, 0, 2223, 2225, 3, 402, 201, 0, 2224, 2223, 1, 0, 0, 0, 2224, 2225, 1, 0, 0, 0, 2225, 2319, 1, 0, 0, 0, 2226, 2227, 5, 57, 0, 0, 2227, 2229, 5, 84, 0, 0, 2228, 2230, 3, 48, 24, 0, 2229, 2228, 1, 0, 0, 0, 2229, 2230, 1, 0, 0, 0, 2230, 2231, 1, 0, 0, 0, 2231, 2232, 3, 2, 1, 0, 2232, 2234, 5, 76, 0, 0, 2233, 2235, 3, 430, 215, 0, 2234, 2233, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2236, 1, 0, 0, 0, 2236, 2238, 5, 77, 0, 0, 2237, 2239, 3, 402, 201, 0, 2238, 2237, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2319, 1, 0, 0, 0, 2240, 2241, 3, 62, 31, 0, 2241, 2242, 5, 84, 0, 0, 2242, 2243, 5, 57, 0, 0, 2243, 2245, 5, 84, 0, 0, 2244, 2246, 3, 48, 24, 0, 2245, 2244, 1, 0, 0, 0, 2245, 2246, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2248, 3, 2, 1, 0, 2248, 2250, 5, 76, 0, 0, 2249, 2251, 3, 430, 215, 0, 2250, 2249, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 2254, 5, 77, 0, 0, 2253, 2255, 3, 402, 201, 0, 2254, 2253, 1, 0, 0, 0, 2254, 2255, 1, 0, 0, 0, 2255, 2319, 1, 0, 0, 0, 2256, 2257, 3, 66, 33, 0, 2257, 2259, 5, 87, 0, 0, 2258, 2260, 3, 48, 24, 0, 2259, 2258, 1, 0, 0, 0, 2259, 2260, 1, 0, 0, 0, 2260, 2261, 1, 0, 0, 0, 2261, 2263, 3, 2, 1, 0, 2262, 2264, 3, 402, 201, 0, 2263, 2262, 1, 0, 0, 0, 2263, 2264, 1, 0, 0, 0, 2264, 2319, 1, 0, 0, 0, 2265, 2266, 3, 414, 207, 0, 2266, 2268, 5, 87, 0, 0, 2267, 2269, 3, 48, 24, 0, 2268, 2267, 1, 0, 0, 0, 2268, 2269, 1, 0, 0, 0, 2269, 2270, 1, 0, 0, 0, 2270, 2272, 3, 2, 1, 0, 2271, 2273, 3, 402, 201, 0, 2272, 2271, 1, 0, 0, 0, 2272, 2273, 1, 0, 0, 0, 2273, 2319, 1, 0, 0, 0, 2274, 2275, 3, 24, 12, 0, 2275, 2277, 5, 87, 0, 0, 2276, 2278, 3, 48, 24, 0, 2277, 2276, 1, 0, 0, 0, 2277, 2278, 1, 0, 0, 0, 2278, 2279, 1, 0, 0, 0, 2279, 2281, 3, 2, 1, 0, 2280, 2282, 3, 402, 201, 0, 2281, 2280, 1, 0, 0, 0, 2281, 2282, 1, 0, 0, 0, 2282, 2319, 1, 0, 0, 0, 2283, 2284, 5, 57, 0, 0, 2284, 2286, 5, 87, 0, 0, 2285, 2287, 3, 48, 24, 0, 2286, 2285, 1, 0, 0, 0, 2286, 2287, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2290, 3, 2, 1, 0, 2289, 2291, 3, 402, 201, 0, 2290, 2289, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2319, 1, 0, 0, 0, 2292, 2293, 3, 62, 31, 0, 2293, 2294, 5, 84, 0, 0, 2294, 2295, 5, 57, 0, 0, 2295, 2297, 5, 87, 0, 0, 2296, 2298, 3, 48, 24, 0, 2297, 2296, 1, 0, 0, 0, 2297, 2298, 1, 0, 0, 0, 2298, 2299, 1, 0, 0, 0, 2299, 2301, 3, 2, 1, 0, 2300, 2302, 3, 402, 201, 0, 2301, 2300, 1, 0, 0, 0, 2301, 2302, 1, 0, 0, 0, 2302, 2319, 1, 0, 0, 0, 2303, 2304, 3, 30, 15, 0, 2304, 2306, 5, 87, 0, 0, 2305, 2307, 3, 48, 24, 0, 2306, 2305, 1, 0, 0, 0, 2306, 2307, 1, 0, 0, 0, 2307, 2308, 1, 0, 0, 0, 2308, 2310, 5, 48, 0, 0, 2309, 2311, 3, 402, 201, 0, 2310, 2309, 1, 0, 0, 0, 2310, 2311, 1, 0, 0, 0, 2311, 2319, 1, 0, 0, 0, 2312, 2313, 3, 36, 18, 0, 2313, 2314, 5, 87, 0, 0, 2314, 2316, 5, 48, 0, 0, 2315, 2317, 3, 402, 201, 0, 2316, 2315, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2319, 1, 0, 0, 0, 2318, 2101, 1, 0, 0, 0, 2318, 2105, 1, 0, 0, 0, 2318, 2109, 1, 0, 0, 0, 2318, 2113, 1, 0, 0, 0, 2318, 2119, 1, 0, 0, 0, 2318, 2125, 1, 0, 0, 0, 2318, 2129, 1, 0, 0, 0, 2318, 2135, 1, 0, 0, 0, 2318, 2141, 1, 0, 0, 0, 2318, 2147, 1, 0, 0, 0, 2318, 2153, 1, 0, 0, 0, 2318, 2161, 1, 0, 0, 0, 2318, 2168, 1, 0, 0, 0, 2318, 2175, 1, 0, 0, 0, 2318, 2184, 1, 0, 0, 0, 2318, 2198, 1, 0, 0, 0, 2318, 2212, 1, 0, 0, 0, 2318, 2226, 1, 0, 0, 0, 2318, 2240, 1, 0, 0, 0, 2318, 2256, 1, 0, 0, 0, 2318, 2265, 1, 0, 0, 0, 2318, 2274, 1, 0, 0, 0, 2318, 2283, 1, 0, 0, 0, 2318, 2292, 1, 0, 0, 0, 2318, 2303, 1, 0, 0, 0, 2318, 2312, 1, 0, 0, 0, 2319, 401, 1, 0, 0, 0, 2320, 2321, 5, 84, 0, 0, 2321, 2323, 3, 408, 204, 0, 2322, 2324, 3, 402, 201, 0, 2323, 2322, 1, 0, 0, 0, 2323, 2324, 1, 0, 0, 0, 2324, 2358, 1, 0, 0, 0, 2325, 2326, 5, 84, 0, 0, 2326, 2328, 3, 2, 1, 0, 2327, 2329, 3, 402, 201, 0, 2328, 2327, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2358, 1, 0, 0, 0, 2330, 2331, 5, 80, 0, 0, 2331, 2332, 3, 396, 198, 0, 2332, 2334, 5, 81, 0, 0, 2333, 2335, 3, 402, 201, 0, 2334, 2333, 1, 0, 0, 0, 2334, 2335, 1, 0, 0, 0, 2335, 2358, 1, 0, 0, 0, 2336, 2338, 5, 84, 0, 0, 2337, 2339, 3, 48, 24, 0, 2338, 2337, 1, 0, 0, 0, 2338, 2339, 1, 0, 0, 0, 2339, 2340, 1, 0, 0, 0, 2340, 2341, 3, 2, 1, 0, 2341, 2343, 5, 76, 0, 0, 2342, 2344, 3, 430, 215, 0, 2343, 2342, 1, 0, 0, 0, 2343, 2344, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2347, 5, 77, 0, 0, 2346, 2348, 3, 402, 201, 0, 2347, 2346, 1, 0, 0, 0, 2347, 2348, 1, 0, 0, 0, 2348, 2358, 1, 0, 0, 0, 2349, 2351, 5, 87, 0, 0, 2350, 2352, 3, 48, 24, 0, 2351, 2350, 1, 0, 0, 0, 2351, 2352, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 2355, 3, 2, 1, 0, 2354, 2356, 3, 402, 201, 0, 2355, 2354, 1, 0, 0, 0, 2355, 2356, 1, 0, 0, 0, 2356, 2358, 1, 0, 0, 0, 2357, 2320, 1, 0, 0, 0, 2357, 2325, 1, 0, 0, 0, 2357, 2330, 1, 0, 0, 0, 2357, 2336, 1, 0, 0, 0, 2357, 2349, 1, 0, 0, 0, 2358, 403, 1, 0, 0, 0, 2359, 2364, 3, 62, 31, 0, 2360, 2361, 5, 80, 0, 0, 2361, 2363, 5, 81, 0, 0, 2362, 2360, 1, 0, 0, 0, 2363, 2366, 1, 0, 0, 0, 2364, 2362, 1, 0, 0, 0, 2364, 2365, 1, 0, 0, 0, 2365, 2367, 1, 0, 0, 0, 2366, 2364, 1, 0, 0, 0, 2367, 2368, 5, 84, 0, 0, 2368, 2369, 5, 26, 0, 0, 2369, 2395, 1, 0, 0, 0, 2370, 2375, 3, 18, 9, 0, 2371, 2372, 5, 80, 0, 0, 2372, 2374, 5, 81, 0, 0, 2373, 2371, 1, 0, 0, 0, 2374, 2377, 1, 0, 0, 0, 2375, 2373, 1, 0, 0, 0, 2375, 2376, 1, 0, 0, 0, 2376, 2378, 1, 0, 0, 0, 2377, 2375, 1, 0, 0, 0, 2378, 2379, 5, 84, 0, 0, 2379, 2380, 5, 26, 0, 0, 2380, 2395, 1, 0, 0, 0, 2381, 2386, 5, 20, 0, 0, 2382, 2383, 5, 80, 0, 0, 2383, 2385, 5, 81, 0, 0, 2384, 2382, 1, 0, 0, 0, 2385, 2388, 1, 0, 0, 0, 2386, 2384, 1, 0, 0, 0, 2386, 2387, 1, 0, 0, 0, 2387, 2389, 1, 0, 0, 0, 2388, 2386, 1, 0, 0, 0, 2389, 2390, 5, 84, 0, 0, 2390, 2395, 5, 26, 0, 0, 2391, 2392, 5, 65, 0, 0, 2392, 2393, 5, 84, 0, 0, 2393, 2395, 5, 26, 0, 0, 2394, 2359, 1, 0, 0, 0, 2394, 2370, 1, 0, 0, 0, 2394, 2381, 1, 0, 0, 0, 2394, 2391, 1, 0, 0, 0, 2395, 405, 1, 0, 0, 0, 2396, 2406, 3, 408, 204, 0, 2397, 2398, 3, 66, 33, 0, 2398, 2399, 5, 84, 0, 0, 2399, 2400, 3, 408, 204, 0, 2400, 2406, 1, 0, 0, 0, 2401, 2402, 3, 398, 199, 0, 2402, 2403, 5, 84, 0, 0, 2403, 2404, 3, 408, 204, 0, 2404, 2406, 1, 0, 0, 0, 2405, 2396, 1, 0, 0, 0, 2405, 2397, 1, 0, 0, 0, 2405, 2401, 1, 0, 0, 0, 2406, 407, 1, 0, 0, 0, 2407, 2409, 5, 48, 0, 0, 2408, 2410, 3, 48, 24, 0, 2409, 2408, 1, 0, 0, 0, 2409, 2410, 1, 0, 0, 0, 2410, 2411, 1, 0, 0, 0, 2411, 2412, 3, 410, 205, 0, 2412, 2414, 5, 76, 0, 0, 2413, 2415, 3, 430, 215, 0, 2414, 2413, 1, 0, 0, 0, 2414, 2415, 1, 0, 0, 0, 2415, 2416, 1, 0, 0, 0, 2416, 2418, 5, 77, 0, 0, 2417, 2419, 3, 118, 59, 0, 2418, 2417, 1, 0, 0, 0, 2418, 2419, 1, 0, 0, 0, 2419, 409, 1, 0, 0, 0, 2420, 2422, 3, 262, 131, 0, 2421, 2420, 1, 0, 0, 0, 2422, 2425, 1, 0, 0, 0, 2423, 2421, 1, 0, 0, 0, 2423, 2424, 1, 0, 0, 0, 2424, 2426, 1, 0, 0, 0, 2425, 2423, 1, 0, 0, 0, 2426, 2437, 3, 2, 1, 0, 2427, 2431, 5, 84, 0, 0, 2428, 2430, 3, 262, 131, 0, 2429, 2428, 1, 0, 0, 0, 2430, 2433, 1, 0, 0, 0, 2431, 2429, 1, 0, 0, 0, 2431, 2432, 1, 0, 0, 0, 2432, 2434, 1, 0, 0, 0, 2433, 2431, 1, 0, 0, 0, 2434, 2436, 3, 2, 1, 0, 2435, 2427, 1, 0, 0, 0, 2436, 2439, 1, 0, 0, 0, 2437, 2435, 1, 0, 0, 0, 2437, 2438, 1, 0, 0, 0, 2438, 2441, 1, 0, 0, 0, 2439, 2437, 1, 0, 0, 0, 2440, 2442, 3, 412, 206, 0, 2441, 2440, 1, 0, 0, 0, 2441, 2442, 1, 0, 0, 0, 2442, 411, 1, 0, 0, 0, 2443, 2446, 3, 48, 24, 0, 2444, 2446, 5, 4, 0, 0, 2445, 2443, 1, 0, 0, 0, 2445, 2444, 1, 0, 0, 0, 2446, 413, 1, 0, 0, 0, 2447, 2450, 3, 416, 208, 0, 2448, 2450, 3, 418, 209, 0, 2449, 2447, 1, 0, 0, 0, 2449, 2448, 1, 0, 0, 0, 2450, 415, 1, 0, 0, 0, 2451, 2452, 5, 48, 0, 0, 2452, 2453, 3, 16, 8, 0, 2453, 2455, 3, 420, 210, 0, 2454, 2456, 3, 38, 19, 0, 2455, 2454, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2464, 1, 0, 0, 0, 2457, 2458, 5, 48, 0, 0, 2458, 2459, 3, 30, 15, 0, 2459, 2461, 3, 420, 210, 0, 2460, 2462, 3, 38, 19, 0, 2461, 2460, 1, 0, 0, 0, 2461, 2462, 1, 0, 0, 0, 2462, 2464, 1, 0, 0, 0, 2463, 2451, 1, 0, 0, 0, 2463, 2457, 1, 0, 0, 0, 2464, 417, 1, 0, 0, 0, 2465, 2466, 5, 48, 0, 0, 2466, 2467, 3, 16, 8, 0, 2467, 2468, 3, 38, 19, 0, 2468, 2469, 3, 280, 140, 0, 2469, 2476, 1, 0, 0, 0, 2470, 2471, 5, 48, 0, 0, 2471, 2472, 3, 28, 14, 0, 2472, 2473, 3, 38, 19, 0, 2473, 2474, 3, 280, 140, 0, 2474, 2476, 1, 0, 0, 0, 2475, 2465, 1, 0, 0, 0, 2475, 2470, 1, 0, 0, 0, 2476, 419, 1, 0, 0, 0, 2477, 2481, 3, 422, 211, 0, 2478, 2480, 3, 422, 211, 0, 2479, 2478, 1, 0, 0, 0, 2480, 2483, 1, 0, 0, 0, 2481, 2479, 1, 0, 0, 0, 2481, 2482, 1, 0, 0, 0, 2482, 421, 1, 0, 0, 0, 2483, 2481, 1, 0, 0, 0, 2484, 2486, 3, 262, 131, 0, 2485, 2484, 1, 0, 0, 0, 2486, 2489, 1, 0, 0, 0, 2487, 2485, 1, 0, 0, 0, 2487, 2488, 1, 0, 0, 0, 2488, 2490, 1, 0, 0, 0, 2489, 2487, 1, 0, 0, 0, 2490, 2491, 5, 80, 0, 0, 2491, 2492, 3, 396, 198, 0, 2492, 2493, 5, 81, 0, 0, 2493, 423, 1, 0, 0, 0, 2494, 2495, 3, 66, 33, 0, 2495, 2496, 5, 80, 0, 0, 2496, 2497, 3, 396, 198, 0, 2497, 2498, 5, 81, 0, 0, 2498, 2510, 1, 0, 0, 0, 2499, 2500, 3, 400, 200, 0, 2500, 2501, 5, 80, 0, 0, 2501, 2502, 3, 396, 198, 0, 2502, 2503, 5, 81, 0, 0, 2503, 2510, 1, 0, 0, 0, 2504, 2505, 3, 418, 209, 0, 2505, 2506, 5, 80, 0, 0, 2506, 2507, 3, 396, 198, 0, 2507, 2508, 5, 81, 0, 0, 2508, 2510, 1, 0, 0, 0, 2509, 2494, 1, 0, 0, 0, 2509, 2499, 1, 0, 0, 0, 2509, 2504, 1, 0, 0, 0, 2510, 425, 1, 0, 0, 0, 2511, 2512, 3, 398, 199, 0, 2512, 2513, 5, 84, 0, 0, 2513, 2514, 3, 2, 1, 0, 2514, 2525, 1, 0, 0, 0, 2515, 2516, 5, 57, 0, 0, 2516, 2517, 5, 84, 0, 0, 2517, 2525, 3, 2, 1, 0, 2518, 2519, 3, 62, 31, 0, 2519, 2520, 5, 84, 0, 0, 2520, 2521, 5, 57, 0, 0, 2521, 2522, 5, 84, 0, 0, 2522, 2523, 3, 2, 1, 0, 2523, 2525, 1, 0, 0, 0, 2524, 2511, 1, 0, 0, 0, 2524, 2515, 1, 0, 0, 0, 2524, 2518, 1, 0, 0, 0, 2525, 427, 1, 0, 0, 0, 2526, 2527, 3, 68, 34, 0, 2527, 2529, 5, 76, 0, 0, 2528, 2530, 3, 430, 215, 0, 2529, 2528, 1, 0, 0, 0, 2529, 2530, 1, 0, 0, 0, 2530, 2531, 1, 0, 0, 0, 2531, 2532, 5, 77, 0, 0, 2532, 2596, 1, 0, 0, 0, 2533, 2534, 3, 62, 31, 0, 2534, 2536, 5, 84, 0, 0, 2535, 2537, 3, 48, 24, 0, 2536, 2535, 1, 0, 0, 0, 2536, 2537, 1, 0, 0, 0, 2537, 2538, 1, 0, 0, 0, 2538, 2539, 3, 2, 1, 0, 2539, 2541, 5, 76, 0, 0, 2540, 2542, 3, 430, 215, 0, 2541, 2540, 1, 0, 0, 0, 2541, 2542, 1, 0, 0, 0, 2542, 2543, 1, 0, 0, 0, 2543, 2544, 5, 77, 0, 0, 2544, 2596, 1, 0, 0, 0, 2545, 2546, 3, 66, 33, 0, 2546, 2548, 5, 84, 0, 0, 2547, 2549, 3, 48, 24, 0, 2548, 2547, 1, 0, 0, 0, 2548, 2549, 1, 0, 0, 0, 2549, 2550, 1, 0, 0, 0, 2550, 2551, 3, 2, 1, 0, 2551, 2553, 5, 76, 0, 0, 2552, 2554, 3, 430, 215, 0, 2553, 2552, 1, 0, 0, 0, 2553, 2554, 1, 0, 0, 0, 2554, 2555, 1, 0, 0, 0, 2555, 2556, 5, 77, 0, 0, 2556, 2596, 1, 0, 0, 0, 2557, 2558, 3, 398, 199, 0, 2558, 2560, 5, 84, 0, 0, 2559, 2561, 3, 48, 24, 0, 2560, 2559, 1, 0, 0, 0, 2560, 2561, 1, 0, 0, 0, 2561, 2562, 1, 0, 0, 0, 2562, 2563, 3, 2, 1, 0, 2563, 2565, 5, 76, 0, 0, 2564, 2566, 3, 430, 215, 0, 2565, 2564, 1, 0, 0, 0, 2565, 2566, 1, 0, 0, 0, 2566, 2567, 1, 0, 0, 0, 2567, 2568, 5, 77, 0, 0, 2568, 2596, 1, 0, 0, 0, 2569, 2570, 5, 57, 0, 0, 2570, 2572, 5, 84, 0, 0, 2571, 2573, 3, 48, 24, 0, 2572, 2571, 1, 0, 0, 0, 2572, 2573, 1, 0, 0, 0, 2573, 2574, 1, 0, 0, 0, 2574, 2575, 3, 2, 1, 0, 2575, 2577, 5, 76, 0, 0, 2576, 2578, 3, 430, 215, 0, 2577, 2576, 1, 0, 0, 0, 2577, 2578, 1, 0, 0, 0, 2578, 2579, 1, 0, 0, 0, 2579, 2580, 5, 77, 0, 0, 2580, 2596, 1, 0, 0, 0, 2581, 2582, 3, 62, 31, 0, 2582, 2583, 5, 84, 0, 0, 2583, 2584, 5, 57, 0, 0, 2584, 2586, 5, 84, 0, 0, 2585, 2587, 3, 48, 24, 0, 2586, 2585, 1, 0, 0, 0, 2586, 2587, 1, 0, 0, 0, 2587, 2588, 1, 0, 0, 0, 2588, 2589, 3, 2, 1, 0, 2589, 2591, 5, 76, 0, 0, 2590, 2592, 3, 430, 215, 0, 2591, 2590, 1, 0, 0, 0, 2591, 2592, 1, 0, 0, 0, 2592, 2593, 1, 0, 0, 0, 2593, 2594, 5, 77, 0, 0, 2594, 2596, 1, 0, 0, 0, 2595, 2526, 1, 0, 0, 0, 2595, 2533, 1, 0, 0, 0, 2595, 2545, 1, 0, 0, 0, 2595, 2557, 1, 0, 0, 0, 2595, 2569, 1, 0, 0, 0, 2595, 2581, 1, 0, 0, 0, 2596, 429, 1, 0, 0, 0, 2597, 2602, 3, 396, 198, 0, 2598, 2599, 5, 83, 0, 0, 2599, 2601, 3, 396, 198, 0, 2600, 2598, 1, 0, 0, 0, 2601, 2604, 1, 0, 0, 0, 2602, 2600, 1, 0, 0, 0, 2602, 2603, 1, 0, 0, 0, 2603, 431, 1, 0, 0, 0, 2604, 2602, 1, 0, 0, 0, 2605, 2606, 3, 66, 33, 0, 2606, 2608, 5, 87, 0, 0, 2607, 2609, 3, 48, 24, 0, 2608, 2607, 1, 0, 0, 0, 2608, 2609, 1, 0, 0, 0, 2609, 2610, 1, 0, 0, 0, 2610, 2611, 3, 2, 1, 0, 2611, 2653, 1, 0, 0, 0, 2612, 2613, 3, 398, 199, 0, 2613, 2615, 5, 87, 0, 0, 2614, 2616, 3, 48, 24, 0, 2615, 2614, 1, 0, 0, 0, 2615, 2616, 1, 0, 0, 0, 2616, 2617, 1, 0, 0, 0, 2617, 2618, 3, 2, 1, 0, 2618, 2653, 1, 0, 0, 0, 2619, 2620, 3, 24, 12, 0, 2620, 2622, 5, 87, 0, 0, 2621, 2623, 3, 48, 24, 0, 2622, 2621, 1, 0, 0, 0, 2622, 2623, 1, 0, 0, 0, 2623, 2624, 1, 0, 0, 0, 2624, 2625, 3, 2, 1, 0, 2625, 2653, 1, 0, 0, 0, 2626, 2627, 5, 57, 0, 0, 2627, 2629, 5, 87, 0, 0, 2628, 2630, 3, 48, 24, 0, 2629, 2628, 1, 0, 0, 0, 2629, 2630, 1, 0, 0, 0, 2630, 2631, 1, 0, 0, 0, 2631, 2653, 3, 2, 1, 0, 2632, 2633, 3, 62, 31, 0, 2633, 2634, 5, 84, 0, 0, 2634, 2635, 5, 57, 0, 0, 2635, 2637, 5, 87, 0, 0, 2636, 2638, 3, 48, 24, 0, 2637, 2636, 1, 0, 0, 0, 2637, 2638, 1, 0, 0, 0, 2638, 2639, 1, 0, 0, 0, 2639, 2640, 3, 2, 1, 0, 2640, 2653, 1, 0, 0, 0, 2641, 2642, 3, 30, 15, 0, 2642, 2644, 5, 87, 0, 0, 2643, 2645, 3, 48, 24, 0, 2644, 2643, 1, 0, 0, 0, 2644, 2645, 1, 0, 0, 0, 2645, 2646, 1, 0, 0, 0, 2646, 2647, 5, 48, 0, 0, 2647, 2653, 1, 0, 0, 0, 2648, 2649, 3, 36, 18, 0, 2649, 2650, 5, 87, 0, 0, 2650, 2651, 5, 48, 0, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2605, 1, 0, 0, 0, 2652, 2612, 1, 0, 0, 0, 2652, 2619, 1, 0, 0, 0, 2652, 2626, 1, 0, 0, 0, 2652, 2632, 1, 0, 0, 0, 2652, 2641, 1, 0, 0, 0, 2652, 2648, 1, 0, 0, 0, 2653, 433, 1, 0, 0, 0, 2654, 2656, 3, 398, 199, 0, 2655, 2657, 3, 436, 218, 0, 2656, 2655, 1, 0, 0, 0, 2656, 2657, 1, 0, 0, 0, 2657, 2663, 1, 0, 0, 0, 2658, 2660, 3, 66, 33, 0, 2659, 2661, 3, 436, 218, 0, 2660, 2659, 1, 0, 0, 0, 2660, 2661, 1, 0, 0, 0, 2661, 2663, 1, 0, 0, 0, 2662, 2654, 1, 0, 0, 0, 2662, 2658, 1, 0, 0, 0, 2663, 435, 1, 0, 0, 0, 2664, 2666, 5, 102, 0, 0, 2665, 2667, 3, 436, 218, 0, 2666, 2665, 1, 0, 0, 0, 2666, 2667, 1, 0, 0, 0, 2667, 2673, 1, 0, 0, 0, 2668, 2670, 5, 103, 0, 0, 2669, 2671, 3, 436, 218, 0, 2670, 2669, 1, 0, 0, 0, 2670, 2671, 1, 0, 0, 0, 2671, 2673, 1, 0, 0, 0, 2672, 2664, 1, 0, 0, 0, 2672, 2668, 1, 0, 0, 0, 2673, 437, 1, 0, 0, 0, 2674, 2675, 3, 434, 217, 0, 2675, 2676, 5, 102, 0, 0, 2676, 439, 1, 0, 0, 0, 2677, 2678, 3, 434, 217, 0, 2678, 2679, 5, 103, 0, 0, 2679, 441, 1, 0, 0, 0, 2680, 2688, 3, 444, 222, 0, 2681, 2688, 3, 446, 223, 0, 2682, 2683, 5, 104, 0, 0, 2683, 2688, 3, 442, 221, 0, 2684, 2685, 5, 105, 0, 0, 2685, 2688, 3, 442, 221, 0, 2686, 2688, 3, 448, 224, 0, 2687, 2680, 1, 0, 0, 0, 2687, 2681, 1, 0, 0, 0, 2687, 2682, 1, 0, 0, 0, 2687, 2684, 1, 0, 0, 0, 2687, 2686, 1, 0, 0, 0, 2688, 443, 1, 0, 0, 0, 2689, 2690, 5, 102, 0, 0, 2690, 2691, 3, 442, 221, 0, 2691, 445, 1, 0, 0, 0, 2692, 2693, 5, 103, 0, 0, 2693, 2694, 3, 442, 221, 0, 2694, 447, 1, 0, 0, 0, 2695, 2703, 3, 434, 217, 0, 2696, 2697, 5, 92, 0, 0, 2697, 2703, 3, 442, 221, 0, 2698, 2699, 5, 91, 0, 0, 2699, 2703, 3, 442, 221, 0, 2700, 2703, 3, 450, 225, 0, 2701, 2703, 3, 494, 247, 0, 2702, 2695, 1, 0, 0, 0, 2702, 2696, 1, 0, 0, 0, 2702, 2698, 1, 0, 0, 0, 2702, 2700, 1, 0, 0, 0, 2702, 2701, 1, 0, 0, 0, 2703, 449, 1, 0, 0, 0, 2704, 2705, 5, 76, 0, 0, 2705, 2706, 3, 16, 8, 0, 2706, 2707, 5, 77, 0, 0, 2707, 2708, 3, 442, 221, 0, 2708, 2732, 1, 0, 0, 0, 2709, 2710, 5, 76, 0, 0, 2710, 2714, 3, 24, 12, 0, 2711, 2713, 3, 46, 23, 0, 2712, 2711, 1, 0, 0, 0, 2713, 2716, 1, 0, 0, 0, 2714, 2712, 1, 0, 0, 0, 2714, 2715, 1, 0, 0, 0, 2715, 2717, 1, 0, 0, 0, 2716, 2714, 1, 0, 0, 0, 2717, 2718, 5, 77, 0, 0, 2718, 2719, 3, 448, 224, 0, 2719, 2732, 1, 0, 0, 0, 2720, 2721, 5, 76, 0, 0, 2721, 2725, 3, 24, 12, 0, 2722, 2724, 3, 46, 23, 0, 2723, 2722, 1, 0, 0, 0, 2724, 2727, 1, 0, 0, 0, 2725, 2723, 1, 0, 0, 0, 2725, 2726, 1, 0, 0, 0, 2726, 2728, 1, 0, 0, 0, 2727, 2725, 1, 0, 0, 0, 2728, 2729, 5, 77, 0, 0, 2729, 2730, 3, 482, 241, 0, 2730, 2732, 1, 0, 0, 0, 2731, 2704, 1, 0, 0, 0, 2731, 2709, 1, 0, 0, 0, 2731, 2720, 1, 0, 0, 0, 2732, 451, 1, 0, 0, 0, 2733, 2734, 6, 226, -1, 0, 2734, 2735, 3, 442, 221, 0, 2735, 2747, 1, 0, 0, 0, 2736, 2737, 10, 3, 0, 0, 2737, 2738, 5, 106, 0, 0, 2738, 2746, 3, 442, 221, 0, 2739, 2740, 10, 2, 0, 0, 2740, 2741, 5, 107, 0, 0, 2741, 2746, 3, 442, 221, 0, 2742, 2743, 10, 1, 0, 0, 2743, 2744, 5, 111, 0, 0, 2744, 2746, 3, 442, 221, 0, 2745, 2736, 1, 0, 0, 0, 2745, 2739, 1, 0, 0, 0, 2745, 2742, 1, 0, 0, 0, 2746, 2749, 1, 0, 0, 0, 2747, 2745, 1, 0, 0, 0, 2747, 2748, 1, 0, 0, 0, 2748, 453, 1, 0, 0, 0, 2749, 2747, 1, 0, 0, 0, 2750, 2751, 6, 227, -1, 0, 2751, 2752, 3, 452, 226, 0, 2752, 2761, 1, 0, 0, 0, 2753, 2754, 10, 2, 0, 0, 2754, 2755, 5, 104, 0, 0, 2755, 2760, 3, 452, 226, 0, 2756, 2757, 10, 1, 0, 0, 2757, 2758, 5, 105, 0, 0, 2758, 2760, 3, 452, 226, 0, 2759, 2753, 1, 0, 0, 0, 2759, 2756, 1, 0, 0, 0, 2760, 2763, 1, 0, 0, 0, 2761, 2759, 1, 0, 0, 0, 2761, 2762, 1, 0, 0, 0, 2762, 455, 1, 0, 0, 0, 2763, 2761, 1, 0, 0, 0, 2764, 2765, 6, 228, -1, 0, 2765, 2766, 3, 454, 227, 0, 2766, 2782, 1, 0, 0, 0, 2767, 2768, 10, 3, 0, 0, 2768, 2769, 5, 90, 0, 0, 2769, 2770, 5, 90, 0, 0, 2770, 2781, 3, 454, 227, 0, 2771, 2772, 10, 2, 0, 0, 2772, 2773, 5, 89, 0, 0, 2773, 2774, 5, 89, 0, 0, 2774, 2781, 3, 454, 227, 0, 2775, 2776, 10, 1, 0, 0, 2776, 2777, 5, 89, 0, 0, 2777, 2778, 5, 89, 0, 0, 2778, 2779, 5, 89, 0, 0, 2779, 2781, 3, 454, 227, 0, 2780, 2767, 1, 0, 0, 0, 2780, 2771, 1, 0, 0, 0, 2780, 2775, 1, 0, 0, 0, 2781, 2784, 1, 0, 0, 0, 2782, 2780, 1, 0, 0, 0, 2782, 2783, 1, 0, 0, 0, 2783, 457, 1, 0, 0, 0, 2784, 2782, 1, 0, 0, 0, 2785, 2786, 6, 229, -1, 0, 2786, 2787, 3, 456, 228, 0, 2787, 2808, 1, 0, 0, 0, 2788, 2789, 10, 5, 0, 0, 2789, 2790, 5, 90, 0, 0, 2790, 2807, 3, 456, 228, 0, 2791, 2792, 10, 4, 0, 0, 2792, 2793, 5, 89, 0, 0, 2793, 2807, 3, 456, 228, 0, 2794, 2795, 10, 3, 0, 0, 2795, 2796, 5, 97, 0, 0, 2796, 2807, 3, 456, 228, 0, 2797, 2798, 10, 2, 0, 0, 2798, 2799, 5, 98, 0, 0, 2799, 2807, 3, 456, 228, 0, 2800, 2801, 10, 1, 0, 0, 2801, 2804, 5, 43, 0, 0, 2802, 2805, 3, 24, 12, 0, 2803, 2805, 3, 392, 196, 0, 2804, 2802, 1, 0, 0, 0, 2804, 2803, 1, 0, 0, 0, 2805, 2807, 1, 0, 0, 0, 2806, 2788, 1, 0, 0, 0, 2806, 2791, 1, 0, 0, 0, 2806, 2794, 1, 0, 0, 0, 2806, 2797, 1, 0, 0, 0, 2806, 2800, 1, 0, 0, 0, 2807, 2810, 1, 0, 0, 0, 2808, 2806, 1, 0, 0, 0, 2808, 2809, 1, 0, 0, 0, 2809, 459, 1, 0, 0, 0, 2810, 2808, 1, 0, 0, 0, 2811, 2812, 6, 230, -1, 0, 2812, 2813, 3, 458, 229, 0, 2813, 2822, 1, 0, 0, 0, 2814, 2815, 10, 2, 0, 0, 2815, 2816, 5, 96, 0, 0, 2816, 2821, 3, 458, 229, 0, 2817, 2818, 10, 1, 0, 0, 2818, 2819, 5, 99, 0, 0, 2819, 2821, 3, 458, 229, 0, 2820, 2814, 1, 0, 0, 0, 2820, 2817, 1, 0, 0, 0, 2821, 2824, 1, 0, 0, 0, 2822, 2820, 1, 0, 0, 0, 2822, 2823, 1, 0, 0, 0, 2823, 461, 1, 0, 0, 0, 2824, 2822, 1, 0, 0, 0, 2825, 2826, 6, 231, -1, 0, 2826, 2827, 3, 460, 230, 0, 2827, 2833, 1, 0, 0, 0, 2828, 2829, 10, 1, 0, 0, 2829, 2830, 5, 108, 0, 0, 2830, 2832, 3, 460, 230, 0, 2831, 2828, 1, 0, 0, 0, 2832, 2835, 1, 0, 0, 0, 2833, 2831, 1, 0, 0, 0, 2833, 2834, 1, 0, 0, 0, 2834, 463, 1, 0, 0, 0, 2835, 2833, 1, 0, 0, 0, 2836, 2837, 6, 232, -1, 0, 2837, 2838, 3, 462, 231, 0, 2838, 2844, 1, 0, 0, 0, 2839, 2840, 10, 1, 0, 0, 2840, 2841, 5, 110, 0, 0, 2841, 2843, 3, 462, 231, 0, 2842, 2839, 1, 0, 0, 0, 2843, 2846, 1, 0, 0, 0, 2844, 2842, 1, 0, 0, 0, 2844, 2845, 1, 0, 0, 0, 2845, 465, 1, 0, 0, 0, 2846, 2844, 1, 0, 0, 0, 2847, 2848, 6, 233, -1, 0, 2848, 2849, 3, 464, 232, 0, 2849, 2855, 1, 0, 0, 0, 2850, 2851, 10, 1, 0, 0, 2851, 2852, 5, 109, 0, 0, 2852, 2854, 3, 464, 232, 0, 2853, 2850, 1, 0, 0, 0, 2854, 2857, 1, 0, 0, 0, 2855, 2853, 1, 0, 0, 0, 2855, 2856, 1, 0, 0, 0, 2856, 467, 1, 0, 0, 0, 2857, 2855, 1, 0, 0, 0, 2858, 2859, 6, 234, -1, 0, 2859, 2860, 3, 466, 233, 0, 2860, 2866, 1, 0, 0, 0, 2861, 2862, 10, 1, 0, 0, 2862, 2863, 5, 100, 0, 0, 2863, 2865, 3, 466, 233, 0, 2864, 2861, 1, 0, 0, 0, 2865, 2868, 1, 0, 0, 0, 2866, 2864, 1, 0, 0, 0, 2866, 2867, 1, 0, 0, 0, 2867, 469, 1, 0, 0, 0, 2868, 2866, 1, 0, 0, 0, 2869, 2870, 6, 235, -1, 0, 2870, 2871, 3, 468, 234, 0, 2871, 2877, 1, 0, 0, 0, 2872, 2873, 10, 1, 0, 0, 2873, 2874, 5, 101, 0, 0, 2874, 2876, 3, 468, 234, 0, 2875, 2872, 1, 0, 0, 0, 2876, 2879, 1, 0, 0, 0, 2877, 2875, 1, 0, 0, 0, 2877, 2878, 1, 0, 0, 0, 2878, 471, 1, 0, 0, 0, 2879, 2877, 1, 0, 0, 0, 2880, 2894, 3, 470, 235, 0, 2881, 2882, 3, 470, 235, 0, 2882, 2883, 5, 93, 0, 0, 2883, 2884, 3, 396, 198, 0, 2884, 2885, 5, 94, 0, 0, 2885, 2886, 3, 472, 236, 0, 2886, 2894, 1, 0, 0, 0, 2887, 2888, 3, 470, 235, 0, 2888, 2889, 5, 93, 0, 0, 2889, 2890, 3, 396, 198, 0, 2890, 2891, 5, 94, 0, 0, 2891, 2892, 3, 482, 241, 0, 2892, 2894, 1, 0, 0, 0, 2893, 2880, 1, 0, 0, 0, 2893, 2881, 1, 0, 0, 0, 2893, 2887, 1, 0, 0, 0, 2894, 473, 1, 0, 0, 0, 2895, 2898, 3, 472, 236, 0, 2896, 2898, 3, 476, 238, 0, 2897, 2895, 1, 0, 0, 0, 2897, 2896, 1, 0, 0, 0, 2898, 475, 1, 0, 0, 0, 2899, 2900, 3, 478, 239, 0, 2900, 2901, 3, 480, 240, 0, 2901, 2902, 3, 396, 198, 0, 2902, 477, 1, 0, 0, 0, 2903, 2907, 3, 66, 33, 0, 2904, 2907, 3, 426, 213, 0, 2905, 2907, 3, 424, 212, 0, 2906, 2903, 1, 0, 0, 0, 2906, 2904, 1, 0, 0, 0, 2906, 2905, 1, 0, 0, 0, 2907, 479, 1, 0, 0, 0, 2908, 2909, 7, 8, 0, 0, 2909, 481, 1, 0, 0, 0, 2910, 2911, 3, 484, 242, 0, 2911, 2912, 5, 95, 0, 0, 2912, 2913, 3, 492, 246, 0, 2913, 483, 1, 0, 0, 0, 2914, 2916, 5, 76, 0, 0, 2915, 2917, 3, 486, 243, 0, 2916, 2915, 1, 0, 0, 0, 2916, 2917, 1, 0, 0, 0, 2917, 2918, 1, 0, 0, 0, 2918, 2921, 5, 77, 0, 0, 2919, 2921, 3, 2, 1, 0, 2920, 2914, 1, 0, 0, 0, 2920, 2919, 1, 0, 0, 0, 2921, 485, 1, 0, 0, 0, 2922, 2927, 3, 488, 244, 0, 2923, 2924, 5, 83, 0, 0, 2924, 2926, 3, 488, 244, 0, 2925, 2923, 1, 0, 0, 0, 2926, 2929, 1, 0, 0, 0, 2927, 2925, 1, 0, 0, 0, 2927, 2928, 1, 0, 0, 0, 2928, 2939, 1, 0, 0, 0, 2929, 2927, 1, 0, 0, 0, 2930, 2935, 3, 2, 1, 0, 2931, 2932, 5, 83, 0, 0, 2932, 2934, 3, 2, 1, 0, 2933, 2931, 1, 0, 0, 0, 2934, 2937, 1, 0, 0, 0, 2935, 2933, 1, 0, 0, 0, 2935, 2936, 1, 0, 0, 0, 2936, 2939, 1, 0, 0, 0, 2937, 2935, 1, 0, 0, 0, 2938, 2922, 1, 0, 0, 0, 2938, 2930, 1, 0, 0, 0, 2939, 487, 1, 0, 0, 0, 2940, 2942, 3, 172, 86, 0, 2941, 2940, 1, 0, 0, 0, 2942, 2945, 1, 0, 0, 0, 2943, 2941, 1, 0, 0, 0, 2943, 2944, 1, 0, 0, 0, 2944, 2946, 1, 0, 0, 0, 2945, 2943, 1, 0, 0, 0, 2946, 2947, 3, 490, 245, 0, 2947, 2948, 3, 132, 66, 0, 2948, 2951, 1, 0, 0, 0, 2949, 2951, 3, 170, 85, 0, 2950, 2943, 1, 0, 0, 0, 2950, 2949, 1, 0, 0, 0, 2951, 489, 1, 0, 0, 0, 2952, 2955, 3, 136, 68, 0, 2953, 2955, 5, 15, 0, 0, 2954, 2952, 1, 0, 0, 0, 2954, 2953, 1, 0, 0, 0, 2955, 491, 1, 0, 0, 0, 2956, 2959, 3, 396, 198, 0, 2957, 2959, 3, 284, 142, 0, 2958, 2956, 1, 0, 0, 0, 2958, 2957, 1, 0, 0, 0, 2959, 493, 1, 0, 0, 0, 2960, 2961, 5, 58, 0, 0, 2961, 2962, 5, 76, 0, 0, 2962, 2963, 3, 396, 198, 0, 2963, 2964, 5, 77, 0, 0, 2964, 2965, 3, 324, 162, 0, 2965, 495, 1, 0, 0, 0, 2966, 2967, 3, 396, 198, 0, 2967, 497, 1, 0, 0, 0, 362, 503, 507, 511, 524, 529, 533, 542, 548, 553, 556, 561, 566, 571, 574, 579, 584, 591, 596, 603, 608, 610, 617, 631, 636, 644, 651, 657, 662, 672, 675, 689, 694, 699, 704, 710, 715, 720, 725, 730, 735, 744, 748, 751, 756, 762, 768, 776, 785, 796, 825, 830, 834, 842, 849, 858, 872, 875, 887, 890, 906, 911, 918, 923, 929, 932, 935, 938, 952, 963, 977, 986, 993, 1002, 1009, 1014, 1029, 1036, 1042, 1046, 1050, 1054, 1058, 1063, 1070, 1073, 1077, 1080, 1086, 1091, 1094, 1098, 1102, 1108, 1113, 1115, 1124, 1131, 1147, 1153, 1156, 1161, 1165, 1172, 1175, 1179, 1184, 1191, 1200, 1206, 1213, 1218, 1225, 1233, 1243, 1248, 1252, 1262, 1267, 1275, 1278, 1285, 1288, 1296, 1299, 1304, 1309, 1315, 1319, 1324, 1329, 1334, 1340, 1346, 1349, 1352, 1361, 1367, 1373, 1376, 1379, 1387, 1393, 1399, 1403, 1409, 1418, 1424, 1431, 1436, 1443, 1455, 1462, 1467, 1475, 1480, 1486, 1489, 1492, 1505, 1516, 1523, 1533, 1538, 1549, 1554, 1567, 1572, 1584, 1594, 1599, 1607, 1610, 1617, 1625, 1631, 1640, 1650, 1654, 1657, 1666, 1680, 1683, 1692, 1697, 1705, 1711, 1715, 1720, 1728, 1739, 1746, 1761, 1783, 1811, 1826, 1835, 1843, 1847, 1856, 1865, 1876, 1880, 1906, 1910, 1915, 1919, 1923, 1931, 1935, 1939, 1946, 1955, 1976, 1982, 1988, 2013, 2018, 2024, 2036, 2047, 2057, 2060, 2065, 2074, 2079, 2083, 2095, 2099, 2103, 2107, 2111, 2117, 2123, 2127, 2133, 2139, 2145, 2151, 2159, 2166, 2173, 2178, 2182, 2187, 2192, 2196, 2201, 2206, 2210, 2215, 2220, 2224, 2229, 2234, 2238, 2245, 2250, 2254, 2259, 2263, 2268, 2272, 2277, 2281, 2286, 2290, 2297, 2301, 2306, 2310, 2316, 2318, 2323, 2328, 2334, 2338, 2343, 2347, 2351, 2355, 2357, 2364, 2375, 2386, 2394, 2405, 2409, 2414, 2418, 2423, 2431, 2437, 2441, 2445, 2449, 2455, 2461, 2463, 2475, 2481, 2487, 2509, 2524, 2529, 2536, 2541, 2548, 2553, 2560, 2565, 2572, 2577, 2586, 2591, 2595, 2602, 2608, 2615, 2622, 2629, 2637, 2644, 2652, 2656, 2660, 2662, 2666, 2670, 2672, 2687, 2702, 2714, 2725, 2731, 2745, 2747, 2759, 2761, 2780, 2782, 2804, 2806, 2808, 2820, 2822, 2833, 2844, 2855, 2866, 2877, 2893, 2897, 2906, 2916, 2920, 2927, 2935, 2938, 2943, 2950, 2954, 2958] \ No newline at end of file diff --git a/csim/java/Java20Parser.py b/csim/java/Java20Parser.py new file mode 100644 index 0000000..727045c --- /dev/null +++ b/csim/java/Java20Parser.py @@ -0,0 +1,20532 @@ +# Generated from Java20Parser.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +def serializedATN(): + return [ + 4,1,126,2969,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,1,0,1,0,1,0,1,1,1,1,3,1,504,8,1,1,2,1,2, + 3,2,508,8,2,1,3,1,3,3,3,512,8,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7, + 1,8,5,8,523,8,8,10,8,12,8,526,9,8,1,8,1,8,3,8,530,8,8,1,9,1,9,3, + 9,534,8,9,1,10,1,10,1,11,1,11,1,12,1,12,1,12,3,12,543,8,12,1,13, + 1,13,5,13,547,8,13,10,13,12,13,550,9,13,1,13,1,13,3,13,554,8,13, + 1,13,3,13,557,8,13,1,14,1,14,1,14,3,14,562,8,14,1,14,5,14,565,8, + 14,10,14,12,14,568,9,14,1,14,1,14,3,14,572,8,14,1,14,3,14,575,8, + 14,1,15,5,15,578,8,15,10,15,12,15,581,9,15,1,15,1,15,3,15,585,8, + 15,1,15,1,15,1,15,5,15,590,8,15,10,15,12,15,593,9,15,1,15,1,15,3, + 15,597,8,15,1,15,1,15,1,15,5,15,602,8,15,10,15,12,15,605,9,15,1, + 15,1,15,3,15,609,8,15,3,15,611,8,15,1,16,1,16,1,17,5,17,616,8,17, + 10,17,12,17,619,9,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18, + 1,18,1,18,3,18,632,8,18,1,19,5,19,635,8,19,10,19,12,19,638,9,19, + 1,19,1,19,1,19,5,19,643,8,19,10,19,12,19,646,9,19,1,19,1,19,5,19, + 650,8,19,10,19,12,19,653,9,19,1,20,5,20,656,8,20,10,20,12,20,659, + 9,20,1,20,1,20,3,20,663,8,20,1,21,1,21,1,22,1,22,1,22,1,22,5,22, + 671,8,22,10,22,12,22,674,9,22,3,22,676,8,22,1,23,1,23,1,23,1,24, + 1,24,1,24,1,24,1,25,1,25,1,25,5,25,688,8,25,10,25,12,25,691,9,25, + 1,26,1,26,3,26,695,8,26,1,27,5,27,698,8,27,10,27,12,27,701,9,27, + 1,27,1,27,3,27,705,8,27,1,28,1,28,1,28,1,28,3,28,711,8,28,1,29,1, + 29,1,29,3,29,716,8,29,1,30,1,30,1,30,3,30,721,8,30,1,31,1,31,1,31, + 3,31,726,8,31,1,32,1,32,1,32,3,32,731,8,32,1,33,1,33,1,33,3,33,736, + 8,33,1,33,1,33,1,34,1,34,1,35,1,35,1,35,3,35,745,8,35,1,36,1,36, + 3,36,749,8,36,1,37,3,37,752,8,37,1,37,5,37,755,8,37,10,37,12,37, + 758,9,37,1,37,5,37,761,8,37,10,37,12,37,764,9,37,1,38,5,38,767,8, + 38,10,38,12,38,770,9,38,1,38,1,38,1,39,5,39,775,8,39,10,39,12,39, + 778,9,39,1,39,1,39,1,39,1,39,5,39,784,8,39,10,39,12,39,787,9,39, + 1,39,1,39,1,40,1,40,1,41,1,41,1,41,1,41,3,41,797,8,41,1,42,1,42, + 1,42,1,42,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,45,1,45,1,45,1,45,1,46,1,46,1,46,3,46, + 826,8,46,1,47,5,47,829,8,47,10,47,12,47,832,9,47,1,47,3,47,835,8, + 47,1,47,1,47,1,47,1,47,5,47,841,8,47,10,47,12,47,844,9,47,1,47,1, + 47,5,47,848,8,47,10,47,12,47,851,9,47,1,47,1,47,1,48,1,48,5,48,857, + 8,48,10,48,12,48,860,9,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48, + 1,48,5,48,871,8,48,10,48,12,48,874,9,48,3,48,876,8,48,1,48,1,48, + 1,48,1,48,1,48,1,48,1,48,1,48,5,48,886,8,48,10,48,12,48,889,9,48, + 3,48,891,8,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48, + 1,48,1,48,5,48,905,8,48,10,48,12,48,908,9,48,1,48,1,48,3,48,912, + 8,48,1,49,1,49,1,50,1,50,1,50,3,50,919,8,50,1,51,5,51,922,8,51,10, + 51,12,51,925,9,51,1,51,1,51,1,51,3,51,930,8,51,1,51,3,51,933,8,51, + 1,51,3,51,936,8,51,1,51,3,51,939,8,51,1,51,1,51,1,52,1,52,1,52,1, + 52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,953,8,52,1,53,1,53,1,53,1, + 53,1,54,1,54,1,54,5,54,962,8,54,10,54,12,54,965,9,54,1,55,1,55,1, + 55,1,56,1,56,1,56,1,57,1,57,1,57,5,57,976,8,57,10,57,12,57,979,9, + 57,1,58,1,58,1,58,1,58,5,58,985,8,58,10,58,12,58,988,9,58,1,59,1, + 59,5,59,992,8,59,10,59,12,59,995,9,59,1,59,1,59,1,60,1,60,1,60,1, + 60,3,60,1003,8,60,1,61,1,61,1,61,1,61,1,61,3,61,1010,8,61,1,62,5, + 62,1013,8,62,10,62,12,62,1016,9,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,3,63,1030,8,63,1,64,1,64,1,64,5,64, + 1035,8,64,10,64,12,64,1038,9,64,1,65,1,65,1,65,3,65,1043,8,65,1, + 66,1,66,3,66,1047,8,66,1,67,1,67,3,67,1051,8,67,1,68,1,68,3,68,1055, + 8,68,1,69,1,69,3,69,1059,8,69,1,70,1,70,1,70,3,70,1064,8,70,1,71, + 1,71,1,71,5,71,1069,8,71,10,71,12,71,1072,9,71,3,71,1074,8,71,1, + 71,1,71,3,71,1078,8,71,1,71,3,71,1081,8,71,1,72,1,72,5,72,1085,8, + 72,10,72,12,72,1088,9,72,1,72,1,72,3,72,1092,8,72,1,72,3,72,1095, + 8,72,1,73,1,73,3,73,1099,8,73,1,73,1,73,3,73,1103,8,73,1,73,1,73, + 5,73,1107,8,73,10,73,12,73,1110,9,73,1,73,1,73,3,73,1114,8,73,3, + 73,1116,8,73,1,74,1,74,1,75,1,75,1,76,1,76,1,76,3,76,1125,8,76,1, + 76,1,76,1,77,5,77,1130,8,77,10,77,12,77,1133,9,77,1,77,1,77,1,77, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,1148,8,78, + 1,79,1,79,5,79,1152,8,79,10,79,12,79,1155,9,79,3,79,1157,8,79,1, + 79,1,79,1,79,3,79,1162,8,79,1,80,1,80,3,80,1166,8,80,1,81,1,81,1, + 81,1,81,1,81,3,81,1173,8,81,1,81,3,81,1176,8,81,1,81,1,81,3,81,1180, + 8,81,1,82,5,82,1183,8,82,10,82,12,82,1186,9,82,1,82,1,82,1,82,1, + 82,3,82,1192,8,82,1,82,1,82,1,83,1,83,1,83,5,83,1199,8,83,10,83, + 12,83,1202,9,83,1,84,5,84,1205,8,84,10,84,12,84,1208,9,84,1,84,1, + 84,1,84,1,84,3,84,1214,8,84,1,85,5,85,1217,8,85,10,85,12,85,1220, + 9,85,1,85,1,85,5,85,1224,8,85,10,85,12,85,1227,9,85,1,85,1,85,1, + 85,1,86,1,86,3,86,1234,8,86,1,87,1,87,1,87,1,88,1,88,1,88,5,88,1242, + 8,88,10,88,12,88,1245,9,88,1,89,1,89,3,89,1249,8,89,1,90,1,90,3, + 90,1253,8,90,1,91,1,91,1,92,1,92,1,92,1,93,5,93,1261,8,93,10,93, + 12,93,1264,9,93,1,93,1,93,3,93,1268,8,93,1,93,1,93,1,94,1,94,1,94, + 1,94,3,94,1276,8,94,1,95,3,95,1279,8,95,1,95,1,95,1,95,1,95,1,95, + 3,95,1286,8,95,1,95,3,95,1289,8,95,1,95,1,95,1,96,1,96,1,97,1,97, + 3,97,1297,8,97,1,97,3,97,1300,8,97,1,97,1,97,1,98,3,98,1305,8,98, + 1,98,1,98,1,98,3,98,1310,8,98,1,98,1,98,1,98,1,98,3,98,1316,8,98, + 1,98,1,98,3,98,1320,8,98,1,98,1,98,1,98,3,98,1325,8,98,1,98,1,98, + 1,98,3,98,1330,8,98,1,99,5,99,1333,8,99,10,99,12,99,1336,9,99,1, + 99,1,99,1,99,3,99,1341,8,99,1,99,1,99,1,100,1,100,3,100,1347,8,100, + 1,100,3,100,1350,8,100,1,100,3,100,1353,8,100,1,100,1,100,1,101, + 1,101,1,101,5,101,1360,8,101,10,101,12,101,1363,9,101,1,102,5,102, + 1366,8,102,10,102,12,102,1369,9,102,1,102,1,102,1,102,3,102,1374, + 8,102,1,102,3,102,1377,8,102,1,102,3,102,1380,8,102,1,103,1,103, + 1,104,1,104,5,104,1386,8,104,10,104,12,104,1389,9,104,1,105,5,105, + 1392,8,105,10,105,12,105,1395,9,105,1,105,1,105,1,105,3,105,1400, + 8,105,1,105,1,105,3,105,1404,8,105,1,105,1,105,1,106,1,106,3,106, + 1410,8,106,1,106,1,106,1,107,1,107,1,107,5,107,1417,8,107,10,107, + 12,107,1420,9,107,1,108,5,108,1423,8,108,10,108,12,108,1426,9,108, + 1,108,1,108,1,108,1,108,3,108,1432,8,108,1,109,5,109,1435,8,109, + 10,109,12,109,1438,9,109,1,109,1,109,5,109,1442,8,109,10,109,12, + 109,1445,9,109,1,109,1,109,1,109,1,110,1,110,1,111,1,111,5,111,1454, + 8,111,10,111,12,111,1457,9,111,1,111,1,111,1,112,1,112,3,112,1463, + 8,112,1,113,5,113,1466,8,113,10,113,12,113,1469,9,113,1,113,1,113, + 1,113,1,114,1,114,3,114,1476,8,114,1,115,5,115,1479,8,115,10,115, + 12,115,1482,9,115,1,115,1,115,1,115,3,115,1487,8,115,1,115,3,115, + 1490,8,115,1,115,3,115,1493,8,115,1,115,1,115,1,116,1,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,3,116,1506,8,116,1,117,1,117, + 1,117,1,118,1,118,1,118,1,118,5,118,1515,8,118,10,118,12,118,1518, + 9,118,1,119,1,119,5,119,1522,8,119,10,119,12,119,1525,9,119,1,119, + 1,119,1,120,1,120,1,120,1,120,1,120,3,120,1534,8,120,1,121,5,121, + 1537,8,121,10,121,12,121,1540,9,121,1,121,1,121,1,121,1,121,1,122, + 1,122,1,122,1,122,3,122,1550,8,122,1,123,5,123,1553,8,123,10,123, + 12,123,1556,9,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,3,124,1568,8,124,1,125,5,125,1571,8,125,10,125,12,125, + 1574,9,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,5,126,1583, + 8,126,10,126,12,126,1586,9,126,1,126,1,126,1,127,1,127,1,127,1,127, + 1,127,3,127,1595,8,127,1,128,5,128,1598,8,128,10,128,12,128,1601, + 9,128,1,128,1,128,1,128,1,128,1,128,3,128,1608,8,128,1,128,3,128, + 1611,8,128,1,128,1,128,1,129,1,129,1,129,3,129,1618,8,129,1,130, + 1,130,1,130,1,131,1,131,1,131,3,131,1626,8,131,1,132,1,132,1,132, + 1,132,3,132,1632,8,132,1,132,1,132,1,133,1,133,1,133,5,133,1639, + 8,133,10,133,12,133,1642,9,133,1,134,1,134,1,134,1,134,1,135,1,135, + 1,135,3,135,1651,8,135,1,136,1,136,3,136,1655,8,136,1,136,3,136, + 1658,8,136,1,136,1,136,1,137,1,137,1,137,5,137,1665,8,137,10,137, + 12,137,1668,9,137,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139, + 1,139,1,140,1,140,3,140,1681,8,140,1,140,3,140,1684,8,140,1,140, + 1,140,1,141,1,141,1,141,5,141,1691,8,141,10,141,12,141,1694,9,141, + 1,142,1,142,3,142,1698,8,142,1,142,1,142,1,143,1,143,5,143,1704, + 8,143,10,143,12,143,1707,9,143,1,144,1,144,1,144,3,144,1712,8,144, + 1,145,1,145,3,145,1716,8,145,1,146,5,146,1719,8,146,10,146,12,146, + 1722,9,146,1,146,1,146,1,146,1,147,1,147,3,147,1729,8,147,1,148, + 1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,149,3,149,1740,8,149, + 1,150,1,150,1,150,1,150,1,150,3,150,1747,8,150,1,151,1,151,1,151, + 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,3,151, + 1762,8,151,1,152,1,152,1,153,1,153,1,153,1,153,1,154,1,154,1,154, + 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156, + 3,156,1784,8,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,159,1,159,1,160,1,160,1,160,1,160,3,160,1812,8,160,1,160, + 1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,5,162, + 1825,8,162,10,162,12,162,1828,9,162,1,162,1,162,1,162,1,162,5,162, + 1834,8,162,10,162,12,162,1837,9,162,1,162,1,162,1,162,5,162,1842, + 8,162,10,162,12,162,1845,9,162,1,162,3,162,1848,8,162,1,163,1,163, + 1,163,1,163,1,163,1,163,1,163,3,163,1857,8,163,1,164,1,164,1,164, + 1,164,1,164,5,164,1864,8,164,10,164,12,164,1867,9,164,1,164,1,164, + 1,165,1,165,1,165,1,165,5,165,1875,8,165,10,165,12,165,1878,9,165, + 1,165,3,165,1881,8,165,1,166,1,166,1,167,1,167,1,167,1,167,1,167, + 1,167,1,168,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,170,1,170,3,170,1907,8,170,1,171,1,171, + 3,171,1911,8,171,1,172,1,172,1,172,3,172,1916,8,172,1,172,1,172, + 3,172,1920,8,172,1,172,1,172,3,172,1924,8,172,1,172,1,172,1,172, + 1,173,1,173,1,173,3,173,1932,8,173,1,173,1,173,3,173,1936,8,173, + 1,173,1,173,3,173,1940,8,173,1,173,1,173,1,173,1,174,1,174,3,174, + 1947,8,174,1,175,1,175,1,176,1,176,1,176,5,176,1954,8,176,10,176, + 12,176,1957,9,176,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,178,1,178,1,178,1,179,1,179,3,179, + 1977,8,179,1,179,1,179,1,180,1,180,3,180,1983,8,180,1,180,1,180, + 1,181,1,181,3,181,1989,8,181,1,181,1,181,1,182,1,182,1,182,1,182, + 1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184, + 1,184,1,184,1,184,1,184,1,184,1,184,3,184,2014,8,184,1,184,1,184, + 1,184,3,184,2019,8,184,1,185,1,185,5,185,2023,8,185,10,185,12,185, + 2026,9,185,1,186,1,186,1,186,1,186,1,186,1,186,1,187,5,187,2035, + 8,187,10,187,12,187,2038,9,187,1,187,1,187,1,187,1,188,1,188,1,188, + 5,188,2046,8,188,10,188,12,188,2049,9,188,1,189,1,189,1,189,1,190, + 1,190,1,190,1,190,3,190,2058,8,190,1,190,3,190,2061,8,190,1,191, + 1,191,1,191,3,191,2066,8,191,1,191,1,191,1,192,1,192,1,192,5,192, + 2073,8,192,10,192,12,192,2076,9,192,1,193,1,193,3,193,2080,8,193, + 1,194,1,194,3,194,2084,8,194,1,195,1,195,1,195,1,195,1,196,1,196, + 1,197,1,197,1,198,1,198,3,198,2096,8,198,1,199,1,199,3,199,2100, + 8,199,1,200,1,200,3,200,2104,8,200,1,200,1,200,3,200,2108,8,200, + 1,200,1,200,3,200,2112,8,200,1,200,1,200,1,200,1,200,3,200,2118, + 8,200,1,200,1,200,1,200,1,200,3,200,2124,8,200,1,200,1,200,3,200, + 2128,8,200,1,200,1,200,1,200,1,200,3,200,2134,8,200,1,200,1,200, + 1,200,1,200,3,200,2140,8,200,1,200,1,200,1,200,1,200,3,200,2146, + 8,200,1,200,1,200,1,200,1,200,3,200,2152,8,200,1,200,1,200,1,200, + 1,200,1,200,1,200,3,200,2160,8,200,1,200,1,200,1,200,1,200,1,200, + 3,200,2167,8,200,1,200,1,200,1,200,1,200,1,200,3,200,2174,8,200, + 1,200,1,200,1,200,3,200,2179,8,200,1,200,1,200,3,200,2183,8,200, + 1,200,1,200,1,200,3,200,2188,8,200,1,200,1,200,1,200,3,200,2193, + 8,200,1,200,1,200,3,200,2197,8,200,1,200,1,200,1,200,3,200,2202, + 8,200,1,200,1,200,1,200,3,200,2207,8,200,1,200,1,200,3,200,2211, + 8,200,1,200,1,200,1,200,3,200,2216,8,200,1,200,1,200,1,200,3,200, + 2221,8,200,1,200,1,200,3,200,2225,8,200,1,200,1,200,1,200,3,200, + 2230,8,200,1,200,1,200,1,200,3,200,2235,8,200,1,200,1,200,3,200, + 2239,8,200,1,200,1,200,1,200,1,200,1,200,3,200,2246,8,200,1,200, + 1,200,1,200,3,200,2251,8,200,1,200,1,200,3,200,2255,8,200,1,200, + 1,200,1,200,3,200,2260,8,200,1,200,1,200,3,200,2264,8,200,1,200, + 1,200,1,200,3,200,2269,8,200,1,200,1,200,3,200,2273,8,200,1,200, + 1,200,1,200,3,200,2278,8,200,1,200,1,200,3,200,2282,8,200,1,200, + 1,200,1,200,3,200,2287,8,200,1,200,1,200,3,200,2291,8,200,1,200, + 1,200,1,200,1,200,1,200,3,200,2298,8,200,1,200,1,200,3,200,2302, + 8,200,1,200,1,200,1,200,3,200,2307,8,200,1,200,1,200,3,200,2311, + 8,200,1,200,1,200,1,200,1,200,3,200,2317,8,200,3,200,2319,8,200, + 1,201,1,201,1,201,3,201,2324,8,201,1,201,1,201,1,201,3,201,2329, + 8,201,1,201,1,201,1,201,1,201,3,201,2335,8,201,1,201,1,201,3,201, + 2339,8,201,1,201,1,201,1,201,3,201,2344,8,201,1,201,1,201,3,201, + 2348,8,201,1,201,1,201,3,201,2352,8,201,1,201,1,201,3,201,2356,8, + 201,3,201,2358,8,201,1,202,1,202,1,202,5,202,2363,8,202,10,202,12, + 202,2366,9,202,1,202,1,202,1,202,1,202,1,202,1,202,5,202,2374,8, + 202,10,202,12,202,2377,9,202,1,202,1,202,1,202,1,202,1,202,1,202, + 5,202,2385,8,202,10,202,12,202,2388,9,202,1,202,1,202,1,202,1,202, + 1,202,3,202,2395,8,202,1,203,1,203,1,203,1,203,1,203,1,203,1,203, + 1,203,1,203,3,203,2406,8,203,1,204,1,204,3,204,2410,8,204,1,204, + 1,204,1,204,3,204,2415,8,204,1,204,1,204,3,204,2419,8,204,1,205, + 5,205,2422,8,205,10,205,12,205,2425,9,205,1,205,1,205,1,205,5,205, + 2430,8,205,10,205,12,205,2433,9,205,1,205,5,205,2436,8,205,10,205, + 12,205,2439,9,205,1,205,3,205,2442,8,205,1,206,1,206,3,206,2446, + 8,206,1,207,1,207,3,207,2450,8,207,1,208,1,208,1,208,1,208,3,208, + 2456,8,208,1,208,1,208,1,208,1,208,3,208,2462,8,208,3,208,2464,8, + 208,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,209, + 3,209,2476,8,209,1,210,1,210,5,210,2480,8,210,10,210,12,210,2483, + 9,210,1,211,5,211,2486,8,211,10,211,12,211,2489,9,211,1,211,1,211, + 1,211,1,211,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212, + 1,212,1,212,1,212,1,212,1,212,1,212,3,212,2510,8,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, + 3,213,2525,8,213,1,214,1,214,1,214,3,214,2530,8,214,1,214,1,214, + 1,214,1,214,1,214,3,214,2537,8,214,1,214,1,214,1,214,3,214,2542, + 8,214,1,214,1,214,1,214,1,214,1,214,3,214,2549,8,214,1,214,1,214, + 1,214,3,214,2554,8,214,1,214,1,214,1,214,1,214,1,214,3,214,2561, + 8,214,1,214,1,214,1,214,3,214,2566,8,214,1,214,1,214,1,214,1,214, + 1,214,3,214,2573,8,214,1,214,1,214,1,214,3,214,2578,8,214,1,214, + 1,214,1,214,1,214,1,214,1,214,1,214,3,214,2587,8,214,1,214,1,214, + 1,214,3,214,2592,8,214,1,214,1,214,3,214,2596,8,214,1,215,1,215, + 1,215,5,215,2601,8,215,10,215,12,215,2604,9,215,1,216,1,216,1,216, + 3,216,2609,8,216,1,216,1,216,1,216,1,216,1,216,3,216,2616,8,216, + 1,216,1,216,1,216,1,216,1,216,3,216,2623,8,216,1,216,1,216,1,216, + 1,216,1,216,3,216,2630,8,216,1,216,1,216,1,216,1,216,1,216,1,216, + 3,216,2638,8,216,1,216,1,216,1,216,1,216,1,216,3,216,2645,8,216, + 1,216,1,216,1,216,1,216,1,216,1,216,3,216,2653,8,216,1,217,1,217, + 3,217,2657,8,217,1,217,1,217,3,217,2661,8,217,3,217,2663,8,217,1, + 218,1,218,3,218,2667,8,218,1,218,1,218,3,218,2671,8,218,3,218,2673, + 8,218,1,219,1,219,1,219,1,220,1,220,1,220,1,221,1,221,1,221,1,221, + 1,221,1,221,1,221,3,221,2688,8,221,1,222,1,222,1,222,1,223,1,223, + 1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,224,3,224,2703,8,224, + 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,5,225,2713,8,225, + 10,225,12,225,2716,9,225,1,225,1,225,1,225,1,225,1,225,1,225,5,225, + 2724,8,225,10,225,12,225,2727,9,225,1,225,1,225,1,225,3,225,2732, + 8,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,5,226,2746,8,226,10,226,12,226,2749,9,226,1,227,1,227, + 1,227,1,227,1,227,1,227,1,227,1,227,1,227,5,227,2760,8,227,10,227, + 12,227,2763,9,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,228,1,228,1,228,1,228,5,228,2781,8,228, + 10,228,12,228,2784,9,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,229,1,229,1,229,1,229,1,229,1,229, + 1,229,3,229,2805,8,229,5,229,2807,8,229,10,229,12,229,2810,9,229, + 1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,5,230,2821, + 8,230,10,230,12,230,2824,9,230,1,231,1,231,1,231,1,231,1,231,1,231, + 5,231,2832,8,231,10,231,12,231,2835,9,231,1,232,1,232,1,232,1,232, + 1,232,1,232,5,232,2843,8,232,10,232,12,232,2846,9,232,1,233,1,233, + 1,233,1,233,1,233,1,233,5,233,2854,8,233,10,233,12,233,2857,9,233, + 1,234,1,234,1,234,1,234,1,234,1,234,5,234,2865,8,234,10,234,12,234, + 2868,9,234,1,235,1,235,1,235,1,235,1,235,1,235,5,235,2876,8,235, + 10,235,12,235,2879,9,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,3,236,2894,8,236,1,237,1,237, + 3,237,2898,8,237,1,238,1,238,1,238,1,238,1,239,1,239,1,239,3,239, + 2907,8,239,1,240,1,240,1,241,1,241,1,241,1,241,1,242,1,242,3,242, + 2917,8,242,1,242,1,242,3,242,2921,8,242,1,243,1,243,1,243,5,243, + 2926,8,243,10,243,12,243,2929,9,243,1,243,1,243,1,243,5,243,2934, + 8,243,10,243,12,243,2937,9,243,3,243,2939,8,243,1,244,5,244,2942, + 8,244,10,244,12,244,2945,9,244,1,244,1,244,1,244,1,244,3,244,2951, + 8,244,1,245,1,245,3,245,2955,8,245,1,246,1,246,3,246,2959,8,246, + 1,247,1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248,0,10,452,454, + 456,458,460,462,464,466,468,470,249,0,2,4,6,8,10,12,14,16,18,20, + 22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64, + 66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106, + 108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138, + 140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170, + 172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202, + 204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234, + 236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266, + 268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298, + 300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330, + 332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362, + 364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394, + 396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426, + 428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458, + 460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490, + 492,494,496,0,9,2,0,1,3,5,17,6,0,1,3,5,6,8,8,10,10,12,14,16,16,2, + 0,1,3,5,16,1,0,69,75,5,0,22,22,25,25,44,44,46,46,54,54,2,0,31,31, + 37,37,2,0,13,13,55,55,2,0,57,57,60,60,2,0,88,88,112,122,3227,0,498, + 1,0,0,0,2,503,1,0,0,0,4,507,1,0,0,0,6,511,1,0,0,0,8,513,1,0,0,0, + 10,515,1,0,0,0,12,517,1,0,0,0,14,519,1,0,0,0,16,524,1,0,0,0,18,533, + 1,0,0,0,20,535,1,0,0,0,22,537,1,0,0,0,24,542,1,0,0,0,26,544,1,0, + 0,0,28,561,1,0,0,0,30,610,1,0,0,0,32,612,1,0,0,0,34,617,1,0,0,0, + 36,631,1,0,0,0,38,636,1,0,0,0,40,657,1,0,0,0,42,664,1,0,0,0,44,666, + 1,0,0,0,46,677,1,0,0,0,48,680,1,0,0,0,50,684,1,0,0,0,52,694,1,0, + 0,0,54,699,1,0,0,0,56,710,1,0,0,0,58,712,1,0,0,0,60,717,1,0,0,0, + 62,722,1,0,0,0,64,727,1,0,0,0,66,735,1,0,0,0,68,739,1,0,0,0,70,741, + 1,0,0,0,72,748,1,0,0,0,74,751,1,0,0,0,76,768,1,0,0,0,78,776,1,0, + 0,0,80,790,1,0,0,0,82,796,1,0,0,0,84,798,1,0,0,0,86,802,1,0,0,0, + 88,808,1,0,0,0,90,815,1,0,0,0,92,825,1,0,0,0,94,830,1,0,0,0,96,911, + 1,0,0,0,98,913,1,0,0,0,100,918,1,0,0,0,102,923,1,0,0,0,104,952,1, + 0,0,0,106,954,1,0,0,0,108,958,1,0,0,0,110,966,1,0,0,0,112,969,1, + 0,0,0,114,972,1,0,0,0,116,980,1,0,0,0,118,989,1,0,0,0,120,1002,1, + 0,0,0,122,1009,1,0,0,0,124,1014,1,0,0,0,126,1029,1,0,0,0,128,1031, + 1,0,0,0,130,1039,1,0,0,0,132,1044,1,0,0,0,134,1050,1,0,0,0,136,1054, + 1,0,0,0,138,1058,1,0,0,0,140,1063,1,0,0,0,142,1073,1,0,0,0,144,1082, + 1,0,0,0,146,1115,1,0,0,0,148,1117,1,0,0,0,150,1119,1,0,0,0,152,1124, + 1,0,0,0,154,1131,1,0,0,0,156,1147,1,0,0,0,158,1156,1,0,0,0,160,1165, + 1,0,0,0,162,1167,1,0,0,0,164,1184,1,0,0,0,166,1195,1,0,0,0,168,1213, + 1,0,0,0,170,1218,1,0,0,0,172,1233,1,0,0,0,174,1235,1,0,0,0,176,1238, + 1,0,0,0,178,1248,1,0,0,0,180,1252,1,0,0,0,182,1254,1,0,0,0,184,1256, + 1,0,0,0,186,1262,1,0,0,0,188,1275,1,0,0,0,190,1278,1,0,0,0,192,1292, + 1,0,0,0,194,1294,1,0,0,0,196,1329,1,0,0,0,198,1334,1,0,0,0,200,1344, + 1,0,0,0,202,1356,1,0,0,0,204,1367,1,0,0,0,206,1381,1,0,0,0,208,1383, + 1,0,0,0,210,1393,1,0,0,0,212,1407,1,0,0,0,214,1413,1,0,0,0,216,1431, + 1,0,0,0,218,1436,1,0,0,0,220,1449,1,0,0,0,222,1451,1,0,0,0,224,1462, + 1,0,0,0,226,1467,1,0,0,0,228,1475,1,0,0,0,230,1480,1,0,0,0,232,1505, + 1,0,0,0,234,1507,1,0,0,0,236,1510,1,0,0,0,238,1519,1,0,0,0,240,1533, + 1,0,0,0,242,1538,1,0,0,0,244,1549,1,0,0,0,246,1554,1,0,0,0,248,1567, + 1,0,0,0,250,1572,1,0,0,0,252,1580,1,0,0,0,254,1594,1,0,0,0,256,1599, + 1,0,0,0,258,1617,1,0,0,0,260,1619,1,0,0,0,262,1625,1,0,0,0,264,1627, + 1,0,0,0,266,1635,1,0,0,0,268,1643,1,0,0,0,270,1650,1,0,0,0,272,1652, + 1,0,0,0,274,1661,1,0,0,0,276,1669,1,0,0,0,278,1672,1,0,0,0,280,1678, + 1,0,0,0,282,1687,1,0,0,0,284,1695,1,0,0,0,286,1701,1,0,0,0,288,1711, + 1,0,0,0,290,1715,1,0,0,0,292,1720,1,0,0,0,294,1728,1,0,0,0,296,1730, + 1,0,0,0,298,1739,1,0,0,0,300,1746,1,0,0,0,302,1761,1,0,0,0,304,1763, + 1,0,0,0,306,1765,1,0,0,0,308,1769,1,0,0,0,310,1773,1,0,0,0,312,1783, + 1,0,0,0,314,1785,1,0,0,0,316,1791,1,0,0,0,318,1799,1,0,0,0,320,1807, + 1,0,0,0,322,1815,1,0,0,0,324,1847,1,0,0,0,326,1849,1,0,0,0,328,1858, + 1,0,0,0,330,1880,1,0,0,0,332,1882,1,0,0,0,334,1884,1,0,0,0,336,1890, + 1,0,0,0,338,1896,1,0,0,0,340,1906,1,0,0,0,342,1910,1,0,0,0,344,1912, + 1,0,0,0,346,1928,1,0,0,0,348,1946,1,0,0,0,350,1948,1,0,0,0,352,1950, + 1,0,0,0,354,1958,1,0,0,0,356,1966,1,0,0,0,358,1974,1,0,0,0,360,1980, + 1,0,0,0,362,1986,1,0,0,0,364,1992,1,0,0,0,366,1996,1,0,0,0,368,2018, + 1,0,0,0,370,2020,1,0,0,0,372,2027,1,0,0,0,374,2036,1,0,0,0,376,2042, + 1,0,0,0,378,2050,1,0,0,0,380,2053,1,0,0,0,382,2062,1,0,0,0,384,2069, + 1,0,0,0,386,2079,1,0,0,0,388,2083,1,0,0,0,390,2085,1,0,0,0,392,2089, + 1,0,0,0,394,2091,1,0,0,0,396,2095,1,0,0,0,398,2099,1,0,0,0,400,2318, + 1,0,0,0,402,2357,1,0,0,0,404,2394,1,0,0,0,406,2405,1,0,0,0,408,2407, + 1,0,0,0,410,2423,1,0,0,0,412,2445,1,0,0,0,414,2449,1,0,0,0,416,2463, + 1,0,0,0,418,2475,1,0,0,0,420,2477,1,0,0,0,422,2487,1,0,0,0,424,2509, + 1,0,0,0,426,2524,1,0,0,0,428,2595,1,0,0,0,430,2597,1,0,0,0,432,2652, + 1,0,0,0,434,2662,1,0,0,0,436,2672,1,0,0,0,438,2674,1,0,0,0,440,2677, + 1,0,0,0,442,2687,1,0,0,0,444,2689,1,0,0,0,446,2692,1,0,0,0,448,2702, + 1,0,0,0,450,2731,1,0,0,0,452,2733,1,0,0,0,454,2750,1,0,0,0,456,2764, + 1,0,0,0,458,2785,1,0,0,0,460,2811,1,0,0,0,462,2825,1,0,0,0,464,2836, + 1,0,0,0,466,2847,1,0,0,0,468,2858,1,0,0,0,470,2869,1,0,0,0,472,2893, + 1,0,0,0,474,2897,1,0,0,0,476,2899,1,0,0,0,478,2906,1,0,0,0,480,2908, + 1,0,0,0,482,2910,1,0,0,0,484,2920,1,0,0,0,486,2938,1,0,0,0,488,2950, + 1,0,0,0,490,2954,1,0,0,0,492,2958,1,0,0,0,494,2960,1,0,0,0,496,2966, + 1,0,0,0,498,499,3,72,36,0,499,500,5,0,0,1,500,1,1,0,0,0,501,504, + 5,123,0,0,502,504,3,8,4,0,503,501,1,0,0,0,503,502,1,0,0,0,504,3, + 1,0,0,0,505,508,5,123,0,0,506,508,3,10,5,0,507,505,1,0,0,0,507,506, + 1,0,0,0,508,5,1,0,0,0,509,512,5,123,0,0,510,512,3,12,6,0,511,509, + 1,0,0,0,511,510,1,0,0,0,512,7,1,0,0,0,513,514,7,0,0,0,514,9,1,0, + 0,0,515,516,7,1,0,0,516,11,1,0,0,0,517,518,7,2,0,0,518,13,1,0,0, + 0,519,520,7,3,0,0,520,15,1,0,0,0,521,523,3,262,131,0,522,521,1,0, + 0,0,523,526,1,0,0,0,524,522,1,0,0,0,524,525,1,0,0,0,525,529,1,0, + 0,0,526,524,1,0,0,0,527,530,3,18,9,0,528,530,5,20,0,0,529,527,1, + 0,0,0,529,528,1,0,0,0,530,17,1,0,0,0,531,534,3,20,10,0,532,534,3, + 22,11,0,533,531,1,0,0,0,533,532,1,0,0,0,534,19,1,0,0,0,535,536,7, + 4,0,0,536,21,1,0,0,0,537,538,7,5,0,0,538,23,1,0,0,0,539,543,3,28, + 14,0,540,543,3,34,17,0,541,543,3,36,18,0,542,539,1,0,0,0,542,540, + 1,0,0,0,542,541,1,0,0,0,543,25,1,0,0,0,544,548,5,84,0,0,545,547, + 3,262,131,0,546,545,1,0,0,0,547,550,1,0,0,0,548,546,1,0,0,0,548, + 549,1,0,0,0,549,551,1,0,0,0,550,548,1,0,0,0,551,553,3,4,2,0,552, + 554,3,48,24,0,553,552,1,0,0,0,553,554,1,0,0,0,554,556,1,0,0,0,555, + 557,3,26,13,0,556,555,1,0,0,0,556,557,1,0,0,0,557,27,1,0,0,0,558, + 559,3,60,30,0,559,560,5,84,0,0,560,562,1,0,0,0,561,558,1,0,0,0,561, + 562,1,0,0,0,562,566,1,0,0,0,563,565,3,262,131,0,564,563,1,0,0,0, + 565,568,1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,0,567,569,1,0,0,0, + 568,566,1,0,0,0,569,571,3,4,2,0,570,572,3,48,24,0,571,570,1,0,0, + 0,571,572,1,0,0,0,572,574,1,0,0,0,573,575,3,26,13,0,574,573,1,0, + 0,0,574,575,1,0,0,0,575,29,1,0,0,0,576,578,3,262,131,0,577,576,1, + 0,0,0,578,581,1,0,0,0,579,577,1,0,0,0,579,580,1,0,0,0,580,582,1, + 0,0,0,581,579,1,0,0,0,582,584,3,4,2,0,583,585,3,48,24,0,584,583, + 1,0,0,0,584,585,1,0,0,0,585,611,1,0,0,0,586,587,3,60,30,0,587,591, + 5,84,0,0,588,590,3,262,131,0,589,588,1,0,0,0,590,593,1,0,0,0,591, + 589,1,0,0,0,591,592,1,0,0,0,592,594,1,0,0,0,593,591,1,0,0,0,594, + 596,3,4,2,0,595,597,3,48,24,0,596,595,1,0,0,0,596,597,1,0,0,0,597, + 611,1,0,0,0,598,599,3,28,14,0,599,603,5,84,0,0,600,602,3,262,131, + 0,601,600,1,0,0,0,602,605,1,0,0,0,603,601,1,0,0,0,603,604,1,0,0, + 0,604,606,1,0,0,0,605,603,1,0,0,0,606,608,3,4,2,0,607,609,3,48,24, + 0,608,607,1,0,0,0,608,609,1,0,0,0,609,611,1,0,0,0,610,579,1,0,0, + 0,610,586,1,0,0,0,610,598,1,0,0,0,611,31,1,0,0,0,612,613,3,30,15, + 0,613,33,1,0,0,0,614,616,3,262,131,0,615,614,1,0,0,0,616,619,1,0, + 0,0,617,615,1,0,0,0,617,618,1,0,0,0,618,620,1,0,0,0,619,617,1,0, + 0,0,620,621,3,4,2,0,621,35,1,0,0,0,622,623,3,16,8,0,623,624,3,38, + 19,0,624,632,1,0,0,0,625,626,3,30,15,0,626,627,3,38,19,0,627,632, + 1,0,0,0,628,629,3,34,17,0,629,630,3,38,19,0,630,632,1,0,0,0,631, + 622,1,0,0,0,631,625,1,0,0,0,631,628,1,0,0,0,632,37,1,0,0,0,633,635, + 3,262,131,0,634,633,1,0,0,0,635,638,1,0,0,0,636,634,1,0,0,0,636, + 637,1,0,0,0,637,639,1,0,0,0,638,636,1,0,0,0,639,640,5,80,0,0,640, + 651,5,81,0,0,641,643,3,262,131,0,642,641,1,0,0,0,643,646,1,0,0,0, + 644,642,1,0,0,0,644,645,1,0,0,0,645,647,1,0,0,0,646,644,1,0,0,0, + 647,648,5,80,0,0,648,650,5,81,0,0,649,644,1,0,0,0,650,653,1,0,0, + 0,651,649,1,0,0,0,651,652,1,0,0,0,652,39,1,0,0,0,653,651,1,0,0,0, + 654,656,3,42,21,0,655,654,1,0,0,0,656,659,1,0,0,0,657,655,1,0,0, + 0,657,658,1,0,0,0,658,660,1,0,0,0,659,657,1,0,0,0,660,662,3,4,2, + 0,661,663,3,44,22,0,662,661,1,0,0,0,662,663,1,0,0,0,663,41,1,0,0, + 0,664,665,3,262,131,0,665,43,1,0,0,0,666,675,5,34,0,0,667,676,3, + 34,17,0,668,672,3,28,14,0,669,671,3,46,23,0,670,669,1,0,0,0,671, + 674,1,0,0,0,672,670,1,0,0,0,672,673,1,0,0,0,673,676,1,0,0,0,674, + 672,1,0,0,0,675,667,1,0,0,0,675,668,1,0,0,0,676,45,1,0,0,0,677,678, + 5,108,0,0,678,679,3,32,16,0,679,47,1,0,0,0,680,681,5,90,0,0,681, + 682,3,50,25,0,682,683,5,89,0,0,683,49,1,0,0,0,684,689,3,52,26,0, + 685,686,5,83,0,0,686,688,3,52,26,0,687,685,1,0,0,0,688,691,1,0,0, + 0,689,687,1,0,0,0,689,690,1,0,0,0,690,51,1,0,0,0,691,689,1,0,0,0, + 692,695,3,24,12,0,693,695,3,54,27,0,694,692,1,0,0,0,694,693,1,0, + 0,0,695,53,1,0,0,0,696,698,3,262,131,0,697,696,1,0,0,0,698,701,1, + 0,0,0,699,697,1,0,0,0,699,700,1,0,0,0,700,702,1,0,0,0,701,699,1, + 0,0,0,702,704,5,93,0,0,703,705,3,56,28,0,704,703,1,0,0,0,704,705, + 1,0,0,0,705,55,1,0,0,0,706,707,5,34,0,0,707,711,3,24,12,0,708,709, + 5,57,0,0,709,711,3,24,12,0,710,706,1,0,0,0,710,708,1,0,0,0,711,57, + 1,0,0,0,712,715,3,2,1,0,713,714,5,84,0,0,714,716,3,58,29,0,715,713, + 1,0,0,0,715,716,1,0,0,0,716,59,1,0,0,0,717,720,3,2,1,0,718,719,5, + 84,0,0,719,721,3,60,30,0,720,718,1,0,0,0,720,721,1,0,0,0,721,61, + 1,0,0,0,722,725,3,60,30,0,723,724,5,84,0,0,724,726,3,4,2,0,725,723, + 1,0,0,0,725,726,1,0,0,0,726,63,1,0,0,0,727,730,3,2,1,0,728,729,5, + 84,0,0,729,731,3,64,32,0,730,728,1,0,0,0,730,731,1,0,0,0,731,65, + 1,0,0,0,732,733,3,70,35,0,733,734,5,84,0,0,734,736,1,0,0,0,735,732, + 1,0,0,0,735,736,1,0,0,0,736,737,1,0,0,0,737,738,3,2,1,0,738,67,1, + 0,0,0,739,740,3,6,3,0,740,69,1,0,0,0,741,744,3,2,1,0,742,743,5,84, + 0,0,743,745,3,70,35,0,744,742,1,0,0,0,744,745,1,0,0,0,745,71,1,0, + 0,0,746,749,3,74,37,0,747,749,3,76,38,0,748,746,1,0,0,0,748,747, + 1,0,0,0,749,73,1,0,0,0,750,752,3,78,39,0,751,750,1,0,0,0,751,752, + 1,0,0,0,752,756,1,0,0,0,753,755,3,82,41,0,754,753,1,0,0,0,755,758, + 1,0,0,0,756,754,1,0,0,0,756,757,1,0,0,0,757,762,1,0,0,0,758,756, + 1,0,0,0,759,761,3,92,46,0,760,759,1,0,0,0,761,764,1,0,0,0,762,760, + 1,0,0,0,762,763,1,0,0,0,763,75,1,0,0,0,764,762,1,0,0,0,765,767,3, + 82,41,0,766,765,1,0,0,0,767,770,1,0,0,0,768,766,1,0,0,0,768,769, + 1,0,0,0,769,771,1,0,0,0,770,768,1,0,0,0,771,772,3,94,47,0,772,77, + 1,0,0,0,773,775,3,80,40,0,774,773,1,0,0,0,775,778,1,0,0,0,776,774, + 1,0,0,0,776,777,1,0,0,0,777,779,1,0,0,0,778,776,1,0,0,0,779,780, + 5,49,0,0,780,785,3,2,1,0,781,782,5,84,0,0,782,784,3,2,1,0,783,781, + 1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785,786,1,0,0,0,786,788, + 1,0,0,0,787,785,1,0,0,0,788,789,5,82,0,0,789,79,1,0,0,0,790,791, + 3,262,131,0,791,81,1,0,0,0,792,797,3,84,42,0,793,797,3,86,43,0,794, + 797,3,88,44,0,795,797,3,90,45,0,796,792,1,0,0,0,796,793,1,0,0,0, + 796,794,1,0,0,0,796,795,1,0,0,0,797,83,1,0,0,0,798,799,5,42,0,0, + 799,800,3,62,31,0,800,801,5,82,0,0,801,85,1,0,0,0,802,803,5,42,0, + 0,803,804,3,64,32,0,804,805,5,84,0,0,805,806,5,106,0,0,806,807,5, + 82,0,0,807,87,1,0,0,0,808,809,5,42,0,0,809,810,5,55,0,0,810,811, + 3,62,31,0,811,812,5,84,0,0,812,813,3,2,1,0,813,814,5,82,0,0,814, + 89,1,0,0,0,815,816,5,42,0,0,816,817,5,55,0,0,817,818,3,62,31,0,818, + 819,5,84,0,0,819,820,5,106,0,0,820,821,5,82,0,0,821,91,1,0,0,0,822, + 826,3,100,50,0,823,826,3,228,114,0,824,826,5,82,0,0,825,822,1,0, + 0,0,825,823,1,0,0,0,825,824,1,0,0,0,826,93,1,0,0,0,827,829,3,262, + 131,0,828,827,1,0,0,0,829,832,1,0,0,0,830,828,1,0,0,0,830,831,1, + 0,0,0,831,834,1,0,0,0,832,830,1,0,0,0,833,835,5,5,0,0,834,833,1, + 0,0,0,834,835,1,0,0,0,835,836,1,0,0,0,836,837,5,2,0,0,837,842,3, + 2,1,0,838,839,5,84,0,0,839,841,3,2,1,0,840,838,1,0,0,0,841,844,1, + 0,0,0,842,840,1,0,0,0,842,843,1,0,0,0,843,845,1,0,0,0,844,842,1, + 0,0,0,845,849,5,78,0,0,846,848,3,96,48,0,847,846,1,0,0,0,848,851, + 1,0,0,0,849,847,1,0,0,0,849,850,1,0,0,0,850,852,1,0,0,0,851,849, + 1,0,0,0,852,853,5,79,0,0,853,95,1,0,0,0,854,858,5,10,0,0,855,857, + 3,98,49,0,856,855,1,0,0,0,857,860,1,0,0,0,858,856,1,0,0,0,858,859, + 1,0,0,0,859,861,1,0,0,0,860,858,1,0,0,0,861,862,3,58,29,0,862,863, + 5,82,0,0,863,912,1,0,0,0,864,865,5,1,0,0,865,875,3,60,30,0,866,867, + 5,12,0,0,867,872,3,58,29,0,868,869,5,83,0,0,869,871,3,58,29,0,870, + 868,1,0,0,0,871,874,1,0,0,0,872,870,1,0,0,0,872,873,1,0,0,0,873, + 876,1,0,0,0,874,872,1,0,0,0,875,866,1,0,0,0,875,876,1,0,0,0,876, + 877,1,0,0,0,877,878,5,82,0,0,878,912,1,0,0,0,879,880,5,6,0,0,880, + 890,3,60,30,0,881,882,5,12,0,0,882,887,3,58,29,0,883,884,5,83,0, + 0,884,886,3,58,29,0,885,883,1,0,0,0,886,889,1,0,0,0,887,885,1,0, + 0,0,887,888,1,0,0,0,888,891,1,0,0,0,889,887,1,0,0,0,890,881,1,0, + 0,0,890,891,1,0,0,0,891,892,1,0,0,0,892,893,5,82,0,0,893,912,1,0, + 0,0,894,895,5,14,0,0,895,896,3,62,31,0,896,897,5,82,0,0,897,912, + 1,0,0,0,898,899,5,8,0,0,899,900,3,62,31,0,900,901,5,16,0,0,901,906, + 3,62,31,0,902,903,5,83,0,0,903,905,3,62,31,0,904,902,1,0,0,0,905, + 908,1,0,0,0,906,904,1,0,0,0,906,907,1,0,0,0,907,909,1,0,0,0,908, + 906,1,0,0,0,909,910,5,82,0,0,910,912,1,0,0,0,911,854,1,0,0,0,911, + 864,1,0,0,0,911,879,1,0,0,0,911,894,1,0,0,0,911,898,1,0,0,0,912, + 97,1,0,0,0,913,914,7,6,0,0,914,99,1,0,0,0,915,919,3,102,51,0,916, + 919,3,198,99,0,917,919,3,210,105,0,918,915,1,0,0,0,918,916,1,0,0, + 0,918,917,1,0,0,0,919,101,1,0,0,0,920,922,3,104,52,0,921,920,1,0, + 0,0,922,925,1,0,0,0,923,921,1,0,0,0,923,924,1,0,0,0,924,926,1,0, + 0,0,925,923,1,0,0,0,926,927,5,26,0,0,927,929,3,4,2,0,928,930,3,106, + 53,0,929,928,1,0,0,0,929,930,1,0,0,0,930,932,1,0,0,0,931,933,3,110, + 55,0,932,931,1,0,0,0,932,933,1,0,0,0,933,935,1,0,0,0,934,936,3,112, + 56,0,935,934,1,0,0,0,935,936,1,0,0,0,936,938,1,0,0,0,937,939,3,116, + 58,0,938,937,1,0,0,0,938,939,1,0,0,0,939,940,1,0,0,0,940,941,3,118, + 59,0,941,103,1,0,0,0,942,953,3,262,131,0,943,953,5,52,0,0,944,953, + 5,51,0,0,945,953,5,50,0,0,946,953,5,18,0,0,947,953,5,55,0,0,948, + 953,5,35,0,0,949,953,5,11,0,0,950,953,5,3,0,0,951,953,5,56,0,0,952, + 942,1,0,0,0,952,943,1,0,0,0,952,944,1,0,0,0,952,945,1,0,0,0,952, + 946,1,0,0,0,952,947,1,0,0,0,952,948,1,0,0,0,952,949,1,0,0,0,952, + 950,1,0,0,0,952,951,1,0,0,0,953,105,1,0,0,0,954,955,5,90,0,0,955, + 956,3,108,54,0,956,957,5,89,0,0,957,107,1,0,0,0,958,963,3,40,20, + 0,959,960,5,83,0,0,960,962,3,40,20,0,961,959,1,0,0,0,962,965,1,0, + 0,0,963,961,1,0,0,0,963,964,1,0,0,0,964,109,1,0,0,0,965,963,1,0, + 0,0,966,967,5,34,0,0,967,968,3,30,15,0,968,111,1,0,0,0,969,970,5, + 41,0,0,970,971,3,114,57,0,971,113,1,0,0,0,972,977,3,32,16,0,973, + 974,5,83,0,0,974,976,3,32,16,0,975,973,1,0,0,0,976,979,1,0,0,0,977, + 975,1,0,0,0,977,978,1,0,0,0,978,115,1,0,0,0,979,977,1,0,0,0,980, + 981,5,7,0,0,981,986,3,62,31,0,982,983,5,83,0,0,983,985,3,62,31,0, + 984,982,1,0,0,0,985,988,1,0,0,0,986,984,1,0,0,0,986,987,1,0,0,0, + 987,117,1,0,0,0,988,986,1,0,0,0,989,993,5,78,0,0,990,992,3,120,60, + 0,991,990,1,0,0,0,992,995,1,0,0,0,993,991,1,0,0,0,993,994,1,0,0, + 0,994,996,1,0,0,0,995,993,1,0,0,0,996,997,5,79,0,0,997,119,1,0,0, + 0,998,1003,3,122,61,0,999,1003,3,182,91,0,1000,1003,3,184,92,0,1001, + 1003,3,186,93,0,1002,998,1,0,0,0,1002,999,1,0,0,0,1002,1000,1,0, + 0,0,1002,1001,1,0,0,0,1003,121,1,0,0,0,1004,1010,3,124,62,0,1005, + 1010,3,154,77,0,1006,1010,3,100,50,0,1007,1010,3,228,114,0,1008, + 1010,5,82,0,0,1009,1004,1,0,0,0,1009,1005,1,0,0,0,1009,1006,1,0, + 0,0,1009,1007,1,0,0,0,1009,1008,1,0,0,0,1010,123,1,0,0,0,1011,1013, + 3,126,63,0,1012,1011,1,0,0,0,1013,1016,1,0,0,0,1014,1012,1,0,0,0, + 1014,1015,1,0,0,0,1015,1017,1,0,0,0,1016,1014,1,0,0,0,1017,1018, + 3,136,68,0,1018,1019,3,128,64,0,1019,1020,5,82,0,0,1020,125,1,0, + 0,0,1021,1030,3,262,131,0,1022,1030,5,52,0,0,1023,1030,5,51,0,0, + 1024,1030,5,50,0,0,1025,1030,5,55,0,0,1026,1030,5,35,0,0,1027,1030, + 5,63,0,0,1028,1030,5,66,0,0,1029,1021,1,0,0,0,1029,1022,1,0,0,0, + 1029,1023,1,0,0,0,1029,1024,1,0,0,0,1029,1025,1,0,0,0,1029,1026, + 1,0,0,0,1029,1027,1,0,0,0,1029,1028,1,0,0,0,1030,127,1,0,0,0,1031, + 1036,3,130,65,0,1032,1033,5,83,0,0,1033,1035,3,130,65,0,1034,1032, + 1,0,0,0,1035,1038,1,0,0,0,1036,1034,1,0,0,0,1036,1037,1,0,0,0,1037, + 129,1,0,0,0,1038,1036,1,0,0,0,1039,1042,3,132,66,0,1040,1041,5,88, + 0,0,1041,1043,3,134,67,0,1042,1040,1,0,0,0,1042,1043,1,0,0,0,1043, + 131,1,0,0,0,1044,1046,3,2,1,0,1045,1047,3,38,19,0,1046,1045,1,0, + 0,0,1046,1047,1,0,0,0,1047,133,1,0,0,0,1048,1051,3,396,198,0,1049, + 1051,3,280,140,0,1050,1048,1,0,0,0,1050,1049,1,0,0,0,1051,135,1, + 0,0,0,1052,1055,3,138,69,0,1053,1055,3,140,70,0,1054,1052,1,0,0, + 0,1054,1053,1,0,0,0,1055,137,1,0,0,0,1056,1059,3,18,9,0,1057,1059, + 5,20,0,0,1058,1056,1,0,0,0,1058,1057,1,0,0,0,1059,139,1,0,0,0,1060, + 1064,3,142,71,0,1061,1064,3,150,75,0,1062,1064,3,152,76,0,1063,1060, + 1,0,0,0,1063,1061,1,0,0,0,1063,1062,1,0,0,0,1064,141,1,0,0,0,1065, + 1066,3,60,30,0,1066,1070,5,84,0,0,1067,1069,3,262,131,0,1068,1067, + 1,0,0,0,1069,1072,1,0,0,0,1070,1068,1,0,0,0,1070,1071,1,0,0,0,1071, + 1074,1,0,0,0,1072,1070,1,0,0,0,1073,1065,1,0,0,0,1073,1074,1,0,0, + 0,1074,1075,1,0,0,0,1075,1077,3,4,2,0,1076,1078,3,48,24,0,1077,1076, + 1,0,0,0,1077,1078,1,0,0,0,1078,1080,1,0,0,0,1079,1081,3,144,72,0, + 1080,1079,1,0,0,0,1080,1081,1,0,0,0,1081,143,1,0,0,0,1082,1086,5, + 84,0,0,1083,1085,3,262,131,0,1084,1083,1,0,0,0,1085,1088,1,0,0,0, + 1086,1084,1,0,0,0,1086,1087,1,0,0,0,1087,1089,1,0,0,0,1088,1086, + 1,0,0,0,1089,1091,3,4,2,0,1090,1092,3,48,24,0,1091,1090,1,0,0,0, + 1091,1092,1,0,0,0,1092,1094,1,0,0,0,1093,1095,3,144,72,0,1094,1093, + 1,0,0,0,1094,1095,1,0,0,0,1095,145,1,0,0,0,1096,1098,3,4,2,0,1097, + 1099,3,48,24,0,1098,1097,1,0,0,0,1098,1099,1,0,0,0,1099,1116,1,0, + 0,0,1100,1103,3,60,30,0,1101,1103,3,142,71,0,1102,1100,1,0,0,0,1102, + 1101,1,0,0,0,1103,1104,1,0,0,0,1104,1108,5,84,0,0,1105,1107,3,262, + 131,0,1106,1105,1,0,0,0,1107,1110,1,0,0,0,1108,1106,1,0,0,0,1108, + 1109,1,0,0,0,1109,1111,1,0,0,0,1110,1108,1,0,0,0,1111,1113,3,4,2, + 0,1112,1114,3,48,24,0,1113,1112,1,0,0,0,1113,1114,1,0,0,0,1114,1116, + 1,0,0,0,1115,1096,1,0,0,0,1115,1102,1,0,0,0,1116,147,1,0,0,0,1117, + 1118,3,146,73,0,1118,149,1,0,0,0,1119,1120,3,4,2,0,1120,151,1,0, + 0,0,1121,1125,3,138,69,0,1122,1125,3,142,71,0,1123,1125,3,150,75, + 0,1124,1121,1,0,0,0,1124,1122,1,0,0,0,1124,1123,1,0,0,0,1125,1126, + 1,0,0,0,1126,1127,3,38,19,0,1127,153,1,0,0,0,1128,1130,3,156,78, + 0,1129,1128,1,0,0,0,1130,1133,1,0,0,0,1131,1129,1,0,0,0,1131,1132, + 1,0,0,0,1132,1134,1,0,0,0,1133,1131,1,0,0,0,1134,1135,3,158,79,0, + 1135,1136,3,180,90,0,1136,155,1,0,0,0,1137,1148,3,262,131,0,1138, + 1148,5,52,0,0,1139,1148,5,51,0,0,1140,1148,5,50,0,0,1141,1148,5, + 18,0,0,1142,1148,5,55,0,0,1143,1148,5,35,0,0,1144,1148,5,59,0,0, + 1145,1148,5,47,0,0,1146,1148,5,56,0,0,1147,1137,1,0,0,0,1147,1138, + 1,0,0,0,1147,1139,1,0,0,0,1147,1140,1,0,0,0,1147,1141,1,0,0,0,1147, + 1142,1,0,0,0,1147,1143,1,0,0,0,1147,1144,1,0,0,0,1147,1145,1,0,0, + 0,1147,1146,1,0,0,0,1148,157,1,0,0,0,1149,1153,3,106,53,0,1150,1152, + 3,262,131,0,1151,1150,1,0,0,0,1152,1155,1,0,0,0,1153,1151,1,0,0, + 0,1153,1154,1,0,0,0,1154,1157,1,0,0,0,1155,1153,1,0,0,0,1156,1149, + 1,0,0,0,1156,1157,1,0,0,0,1157,1158,1,0,0,0,1158,1159,3,160,80,0, + 1159,1161,3,162,81,0,1160,1162,3,174,87,0,1161,1160,1,0,0,0,1161, + 1162,1,0,0,0,1162,159,1,0,0,0,1163,1166,3,136,68,0,1164,1166,5,65, + 0,0,1165,1163,1,0,0,0,1165,1164,1,0,0,0,1166,161,1,0,0,0,1167,1168, + 3,2,1,0,1168,1172,5,76,0,0,1169,1170,3,164,82,0,1170,1171,5,83,0, + 0,1171,1173,1,0,0,0,1172,1169,1,0,0,0,1172,1173,1,0,0,0,1173,1175, + 1,0,0,0,1174,1176,3,166,83,0,1175,1174,1,0,0,0,1175,1176,1,0,0,0, + 1176,1177,1,0,0,0,1177,1179,5,77,0,0,1178,1180,3,38,19,0,1179,1178, + 1,0,0,0,1179,1180,1,0,0,0,1180,163,1,0,0,0,1181,1183,3,262,131,0, + 1182,1181,1,0,0,0,1183,1186,1,0,0,0,1184,1182,1,0,0,0,1184,1185, + 1,0,0,0,1185,1187,1,0,0,0,1186,1184,1,0,0,0,1187,1191,3,136,68,0, + 1188,1189,3,2,1,0,1189,1190,5,84,0,0,1190,1192,1,0,0,0,1191,1188, + 1,0,0,0,1191,1192,1,0,0,0,1192,1193,1,0,0,0,1193,1194,5,60,0,0,1194, + 165,1,0,0,0,1195,1200,3,168,84,0,1196,1197,5,83,0,0,1197,1199,3, + 168,84,0,1198,1196,1,0,0,0,1199,1202,1,0,0,0,1200,1198,1,0,0,0,1200, + 1201,1,0,0,0,1201,167,1,0,0,0,1202,1200,1,0,0,0,1203,1205,3,172, + 86,0,1204,1203,1,0,0,0,1205,1208,1,0,0,0,1206,1204,1,0,0,0,1206, + 1207,1,0,0,0,1207,1209,1,0,0,0,1208,1206,1,0,0,0,1209,1210,3,136, + 68,0,1210,1211,3,132,66,0,1211,1214,1,0,0,0,1212,1214,3,170,85,0, + 1213,1206,1,0,0,0,1213,1212,1,0,0,0,1214,169,1,0,0,0,1215,1217,3, + 172,86,0,1216,1215,1,0,0,0,1217,1220,1,0,0,0,1218,1216,1,0,0,0,1218, + 1219,1,0,0,0,1219,1221,1,0,0,0,1220,1218,1,0,0,0,1221,1225,3,136, + 68,0,1222,1224,3,262,131,0,1223,1222,1,0,0,0,1224,1227,1,0,0,0,1225, + 1223,1,0,0,0,1225,1226,1,0,0,0,1226,1228,1,0,0,0,1227,1225,1,0,0, + 0,1228,1229,5,85,0,0,1229,1230,3,2,1,0,1230,171,1,0,0,0,1231,1234, + 3,262,131,0,1232,1234,5,35,0,0,1233,1231,1,0,0,0,1233,1232,1,0,0, + 0,1234,173,1,0,0,0,1235,1236,5,62,0,0,1236,1237,3,176,88,0,1237, + 175,1,0,0,0,1238,1243,3,178,89,0,1239,1240,5,83,0,0,1240,1242,3, + 178,89,0,1241,1239,1,0,0,0,1242,1245,1,0,0,0,1243,1241,1,0,0,0,1243, + 1244,1,0,0,0,1244,177,1,0,0,0,1245,1243,1,0,0,0,1246,1249,3,30,15, + 0,1247,1249,3,34,17,0,1248,1246,1,0,0,0,1248,1247,1,0,0,0,1249,179, + 1,0,0,0,1250,1253,3,284,142,0,1251,1253,5,82,0,0,1252,1250,1,0,0, + 0,1252,1251,1,0,0,0,1253,181,1,0,0,0,1254,1255,3,284,142,0,1255, + 183,1,0,0,0,1256,1257,5,55,0,0,1257,1258,3,284,142,0,1258,185,1, + 0,0,0,1259,1261,3,188,94,0,1260,1259,1,0,0,0,1261,1264,1,0,0,0,1262, + 1260,1,0,0,0,1262,1263,1,0,0,0,1263,1265,1,0,0,0,1264,1262,1,0,0, + 0,1265,1267,3,190,95,0,1266,1268,3,174,87,0,1267,1266,1,0,0,0,1267, + 1268,1,0,0,0,1268,1269,1,0,0,0,1269,1270,3,194,97,0,1270,187,1,0, + 0,0,1271,1276,3,262,131,0,1272,1276,5,52,0,0,1273,1276,5,51,0,0, + 1274,1276,5,50,0,0,1275,1271,1,0,0,0,1275,1272,1,0,0,0,1275,1273, + 1,0,0,0,1275,1274,1,0,0,0,1276,189,1,0,0,0,1277,1279,3,106,53,0, + 1278,1277,1,0,0,0,1278,1279,1,0,0,0,1279,1280,1,0,0,0,1280,1281, + 3,192,96,0,1281,1285,5,76,0,0,1282,1283,3,164,82,0,1283,1284,5,83, + 0,0,1284,1286,1,0,0,0,1285,1282,1,0,0,0,1285,1286,1,0,0,0,1286,1288, + 1,0,0,0,1287,1289,3,166,83,0,1288,1287,1,0,0,0,1288,1289,1,0,0,0, + 1289,1290,1,0,0,0,1290,1291,5,77,0,0,1291,191,1,0,0,0,1292,1293, + 3,4,2,0,1293,193,1,0,0,0,1294,1296,5,78,0,0,1295,1297,3,196,98,0, + 1296,1295,1,0,0,0,1296,1297,1,0,0,0,1297,1299,1,0,0,0,1298,1300, + 3,286,143,0,1299,1298,1,0,0,0,1299,1300,1,0,0,0,1300,1301,1,0,0, + 0,1301,1302,5,79,0,0,1302,195,1,0,0,0,1303,1305,3,48,24,0,1304,1303, + 1,0,0,0,1304,1305,1,0,0,0,1305,1306,1,0,0,0,1306,1307,7,7,0,0,1307, + 1309,5,76,0,0,1308,1310,3,430,215,0,1309,1308,1,0,0,0,1309,1310, + 1,0,0,0,1310,1311,1,0,0,0,1311,1312,5,77,0,0,1312,1330,5,82,0,0, + 1313,1316,3,66,33,0,1314,1316,3,398,199,0,1315,1313,1,0,0,0,1315, + 1314,1,0,0,0,1316,1317,1,0,0,0,1317,1319,5,84,0,0,1318,1320,3,48, + 24,0,1319,1318,1,0,0,0,1319,1320,1,0,0,0,1320,1321,1,0,0,0,1321, + 1322,5,57,0,0,1322,1324,5,76,0,0,1323,1325,3,430,215,0,1324,1323, + 1,0,0,0,1324,1325,1,0,0,0,1325,1326,1,0,0,0,1326,1327,5,77,0,0,1327, + 1328,5,82,0,0,1328,1330,1,0,0,0,1329,1304,1,0,0,0,1329,1315,1,0, + 0,0,1330,197,1,0,0,0,1331,1333,3,104,52,0,1332,1331,1,0,0,0,1333, + 1336,1,0,0,0,1334,1332,1,0,0,0,1334,1335,1,0,0,0,1335,1337,1,0,0, + 0,1336,1334,1,0,0,0,1337,1338,5,33,0,0,1338,1340,3,4,2,0,1339,1341, + 3,112,56,0,1340,1339,1,0,0,0,1340,1341,1,0,0,0,1341,1342,1,0,0,0, + 1342,1343,3,200,100,0,1343,199,1,0,0,0,1344,1346,5,78,0,0,1345,1347, + 3,202,101,0,1346,1345,1,0,0,0,1346,1347,1,0,0,0,1347,1349,1,0,0, + 0,1348,1350,5,83,0,0,1349,1348,1,0,0,0,1349,1350,1,0,0,0,1350,1352, + 1,0,0,0,1351,1353,3,208,104,0,1352,1351,1,0,0,0,1352,1353,1,0,0, + 0,1353,1354,1,0,0,0,1354,1355,5,79,0,0,1355,201,1,0,0,0,1356,1361, + 3,204,102,0,1357,1358,5,83,0,0,1358,1360,3,204,102,0,1359,1357,1, + 0,0,0,1360,1363,1,0,0,0,1361,1359,1,0,0,0,1361,1362,1,0,0,0,1362, + 203,1,0,0,0,1363,1361,1,0,0,0,1364,1366,3,206,103,0,1365,1364,1, + 0,0,0,1366,1369,1,0,0,0,1367,1365,1,0,0,0,1367,1368,1,0,0,0,1368, + 1370,1,0,0,0,1369,1367,1,0,0,0,1370,1376,3,2,1,0,1371,1373,5,76, + 0,0,1372,1374,3,430,215,0,1373,1372,1,0,0,0,1373,1374,1,0,0,0,1374, + 1375,1,0,0,0,1375,1377,5,77,0,0,1376,1371,1,0,0,0,1376,1377,1,0, + 0,0,1377,1379,1,0,0,0,1378,1380,3,118,59,0,1379,1378,1,0,0,0,1379, + 1380,1,0,0,0,1380,205,1,0,0,0,1381,1382,3,262,131,0,1382,207,1,0, + 0,0,1383,1387,5,82,0,0,1384,1386,3,120,60,0,1385,1384,1,0,0,0,1386, + 1389,1,0,0,0,1387,1385,1,0,0,0,1387,1388,1,0,0,0,1388,209,1,0,0, + 0,1389,1387,1,0,0,0,1390,1392,3,104,52,0,1391,1390,1,0,0,0,1392, + 1395,1,0,0,0,1393,1391,1,0,0,0,1393,1394,1,0,0,0,1394,1396,1,0,0, + 0,1395,1393,1,0,0,0,1396,1397,5,9,0,0,1397,1399,3,4,2,0,1398,1400, + 3,106,53,0,1399,1398,1,0,0,0,1399,1400,1,0,0,0,1400,1401,1,0,0,0, + 1401,1403,3,212,106,0,1402,1404,3,112,56,0,1403,1402,1,0,0,0,1403, + 1404,1,0,0,0,1404,1405,1,0,0,0,1405,1406,3,222,111,0,1406,211,1, + 0,0,0,1407,1409,5,76,0,0,1408,1410,3,214,107,0,1409,1408,1,0,0,0, + 1409,1410,1,0,0,0,1410,1411,1,0,0,0,1411,1412,5,77,0,0,1412,213, + 1,0,0,0,1413,1418,3,216,108,0,1414,1415,5,83,0,0,1415,1417,3,216, + 108,0,1416,1414,1,0,0,0,1417,1420,1,0,0,0,1418,1416,1,0,0,0,1418, + 1419,1,0,0,0,1419,215,1,0,0,0,1420,1418,1,0,0,0,1421,1423,3,220, + 110,0,1422,1421,1,0,0,0,1423,1426,1,0,0,0,1424,1422,1,0,0,0,1424, + 1425,1,0,0,0,1425,1427,1,0,0,0,1426,1424,1,0,0,0,1427,1428,3,136, + 68,0,1428,1429,3,2,1,0,1429,1432,1,0,0,0,1430,1432,3,218,109,0,1431, + 1424,1,0,0,0,1431,1430,1,0,0,0,1432,217,1,0,0,0,1433,1435,3,220, + 110,0,1434,1433,1,0,0,0,1435,1438,1,0,0,0,1436,1434,1,0,0,0,1436, + 1437,1,0,0,0,1437,1439,1,0,0,0,1438,1436,1,0,0,0,1439,1443,3,136, + 68,0,1440,1442,3,262,131,0,1441,1440,1,0,0,0,1442,1445,1,0,0,0,1443, + 1441,1,0,0,0,1443,1444,1,0,0,0,1444,1446,1,0,0,0,1445,1443,1,0,0, + 0,1446,1447,5,85,0,0,1447,1448,3,2,1,0,1448,219,1,0,0,0,1449,1450, + 3,262,131,0,1450,221,1,0,0,0,1451,1455,5,78,0,0,1452,1454,3,224, + 112,0,1453,1452,1,0,0,0,1454,1457,1,0,0,0,1455,1453,1,0,0,0,1455, + 1456,1,0,0,0,1456,1458,1,0,0,0,1457,1455,1,0,0,0,1458,1459,5,79, + 0,0,1459,223,1,0,0,0,1460,1463,3,120,60,0,1461,1463,3,226,113,0, + 1462,1460,1,0,0,0,1462,1461,1,0,0,0,1463,225,1,0,0,0,1464,1466,3, + 188,94,0,1465,1464,1,0,0,0,1466,1469,1,0,0,0,1467,1465,1,0,0,0,1467, + 1468,1,0,0,0,1468,1470,1,0,0,0,1469,1467,1,0,0,0,1470,1471,3,192, + 96,0,1471,1472,3,194,97,0,1472,227,1,0,0,0,1473,1476,3,230,115,0, + 1474,1476,3,250,125,0,1475,1473,1,0,0,0,1475,1474,1,0,0,0,1476,229, + 1,0,0,0,1477,1479,3,232,116,0,1478,1477,1,0,0,0,1479,1482,1,0,0, + 0,1480,1478,1,0,0,0,1480,1481,1,0,0,0,1481,1483,1,0,0,0,1482,1480, + 1,0,0,0,1483,1484,5,45,0,0,1484,1486,3,4,2,0,1485,1487,3,106,53, + 0,1486,1485,1,0,0,0,1486,1487,1,0,0,0,1487,1489,1,0,0,0,1488,1490, + 3,234,117,0,1489,1488,1,0,0,0,1489,1490,1,0,0,0,1490,1492,1,0,0, + 0,1491,1493,3,236,118,0,1492,1491,1,0,0,0,1492,1493,1,0,0,0,1493, + 1494,1,0,0,0,1494,1495,3,238,119,0,1495,231,1,0,0,0,1496,1506,3, + 262,131,0,1497,1506,5,52,0,0,1498,1506,5,51,0,0,1499,1506,5,50,0, + 0,1500,1506,5,18,0,0,1501,1506,5,55,0,0,1502,1506,5,11,0,0,1503, + 1506,5,3,0,0,1504,1506,5,56,0,0,1505,1496,1,0,0,0,1505,1497,1,0, + 0,0,1505,1498,1,0,0,0,1505,1499,1,0,0,0,1505,1500,1,0,0,0,1505,1501, + 1,0,0,0,1505,1502,1,0,0,0,1505,1503,1,0,0,0,1505,1504,1,0,0,0,1506, + 233,1,0,0,0,1507,1508,5,34,0,0,1508,1509,3,114,57,0,1509,235,1,0, + 0,0,1510,1511,5,7,0,0,1511,1516,3,62,31,0,1512,1513,5,83,0,0,1513, + 1515,3,62,31,0,1514,1512,1,0,0,0,1515,1518,1,0,0,0,1516,1514,1,0, + 0,0,1516,1517,1,0,0,0,1517,237,1,0,0,0,1518,1516,1,0,0,0,1519,1523, + 5,78,0,0,1520,1522,3,240,120,0,1521,1520,1,0,0,0,1522,1525,1,0,0, + 0,1523,1521,1,0,0,0,1523,1524,1,0,0,0,1524,1526,1,0,0,0,1525,1523, + 1,0,0,0,1526,1527,5,79,0,0,1527,239,1,0,0,0,1528,1534,3,242,121, + 0,1529,1534,3,246,123,0,1530,1534,3,100,50,0,1531,1534,3,228,114, + 0,1532,1534,5,82,0,0,1533,1528,1,0,0,0,1533,1529,1,0,0,0,1533,1530, + 1,0,0,0,1533,1531,1,0,0,0,1533,1532,1,0,0,0,1534,241,1,0,0,0,1535, + 1537,3,244,122,0,1536,1535,1,0,0,0,1537,1540,1,0,0,0,1538,1536,1, + 0,0,0,1538,1539,1,0,0,0,1539,1541,1,0,0,0,1540,1538,1,0,0,0,1541, + 1542,3,136,68,0,1542,1543,3,128,64,0,1543,1544,5,82,0,0,1544,243, + 1,0,0,0,1545,1550,3,262,131,0,1546,1550,5,52,0,0,1547,1550,5,55, + 0,0,1548,1550,5,35,0,0,1549,1545,1,0,0,0,1549,1546,1,0,0,0,1549, + 1547,1,0,0,0,1549,1548,1,0,0,0,1550,245,1,0,0,0,1551,1553,3,248, + 124,0,1552,1551,1,0,0,0,1553,1556,1,0,0,0,1554,1552,1,0,0,0,1554, + 1555,1,0,0,0,1555,1557,1,0,0,0,1556,1554,1,0,0,0,1557,1558,3,158, + 79,0,1558,1559,3,180,90,0,1559,247,1,0,0,0,1560,1568,3,262,131,0, + 1561,1568,5,52,0,0,1562,1568,5,50,0,0,1563,1568,5,18,0,0,1564,1568, + 5,29,0,0,1565,1568,5,55,0,0,1566,1568,5,56,0,0,1567,1560,1,0,0,0, + 1567,1561,1,0,0,0,1567,1562,1,0,0,0,1567,1563,1,0,0,0,1567,1564, + 1,0,0,0,1567,1565,1,0,0,0,1567,1566,1,0,0,0,1568,249,1,0,0,0,1569, + 1571,3,232,116,0,1570,1569,1,0,0,0,1571,1574,1,0,0,0,1572,1570,1, + 0,0,0,1572,1573,1,0,0,0,1573,1575,1,0,0,0,1574,1572,1,0,0,0,1575, + 1576,5,86,0,0,1576,1577,5,45,0,0,1577,1578,3,4,2,0,1578,1579,3,252, + 126,0,1579,251,1,0,0,0,1580,1584,5,78,0,0,1581,1583,3,254,127,0, + 1582,1581,1,0,0,0,1583,1586,1,0,0,0,1584,1582,1,0,0,0,1584,1585, + 1,0,0,0,1585,1587,1,0,0,0,1586,1584,1,0,0,0,1587,1588,5,79,0,0,1588, + 253,1,0,0,0,1589,1595,3,256,128,0,1590,1595,3,242,121,0,1591,1595, + 3,100,50,0,1592,1595,3,228,114,0,1593,1595,5,82,0,0,1594,1589,1, + 0,0,0,1594,1590,1,0,0,0,1594,1591,1,0,0,0,1594,1592,1,0,0,0,1594, + 1593,1,0,0,0,1595,255,1,0,0,0,1596,1598,3,258,129,0,1597,1596,1, + 0,0,0,1598,1601,1,0,0,0,1599,1597,1,0,0,0,1599,1600,1,0,0,0,1600, + 1602,1,0,0,0,1601,1599,1,0,0,0,1602,1603,3,136,68,0,1603,1604,3, + 2,1,0,1604,1605,5,76,0,0,1605,1607,5,77,0,0,1606,1608,3,38,19,0, + 1607,1606,1,0,0,0,1607,1608,1,0,0,0,1608,1610,1,0,0,0,1609,1611, + 3,260,130,0,1610,1609,1,0,0,0,1610,1611,1,0,0,0,1611,1612,1,0,0, + 0,1612,1613,5,82,0,0,1613,257,1,0,0,0,1614,1618,3,262,131,0,1615, + 1618,5,52,0,0,1616,1618,5,18,0,0,1617,1614,1,0,0,0,1617,1615,1,0, + 0,0,1617,1616,1,0,0,0,1618,259,1,0,0,0,1619,1620,5,29,0,0,1620,1621, + 3,270,135,0,1621,261,1,0,0,0,1622,1626,3,264,132,0,1623,1626,3,276, + 138,0,1624,1626,3,278,139,0,1625,1622,1,0,0,0,1625,1623,1,0,0,0, + 1625,1624,1,0,0,0,1626,263,1,0,0,0,1627,1628,5,86,0,0,1628,1629, + 3,62,31,0,1629,1631,5,76,0,0,1630,1632,3,266,133,0,1631,1630,1,0, + 0,0,1631,1632,1,0,0,0,1632,1633,1,0,0,0,1633,1634,5,77,0,0,1634, + 265,1,0,0,0,1635,1640,3,268,134,0,1636,1637,5,83,0,0,1637,1639,3, + 268,134,0,1638,1636,1,0,0,0,1639,1642,1,0,0,0,1640,1638,1,0,0,0, + 1640,1641,1,0,0,0,1641,267,1,0,0,0,1642,1640,1,0,0,0,1643,1644,3, + 2,1,0,1644,1645,5,88,0,0,1645,1646,3,270,135,0,1646,269,1,0,0,0, + 1647,1651,3,472,236,0,1648,1651,3,272,136,0,1649,1651,3,262,131, + 0,1650,1647,1,0,0,0,1650,1648,1,0,0,0,1650,1649,1,0,0,0,1651,271, + 1,0,0,0,1652,1654,5,78,0,0,1653,1655,3,274,137,0,1654,1653,1,0,0, + 0,1654,1655,1,0,0,0,1655,1657,1,0,0,0,1656,1658,5,83,0,0,1657,1656, + 1,0,0,0,1657,1658,1,0,0,0,1658,1659,1,0,0,0,1659,1660,5,79,0,0,1660, + 273,1,0,0,0,1661,1666,3,270,135,0,1662,1663,5,83,0,0,1663,1665,3, + 270,135,0,1664,1662,1,0,0,0,1665,1668,1,0,0,0,1666,1664,1,0,0,0, + 1666,1667,1,0,0,0,1667,275,1,0,0,0,1668,1666,1,0,0,0,1669,1670,5, + 86,0,0,1670,1671,3,62,31,0,1671,277,1,0,0,0,1672,1673,5,86,0,0,1673, + 1674,3,62,31,0,1674,1675,5,76,0,0,1675,1676,3,270,135,0,1676,1677, + 5,77,0,0,1677,279,1,0,0,0,1678,1680,5,78,0,0,1679,1681,3,282,141, + 0,1680,1679,1,0,0,0,1680,1681,1,0,0,0,1681,1683,1,0,0,0,1682,1684, + 5,83,0,0,1683,1682,1,0,0,0,1683,1684,1,0,0,0,1684,1685,1,0,0,0,1685, + 1686,5,79,0,0,1686,281,1,0,0,0,1687,1692,3,134,67,0,1688,1689,5, + 83,0,0,1689,1691,3,134,67,0,1690,1688,1,0,0,0,1691,1694,1,0,0,0, + 1692,1690,1,0,0,0,1692,1693,1,0,0,0,1693,283,1,0,0,0,1694,1692,1, + 0,0,0,1695,1697,5,78,0,0,1696,1698,3,286,143,0,1697,1696,1,0,0,0, + 1697,1698,1,0,0,0,1698,1699,1,0,0,0,1699,1700,5,79,0,0,1700,285, + 1,0,0,0,1701,1705,3,288,144,0,1702,1704,3,288,144,0,1703,1702,1, + 0,0,0,1704,1707,1,0,0,0,1705,1703,1,0,0,0,1705,1706,1,0,0,0,1706, + 287,1,0,0,0,1707,1705,1,0,0,0,1708,1712,3,290,145,0,1709,1712,3, + 296,148,0,1710,1712,3,298,149,0,1711,1708,1,0,0,0,1711,1709,1,0, + 0,0,1711,1710,1,0,0,0,1712,289,1,0,0,0,1713,1716,3,100,50,0,1714, + 1716,3,230,115,0,1715,1713,1,0,0,0,1715,1714,1,0,0,0,1716,291,1, + 0,0,0,1717,1719,3,172,86,0,1718,1717,1,0,0,0,1719,1722,1,0,0,0,1720, + 1718,1,0,0,0,1720,1721,1,0,0,0,1721,1723,1,0,0,0,1722,1720,1,0,0, + 0,1723,1724,3,294,147,0,1724,1725,3,128,64,0,1725,293,1,0,0,0,1726, + 1729,3,136,68,0,1727,1729,5,15,0,0,1728,1726,1,0,0,0,1728,1727,1, + 0,0,0,1729,295,1,0,0,0,1730,1731,3,292,146,0,1731,1732,5,82,0,0, + 1732,297,1,0,0,0,1733,1740,3,302,151,0,1734,1740,3,306,153,0,1735, + 1740,3,314,157,0,1736,1740,3,316,158,0,1737,1740,3,334,167,0,1738, + 1740,3,340,170,0,1739,1733,1,0,0,0,1739,1734,1,0,0,0,1739,1735,1, + 0,0,0,1739,1736,1,0,0,0,1739,1737,1,0,0,0,1739,1738,1,0,0,0,1740, + 299,1,0,0,0,1741,1747,3,302,151,0,1742,1747,3,308,154,0,1743,1747, + 3,318,159,0,1744,1747,3,336,168,0,1745,1747,3,342,171,0,1746,1741, + 1,0,0,0,1746,1742,1,0,0,0,1746,1743,1,0,0,0,1746,1744,1,0,0,0,1746, + 1745,1,0,0,0,1747,301,1,0,0,0,1748,1762,3,284,142,0,1749,1762,3, + 304,152,0,1750,1762,3,310,155,0,1751,1762,3,320,160,0,1752,1762, + 3,322,161,0,1753,1762,3,338,169,0,1754,1762,3,358,179,0,1755,1762, + 3,360,180,0,1756,1762,3,362,181,0,1757,1762,3,366,183,0,1758,1762, + 3,364,182,0,1759,1762,3,368,184,0,1760,1762,3,390,195,0,1761,1748, + 1,0,0,0,1761,1749,1,0,0,0,1761,1750,1,0,0,0,1761,1751,1,0,0,0,1761, + 1752,1,0,0,0,1761,1753,1,0,0,0,1761,1754,1,0,0,0,1761,1755,1,0,0, + 0,1761,1756,1,0,0,0,1761,1757,1,0,0,0,1761,1758,1,0,0,0,1761,1759, + 1,0,0,0,1761,1760,1,0,0,0,1762,303,1,0,0,0,1763,1764,5,82,0,0,1764, + 305,1,0,0,0,1765,1766,3,2,1,0,1766,1767,5,94,0,0,1767,1768,3,298, + 149,0,1768,307,1,0,0,0,1769,1770,3,2,1,0,1770,1771,5,94,0,0,1771, + 1772,3,300,150,0,1772,309,1,0,0,0,1773,1774,3,312,156,0,1774,1775, + 5,82,0,0,1775,311,1,0,0,0,1776,1784,3,476,238,0,1777,1784,3,444, + 222,0,1778,1784,3,446,223,0,1779,1784,3,438,219,0,1780,1784,3,440, + 220,0,1781,1784,3,428,214,0,1782,1784,3,406,203,0,1783,1776,1,0, + 0,0,1783,1777,1,0,0,0,1783,1778,1,0,0,0,1783,1779,1,0,0,0,1783,1780, + 1,0,0,0,1783,1781,1,0,0,0,1783,1782,1,0,0,0,1784,313,1,0,0,0,1785, + 1786,5,39,0,0,1786,1787,5,76,0,0,1787,1788,3,396,198,0,1788,1789, + 5,77,0,0,1789,1790,3,298,149,0,1790,315,1,0,0,0,1791,1792,5,39,0, + 0,1792,1793,5,76,0,0,1793,1794,3,396,198,0,1794,1795,5,77,0,0,1795, + 1796,3,300,150,0,1796,1797,5,32,0,0,1797,1798,3,298,149,0,1798,317, + 1,0,0,0,1799,1800,5,39,0,0,1800,1801,5,76,0,0,1801,1802,3,396,198, + 0,1802,1803,5,77,0,0,1803,1804,3,300,150,0,1804,1805,5,32,0,0,1805, + 1806,3,300,150,0,1806,319,1,0,0,0,1807,1808,5,19,0,0,1808,1811,3, + 396,198,0,1809,1810,5,94,0,0,1810,1812,3,396,198,0,1811,1809,1,0, + 0,0,1811,1812,1,0,0,0,1812,1813,1,0,0,0,1813,1814,5,82,0,0,1814, + 321,1,0,0,0,1815,1816,5,58,0,0,1816,1817,5,76,0,0,1817,1818,3,396, + 198,0,1818,1819,5,77,0,0,1819,1820,3,324,162,0,1820,323,1,0,0,0, + 1821,1822,5,78,0,0,1822,1826,3,326,163,0,1823,1825,3,326,163,0,1824, + 1823,1,0,0,0,1825,1828,1,0,0,0,1826,1824,1,0,0,0,1826,1827,1,0,0, + 0,1827,1829,1,0,0,0,1828,1826,1,0,0,0,1829,1830,5,79,0,0,1830,1848, + 1,0,0,0,1831,1835,5,78,0,0,1832,1834,3,328,164,0,1833,1832,1,0,0, + 0,1834,1837,1,0,0,0,1835,1833,1,0,0,0,1835,1836,1,0,0,0,1836,1843, + 1,0,0,0,1837,1835,1,0,0,0,1838,1839,3,330,165,0,1839,1840,5,94,0, + 0,1840,1842,1,0,0,0,1841,1838,1,0,0,0,1842,1845,1,0,0,0,1843,1841, + 1,0,0,0,1843,1844,1,0,0,0,1844,1846,1,0,0,0,1845,1843,1,0,0,0,1846, + 1848,5,79,0,0,1847,1821,1,0,0,0,1847,1831,1,0,0,0,1848,325,1,0,0, + 0,1849,1850,3,330,165,0,1850,1856,5,95,0,0,1851,1852,3,396,198,0, + 1852,1853,5,82,0,0,1853,1857,1,0,0,0,1854,1857,3,284,142,0,1855, + 1857,3,364,182,0,1856,1851,1,0,0,0,1856,1854,1,0,0,0,1856,1855,1, + 0,0,0,1857,327,1,0,0,0,1858,1859,3,330,165,0,1859,1865,5,94,0,0, + 1860,1861,3,330,165,0,1861,1862,5,94,0,0,1862,1864,1,0,0,0,1863, + 1860,1,0,0,0,1864,1867,1,0,0,0,1865,1863,1,0,0,0,1865,1866,1,0,0, + 0,1866,1868,1,0,0,0,1867,1865,1,0,0,0,1868,1869,3,286,143,0,1869, + 329,1,0,0,0,1870,1871,5,23,0,0,1871,1876,3,332,166,0,1872,1873,5, + 83,0,0,1873,1875,3,332,166,0,1874,1872,1,0,0,0,1875,1878,1,0,0,0, + 1876,1874,1,0,0,0,1876,1877,1,0,0,0,1877,1881,1,0,0,0,1878,1876, + 1,0,0,0,1879,1881,5,29,0,0,1880,1870,1,0,0,0,1880,1879,1,0,0,0,1881, + 331,1,0,0,0,1882,1883,3,472,236,0,1883,333,1,0,0,0,1884,1885,5,67, + 0,0,1885,1886,5,76,0,0,1886,1887,3,396,198,0,1887,1888,5,77,0,0, + 1888,1889,3,298,149,0,1889,335,1,0,0,0,1890,1891,5,67,0,0,1891,1892, + 5,76,0,0,1892,1893,3,396,198,0,1893,1894,5,77,0,0,1894,1895,3,300, + 150,0,1895,337,1,0,0,0,1896,1897,5,30,0,0,1897,1898,3,298,149,0, + 1898,1899,5,67,0,0,1899,1900,5,76,0,0,1900,1901,3,396,198,0,1901, + 1902,5,77,0,0,1902,1903,5,82,0,0,1903,339,1,0,0,0,1904,1907,3,344, + 172,0,1905,1907,3,354,177,0,1906,1904,1,0,0,0,1906,1905,1,0,0,0, + 1907,341,1,0,0,0,1908,1911,3,346,173,0,1909,1911,3,356,178,0,1910, + 1908,1,0,0,0,1910,1909,1,0,0,0,1911,343,1,0,0,0,1912,1913,5,38,0, + 0,1913,1915,5,76,0,0,1914,1916,3,348,174,0,1915,1914,1,0,0,0,1915, + 1916,1,0,0,0,1916,1917,1,0,0,0,1917,1919,5,82,0,0,1918,1920,3,396, + 198,0,1919,1918,1,0,0,0,1919,1920,1,0,0,0,1920,1921,1,0,0,0,1921, + 1923,5,82,0,0,1922,1924,3,350,175,0,1923,1922,1,0,0,0,1923,1924, + 1,0,0,0,1924,1925,1,0,0,0,1925,1926,5,77,0,0,1926,1927,3,298,149, + 0,1927,345,1,0,0,0,1928,1929,5,38,0,0,1929,1931,5,76,0,0,1930,1932, + 3,348,174,0,1931,1930,1,0,0,0,1931,1932,1,0,0,0,1932,1933,1,0,0, + 0,1933,1935,5,82,0,0,1934,1936,3,396,198,0,1935,1934,1,0,0,0,1935, + 1936,1,0,0,0,1936,1937,1,0,0,0,1937,1939,5,82,0,0,1938,1940,3,350, + 175,0,1939,1938,1,0,0,0,1939,1940,1,0,0,0,1940,1941,1,0,0,0,1941, + 1942,5,77,0,0,1942,1943,3,300,150,0,1943,347,1,0,0,0,1944,1947,3, + 352,176,0,1945,1947,3,292,146,0,1946,1944,1,0,0,0,1946,1945,1,0, + 0,0,1947,349,1,0,0,0,1948,1949,3,352,176,0,1949,351,1,0,0,0,1950, + 1955,3,312,156,0,1951,1952,5,83,0,0,1952,1954,3,312,156,0,1953,1951, + 1,0,0,0,1954,1957,1,0,0,0,1955,1953,1,0,0,0,1955,1956,1,0,0,0,1956, + 353,1,0,0,0,1957,1955,1,0,0,0,1958,1959,5,38,0,0,1959,1960,5,76, + 0,0,1960,1961,3,292,146,0,1961,1962,5,94,0,0,1962,1963,3,396,198, + 0,1963,1964,5,77,0,0,1964,1965,3,298,149,0,1965,355,1,0,0,0,1966, + 1967,5,38,0,0,1967,1968,5,76,0,0,1968,1969,3,292,146,0,1969,1970, + 5,94,0,0,1970,1971,3,396,198,0,1971,1972,5,77,0,0,1972,1973,3,300, + 150,0,1973,357,1,0,0,0,1974,1976,5,21,0,0,1975,1977,3,2,1,0,1976, + 1975,1,0,0,0,1976,1977,1,0,0,0,1977,1978,1,0,0,0,1978,1979,5,82, + 0,0,1979,359,1,0,0,0,1980,1982,5,28,0,0,1981,1983,3,2,1,0,1982,1981, + 1,0,0,0,1982,1983,1,0,0,0,1983,1984,1,0,0,0,1984,1985,5,82,0,0,1985, + 361,1,0,0,0,1986,1988,5,53,0,0,1987,1989,3,396,198,0,1988,1987,1, + 0,0,0,1988,1989,1,0,0,0,1989,1990,1,0,0,0,1990,1991,5,82,0,0,1991, + 363,1,0,0,0,1992,1993,5,61,0,0,1993,1994,3,396,198,0,1994,1995,5, + 82,0,0,1995,365,1,0,0,0,1996,1997,5,59,0,0,1997,1998,5,76,0,0,1998, + 1999,3,396,198,0,1999,2000,5,77,0,0,2000,2001,3,284,142,0,2001,367, + 1,0,0,0,2002,2003,5,64,0,0,2003,2004,3,284,142,0,2004,2005,3,370, + 185,0,2005,2019,1,0,0,0,2006,2007,5,64,0,0,2007,2008,3,284,142,0, + 2008,2009,3,378,189,0,2009,2019,1,0,0,0,2010,2011,5,64,0,0,2011, + 2013,3,284,142,0,2012,2014,3,370,185,0,2013,2012,1,0,0,0,2013,2014, + 1,0,0,0,2014,2015,1,0,0,0,2015,2016,3,378,189,0,2016,2019,1,0,0, + 0,2017,2019,3,380,190,0,2018,2002,1,0,0,0,2018,2006,1,0,0,0,2018, + 2010,1,0,0,0,2018,2017,1,0,0,0,2019,369,1,0,0,0,2020,2024,3,372, + 186,0,2021,2023,3,372,186,0,2022,2021,1,0,0,0,2023,2026,1,0,0,0, + 2024,2022,1,0,0,0,2024,2025,1,0,0,0,2025,371,1,0,0,0,2026,2024,1, + 0,0,0,2027,2028,5,24,0,0,2028,2029,5,76,0,0,2029,2030,3,374,187, + 0,2030,2031,5,77,0,0,2031,2032,3,284,142,0,2032,373,1,0,0,0,2033, + 2035,3,172,86,0,2034,2033,1,0,0,0,2035,2038,1,0,0,0,2036,2034,1, + 0,0,0,2036,2037,1,0,0,0,2037,2039,1,0,0,0,2038,2036,1,0,0,0,2039, + 2040,3,376,188,0,2040,2041,3,132,66,0,2041,375,1,0,0,0,2042,2047, + 3,146,73,0,2043,2044,5,109,0,0,2044,2046,3,30,15,0,2045,2043,1,0, + 0,0,2046,2049,1,0,0,0,2047,2045,1,0,0,0,2047,2048,1,0,0,0,2048,377, + 1,0,0,0,2049,2047,1,0,0,0,2050,2051,5,36,0,0,2051,2052,3,284,142, + 0,2052,379,1,0,0,0,2053,2054,5,64,0,0,2054,2055,3,382,191,0,2055, + 2057,3,284,142,0,2056,2058,3,370,185,0,2057,2056,1,0,0,0,2057,2058, + 1,0,0,0,2058,2060,1,0,0,0,2059,2061,3,378,189,0,2060,2059,1,0,0, + 0,2060,2061,1,0,0,0,2061,381,1,0,0,0,2062,2063,5,76,0,0,2063,2065, + 3,384,192,0,2064,2066,5,82,0,0,2065,2064,1,0,0,0,2065,2066,1,0,0, + 0,2066,2067,1,0,0,0,2067,2068,5,77,0,0,2068,383,1,0,0,0,2069,2074, + 3,386,193,0,2070,2071,5,82,0,0,2071,2073,3,386,193,0,2072,2070,1, + 0,0,0,2073,2076,1,0,0,0,2074,2072,1,0,0,0,2074,2075,1,0,0,0,2075, + 385,1,0,0,0,2076,2074,1,0,0,0,2077,2080,3,292,146,0,2078,2080,3, + 388,194,0,2079,2077,1,0,0,0,2079,2078,1,0,0,0,2080,387,1,0,0,0,2081, + 2084,3,66,33,0,2082,2084,3,426,213,0,2083,2081,1,0,0,0,2083,2082, + 1,0,0,0,2084,389,1,0,0,0,2085,2086,5,17,0,0,2086,2087,3,396,198, + 0,2087,2088,5,82,0,0,2088,391,1,0,0,0,2089,2090,3,394,197,0,2090, + 393,1,0,0,0,2091,2092,3,292,146,0,2092,395,1,0,0,0,2093,2096,3,482, + 241,0,2094,2096,3,474,237,0,2095,2093,1,0,0,0,2095,2094,1,0,0,0, + 2096,397,1,0,0,0,2097,2100,3,400,200,0,2098,2100,3,414,207,0,2099, + 2097,1,0,0,0,2099,2098,1,0,0,0,2100,399,1,0,0,0,2101,2103,3,14,7, + 0,2102,2104,3,402,201,0,2103,2102,1,0,0,0,2103,2104,1,0,0,0,2104, + 2319,1,0,0,0,2105,2107,3,404,202,0,2106,2108,3,402,201,0,2107,2106, + 1,0,0,0,2107,2108,1,0,0,0,2108,2319,1,0,0,0,2109,2111,5,60,0,0,2110, + 2112,3,402,201,0,2111,2110,1,0,0,0,2111,2112,1,0,0,0,2112,2319,1, + 0,0,0,2113,2114,3,62,31,0,2114,2115,5,84,0,0,2115,2117,5,60,0,0, + 2116,2118,3,402,201,0,2117,2116,1,0,0,0,2117,2118,1,0,0,0,2118,2319, + 1,0,0,0,2119,2120,5,76,0,0,2120,2121,3,396,198,0,2121,2123,5,77, + 0,0,2122,2124,3,402,201,0,2123,2122,1,0,0,0,2123,2124,1,0,0,0,2124, + 2319,1,0,0,0,2125,2127,3,408,204,0,2126,2128,3,402,201,0,2127,2126, + 1,0,0,0,2127,2128,1,0,0,0,2128,2319,1,0,0,0,2129,2130,3,66,33,0, + 2130,2131,5,84,0,0,2131,2133,3,408,204,0,2132,2134,3,402,201,0,2133, + 2132,1,0,0,0,2133,2134,1,0,0,0,2134,2319,1,0,0,0,2135,2136,3,414, + 207,0,2136,2137,5,84,0,0,2137,2139,3,408,204,0,2138,2140,3,402,201, + 0,2139,2138,1,0,0,0,2139,2140,1,0,0,0,2140,2319,1,0,0,0,2141,2142, + 3,414,207,0,2142,2143,5,84,0,0,2143,2145,3,2,1,0,2144,2146,3,402, + 201,0,2145,2144,1,0,0,0,2145,2146,1,0,0,0,2146,2319,1,0,0,0,2147, + 2148,5,57,0,0,2148,2149,5,84,0,0,2149,2151,3,2,1,0,2150,2152,3,402, + 201,0,2151,2150,1,0,0,0,2151,2152,1,0,0,0,2152,2319,1,0,0,0,2153, + 2154,3,62,31,0,2154,2155,5,84,0,0,2155,2156,5,57,0,0,2156,2157,5, + 84,0,0,2157,2159,3,2,1,0,2158,2160,3,402,201,0,2159,2158,1,0,0,0, + 2159,2160,1,0,0,0,2160,2319,1,0,0,0,2161,2162,3,66,33,0,2162,2163, + 5,80,0,0,2163,2164,3,396,198,0,2164,2166,5,81,0,0,2165,2167,3,402, + 201,0,2166,2165,1,0,0,0,2166,2167,1,0,0,0,2167,2319,1,0,0,0,2168, + 2169,3,418,209,0,2169,2170,5,80,0,0,2170,2171,3,396,198,0,2171,2173, + 5,81,0,0,2172,2174,3,402,201,0,2173,2172,1,0,0,0,2173,2174,1,0,0, + 0,2174,2319,1,0,0,0,2175,2176,3,68,34,0,2176,2178,5,76,0,0,2177, + 2179,3,430,215,0,2178,2177,1,0,0,0,2178,2179,1,0,0,0,2179,2180,1, + 0,0,0,2180,2182,5,77,0,0,2181,2183,3,402,201,0,2182,2181,1,0,0,0, + 2182,2183,1,0,0,0,2183,2319,1,0,0,0,2184,2185,3,62,31,0,2185,2187, + 5,84,0,0,2186,2188,3,48,24,0,2187,2186,1,0,0,0,2187,2188,1,0,0,0, + 2188,2189,1,0,0,0,2189,2190,3,2,1,0,2190,2192,5,76,0,0,2191,2193, + 3,430,215,0,2192,2191,1,0,0,0,2192,2193,1,0,0,0,2193,2194,1,0,0, + 0,2194,2196,5,77,0,0,2195,2197,3,402,201,0,2196,2195,1,0,0,0,2196, + 2197,1,0,0,0,2197,2319,1,0,0,0,2198,2199,3,66,33,0,2199,2201,5,84, + 0,0,2200,2202,3,48,24,0,2201,2200,1,0,0,0,2201,2202,1,0,0,0,2202, + 2203,1,0,0,0,2203,2204,3,2,1,0,2204,2206,5,76,0,0,2205,2207,3,430, + 215,0,2206,2205,1,0,0,0,2206,2207,1,0,0,0,2207,2208,1,0,0,0,2208, + 2210,5,77,0,0,2209,2211,3,402,201,0,2210,2209,1,0,0,0,2210,2211, + 1,0,0,0,2211,2319,1,0,0,0,2212,2213,3,414,207,0,2213,2215,5,84,0, + 0,2214,2216,3,48,24,0,2215,2214,1,0,0,0,2215,2216,1,0,0,0,2216,2217, + 1,0,0,0,2217,2218,3,2,1,0,2218,2220,5,76,0,0,2219,2221,3,430,215, + 0,2220,2219,1,0,0,0,2220,2221,1,0,0,0,2221,2222,1,0,0,0,2222,2224, + 5,77,0,0,2223,2225,3,402,201,0,2224,2223,1,0,0,0,2224,2225,1,0,0, + 0,2225,2319,1,0,0,0,2226,2227,5,57,0,0,2227,2229,5,84,0,0,2228,2230, + 3,48,24,0,2229,2228,1,0,0,0,2229,2230,1,0,0,0,2230,2231,1,0,0,0, + 2231,2232,3,2,1,0,2232,2234,5,76,0,0,2233,2235,3,430,215,0,2234, + 2233,1,0,0,0,2234,2235,1,0,0,0,2235,2236,1,0,0,0,2236,2238,5,77, + 0,0,2237,2239,3,402,201,0,2238,2237,1,0,0,0,2238,2239,1,0,0,0,2239, + 2319,1,0,0,0,2240,2241,3,62,31,0,2241,2242,5,84,0,0,2242,2243,5, + 57,0,0,2243,2245,5,84,0,0,2244,2246,3,48,24,0,2245,2244,1,0,0,0, + 2245,2246,1,0,0,0,2246,2247,1,0,0,0,2247,2248,3,2,1,0,2248,2250, + 5,76,0,0,2249,2251,3,430,215,0,2250,2249,1,0,0,0,2250,2251,1,0,0, + 0,2251,2252,1,0,0,0,2252,2254,5,77,0,0,2253,2255,3,402,201,0,2254, + 2253,1,0,0,0,2254,2255,1,0,0,0,2255,2319,1,0,0,0,2256,2257,3,66, + 33,0,2257,2259,5,87,0,0,2258,2260,3,48,24,0,2259,2258,1,0,0,0,2259, + 2260,1,0,0,0,2260,2261,1,0,0,0,2261,2263,3,2,1,0,2262,2264,3,402, + 201,0,2263,2262,1,0,0,0,2263,2264,1,0,0,0,2264,2319,1,0,0,0,2265, + 2266,3,414,207,0,2266,2268,5,87,0,0,2267,2269,3,48,24,0,2268,2267, + 1,0,0,0,2268,2269,1,0,0,0,2269,2270,1,0,0,0,2270,2272,3,2,1,0,2271, + 2273,3,402,201,0,2272,2271,1,0,0,0,2272,2273,1,0,0,0,2273,2319,1, + 0,0,0,2274,2275,3,24,12,0,2275,2277,5,87,0,0,2276,2278,3,48,24,0, + 2277,2276,1,0,0,0,2277,2278,1,0,0,0,2278,2279,1,0,0,0,2279,2281, + 3,2,1,0,2280,2282,3,402,201,0,2281,2280,1,0,0,0,2281,2282,1,0,0, + 0,2282,2319,1,0,0,0,2283,2284,5,57,0,0,2284,2286,5,87,0,0,2285,2287, + 3,48,24,0,2286,2285,1,0,0,0,2286,2287,1,0,0,0,2287,2288,1,0,0,0, + 2288,2290,3,2,1,0,2289,2291,3,402,201,0,2290,2289,1,0,0,0,2290,2291, + 1,0,0,0,2291,2319,1,0,0,0,2292,2293,3,62,31,0,2293,2294,5,84,0,0, + 2294,2295,5,57,0,0,2295,2297,5,87,0,0,2296,2298,3,48,24,0,2297,2296, + 1,0,0,0,2297,2298,1,0,0,0,2298,2299,1,0,0,0,2299,2301,3,2,1,0,2300, + 2302,3,402,201,0,2301,2300,1,0,0,0,2301,2302,1,0,0,0,2302,2319,1, + 0,0,0,2303,2304,3,30,15,0,2304,2306,5,87,0,0,2305,2307,3,48,24,0, + 2306,2305,1,0,0,0,2306,2307,1,0,0,0,2307,2308,1,0,0,0,2308,2310, + 5,48,0,0,2309,2311,3,402,201,0,2310,2309,1,0,0,0,2310,2311,1,0,0, + 0,2311,2319,1,0,0,0,2312,2313,3,36,18,0,2313,2314,5,87,0,0,2314, + 2316,5,48,0,0,2315,2317,3,402,201,0,2316,2315,1,0,0,0,2316,2317, + 1,0,0,0,2317,2319,1,0,0,0,2318,2101,1,0,0,0,2318,2105,1,0,0,0,2318, + 2109,1,0,0,0,2318,2113,1,0,0,0,2318,2119,1,0,0,0,2318,2125,1,0,0, + 0,2318,2129,1,0,0,0,2318,2135,1,0,0,0,2318,2141,1,0,0,0,2318,2147, + 1,0,0,0,2318,2153,1,0,0,0,2318,2161,1,0,0,0,2318,2168,1,0,0,0,2318, + 2175,1,0,0,0,2318,2184,1,0,0,0,2318,2198,1,0,0,0,2318,2212,1,0,0, + 0,2318,2226,1,0,0,0,2318,2240,1,0,0,0,2318,2256,1,0,0,0,2318,2265, + 1,0,0,0,2318,2274,1,0,0,0,2318,2283,1,0,0,0,2318,2292,1,0,0,0,2318, + 2303,1,0,0,0,2318,2312,1,0,0,0,2319,401,1,0,0,0,2320,2321,5,84,0, + 0,2321,2323,3,408,204,0,2322,2324,3,402,201,0,2323,2322,1,0,0,0, + 2323,2324,1,0,0,0,2324,2358,1,0,0,0,2325,2326,5,84,0,0,2326,2328, + 3,2,1,0,2327,2329,3,402,201,0,2328,2327,1,0,0,0,2328,2329,1,0,0, + 0,2329,2358,1,0,0,0,2330,2331,5,80,0,0,2331,2332,3,396,198,0,2332, + 2334,5,81,0,0,2333,2335,3,402,201,0,2334,2333,1,0,0,0,2334,2335, + 1,0,0,0,2335,2358,1,0,0,0,2336,2338,5,84,0,0,2337,2339,3,48,24,0, + 2338,2337,1,0,0,0,2338,2339,1,0,0,0,2339,2340,1,0,0,0,2340,2341, + 3,2,1,0,2341,2343,5,76,0,0,2342,2344,3,430,215,0,2343,2342,1,0,0, + 0,2343,2344,1,0,0,0,2344,2345,1,0,0,0,2345,2347,5,77,0,0,2346,2348, + 3,402,201,0,2347,2346,1,0,0,0,2347,2348,1,0,0,0,2348,2358,1,0,0, + 0,2349,2351,5,87,0,0,2350,2352,3,48,24,0,2351,2350,1,0,0,0,2351, + 2352,1,0,0,0,2352,2353,1,0,0,0,2353,2355,3,2,1,0,2354,2356,3,402, + 201,0,2355,2354,1,0,0,0,2355,2356,1,0,0,0,2356,2358,1,0,0,0,2357, + 2320,1,0,0,0,2357,2325,1,0,0,0,2357,2330,1,0,0,0,2357,2336,1,0,0, + 0,2357,2349,1,0,0,0,2358,403,1,0,0,0,2359,2364,3,62,31,0,2360,2361, + 5,80,0,0,2361,2363,5,81,0,0,2362,2360,1,0,0,0,2363,2366,1,0,0,0, + 2364,2362,1,0,0,0,2364,2365,1,0,0,0,2365,2367,1,0,0,0,2366,2364, + 1,0,0,0,2367,2368,5,84,0,0,2368,2369,5,26,0,0,2369,2395,1,0,0,0, + 2370,2375,3,18,9,0,2371,2372,5,80,0,0,2372,2374,5,81,0,0,2373,2371, + 1,0,0,0,2374,2377,1,0,0,0,2375,2373,1,0,0,0,2375,2376,1,0,0,0,2376, + 2378,1,0,0,0,2377,2375,1,0,0,0,2378,2379,5,84,0,0,2379,2380,5,26, + 0,0,2380,2395,1,0,0,0,2381,2386,5,20,0,0,2382,2383,5,80,0,0,2383, + 2385,5,81,0,0,2384,2382,1,0,0,0,2385,2388,1,0,0,0,2386,2384,1,0, + 0,0,2386,2387,1,0,0,0,2387,2389,1,0,0,0,2388,2386,1,0,0,0,2389,2390, + 5,84,0,0,2390,2395,5,26,0,0,2391,2392,5,65,0,0,2392,2393,5,84,0, + 0,2393,2395,5,26,0,0,2394,2359,1,0,0,0,2394,2370,1,0,0,0,2394,2381, + 1,0,0,0,2394,2391,1,0,0,0,2395,405,1,0,0,0,2396,2406,3,408,204,0, + 2397,2398,3,66,33,0,2398,2399,5,84,0,0,2399,2400,3,408,204,0,2400, + 2406,1,0,0,0,2401,2402,3,398,199,0,2402,2403,5,84,0,0,2403,2404, + 3,408,204,0,2404,2406,1,0,0,0,2405,2396,1,0,0,0,2405,2397,1,0,0, + 0,2405,2401,1,0,0,0,2406,407,1,0,0,0,2407,2409,5,48,0,0,2408,2410, + 3,48,24,0,2409,2408,1,0,0,0,2409,2410,1,0,0,0,2410,2411,1,0,0,0, + 2411,2412,3,410,205,0,2412,2414,5,76,0,0,2413,2415,3,430,215,0,2414, + 2413,1,0,0,0,2414,2415,1,0,0,0,2415,2416,1,0,0,0,2416,2418,5,77, + 0,0,2417,2419,3,118,59,0,2418,2417,1,0,0,0,2418,2419,1,0,0,0,2419, + 409,1,0,0,0,2420,2422,3,262,131,0,2421,2420,1,0,0,0,2422,2425,1, + 0,0,0,2423,2421,1,0,0,0,2423,2424,1,0,0,0,2424,2426,1,0,0,0,2425, + 2423,1,0,0,0,2426,2437,3,2,1,0,2427,2431,5,84,0,0,2428,2430,3,262, + 131,0,2429,2428,1,0,0,0,2430,2433,1,0,0,0,2431,2429,1,0,0,0,2431, + 2432,1,0,0,0,2432,2434,1,0,0,0,2433,2431,1,0,0,0,2434,2436,3,2,1, + 0,2435,2427,1,0,0,0,2436,2439,1,0,0,0,2437,2435,1,0,0,0,2437,2438, + 1,0,0,0,2438,2441,1,0,0,0,2439,2437,1,0,0,0,2440,2442,3,412,206, + 0,2441,2440,1,0,0,0,2441,2442,1,0,0,0,2442,411,1,0,0,0,2443,2446, + 3,48,24,0,2444,2446,5,4,0,0,2445,2443,1,0,0,0,2445,2444,1,0,0,0, + 2446,413,1,0,0,0,2447,2450,3,416,208,0,2448,2450,3,418,209,0,2449, + 2447,1,0,0,0,2449,2448,1,0,0,0,2450,415,1,0,0,0,2451,2452,5,48,0, + 0,2452,2453,3,16,8,0,2453,2455,3,420,210,0,2454,2456,3,38,19,0,2455, + 2454,1,0,0,0,2455,2456,1,0,0,0,2456,2464,1,0,0,0,2457,2458,5,48, + 0,0,2458,2459,3,30,15,0,2459,2461,3,420,210,0,2460,2462,3,38,19, + 0,2461,2460,1,0,0,0,2461,2462,1,0,0,0,2462,2464,1,0,0,0,2463,2451, + 1,0,0,0,2463,2457,1,0,0,0,2464,417,1,0,0,0,2465,2466,5,48,0,0,2466, + 2467,3,16,8,0,2467,2468,3,38,19,0,2468,2469,3,280,140,0,2469,2476, + 1,0,0,0,2470,2471,5,48,0,0,2471,2472,3,28,14,0,2472,2473,3,38,19, + 0,2473,2474,3,280,140,0,2474,2476,1,0,0,0,2475,2465,1,0,0,0,2475, + 2470,1,0,0,0,2476,419,1,0,0,0,2477,2481,3,422,211,0,2478,2480,3, + 422,211,0,2479,2478,1,0,0,0,2480,2483,1,0,0,0,2481,2479,1,0,0,0, + 2481,2482,1,0,0,0,2482,421,1,0,0,0,2483,2481,1,0,0,0,2484,2486,3, + 262,131,0,2485,2484,1,0,0,0,2486,2489,1,0,0,0,2487,2485,1,0,0,0, + 2487,2488,1,0,0,0,2488,2490,1,0,0,0,2489,2487,1,0,0,0,2490,2491, + 5,80,0,0,2491,2492,3,396,198,0,2492,2493,5,81,0,0,2493,423,1,0,0, + 0,2494,2495,3,66,33,0,2495,2496,5,80,0,0,2496,2497,3,396,198,0,2497, + 2498,5,81,0,0,2498,2510,1,0,0,0,2499,2500,3,400,200,0,2500,2501, + 5,80,0,0,2501,2502,3,396,198,0,2502,2503,5,81,0,0,2503,2510,1,0, + 0,0,2504,2505,3,418,209,0,2505,2506,5,80,0,0,2506,2507,3,396,198, + 0,2507,2508,5,81,0,0,2508,2510,1,0,0,0,2509,2494,1,0,0,0,2509,2499, + 1,0,0,0,2509,2504,1,0,0,0,2510,425,1,0,0,0,2511,2512,3,398,199,0, + 2512,2513,5,84,0,0,2513,2514,3,2,1,0,2514,2525,1,0,0,0,2515,2516, + 5,57,0,0,2516,2517,5,84,0,0,2517,2525,3,2,1,0,2518,2519,3,62,31, + 0,2519,2520,5,84,0,0,2520,2521,5,57,0,0,2521,2522,5,84,0,0,2522, + 2523,3,2,1,0,2523,2525,1,0,0,0,2524,2511,1,0,0,0,2524,2515,1,0,0, + 0,2524,2518,1,0,0,0,2525,427,1,0,0,0,2526,2527,3,68,34,0,2527,2529, + 5,76,0,0,2528,2530,3,430,215,0,2529,2528,1,0,0,0,2529,2530,1,0,0, + 0,2530,2531,1,0,0,0,2531,2532,5,77,0,0,2532,2596,1,0,0,0,2533,2534, + 3,62,31,0,2534,2536,5,84,0,0,2535,2537,3,48,24,0,2536,2535,1,0,0, + 0,2536,2537,1,0,0,0,2537,2538,1,0,0,0,2538,2539,3,2,1,0,2539,2541, + 5,76,0,0,2540,2542,3,430,215,0,2541,2540,1,0,0,0,2541,2542,1,0,0, + 0,2542,2543,1,0,0,0,2543,2544,5,77,0,0,2544,2596,1,0,0,0,2545,2546, + 3,66,33,0,2546,2548,5,84,0,0,2547,2549,3,48,24,0,2548,2547,1,0,0, + 0,2548,2549,1,0,0,0,2549,2550,1,0,0,0,2550,2551,3,2,1,0,2551,2553, + 5,76,0,0,2552,2554,3,430,215,0,2553,2552,1,0,0,0,2553,2554,1,0,0, + 0,2554,2555,1,0,0,0,2555,2556,5,77,0,0,2556,2596,1,0,0,0,2557,2558, + 3,398,199,0,2558,2560,5,84,0,0,2559,2561,3,48,24,0,2560,2559,1,0, + 0,0,2560,2561,1,0,0,0,2561,2562,1,0,0,0,2562,2563,3,2,1,0,2563,2565, + 5,76,0,0,2564,2566,3,430,215,0,2565,2564,1,0,0,0,2565,2566,1,0,0, + 0,2566,2567,1,0,0,0,2567,2568,5,77,0,0,2568,2596,1,0,0,0,2569,2570, + 5,57,0,0,2570,2572,5,84,0,0,2571,2573,3,48,24,0,2572,2571,1,0,0, + 0,2572,2573,1,0,0,0,2573,2574,1,0,0,0,2574,2575,3,2,1,0,2575,2577, + 5,76,0,0,2576,2578,3,430,215,0,2577,2576,1,0,0,0,2577,2578,1,0,0, + 0,2578,2579,1,0,0,0,2579,2580,5,77,0,0,2580,2596,1,0,0,0,2581,2582, + 3,62,31,0,2582,2583,5,84,0,0,2583,2584,5,57,0,0,2584,2586,5,84,0, + 0,2585,2587,3,48,24,0,2586,2585,1,0,0,0,2586,2587,1,0,0,0,2587,2588, + 1,0,0,0,2588,2589,3,2,1,0,2589,2591,5,76,0,0,2590,2592,3,430,215, + 0,2591,2590,1,0,0,0,2591,2592,1,0,0,0,2592,2593,1,0,0,0,2593,2594, + 5,77,0,0,2594,2596,1,0,0,0,2595,2526,1,0,0,0,2595,2533,1,0,0,0,2595, + 2545,1,0,0,0,2595,2557,1,0,0,0,2595,2569,1,0,0,0,2595,2581,1,0,0, + 0,2596,429,1,0,0,0,2597,2602,3,396,198,0,2598,2599,5,83,0,0,2599, + 2601,3,396,198,0,2600,2598,1,0,0,0,2601,2604,1,0,0,0,2602,2600,1, + 0,0,0,2602,2603,1,0,0,0,2603,431,1,0,0,0,2604,2602,1,0,0,0,2605, + 2606,3,66,33,0,2606,2608,5,87,0,0,2607,2609,3,48,24,0,2608,2607, + 1,0,0,0,2608,2609,1,0,0,0,2609,2610,1,0,0,0,2610,2611,3,2,1,0,2611, + 2653,1,0,0,0,2612,2613,3,398,199,0,2613,2615,5,87,0,0,2614,2616, + 3,48,24,0,2615,2614,1,0,0,0,2615,2616,1,0,0,0,2616,2617,1,0,0,0, + 2617,2618,3,2,1,0,2618,2653,1,0,0,0,2619,2620,3,24,12,0,2620,2622, + 5,87,0,0,2621,2623,3,48,24,0,2622,2621,1,0,0,0,2622,2623,1,0,0,0, + 2623,2624,1,0,0,0,2624,2625,3,2,1,0,2625,2653,1,0,0,0,2626,2627, + 5,57,0,0,2627,2629,5,87,0,0,2628,2630,3,48,24,0,2629,2628,1,0,0, + 0,2629,2630,1,0,0,0,2630,2631,1,0,0,0,2631,2653,3,2,1,0,2632,2633, + 3,62,31,0,2633,2634,5,84,0,0,2634,2635,5,57,0,0,2635,2637,5,87,0, + 0,2636,2638,3,48,24,0,2637,2636,1,0,0,0,2637,2638,1,0,0,0,2638,2639, + 1,0,0,0,2639,2640,3,2,1,0,2640,2653,1,0,0,0,2641,2642,3,30,15,0, + 2642,2644,5,87,0,0,2643,2645,3,48,24,0,2644,2643,1,0,0,0,2644,2645, + 1,0,0,0,2645,2646,1,0,0,0,2646,2647,5,48,0,0,2647,2653,1,0,0,0,2648, + 2649,3,36,18,0,2649,2650,5,87,0,0,2650,2651,5,48,0,0,2651,2653,1, + 0,0,0,2652,2605,1,0,0,0,2652,2612,1,0,0,0,2652,2619,1,0,0,0,2652, + 2626,1,0,0,0,2652,2632,1,0,0,0,2652,2641,1,0,0,0,2652,2648,1,0,0, + 0,2653,433,1,0,0,0,2654,2656,3,398,199,0,2655,2657,3,436,218,0,2656, + 2655,1,0,0,0,2656,2657,1,0,0,0,2657,2663,1,0,0,0,2658,2660,3,66, + 33,0,2659,2661,3,436,218,0,2660,2659,1,0,0,0,2660,2661,1,0,0,0,2661, + 2663,1,0,0,0,2662,2654,1,0,0,0,2662,2658,1,0,0,0,2663,435,1,0,0, + 0,2664,2666,5,102,0,0,2665,2667,3,436,218,0,2666,2665,1,0,0,0,2666, + 2667,1,0,0,0,2667,2673,1,0,0,0,2668,2670,5,103,0,0,2669,2671,3,436, + 218,0,2670,2669,1,0,0,0,2670,2671,1,0,0,0,2671,2673,1,0,0,0,2672, + 2664,1,0,0,0,2672,2668,1,0,0,0,2673,437,1,0,0,0,2674,2675,3,434, + 217,0,2675,2676,5,102,0,0,2676,439,1,0,0,0,2677,2678,3,434,217,0, + 2678,2679,5,103,0,0,2679,441,1,0,0,0,2680,2688,3,444,222,0,2681, + 2688,3,446,223,0,2682,2683,5,104,0,0,2683,2688,3,442,221,0,2684, + 2685,5,105,0,0,2685,2688,3,442,221,0,2686,2688,3,448,224,0,2687, + 2680,1,0,0,0,2687,2681,1,0,0,0,2687,2682,1,0,0,0,2687,2684,1,0,0, + 0,2687,2686,1,0,0,0,2688,443,1,0,0,0,2689,2690,5,102,0,0,2690,2691, + 3,442,221,0,2691,445,1,0,0,0,2692,2693,5,103,0,0,2693,2694,3,442, + 221,0,2694,447,1,0,0,0,2695,2703,3,434,217,0,2696,2697,5,92,0,0, + 2697,2703,3,442,221,0,2698,2699,5,91,0,0,2699,2703,3,442,221,0,2700, + 2703,3,450,225,0,2701,2703,3,494,247,0,2702,2695,1,0,0,0,2702,2696, + 1,0,0,0,2702,2698,1,0,0,0,2702,2700,1,0,0,0,2702,2701,1,0,0,0,2703, + 449,1,0,0,0,2704,2705,5,76,0,0,2705,2706,3,16,8,0,2706,2707,5,77, + 0,0,2707,2708,3,442,221,0,2708,2732,1,0,0,0,2709,2710,5,76,0,0,2710, + 2714,3,24,12,0,2711,2713,3,46,23,0,2712,2711,1,0,0,0,2713,2716,1, + 0,0,0,2714,2712,1,0,0,0,2714,2715,1,0,0,0,2715,2717,1,0,0,0,2716, + 2714,1,0,0,0,2717,2718,5,77,0,0,2718,2719,3,448,224,0,2719,2732, + 1,0,0,0,2720,2721,5,76,0,0,2721,2725,3,24,12,0,2722,2724,3,46,23, + 0,2723,2722,1,0,0,0,2724,2727,1,0,0,0,2725,2723,1,0,0,0,2725,2726, + 1,0,0,0,2726,2728,1,0,0,0,2727,2725,1,0,0,0,2728,2729,5,77,0,0,2729, + 2730,3,482,241,0,2730,2732,1,0,0,0,2731,2704,1,0,0,0,2731,2709,1, + 0,0,0,2731,2720,1,0,0,0,2732,451,1,0,0,0,2733,2734,6,226,-1,0,2734, + 2735,3,442,221,0,2735,2747,1,0,0,0,2736,2737,10,3,0,0,2737,2738, + 5,106,0,0,2738,2746,3,442,221,0,2739,2740,10,2,0,0,2740,2741,5,107, + 0,0,2741,2746,3,442,221,0,2742,2743,10,1,0,0,2743,2744,5,111,0,0, + 2744,2746,3,442,221,0,2745,2736,1,0,0,0,2745,2739,1,0,0,0,2745,2742, + 1,0,0,0,2746,2749,1,0,0,0,2747,2745,1,0,0,0,2747,2748,1,0,0,0,2748, + 453,1,0,0,0,2749,2747,1,0,0,0,2750,2751,6,227,-1,0,2751,2752,3,452, + 226,0,2752,2761,1,0,0,0,2753,2754,10,2,0,0,2754,2755,5,104,0,0,2755, + 2760,3,452,226,0,2756,2757,10,1,0,0,2757,2758,5,105,0,0,2758,2760, + 3,452,226,0,2759,2753,1,0,0,0,2759,2756,1,0,0,0,2760,2763,1,0,0, + 0,2761,2759,1,0,0,0,2761,2762,1,0,0,0,2762,455,1,0,0,0,2763,2761, + 1,0,0,0,2764,2765,6,228,-1,0,2765,2766,3,454,227,0,2766,2782,1,0, + 0,0,2767,2768,10,3,0,0,2768,2769,5,90,0,0,2769,2770,5,90,0,0,2770, + 2781,3,454,227,0,2771,2772,10,2,0,0,2772,2773,5,89,0,0,2773,2774, + 5,89,0,0,2774,2781,3,454,227,0,2775,2776,10,1,0,0,2776,2777,5,89, + 0,0,2777,2778,5,89,0,0,2778,2779,5,89,0,0,2779,2781,3,454,227,0, + 2780,2767,1,0,0,0,2780,2771,1,0,0,0,2780,2775,1,0,0,0,2781,2784, + 1,0,0,0,2782,2780,1,0,0,0,2782,2783,1,0,0,0,2783,457,1,0,0,0,2784, + 2782,1,0,0,0,2785,2786,6,229,-1,0,2786,2787,3,456,228,0,2787,2808, + 1,0,0,0,2788,2789,10,5,0,0,2789,2790,5,90,0,0,2790,2807,3,456,228, + 0,2791,2792,10,4,0,0,2792,2793,5,89,0,0,2793,2807,3,456,228,0,2794, + 2795,10,3,0,0,2795,2796,5,97,0,0,2796,2807,3,456,228,0,2797,2798, + 10,2,0,0,2798,2799,5,98,0,0,2799,2807,3,456,228,0,2800,2801,10,1, + 0,0,2801,2804,5,43,0,0,2802,2805,3,24,12,0,2803,2805,3,392,196,0, + 2804,2802,1,0,0,0,2804,2803,1,0,0,0,2805,2807,1,0,0,0,2806,2788, + 1,0,0,0,2806,2791,1,0,0,0,2806,2794,1,0,0,0,2806,2797,1,0,0,0,2806, + 2800,1,0,0,0,2807,2810,1,0,0,0,2808,2806,1,0,0,0,2808,2809,1,0,0, + 0,2809,459,1,0,0,0,2810,2808,1,0,0,0,2811,2812,6,230,-1,0,2812,2813, + 3,458,229,0,2813,2822,1,0,0,0,2814,2815,10,2,0,0,2815,2816,5,96, + 0,0,2816,2821,3,458,229,0,2817,2818,10,1,0,0,2818,2819,5,99,0,0, + 2819,2821,3,458,229,0,2820,2814,1,0,0,0,2820,2817,1,0,0,0,2821,2824, + 1,0,0,0,2822,2820,1,0,0,0,2822,2823,1,0,0,0,2823,461,1,0,0,0,2824, + 2822,1,0,0,0,2825,2826,6,231,-1,0,2826,2827,3,460,230,0,2827,2833, + 1,0,0,0,2828,2829,10,1,0,0,2829,2830,5,108,0,0,2830,2832,3,460,230, + 0,2831,2828,1,0,0,0,2832,2835,1,0,0,0,2833,2831,1,0,0,0,2833,2834, + 1,0,0,0,2834,463,1,0,0,0,2835,2833,1,0,0,0,2836,2837,6,232,-1,0, + 2837,2838,3,462,231,0,2838,2844,1,0,0,0,2839,2840,10,1,0,0,2840, + 2841,5,110,0,0,2841,2843,3,462,231,0,2842,2839,1,0,0,0,2843,2846, + 1,0,0,0,2844,2842,1,0,0,0,2844,2845,1,0,0,0,2845,465,1,0,0,0,2846, + 2844,1,0,0,0,2847,2848,6,233,-1,0,2848,2849,3,464,232,0,2849,2855, + 1,0,0,0,2850,2851,10,1,0,0,2851,2852,5,109,0,0,2852,2854,3,464,232, + 0,2853,2850,1,0,0,0,2854,2857,1,0,0,0,2855,2853,1,0,0,0,2855,2856, + 1,0,0,0,2856,467,1,0,0,0,2857,2855,1,0,0,0,2858,2859,6,234,-1,0, + 2859,2860,3,466,233,0,2860,2866,1,0,0,0,2861,2862,10,1,0,0,2862, + 2863,5,100,0,0,2863,2865,3,466,233,0,2864,2861,1,0,0,0,2865,2868, + 1,0,0,0,2866,2864,1,0,0,0,2866,2867,1,0,0,0,2867,469,1,0,0,0,2868, + 2866,1,0,0,0,2869,2870,6,235,-1,0,2870,2871,3,468,234,0,2871,2877, + 1,0,0,0,2872,2873,10,1,0,0,2873,2874,5,101,0,0,2874,2876,3,468,234, + 0,2875,2872,1,0,0,0,2876,2879,1,0,0,0,2877,2875,1,0,0,0,2877,2878, + 1,0,0,0,2878,471,1,0,0,0,2879,2877,1,0,0,0,2880,2894,3,470,235,0, + 2881,2882,3,470,235,0,2882,2883,5,93,0,0,2883,2884,3,396,198,0,2884, + 2885,5,94,0,0,2885,2886,3,472,236,0,2886,2894,1,0,0,0,2887,2888, + 3,470,235,0,2888,2889,5,93,0,0,2889,2890,3,396,198,0,2890,2891,5, + 94,0,0,2891,2892,3,482,241,0,2892,2894,1,0,0,0,2893,2880,1,0,0,0, + 2893,2881,1,0,0,0,2893,2887,1,0,0,0,2894,473,1,0,0,0,2895,2898,3, + 472,236,0,2896,2898,3,476,238,0,2897,2895,1,0,0,0,2897,2896,1,0, + 0,0,2898,475,1,0,0,0,2899,2900,3,478,239,0,2900,2901,3,480,240,0, + 2901,2902,3,396,198,0,2902,477,1,0,0,0,2903,2907,3,66,33,0,2904, + 2907,3,426,213,0,2905,2907,3,424,212,0,2906,2903,1,0,0,0,2906,2904, + 1,0,0,0,2906,2905,1,0,0,0,2907,479,1,0,0,0,2908,2909,7,8,0,0,2909, + 481,1,0,0,0,2910,2911,3,484,242,0,2911,2912,5,95,0,0,2912,2913,3, + 492,246,0,2913,483,1,0,0,0,2914,2916,5,76,0,0,2915,2917,3,486,243, + 0,2916,2915,1,0,0,0,2916,2917,1,0,0,0,2917,2918,1,0,0,0,2918,2921, + 5,77,0,0,2919,2921,3,2,1,0,2920,2914,1,0,0,0,2920,2919,1,0,0,0,2921, + 485,1,0,0,0,2922,2927,3,488,244,0,2923,2924,5,83,0,0,2924,2926,3, + 488,244,0,2925,2923,1,0,0,0,2926,2929,1,0,0,0,2927,2925,1,0,0,0, + 2927,2928,1,0,0,0,2928,2939,1,0,0,0,2929,2927,1,0,0,0,2930,2935, + 3,2,1,0,2931,2932,5,83,0,0,2932,2934,3,2,1,0,2933,2931,1,0,0,0,2934, + 2937,1,0,0,0,2935,2933,1,0,0,0,2935,2936,1,0,0,0,2936,2939,1,0,0, + 0,2937,2935,1,0,0,0,2938,2922,1,0,0,0,2938,2930,1,0,0,0,2939,487, + 1,0,0,0,2940,2942,3,172,86,0,2941,2940,1,0,0,0,2942,2945,1,0,0,0, + 2943,2941,1,0,0,0,2943,2944,1,0,0,0,2944,2946,1,0,0,0,2945,2943, + 1,0,0,0,2946,2947,3,490,245,0,2947,2948,3,132,66,0,2948,2951,1,0, + 0,0,2949,2951,3,170,85,0,2950,2943,1,0,0,0,2950,2949,1,0,0,0,2951, + 489,1,0,0,0,2952,2955,3,136,68,0,2953,2955,5,15,0,0,2954,2952,1, + 0,0,0,2954,2953,1,0,0,0,2955,491,1,0,0,0,2956,2959,3,396,198,0,2957, + 2959,3,284,142,0,2958,2956,1,0,0,0,2958,2957,1,0,0,0,2959,493,1, + 0,0,0,2960,2961,5,58,0,0,2961,2962,5,76,0,0,2962,2963,3,396,198, + 0,2963,2964,5,77,0,0,2964,2965,3,324,162,0,2965,495,1,0,0,0,2966, + 2967,3,396,198,0,2967,497,1,0,0,0,362,503,507,511,524,529,533,542, + 548,553,556,561,566,571,574,579,584,591,596,603,608,610,617,631, + 636,644,651,657,662,672,675,689,694,699,704,710,715,720,725,730, + 735,744,748,751,756,762,768,776,785,796,825,830,834,842,849,858, + 872,875,887,890,906,911,918,923,929,932,935,938,952,963,977,986, + 993,1002,1009,1014,1029,1036,1042,1046,1050,1054,1058,1063,1070, + 1073,1077,1080,1086,1091,1094,1098,1102,1108,1113,1115,1124,1131, + 1147,1153,1156,1161,1165,1172,1175,1179,1184,1191,1200,1206,1213, + 1218,1225,1233,1243,1248,1252,1262,1267,1275,1278,1285,1288,1296, + 1299,1304,1309,1315,1319,1324,1329,1334,1340,1346,1349,1352,1361, + 1367,1373,1376,1379,1387,1393,1399,1403,1409,1418,1424,1431,1436, + 1443,1455,1462,1467,1475,1480,1486,1489,1492,1505,1516,1523,1533, + 1538,1549,1554,1567,1572,1584,1594,1599,1607,1610,1617,1625,1631, + 1640,1650,1654,1657,1666,1680,1683,1692,1697,1705,1711,1715,1720, + 1728,1739,1746,1761,1783,1811,1826,1835,1843,1847,1856,1865,1876, + 1880,1906,1910,1915,1919,1923,1931,1935,1939,1946,1955,1976,1982, + 1988,2013,2018,2024,2036,2047,2057,2060,2065,2074,2079,2083,2095, + 2099,2103,2107,2111,2117,2123,2127,2133,2139,2145,2151,2159,2166, + 2173,2178,2182,2187,2192,2196,2201,2206,2210,2215,2220,2224,2229, + 2234,2238,2245,2250,2254,2259,2263,2268,2272,2277,2281,2286,2290, + 2297,2301,2306,2310,2316,2318,2323,2328,2334,2338,2343,2347,2351, + 2355,2357,2364,2375,2386,2394,2405,2409,2414,2418,2423,2431,2437, + 2441,2445,2449,2455,2461,2463,2475,2481,2487,2509,2524,2529,2536, + 2541,2548,2553,2560,2565,2572,2577,2586,2591,2595,2602,2608,2615, + 2622,2629,2637,2644,2652,2656,2660,2662,2666,2670,2672,2687,2702, + 2714,2725,2731,2745,2747,2759,2761,2780,2782,2804,2806,2808,2820, + 2822,2833,2844,2855,2866,2877,2893,2897,2906,2916,2920,2927,2935, + 2938,2943,2950,2954,2958 + ] + +class Java20Parser ( Parser ): + + grammarFileName = "Java20Parser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'exports'", "'module'", "'non-sealed'", + "'<>'", "'open'", "'opens'", "'permits'", "'provides'", + "'record'", "'requires'", "'sealed'", "'to'", "'transitive'", + "'uses'", "'var'", "'with'", "'yield'", "'abstract'", + "'assert'", "'boolean'", "'break'", "'byte'", "'case'", + "'catch'", "'char'", "'class'", "'const'", "'continue'", + "'default'", "'do'", "'double'", "'else'", "'enum'", + "'extends'", "'final'", "'finally'", "'float'", "'for'", + "'if'", "'goto'", "'implements'", "'import'", "'instanceof'", + "'int'", "'interface'", "'long'", "'native'", "'new'", + "'package'", "'private'", "'protected'", "'public'", + "'return'", "'short'", "'static'", "'strictfp'", "'super'", + "'switch'", "'synchronized'", "'this'", "'throw'", + "'throws'", "'transient'", "'try'", "'void'", "'volatile'", + "'while'", "'_'", "", "", "", + "", "", "", "'null'", "'('", + "')'", "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", + "'...'", "'@'", "'::'", "'='", "'>'", "'<'", "'!'", + "'~'", "'?'", "':'", "'->'", "'=='", "'<='", "'>='", + "'!='", "'&&'", "'||'", "'++'", "'--'", "'+'", "'-'", + "'*'", "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", "'-='", + "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='", + "'>>='", "'>>>='" ] + + symbolicNames = [ "", "EXPORTS", "MODULE", "NONSEALED", "OACA", + "OPEN", "OPENS", "PERMITS", "PROVIDES", "RECORD", + "REQUIRES", "SEALED", "TO", "TRANSITIVE", "USES", + "VAR", "WITH", "YIELD", "ABSTRACT", "ASSERT", "BOOLEAN", + "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", + "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", + "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", + "IF", "GOTO", "IMPLEMENTS", "IMPORT", "INSTANCEOF", + "INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", + "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", + "STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", + "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "UNDER_SCORE", "IntegerLiteral", + "FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", + "StringLiteral", "TextBlock", "NullLiteral", "LPAREN", + "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", + "SEMI", "COMMA", "DOT", "ELLIPSIS", "AT", "COLONCOLON", + "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", + "COLON", "ARROW", "EQUAL", "LE", "GE", "NOTEQUAL", + "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL", "DIV", + "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN", + "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", + "XOR_ASSIGN", "MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", + "URSHIFT_ASSIGN", "Identifier", "WS", "COMMENT", "LINE_COMMENT" ] + + RULE_start_ = 0 + RULE_identifier = 1 + RULE_typeIdentifier = 2 + RULE_unqualifiedMethodIdentifier = 3 + RULE_contextualKeyword = 4 + RULE_contextualKeywordMinusForTypeIdentifier = 5 + RULE_contextualKeywordMinusForUnqualifiedMethodIdentifier = 6 + RULE_literal = 7 + RULE_primitiveType = 8 + RULE_numericType = 9 + RULE_integralType = 10 + RULE_floatingPointType = 11 + RULE_referenceType = 12 + RULE_coit = 13 + RULE_classOrInterfaceType = 14 + RULE_classType = 15 + RULE_interfaceType = 16 + RULE_typeVariable = 17 + RULE_arrayType = 18 + RULE_dims = 19 + RULE_typeParameter = 20 + RULE_typeParameterModifier = 21 + RULE_typeBound = 22 + RULE_additionalBound = 23 + RULE_typeArguments = 24 + RULE_typeArgumentList = 25 + RULE_typeArgument = 26 + RULE_wildcard = 27 + RULE_wildcardBounds = 28 + RULE_moduleName = 29 + RULE_packageName = 30 + RULE_typeName = 31 + RULE_packageOrTypeName = 32 + RULE_expressionName = 33 + RULE_methodName = 34 + RULE_ambiguousName = 35 + RULE_compilationUnit = 36 + RULE_ordinaryCompilationUnit = 37 + RULE_modularCompilationUnit = 38 + RULE_packageDeclaration = 39 + RULE_packageModifier = 40 + RULE_importDeclaration = 41 + RULE_singleTypeImportDeclaration = 42 + RULE_typeImportOnDemandDeclaration = 43 + RULE_singleStaticImportDeclaration = 44 + RULE_staticImportOnDemandDeclaration = 45 + RULE_topLevelClassOrInterfaceDeclaration = 46 + RULE_moduleDeclaration = 47 + RULE_moduleDirective = 48 + RULE_requiresModifier = 49 + RULE_classDeclaration = 50 + RULE_normalClassDeclaration = 51 + RULE_classModifier = 52 + RULE_typeParameters = 53 + RULE_typeParameterList = 54 + RULE_classExtends = 55 + RULE_classImplements = 56 + RULE_interfaceTypeList = 57 + RULE_classPermits = 58 + RULE_classBody = 59 + RULE_classBodyDeclaration = 60 + RULE_classMemberDeclaration = 61 + RULE_fieldDeclaration = 62 + RULE_fieldModifier = 63 + RULE_variableDeclaratorList = 64 + RULE_variableDeclarator = 65 + RULE_variableDeclaratorId = 66 + RULE_variableInitializer = 67 + RULE_unannType = 68 + RULE_unannPrimitiveType = 69 + RULE_unannReferenceType = 70 + RULE_unannClassOrInterfaceType = 71 + RULE_uCOIT = 72 + RULE_unannClassType = 73 + RULE_unannInterfaceType = 74 + RULE_unannTypeVariable = 75 + RULE_unannArrayType = 76 + RULE_methodDeclaration = 77 + RULE_methodModifier = 78 + RULE_methodHeader = 79 + RULE_result = 80 + RULE_methodDeclarator = 81 + RULE_receiverParameter = 82 + RULE_formalParameterList = 83 + RULE_formalParameter = 84 + RULE_variableArityParameter = 85 + RULE_variableModifier = 86 + RULE_throwsT = 87 + RULE_exceptionTypeList = 88 + RULE_exceptionType = 89 + RULE_methodBody = 90 + RULE_instanceInitializer = 91 + RULE_staticInitializer = 92 + RULE_constructorDeclaration = 93 + RULE_constructorModifier = 94 + RULE_constructorDeclarator = 95 + RULE_simpleTypeName = 96 + RULE_constructorBody = 97 + RULE_explicitConstructorInvocation = 98 + RULE_enumDeclaration = 99 + RULE_enumBody = 100 + RULE_enumConstantList = 101 + RULE_enumConstant = 102 + RULE_enumConstantModifier = 103 + RULE_enumBodyDeclarations = 104 + RULE_recordDeclaration = 105 + RULE_recordHeader = 106 + RULE_recordComponentList = 107 + RULE_recordComponent = 108 + RULE_variableArityRecordComponent = 109 + RULE_recordComponentModifier = 110 + RULE_recordBody = 111 + RULE_recordBodyDeclaration = 112 + RULE_compactConstructorDeclaration = 113 + RULE_interfaceDeclaration = 114 + RULE_normalInterfaceDeclaration = 115 + RULE_interfaceModifier = 116 + RULE_interfaceExtends = 117 + RULE_interfacePermits = 118 + RULE_interfaceBody = 119 + RULE_interfaceMemberDeclaration = 120 + RULE_constantDeclaration = 121 + RULE_constantModifier = 122 + RULE_interfaceMethodDeclaration = 123 + RULE_interfaceMethodModifier = 124 + RULE_annotationInterfaceDeclaration = 125 + RULE_annotationInterfaceBody = 126 + RULE_annotationInterfaceMemberDeclaration = 127 + RULE_annotationInterfaceElementDeclaration = 128 + RULE_annotationInterfaceElementModifier = 129 + RULE_defaultValue = 130 + RULE_annotation = 131 + RULE_normalAnnotation = 132 + RULE_elementValuePairList = 133 + RULE_elementValuePair = 134 + RULE_elementValue = 135 + RULE_elementValueArrayInitializer = 136 + RULE_elementValueList = 137 + RULE_markerAnnotation = 138 + RULE_singleElementAnnotation = 139 + RULE_arrayInitializer = 140 + RULE_variableInitializerList = 141 + RULE_block = 142 + RULE_blockStatements = 143 + RULE_blockStatement = 144 + RULE_localClassOrInterfaceDeclaration = 145 + RULE_localVariableDeclaration = 146 + RULE_localVariableType = 147 + RULE_localVariableDeclarationStatement = 148 + RULE_statement = 149 + RULE_statementNoShortIf = 150 + RULE_statementWithoutTrailingSubstatement = 151 + RULE_emptyStatement_ = 152 + RULE_labeledStatement = 153 + RULE_labeledStatementNoShortIf = 154 + RULE_expressionStatement = 155 + RULE_statementExpression = 156 + RULE_ifThenStatement = 157 + RULE_ifThenElseStatement = 158 + RULE_ifThenElseStatementNoShortIf = 159 + RULE_assertStatement = 160 + RULE_switchStatement = 161 + RULE_switchBlock = 162 + RULE_switchRule = 163 + RULE_switchBlockStatementGroup = 164 + RULE_switchLabel = 165 + RULE_caseConstant = 166 + RULE_whileStatement = 167 + RULE_whileStatementNoShortIf = 168 + RULE_doStatement = 169 + RULE_forStatement = 170 + RULE_forStatementNoShortIf = 171 + RULE_basicForStatement = 172 + RULE_basicForStatementNoShortIf = 173 + RULE_forInit = 174 + RULE_forUpdate = 175 + RULE_statementExpressionList = 176 + RULE_enhancedForStatement = 177 + RULE_enhancedForStatementNoShortIf = 178 + RULE_breakStatement = 179 + RULE_continueStatement = 180 + RULE_returnStatement = 181 + RULE_throwStatement = 182 + RULE_synchronizedStatement = 183 + RULE_tryStatement = 184 + RULE_catches = 185 + RULE_catchClause = 186 + RULE_catchFormalParameter = 187 + RULE_catchType = 188 + RULE_finallyBlock = 189 + RULE_tryWithResourcesStatement = 190 + RULE_resourceSpecification = 191 + RULE_resourceList = 192 + RULE_resource = 193 + RULE_variableAccess = 194 + RULE_yieldStatement = 195 + RULE_pattern = 196 + RULE_typePattern = 197 + RULE_expression = 198 + RULE_primary = 199 + RULE_primaryNoNewArray = 200 + RULE_pNNA = 201 + RULE_classLiteral = 202 + RULE_classInstanceCreationExpression = 203 + RULE_unqualifiedClassInstanceCreationExpression = 204 + RULE_classOrInterfaceTypeToInstantiate = 205 + RULE_typeArgumentsOrDiamond = 206 + RULE_arrayCreationExpression = 207 + RULE_arrayCreationExpressionWithoutInitializer = 208 + RULE_arrayCreationExpressionWithInitializer = 209 + RULE_dimExprs = 210 + RULE_dimExpr = 211 + RULE_arrayAccess = 212 + RULE_fieldAccess = 213 + RULE_methodInvocation = 214 + RULE_argumentList = 215 + RULE_methodReference = 216 + RULE_postfixExpression = 217 + RULE_pfE = 218 + RULE_postIncrementExpression = 219 + RULE_postDecrementExpression = 220 + RULE_unaryExpression = 221 + RULE_preIncrementExpression = 222 + RULE_preDecrementExpression = 223 + RULE_unaryExpressionNotPlusMinus = 224 + RULE_castExpression = 225 + RULE_multiplicativeExpression = 226 + RULE_additiveExpression = 227 + RULE_shiftExpression = 228 + RULE_relationalExpression = 229 + RULE_equalityExpression = 230 + RULE_andExpression = 231 + RULE_exclusiveOrExpression = 232 + RULE_inclusiveOrExpression = 233 + RULE_conditionalAndExpression = 234 + RULE_conditionalOrExpression = 235 + RULE_conditionalExpression = 236 + RULE_assignmentExpression = 237 + RULE_assignment = 238 + RULE_leftHandSide = 239 + RULE_assignmentOperator = 240 + RULE_lambdaExpression = 241 + RULE_lambdaParameters = 242 + RULE_lambdaParameterList = 243 + RULE_lambdaParameter = 244 + RULE_lambdaParameterType = 245 + RULE_lambdaBody = 246 + RULE_switchExpression = 247 + RULE_constantExpression = 248 + + ruleNames = [ "start_", "identifier", "typeIdentifier", "unqualifiedMethodIdentifier", + "contextualKeyword", "contextualKeywordMinusForTypeIdentifier", + "contextualKeywordMinusForUnqualifiedMethodIdentifier", + "literal", "primitiveType", "numericType", "integralType", + "floatingPointType", "referenceType", "coit", "classOrInterfaceType", + "classType", "interfaceType", "typeVariable", "arrayType", + "dims", "typeParameter", "typeParameterModifier", "typeBound", + "additionalBound", "typeArguments", "typeArgumentList", + "typeArgument", "wildcard", "wildcardBounds", "moduleName", + "packageName", "typeName", "packageOrTypeName", "expressionName", + "methodName", "ambiguousName", "compilationUnit", "ordinaryCompilationUnit", + "modularCompilationUnit", "packageDeclaration", "packageModifier", + "importDeclaration", "singleTypeImportDeclaration", "typeImportOnDemandDeclaration", + "singleStaticImportDeclaration", "staticImportOnDemandDeclaration", + "topLevelClassOrInterfaceDeclaration", "moduleDeclaration", + "moduleDirective", "requiresModifier", "classDeclaration", + "normalClassDeclaration", "classModifier", "typeParameters", + "typeParameterList", "classExtends", "classImplements", + "interfaceTypeList", "classPermits", "classBody", "classBodyDeclaration", + "classMemberDeclaration", "fieldDeclaration", "fieldModifier", + "variableDeclaratorList", "variableDeclarator", "variableDeclaratorId", + "variableInitializer", "unannType", "unannPrimitiveType", + "unannReferenceType", "unannClassOrInterfaceType", "uCOIT", + "unannClassType", "unannInterfaceType", "unannTypeVariable", + "unannArrayType", "methodDeclaration", "methodModifier", + "methodHeader", "result", "methodDeclarator", "receiverParameter", + "formalParameterList", "formalParameter", "variableArityParameter", + "variableModifier", "throwsT", "exceptionTypeList", "exceptionType", + "methodBody", "instanceInitializer", "staticInitializer", + "constructorDeclaration", "constructorModifier", "constructorDeclarator", + "simpleTypeName", "constructorBody", "explicitConstructorInvocation", + "enumDeclaration", "enumBody", "enumConstantList", "enumConstant", + "enumConstantModifier", "enumBodyDeclarations", "recordDeclaration", + "recordHeader", "recordComponentList", "recordComponent", + "variableArityRecordComponent", "recordComponentModifier", + "recordBody", "recordBodyDeclaration", "compactConstructorDeclaration", + "interfaceDeclaration", "normalInterfaceDeclaration", + "interfaceModifier", "interfaceExtends", "interfacePermits", + "interfaceBody", "interfaceMemberDeclaration", "constantDeclaration", + "constantModifier", "interfaceMethodDeclaration", "interfaceMethodModifier", + "annotationInterfaceDeclaration", "annotationInterfaceBody", + "annotationInterfaceMemberDeclaration", "annotationInterfaceElementDeclaration", + "annotationInterfaceElementModifier", "defaultValue", + "annotation", "normalAnnotation", "elementValuePairList", + "elementValuePair", "elementValue", "elementValueArrayInitializer", + "elementValueList", "markerAnnotation", "singleElementAnnotation", + "arrayInitializer", "variableInitializerList", "block", + "blockStatements", "blockStatement", "localClassOrInterfaceDeclaration", + "localVariableDeclaration", "localVariableType", "localVariableDeclarationStatement", + "statement", "statementNoShortIf", "statementWithoutTrailingSubstatement", + "emptyStatement_", "labeledStatement", "labeledStatementNoShortIf", + "expressionStatement", "statementExpression", "ifThenStatement", + "ifThenElseStatement", "ifThenElseStatementNoShortIf", + "assertStatement", "switchStatement", "switchBlock", + "switchRule", "switchBlockStatementGroup", "switchLabel", + "caseConstant", "whileStatement", "whileStatementNoShortIf", + "doStatement", "forStatement", "forStatementNoShortIf", + "basicForStatement", "basicForStatementNoShortIf", "forInit", + "forUpdate", "statementExpressionList", "enhancedForStatement", + "enhancedForStatementNoShortIf", "breakStatement", "continueStatement", + "returnStatement", "throwStatement", "synchronizedStatement", + "tryStatement", "catches", "catchClause", "catchFormalParameter", + "catchType", "finallyBlock", "tryWithResourcesStatement", + "resourceSpecification", "resourceList", "resource", + "variableAccess", "yieldStatement", "pattern", "typePattern", + "expression", "primary", "primaryNoNewArray", "pNNA", + "classLiteral", "classInstanceCreationExpression", "unqualifiedClassInstanceCreationExpression", + "classOrInterfaceTypeToInstantiate", "typeArgumentsOrDiamond", + "arrayCreationExpression", "arrayCreationExpressionWithoutInitializer", + "arrayCreationExpressionWithInitializer", "dimExprs", + "dimExpr", "arrayAccess", "fieldAccess", "methodInvocation", + "argumentList", "methodReference", "postfixExpression", + "pfE", "postIncrementExpression", "postDecrementExpression", + "unaryExpression", "preIncrementExpression", "preDecrementExpression", + "unaryExpressionNotPlusMinus", "castExpression", "multiplicativeExpression", + "additiveExpression", "shiftExpression", "relationalExpression", + "equalityExpression", "andExpression", "exclusiveOrExpression", + "inclusiveOrExpression", "conditionalAndExpression", + "conditionalOrExpression", "conditionalExpression", "assignmentExpression", + "assignment", "leftHandSide", "assignmentOperator", "lambdaExpression", + "lambdaParameters", "lambdaParameterList", "lambdaParameter", + "lambdaParameterType", "lambdaBody", "switchExpression", + "constantExpression" ] + + EOF = Token.EOF + EXPORTS=1 + MODULE=2 + NONSEALED=3 + OACA=4 + OPEN=5 + OPENS=6 + PERMITS=7 + PROVIDES=8 + RECORD=9 + REQUIRES=10 + SEALED=11 + TO=12 + TRANSITIVE=13 + USES=14 + VAR=15 + WITH=16 + YIELD=17 + ABSTRACT=18 + ASSERT=19 + BOOLEAN=20 + BREAK=21 + BYTE=22 + CASE=23 + CATCH=24 + CHAR=25 + CLASS=26 + CONST=27 + CONTINUE=28 + DEFAULT=29 + DO=30 + DOUBLE=31 + ELSE=32 + ENUM=33 + EXTENDS=34 + FINAL=35 + FINALLY=36 + FLOAT=37 + FOR=38 + IF=39 + GOTO=40 + IMPLEMENTS=41 + IMPORT=42 + INSTANCEOF=43 + INT=44 + INTERFACE=45 + LONG=46 + NATIVE=47 + NEW=48 + PACKAGE=49 + PRIVATE=50 + PROTECTED=51 + PUBLIC=52 + RETURN=53 + SHORT=54 + STATIC=55 + STRICTFP=56 + SUPER=57 + SWITCH=58 + SYNCHRONIZED=59 + THIS=60 + THROW=61 + THROWS=62 + TRANSIENT=63 + TRY=64 + VOID=65 + VOLATILE=66 + WHILE=67 + UNDER_SCORE=68 + IntegerLiteral=69 + FloatingPointLiteral=70 + BooleanLiteral=71 + CharacterLiteral=72 + StringLiteral=73 + TextBlock=74 + NullLiteral=75 + LPAREN=76 + RPAREN=77 + LBRACE=78 + RBRACE=79 + LBRACK=80 + RBRACK=81 + SEMI=82 + COMMA=83 + DOT=84 + ELLIPSIS=85 + AT=86 + COLONCOLON=87 + ASSIGN=88 + GT=89 + LT=90 + BANG=91 + TILDE=92 + QUESTION=93 + COLON=94 + ARROW=95 + EQUAL=96 + LE=97 + GE=98 + NOTEQUAL=99 + AND=100 + OR=101 + INC=102 + DEC=103 + ADD=104 + SUB=105 + MUL=106 + DIV=107 + BITAND=108 + BITOR=109 + CARET=110 + MOD=111 + ADD_ASSIGN=112 + SUB_ASSIGN=113 + MUL_ASSIGN=114 + DIV_ASSIGN=115 + AND_ASSIGN=116 + OR_ASSIGN=117 + XOR_ASSIGN=118 + MOD_ASSIGN=119 + LSHIFT_ASSIGN=120 + RSHIFT_ASSIGN=121 + URSHIFT_ASSIGN=122 + Identifier=123 + WS=124 + COMMENT=125 + LINE_COMMENT=126 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class Start_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def compilationUnit(self): + return self.getTypedRuleContext(Java20Parser.CompilationUnitContext,0) + + + def EOF(self): + return self.getToken(Java20Parser.EOF, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_start_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStart_" ): + return visitor.visitStart_(self) + else: + return visitor.visitChildren(self) + + + + + def start_(self): + + localctx = Java20Parser.Start_Context(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_start_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 498 + self.compilationUnit() + self.state = 499 + self.match(Java20Parser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def contextualKeyword(self): + return self.getTypedRuleContext(Java20Parser.ContextualKeywordContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_identifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIdentifier" ): + return visitor.visitIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def identifier(self): + + localctx = Java20Parser.IdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_identifier) + try: + self.state = 503 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [123]: + self.enterOuterAlt(localctx, 1) + self.state = 501 + self.match(Java20Parser.Identifier) + pass + elif token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]: + self.enterOuterAlt(localctx, 2) + self.state = 502 + self.contextualKeyword() + 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 TypeIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def contextualKeywordMinusForTypeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.ContextualKeywordMinusForTypeIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeIdentifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeIdentifier" ): + return visitor.visitTypeIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeIdentifier(self): + + localctx = Java20Parser.TypeIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_typeIdentifier) + try: + self.state = 507 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [123]: + self.enterOuterAlt(localctx, 1) + self.state = 505 + self.match(Java20Parser.Identifier) + pass + elif token in [1, 2, 3, 5, 6, 8, 10, 12, 13, 14, 16]: + self.enterOuterAlt(localctx, 2) + self.state = 506 + self.contextualKeywordMinusForTypeIdentifier() + 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 UnqualifiedMethodIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(Java20Parser.Identifier, 0) + + def contextualKeywordMinusForUnqualifiedMethodIdentifier(self): + return self.getTypedRuleContext(Java20Parser.ContextualKeywordMinusForUnqualifiedMethodIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unqualifiedMethodIdentifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnqualifiedMethodIdentifier" ): + return visitor.visitUnqualifiedMethodIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def unqualifiedMethodIdentifier(self): + + localctx = Java20Parser.UnqualifiedMethodIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_unqualifiedMethodIdentifier) + try: + self.state = 511 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [123]: + self.enterOuterAlt(localctx, 1) + self.state = 509 + self.match(Java20Parser.Identifier) + pass + elif token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]: + self.enterOuterAlt(localctx, 2) + self.state = 510 + self.contextualKeywordMinusForUnqualifiedMethodIdentifier() + 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 ContextualKeywordContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXPORTS(self): + return self.getToken(Java20Parser.EXPORTS, 0) + + def MODULE(self): + return self.getToken(Java20Parser.MODULE, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def OPEN(self): + return self.getToken(Java20Parser.OPEN, 0) + + def OPENS(self): + return self.getToken(Java20Parser.OPENS, 0) + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def PROVIDES(self): + return self.getToken(Java20Parser.PROVIDES, 0) + + def RECORD(self): + return self.getToken(Java20Parser.RECORD, 0) + + def REQUIRES(self): + return self.getToken(Java20Parser.REQUIRES, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def TO(self): + return self.getToken(Java20Parser.TO, 0) + + def TRANSITIVE(self): + return self.getToken(Java20Parser.TRANSITIVE, 0) + + def USES(self): + return self.getToken(Java20Parser.USES, 0) + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def WITH(self): + return self.getToken(Java20Parser.WITH, 0) + + def YIELD(self): + return self.getToken(Java20Parser.YIELD, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_contextualKeyword + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitContextualKeyword" ): + return visitor.visitContextualKeyword(self) + else: + return visitor.visitChildren(self) + + + + + def contextualKeyword(self): + + localctx = Java20Parser.ContextualKeywordContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_contextualKeyword) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 513 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 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 ContextualKeywordMinusForTypeIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXPORTS(self): + return self.getToken(Java20Parser.EXPORTS, 0) + + def MODULE(self): + return self.getToken(Java20Parser.MODULE, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def OPEN(self): + return self.getToken(Java20Parser.OPEN, 0) + + def OPENS(self): + return self.getToken(Java20Parser.OPENS, 0) + + def PROVIDES(self): + return self.getToken(Java20Parser.PROVIDES, 0) + + def REQUIRES(self): + return self.getToken(Java20Parser.REQUIRES, 0) + + def TO(self): + return self.getToken(Java20Parser.TO, 0) + + def TRANSITIVE(self): + return self.getToken(Java20Parser.TRANSITIVE, 0) + + def USES(self): + return self.getToken(Java20Parser.USES, 0) + + def WITH(self): + return self.getToken(Java20Parser.WITH, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_contextualKeywordMinusForTypeIdentifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitContextualKeywordMinusForTypeIdentifier" ): + return visitor.visitContextualKeywordMinusForTypeIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def contextualKeywordMinusForTypeIdentifier(self): + + localctx = Java20Parser.ContextualKeywordMinusForTypeIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_contextualKeywordMinusForTypeIdentifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 515 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 95598) != 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 ContextualKeywordMinusForUnqualifiedMethodIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXPORTS(self): + return self.getToken(Java20Parser.EXPORTS, 0) + + def MODULE(self): + return self.getToken(Java20Parser.MODULE, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def OPEN(self): + return self.getToken(Java20Parser.OPEN, 0) + + def OPENS(self): + return self.getToken(Java20Parser.OPENS, 0) + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def PROVIDES(self): + return self.getToken(Java20Parser.PROVIDES, 0) + + def RECORD(self): + return self.getToken(Java20Parser.RECORD, 0) + + def REQUIRES(self): + return self.getToken(Java20Parser.REQUIRES, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def TO(self): + return self.getToken(Java20Parser.TO, 0) + + def TRANSITIVE(self): + return self.getToken(Java20Parser.TRANSITIVE, 0) + + def USES(self): + return self.getToken(Java20Parser.USES, 0) + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def WITH(self): + return self.getToken(Java20Parser.WITH, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_contextualKeywordMinusForUnqualifiedMethodIdentifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitContextualKeywordMinusForUnqualifiedMethodIdentifier" ): + return visitor.visitContextualKeywordMinusForUnqualifiedMethodIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def contextualKeywordMinusForUnqualifiedMethodIdentifier(self): + + localctx = Java20Parser.ContextualKeywordMinusForUnqualifiedMethodIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_contextualKeywordMinusForUnqualifiedMethodIdentifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 517 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 131054) != 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 LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IntegerLiteral(self): + return self.getToken(Java20Parser.IntegerLiteral, 0) + + def FloatingPointLiteral(self): + return self.getToken(Java20Parser.FloatingPointLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(Java20Parser.BooleanLiteral, 0) + + def CharacterLiteral(self): + return self.getToken(Java20Parser.CharacterLiteral, 0) + + def StringLiteral(self): + return self.getToken(Java20Parser.StringLiteral, 0) + + def TextBlock(self): + return self.getToken(Java20Parser.TextBlock, 0) + + def NullLiteral(self): + return self.getToken(Java20Parser.NullLiteral, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_literal + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLiteral" ): + return visitor.visitLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def literal(self): + + localctx = Java20Parser.LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_literal) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 519 + _la = self._input.LA(1) + if not(((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & 127) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_primitiveType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimitiveType" ): + return visitor.visitPrimitiveType(self) + else: + return visitor.visitChildren(self) + + + + + def primitiveType(self): + + localctx = Java20Parser.PrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_primitiveType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 524 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 521 + self.annotation() + self.state = 526 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 529 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.state = 527 + self.numericType() + pass + elif token in [20]: + self.state = 528 + self.match(Java20Parser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NumericTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def integralType(self): + return self.getTypedRuleContext(Java20Parser.IntegralTypeContext,0) + + + def floatingPointType(self): + return self.getTypedRuleContext(Java20Parser.FloatingPointTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_numericType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNumericType" ): + return visitor.visitNumericType(self) + else: + return visitor.visitChildren(self) + + + + + def numericType(self): + + localctx = Java20Parser.NumericTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_numericType) + try: + self.state = 533 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 531 + self.integralType() + pass + elif token in [31, 37]: + self.enterOuterAlt(localctx, 2) + self.state = 532 + self.floatingPointType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IntegralTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BYTE(self): + return self.getToken(Java20Parser.BYTE, 0) + + def SHORT(self): + return self.getToken(Java20Parser.SHORT, 0) + + def INT(self): + return self.getToken(Java20Parser.INT, 0) + + def LONG(self): + return self.getToken(Java20Parser.LONG, 0) + + def CHAR(self): + return self.getToken(Java20Parser.CHAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_integralType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIntegralType" ): + return visitor.visitIntegralType(self) + else: + return visitor.visitChildren(self) + + + + + def integralType(self): + + localctx = Java20Parser.IntegralTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_integralType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 535 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 18102359477452800) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FloatingPointTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FLOAT(self): + return self.getToken(Java20Parser.FLOAT, 0) + + def DOUBLE(self): + return self.getToken(Java20Parser.DOUBLE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_floatingPointType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFloatingPointType" ): + return visitor.visitFloatingPointType(self) + else: + return visitor.visitChildren(self) + + + + + def floatingPointType(self): + + localctx = Java20Parser.FloatingPointTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_floatingPointType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 537 + _la = self._input.LA(1) + if not(_la==31 or _la==37): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext,0) + + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_referenceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReferenceType" ): + return visitor.visitReferenceType(self) + else: + return visitor.visitChildren(self) + + + + + def referenceType(self): + + localctx = Java20Parser.ReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_referenceType) + try: + self.state = 542 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,6,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 539 + self.classOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 540 + self.typeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 541 + self.arrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CoitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def coit(self): + return self.getTypedRuleContext(Java20Parser.CoitContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_coit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCoit" ): + return visitor.visitCoit(self) + else: + return visitor.visitChildren(self) + + + + + def coit(self): + + localctx = Java20Parser.CoitContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_coit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 544 + self.match(Java20Parser.DOT) + self.state = 548 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 545 + self.annotation() + self.state = 550 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 551 + self.typeIdentifier() + self.state = 553 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,8,self._ctx) + if la_ == 1: + self.state = 552 + self.typeArguments() + + + self.state = 556 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,9,self._ctx) + if la_ == 1: + self.state = 555 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def coit(self): + return self.getTypedRuleContext(Java20Parser.CoitContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classOrInterfaceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassOrInterfaceType" ): + return visitor.visitClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def classOrInterfaceType(self): + + localctx = Java20Parser.ClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_classOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 561 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + if la_ == 1: + self.state = 558 + self.packageName() + self.state = 559 + self.match(Java20Parser.DOT) + + + self.state = 566 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 563 + self.annotation() + self.state = 568 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 569 + self.typeIdentifier() + self.state = 571 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,12,self._ctx) + if la_ == 1: + self.state = 570 + self.typeArguments() + + + self.state = 574 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,13,self._ctx) + if la_ == 1: + self.state = 573 + self.coit() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassType" ): + return visitor.visitClassType(self) + else: + return visitor.visitChildren(self) + + + + + def classType(self): + + localctx = Java20Parser.ClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_classType) + self._la = 0 # Token type + try: + self.state = 610 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,20,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 579 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 576 + self.annotation() + self.state = 581 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 582 + self.typeIdentifier() + self.state = 584 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 583 + self.typeArguments() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 586 + self.packageName() + self.state = 587 + self.match(Java20Parser.DOT) + self.state = 591 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 588 + self.annotation() + self.state = 593 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 594 + self.typeIdentifier() + self.state = 596 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 595 + self.typeArguments() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 598 + self.classOrInterfaceType() + self.state = 599 + self.match(Java20Parser.DOT) + self.state = 603 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 600 + self.annotation() + self.state = 605 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 606 + self.typeIdentifier() + self.state = 608 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 607 + self.typeArguments() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceType" ): + return visitor.visitInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceType(self): + + localctx = Java20Parser.InterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_interfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 612 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeVariable + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeVariable" ): + return visitor.visitTypeVariable(self) + else: + return visitor.visitChildren(self) + + + + + def typeVariable(self): + + localctx = Java20Parser.TypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_typeVariable) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 617 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 614 + self.annotation() + self.state = 619 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 620 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext,0) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_arrayType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayType" ): + return visitor.visitArrayType(self) + else: + return visitor.visitChildren(self) + + + + + def arrayType(self): + + localctx = Java20Parser.ArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_arrayType) + try: + self.state = 631 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,22,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 622 + self.primitiveType() + self.state = 623 + self.dims() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 625 + self.classType() + self.state = 626 + self.dims() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 628 + self.typeVariable() + self.state = 629 + self.dims() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.LBRACK) + else: + return self.getToken(Java20Parser.LBRACK, i) + + def RBRACK(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.RBRACK) + else: + return self.getToken(Java20Parser.RBRACK, i) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_dims + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDims" ): + return visitor.visitDims(self) + else: + return visitor.visitChildren(self) + + + + + def dims(self): + + localctx = Java20Parser.DimsContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_dims) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 636 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 633 + self.annotation() + self.state = 638 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 639 + self.match(Java20Parser.LBRACK) + self.state = 640 + self.match(Java20Parser.RBRACK) + self.state = 651 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 644 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 641 + self.annotation() + self.state = 646 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 647 + self.match(Java20Parser.LBRACK) + self.state = 648 + self.match(Java20Parser.RBRACK) + self.state = 653 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,25,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def typeParameterModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeParameterModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeParameterModifierContext,i) + + + def typeBound(self): + return self.getTypedRuleContext(Java20Parser.TypeBoundContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameter" ): + return visitor.visitTypeParameter(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameter(self): + + localctx = Java20Parser.TypeParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_typeParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 657 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 654 + self.typeParameterModifier() + self.state = 659 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 660 + self.typeIdentifier() + self.state = 662 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 661 + self.typeBound() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameterModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameterModifier" ): + return visitor.visitTypeParameterModifier(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameterModifier(self): + + localctx = Java20Parser.TypeParameterModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_typeParameterModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 664 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext,0) + + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext,0) + + + def additionalBound(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(Java20Parser.AdditionalBoundContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeBound + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeBound" ): + return visitor.visitTypeBound(self) + else: + return visitor.visitChildren(self) + + + + + def typeBound(self): + + localctx = Java20Parser.TypeBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_typeBound) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 666 + self.match(Java20Parser.EXTENDS) + self.state = 675 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + if la_ == 1: + self.state = 667 + self.typeVariable() + pass + + elif la_ == 2: + self.state = 668 + self.classOrInterfaceType() + self.state = 672 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 669 + self.additionalBound() + self.state = 674 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AdditionalBoundContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BITAND(self): + return self.getToken(Java20Parser.BITAND, 0) + + def interfaceType(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_additionalBound + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAdditionalBound" ): + return visitor.visitAdditionalBound(self) + else: + return visitor.visitChildren(self) + + + + + def additionalBound(self): + + localctx = Java20Parser.AdditionalBoundContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_additionalBound) + try: + self.enterOuterAlt(localctx, 1) + self.state = 677 + self.match(Java20Parser.BITAND) + self.state = 678 + self.interfaceType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def typeArgumentList(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentListContext,0) + + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArguments + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArguments" ): + return visitor.visitTypeArguments(self) + else: + return visitor.visitChildren(self) + + + + + def typeArguments(self): + + localctx = Java20Parser.TypeArgumentsContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_typeArguments) + try: + self.enterOuterAlt(localctx, 1) + self.state = 680 + self.match(Java20Parser.LT) + self.state = 681 + self.typeArgumentList() + self.state = 682 + self.match(Java20Parser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArgument(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeArgumentContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeArgumentContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgumentList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgumentList" ): + return visitor.visitTypeArgumentList(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgumentList(self): + + localctx = Java20Parser.TypeArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_typeArgumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 684 + self.typeArgument() + self.state = 689 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 685 + self.match(Java20Parser.COMMA) + self.state = 686 + self.typeArgument() + self.state = 691 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def wildcard(self): + return self.getTypedRuleContext(Java20Parser.WildcardContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgument + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgument" ): + return visitor.visitTypeArgument(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgument(self): + + localctx = Java20Parser.TypeArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_typeArgument) + try: + self.state = 694 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,31,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 692 + self.referenceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 693 + self.wildcard() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WildcardContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def QUESTION(self): + return self.getToken(Java20Parser.QUESTION, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def wildcardBounds(self): + return self.getTypedRuleContext(Java20Parser.WildcardBoundsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_wildcard + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWildcard" ): + return visitor.visitWildcard(self) + else: + return visitor.visitChildren(self) + + + + + def wildcard(self): + + localctx = Java20Parser.WildcardContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_wildcard) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 699 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 696 + self.annotation() + self.state = 701 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 702 + self.match(Java20Parser.QUESTION) + self.state = 704 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34 or _la==57: + self.state = 703 + self.wildcardBounds() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WildcardBoundsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_wildcardBounds + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWildcardBounds" ): + return visitor.visitWildcardBounds(self) + else: + return visitor.visitChildren(self) + + + + + def wildcardBounds(self): + + localctx = Java20Parser.WildcardBoundsContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_wildcardBounds) + try: + self.state = 710 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [34]: + self.enterOuterAlt(localctx, 1) + self.state = 706 + self.match(Java20Parser.EXTENDS) + self.state = 707 + self.referenceType() + pass + elif token in [57]: + self.enterOuterAlt(localctx, 2) + self.state = 708 + self.match(Java20Parser.SUPER) + self.state = 709 + self.referenceType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def moduleName(self): + return self.getTypedRuleContext(Java20Parser.ModuleNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_moduleName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleName" ): + return visitor.visitModuleName(self) + else: + return visitor.visitChildren(self) + + + + + def moduleName(self): + + localctx = Java20Parser.ModuleNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_moduleName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 712 + self.identifier() + self.state = 715 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==84: + self.state = 713 + self.match(Java20Parser.DOT) + self.state = 714 + self.moduleName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_packageName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageName" ): + return visitor.visitPackageName(self) + else: + return visitor.visitChildren(self) + + + + + def packageName(self): + + localctx = Java20Parser.PackageNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_packageName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 717 + self.identifier() + self.state = 720 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + if la_ == 1: + self.state = 718 + self.match(Java20Parser.DOT) + self.state = 719 + self.packageName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typeName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeName" ): + return visitor.visitTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def typeName(self): + + localctx = Java20Parser.TypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_typeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 722 + self.packageName() + self.state = 725 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + if la_ == 1: + self.state = 723 + self.match(Java20Parser.DOT) + self.state = 724 + self.typeIdentifier() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageOrTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(Java20Parser.PackageOrTypeNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_packageOrTypeName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageOrTypeName" ): + return visitor.visitPackageOrTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def packageOrTypeName(self): + + localctx = Java20Parser.PackageOrTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_packageOrTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 727 + self.identifier() + self.state = 730 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,38,self._ctx) + if la_ == 1: + self.state = 728 + self.match(Java20Parser.DOT) + self.state = 729 + self.packageOrTypeName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def ambiguousName(self): + return self.getTypedRuleContext(Java20Parser.AmbiguousNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_expressionName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionName" ): + return visitor.visitExpressionName(self) + else: + return visitor.visitChildren(self) + + + + + def expressionName(self): + + localctx = Java20Parser.ExpressionNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_expressionName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 735 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + if la_ == 1: + self.state = 732 + self.ambiguousName() + self.state = 733 + self.match(Java20Parser.DOT) + + + self.state = 737 + self.identifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedMethodIdentifier(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedMethodIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_methodName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodName" ): + return visitor.visitMethodName(self) + else: + return visitor.visitChildren(self) + + + + + def methodName(self): + + localctx = Java20Parser.MethodNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_methodName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 739 + self.unqualifiedMethodIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AmbiguousNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def ambiguousName(self): + return self.getTypedRuleContext(Java20Parser.AmbiguousNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_ambiguousName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAmbiguousName" ): + return visitor.visitAmbiguousName(self) + else: + return visitor.visitChildren(self) + + + + + def ambiguousName(self): + + localctx = Java20Parser.AmbiguousNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_ambiguousName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 741 + self.identifier() + self.state = 744 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + if la_ == 1: + self.state = 742 + self.match(Java20Parser.DOT) + self.state = 743 + self.ambiguousName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ordinaryCompilationUnit(self): + return self.getTypedRuleContext(Java20Parser.OrdinaryCompilationUnitContext,0) + + + def modularCompilationUnit(self): + return self.getTypedRuleContext(Java20Parser.ModularCompilationUnitContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_compilationUnit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCompilationUnit" ): + return visitor.visitCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def compilationUnit(self): + + localctx = Java20Parser.CompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_compilationUnit) + try: + self.state = 748 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 746 + self.ordinaryCompilationUnit() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 747 + self.modularCompilationUnit() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OrdinaryCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def packageDeclaration(self): + return self.getTypedRuleContext(Java20Parser.PackageDeclarationContext,0) + + + def importDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ImportDeclarationContext,i) + + + def topLevelClassOrInterfaceDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TopLevelClassOrInterfaceDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.TopLevelClassOrInterfaceDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_ordinaryCompilationUnit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOrdinaryCompilationUnit" ): + return visitor.visitOrdinaryCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def ordinaryCompilationUnit(self): + + localctx = Java20Parser.OrdinaryCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_ordinaryCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 751 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,42,self._ctx) + if la_ == 1: + self.state = 750 + self.packageDeclaration() + + + self.state = 756 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==42: + self.state = 753 + self.importDeclaration() + self.state = 758 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 762 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 116002917793925640) != 0) or _la==82 or _la==86: + self.state = 759 + self.topLevelClassOrInterfaceDeclaration() + self.state = 764 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModularCompilationUnitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ModuleDeclarationContext,0) + + + def importDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ImportDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ImportDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_modularCompilationUnit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModularCompilationUnit" ): + return visitor.visitModularCompilationUnit(self) + else: + return visitor.visitChildren(self) + + + + + def modularCompilationUnit(self): + + localctx = Java20Parser.ModularCompilationUnitContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_modularCompilationUnit) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 768 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==42: + self.state = 765 + self.importDeclaration() + self.state = 770 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 771 + self.moduleDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PACKAGE(self): + return self.getToken(Java20Parser.PACKAGE, 0) + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.IdentifierContext) + else: + return self.getTypedRuleContext(Java20Parser.IdentifierContext,i) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def packageModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.PackageModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.PackageModifierContext,i) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def getRuleIndex(self): + return Java20Parser.RULE_packageDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageDeclaration" ): + return visitor.visitPackageDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def packageDeclaration(self): + + localctx = Java20Parser.PackageDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_packageDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 776 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 773 + self.packageModifier() + self.state = 778 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 779 + self.match(Java20Parser.PACKAGE) + self.state = 780 + self.identifier() + self.state = 785 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 781 + self.match(Java20Parser.DOT) + self.state = 782 + self.identifier() + self.state = 787 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 788 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PackageModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_packageModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPackageModifier" ): + return visitor.visitPackageModifier(self) + else: + return visitor.visitChildren(self) + + + + + def packageModifier(self): + + localctx = Java20Parser.PackageModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_packageModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 790 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleTypeImportDeclaration(self): + return self.getTypedRuleContext(Java20Parser.SingleTypeImportDeclarationContext,0) + + + def typeImportOnDemandDeclaration(self): + return self.getTypedRuleContext(Java20Parser.TypeImportOnDemandDeclarationContext,0) + + + def singleStaticImportDeclaration(self): + return self.getTypedRuleContext(Java20Parser.SingleStaticImportDeclarationContext,0) + + + def staticImportOnDemandDeclaration(self): + return self.getTypedRuleContext(Java20Parser.StaticImportOnDemandDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_importDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitImportDeclaration" ): + return visitor.visitImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def importDeclaration(self): + + localctx = Java20Parser.ImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_importDeclaration) + try: + self.state = 796 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,48,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 792 + self.singleTypeImportDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 793 + self.typeImportOnDemandDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 794 + self.singleStaticImportDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 795 + self.staticImportOnDemandDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleTypeImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleTypeImportDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleTypeImportDeclaration" ): + return visitor.visitSingleTypeImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def singleTypeImportDeclaration(self): + + localctx = Java20Parser.SingleTypeImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_singleTypeImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 798 + self.match(Java20Parser.IMPORT) + self.state = 799 + self.typeName() + self.state = 800 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def packageOrTypeName(self): + return self.getTypedRuleContext(Java20Parser.PackageOrTypeNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeImportOnDemandDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeImportOnDemandDeclaration" ): + return visitor.visitTypeImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def typeImportOnDemandDeclaration(self): + + localctx = Java20Parser.TypeImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_typeImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 802 + self.match(Java20Parser.IMPORT) + self.state = 803 + self.packageOrTypeName() + self.state = 804 + self.match(Java20Parser.DOT) + self.state = 805 + self.match(Java20Parser.MUL) + self.state = 806 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleStaticImportDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleStaticImportDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleStaticImportDeclaration" ): + return visitor.visitSingleStaticImportDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def singleStaticImportDeclaration(self): + + localctx = Java20Parser.SingleStaticImportDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_singleStaticImportDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 808 + self.match(Java20Parser.IMPORT) + self.state = 809 + self.match(Java20Parser.STATIC) + self.state = 810 + self.typeName() + self.state = 811 + self.match(Java20Parser.DOT) + self.state = 812 + self.identifier() + self.state = 813 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StaticImportOnDemandDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPORT(self): + return self.getToken(Java20Parser.IMPORT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_staticImportOnDemandDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStaticImportOnDemandDeclaration" ): + return visitor.visitStaticImportOnDemandDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def staticImportOnDemandDeclaration(self): + + localctx = Java20Parser.StaticImportOnDemandDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_staticImportOnDemandDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 815 + self.match(Java20Parser.IMPORT) + self.state = 816 + self.match(Java20Parser.STATIC) + self.state = 817 + self.typeName() + self.state = 818 + self.match(Java20Parser.DOT) + self.state = 819 + self.match(Java20Parser.MUL) + self.state = 820 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TopLevelClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_topLevelClassOrInterfaceDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTopLevelClassOrInterfaceDeclaration" ): + return visitor.visitTopLevelClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def topLevelClassOrInterfaceDeclaration(self): + + localctx = Java20Parser.TopLevelClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_topLevelClassOrInterfaceDeclaration) + try: + self.state = 825 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,49,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 822 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 823 + self.interfaceDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 824 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def MODULE(self): + return self.getToken(Java20Parser.MODULE, 0) + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.IdentifierContext) + else: + return self.getTypedRuleContext(Java20Parser.IdentifierContext,i) + + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def OPEN(self): + return self.getToken(Java20Parser.OPEN, 0) + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def moduleDirective(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ModuleDirectiveContext) + else: + return self.getTypedRuleContext(Java20Parser.ModuleDirectiveContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_moduleDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleDeclaration" ): + return visitor.visitModuleDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def moduleDeclaration(self): + + localctx = Java20Parser.ModuleDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_moduleDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 830 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 827 + self.annotation() + self.state = 832 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 834 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==5: + self.state = 833 + self.match(Java20Parser.OPEN) + + + self.state = 836 + self.match(Java20Parser.MODULE) + self.state = 837 + self.identifier() + self.state = 842 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 838 + self.match(Java20Parser.DOT) + self.state = 839 + self.identifier() + self.state = 844 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 845 + self.match(Java20Parser.LBRACE) + self.state = 849 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 17730) != 0): + self.state = 846 + self.moduleDirective() + self.state = 851 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 852 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleDirectiveContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def REQUIRES(self): + return self.getToken(Java20Parser.REQUIRES, 0) + + def moduleName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ModuleNameContext) + else: + return self.getTypedRuleContext(Java20Parser.ModuleNameContext,i) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def requiresModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RequiresModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RequiresModifierContext,i) + + + def EXPORTS(self): + return self.getToken(Java20Parser.EXPORTS, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def TO(self): + return self.getToken(Java20Parser.TO, 0) + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def OPENS(self): + return self.getToken(Java20Parser.OPENS, 0) + + def USES(self): + return self.getToken(Java20Parser.USES, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext,i) + + + def PROVIDES(self): + return self.getToken(Java20Parser.PROVIDES, 0) + + def WITH(self): + return self.getToken(Java20Parser.WITH, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_moduleDirective + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitModuleDirective" ): + return visitor.visitModuleDirective(self) + else: + return visitor.visitChildren(self) + + + + + def moduleDirective(self): + + localctx = Java20Parser.ModuleDirectiveContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_moduleDirective) + self._la = 0 # Token type + try: + self.state = 911 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [10]: + self.enterOuterAlt(localctx, 1) + self.state = 854 + self.match(Java20Parser.REQUIRES) + self.state = 858 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,54,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 855 + self.requiresModifier() + self.state = 860 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,54,self._ctx) + + self.state = 861 + self.moduleName() + self.state = 862 + self.match(Java20Parser.SEMI) + pass + elif token in [1]: + self.enterOuterAlt(localctx, 2) + self.state = 864 + self.match(Java20Parser.EXPORTS) + self.state = 865 + self.packageName() + self.state = 875 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 866 + self.match(Java20Parser.TO) + self.state = 867 + self.moduleName() + self.state = 872 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 868 + self.match(Java20Parser.COMMA) + self.state = 869 + self.moduleName() + self.state = 874 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 877 + self.match(Java20Parser.SEMI) + pass + elif token in [6]: + self.enterOuterAlt(localctx, 3) + self.state = 879 + self.match(Java20Parser.OPENS) + self.state = 880 + self.packageName() + self.state = 890 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 881 + self.match(Java20Parser.TO) + self.state = 882 + self.moduleName() + self.state = 887 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 883 + self.match(Java20Parser.COMMA) + self.state = 884 + self.moduleName() + self.state = 889 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 892 + self.match(Java20Parser.SEMI) + pass + elif token in [14]: + self.enterOuterAlt(localctx, 4) + self.state = 894 + self.match(Java20Parser.USES) + self.state = 895 + self.typeName() + self.state = 896 + self.match(Java20Parser.SEMI) + pass + elif token in [8]: + self.enterOuterAlt(localctx, 5) + self.state = 898 + self.match(Java20Parser.PROVIDES) + self.state = 899 + self.typeName() + self.state = 900 + self.match(Java20Parser.WITH) + self.state = 901 + self.typeName() + self.state = 906 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 902 + self.match(Java20Parser.COMMA) + self.state = 903 + self.typeName() + self.state = 908 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 909 + self.match(Java20Parser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RequiresModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRANSITIVE(self): + return self.getToken(Java20Parser.TRANSITIVE, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_requiresModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRequiresModifier" ): + return visitor.visitRequiresModifier(self) + else: + return visitor.visitChildren(self) + + + + + def requiresModifier(self): + + localctx = Java20Parser.RequiresModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_requiresModifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 913 + _la = self._input.LA(1) + if not(_la==13 or _la==55): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalClassDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalClassDeclarationContext,0) + + + def enumDeclaration(self): + return self.getTypedRuleContext(Java20Parser.EnumDeclarationContext,0) + + + def recordDeclaration(self): + return self.getTypedRuleContext(Java20Parser.RecordDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassDeclaration" ): + return visitor.visitClassDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classDeclaration(self): + + localctx = Java20Parser.ClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_classDeclaration) + try: + self.state = 918 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,61,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 915 + self.normalClassDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 916 + self.enumDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 917 + self.recordDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CLASS(self): + return self.getToken(Java20Parser.CLASS, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext,0) + + + def classExtends(self): + return self.getTypedRuleContext(Java20Parser.ClassExtendsContext,0) + + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext,0) + + + def classPermits(self): + return self.getTypedRuleContext(Java20Parser.ClassPermitsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_normalClassDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalClassDeclaration" ): + return visitor.visitNormalClassDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def normalClassDeclaration(self): + + localctx = Java20Parser.NormalClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_normalClassDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 923 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 920 + self.classModifier() + self.state = 925 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 926 + self.match(Java20Parser.CLASS) + self.state = 927 + self.typeIdentifier() + self.state = 929 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 928 + self.typeParameters() + + + self.state = 932 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 931 + self.classExtends() + + + self.state = 935 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 934 + self.classImplements() + + + self.state = 938 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==7: + self.state = 937 + self.classPermits() + + + self.state = 940 + self.classBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassModifier" ): + return visitor.visitClassModifier(self) + else: + return visitor.visitChildren(self) + + + + + def classModifier(self): + + localctx = Java20Parser.ClassModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_classModifier) + try: + self.state = 952 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 942 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 943 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 944 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 945 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 946 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 947 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 948 + self.match(Java20Parser.FINAL) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 8) + self.state = 949 + self.match(Java20Parser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 9) + self.state = 950 + self.match(Java20Parser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 951 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def typeParameterList(self): + return self.getTypedRuleContext(Java20Parser.TypeParameterListContext,0) + + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameters + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameters" ): + return visitor.visitTypeParameters(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameters(self): + + localctx = Java20Parser.TypeParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_typeParameters) + try: + self.enterOuterAlt(localctx, 1) + self.state = 954 + self.match(Java20Parser.LT) + self.state = 955 + self.typeParameterList() + self.state = 956 + self.match(Java20Parser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_typeParameterList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeParameterList" ): + return visitor.visitTypeParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def typeParameterList(self): + + localctx = Java20Parser.TypeParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_typeParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 958 + self.typeParameter() + self.state = 963 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 959 + self.match(Java20Parser.COMMA) + self.state = 960 + self.typeParameter() + self.state = 965 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classExtends + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassExtends" ): + return visitor.visitClassExtends(self) + else: + return visitor.visitChildren(self) + + + + + def classExtends(self): + + localctx = Java20Parser.ClassExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_classExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 966 + self.match(Java20Parser.EXTENDS) + self.state = 967 + self.classType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassImplementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IMPLEMENTS(self): + return self.getToken(Java20Parser.IMPLEMENTS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classImplements + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassImplements" ): + return visitor.visitClassImplements(self) + else: + return visitor.visitChildren(self) + + + + + def classImplements(self): + + localctx = Java20Parser.ClassImplementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_classImplements) + try: + self.enterOuterAlt(localctx, 1) + self.state = 969 + self.match(Java20Parser.IMPLEMENTS) + self.state = 970 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def interfaceType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceTypeContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceTypeList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceTypeList" ): + return visitor.visitInterfaceTypeList(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceTypeList(self): + + localctx = Java20Parser.InterfaceTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_interfaceTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 972 + self.interfaceType() + self.state = 977 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 973 + self.match(Java20Parser.COMMA) + self.state = 974 + self.interfaceType() + self.state = 979 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassPermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_classPermits + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassPermits" ): + return visitor.visitClassPermits(self) + else: + return visitor.visitChildren(self) + + + + + def classPermits(self): + + localctx = Java20Parser.ClassPermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_classPermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 980 + self.match(Java20Parser.PERMITS) + self.state = 981 + self.typeName() + self.state = 986 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 982 + self.match(Java20Parser.COMMA) + self.state = 983 + self.typeName() + self.state = 988 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def classBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_classBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassBody" ): + return visitor.visitClassBody(self) + else: + return visitor.visitChildren(self) + + + + + def classBody(self): + + localctx = Java20Parser.ClassBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_classBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 989 + self.match(Java20Parser.LBRACE) + self.state = 993 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130203873298) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 990 + self.classBodyDeclaration() + self.state = 995 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 996 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classMemberDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassMemberDeclarationContext,0) + + + def instanceInitializer(self): + return self.getTypedRuleContext(Java20Parser.InstanceInitializerContext,0) + + + def staticInitializer(self): + return self.getTypedRuleContext(Java20Parser.StaticInitializerContext,0) + + + def constructorDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstructorDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classBodyDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassBodyDeclaration" ): + return visitor.visitClassBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classBodyDeclaration(self): + + localctx = Java20Parser.ClassBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_classBodyDeclaration) + try: + self.state = 1002 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,72,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 998 + self.classMemberDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 999 + self.instanceInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1000 + self.staticInitializer() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1001 + self.constructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def fieldDeclaration(self): + return self.getTypedRuleContext(Java20Parser.FieldDeclarationContext,0) + + + def methodDeclaration(self): + return self.getTypedRuleContext(Java20Parser.MethodDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classMemberDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassMemberDeclaration" ): + return visitor.visitClassMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classMemberDeclaration(self): + + localctx = Java20Parser.ClassMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_classMemberDeclaration) + try: + self.state = 1009 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,73,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1004 + self.fieldDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1005 + self.methodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1006 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1007 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1008 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def fieldModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.FieldModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.FieldModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_fieldDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldDeclaration" ): + return visitor.visitFieldDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def fieldDeclaration(self): + + localctx = Java20Parser.FieldDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_fieldDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1014 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251802230882305) != 0): + self.state = 1011 + self.fieldModifier() + self.state = 1016 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1017 + self.unannType() + self.state = 1018 + self.variableDeclaratorList() + self.state = 1019 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def TRANSIENT(self): + return self.getToken(Java20Parser.TRANSIENT, 0) + + def VOLATILE(self): + return self.getToken(Java20Parser.VOLATILE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_fieldModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldModifier" ): + return visitor.visitFieldModifier(self) + else: + return visitor.visitChildren(self) + + + + + def fieldModifier(self): + + localctx = Java20Parser.FieldModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_fieldModifier) + try: + self.state = 1029 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1021 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1022 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1023 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1024 + self.match(Java20Parser.PRIVATE) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 5) + self.state = 1025 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 6) + self.state = 1026 + self.match(Java20Parser.FINAL) + pass + elif token in [63]: + self.enterOuterAlt(localctx, 7) + self.state = 1027 + self.match(Java20Parser.TRANSIENT) + pass + elif token in [66]: + self.enterOuterAlt(localctx, 8) + self.state = 1028 + self.match(Java20Parser.VOLATILE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclarator(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableDeclaratorContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclaratorList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclaratorList" ): + return visitor.visitVariableDeclaratorList(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclaratorList(self): + + localctx = Java20Parser.VariableDeclaratorListContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_variableDeclaratorList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1031 + self.variableDeclarator() + self.state = 1036 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,76,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1032 + self.match(Java20Parser.COMMA) + self.state = 1033 + self.variableDeclarator() + self.state = 1038 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,76,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext,0) + + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def variableInitializer(self): + return self.getTypedRuleContext(Java20Parser.VariableInitializerContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclarator" ): + return visitor.visitVariableDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclarator(self): + + localctx = Java20Parser.VariableDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 130, self.RULE_variableDeclarator) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1039 + self.variableDeclaratorId() + self.state = 1042 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,77,self._ctx) + if la_ == 1: + self.state = 1040 + self.match(Java20Parser.ASSIGN) + self.state = 1041 + self.variableInitializer() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclaratorIdContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableDeclaratorId + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableDeclaratorId" ): + return visitor.visitVariableDeclaratorId(self) + else: + return visitor.visitChildren(self) + + + + + def variableDeclaratorId(self): + + localctx = Java20Parser.VariableDeclaratorIdContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_variableDeclaratorId) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1044 + self.identifier() + self.state = 1046 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,78,self._ctx) + if la_ == 1: + self.state = 1045 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def arrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayInitializerContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableInitializer" ): + return visitor.visitVariableInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def variableInitializer(self): + + localctx = Java20Parser.VariableInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_variableInitializer) + try: + self.state = 1050 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1048 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 1049 + self.arrayInitializer() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannPrimitiveType(self): + return self.getTypedRuleContext(Java20Parser.UnannPrimitiveTypeContext,0) + + + def unannReferenceType(self): + return self.getTypedRuleContext(Java20Parser.UnannReferenceTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannType" ): + return visitor.visitUnannType(self) + else: + return visitor.visitChildren(self) + + + + + def unannType(self): + + localctx = Java20Parser.UnannTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_unannType) + try: + self.state = 1054 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,80,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1052 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1053 + self.unannReferenceType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannPrimitiveTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_unannPrimitiveType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannPrimitiveType" ): + return visitor.visitUnannPrimitiveType(self) + else: + return visitor.visitChildren(self) + + + + + def unannPrimitiveType(self): + + localctx = Java20Parser.UnannPrimitiveTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_unannPrimitiveType) + try: + self.state = 1058 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 1) + self.state = 1056 + self.numericType() + pass + elif token in [20]: + self.enterOuterAlt(localctx, 2) + self.state = 1057 + self.match(Java20Parser.BOOLEAN) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannReferenceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext,0) + + + def unannTypeVariable(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeVariableContext,0) + + + def unannArrayType(self): + return self.getTypedRuleContext(Java20Parser.UnannArrayTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannReferenceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannReferenceType" ): + return visitor.visitUnannReferenceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannReferenceType(self): + + localctx = Java20Parser.UnannReferenceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_unannReferenceType) + try: + self.state = 1063 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,82,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1060 + self.unannClassOrInterfaceType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1061 + self.unannTypeVariable() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1062 + self.unannArrayType() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannClassOrInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def uCOIT(self): + return self.getTypedRuleContext(Java20Parser.UCOITContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannClassOrInterfaceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannClassOrInterfaceType" ): + return visitor.visitUnannClassOrInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannClassOrInterfaceType(self): + + localctx = Java20Parser.UnannClassOrInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_unannClassOrInterfaceType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1073 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,84,self._ctx) + if la_ == 1: + self.state = 1065 + self.packageName() + self.state = 1066 + self.match(Java20Parser.DOT) + self.state = 1070 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1067 + self.annotation() + self.state = 1072 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1075 + self.typeIdentifier() + self.state = 1077 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1076 + self.typeArguments() + + + self.state = 1080 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,86,self._ctx) + if la_ == 1: + self.state = 1079 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UCOITContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def uCOIT(self): + return self.getTypedRuleContext(Java20Parser.UCOITContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_uCOIT + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUCOIT" ): + return visitor.visitUCOIT(self) + else: + return visitor.visitChildren(self) + + + + + def uCOIT(self): + + localctx = Java20Parser.UCOITContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_uCOIT) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1082 + self.match(Java20Parser.DOT) + self.state = 1086 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1083 + self.annotation() + self.state = 1088 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1089 + self.typeIdentifier() + self.state = 1091 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1090 + self.typeArguments() + + + self.state = 1094 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,89,self._ctx) + if la_ == 1: + self.state = 1093 + self.uCOIT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannClassTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def packageName(self): + return self.getTypedRuleContext(Java20Parser.PackageNameContext,0) + + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannClassType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannClassType" ): + return visitor.visitUnannClassType(self) + else: + return visitor.visitChildren(self) + + + + + def unannClassType(self): + + localctx = Java20Parser.UnannClassTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_unannClassType) + self._la = 0 # Token type + try: + self.state = 1115 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,94,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1096 + self.typeIdentifier() + self.state = 1098 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1097 + self.typeArguments() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1102 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,91,self._ctx) + if la_ == 1: + self.state = 1100 + self.packageName() + pass + + elif la_ == 2: + self.state = 1101 + self.unannClassOrInterfaceType() + pass + + + self.state = 1104 + self.match(Java20Parser.DOT) + self.state = 1108 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1105 + self.annotation() + self.state = 1110 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1111 + self.typeIdentifier() + self.state = 1113 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1112 + self.typeArguments() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannInterfaceTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannInterfaceType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannInterfaceType" ): + return visitor.visitUnannInterfaceType(self) + else: + return visitor.visitChildren(self) + + + + + def unannInterfaceType(self): + + localctx = Java20Parser.UnannInterfaceTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_unannInterfaceType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1117 + self.unannClassType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannTypeVariableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannTypeVariable + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannTypeVariable" ): + return visitor.visitUnannTypeVariable(self) + else: + return visitor.visitChildren(self) + + + + + def unannTypeVariable(self): + + localctx = Java20Parser.UnannTypeVariableContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_unannTypeVariable) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1119 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnannArrayTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def unannPrimitiveType(self): + return self.getTypedRuleContext(Java20Parser.UnannPrimitiveTypeContext,0) + + + def unannClassOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassOrInterfaceTypeContext,0) + + + def unannTypeVariable(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeVariableContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unannArrayType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnannArrayType" ): + return visitor.visitUnannArrayType(self) + else: + return visitor.visitChildren(self) + + + + + def unannArrayType(self): + + localctx = Java20Parser.UnannArrayTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_unannArrayType) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1124 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,95,self._ctx) + if la_ == 1: + self.state = 1121 + self.unannPrimitiveType() + pass + + elif la_ == 2: + self.state = 1122 + self.unannClassOrInterfaceType() + pass + + elif la_ == 3: + self.state = 1123 + self.unannTypeVariable() + pass + + + self.state = 1126 + self.dims() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(Java20Parser.MethodHeaderContext,0) + + + def methodBody(self): + return self.getTypedRuleContext(Java20Parser.MethodBodyContext,0) + + + def methodModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.MethodModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.MethodModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_methodDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodDeclaration" ): + return visitor.visitMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def methodDeclaration(self): + + localctx = Java20Parser.MethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_methodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1131 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 692569214556569600) != 0) or _la==86: + self.state = 1128 + self.methodModifier() + self.state = 1133 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1134 + self.methodHeader() + self.state = 1135 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def SYNCHRONIZED(self): + return self.getToken(Java20Parser.SYNCHRONIZED, 0) + + def NATIVE(self): + return self.getToken(Java20Parser.NATIVE, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodModifier" ): + return visitor.visitMethodModifier(self) + else: + return visitor.visitChildren(self) + + + + + def methodModifier(self): + + localctx = Java20Parser.MethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_methodModifier) + try: + self.state = 1147 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1137 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1138 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1139 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1140 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1141 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1142 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 7) + self.state = 1143 + self.match(Java20Parser.FINAL) + pass + elif token in [59]: + self.enterOuterAlt(localctx, 8) + self.state = 1144 + self.match(Java20Parser.SYNCHRONIZED) + pass + elif token in [47]: + self.enterOuterAlt(localctx, 9) + self.state = 1145 + self.match(Java20Parser.NATIVE) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 10) + self.state = 1146 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def result(self): + return self.getTypedRuleContext(Java20Parser.ResultContext,0) + + + def methodDeclarator(self): + return self.getTypedRuleContext(Java20Parser.MethodDeclaratorContext,0) + + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext,0) + + + def throwsT(self): + return self.getTypedRuleContext(Java20Parser.ThrowsTContext,0) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_methodHeader + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodHeader" ): + return visitor.visitMethodHeader(self) + else: + return visitor.visitChildren(self) + + + + + def methodHeader(self): + + localctx = Java20Parser.MethodHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_methodHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1156 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1149 + self.typeParameters() + self.state = 1153 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1150 + self.annotation() + self.state = 1155 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 1158 + self.result() + self.state = 1159 + self.methodDeclarator() + self.state = 1161 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==62: + self.state = 1160 + self.throwsT() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResultContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def VOID(self): + return self.getToken(Java20Parser.VOID, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_result + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResult" ): + return visitor.visitResult(self) + else: + return visitor.visitChildren(self) + + + + + def result(self): + + localctx = Java20Parser.ResultContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_result) + try: + self.state = 1165 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 25, 31, 37, 44, 46, 54, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 1163 + self.unannType() + pass + elif token in [65]: + self.enterOuterAlt(localctx, 2) + self.state = 1164 + self.match(Java20Parser.VOID) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def receiverParameter(self): + return self.getTypedRuleContext(Java20Parser.ReceiverParameterContext,0) + + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(Java20Parser.FormalParameterListContext,0) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_methodDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodDeclarator" ): + return visitor.visitMethodDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def methodDeclarator(self): + + localctx = Java20Parser.MethodDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_methodDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1167 + self.identifier() + self.state = 1168 + self.match(Java20Parser.LPAREN) + self.state = 1172 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,102,self._ctx) + if la_ == 1: + self.state = 1169 + self.receiverParameter() + self.state = 1170 + self.match(Java20Parser.COMMA) + + + self.state = 1175 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424938990) != 0) or _la==86 or _la==123: + self.state = 1174 + self.formalParameterList() + + + self.state = 1177 + self.match(Java20Parser.RPAREN) + self.state = 1179 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==80 or _la==86: + self.state = 1178 + self.dims() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReceiverParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_receiverParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReceiverParameter" ): + return visitor.visitReceiverParameter(self) + else: + return visitor.visitChildren(self) + + + + + def receiverParameter(self): + + localctx = Java20Parser.ReceiverParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_receiverParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1184 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1181 + self.annotation() + self.state = 1186 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1187 + self.unannType() + self.state = 1191 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 0) or _la==123: + self.state = 1188 + self.identifier() + self.state = 1189 + self.match(Java20Parser.DOT) + + + self.state = 1193 + self.match(Java20Parser.THIS) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def formalParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.FormalParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.FormalParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_formalParameterList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFormalParameterList" ): + return visitor.visitFormalParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def formalParameterList(self): + + localctx = Java20Parser.FormalParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_formalParameterList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1195 + self.formalParameter() + self.state = 1200 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1196 + self.match(Java20Parser.COMMA) + self.state = 1197 + self.formalParameter() + self.state = 1202 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext,i) + + + def variableArityParameter(self): + return self.getTypedRuleContext(Java20Parser.VariableArityParameterContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_formalParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFormalParameter" ): + return visitor.visitFormalParameter(self) + else: + return visitor.visitChildren(self) + + + + + def formalParameter(self): + + localctx = Java20Parser.FormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_formalParameter) + self._la = 0 # Token type + try: + self.state = 1213 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,109,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1206 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1203 + self.variableModifier() + self.state = 1208 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1209 + self.unannType() + self.state = 1210 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1212 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableArityParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def ELLIPSIS(self): + return self.getToken(Java20Parser.ELLIPSIS, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext,i) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableArityParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableArityParameter" ): + return visitor.visitVariableArityParameter(self) + else: + return visitor.visitChildren(self) + + + + + def variableArityParameter(self): + + localctx = Java20Parser.VariableArityParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_variableArityParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1218 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1215 + self.variableModifier() + self.state = 1220 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1221 + self.unannType() + self.state = 1225 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1222 + self.annotation() + self.state = 1227 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1228 + self.match(Java20Parser.ELLIPSIS) + self.state = 1229 + self.identifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_variableModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableModifier" ): + return visitor.visitVariableModifier(self) + else: + return visitor.visitChildren(self) + + + + + def variableModifier(self): + + localctx = Java20Parser.VariableModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 172, self.RULE_variableModifier) + try: + self.state = 1233 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1231 + self.annotation() + pass + elif token in [35]: + self.enterOuterAlt(localctx, 2) + self.state = 1232 + self.match(Java20Parser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ThrowsTContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROWS(self): + return self.getToken(Java20Parser.THROWS, 0) + + def exceptionTypeList(self): + return self.getTypedRuleContext(Java20Parser.ExceptionTypeListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_throwsT + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitThrowsT" ): + return visitor.visitThrowsT(self) + else: + return visitor.visitChildren(self) + + + + + def throwsT(self): + + localctx = Java20Parser.ThrowsTContext(self, self._ctx, self.state) + self.enterRule(localctx, 174, self.RULE_throwsT) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1235 + self.match(Java20Parser.THROWS) + self.state = 1236 + self.exceptionTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionTypeListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def exceptionType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExceptionTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.ExceptionTypeContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_exceptionTypeList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionTypeList" ): + return visitor.visitExceptionTypeList(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionTypeList(self): + + localctx = Java20Parser.ExceptionTypeListContext(self, self._ctx, self.state) + self.enterRule(localctx, 176, self.RULE_exceptionTypeList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1238 + self.exceptionType() + self.state = 1243 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1239 + self.match(Java20Parser.COMMA) + self.state = 1240 + self.exceptionType() + self.state = 1245 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExceptionTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def typeVariable(self): + return self.getTypedRuleContext(Java20Parser.TypeVariableContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_exceptionType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExceptionType" ): + return visitor.visitExceptionType(self) + else: + return visitor.visitChildren(self) + + + + + def exceptionType(self): + + localctx = Java20Parser.ExceptionTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 178, self.RULE_exceptionType) + try: + self.state = 1248 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,114,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1246 + self.classType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1247 + self.typeVariable() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodBody" ): + return visitor.visitMethodBody(self) + else: + return visitor.visitChildren(self) + + + + + def methodBody(self): + + localctx = Java20Parser.MethodBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 180, self.RULE_methodBody) + try: + self.state = 1252 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [78]: + self.enterOuterAlt(localctx, 1) + self.state = 1250 + self.block() + pass + elif token in [82]: + self.enterOuterAlt(localctx, 2) + self.state = 1251 + self.match(Java20Parser.SEMI) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InstanceInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_instanceInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInstanceInitializer" ): + return visitor.visitInstanceInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def instanceInitializer(self): + + localctx = Java20Parser.InstanceInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 182, self.RULE_instanceInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1254 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StaticInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_staticInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStaticInitializer" ): + return visitor.visitStaticInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def staticInitializer(self): + + localctx = Java20Parser.StaticInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 184, self.RULE_staticInitializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1256 + self.match(Java20Parser.STATIC) + self.state = 1257 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def constructorDeclarator(self): + return self.getTypedRuleContext(Java20Parser.ConstructorDeclaratorContext,0) + + + def constructorBody(self): + return self.getTypedRuleContext(Java20Parser.ConstructorBodyContext,0) + + + def constructorModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstructorModifierContext,i) + + + def throwsT(self): + return self.getTypedRuleContext(Java20Parser.ThrowsTContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_constructorDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorDeclaration" ): + return visitor.visitConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def constructorDeclaration(self): + + localctx = Java20Parser.ConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 186, self.RULE_constructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1262 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1259 + self.constructorModifier() + self.state = 1264 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1265 + self.constructorDeclarator() + self.state = 1267 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==62: + self.state = 1266 + self.throwsT() + + + self.state = 1269 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constructorModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorModifier" ): + return visitor.visitConstructorModifier(self) + else: + return visitor.visitChildren(self) + + + + + def constructorModifier(self): + + localctx = Java20Parser.ConstructorModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 188, self.RULE_constructorModifier) + try: + self.state = 1275 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1271 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1272 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1273 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1274 + self.match(Java20Parser.PRIVATE) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorDeclaratorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(Java20Parser.SimpleTypeNameContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext,0) + + + def receiverParameter(self): + return self.getTypedRuleContext(Java20Parser.ReceiverParameterContext,0) + + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(Java20Parser.FormalParameterListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_constructorDeclarator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorDeclarator" ): + return visitor.visitConstructorDeclarator(self) + else: + return visitor.visitChildren(self) + + + + + def constructorDeclarator(self): + + localctx = Java20Parser.ConstructorDeclaratorContext(self, self._ctx, self.state) + self.enterRule(localctx, 190, self.RULE_constructorDeclarator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1278 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1277 + self.typeParameters() + + + self.state = 1280 + self.simpleTypeName() + self.state = 1281 + self.match(Java20Parser.LPAREN) + self.state = 1285 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,120,self._ctx) + if la_ == 1: + self.state = 1282 + self.receiverParameter() + self.state = 1283 + self.match(Java20Parser.COMMA) + + + self.state = 1288 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424938990) != 0) or _la==86 or _la==123: + self.state = 1287 + self.formalParameterList() + + + self.state = 1290 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SimpleTypeNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_simpleTypeName + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSimpleTypeName" ): + return visitor.visitSimpleTypeName(self) + else: + return visitor.visitChildren(self) + + + + + def simpleTypeName(self): + + localctx = Java20Parser.SimpleTypeNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 192, self.RULE_simpleTypeName) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1292 + self.typeIdentifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstructorBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def explicitConstructorInvocation(self): + return self.getTypedRuleContext(Java20Parser.ExplicitConstructorInvocationContext,0) + + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_constructorBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstructorBody" ): + return visitor.visitConstructorBody(self) + else: + return visitor.visitChildren(self) + + + + + def constructorBody(self): + + localctx = Java20Parser.ConstructorBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 194, self.RULE_constructorBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1294 + self.match(Java20Parser.LBRACE) + self.state = 1296 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,122,self._ctx) + if la_ == 1: + self.state = 1295 + self.explicitConstructorInvocation() + + + self.state = 1299 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420626926) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1298 + self.blockStatements() + + + self.state = 1301 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExplicitConstructorInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_explicitConstructorInvocation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExplicitConstructorInvocation" ): + return visitor.visitExplicitConstructorInvocation(self) + else: + return visitor.visitChildren(self) + + + + + def explicitConstructorInvocation(self): + + localctx = Java20Parser.ExplicitConstructorInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 196, self.RULE_explicitConstructorInvocation) + self._la = 0 # Token type + try: + self.state = 1329 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,129,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1304 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1303 + self.typeArguments() + + + self.state = 1306 + _la = self._input.LA(1) + if not(_la==57 or _la==60): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 1307 + self.match(Java20Parser.LPAREN) + self.state = 1309 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1308 + self.argumentList() + + + self.state = 1311 + self.match(Java20Parser.RPAREN) + self.state = 1312 + self.match(Java20Parser.SEMI) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1315 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,126,self._ctx) + if la_ == 1: + self.state = 1313 + self.expressionName() + pass + + elif la_ == 2: + self.state = 1314 + self.primary() + pass + + + self.state = 1317 + self.match(Java20Parser.DOT) + self.state = 1319 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1318 + self.typeArguments() + + + self.state = 1321 + self.match(Java20Parser.SUPER) + self.state = 1322 + self.match(Java20Parser.LPAREN) + self.state = 1324 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1323 + self.argumentList() + + + self.state = 1326 + self.match(Java20Parser.RPAREN) + self.state = 1327 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ENUM(self): + return self.getToken(Java20Parser.ENUM, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def enumBody(self): + return self.getTypedRuleContext(Java20Parser.EnumBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext,i) + + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enumDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumDeclaration" ): + return visitor.visitEnumDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def enumDeclaration(self): + + localctx = Java20Parser.EnumDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 198, self.RULE_enumDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1334 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 1331 + self.classModifier() + self.state = 1336 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1337 + self.match(Java20Parser.ENUM) + self.state = 1338 + self.typeIdentifier() + self.state = 1340 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 1339 + self.classImplements() + + + self.state = 1342 + self.enumBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def enumConstantList(self): + return self.getTypedRuleContext(Java20Parser.EnumConstantListContext,0) + + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def enumBodyDeclarations(self): + return self.getTypedRuleContext(Java20Parser.EnumBodyDeclarationsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enumBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumBody" ): + return visitor.visitEnumBody(self) + else: + return visitor.visitChildren(self) + + + + + def enumBody(self): + + localctx = Java20Parser.EnumBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 200, self.RULE_enumBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1344 + self.match(Java20Parser.LBRACE) + self.state = 1346 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 0) or _la==86 or _la==123: + self.state = 1345 + self.enumConstantList() + + + self.state = 1349 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1348 + self.match(Java20Parser.COMMA) + + + self.state = 1352 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==82: + self.state = 1351 + self.enumBodyDeclarations() + + + self.state = 1354 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def enumConstant(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.EnumConstantContext) + else: + return self.getTypedRuleContext(Java20Parser.EnumConstantContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstantList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstantList" ): + return visitor.visitEnumConstantList(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstantList(self): + + localctx = Java20Parser.EnumConstantListContext(self, self._ctx, self.state) + self.enterRule(localctx, 202, self.RULE_enumConstantList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1356 + self.enumConstant() + self.state = 1361 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,135,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1357 + self.match(Java20Parser.COMMA) + self.state = 1358 + self.enumConstant() + self.state = 1363 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,135,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def enumConstantModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.EnumConstantModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.EnumConstantModifierContext,i) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstant + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstant" ): + return visitor.visitEnumConstant(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstant(self): + + localctx = Java20Parser.EnumConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 204, self.RULE_enumConstant) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1367 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1364 + self.enumConstantModifier() + self.state = 1369 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1370 + self.identifier() + self.state = 1376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==76: + self.state = 1371 + self.match(Java20Parser.LPAREN) + self.state = 1373 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1372 + self.argumentList() + + + self.state = 1375 + self.match(Java20Parser.RPAREN) + + + self.state = 1379 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==78: + self.state = 1378 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enumConstantModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumConstantModifier" ): + return visitor.visitEnumConstantModifier(self) + else: + return visitor.visitChildren(self) + + + + + def enumConstantModifier(self): + + localctx = Java20Parser.EnumConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 206, self.RULE_enumConstantModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1381 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnumBodyDeclarationsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def classBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_enumBodyDeclarations + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnumBodyDeclarations" ): + return visitor.visitEnumBodyDeclarations(self) + else: + return visitor.visitChildren(self) + + + + + def enumBodyDeclarations(self): + + localctx = Java20Parser.EnumBodyDeclarationsContext(self, self._ctx, self.state) + self.enterRule(localctx, 208, self.RULE_enumBodyDeclarations) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1383 + self.match(Java20Parser.SEMI) + self.state = 1387 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130203873298) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1384 + self.classBodyDeclaration() + self.state = 1389 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def RECORD(self): + return self.getToken(Java20Parser.RECORD, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def recordHeader(self): + return self.getTypedRuleContext(Java20Parser.RecordHeaderContext,0) + + + def recordBody(self): + return self.getTypedRuleContext(Java20Parser.RecordBodyContext,0) + + + def classModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext,0) + + + def classImplements(self): + return self.getTypedRuleContext(Java20Parser.ClassImplementsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordDeclaration" ): + return visitor.visitRecordDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def recordDeclaration(self): + + localctx = Java20Parser.RecordDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 210, self.RULE_recordDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1393 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967724764792840) != 0) or _la==86: + self.state = 1390 + self.classModifier() + self.state = 1395 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1396 + self.match(Java20Parser.RECORD) + self.state = 1397 + self.typeIdentifier() + self.state = 1399 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1398 + self.typeParameters() + + + self.state = 1401 + self.recordHeader() + self.state = 1403 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==41: + self.state = 1402 + self.classImplements() + + + self.state = 1405 + self.recordBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordHeaderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def recordComponentList(self): + return self.getTypedRuleContext(Java20Parser.RecordComponentListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordHeader + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordHeader" ): + return visitor.visitRecordHeader(self) + else: + return visitor.visitChildren(self) + + + + + def recordHeader(self): + + localctx = Java20Parser.RecordHeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 212, self.RULE_recordHeader) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1407 + self.match(Java20Parser.LPAREN) + self.state = 1409 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102499065200622) != 0) or _la==86 or _la==123: + self.state = 1408 + self.recordComponentList() + + + self.state = 1411 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def recordComponent(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponentList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponentList" ): + return visitor.visitRecordComponentList(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponentList(self): + + localctx = Java20Parser.RecordComponentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 214, self.RULE_recordComponentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1413 + self.recordComponent() + self.state = 1418 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1414 + self.match(Java20Parser.COMMA) + self.state = 1415 + self.recordComponent() + self.state = 1420 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def recordComponentModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentModifierContext,i) + + + def variableArityRecordComponent(self): + return self.getTypedRuleContext(Java20Parser.VariableArityRecordComponentContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponent + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponent" ): + return visitor.visitRecordComponent(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponent(self): + + localctx = Java20Parser.RecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 216, self.RULE_recordComponent) + self._la = 0 # Token type + try: + self.state = 1431 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,147,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1424 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1421 + self.recordComponentModifier() + self.state = 1426 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1427 + self.unannType() + self.state = 1428 + self.identifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1430 + self.variableArityRecordComponent() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableArityRecordComponentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def ELLIPSIS(self): + return self.getToken(Java20Parser.ELLIPSIS, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def recordComponentModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordComponentModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordComponentModifierContext,i) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableArityRecordComponent + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableArityRecordComponent" ): + return visitor.visitVariableArityRecordComponent(self) + else: + return visitor.visitChildren(self) + + + + + def variableArityRecordComponent(self): + + localctx = Java20Parser.VariableArityRecordComponentContext(self, self._ctx, self.state) + self.enterRule(localctx, 218, self.RULE_variableArityRecordComponent) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1436 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1433 + self.recordComponentModifier() + self.state = 1438 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1439 + self.unannType() + self.state = 1443 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 1440 + self.annotation() + self.state = 1445 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1446 + self.match(Java20Parser.ELLIPSIS) + self.state = 1447 + self.identifier() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordComponentModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordComponentModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordComponentModifier" ): + return visitor.visitRecordComponentModifier(self) + else: + return visitor.visitChildren(self) + + + + + def recordComponentModifier(self): + + localctx = Java20Parser.RecordComponentModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 220, self.RULE_recordComponentModifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1449 + self.annotation() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def recordBodyDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.RecordBodyDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.RecordBodyDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordBody" ): + return visitor.visitRecordBody(self) + else: + return visitor.visitChildren(self) + + + + + def recordBody(self): + + localctx = Java20Parser.RecordBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 222, self.RULE_recordBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1451 + self.match(Java20Parser.LBRACE) + self.state = 1455 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -8512665130203873298) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187502595) != 0): + self.state = 1452 + self.recordBodyDeclaration() + self.state = 1457 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1458 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class RecordBodyDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classBodyDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyDeclarationContext,0) + + + def compactConstructorDeclaration(self): + return self.getTypedRuleContext(Java20Parser.CompactConstructorDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_recordBodyDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRecordBodyDeclaration" ): + return visitor.visitRecordBodyDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def recordBodyDeclaration(self): + + localctx = Java20Parser.RecordBodyDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 224, self.RULE_recordBodyDeclaration) + try: + self.state = 1462 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,151,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1460 + self.classBodyDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1461 + self.compactConstructorDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CompactConstructorDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def simpleTypeName(self): + return self.getTypedRuleContext(Java20Parser.SimpleTypeNameContext,0) + + + def constructorBody(self): + return self.getTypedRuleContext(Java20Parser.ConstructorBodyContext,0) + + + def constructorModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstructorModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstructorModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_compactConstructorDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCompactConstructorDeclaration" ): + return visitor.visitCompactConstructorDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def compactConstructorDeclaration(self): + + localctx = Java20Parser.CompactConstructorDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 226, self.RULE_compactConstructorDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1467 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 68719476743) != 0): + self.state = 1464 + self.constructorModifier() + self.state = 1469 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1470 + self.simpleTypeName() + self.state = 1471 + self.constructorBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalInterfaceDeclarationContext,0) + + + def annotationInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceDeclaration" ): + return visitor.visitInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceDeclaration(self): + + localctx = Java20Parser.InterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 228, self.RULE_interfaceDeclaration) + try: + self.state = 1475 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,153,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1473 + self.normalInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1474 + self.annotationInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INTERFACE(self): + return self.getToken(Java20Parser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def interfaceBody(self): + return self.getTypedRuleContext(Java20Parser.InterfaceBodyContext,0) + + + def interfaceModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceModifierContext,i) + + + def typeParameters(self): + return self.getTypedRuleContext(Java20Parser.TypeParametersContext,0) + + + def interfaceExtends(self): + return self.getTypedRuleContext(Java20Parser.InterfaceExtendsContext,0) + + + def interfacePermits(self): + return self.getTypedRuleContext(Java20Parser.InterfacePermitsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_normalInterfaceDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalInterfaceDeclaration" ): + return visitor.visitNormalInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def normalInterfaceDeclaration(self): + + localctx = Java20Parser.NormalInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 230, self.RULE_normalInterfaceDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1480 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 115967690405054472) != 0) or _la==86: + self.state = 1477 + self.interfaceModifier() + self.state = 1482 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1483 + self.match(Java20Parser.INTERFACE) + self.state = 1484 + self.typeIdentifier() + self.state = 1486 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 1485 + self.typeParameters() + + + self.state = 1489 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==34: + self.state = 1488 + self.interfaceExtends() + + + self.state = 1492 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==7: + self.state = 1491 + self.interfacePermits() + + + self.state = 1494 + self.interfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PROTECTED(self): + return self.getToken(Java20Parser.PROTECTED, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def SEALED(self): + return self.getToken(Java20Parser.SEALED, 0) + + def NONSEALED(self): + return self.getToken(Java20Parser.NONSEALED, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceModifier" ): + return visitor.visitInterfaceModifier(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceModifier(self): + + localctx = Java20Parser.InterfaceModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 232, self.RULE_interfaceModifier) + try: + self.state = 1505 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1496 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1497 + self.match(Java20Parser.PUBLIC) + pass + elif token in [51]: + self.enterOuterAlt(localctx, 3) + self.state = 1498 + self.match(Java20Parser.PROTECTED) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 4) + self.state = 1499 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 5) + self.state = 1500 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1501 + self.match(Java20Parser.STATIC) + pass + elif token in [11]: + self.enterOuterAlt(localctx, 7) + self.state = 1502 + self.match(Java20Parser.SEALED) + pass + elif token in [3]: + self.enterOuterAlt(localctx, 8) + self.state = 1503 + self.match(Java20Parser.NONSEALED) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 9) + self.state = 1504 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceExtendsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EXTENDS(self): + return self.getToken(Java20Parser.EXTENDS, 0) + + def interfaceTypeList(self): + return self.getTypedRuleContext(Java20Parser.InterfaceTypeListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceExtends + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceExtends" ): + return visitor.visitInterfaceExtends(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceExtends(self): + + localctx = Java20Parser.InterfaceExtendsContext(self, self._ctx, self.state) + self.enterRule(localctx, 234, self.RULE_interfaceExtends) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1507 + self.match(Java20Parser.EXTENDS) + self.state = 1508 + self.interfaceTypeList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfacePermitsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def PERMITS(self): + return self.getToken(Java20Parser.PERMITS, 0) + + def typeName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.TypeNameContext) + else: + return self.getTypedRuleContext(Java20Parser.TypeNameContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_interfacePermits + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfacePermits" ): + return visitor.visitInterfacePermits(self) + else: + return visitor.visitChildren(self) + + + + + def interfacePermits(self): + + localctx = Java20Parser.InterfacePermitsContext(self, self._ctx, self.state) + self.enterRule(localctx, 236, self.RULE_interfacePermits) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1510 + self.match(Java20Parser.PERMITS) + self.state = 1511 + self.typeName() + self.state = 1516 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1512 + self.match(Java20Parser.COMMA) + self.state = 1513 + self.typeName() + self.state = 1518 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def interfaceMemberDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceMemberDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceBody" ): + return visitor.visitInterfaceBody(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceBody(self): + + localctx = Java20Parser.InterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 238, self.RULE_interfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1519 + self.match(Java20Parser.LBRACE) + self.state = 1523 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105417395994606) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230376187494401) != 0): + self.state = 1520 + self.interfaceMemberDeclaration() + self.state = 1525 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1526 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def constantDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstantDeclarationContext,0) + + + def interfaceMethodDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceMethodDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMemberDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMemberDeclaration" ): + return visitor.visitInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMemberDeclaration(self): + + localctx = Java20Parser.InterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 240, self.RULE_interfaceMemberDeclaration) + try: + self.state = 1533 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,161,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1528 + self.constantDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1529 + self.interfaceMethodDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1530 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1531 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1532 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def constantModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ConstantModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.ConstantModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_constantDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantDeclaration" ): + return visitor.visitConstantDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def constantDeclaration(self): + + localctx = Java20Parser.ConstantDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 242, self.RULE_constantDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1538 + self._errHandler.sync(self) + _la = self._input.LA(1) + while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 2251799814864897) != 0): + self.state = 1535 + self.constantModifier() + self.state = 1540 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1541 + self.unannType() + self.state = 1542 + self.variableDeclaratorList() + self.state = 1543 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def FINAL(self): + return self.getToken(Java20Parser.FINAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_constantModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantModifier" ): + return visitor.visitConstantModifier(self) + else: + return visitor.visitChildren(self) + + + + + def constantModifier(self): + + localctx = Java20Parser.ConstantModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 244, self.RULE_constantModifier) + try: + self.state = 1549 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1545 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1546 + self.match(Java20Parser.PUBLIC) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 3) + self.state = 1547 + self.match(Java20Parser.STATIC) + pass + elif token in [35]: + self.enterOuterAlt(localctx, 4) + self.state = 1548 + self.match(Java20Parser.FINAL) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodHeader(self): + return self.getTypedRuleContext(Java20Parser.MethodHeaderContext,0) + + + def methodBody(self): + return self.getTypedRuleContext(Java20Parser.MethodBodyContext,0) + + + def interfaceMethodModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceMethodModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceMethodModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMethodDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMethodDeclaration" ): + return visitor.visitInterfaceMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMethodDeclaration(self): + + localctx = Java20Parser.InterfaceMethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 246, self.RULE_interfaceMethodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1554 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 113715891128238080) != 0) or _la==86: + self.state = 1551 + self.interfaceMethodModifier() + self.state = 1556 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1557 + self.methodHeader() + self.state = 1558 + self.methodBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class InterfaceMethodModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def PRIVATE(self): + return self.getToken(Java20Parser.PRIVATE, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def STATIC(self): + return self.getToken(Java20Parser.STATIC, 0) + + def STRICTFP(self): + return self.getToken(Java20Parser.STRICTFP, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_interfaceMethodModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInterfaceMethodModifier" ): + return visitor.visitInterfaceMethodModifier(self) + else: + return visitor.visitChildren(self) + + + + + def interfaceMethodModifier(self): + + localctx = Java20Parser.InterfaceMethodModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 248, self.RULE_interfaceMethodModifier) + try: + self.state = 1567 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1560 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1561 + self.match(Java20Parser.PUBLIC) + pass + elif token in [50]: + self.enterOuterAlt(localctx, 3) + self.state = 1562 + self.match(Java20Parser.PRIVATE) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 4) + self.state = 1563 + self.match(Java20Parser.ABSTRACT) + pass + elif token in [29]: + self.enterOuterAlt(localctx, 5) + self.state = 1564 + self.match(Java20Parser.DEFAULT) + pass + elif token in [55]: + self.enterOuterAlt(localctx, 6) + self.state = 1565 + self.match(Java20Parser.STATIC) + pass + elif token in [56]: + self.enterOuterAlt(localctx, 7) + self.state = 1566 + self.match(Java20Parser.STRICTFP) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def INTERFACE(self): + return self.getToken(Java20Parser.INTERFACE, 0) + + def typeIdentifier(self): + return self.getTypedRuleContext(Java20Parser.TypeIdentifierContext,0) + + + def annotationInterfaceBody(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceBodyContext,0) + + + def interfaceModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.InterfaceModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.InterfaceModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceDeclaration" ): + return visitor.visitAnnotationInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 250, self.RULE_annotationInterfaceDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1572 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,166,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1569 + self.interfaceModifier() + self.state = 1574 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,166,self._ctx) + + self.state = 1575 + self.match(Java20Parser.AT) + self.state = 1576 + self.match(Java20Parser.INTERFACE) + self.state = 1577 + self.typeIdentifier() + self.state = 1578 + self.annotationInterfaceBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def annotationInterfaceMemberDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationInterfaceMemberDeclarationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceMemberDeclarationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceBody" ): + return visitor.visitAnnotationInterfaceBody(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceBody(self): + + localctx = Java20Parser.AnnotationInterfaceBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 252, self.RULE_annotationInterfaceBody) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1580 + self.match(Java20Parser.LBRACE) + self.state = 1584 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 134105416859123694) != 0) or ((((_la - 82)) & ~0x3f) == 0 and ((1 << (_la - 82)) & 2199023255569) != 0): + self.state = 1581 + self.annotationInterfaceMemberDeclaration() + self.state = 1586 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1587 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceMemberDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotationInterfaceElementDeclaration(self): + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceElementDeclarationContext,0) + + + def constantDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ConstantDeclarationContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext,0) + + + def interfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.InterfaceDeclarationContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceMemberDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceMemberDeclaration" ): + return visitor.visitAnnotationInterfaceMemberDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceMemberDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceMemberDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 254, self.RULE_annotationInterfaceMemberDeclaration) + try: + self.state = 1594 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,168,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1589 + self.annotationInterfaceElementDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1590 + self.constantDeclaration() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1591 + self.classDeclaration() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1592 + self.interfaceDeclaration() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1593 + self.match(Java20Parser.SEMI) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceElementDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def annotationInterfaceElementModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationInterfaceElementModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationInterfaceElementModifierContext,i) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def defaultValue(self): + return self.getTypedRuleContext(Java20Parser.DefaultValueContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceElementDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceElementDeclaration" ): + return visitor.visitAnnotationInterfaceElementDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceElementDeclaration(self): + + localctx = Java20Parser.AnnotationInterfaceElementDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 256, self.RULE_annotationInterfaceElementDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1599 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==18 or _la==52 or _la==86: + self.state = 1596 + self.annotationInterfaceElementModifier() + self.state = 1601 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1602 + self.unannType() + self.state = 1603 + self.identifier() + self.state = 1604 + self.match(Java20Parser.LPAREN) + self.state = 1605 + self.match(Java20Parser.RPAREN) + self.state = 1607 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==80 or _la==86: + self.state = 1606 + self.dims() + + + self.state = 1610 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==29: + self.state = 1609 + self.defaultValue() + + + self.state = 1612 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationInterfaceElementModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def PUBLIC(self): + return self.getToken(Java20Parser.PUBLIC, 0) + + def ABSTRACT(self): + return self.getToken(Java20Parser.ABSTRACT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_annotationInterfaceElementModifier + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotationInterfaceElementModifier" ): + return visitor.visitAnnotationInterfaceElementModifier(self) + else: + return visitor.visitChildren(self) + + + + + def annotationInterfaceElementModifier(self): + + localctx = Java20Parser.AnnotationInterfaceElementModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 258, self.RULE_annotationInterfaceElementModifier) + try: + self.state = 1617 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [86]: + self.enterOuterAlt(localctx, 1) + self.state = 1614 + self.annotation() + pass + elif token in [52]: + self.enterOuterAlt(localctx, 2) + self.state = 1615 + self.match(Java20Parser.PUBLIC) + pass + elif token in [18]: + self.enterOuterAlt(localctx, 3) + self.state = 1616 + self.match(Java20Parser.ABSTRACT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DefaultValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_defaultValue + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDefaultValue" ): + return visitor.visitDefaultValue(self) + else: + return visitor.visitChildren(self) + + + + + def defaultValue(self): + + localctx = Java20Parser.DefaultValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 260, self.RULE_defaultValue) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1619 + self.match(Java20Parser.DEFAULT) + self.state = 1620 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def normalAnnotation(self): + return self.getTypedRuleContext(Java20Parser.NormalAnnotationContext,0) + + + def markerAnnotation(self): + return self.getTypedRuleContext(Java20Parser.MarkerAnnotationContext,0) + + + def singleElementAnnotation(self): + return self.getTypedRuleContext(Java20Parser.SingleElementAnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_annotation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAnnotation" ): + return visitor.visitAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def annotation(self): + + localctx = Java20Parser.AnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 262, self.RULE_annotation) + try: + self.state = 1625 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,173,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1622 + self.normalAnnotation() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1623 + self.markerAnnotation() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1624 + self.singleElementAnnotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NormalAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def elementValuePairList(self): + return self.getTypedRuleContext(Java20Parser.ElementValuePairListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_normalAnnotation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNormalAnnotation" ): + return visitor.visitNormalAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def normalAnnotation(self): + + localctx = Java20Parser.NormalAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 264, self.RULE_normalAnnotation) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1627 + self.match(Java20Parser.AT) + self.state = 1628 + self.typeName() + self.state = 1629 + self.match(Java20Parser.LPAREN) + self.state = 1631 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 0) or _la==123: + self.state = 1630 + self.elementValuePairList() + + + self.state = 1633 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValuePairListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValuePair(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ElementValuePairContext) + else: + return self.getTypedRuleContext(Java20Parser.ElementValuePairContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValuePairList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValuePairList" ): + return visitor.visitElementValuePairList(self) + else: + return visitor.visitChildren(self) + + + + + def elementValuePairList(self): + + localctx = Java20Parser.ElementValuePairListContext(self, self._ctx, self.state) + self.enterRule(localctx, 266, self.RULE_elementValuePairList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1635 + self.elementValuePair() + self.state = 1640 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1636 + self.match(Java20Parser.COMMA) + self.state = 1637 + self.elementValuePair() + self.state = 1642 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValuePairContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_elementValuePair + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValuePair" ): + return visitor.visitElementValuePair(self) + else: + return visitor.visitChildren(self) + + + + + def elementValuePair(self): + + localctx = Java20Parser.ElementValuePairContext(self, self._ctx, self.state) + self.enterRule(localctx, 268, self.RULE_elementValuePair) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1643 + self.identifier() + self.state = 1644 + self.match(Java20Parser.ASSIGN) + self.state = 1645 + self.elementValue() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext,0) + + + def elementValueArrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ElementValueArrayInitializerContext,0) + + + def annotation(self): + return self.getTypedRuleContext(Java20Parser.AnnotationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_elementValue + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValue" ): + return visitor.visitElementValue(self) + else: + return visitor.visitChildren(self) + + + + + def elementValue(self): + + localctx = Java20Parser.ElementValueContext(self, self._ctx, self.state) + self.enterRule(localctx, 270, self.RULE_elementValue) + try: + self.state = 1650 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,176,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1647 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1648 + self.elementValueArrayInitializer() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1649 + self.annotation() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def elementValueList(self): + return self.getTypedRuleContext(Java20Parser.ElementValueListContext,0) + + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValueArrayInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValueArrayInitializer" ): + return visitor.visitElementValueArrayInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def elementValueArrayInitializer(self): + + localctx = Java20Parser.ElementValueArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 272, self.RULE_elementValueArrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1652 + self.match(Java20Parser.LBRACE) + self.state = 1654 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1653 + self.elementValueList() + + + self.state = 1657 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1656 + self.match(Java20Parser.COMMA) + + + self.state = 1659 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementValueListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def elementValue(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ElementValueContext) + else: + return self.getTypedRuleContext(Java20Parser.ElementValueContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_elementValueList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitElementValueList" ): + return visitor.visitElementValueList(self) + else: + return visitor.visitChildren(self) + + + + + def elementValueList(self): + + localctx = Java20Parser.ElementValueListContext(self, self._ctx, self.state) + self.enterRule(localctx, 274, self.RULE_elementValueList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1661 + self.elementValue() + self.state = 1666 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1662 + self.match(Java20Parser.COMMA) + self.state = 1663 + self.elementValue() + self.state = 1668 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MarkerAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_markerAnnotation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMarkerAnnotation" ): + return visitor.visitMarkerAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def markerAnnotation(self): + + localctx = Java20Parser.MarkerAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 276, self.RULE_markerAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1669 + self.match(Java20Parser.AT) + self.state = 1670 + self.typeName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleElementAnnotationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def AT(self): + return self.getToken(Java20Parser.AT, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def elementValue(self): + return self.getTypedRuleContext(Java20Parser.ElementValueContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_singleElementAnnotation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSingleElementAnnotation" ): + return visitor.visitSingleElementAnnotation(self) + else: + return visitor.visitChildren(self) + + + + + def singleElementAnnotation(self): + + localctx = Java20Parser.SingleElementAnnotationContext(self, self._ctx, self.state) + self.enterRule(localctx, 278, self.RULE_singleElementAnnotation) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1672 + self.match(Java20Parser.AT) + self.state = 1673 + self.typeName() + self.state = 1674 + self.match(Java20Parser.LPAREN) + self.state = 1675 + self.elementValue() + self.state = 1676 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def variableInitializerList(self): + return self.getTypedRuleContext(Java20Parser.VariableInitializerListContext,0) + + + def COMMA(self): + return self.getToken(Java20Parser.COMMA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_arrayInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayInitializer" ): + return visitor.visitArrayInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayInitializer(self): + + localctx = Java20Parser.ArrayInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 280, self.RULE_arrayInitializer) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1678 + self.match(Java20Parser.LBRACE) + self.state = 1680 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939449841) != 0): + self.state = 1679 + self.variableInitializerList() + + + self.state = 1683 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==83: + self.state = 1682 + self.match(Java20Parser.COMMA) + + + self.state = 1685 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableInitializerListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableInitializer(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableInitializerContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableInitializerContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_variableInitializerList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableInitializerList" ): + return visitor.visitVariableInitializerList(self) + else: + return visitor.visitChildren(self) + + + + + def variableInitializerList(self): + + localctx = Java20Parser.VariableInitializerListContext(self, self._ctx, self.state) + self.enterRule(localctx, 282, self.RULE_variableInitializerList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1687 + self.variableInitializer() + self.state = 1692 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,182,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1688 + self.match(Java20Parser.COMMA) + self.state = 1689 + self.variableInitializer() + self.state = 1694 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,182,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_block + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlock" ): + return visitor.visitBlock(self) + else: + return visitor.visitChildren(self) + + + + + def block(self): + + localctx = Java20Parser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 284, self.RULE_block) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1695 + self.match(Java20Parser.LBRACE) + self.state = 1697 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420626926) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1696 + self.blockStatements() + + + self.state = 1699 + self.match(Java20Parser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockStatementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def blockStatement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.BlockStatementContext) + else: + return self.getTypedRuleContext(Java20Parser.BlockStatementContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_blockStatements + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlockStatements" ): + return visitor.visitBlockStatements(self) + else: + return visitor.visitChildren(self) + + + + + def blockStatements(self): + + localctx = Java20Parser.BlockStatementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 286, self.RULE_blockStatements) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1701 + self.blockStatement() + self.state = 1705 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & 4610965747420626926) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 576461576941625323) != 0): + self.state = 1702 + self.blockStatement() + self.state = 1707 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localClassOrInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalClassOrInterfaceDeclarationContext,0) + + + def localVariableDeclarationStatement(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationStatementContext,0) + + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_blockStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBlockStatement" ): + return visitor.visitBlockStatement(self) + else: + return visitor.visitChildren(self) + + + + + def blockStatement(self): + + localctx = Java20Parser.BlockStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 288, self.RULE_blockStatement) + try: + self.state = 1711 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,185,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1708 + self.localClassOrInterfaceDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1709 + self.localVariableDeclarationStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1710 + self.statement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalClassOrInterfaceDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classDeclaration(self): + return self.getTypedRuleContext(Java20Parser.ClassDeclarationContext,0) + + + def normalInterfaceDeclaration(self): + return self.getTypedRuleContext(Java20Parser.NormalInterfaceDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_localClassOrInterfaceDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalClassOrInterfaceDeclaration" ): + return visitor.visitLocalClassOrInterfaceDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def localClassOrInterfaceDeclaration(self): + + localctx = Java20Parser.LocalClassOrInterfaceDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 290, self.RULE_localClassOrInterfaceDeclaration) + try: + self.state = 1715 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,186,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1713 + self.classDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1714 + self.normalInterfaceDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableType(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableTypeContext,0) + + + def variableDeclaratorList(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorListContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableDeclaration + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableDeclaration" ): + return visitor.visitLocalVariableDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableDeclaration(self): + + localctx = Java20Parser.LocalVariableDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 292, self.RULE_localVariableDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1720 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 1717 + self.variableModifier() + self.state = 1722 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1723 + self.localVariableType() + self.state = 1724 + self.variableDeclaratorList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableType" ): + return visitor.visitLocalVariableType(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableType(self): + + localctx = Java20Parser.LocalVariableTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 294, self.RULE_localVariableType) + try: + self.state = 1728 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,188,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1726 + self.unannType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1727 + self.match(Java20Parser.VAR) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LocalVariableDeclarationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_localVariableDeclarationStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLocalVariableDeclarationStatement" ): + return visitor.visitLocalVariableDeclarationStatement(self) + else: + return visitor.visitChildren(self) + + + + + def localVariableDeclarationStatement(self): + + localctx = Java20Parser.LocalVariableDeclarationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 296, self.RULE_localVariableDeclarationStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1730 + self.localVariableDeclaration() + self.state = 1731 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(Java20Parser.StatementWithoutTrailingSubstatementContext,0) + + + def labeledStatement(self): + return self.getTypedRuleContext(Java20Parser.LabeledStatementContext,0) + + + def ifThenStatement(self): + return self.getTypedRuleContext(Java20Parser.IfThenStatementContext,0) + + + def ifThenElseStatement(self): + return self.getTypedRuleContext(Java20Parser.IfThenElseStatementContext,0) + + + def whileStatement(self): + return self.getTypedRuleContext(Java20Parser.WhileStatementContext,0) + + + def forStatement(self): + return self.getTypedRuleContext(Java20Parser.ForStatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_statement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatement" ): + return visitor.visitStatement(self) + else: + return visitor.visitChildren(self) + + + + + def statement(self): + + localctx = Java20Parser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 298, self.RULE_statement) + try: + self.state = 1739 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,189,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1733 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1734 + self.labeledStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1735 + self.ifThenStatement() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1736 + self.ifThenElseStatement() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1737 + self.whileStatement() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1738 + self.forStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementWithoutTrailingSubstatement(self): + return self.getTypedRuleContext(Java20Parser.StatementWithoutTrailingSubstatementContext,0) + + + def labeledStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.LabeledStatementNoShortIfContext,0) + + + def ifThenElseStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.IfThenElseStatementNoShortIfContext,0) + + + def whileStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.WhileStatementNoShortIfContext,0) + + + def forStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.ForStatementNoShortIfContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_statementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementNoShortIf" ): + return visitor.visitStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def statementNoShortIf(self): + + localctx = Java20Parser.StatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 300, self.RULE_statementNoShortIf) + try: + self.state = 1746 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,190,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1741 + self.statementWithoutTrailingSubstatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1742 + self.labeledStatementNoShortIf() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1743 + self.ifThenElseStatementNoShortIf() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1744 + self.whileStatementNoShortIf() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1745 + self.forStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementWithoutTrailingSubstatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def emptyStatement_(self): + return self.getTypedRuleContext(Java20Parser.EmptyStatement_Context,0) + + + def expressionStatement(self): + return self.getTypedRuleContext(Java20Parser.ExpressionStatementContext,0) + + + def assertStatement(self): + return self.getTypedRuleContext(Java20Parser.AssertStatementContext,0) + + + def switchStatement(self): + return self.getTypedRuleContext(Java20Parser.SwitchStatementContext,0) + + + def doStatement(self): + return self.getTypedRuleContext(Java20Parser.DoStatementContext,0) + + + def breakStatement(self): + return self.getTypedRuleContext(Java20Parser.BreakStatementContext,0) + + + def continueStatement(self): + return self.getTypedRuleContext(Java20Parser.ContinueStatementContext,0) + + + def returnStatement(self): + return self.getTypedRuleContext(Java20Parser.ReturnStatementContext,0) + + + def synchronizedStatement(self): + return self.getTypedRuleContext(Java20Parser.SynchronizedStatementContext,0) + + + def throwStatement(self): + return self.getTypedRuleContext(Java20Parser.ThrowStatementContext,0) + + + def tryStatement(self): + return self.getTypedRuleContext(Java20Parser.TryStatementContext,0) + + + def yieldStatement(self): + return self.getTypedRuleContext(Java20Parser.YieldStatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_statementWithoutTrailingSubstatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementWithoutTrailingSubstatement" ): + return visitor.visitStatementWithoutTrailingSubstatement(self) + else: + return visitor.visitChildren(self) + + + + + def statementWithoutTrailingSubstatement(self): + + localctx = Java20Parser.StatementWithoutTrailingSubstatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 302, self.RULE_statementWithoutTrailingSubstatement) + try: + self.state = 1761 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,191,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1748 + self.block() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1749 + self.emptyStatement_() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1750 + self.expressionStatement() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1751 + self.assertStatement() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1752 + self.switchStatement() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1753 + self.doStatement() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1754 + self.breakStatement() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 1755 + self.continueStatement() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 1756 + self.returnStatement() + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 1757 + self.synchronizedStatement() + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 1758 + self.throwStatement() + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 1759 + self.tryStatement() + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 1760 + self.yieldStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EmptyStatement_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_emptyStatement_ + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEmptyStatement_" ): + return visitor.visitEmptyStatement_(self) + else: + return visitor.visitChildren(self) + + + + + def emptyStatement_(self): + + localctx = Java20Parser.EmptyStatement_Context(self, self._ctx, self.state) + self.enterRule(localctx, 304, self.RULE_emptyStatement_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1763 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabeledStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_labeledStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLabeledStatement" ): + return visitor.visitLabeledStatement(self) + else: + return visitor.visitChildren(self) + + + + + def labeledStatement(self): + + localctx = Java20Parser.LabeledStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 306, self.RULE_labeledStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1765 + self.identifier() + self.state = 1766 + self.match(Java20Parser.COLON) + self.state = 1767 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabeledStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_labeledStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLabeledStatementNoShortIf" ): + return visitor.visitLabeledStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def labeledStatementNoShortIf(self): + + localctx = Java20Parser.LabeledStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 308, self.RULE_labeledStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1769 + self.identifier() + self.state = 1770 + self.match(Java20Parser.COLON) + self.state = 1771 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_expressionStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpressionStatement" ): + return visitor.visitExpressionStatement(self) + else: + return visitor.visitChildren(self) + + + + + def expressionStatement(self): + + localctx = Java20Parser.ExpressionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 310, self.RULE_expressionStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1773 + self.statementExpression() + self.state = 1774 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignment(self): + return self.getTypedRuleContext(Java20Parser.AssignmentContext,0) + + + def preIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreIncrementExpressionContext,0) + + + def preDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreDecrementExpressionContext,0) + + + def postIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PostIncrementExpressionContext,0) + + + def postDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PostDecrementExpressionContext,0) + + + def methodInvocation(self): + return self.getTypedRuleContext(Java20Parser.MethodInvocationContext,0) + + + def classInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ClassInstanceCreationExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_statementExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementExpression" ): + return visitor.visitStatementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def statementExpression(self): + + localctx = Java20Parser.StatementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 312, self.RULE_statementExpression) + try: + self.state = 1783 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,192,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1776 + self.assignment() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1777 + self.preIncrementExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1778 + self.preDecrementExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1779 + self.postIncrementExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 1780 + self.postDecrementExpression() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 1781 + self.methodInvocation() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 1782 + self.classInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenStatement" ): + return visitor.visitIfThenStatement(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenStatement(self): + + localctx = Java20Parser.IfThenStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 314, self.RULE_ifThenStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1785 + self.match(Java20Parser.IF) + self.state = 1786 + self.match(Java20Parser.LPAREN) + self.state = 1787 + self.expression() + self.state = 1788 + self.match(Java20Parser.RPAREN) + self.state = 1789 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenElseStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,0) + + + def ELSE(self): + return self.getToken(Java20Parser.ELSE, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenElseStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenElseStatement" ): + return visitor.visitIfThenElseStatement(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenElseStatement(self): + + localctx = Java20Parser.IfThenElseStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 316, self.RULE_ifThenElseStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1791 + self.match(Java20Parser.IF) + self.state = 1792 + self.match(Java20Parser.LPAREN) + self.state = 1793 + self.expression() + self.state = 1794 + self.match(Java20Parser.RPAREN) + self.state = 1795 + self.statementNoShortIf() + self.state = 1796 + self.match(Java20Parser.ELSE) + self.state = 1797 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfThenElseStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def IF(self): + return self.getToken(Java20Parser.IF, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.StatementNoShortIfContext) + else: + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,i) + + + def ELSE(self): + return self.getToken(Java20Parser.ELSE, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_ifThenElseStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIfThenElseStatementNoShortIf" ): + return visitor.visitIfThenElseStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def ifThenElseStatementNoShortIf(self): + + localctx = Java20Parser.IfThenElseStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 318, self.RULE_ifThenElseStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1799 + self.match(Java20Parser.IF) + self.state = 1800 + self.match(Java20Parser.LPAREN) + self.state = 1801 + self.expression() + self.state = 1802 + self.match(Java20Parser.RPAREN) + self.state = 1803 + self.statementNoShortIf() + self.state = 1804 + self.match(Java20Parser.ELSE) + self.state = 1805 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssertStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSERT(self): + return self.getToken(Java20Parser.ASSERT, 0) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.ExpressionContext,i) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assertStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssertStatement" ): + return visitor.visitAssertStatement(self) + else: + return visitor.visitChildren(self) + + + + + def assertStatement(self): + + localctx = Java20Parser.AssertStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 320, self.RULE_assertStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1807 + self.match(Java20Parser.ASSERT) + self.state = 1808 + self.expression() + self.state = 1811 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==94: + self.state = 1809 + self.match(Java20Parser.COLON) + self.state = 1810 + self.expression() + + + self.state = 1813 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(Java20Parser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(Java20Parser.SwitchBlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_switchStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchStatement" ): + return visitor.visitSwitchStatement(self) + else: + return visitor.visitChildren(self) + + + + + def switchStatement(self): + + localctx = Java20Parser.SwitchStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 322, self.RULE_switchStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1815 + self.match(Java20Parser.SWITCH) + self.state = 1816 + self.match(Java20Parser.LPAREN) + self.state = 1817 + self.expression() + self.state = 1818 + self.match(Java20Parser.RPAREN) + self.state = 1819 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(Java20Parser.LBRACE, 0) + + def switchRule(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchRuleContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchRuleContext,i) + + + def RBRACE(self): + return self.getToken(Java20Parser.RBRACE, 0) + + def switchBlockStatementGroup(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchBlockStatementGroupContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchBlockStatementGroupContext,i) + + + def switchLabel(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchLabelContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext,i) + + + def COLON(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COLON) + else: + return self.getToken(Java20Parser.COLON, i) + + def getRuleIndex(self): + return Java20Parser.RULE_switchBlock + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchBlock" ): + return visitor.visitSwitchBlock(self) + else: + return visitor.visitChildren(self) + + + + + def switchBlock(self): + + localctx = Java20Parser.SwitchBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 324, self.RULE_switchBlock) + self._la = 0 # Token type + try: + self.state = 1847 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,197,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1821 + self.match(Java20Parser.LBRACE) + self.state = 1822 + self.switchRule() + self.state = 1826 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1823 + self.switchRule() + self.state = 1828 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1829 + self.match(Java20Parser.RBRACE) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1831 + self.match(Java20Parser.LBRACE) + self.state = 1835 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,195,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 1832 + self.switchBlockStatementGroup() + self.state = 1837 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,195,self._ctx) + + self.state = 1843 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1838 + self.switchLabel() + self.state = 1839 + self.match(Java20Parser.COLON) + self.state = 1845 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1846 + self.match(Java20Parser.RBRACE) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchRuleContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self): + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext,0) + + + def ARROW(self): + return self.getToken(Java20Parser.ARROW, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def throwStatement(self): + return self.getTypedRuleContext(Java20Parser.ThrowStatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_switchRule + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchRule" ): + return visitor.visitSwitchRule(self) + else: + return visitor.visitChildren(self) + + + + + def switchRule(self): + + localctx = Java20Parser.SwitchRuleContext(self, self._ctx, self.state) + self.enterRule(localctx, 326, self.RULE_switchRule) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1849 + self.switchLabel() + self.state = 1850 + self.match(Java20Parser.ARROW) + self.state = 1856 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.state = 1851 + self.expression() + self.state = 1852 + self.match(Java20Parser.SEMI) + pass + elif token in [78]: + self.state = 1854 + self.block() + pass + elif token in [61]: + self.state = 1855 + self.throwStatement() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchBlockStatementGroupContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def switchLabel(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.SwitchLabelContext) + else: + return self.getTypedRuleContext(Java20Parser.SwitchLabelContext,i) + + + def COLON(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COLON) + else: + return self.getToken(Java20Parser.COLON, i) + + def blockStatements(self): + return self.getTypedRuleContext(Java20Parser.BlockStatementsContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_switchBlockStatementGroup + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchBlockStatementGroup" ): + return visitor.visitSwitchBlockStatementGroup(self) + else: + return visitor.visitChildren(self) + + + + + def switchBlockStatementGroup(self): + + localctx = Java20Parser.SwitchBlockStatementGroupContext(self, self._ctx, self.state) + self.enterRule(localctx, 328, self.RULE_switchBlockStatementGroup) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1858 + self.switchLabel() + self.state = 1859 + self.match(Java20Parser.COLON) + self.state = 1865 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==23 or _la==29: + self.state = 1860 + self.switchLabel() + self.state = 1861 + self.match(Java20Parser.COLON) + self.state = 1867 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1868 + self.blockStatements() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchLabelContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CASE(self): + return self.getToken(Java20Parser.CASE, 0) + + def caseConstant(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.CaseConstantContext) + else: + return self.getTypedRuleContext(Java20Parser.CaseConstantContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def DEFAULT(self): + return self.getToken(Java20Parser.DEFAULT, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_switchLabel + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchLabel" ): + return visitor.visitSwitchLabel(self) + else: + return visitor.visitChildren(self) + + + + + def switchLabel(self): + + localctx = Java20Parser.SwitchLabelContext(self, self._ctx, self.state) + self.enterRule(localctx, 330, self.RULE_switchLabel) + self._la = 0 # Token type + try: + self.state = 1880 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [23]: + self.enterOuterAlt(localctx, 1) + self.state = 1870 + self.match(Java20Parser.CASE) + self.state = 1871 + self.caseConstant() + self.state = 1876 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1872 + self.match(Java20Parser.COMMA) + self.state = 1873 + self.caseConstant() + self.state = 1878 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + elif token in [29]: + self.enterOuterAlt(localctx, 2) + self.state = 1879 + self.match(Java20Parser.DEFAULT) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaseConstantContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_caseConstant + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCaseConstant" ): + return visitor.visitCaseConstant(self) + else: + return visitor.visitChildren(self) + + + + + def caseConstant(self): + + localctx = Java20Parser.CaseConstantContext(self, self._ctx, self.state) + self.enterRule(localctx, 332, self.RULE_caseConstant) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1882 + self.conditionalExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WhileStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_whileStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWhileStatement" ): + return visitor.visitWhileStatement(self) + else: + return visitor.visitChildren(self) + + + + + def whileStatement(self): + + localctx = Java20Parser.WhileStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 334, self.RULE_whileStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1884 + self.match(Java20Parser.WHILE) + self.state = 1885 + self.match(Java20Parser.LPAREN) + self.state = 1886 + self.expression() + self.state = 1887 + self.match(Java20Parser.RPAREN) + self.state = 1888 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WhileStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_whileStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWhileStatementNoShortIf" ): + return visitor.visitWhileStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def whileStatementNoShortIf(self): + + localctx = Java20Parser.WhileStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 336, self.RULE_whileStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1890 + self.match(Java20Parser.WHILE) + self.state = 1891 + self.match(Java20Parser.LPAREN) + self.state = 1892 + self.expression() + self.state = 1893 + self.match(Java20Parser.RPAREN) + self.state = 1894 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DoStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DO(self): + return self.getToken(Java20Parser.DO, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def WHILE(self): + return self.getToken(Java20Parser.WHILE, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_doStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDoStatement" ): + return visitor.visitDoStatement(self) + else: + return visitor.visitChildren(self) + + + + + def doStatement(self): + + localctx = Java20Parser.DoStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 338, self.RULE_doStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1896 + self.match(Java20Parser.DO) + self.state = 1897 + self.statement() + self.state = 1898 + self.match(Java20Parser.WHILE) + self.state = 1899 + self.match(Java20Parser.LPAREN) + self.state = 1900 + self.expression() + self.state = 1901 + self.match(Java20Parser.RPAREN) + self.state = 1902 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatement(self): + return self.getTypedRuleContext(Java20Parser.BasicForStatementContext,0) + + + def enhancedForStatement(self): + return self.getTypedRuleContext(Java20Parser.EnhancedForStatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_forStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForStatement" ): + return visitor.visitForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def forStatement(self): + + localctx = Java20Parser.ForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 340, self.RULE_forStatement) + try: + self.state = 1906 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,202,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1904 + self.basicForStatement() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1905 + self.enhancedForStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def basicForStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.BasicForStatementNoShortIfContext,0) + + + def enhancedForStatementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.EnhancedForStatementNoShortIfContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_forStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForStatementNoShortIf" ): + return visitor.visitForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def forStatementNoShortIf(self): + + localctx = Java20Parser.ForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 342, self.RULE_forStatementNoShortIf) + try: + self.state = 1910 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,203,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1908 + self.basicForStatementNoShortIf() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1909 + self.enhancedForStatementNoShortIf() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BasicForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def forInit(self): + return self.getTypedRuleContext(Java20Parser.ForInitContext,0) + + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def forUpdate(self): + return self.getTypedRuleContext(Java20Parser.ForUpdateContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_basicForStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBasicForStatement" ): + return visitor.visitBasicForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def basicForStatement(self): + + localctx = Java20Parser.BasicForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 344, self.RULE_basicForStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1912 + self.match(Java20Parser.FOR) + self.state = 1913 + self.match(Java20Parser.LPAREN) + self.state = 1915 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084352494) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1914 + self.forInit() + + + self.state = 1917 + self.match(Java20Parser.SEMI) + self.state = 1919 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1918 + self.expression() + + + self.state = 1921 + self.match(Java20Parser.SEMI) + self.state = 1923 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724614126) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1922 + self.forUpdate() + + + self.state = 1925 + self.match(Java20Parser.RPAREN) + self.state = 1926 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BasicForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,0) + + + def forInit(self): + return self.getTypedRuleContext(Java20Parser.ForInitContext,0) + + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def forUpdate(self): + return self.getTypedRuleContext(Java20Parser.ForUpdateContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_basicForStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBasicForStatementNoShortIf" ): + return visitor.visitBasicForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def basicForStatementNoShortIf(self): + + localctx = Java20Parser.BasicForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 346, self.RULE_basicForStatementNoShortIf) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1928 + self.match(Java20Parser.FOR) + self.state = 1929 + self.match(Java20Parser.LPAREN) + self.state = 1931 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420701084352494) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1930 + self.forInit() + + + self.state = 1933 + self.match(Java20Parser.SEMI) + self.state = 1935 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1934 + self.expression() + + + self.state = 1937 + self.match(Java20Parser.SEMI) + self.state = 1939 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1315420666724614126) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288230788470673393) != 0): + self.state = 1938 + self.forUpdate() + + + self.state = 1941 + self.match(Java20Parser.RPAREN) + self.state = 1942 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForInitContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionListContext,0) + + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_forInit + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForInit" ): + return visitor.visitForInit(self) + else: + return visitor.visitChildren(self) + + + + + def forInit(self): + + localctx = Java20Parser.ForInitContext(self, self._ctx, self.state) + self.enterRule(localctx, 348, self.RULE_forInit) + try: + self.state = 1946 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,210,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1944 + self.statementExpressionList() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1945 + self.localVariableDeclaration() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ForUpdateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpressionList(self): + return self.getTypedRuleContext(Java20Parser.StatementExpressionListContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_forUpdate + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitForUpdate" ): + return visitor.visitForUpdate(self) + else: + return visitor.visitChildren(self) + + + + + def forUpdate(self): + + localctx = Java20Parser.ForUpdateContext(self, self._ctx, self.state) + self.enterRule(localctx, 350, self.RULE_forUpdate) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1948 + self.statementExpressionList() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementExpressionListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statementExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.StatementExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.StatementExpressionContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_statementExpressionList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitStatementExpressionList" ): + return visitor.visitStatementExpressionList(self) + else: + return visitor.visitChildren(self) + + + + + def statementExpressionList(self): + + localctx = Java20Parser.StatementExpressionListContext(self, self._ctx, self.state) + self.enterRule(localctx, 352, self.RULE_statementExpressionList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1950 + self.statementExpression() + self.state = 1955 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 1951 + self.match(Java20Parser.COMMA) + self.state = 1952 + self.statementExpression() + self.state = 1957 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnhancedForStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statement(self): + return self.getTypedRuleContext(Java20Parser.StatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enhancedForStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnhancedForStatement" ): + return visitor.visitEnhancedForStatement(self) + else: + return visitor.visitChildren(self) + + + + + def enhancedForStatement(self): + + localctx = Java20Parser.EnhancedForStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 354, self.RULE_enhancedForStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1958 + self.match(Java20Parser.FOR) + self.state = 1959 + self.match(Java20Parser.LPAREN) + self.state = 1960 + self.localVariableDeclaration() + self.state = 1961 + self.match(Java20Parser.COLON) + self.state = 1962 + self.expression() + self.state = 1963 + self.match(Java20Parser.RPAREN) + self.state = 1964 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EnhancedForStatementNoShortIfContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FOR(self): + return self.getToken(Java20Parser.FOR, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def statementNoShortIf(self): + return self.getTypedRuleContext(Java20Parser.StatementNoShortIfContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_enhancedForStatementNoShortIf + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEnhancedForStatementNoShortIf" ): + return visitor.visitEnhancedForStatementNoShortIf(self) + else: + return visitor.visitChildren(self) + + + + + def enhancedForStatementNoShortIf(self): + + localctx = Java20Parser.EnhancedForStatementNoShortIfContext(self, self._ctx, self.state) + self.enterRule(localctx, 356, self.RULE_enhancedForStatementNoShortIf) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1966 + self.match(Java20Parser.FOR) + self.state = 1967 + self.match(Java20Parser.LPAREN) + self.state = 1968 + self.localVariableDeclaration() + self.state = 1969 + self.match(Java20Parser.COLON) + self.state = 1970 + self.expression() + self.state = 1971 + self.match(Java20Parser.RPAREN) + self.state = 1972 + self.statementNoShortIf() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BreakStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BREAK(self): + return self.getToken(Java20Parser.BREAK, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_breakStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBreakStatement" ): + return visitor.visitBreakStatement(self) + else: + return visitor.visitChildren(self) + + + + + def breakStatement(self): + + localctx = Java20Parser.BreakStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 358, self.RULE_breakStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1974 + self.match(Java20Parser.BREAK) + self.state = 1976 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 0) or _la==123: + self.state = 1975 + self.identifier() + + + self.state = 1978 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ContinueStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CONTINUE(self): + return self.getToken(Java20Parser.CONTINUE, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_continueStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitContinueStatement" ): + return visitor.visitContinueStatement(self) + else: + return visitor.visitChildren(self) + + + + + def continueStatement(self): + + localctx = Java20Parser.ContinueStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 360, self.RULE_continueStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1980 + self.match(Java20Parser.CONTINUE) + self.state = 1982 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262126) != 0) or _la==123: + self.state = 1981 + self.identifier() + + + self.state = 1984 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReturnStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def RETURN(self): + return self.getToken(Java20Parser.RETURN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_returnStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitReturnStatement" ): + return visitor.visitReturnStatement(self) + else: + return visitor.visitChildren(self) + + + + + def returnStatement(self): + + localctx = Java20Parser.ReturnStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 362, self.RULE_returnStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1986 + self.match(Java20Parser.RETURN) + self.state = 1988 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 1987 + self.expression() + + + self.state = 1990 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ThrowStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def THROW(self): + return self.getToken(Java20Parser.THROW, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_throwStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitThrowStatement" ): + return visitor.visitThrowStatement(self) + else: + return visitor.visitChildren(self) + + + + + def throwStatement(self): + + localctx = Java20Parser.ThrowStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 364, self.RULE_throwStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1992 + self.match(Java20Parser.THROW) + self.state = 1993 + self.expression() + self.state = 1994 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SynchronizedStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SYNCHRONIZED(self): + return self.getToken(Java20Parser.SYNCHRONIZED, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_synchronizedStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSynchronizedStatement" ): + return visitor.visitSynchronizedStatement(self) + else: + return visitor.visitChildren(self) + + + + + def synchronizedStatement(self): + + localctx = Java20Parser.SynchronizedStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 366, self.RULE_synchronizedStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1996 + self.match(Java20Parser.SYNCHRONIZED) + self.state = 1997 + self.match(Java20Parser.LPAREN) + self.state = 1998 + self.expression() + self.state = 1999 + self.match(Java20Parser.RPAREN) + self.state = 2000 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(Java20Parser.TRY, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def catches(self): + return self.getTypedRuleContext(Java20Parser.CatchesContext,0) + + + def finallyBlock(self): + return self.getTypedRuleContext(Java20Parser.FinallyBlockContext,0) + + + def tryWithResourcesStatement(self): + return self.getTypedRuleContext(Java20Parser.TryWithResourcesStatementContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_tryStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryStatement" ): + return visitor.visitTryStatement(self) + else: + return visitor.visitChildren(self) + + + + + def tryStatement(self): + + localctx = Java20Parser.TryStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 368, self.RULE_tryStatement) + self._la = 0 # Token type + try: + self.state = 2018 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,216,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2002 + self.match(Java20Parser.TRY) + self.state = 2003 + self.block() + self.state = 2004 + self.catches() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2006 + self.match(Java20Parser.TRY) + self.state = 2007 + self.block() + self.state = 2008 + self.finallyBlock() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2010 + self.match(Java20Parser.TRY) + self.state = 2011 + self.block() + self.state = 2013 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24: + self.state = 2012 + self.catches() + + + self.state = 2015 + self.finallyBlock() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2017 + self.tryWithResourcesStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.CatchClauseContext) + else: + return self.getTypedRuleContext(Java20Parser.CatchClauseContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_catches + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatches" ): + return visitor.visitCatches(self) + else: + return visitor.visitChildren(self) + + + + + def catches(self): + + localctx = Java20Parser.CatchesContext(self, self._ctx, self.state) + self.enterRule(localctx, 370, self.RULE_catches) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2020 + self.catchClause() + self.state = 2024 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==24: + self.state = 2021 + self.catchClause() + self.state = 2026 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def CATCH(self): + return self.getToken(Java20Parser.CATCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def catchFormalParameter(self): + return self.getTypedRuleContext(Java20Parser.CatchFormalParameterContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_catchClause + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchClause" ): + return visitor.visitCatchClause(self) + else: + return visitor.visitChildren(self) + + + + + def catchClause(self): + + localctx = Java20Parser.CatchClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 372, self.RULE_catchClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2027 + self.match(Java20Parser.CATCH) + self.state = 2028 + self.match(Java20Parser.LPAREN) + self.state = 2029 + self.catchFormalParameter() + self.state = 2030 + self.match(Java20Parser.RPAREN) + self.state = 2031 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchFormalParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def catchType(self): + return self.getTypedRuleContext(Java20Parser.CatchTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_catchFormalParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchFormalParameter" ): + return visitor.visitCatchFormalParameter(self) + else: + return visitor.visitChildren(self) + + + + + def catchFormalParameter(self): + + localctx = Java20Parser.CatchFormalParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 374, self.RULE_catchFormalParameter) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2036 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 2033 + self.variableModifier() + self.state = 2038 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2039 + self.catchType() + self.state = 2040 + self.variableDeclaratorId() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannClassType(self): + return self.getTypedRuleContext(Java20Parser.UnannClassTypeContext,0) + + + def BITOR(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.BITOR) + else: + return self.getToken(Java20Parser.BITOR, i) + + def classType(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ClassTypeContext) + else: + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_catchType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCatchType" ): + return visitor.visitCatchType(self) + else: + return visitor.visitChildren(self) + + + + + def catchType(self): + + localctx = Java20Parser.CatchTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 376, self.RULE_catchType) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2042 + self.unannClassType() + self.state = 2047 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==109: + self.state = 2043 + self.match(Java20Parser.BITOR) + self.state = 2044 + self.classType() + self.state = 2049 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FinallyBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def FINALLY(self): + return self.getToken(Java20Parser.FINALLY, 0) + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_finallyBlock + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFinallyBlock" ): + return visitor.visitFinallyBlock(self) + else: + return visitor.visitChildren(self) + + + + + def finallyBlock(self): + + localctx = Java20Parser.FinallyBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 378, self.RULE_finallyBlock) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2050 + self.match(Java20Parser.FINALLY) + self.state = 2051 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryWithResourcesStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TRY(self): + return self.getToken(Java20Parser.TRY, 0) + + def resourceSpecification(self): + return self.getTypedRuleContext(Java20Parser.ResourceSpecificationContext,0) + + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def catches(self): + return self.getTypedRuleContext(Java20Parser.CatchesContext,0) + + + def finallyBlock(self): + return self.getTypedRuleContext(Java20Parser.FinallyBlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_tryWithResourcesStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTryWithResourcesStatement" ): + return visitor.visitTryWithResourcesStatement(self) + else: + return visitor.visitChildren(self) + + + + + def tryWithResourcesStatement(self): + + localctx = Java20Parser.TryWithResourcesStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 380, self.RULE_tryWithResourcesStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2053 + self.match(Java20Parser.TRY) + self.state = 2054 + self.resourceSpecification() + self.state = 2055 + self.block() + self.state = 2057 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==24: + self.state = 2056 + self.catches() + + + self.state = 2060 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==36: + self.state = 2059 + self.finallyBlock() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceSpecificationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def resourceList(self): + return self.getTypedRuleContext(Java20Parser.ResourceListContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_resourceSpecification + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResourceSpecification" ): + return visitor.visitResourceSpecification(self) + else: + return visitor.visitChildren(self) + + + + + def resourceSpecification(self): + + localctx = Java20Parser.ResourceSpecificationContext(self, self._ctx, self.state) + self.enterRule(localctx, 382, self.RULE_resourceSpecification) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2062 + self.match(Java20Parser.LPAREN) + self.state = 2063 + self.resourceList() + self.state = 2065 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==82: + self.state = 2064 + self.match(Java20Parser.SEMI) + + + self.state = 2067 + self.match(Java20Parser.RPAREN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def resource(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ResourceContext) + else: + return self.getTypedRuleContext(Java20Parser.ResourceContext,i) + + + def SEMI(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.SEMI) + else: + return self.getToken(Java20Parser.SEMI, i) + + def getRuleIndex(self): + return Java20Parser.RULE_resourceList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResourceList" ): + return visitor.visitResourceList(self) + else: + return visitor.visitChildren(self) + + + + + def resourceList(self): + + localctx = Java20Parser.ResourceListContext(self, self._ctx, self.state) + self.enterRule(localctx, 384, self.RULE_resourceList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2069 + self.resource() + self.state = 2074 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,223,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 2070 + self.match(Java20Parser.SEMI) + self.state = 2071 + self.resource() + self.state = 2076 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,223,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ResourceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def variableAccess(self): + return self.getTypedRuleContext(Java20Parser.VariableAccessContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_resource + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitResource" ): + return visitor.visitResource(self) + else: + return visitor.visitChildren(self) + + + + + def resource(self): + + localctx = Java20Parser.ResourceContext(self, self._ctx, self.state) + self.enterRule(localctx, 386, self.RULE_resource) + try: + self.state = 2079 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,224,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2077 + self.localVariableDeclaration() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2078 + self.variableAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def fieldAccess(self): + return self.getTypedRuleContext(Java20Parser.FieldAccessContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_variableAccess + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVariableAccess" ): + return visitor.visitVariableAccess(self) + else: + return visitor.visitChildren(self) + + + + + def variableAccess(self): + + localctx = Java20Parser.VariableAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 388, self.RULE_variableAccess) + try: + self.state = 2083 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,225,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2081 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2082 + self.fieldAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class YieldStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def YIELD(self): + return self.getToken(Java20Parser.YIELD, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def SEMI(self): + return self.getToken(Java20Parser.SEMI, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_yieldStatement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitYieldStatement" ): + return visitor.visitYieldStatement(self) + else: + return visitor.visitChildren(self) + + + + + def yieldStatement(self): + + localctx = Java20Parser.YieldStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 390, self.RULE_yieldStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2085 + self.match(Java20Parser.YIELD) + self.state = 2086 + self.expression() + self.state = 2087 + self.match(Java20Parser.SEMI) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typePattern(self): + return self.getTypedRuleContext(Java20Parser.TypePatternContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_pattern + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPattern" ): + return visitor.visitPattern(self) + else: + return visitor.visitChildren(self) + + + + + def pattern(self): + + localctx = Java20Parser.PatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 392, self.RULE_pattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2089 + self.typePattern() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypePatternContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def localVariableDeclaration(self): + return self.getTypedRuleContext(Java20Parser.LocalVariableDeclarationContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_typePattern + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypePattern" ): + return visitor.visitTypePattern(self) + else: + return visitor.visitChildren(self) + + + + + def typePattern(self): + + localctx = Java20Parser.TypePatternContext(self, self._ctx, self.state) + self.enterRule(localctx, 394, self.RULE_typePattern) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2091 + self.localVariableDeclaration() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext,0) + + + def assignmentExpression(self): + return self.getTypedRuleContext(Java20Parser.AssignmentExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_expression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExpression" ): + return visitor.visitExpression(self) + else: + return visitor.visitChildren(self) + + + + + def expression(self): + + localctx = Java20Parser.ExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 396, self.RULE_expression) + try: + self.state = 2095 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,226,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2093 + self.lambdaExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2094 + self.assignmentExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimaryContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primaryNoNewArray(self): + return self.getTypedRuleContext(Java20Parser.PrimaryNoNewArrayContext,0) + + + def arrayCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_primary + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimary" ): + return visitor.visitPrimary(self) + else: + return visitor.visitChildren(self) + + + + + def primary(self): + + localctx = Java20Parser.PrimaryContext(self, self._ctx, self.state) + self.enterRule(localctx, 398, self.RULE_primary) + try: + self.state = 2099 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,227,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2097 + self.primaryNoNewArray() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2098 + self.arrayCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrimaryNoNewArrayContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def literal(self): + return self.getTypedRuleContext(Java20Parser.LiteralContext,0) + + + def pNNA(self): + return self.getTypedRuleContext(Java20Parser.PNNAContext,0) + + + def classLiteral(self): + return self.getTypedRuleContext(Java20Parser.ClassLiteralContext,0) + + + def THIS(self): + return self.getToken(Java20Parser.THIS, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def arrayCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionContext,0) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext,0) + + + def methodName(self): + return self.getTypedRuleContext(Java20Parser.MethodNameContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_primaryNoNewArray + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrimaryNoNewArray" ): + return visitor.visitPrimaryNoNewArray(self) + else: + return visitor.visitChildren(self) + + + + + def primaryNoNewArray(self): + + localctx = Java20Parser.PrimaryNoNewArrayContext(self, self._ctx, self.state) + self.enterRule(localctx, 400, self.RULE_primaryNoNewArray) + self._la = 0 # Token type + try: + self.state = 2318 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,271,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2101 + self.literal() + self.state = 2103 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,228,self._ctx) + if la_ == 1: + self.state = 2102 + self.pNNA() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2105 + self.classLiteral() + self.state = 2107 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,229,self._ctx) + if la_ == 1: + self.state = 2106 + self.pNNA() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2109 + self.match(Java20Parser.THIS) + self.state = 2111 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,230,self._ctx) + if la_ == 1: + self.state = 2110 + self.pNNA() + + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2113 + self.typeName() + self.state = 2114 + self.match(Java20Parser.DOT) + self.state = 2115 + self.match(Java20Parser.THIS) + self.state = 2117 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,231,self._ctx) + if la_ == 1: + self.state = 2116 + self.pNNA() + + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2119 + self.match(Java20Parser.LPAREN) + self.state = 2120 + self.expression() + self.state = 2121 + self.match(Java20Parser.RPAREN) + self.state = 2123 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,232,self._ctx) + if la_ == 1: + self.state = 2122 + self.pNNA() + + + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2125 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2127 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,233,self._ctx) + if la_ == 1: + self.state = 2126 + self.pNNA() + + + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2129 + self.expressionName() + self.state = 2130 + self.match(Java20Parser.DOT) + self.state = 2131 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2133 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,234,self._ctx) + if la_ == 1: + self.state = 2132 + self.pNNA() + + + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 2135 + self.arrayCreationExpression() + self.state = 2136 + self.match(Java20Parser.DOT) + self.state = 2137 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2139 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,235,self._ctx) + if la_ == 1: + self.state = 2138 + self.pNNA() + + + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 2141 + self.arrayCreationExpression() + self.state = 2142 + self.match(Java20Parser.DOT) + self.state = 2143 + self.identifier() + self.state = 2145 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,236,self._ctx) + if la_ == 1: + self.state = 2144 + self.pNNA() + + + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 2147 + self.match(Java20Parser.SUPER) + self.state = 2148 + self.match(Java20Parser.DOT) + self.state = 2149 + self.identifier() + self.state = 2151 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,237,self._ctx) + if la_ == 1: + self.state = 2150 + self.pNNA() + + + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 2153 + self.typeName() + self.state = 2154 + self.match(Java20Parser.DOT) + self.state = 2155 + self.match(Java20Parser.SUPER) + self.state = 2156 + self.match(Java20Parser.DOT) + self.state = 2157 + self.identifier() + self.state = 2159 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,238,self._ctx) + if la_ == 1: + self.state = 2158 + self.pNNA() + + + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 2161 + self.expressionName() + self.state = 2162 + self.match(Java20Parser.LBRACK) + self.state = 2163 + self.expression() + self.state = 2164 + self.match(Java20Parser.RBRACK) + self.state = 2166 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,239,self._ctx) + if la_ == 1: + self.state = 2165 + self.pNNA() + + + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 2168 + self.arrayCreationExpressionWithInitializer() + self.state = 2169 + self.match(Java20Parser.LBRACK) + self.state = 2170 + self.expression() + self.state = 2171 + self.match(Java20Parser.RBRACK) + self.state = 2173 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,240,self._ctx) + if la_ == 1: + self.state = 2172 + self.pNNA() + + + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 2175 + self.methodName() + self.state = 2176 + self.match(Java20Parser.LPAREN) + self.state = 2178 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2177 + self.argumentList() + + + self.state = 2180 + self.match(Java20Parser.RPAREN) + self.state = 2182 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,242,self._ctx) + if la_ == 1: + self.state = 2181 + self.pNNA() + + + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 2184 + self.typeName() + self.state = 2185 + self.match(Java20Parser.DOT) + self.state = 2187 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2186 + self.typeArguments() + + + self.state = 2189 + self.identifier() + self.state = 2190 + self.match(Java20Parser.LPAREN) + self.state = 2192 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2191 + self.argumentList() + + + self.state = 2194 + self.match(Java20Parser.RPAREN) + self.state = 2196 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,245,self._ctx) + if la_ == 1: + self.state = 2195 + self.pNNA() + + + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 2198 + self.expressionName() + self.state = 2199 + self.match(Java20Parser.DOT) + self.state = 2201 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2200 + self.typeArguments() + + + self.state = 2203 + self.identifier() + self.state = 2204 + self.match(Java20Parser.LPAREN) + self.state = 2206 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2205 + self.argumentList() + + + self.state = 2208 + self.match(Java20Parser.RPAREN) + self.state = 2210 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,248,self._ctx) + if la_ == 1: + self.state = 2209 + self.pNNA() + + + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 2212 + self.arrayCreationExpression() + self.state = 2213 + self.match(Java20Parser.DOT) + self.state = 2215 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2214 + self.typeArguments() + + + self.state = 2217 + self.identifier() + self.state = 2218 + self.match(Java20Parser.LPAREN) + self.state = 2220 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2219 + self.argumentList() + + + self.state = 2222 + self.match(Java20Parser.RPAREN) + self.state = 2224 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,251,self._ctx) + if la_ == 1: + self.state = 2223 + self.pNNA() + + + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 2226 + self.match(Java20Parser.SUPER) + self.state = 2227 + self.match(Java20Parser.DOT) + self.state = 2229 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2228 + self.typeArguments() + + + self.state = 2231 + self.identifier() + self.state = 2232 + self.match(Java20Parser.LPAREN) + self.state = 2234 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2233 + self.argumentList() + + + self.state = 2236 + self.match(Java20Parser.RPAREN) + self.state = 2238 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,254,self._ctx) + if la_ == 1: + self.state = 2237 + self.pNNA() + + + pass + + elif la_ == 19: + self.enterOuterAlt(localctx, 19) + self.state = 2240 + self.typeName() + self.state = 2241 + self.match(Java20Parser.DOT) + self.state = 2242 + self.match(Java20Parser.SUPER) + self.state = 2243 + self.match(Java20Parser.DOT) + self.state = 2245 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2244 + self.typeArguments() + + + self.state = 2247 + self.identifier() + self.state = 2248 + self.match(Java20Parser.LPAREN) + self.state = 2250 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2249 + self.argumentList() + + + self.state = 2252 + self.match(Java20Parser.RPAREN) + self.state = 2254 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,257,self._ctx) + if la_ == 1: + self.state = 2253 + self.pNNA() + + + pass + + elif la_ == 20: + self.enterOuterAlt(localctx, 20) + self.state = 2256 + self.expressionName() + self.state = 2257 + self.match(Java20Parser.COLONCOLON) + self.state = 2259 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2258 + self.typeArguments() + + + self.state = 2261 + self.identifier() + self.state = 2263 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,259,self._ctx) + if la_ == 1: + self.state = 2262 + self.pNNA() + + + pass + + elif la_ == 21: + self.enterOuterAlt(localctx, 21) + self.state = 2265 + self.arrayCreationExpression() + self.state = 2266 + self.match(Java20Parser.COLONCOLON) + self.state = 2268 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2267 + self.typeArguments() + + + self.state = 2270 + self.identifier() + self.state = 2272 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,261,self._ctx) + if la_ == 1: + self.state = 2271 + self.pNNA() + + + pass + + elif la_ == 22: + self.enterOuterAlt(localctx, 22) + self.state = 2274 + self.referenceType() + self.state = 2275 + self.match(Java20Parser.COLONCOLON) + self.state = 2277 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2276 + self.typeArguments() + + + self.state = 2279 + self.identifier() + self.state = 2281 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,263,self._ctx) + if la_ == 1: + self.state = 2280 + self.pNNA() + + + pass + + elif la_ == 23: + self.enterOuterAlt(localctx, 23) + self.state = 2283 + self.match(Java20Parser.SUPER) + self.state = 2284 + self.match(Java20Parser.COLONCOLON) + self.state = 2286 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2285 + self.typeArguments() + + + self.state = 2288 + self.identifier() + self.state = 2290 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,265,self._ctx) + if la_ == 1: + self.state = 2289 + self.pNNA() + + + pass + + elif la_ == 24: + self.enterOuterAlt(localctx, 24) + self.state = 2292 + self.typeName() + self.state = 2293 + self.match(Java20Parser.DOT) + self.state = 2294 + self.match(Java20Parser.SUPER) + self.state = 2295 + self.match(Java20Parser.COLONCOLON) + self.state = 2297 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2296 + self.typeArguments() + + + self.state = 2299 + self.identifier() + self.state = 2301 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,267,self._ctx) + if la_ == 1: + self.state = 2300 + self.pNNA() + + + pass + + elif la_ == 25: + self.enterOuterAlt(localctx, 25) + self.state = 2303 + self.classType() + self.state = 2304 + self.match(Java20Parser.COLONCOLON) + self.state = 2306 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2305 + self.typeArguments() + + + self.state = 2308 + self.match(Java20Parser.NEW) + self.state = 2310 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,269,self._ctx) + if la_ == 1: + self.state = 2309 + self.pNNA() + + + pass + + elif la_ == 26: + self.enterOuterAlt(localctx, 26) + self.state = 2312 + self.arrayType() + self.state = 2313 + self.match(Java20Parser.COLONCOLON) + self.state = 2314 + self.match(Java20Parser.NEW) + self.state = 2316 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,270,self._ctx) + if la_ == 1: + self.state = 2315 + self.pNNA() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PNNAContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def pNNA(self): + return self.getTypedRuleContext(Java20Parser.PNNAContext,0) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_pNNA + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPNNA" ): + return visitor.visitPNNA(self) + else: + return visitor.visitChildren(self) + + + + + def pNNA(self): + + localctx = Java20Parser.PNNAContext(self, self._ctx, self.state) + self.enterRule(localctx, 402, self.RULE_pNNA) + self._la = 0 # Token type + try: + self.state = 2357 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,280,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2320 + self.match(Java20Parser.DOT) + self.state = 2321 + self.unqualifiedClassInstanceCreationExpression() + self.state = 2323 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,272,self._ctx) + if la_ == 1: + self.state = 2322 + self.pNNA() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2325 + self.match(Java20Parser.DOT) + self.state = 2326 + self.identifier() + self.state = 2328 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,273,self._ctx) + if la_ == 1: + self.state = 2327 + self.pNNA() + + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2330 + self.match(Java20Parser.LBRACK) + self.state = 2331 + self.expression() + self.state = 2332 + self.match(Java20Parser.RBRACK) + self.state = 2334 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,274,self._ctx) + if la_ == 1: + self.state = 2333 + self.pNNA() + + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2336 + self.match(Java20Parser.DOT) + self.state = 2338 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2337 + self.typeArguments() + + + self.state = 2340 + self.identifier() + self.state = 2341 + self.match(Java20Parser.LPAREN) + self.state = 2343 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2342 + self.argumentList() + + + self.state = 2345 + self.match(Java20Parser.RPAREN) + self.state = 2347 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,277,self._ctx) + if la_ == 1: + self.state = 2346 + self.pNNA() + + + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2349 + self.match(Java20Parser.COLONCOLON) + self.state = 2351 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2350 + self.typeArguments() + + + self.state = 2353 + self.identifier() + self.state = 2355 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,279,self._ctx) + if la_ == 1: + self.state = 2354 + self.pNNA() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def CLASS(self): + return self.getToken(Java20Parser.CLASS, 0) + + def LBRACK(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.LBRACK) + else: + return self.getToken(Java20Parser.LBRACK, i) + + def RBRACK(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.RBRACK) + else: + return self.getToken(Java20Parser.RBRACK, i) + + def numericType(self): + return self.getTypedRuleContext(Java20Parser.NumericTypeContext,0) + + + def BOOLEAN(self): + return self.getToken(Java20Parser.BOOLEAN, 0) + + def VOID(self): + return self.getToken(Java20Parser.VOID, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_classLiteral + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassLiteral" ): + return visitor.visitClassLiteral(self) + else: + return visitor.visitChildren(self) + + + + + def classLiteral(self): + + localctx = Java20Parser.ClassLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 404, self.RULE_classLiteral) + self._la = 0 # Token type + try: + self.state = 2394 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2359 + self.typeName() + self.state = 2364 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2360 + self.match(Java20Parser.LBRACK) + self.state = 2361 + self.match(Java20Parser.RBRACK) + self.state = 2366 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2367 + self.match(Java20Parser.DOT) + self.state = 2368 + self.match(Java20Parser.CLASS) + pass + elif token in [22, 25, 31, 37, 44, 46, 54]: + self.enterOuterAlt(localctx, 2) + self.state = 2370 + self.numericType() + self.state = 2375 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2371 + self.match(Java20Parser.LBRACK) + self.state = 2372 + self.match(Java20Parser.RBRACK) + self.state = 2377 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2378 + self.match(Java20Parser.DOT) + self.state = 2379 + self.match(Java20Parser.CLASS) + pass + elif token in [20]: + self.enterOuterAlt(localctx, 3) + self.state = 2381 + self.match(Java20Parser.BOOLEAN) + self.state = 2386 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==80: + self.state = 2382 + self.match(Java20Parser.LBRACK) + self.state = 2383 + self.match(Java20Parser.RBRACK) + self.state = 2388 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2389 + self.match(Java20Parser.DOT) + self.state = 2390 + self.match(Java20Parser.CLASS) + pass + elif token in [65]: + self.enterOuterAlt(localctx, 4) + self.state = 2391 + self.match(Java20Parser.VOID) + self.state = 2392 + self.match(Java20Parser.DOT) + self.state = 2393 + self.match(Java20Parser.CLASS) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unqualifiedClassInstanceCreationExpression(self): + return self.getTypedRuleContext(Java20Parser.UnqualifiedClassInstanceCreationExpressionContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classInstanceCreationExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassInstanceCreationExpression" ): + return visitor.visitClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def classInstanceCreationExpression(self): + + localctx = Java20Parser.ClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 406, self.RULE_classInstanceCreationExpression) + try: + self.state = 2405 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,285,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2396 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2397 + self.expressionName() + self.state = 2398 + self.match(Java20Parser.DOT) + self.state = 2399 + self.unqualifiedClassInstanceCreationExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2401 + self.primary() + self.state = 2402 + self.match(Java20Parser.DOT) + self.state = 2403 + self.unqualifiedClassInstanceCreationExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnqualifiedClassInstanceCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def classOrInterfaceTypeToInstantiate(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeToInstantiateContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def classBody(self): + return self.getTypedRuleContext(Java20Parser.ClassBodyContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unqualifiedClassInstanceCreationExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnqualifiedClassInstanceCreationExpression" ): + return visitor.visitUnqualifiedClassInstanceCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def unqualifiedClassInstanceCreationExpression(self): + + localctx = Java20Parser.UnqualifiedClassInstanceCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 408, self.RULE_unqualifiedClassInstanceCreationExpression) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2407 + self.match(Java20Parser.NEW) + self.state = 2409 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2408 + self.typeArguments() + + + self.state = 2411 + self.classOrInterfaceTypeToInstantiate() + self.state = 2412 + self.match(Java20Parser.LPAREN) + self.state = 2414 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2413 + self.argumentList() + + + self.state = 2416 + self.match(Java20Parser.RPAREN) + self.state = 2418 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,288,self._ctx) + if la_ == 1: + self.state = 2417 + self.classBody() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassOrInterfaceTypeToInstantiateContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.IdentifierContext) + else: + return self.getTypedRuleContext(Java20Parser.IdentifierContext,i) + + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def typeArgumentsOrDiamond(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsOrDiamondContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_classOrInterfaceTypeToInstantiate + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassOrInterfaceTypeToInstantiate" ): + return visitor.visitClassOrInterfaceTypeToInstantiate(self) + else: + return visitor.visitChildren(self) + + + + + def classOrInterfaceTypeToInstantiate(self): + + localctx = Java20Parser.ClassOrInterfaceTypeToInstantiateContext(self, self._ctx, self.state) + self.enterRule(localctx, 410, self.RULE_classOrInterfaceTypeToInstantiate) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2423 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2420 + self.annotation() + self.state = 2425 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2426 + self.identifier() + self.state = 2437 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==84: + self.state = 2427 + self.match(Java20Parser.DOT) + self.state = 2431 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2428 + self.annotation() + self.state = 2433 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2434 + self.identifier() + self.state = 2439 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2441 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==4 or _la==90: + self.state = 2440 + self.typeArgumentsOrDiamond() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TypeArgumentsOrDiamondContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def OACA(self): + return self.getToken(Java20Parser.OACA, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_typeArgumentsOrDiamond + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTypeArgumentsOrDiamond" ): + return visitor.visitTypeArgumentsOrDiamond(self) + else: + return visitor.visitChildren(self) + + + + + def typeArgumentsOrDiamond(self): + + localctx = Java20Parser.TypeArgumentsOrDiamondContext(self, self._ctx, self.state) + self.enterRule(localctx, 412, self.RULE_typeArgumentsOrDiamond) + try: + self.state = 2445 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [90]: + self.enterOuterAlt(localctx, 1) + self.state = 2443 + self.typeArguments() + pass + elif token in [4]: + self.enterOuterAlt(localctx, 2) + self.state = 2444 + self.match(Java20Parser.OACA) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def arrayCreationExpressionWithoutInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithoutInitializerContext,0) + + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpression" ): + return visitor.visitArrayCreationExpression(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpression(self): + + localctx = Java20Parser.ArrayCreationExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 414, self.RULE_arrayCreationExpression) + try: + self.state = 2449 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,294,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2447 + self.arrayCreationExpressionWithoutInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2448 + self.arrayCreationExpressionWithInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionWithoutInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext,0) + + + def dimExprs(self): + return self.getTypedRuleContext(Java20Parser.DimExprsContext,0) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpressionWithoutInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpressionWithoutInitializer" ): + return visitor.visitArrayCreationExpressionWithoutInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpressionWithoutInitializer(self): + + localctx = Java20Parser.ArrayCreationExpressionWithoutInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 416, self.RULE_arrayCreationExpressionWithoutInitializer) + try: + self.state = 2463 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,297,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2451 + self.match(Java20Parser.NEW) + self.state = 2452 + self.primitiveType() + self.state = 2453 + self.dimExprs() + self.state = 2455 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,295,self._ctx) + if la_ == 1: + self.state = 2454 + self.dims() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2457 + self.match(Java20Parser.NEW) + self.state = 2458 + self.classType() + self.state = 2459 + self.dimExprs() + self.state = 2461 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,296,self._ctx) + if la_ == 1: + self.state = 2460 + self.dims() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayCreationExpressionWithInitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext,0) + + + def dims(self): + return self.getTypedRuleContext(Java20Parser.DimsContext,0) + + + def arrayInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayInitializerContext,0) + + + def classOrInterfaceType(self): + return self.getTypedRuleContext(Java20Parser.ClassOrInterfaceTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_arrayCreationExpressionWithInitializer + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayCreationExpressionWithInitializer" ): + return visitor.visitArrayCreationExpressionWithInitializer(self) + else: + return visitor.visitChildren(self) + + + + + def arrayCreationExpressionWithInitializer(self): + + localctx = Java20Parser.ArrayCreationExpressionWithInitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 418, self.RULE_arrayCreationExpressionWithInitializer) + try: + self.state = 2475 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,298,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2465 + self.match(Java20Parser.NEW) + self.state = 2466 + self.primitiveType() + self.state = 2467 + self.dims() + self.state = 2468 + self.arrayInitializer() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2470 + self.match(Java20Parser.NEW) + self.state = 2471 + self.classOrInterfaceType() + self.state = 2472 + self.dims() + self.state = 2473 + self.arrayInitializer() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimExprsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def dimExpr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.DimExprContext) + else: + return self.getTypedRuleContext(Java20Parser.DimExprContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_dimExprs + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDimExprs" ): + return visitor.visitDimExprs(self) + else: + return visitor.visitChildren(self) + + + + + def dimExprs(self): + + localctx = Java20Parser.DimExprsContext(self, self._ctx, self.state) + self.enterRule(localctx, 420, self.RULE_dimExprs) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2477 + self.dimExpr() + self.state = 2481 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,299,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 2478 + self.dimExpr() + self.state = 2483 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,299,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DimExprContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def annotation(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AnnotationContext) + else: + return self.getTypedRuleContext(Java20Parser.AnnotationContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_dimExpr + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDimExpr" ): + return visitor.visitDimExpr(self) + else: + return visitor.visitChildren(self) + + + + + def dimExpr(self): + + localctx = Java20Parser.DimExprContext(self, self._ctx, self.state) + self.enterRule(localctx, 422, self.RULE_dimExpr) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2487 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==86: + self.state = 2484 + self.annotation() + self.state = 2489 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2490 + self.match(Java20Parser.LBRACK) + self.state = 2491 + self.expression() + self.state = 2492 + self.match(Java20Parser.RBRACK) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def LBRACK(self): + return self.getToken(Java20Parser.LBRACK, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RBRACK(self): + return self.getToken(Java20Parser.RBRACK, 0) + + def primaryNoNewArray(self): + return self.getTypedRuleContext(Java20Parser.PrimaryNoNewArrayContext,0) + + + def arrayCreationExpressionWithInitializer(self): + return self.getTypedRuleContext(Java20Parser.ArrayCreationExpressionWithInitializerContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_arrayAccess + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArrayAccess" ): + return visitor.visitArrayAccess(self) + else: + return visitor.visitChildren(self) + + + + + def arrayAccess(self): + + localctx = Java20Parser.ArrayAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 424, self.RULE_arrayAccess) + try: + self.state = 2509 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,301,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2494 + self.expressionName() + self.state = 2495 + self.match(Java20Parser.LBRACK) + self.state = 2496 + self.expression() + self.state = 2497 + self.match(Java20Parser.RBRACK) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2499 + self.primaryNoNewArray() + self.state = 2500 + self.match(Java20Parser.LBRACK) + self.state = 2501 + self.expression() + self.state = 2502 + self.match(Java20Parser.RBRACK) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2504 + self.arrayCreationExpressionWithInitializer() + self.state = 2505 + self.match(Java20Parser.LBRACK) + self.state = 2506 + self.expression() + self.state = 2507 + self.match(Java20Parser.RBRACK) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldAccessContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_fieldAccess + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFieldAccess" ): + return visitor.visitFieldAccess(self) + else: + return visitor.visitChildren(self) + + + + + def fieldAccess(self): + + localctx = Java20Parser.FieldAccessContext(self, self._ctx, self.state) + self.enterRule(localctx, 426, self.RULE_fieldAccess) + try: + self.state = 2524 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,302,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2511 + self.primary() + self.state = 2512 + self.match(Java20Parser.DOT) + self.state = 2513 + self.identifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2515 + self.match(Java20Parser.SUPER) + self.state = 2516 + self.match(Java20Parser.DOT) + self.state = 2517 + self.identifier() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2518 + self.typeName() + self.state = 2519 + self.match(Java20Parser.DOT) + self.state = 2520 + self.match(Java20Parser.SUPER) + self.state = 2521 + self.match(Java20Parser.DOT) + self.state = 2522 + self.identifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodInvocationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodName(self): + return self.getTypedRuleContext(Java20Parser.MethodNameContext,0) + + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def argumentList(self): + return self.getTypedRuleContext(Java20Parser.ArgumentListContext,0) + + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.DOT) + else: + return self.getToken(Java20Parser.DOT, i) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_methodInvocation + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodInvocation" ): + return visitor.visitMethodInvocation(self) + else: + return visitor.visitChildren(self) + + + + + def methodInvocation(self): + + localctx = Java20Parser.MethodInvocationContext(self, self._ctx, self.state) + self.enterRule(localctx, 428, self.RULE_methodInvocation) + self._la = 0 # Token type + try: + self.state = 2595 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,314,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2526 + self.methodName() + self.state = 2527 + self.match(Java20Parser.LPAREN) + self.state = 2529 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2528 + self.argumentList() + + + self.state = 2531 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2533 + self.typeName() + self.state = 2534 + self.match(Java20Parser.DOT) + self.state = 2536 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2535 + self.typeArguments() + + + self.state = 2538 + self.identifier() + self.state = 2539 + self.match(Java20Parser.LPAREN) + self.state = 2541 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2540 + self.argumentList() + + + self.state = 2543 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2545 + self.expressionName() + self.state = 2546 + self.match(Java20Parser.DOT) + self.state = 2548 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2547 + self.typeArguments() + + + self.state = 2550 + self.identifier() + self.state = 2551 + self.match(Java20Parser.LPAREN) + self.state = 2553 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2552 + self.argumentList() + + + self.state = 2555 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2557 + self.primary() + self.state = 2558 + self.match(Java20Parser.DOT) + self.state = 2560 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2559 + self.typeArguments() + + + self.state = 2562 + self.identifier() + self.state = 2563 + self.match(Java20Parser.LPAREN) + self.state = 2565 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2564 + self.argumentList() + + + self.state = 2567 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2569 + self.match(Java20Parser.SUPER) + self.state = 2570 + self.match(Java20Parser.DOT) + self.state = 2572 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2571 + self.typeArguments() + + + self.state = 2574 + self.identifier() + self.state = 2575 + self.match(Java20Parser.LPAREN) + self.state = 2577 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2576 + self.argumentList() + + + self.state = 2579 + self.match(Java20Parser.RPAREN) + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2581 + self.typeName() + self.state = 2582 + self.match(Java20Parser.DOT) + self.state = 2583 + self.match(Java20Parser.SUPER) + self.state = 2584 + self.match(Java20Parser.DOT) + self.state = 2586 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2585 + self.typeArguments() + + + self.state = 2588 + self.identifier() + self.state = 2589 + self.match(Java20Parser.LPAREN) + self.state = 2591 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 1603651042876325870) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & 288232437939441649) != 0): + self.state = 2590 + self.argumentList() + + + self.state = 2593 + self.match(Java20Parser.RPAREN) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArgumentListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.ExpressionContext) + else: + return self.getTypedRuleContext(Java20Parser.ExpressionContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def getRuleIndex(self): + return Java20Parser.RULE_argumentList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArgumentList" ): + return visitor.visitArgumentList(self) + else: + return visitor.visitChildren(self) + + + + + def argumentList(self): + + localctx = Java20Parser.ArgumentListContext(self, self._ctx, self.state) + self.enterRule(localctx, 430, self.RULE_argumentList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2597 + self.expression() + self.state = 2602 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2598 + self.match(Java20Parser.COMMA) + self.state = 2599 + self.expression() + self.state = 2604 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodReferenceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def COLONCOLON(self): + return self.getToken(Java20Parser.COLONCOLON, 0) + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def typeArguments(self): + return self.getTypedRuleContext(Java20Parser.TypeArgumentsContext,0) + + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def SUPER(self): + return self.getToken(Java20Parser.SUPER, 0) + + def typeName(self): + return self.getTypedRuleContext(Java20Parser.TypeNameContext,0) + + + def DOT(self): + return self.getToken(Java20Parser.DOT, 0) + + def classType(self): + return self.getTypedRuleContext(Java20Parser.ClassTypeContext,0) + + + def NEW(self): + return self.getToken(Java20Parser.NEW, 0) + + def arrayType(self): + return self.getTypedRuleContext(Java20Parser.ArrayTypeContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_methodReference + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodReference" ): + return visitor.visitMethodReference(self) + else: + return visitor.visitChildren(self) + + + + + def methodReference(self): + + localctx = Java20Parser.MethodReferenceContext(self, self._ctx, self.state) + self.enterRule(localctx, 432, self.RULE_methodReference) + self._la = 0 # Token type + try: + self.state = 2652 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,322,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2605 + self.expressionName() + self.state = 2606 + self.match(Java20Parser.COLONCOLON) + self.state = 2608 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2607 + self.typeArguments() + + + self.state = 2610 + self.identifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2612 + self.primary() + self.state = 2613 + self.match(Java20Parser.COLONCOLON) + self.state = 2615 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2614 + self.typeArguments() + + + self.state = 2617 + self.identifier() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2619 + self.referenceType() + self.state = 2620 + self.match(Java20Parser.COLONCOLON) + self.state = 2622 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2621 + self.typeArguments() + + + self.state = 2624 + self.identifier() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2626 + self.match(Java20Parser.SUPER) + self.state = 2627 + self.match(Java20Parser.COLONCOLON) + self.state = 2629 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2628 + self.typeArguments() + + + self.state = 2631 + self.identifier() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2632 + self.typeName() + self.state = 2633 + self.match(Java20Parser.DOT) + self.state = 2634 + self.match(Java20Parser.SUPER) + self.state = 2635 + self.match(Java20Parser.COLONCOLON) + self.state = 2637 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2636 + self.typeArguments() + + + self.state = 2639 + self.identifier() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 2641 + self.classType() + self.state = 2642 + self.match(Java20Parser.COLONCOLON) + self.state = 2644 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==90: + self.state = 2643 + self.typeArguments() + + + self.state = 2646 + self.match(Java20Parser.NEW) + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 2648 + self.arrayType() + self.state = 2649 + self.match(Java20Parser.COLONCOLON) + self.state = 2650 + self.match(Java20Parser.NEW) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostfixExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def primary(self): + return self.getTypedRuleContext(Java20Parser.PrimaryContext,0) + + + def pfE(self): + return self.getTypedRuleContext(Java20Parser.PfEContext,0) + + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_postfixExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostfixExpression" ): + return visitor.visitPostfixExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postfixExpression(self): + + localctx = Java20Parser.PostfixExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 434, self.RULE_postfixExpression) + try: + self.state = 2662 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,325,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2654 + self.primary() + self.state = 2656 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,323,self._ctx) + if la_ == 1: + self.state = 2655 + self.pfE() + + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2658 + self.expressionName() + self.state = 2660 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,324,self._ctx) + if la_ == 1: + self.state = 2659 + self.pfE() + + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PfEContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def pfE(self): + return self.getTypedRuleContext(Java20Parser.PfEContext,0) + + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_pfE + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPfE" ): + return visitor.visitPfE(self) + else: + return visitor.visitChildren(self) + + + + + def pfE(self): + + localctx = Java20Parser.PfEContext(self, self._ctx, self.state) + self.enterRule(localctx, 436, self.RULE_pfE) + try: + self.state = 2672 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2664 + self.match(Java20Parser.INC) + self.state = 2666 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,326,self._ctx) + if la_ == 1: + self.state = 2665 + self.pfE() + + + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2668 + self.match(Java20Parser.DEC) + self.state = 2670 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,327,self._ctx) + if la_ == 1: + self.state = 2669 + self.pfE() + + + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext,0) + + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_postIncrementExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostIncrementExpression" ): + return visitor.visitPostIncrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postIncrementExpression(self): + + localctx = Java20Parser.PostIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 438, self.RULE_postIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2674 + self.postfixExpression() + self.state = 2675 + self.match(Java20Parser.INC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PostDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext,0) + + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_postDecrementExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPostDecrementExpression" ): + return visitor.visitPostDecrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def postDecrementExpression(self): + + localctx = Java20Parser.PostDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 440, self.RULE_postDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2677 + self.postfixExpression() + self.state = 2678 + self.match(Java20Parser.DEC) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def preIncrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreIncrementExpressionContext,0) + + + def preDecrementExpression(self): + return self.getTypedRuleContext(Java20Parser.PreDecrementExpressionContext,0) + + + def ADD(self): + return self.getToken(Java20Parser.ADD, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def SUB(self): + return self.getToken(Java20Parser.SUB, 0) + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionNotPlusMinusContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unaryExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryExpression" ): + return visitor.visitUnaryExpression(self) + else: + return visitor.visitChildren(self) + + + + + def unaryExpression(self): + + localctx = Java20Parser.UnaryExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 442, self.RULE_unaryExpression) + try: + self.state = 2687 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [102]: + self.enterOuterAlt(localctx, 1) + self.state = 2680 + self.preIncrementExpression() + pass + elif token in [103]: + self.enterOuterAlt(localctx, 2) + self.state = 2681 + self.preDecrementExpression() + pass + elif token in [104]: + self.enterOuterAlt(localctx, 3) + self.state = 2682 + self.match(Java20Parser.ADD) + self.state = 2683 + self.unaryExpression() + pass + elif token in [105]: + self.enterOuterAlt(localctx, 4) + self.state = 2684 + self.match(Java20Parser.SUB) + self.state = 2685 + self.unaryExpression() + pass + elif token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 123]: + self.enterOuterAlt(localctx, 5) + self.state = 2686 + self.unaryExpressionNotPlusMinus() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PreIncrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def INC(self): + return self.getToken(Java20Parser.INC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_preIncrementExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPreIncrementExpression" ): + return visitor.visitPreIncrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def preIncrementExpression(self): + + localctx = Java20Parser.PreIncrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 444, self.RULE_preIncrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2689 + self.match(Java20Parser.INC) + self.state = 2690 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PreDecrementExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DEC(self): + return self.getToken(Java20Parser.DEC, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_preDecrementExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPreDecrementExpression" ): + return visitor.visitPreDecrementExpression(self) + else: + return visitor.visitChildren(self) + + + + + def preDecrementExpression(self): + + localctx = Java20Parser.PreDecrementExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 446, self.RULE_preDecrementExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2692 + self.match(Java20Parser.DEC) + self.state = 2693 + self.unaryExpression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class UnaryExpressionNotPlusMinusContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def postfixExpression(self): + return self.getTypedRuleContext(Java20Parser.PostfixExpressionContext,0) + + + def TILDE(self): + return self.getToken(Java20Parser.TILDE, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def BANG(self): + return self.getToken(Java20Parser.BANG, 0) + + def castExpression(self): + return self.getTypedRuleContext(Java20Parser.CastExpressionContext,0) + + + def switchExpression(self): + return self.getTypedRuleContext(Java20Parser.SwitchExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_unaryExpressionNotPlusMinus + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnaryExpressionNotPlusMinus" ): + return visitor.visitUnaryExpressionNotPlusMinus(self) + else: + return visitor.visitChildren(self) + + + + + def unaryExpressionNotPlusMinus(self): + + localctx = Java20Parser.UnaryExpressionNotPlusMinusContext(self, self._ctx, self.state) + self.enterRule(localctx, 448, self.RULE_unaryExpressionNotPlusMinus) + try: + self.state = 2702 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,330,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2695 + self.postfixExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2696 + self.match(Java20Parser.TILDE) + self.state = 2697 + self.unaryExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2698 + self.match(Java20Parser.BANG) + self.state = 2699 + self.unaryExpression() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 2700 + self.castExpression() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 2701 + self.switchExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CastExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def primitiveType(self): + return self.getTypedRuleContext(Java20Parser.PrimitiveTypeContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def unaryExpressionNotPlusMinus(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionNotPlusMinusContext,0) + + + def additionalBound(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.AdditionalBoundContext) + else: + return self.getTypedRuleContext(Java20Parser.AdditionalBoundContext,i) + + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_castExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitCastExpression" ): + return visitor.visitCastExpression(self) + else: + return visitor.visitChildren(self) + + + + + def castExpression(self): + + localctx = Java20Parser.CastExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 450, self.RULE_castExpression) + self._la = 0 # Token type + try: + self.state = 2731 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,333,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2704 + self.match(Java20Parser.LPAREN) + self.state = 2705 + self.primitiveType() + self.state = 2706 + self.match(Java20Parser.RPAREN) + self.state = 2707 + self.unaryExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2709 + self.match(Java20Parser.LPAREN) + self.state = 2710 + self.referenceType() + self.state = 2714 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 2711 + self.additionalBound() + self.state = 2716 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2717 + self.match(Java20Parser.RPAREN) + self.state = 2718 + self.unaryExpressionNotPlusMinus() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2720 + self.match(Java20Parser.LPAREN) + self.state = 2721 + self.referenceType() + self.state = 2725 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==108: + self.state = 2722 + self.additionalBound() + self.state = 2727 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2728 + self.match(Java20Parser.RPAREN) + self.state = 2729 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MultiplicativeExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unaryExpression(self): + return self.getTypedRuleContext(Java20Parser.UnaryExpressionContext,0) + + + def multiplicativeExpression(self): + return self.getTypedRuleContext(Java20Parser.MultiplicativeExpressionContext,0) + + + def MUL(self): + return self.getToken(Java20Parser.MUL, 0) + + def DIV(self): + return self.getToken(Java20Parser.DIV, 0) + + def MOD(self): + return self.getToken(Java20Parser.MOD, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_multiplicativeExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMultiplicativeExpression" ): + return visitor.visitMultiplicativeExpression(self) + else: + return visitor.visitChildren(self) + + + + def multiplicativeExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.MultiplicativeExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 452 + self.enterRecursionRule(localctx, 452, self.RULE_multiplicativeExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2734 + self.unaryExpression() + self._ctx.stop = self._input.LT(-1) + self.state = 2747 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2745 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,334,self._ctx) + if la_ == 1: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2736 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2737 + self.match(Java20Parser.MUL) + self.state = 2738 + self.unaryExpression() + pass + + elif la_ == 2: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2739 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2740 + self.match(Java20Parser.DIV) + self.state = 2741 + self.unaryExpression() + pass + + elif la_ == 3: + localctx = Java20Parser.MultiplicativeExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_multiplicativeExpression) + self.state = 2742 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2743 + self.match(Java20Parser.MOD) + self.state = 2744 + self.unaryExpression() + pass + + + self.state = 2749 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class AdditiveExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def multiplicativeExpression(self): + return self.getTypedRuleContext(Java20Parser.MultiplicativeExpressionContext,0) + + + def additiveExpression(self): + return self.getTypedRuleContext(Java20Parser.AdditiveExpressionContext,0) + + + def ADD(self): + return self.getToken(Java20Parser.ADD, 0) + + def SUB(self): + return self.getToken(Java20Parser.SUB, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_additiveExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAdditiveExpression" ): + return visitor.visitAdditiveExpression(self) + else: + return visitor.visitChildren(self) + + + + def additiveExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.AdditiveExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 454 + self.enterRecursionRule(localctx, 454, self.RULE_additiveExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2751 + self.multiplicativeExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2761 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,337,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2759 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,336,self._ctx) + if la_ == 1: + localctx = Java20Parser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2753 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2754 + self.match(Java20Parser.ADD) + self.state = 2755 + self.multiplicativeExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.AdditiveExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_additiveExpression) + self.state = 2756 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2757 + self.match(Java20Parser.SUB) + self.state = 2758 + self.multiplicativeExpression(0) + pass + + + self.state = 2763 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,337,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ShiftExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def additiveExpression(self): + return self.getTypedRuleContext(Java20Parser.AdditiveExpressionContext,0) + + + def shiftExpression(self): + return self.getTypedRuleContext(Java20Parser.ShiftExpressionContext,0) + + + def LT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.LT) + else: + return self.getToken(Java20Parser.LT, i) + + def GT(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.GT) + else: + return self.getToken(Java20Parser.GT, i) + + def getRuleIndex(self): + return Java20Parser.RULE_shiftExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitShiftExpression" ): + return visitor.visitShiftExpression(self) + else: + return visitor.visitChildren(self) + + + + def shiftExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ShiftExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 456 + self.enterRecursionRule(localctx, 456, self.RULE_shiftExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2765 + self.additiveExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2782 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,339,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 = 2780 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,338,self._ctx) + if la_ == 1: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2767 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2768 + self.match(Java20Parser.LT) + self.state = 2769 + self.match(Java20Parser.LT) + self.state = 2770 + self.additiveExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2771 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2772 + self.match(Java20Parser.GT) + self.state = 2773 + self.match(Java20Parser.GT) + self.state = 2774 + self.additiveExpression(0) + pass + + elif la_ == 3: + localctx = Java20Parser.ShiftExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpression) + self.state = 2775 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2776 + self.match(Java20Parser.GT) + self.state = 2777 + self.match(Java20Parser.GT) + self.state = 2778 + self.match(Java20Parser.GT) + self.state = 2779 + self.additiveExpression(0) + pass + + + self.state = 2784 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,339,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class RelationalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def shiftExpression(self): + return self.getTypedRuleContext(Java20Parser.ShiftExpressionContext,0) + + + def relationalExpression(self): + return self.getTypedRuleContext(Java20Parser.RelationalExpressionContext,0) + + + def LT(self): + return self.getToken(Java20Parser.LT, 0) + + def GT(self): + return self.getToken(Java20Parser.GT, 0) + + def LE(self): + return self.getToken(Java20Parser.LE, 0) + + def GE(self): + return self.getToken(Java20Parser.GE, 0) + + def INSTANCEOF(self): + return self.getToken(Java20Parser.INSTANCEOF, 0) + + def referenceType(self): + return self.getTypedRuleContext(Java20Parser.ReferenceTypeContext,0) + + + def pattern(self): + return self.getTypedRuleContext(Java20Parser.PatternContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_relationalExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitRelationalExpression" ): + return visitor.visitRelationalExpression(self) + else: + return visitor.visitChildren(self) + + + + def relationalExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.RelationalExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 458 + self.enterRecursionRule(localctx, 458, self.RULE_relationalExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2786 + self.shiftExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2808 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,342,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2806 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,341,self._ctx) + if la_ == 1: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2788 + if not self.precpred(self._ctx, 5): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") + self.state = 2789 + self.match(Java20Parser.LT) + self.state = 2790 + self.shiftExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2791 + if not self.precpred(self._ctx, 4): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") + self.state = 2792 + self.match(Java20Parser.GT) + self.state = 2793 + self.shiftExpression(0) + pass + + elif la_ == 3: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2794 + if not self.precpred(self._ctx, 3): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 2795 + self.match(Java20Parser.LE) + self.state = 2796 + self.shiftExpression(0) + pass + + elif la_ == 4: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2797 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2798 + self.match(Java20Parser.GE) + self.state = 2799 + self.shiftExpression(0) + pass + + elif la_ == 5: + localctx = Java20Parser.RelationalExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpression) + self.state = 2800 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2801 + self.match(Java20Parser.INSTANCEOF) + self.state = 2804 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,340,self._ctx) + if la_ == 1: + self.state = 2802 + self.referenceType() + pass + + elif la_ == 2: + self.state = 2803 + self.pattern() + pass + + + pass + + + self.state = 2810 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,342,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class EqualityExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def relationalExpression(self): + return self.getTypedRuleContext(Java20Parser.RelationalExpressionContext,0) + + + def equalityExpression(self): + return self.getTypedRuleContext(Java20Parser.EqualityExpressionContext,0) + + + def EQUAL(self): + return self.getToken(Java20Parser.EQUAL, 0) + + def NOTEQUAL(self): + return self.getToken(Java20Parser.NOTEQUAL, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_equalityExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEqualityExpression" ): + return visitor.visitEqualityExpression(self) + else: + return visitor.visitChildren(self) + + + + def equalityExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.EqualityExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 460 + self.enterRecursionRule(localctx, 460, self.RULE_equalityExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2812 + self.relationalExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2822 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 2820 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,343,self._ctx) + if la_ == 1: + localctx = Java20Parser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2814 + if not self.precpred(self._ctx, 2): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") + self.state = 2815 + self.match(Java20Parser.EQUAL) + self.state = 2816 + self.relationalExpression(0) + pass + + elif la_ == 2: + localctx = Java20Parser.EqualityExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_equalityExpression) + self.state = 2817 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2818 + self.match(Java20Parser.NOTEQUAL) + self.state = 2819 + self.relationalExpression(0) + pass + + + self.state = 2824 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class AndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def equalityExpression(self): + return self.getTypedRuleContext(Java20Parser.EqualityExpressionContext,0) + + + def andExpression(self): + return self.getTypedRuleContext(Java20Parser.AndExpressionContext,0) + + + def BITAND(self): + return self.getToken(Java20Parser.BITAND, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_andExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAndExpression" ): + return visitor.visitAndExpression(self) + else: + return visitor.visitChildren(self) + + + + def andExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.AndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 462 + self.enterRecursionRule(localctx, 462, self.RULE_andExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2826 + self.equalityExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2833 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.AndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_andExpression) + self.state = 2828 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2829 + self.match(Java20Parser.BITAND) + self.state = 2830 + self.equalityExpression(0) + self.state = 2835 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ExclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def andExpression(self): + return self.getTypedRuleContext(Java20Parser.AndExpressionContext,0) + + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ExclusiveOrExpressionContext,0) + + + def CARET(self): + return self.getToken(Java20Parser.CARET, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_exclusiveOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitExclusiveOrExpression" ): + return visitor.visitExclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def exclusiveOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ExclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 464 + self.enterRecursionRule(localctx, 464, self.RULE_exclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2837 + self.andExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2844 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,346,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ExclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_exclusiveOrExpression) + self.state = 2839 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2840 + self.match(Java20Parser.CARET) + self.state = 2841 + self.andExpression(0) + self.state = 2846 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,346,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class InclusiveOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def exclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ExclusiveOrExpressionContext,0) + + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.InclusiveOrExpressionContext,0) + + + def BITOR(self): + return self.getToken(Java20Parser.BITOR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_inclusiveOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInclusiveOrExpression" ): + return visitor.visitInclusiveOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def inclusiveOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.InclusiveOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 466 + self.enterRecursionRule(localctx, 466, self.RULE_inclusiveOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2848 + self.exclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2855 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,347,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.InclusiveOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_inclusiveOrExpression) + self.state = 2850 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2851 + self.match(Java20Parser.BITOR) + self.state = 2852 + self.exclusiveOrExpression(0) + self.state = 2857 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,347,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalAndExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def inclusiveOrExpression(self): + return self.getTypedRuleContext(Java20Parser.InclusiveOrExpressionContext,0) + + + def conditionalAndExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalAndExpressionContext,0) + + + def AND(self): + return self.getToken(Java20Parser.AND, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalAndExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalAndExpression" ): + return visitor.visitConditionalAndExpression(self) + else: + return visitor.visitChildren(self) + + + + def conditionalAndExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ConditionalAndExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 468 + self.enterRecursionRule(localctx, 468, self.RULE_conditionalAndExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2859 + self.inclusiveOrExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2866 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,348,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ConditionalAndExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalAndExpression) + self.state = 2861 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2862 + self.match(Java20Parser.AND) + self.state = 2863 + self.inclusiveOrExpression(0) + self.state = 2868 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,348,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalOrExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalAndExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalAndExpressionContext,0) + + + def conditionalOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalOrExpressionContext,0) + + + def OR(self): + return self.getToken(Java20Parser.OR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalOrExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalOrExpression" ): + return visitor.visitConditionalOrExpression(self) + else: + return visitor.visitChildren(self) + + + + def conditionalOrExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = Java20Parser.ConditionalOrExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 470 + self.enterRecursionRule(localctx, 470, self.RULE_conditionalOrExpression, _p) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2870 + self.conditionalAndExpression(0) + self._ctx.stop = self._input.LT(-1) + self.state = 2877 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,349,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + localctx = Java20Parser.ConditionalOrExpressionContext(self, _parentctx, _parentState) + self.pushNewRecursionContext(localctx, _startState, self.RULE_conditionalOrExpression) + self.state = 2872 + if not self.precpred(self._ctx, 1): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") + self.state = 2873 + self.match(Java20Parser.OR) + self.state = 2874 + self.conditionalAndExpression(0) + self.state = 2879 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,349,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class ConditionalExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalOrExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalOrExpressionContext,0) + + + def QUESTION(self): + return self.getToken(Java20Parser.QUESTION, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def COLON(self): + return self.getToken(Java20Parser.COLON, 0) + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext,0) + + + def lambdaExpression(self): + return self.getTypedRuleContext(Java20Parser.LambdaExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_conditionalExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConditionalExpression" ): + return visitor.visitConditionalExpression(self) + else: + return visitor.visitChildren(self) + + + + + def conditionalExpression(self): + + localctx = Java20Parser.ConditionalExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 472, self.RULE_conditionalExpression) + try: + self.state = 2893 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,350,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2880 + self.conditionalOrExpression(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2881 + self.conditionalOrExpression(0) + self.state = 2882 + self.match(Java20Parser.QUESTION) + self.state = 2883 + self.expression() + self.state = 2884 + self.match(Java20Parser.COLON) + self.state = 2885 + self.conditionalExpression() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2887 + self.conditionalOrExpression(0) + self.state = 2888 + self.match(Java20Parser.QUESTION) + self.state = 2889 + self.expression() + self.state = 2890 + self.match(Java20Parser.COLON) + self.state = 2891 + self.lambdaExpression() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def conditionalExpression(self): + return self.getTypedRuleContext(Java20Parser.ConditionalExpressionContext,0) + + + def assignment(self): + return self.getTypedRuleContext(Java20Parser.AssignmentContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_assignmentExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentExpression" ): + return visitor.visitAssignmentExpression(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentExpression(self): + + localctx = Java20Parser.AssignmentExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 474, self.RULE_assignmentExpression) + try: + self.state = 2897 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,351,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2895 + self.conditionalExpression() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2896 + self.assignment() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def leftHandSide(self): + return self.getTypedRuleContext(Java20Parser.LeftHandSideContext,0) + + + def assignmentOperator(self): + return self.getTypedRuleContext(Java20Parser.AssignmentOperatorContext,0) + + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_assignment + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignment" ): + return visitor.visitAssignment(self) + else: + return visitor.visitChildren(self) + + + + + def assignment(self): + + localctx = Java20Parser.AssignmentContext(self, self._ctx, self.state) + self.enterRule(localctx, 476, self.RULE_assignment) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2899 + self.leftHandSide() + self.state = 2900 + self.assignmentOperator() + self.state = 2901 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LeftHandSideContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionName(self): + return self.getTypedRuleContext(Java20Parser.ExpressionNameContext,0) + + + def fieldAccess(self): + return self.getTypedRuleContext(Java20Parser.FieldAccessContext,0) + + + def arrayAccess(self): + return self.getTypedRuleContext(Java20Parser.ArrayAccessContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_leftHandSide + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLeftHandSide" ): + return visitor.visitLeftHandSide(self) + else: + return visitor.visitChildren(self) + + + + + def leftHandSide(self): + + localctx = Java20Parser.LeftHandSideContext(self, self._ctx, self.state) + self.enterRule(localctx, 478, self.RULE_leftHandSide) + try: + self.state = 2906 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,352,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2903 + self.expressionName() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2904 + self.fieldAccess() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 2905 + self.arrayAccess() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ASSIGN(self): + return self.getToken(Java20Parser.ASSIGN, 0) + + def MUL_ASSIGN(self): + return self.getToken(Java20Parser.MUL_ASSIGN, 0) + + def DIV_ASSIGN(self): + return self.getToken(Java20Parser.DIV_ASSIGN, 0) + + def MOD_ASSIGN(self): + return self.getToken(Java20Parser.MOD_ASSIGN, 0) + + def ADD_ASSIGN(self): + return self.getToken(Java20Parser.ADD_ASSIGN, 0) + + def SUB_ASSIGN(self): + return self.getToken(Java20Parser.SUB_ASSIGN, 0) + + def LSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.LSHIFT_ASSIGN, 0) + + def RSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.RSHIFT_ASSIGN, 0) + + def URSHIFT_ASSIGN(self): + return self.getToken(Java20Parser.URSHIFT_ASSIGN, 0) + + def AND_ASSIGN(self): + return self.getToken(Java20Parser.AND_ASSIGN, 0) + + def XOR_ASSIGN(self): + return self.getToken(Java20Parser.XOR_ASSIGN, 0) + + def OR_ASSIGN(self): + return self.getToken(Java20Parser.OR_ASSIGN, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_assignmentOperator + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitAssignmentOperator" ): + return visitor.visitAssignmentOperator(self) + else: + return visitor.visitChildren(self) + + + + + def assignmentOperator(self): + + localctx = Java20Parser.AssignmentOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 480, self.RULE_assignmentOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 2908 + _la = self._input.LA(1) + if not(((((_la - 88)) & ~0x3f) == 0 and ((1 << (_la - 88)) & 34342961153) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameters(self): + return self.getTypedRuleContext(Java20Parser.LambdaParametersContext,0) + + + def ARROW(self): + return self.getToken(Java20Parser.ARROW, 0) + + def lambdaBody(self): + return self.getTypedRuleContext(Java20Parser.LambdaBodyContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaExpression" ): + return visitor.visitLambdaExpression(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaExpression(self): + + localctx = Java20Parser.LambdaExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 482, self.RULE_lambdaExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2910 + self.lambdaParameters() + self.state = 2911 + self.match(Java20Parser.ARROW) + self.state = 2912 + self.lambdaBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def lambdaParameterList(self): + return self.getTypedRuleContext(Java20Parser.LambdaParameterListContext,0) + + + def identifier(self): + return self.getTypedRuleContext(Java20Parser.IdentifierContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameters + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameters" ): + return visitor.visitLambdaParameters(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameters(self): + + localctx = Java20Parser.LambdaParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 484, self.RULE_lambdaParameters) + self._la = 0 # Token type + try: + self.state = 2920 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [76]: + self.enterOuterAlt(localctx, 1) + self.state = 2914 + self.match(Java20Parser.LPAREN) + self.state = 2916 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 18102533424938990) != 0) or _la==86 or _la==123: + self.state = 2915 + self.lambdaParameterList() + + + self.state = 2918 + self.match(Java20Parser.RPAREN) + pass + elif token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 123]: + self.enterOuterAlt(localctx, 2) + self.state = 2919 + self.identifier() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameter(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.LambdaParameterContext) + else: + return self.getTypedRuleContext(Java20Parser.LambdaParameterContext,i) + + + def COMMA(self, i:int=None): + if i is None: + return self.getTokens(Java20Parser.COMMA) + else: + return self.getToken(Java20Parser.COMMA, i) + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.IdentifierContext) + else: + return self.getTypedRuleContext(Java20Parser.IdentifierContext,i) + + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameterList + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameterList" ): + return visitor.visitLambdaParameterList(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameterList(self): + + localctx = Java20Parser.LambdaParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 486, self.RULE_lambdaParameterList) + self._la = 0 # Token type + try: + self.state = 2938 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,357,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2922 + self.lambdaParameter() + self.state = 2927 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2923 + self.match(Java20Parser.COMMA) + self.state = 2924 + self.lambdaParameter() + self.state = 2929 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2930 + self.identifier() + self.state = 2935 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==83: + self.state = 2931 + self.match(Java20Parser.COMMA) + self.state = 2932 + self.identifier() + self.state = 2937 + self._errHandler.sync(self) + _la = self._input.LA(1) + + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def lambdaParameterType(self): + return self.getTypedRuleContext(Java20Parser.LambdaParameterTypeContext,0) + + + def variableDeclaratorId(self): + return self.getTypedRuleContext(Java20Parser.VariableDeclaratorIdContext,0) + + + def variableModifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(Java20Parser.VariableModifierContext) + else: + return self.getTypedRuleContext(Java20Parser.VariableModifierContext,i) + + + def variableArityParameter(self): + return self.getTypedRuleContext(Java20Parser.VariableArityParameterContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameter + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameter" ): + return visitor.visitLambdaParameter(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameter(self): + + localctx = Java20Parser.LambdaParameterContext(self, self._ctx, self.state) + self.enterRule(localctx, 488, self.RULE_lambdaParameter) + self._la = 0 # Token type + try: + self.state = 2950 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,359,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2943 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==35 or _la==86: + self.state = 2940 + self.variableModifier() + self.state = 2945 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 2946 + self.lambdaParameterType() + self.state = 2947 + self.variableDeclaratorId() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2949 + self.variableArityParameter() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaParameterTypeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def unannType(self): + return self.getTypedRuleContext(Java20Parser.UnannTypeContext,0) + + + def VAR(self): + return self.getToken(Java20Parser.VAR, 0) + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaParameterType + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaParameterType" ): + return visitor.visitLambdaParameterType(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaParameterType(self): + + localctx = Java20Parser.LambdaParameterTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 490, self.RULE_lambdaParameterType) + try: + self.state = 2954 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,360,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 2952 + self.unannType() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 2953 + self.match(Java20Parser.VAR) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LambdaBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def block(self): + return self.getTypedRuleContext(Java20Parser.BlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_lambdaBody + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLambdaBody" ): + return visitor.visitLambdaBody(self) + else: + return visitor.visitChildren(self) + + + + + def lambdaBody(self): + + localctx = Java20Parser.LambdaBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 492, self.RULE_lambdaBody) + try: + self.state = 2958 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 25, 31, 37, 44, 46, 48, 54, 57, 58, 60, 65, 69, 70, 71, 72, 73, 74, 75, 76, 86, 91, 92, 102, 103, 104, 105, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 2956 + self.expression() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 2) + self.state = 2957 + self.block() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SWITCH(self): + return self.getToken(Java20Parser.SWITCH, 0) + + def LPAREN(self): + return self.getToken(Java20Parser.LPAREN, 0) + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def RPAREN(self): + return self.getToken(Java20Parser.RPAREN, 0) + + def switchBlock(self): + return self.getTypedRuleContext(Java20Parser.SwitchBlockContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_switchExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitSwitchExpression" ): + return visitor.visitSwitchExpression(self) + else: + return visitor.visitChildren(self) + + + + + def switchExpression(self): + + localctx = Java20Parser.SwitchExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 494, self.RULE_switchExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2960 + self.match(Java20Parser.SWITCH) + self.state = 2961 + self.match(Java20Parser.LPAREN) + self.state = 2962 + self.expression() + self.state = 2963 + self.match(Java20Parser.RPAREN) + self.state = 2964 + self.switchBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ConstantExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expression(self): + return self.getTypedRuleContext(Java20Parser.ExpressionContext,0) + + + def getRuleIndex(self): + return Java20Parser.RULE_constantExpression + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitConstantExpression" ): + return visitor.visitConstantExpression(self) + else: + return visitor.visitChildren(self) + + + + + def constantExpression(self): + + localctx = Java20Parser.ConstantExpressionContext(self, self._ctx, self.state) + self.enterRule(localctx, 496, self.RULE_constantExpression) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2966 + self.expression() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[226] = self.multiplicativeExpression_sempred + self._predicates[227] = self.additiveExpression_sempred + self._predicates[228] = self.shiftExpression_sempred + self._predicates[229] = self.relationalExpression_sempred + self._predicates[230] = self.equalityExpression_sempred + self._predicates[231] = self.andExpression_sempred + self._predicates[232] = self.exclusiveOrExpression_sempred + self._predicates[233] = self.inclusiveOrExpression_sempred + self._predicates[234] = self.conditionalAndExpression_sempred + self._predicates[235] = self.conditionalOrExpression_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def multiplicativeExpression_sempred(self, localctx:MultiplicativeExpressionContext, predIndex:int): + if predIndex == 0: + return self.precpred(self._ctx, 3) + + + if predIndex == 1: + return self.precpred(self._ctx, 2) + + + if predIndex == 2: + return self.precpred(self._ctx, 1) + + + def additiveExpression_sempred(self, localctx:AdditiveExpressionContext, predIndex:int): + if predIndex == 3: + return self.precpred(self._ctx, 2) + + + if predIndex == 4: + return self.precpred(self._ctx, 1) + + + def shiftExpression_sempred(self, localctx:ShiftExpressionContext, predIndex:int): + if predIndex == 5: + return self.precpred(self._ctx, 3) + + + if predIndex == 6: + return self.precpred(self._ctx, 2) + + + if predIndex == 7: + return self.precpred(self._ctx, 1) + + + def relationalExpression_sempred(self, localctx:RelationalExpressionContext, predIndex:int): + if predIndex == 8: + return self.precpred(self._ctx, 5) + + + if predIndex == 9: + return self.precpred(self._ctx, 4) + + + if predIndex == 10: + return self.precpred(self._ctx, 3) + + + if predIndex == 11: + return self.precpred(self._ctx, 2) + + + if predIndex == 12: + return self.precpred(self._ctx, 1) + + + def equalityExpression_sempred(self, localctx:EqualityExpressionContext, predIndex:int): + if predIndex == 13: + return self.precpred(self._ctx, 2) + + + if predIndex == 14: + return self.precpred(self._ctx, 1) + + + def andExpression_sempred(self, localctx:AndExpressionContext, predIndex:int): + if predIndex == 15: + return self.precpred(self._ctx, 1) + + + def exclusiveOrExpression_sempred(self, localctx:ExclusiveOrExpressionContext, predIndex:int): + if predIndex == 16: + return self.precpred(self._ctx, 1) + + + def inclusiveOrExpression_sempred(self, localctx:InclusiveOrExpressionContext, predIndex:int): + if predIndex == 17: + return self.precpred(self._ctx, 1) + + + def conditionalAndExpression_sempred(self, localctx:ConditionalAndExpressionContext, predIndex:int): + if predIndex == 18: + return self.precpred(self._ctx, 1) + + + def conditionalOrExpression_sempred(self, localctx:ConditionalOrExpressionContext, predIndex:int): + if predIndex == 19: + return self.precpred(self._ctx, 1) + + + + + diff --git a/csim/java/Java20Parser.tokens b/csim/java/Java20Parser.tokens new file mode 100644 index 0000000..891a5f2 --- /dev/null +++ b/csim/java/Java20Parser.tokens @@ -0,0 +1,242 @@ +EXPORTS=1 +MODULE=2 +NONSEALED=3 +OACA=4 +OPEN=5 +OPENS=6 +PERMITS=7 +PROVIDES=8 +RECORD=9 +REQUIRES=10 +SEALED=11 +TO=12 +TRANSITIVE=13 +USES=14 +VAR=15 +WITH=16 +YIELD=17 +ABSTRACT=18 +ASSERT=19 +BOOLEAN=20 +BREAK=21 +BYTE=22 +CASE=23 +CATCH=24 +CHAR=25 +CLASS=26 +CONST=27 +CONTINUE=28 +DEFAULT=29 +DO=30 +DOUBLE=31 +ELSE=32 +ENUM=33 +EXTENDS=34 +FINAL=35 +FINALLY=36 +FLOAT=37 +FOR=38 +IF=39 +GOTO=40 +IMPLEMENTS=41 +IMPORT=42 +INSTANCEOF=43 +INT=44 +INTERFACE=45 +LONG=46 +NATIVE=47 +NEW=48 +PACKAGE=49 +PRIVATE=50 +PROTECTED=51 +PUBLIC=52 +RETURN=53 +SHORT=54 +STATIC=55 +STRICTFP=56 +SUPER=57 +SWITCH=58 +SYNCHRONIZED=59 +THIS=60 +THROW=61 +THROWS=62 +TRANSIENT=63 +TRY=64 +VOID=65 +VOLATILE=66 +WHILE=67 +UNDER_SCORE=68 +IntegerLiteral=69 +FloatingPointLiteral=70 +BooleanLiteral=71 +CharacterLiteral=72 +StringLiteral=73 +TextBlock=74 +NullLiteral=75 +LPAREN=76 +RPAREN=77 +LBRACE=78 +RBRACE=79 +LBRACK=80 +RBRACK=81 +SEMI=82 +COMMA=83 +DOT=84 +ELLIPSIS=85 +AT=86 +COLONCOLON=87 +ASSIGN=88 +GT=89 +LT=90 +BANG=91 +TILDE=92 +QUESTION=93 +COLON=94 +ARROW=95 +EQUAL=96 +LE=97 +GE=98 +NOTEQUAL=99 +AND=100 +OR=101 +INC=102 +DEC=103 +ADD=104 +SUB=105 +MUL=106 +DIV=107 +BITAND=108 +BITOR=109 +CARET=110 +MOD=111 +ADD_ASSIGN=112 +SUB_ASSIGN=113 +MUL_ASSIGN=114 +DIV_ASSIGN=115 +AND_ASSIGN=116 +OR_ASSIGN=117 +XOR_ASSIGN=118 +MOD_ASSIGN=119 +LSHIFT_ASSIGN=120 +RSHIFT_ASSIGN=121 +URSHIFT_ASSIGN=122 +Identifier=123 +WS=124 +COMMENT=125 +LINE_COMMENT=126 +'exports'=1 +'module'=2 +'non-sealed'=3 +'<>'=4 +'open'=5 +'opens'=6 +'permits'=7 +'provides'=8 +'record'=9 +'requires'=10 +'sealed'=11 +'to'=12 +'transitive'=13 +'uses'=14 +'var'=15 +'with'=16 +'yield'=17 +'abstract'=18 +'assert'=19 +'boolean'=20 +'break'=21 +'byte'=22 +'case'=23 +'catch'=24 +'char'=25 +'class'=26 +'const'=27 +'continue'=28 +'default'=29 +'do'=30 +'double'=31 +'else'=32 +'enum'=33 +'extends'=34 +'final'=35 +'finally'=36 +'float'=37 +'for'=38 +'if'=39 +'goto'=40 +'implements'=41 +'import'=42 +'instanceof'=43 +'int'=44 +'interface'=45 +'long'=46 +'native'=47 +'new'=48 +'package'=49 +'private'=50 +'protected'=51 +'public'=52 +'return'=53 +'short'=54 +'static'=55 +'strictfp'=56 +'super'=57 +'switch'=58 +'synchronized'=59 +'this'=60 +'throw'=61 +'throws'=62 +'transient'=63 +'try'=64 +'void'=65 +'volatile'=66 +'while'=67 +'_'=68 +'null'=75 +'('=76 +')'=77 +'{'=78 +'}'=79 +'['=80 +']'=81 +';'=82 +','=83 +'.'=84 +'...'=85 +'@'=86 +'::'=87 +'='=88 +'>'=89 +'<'=90 +'!'=91 +'~'=92 +'?'=93 +':'=94 +'->'=95 +'=='=96 +'<='=97 +'>='=98 +'!='=99 +'&&'=100 +'||'=101 +'++'=102 +'--'=103 +'+'=104 +'-'=105 +'*'=106 +'/'=107 +'&'=108 +'|'=109 +'^'=110 +'%'=111 +'+='=112 +'-='=113 +'*='=114 +'/='=115 +'&='=116 +'|='=117 +'^='=118 +'%='=119 +'<<='=120 +'>>='=121 +'>>>='=122 diff --git a/csim/java/Java20ParserVisitor.py b/csim/java/Java20ParserVisitor.py new file mode 100644 index 0000000..1fa3bb9 --- /dev/null +++ b/csim/java/Java20ParserVisitor.py @@ -0,0 +1,1258 @@ +# Generated from Java20Parser.g4 by ANTLR 4.13.2 +from antlr4 import * +if "." in __name__: + from .Java20Parser import Java20Parser +else: + from Java20Parser import Java20Parser + +# This class defines a complete generic visitor for a parse tree produced by Java20Parser. + +class Java20ParserVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by Java20Parser#start_. + def visitStart_(self, ctx:Java20Parser.Start_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#identifier. + def visitIdentifier(self, ctx:Java20Parser.IdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeIdentifier. + def visitTypeIdentifier(self, ctx:Java20Parser.TypeIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unqualifiedMethodIdentifier. + def visitUnqualifiedMethodIdentifier(self, ctx:Java20Parser.UnqualifiedMethodIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#contextualKeyword. + def visitContextualKeyword(self, ctx:Java20Parser.ContextualKeywordContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#contextualKeywordMinusForTypeIdentifier. + def visitContextualKeywordMinusForTypeIdentifier(self, ctx:Java20Parser.ContextualKeywordMinusForTypeIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#contextualKeywordMinusForUnqualifiedMethodIdentifier. + def visitContextualKeywordMinusForUnqualifiedMethodIdentifier(self, ctx:Java20Parser.ContextualKeywordMinusForUnqualifiedMethodIdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#literal. + def visitLiteral(self, ctx:Java20Parser.LiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primitiveType. + def visitPrimitiveType(self, ctx:Java20Parser.PrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#numericType. + def visitNumericType(self, ctx:Java20Parser.NumericTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#integralType. + def visitIntegralType(self, ctx:Java20Parser.IntegralTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#floatingPointType. + def visitFloatingPointType(self, ctx:Java20Parser.FloatingPointTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#referenceType. + def visitReferenceType(self, ctx:Java20Parser.ReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#coit. + def visitCoit(self, ctx:Java20Parser.CoitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classOrInterfaceType. + def visitClassOrInterfaceType(self, ctx:Java20Parser.ClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classType. + def visitClassType(self, ctx:Java20Parser.ClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceType. + def visitInterfaceType(self, ctx:Java20Parser.InterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeVariable. + def visitTypeVariable(self, ctx:Java20Parser.TypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayType. + def visitArrayType(self, ctx:Java20Parser.ArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dims. + def visitDims(self, ctx:Java20Parser.DimsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameter. + def visitTypeParameter(self, ctx:Java20Parser.TypeParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameterModifier. + def visitTypeParameterModifier(self, ctx:Java20Parser.TypeParameterModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeBound. + def visitTypeBound(self, ctx:Java20Parser.TypeBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#additionalBound. + def visitAdditionalBound(self, ctx:Java20Parser.AdditionalBoundContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArguments. + def visitTypeArguments(self, ctx:Java20Parser.TypeArgumentsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgumentList. + def visitTypeArgumentList(self, ctx:Java20Parser.TypeArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgument. + def visitTypeArgument(self, ctx:Java20Parser.TypeArgumentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#wildcard. + def visitWildcard(self, ctx:Java20Parser.WildcardContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#wildcardBounds. + def visitWildcardBounds(self, ctx:Java20Parser.WildcardBoundsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleName. + def visitModuleName(self, ctx:Java20Parser.ModuleNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageName. + def visitPackageName(self, ctx:Java20Parser.PackageNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeName. + def visitTypeName(self, ctx:Java20Parser.TypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageOrTypeName. + def visitPackageOrTypeName(self, ctx:Java20Parser.PackageOrTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expressionName. + def visitExpressionName(self, ctx:Java20Parser.ExpressionNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodName. + def visitMethodName(self, ctx:Java20Parser.MethodNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ambiguousName. + def visitAmbiguousName(self, ctx:Java20Parser.AmbiguousNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#compilationUnit. + def visitCompilationUnit(self, ctx:Java20Parser.CompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ordinaryCompilationUnit. + def visitOrdinaryCompilationUnit(self, ctx:Java20Parser.OrdinaryCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#modularCompilationUnit. + def visitModularCompilationUnit(self, ctx:Java20Parser.ModularCompilationUnitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageDeclaration. + def visitPackageDeclaration(self, ctx:Java20Parser.PackageDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#packageModifier. + def visitPackageModifier(self, ctx:Java20Parser.PackageModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#importDeclaration. + def visitImportDeclaration(self, ctx:Java20Parser.ImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleTypeImportDeclaration. + def visitSingleTypeImportDeclaration(self, ctx:Java20Parser.SingleTypeImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeImportOnDemandDeclaration. + def visitTypeImportOnDemandDeclaration(self, ctx:Java20Parser.TypeImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleStaticImportDeclaration. + def visitSingleStaticImportDeclaration(self, ctx:Java20Parser.SingleStaticImportDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#staticImportOnDemandDeclaration. + def visitStaticImportOnDemandDeclaration(self, ctx:Java20Parser.StaticImportOnDemandDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#topLevelClassOrInterfaceDeclaration. + def visitTopLevelClassOrInterfaceDeclaration(self, ctx:Java20Parser.TopLevelClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleDeclaration. + def visitModuleDeclaration(self, ctx:Java20Parser.ModuleDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#moduleDirective. + def visitModuleDirective(self, ctx:Java20Parser.ModuleDirectiveContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#requiresModifier. + def visitRequiresModifier(self, ctx:Java20Parser.RequiresModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classDeclaration. + def visitClassDeclaration(self, ctx:Java20Parser.ClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalClassDeclaration. + def visitNormalClassDeclaration(self, ctx:Java20Parser.NormalClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classModifier. + def visitClassModifier(self, ctx:Java20Parser.ClassModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameters. + def visitTypeParameters(self, ctx:Java20Parser.TypeParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeParameterList. + def visitTypeParameterList(self, ctx:Java20Parser.TypeParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classExtends. + def visitClassExtends(self, ctx:Java20Parser.ClassExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classImplements. + def visitClassImplements(self, ctx:Java20Parser.ClassImplementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceTypeList. + def visitInterfaceTypeList(self, ctx:Java20Parser.InterfaceTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classPermits. + def visitClassPermits(self, ctx:Java20Parser.ClassPermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classBody. + def visitClassBody(self, ctx:Java20Parser.ClassBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classBodyDeclaration. + def visitClassBodyDeclaration(self, ctx:Java20Parser.ClassBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classMemberDeclaration. + def visitClassMemberDeclaration(self, ctx:Java20Parser.ClassMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldDeclaration. + def visitFieldDeclaration(self, ctx:Java20Parser.FieldDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldModifier. + def visitFieldModifier(self, ctx:Java20Parser.FieldModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclaratorList. + def visitVariableDeclaratorList(self, ctx:Java20Parser.VariableDeclaratorListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclarator. + def visitVariableDeclarator(self, ctx:Java20Parser.VariableDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableDeclaratorId. + def visitVariableDeclaratorId(self, ctx:Java20Parser.VariableDeclaratorIdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableInitializer. + def visitVariableInitializer(self, ctx:Java20Parser.VariableInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannType. + def visitUnannType(self, ctx:Java20Parser.UnannTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannPrimitiveType. + def visitUnannPrimitiveType(self, ctx:Java20Parser.UnannPrimitiveTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannReferenceType. + def visitUnannReferenceType(self, ctx:Java20Parser.UnannReferenceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannClassOrInterfaceType. + def visitUnannClassOrInterfaceType(self, ctx:Java20Parser.UnannClassOrInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#uCOIT. + def visitUCOIT(self, ctx:Java20Parser.UCOITContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannClassType. + def visitUnannClassType(self, ctx:Java20Parser.UnannClassTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannInterfaceType. + def visitUnannInterfaceType(self, ctx:Java20Parser.UnannInterfaceTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannTypeVariable. + def visitUnannTypeVariable(self, ctx:Java20Parser.UnannTypeVariableContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unannArrayType. + def visitUnannArrayType(self, ctx:Java20Parser.UnannArrayTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodDeclaration. + def visitMethodDeclaration(self, ctx:Java20Parser.MethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodModifier. + def visitMethodModifier(self, ctx:Java20Parser.MethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodHeader. + def visitMethodHeader(self, ctx:Java20Parser.MethodHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#result. + def visitResult(self, ctx:Java20Parser.ResultContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodDeclarator. + def visitMethodDeclarator(self, ctx:Java20Parser.MethodDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#receiverParameter. + def visitReceiverParameter(self, ctx:Java20Parser.ReceiverParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#formalParameterList. + def visitFormalParameterList(self, ctx:Java20Parser.FormalParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#formalParameter. + def visitFormalParameter(self, ctx:Java20Parser.FormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableArityParameter. + def visitVariableArityParameter(self, ctx:Java20Parser.VariableArityParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableModifier. + def visitVariableModifier(self, ctx:Java20Parser.VariableModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#throwsT. + def visitThrowsT(self, ctx:Java20Parser.ThrowsTContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exceptionTypeList. + def visitExceptionTypeList(self, ctx:Java20Parser.ExceptionTypeListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exceptionType. + def visitExceptionType(self, ctx:Java20Parser.ExceptionTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodBody. + def visitMethodBody(self, ctx:Java20Parser.MethodBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#instanceInitializer. + def visitInstanceInitializer(self, ctx:Java20Parser.InstanceInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#staticInitializer. + def visitStaticInitializer(self, ctx:Java20Parser.StaticInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorDeclaration. + def visitConstructorDeclaration(self, ctx:Java20Parser.ConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorModifier. + def visitConstructorModifier(self, ctx:Java20Parser.ConstructorModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorDeclarator. + def visitConstructorDeclarator(self, ctx:Java20Parser.ConstructorDeclaratorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#simpleTypeName. + def visitSimpleTypeName(self, ctx:Java20Parser.SimpleTypeNameContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constructorBody. + def visitConstructorBody(self, ctx:Java20Parser.ConstructorBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#explicitConstructorInvocation. + def visitExplicitConstructorInvocation(self, ctx:Java20Parser.ExplicitConstructorInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumDeclaration. + def visitEnumDeclaration(self, ctx:Java20Parser.EnumDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumBody. + def visitEnumBody(self, ctx:Java20Parser.EnumBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstantList. + def visitEnumConstantList(self, ctx:Java20Parser.EnumConstantListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstant. + def visitEnumConstant(self, ctx:Java20Parser.EnumConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumConstantModifier. + def visitEnumConstantModifier(self, ctx:Java20Parser.EnumConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enumBodyDeclarations. + def visitEnumBodyDeclarations(self, ctx:Java20Parser.EnumBodyDeclarationsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordDeclaration. + def visitRecordDeclaration(self, ctx:Java20Parser.RecordDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordHeader. + def visitRecordHeader(self, ctx:Java20Parser.RecordHeaderContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponentList. + def visitRecordComponentList(self, ctx:Java20Parser.RecordComponentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponent. + def visitRecordComponent(self, ctx:Java20Parser.RecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableArityRecordComponent. + def visitVariableArityRecordComponent(self, ctx:Java20Parser.VariableArityRecordComponentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordComponentModifier. + def visitRecordComponentModifier(self, ctx:Java20Parser.RecordComponentModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordBody. + def visitRecordBody(self, ctx:Java20Parser.RecordBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#recordBodyDeclaration. + def visitRecordBodyDeclaration(self, ctx:Java20Parser.RecordBodyDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#compactConstructorDeclaration. + def visitCompactConstructorDeclaration(self, ctx:Java20Parser.CompactConstructorDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceDeclaration. + def visitInterfaceDeclaration(self, ctx:Java20Parser.InterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalInterfaceDeclaration. + def visitNormalInterfaceDeclaration(self, ctx:Java20Parser.NormalInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceModifier. + def visitInterfaceModifier(self, ctx:Java20Parser.InterfaceModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceExtends. + def visitInterfaceExtends(self, ctx:Java20Parser.InterfaceExtendsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfacePermits. + def visitInterfacePermits(self, ctx:Java20Parser.InterfacePermitsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceBody. + def visitInterfaceBody(self, ctx:Java20Parser.InterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMemberDeclaration. + def visitInterfaceMemberDeclaration(self, ctx:Java20Parser.InterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantDeclaration. + def visitConstantDeclaration(self, ctx:Java20Parser.ConstantDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantModifier. + def visitConstantModifier(self, ctx:Java20Parser.ConstantModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMethodDeclaration. + def visitInterfaceMethodDeclaration(self, ctx:Java20Parser.InterfaceMethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#interfaceMethodModifier. + def visitInterfaceMethodModifier(self, ctx:Java20Parser.InterfaceMethodModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceDeclaration. + def visitAnnotationInterfaceDeclaration(self, ctx:Java20Parser.AnnotationInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceBody. + def visitAnnotationInterfaceBody(self, ctx:Java20Parser.AnnotationInterfaceBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceMemberDeclaration. + def visitAnnotationInterfaceMemberDeclaration(self, ctx:Java20Parser.AnnotationInterfaceMemberDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceElementDeclaration. + def visitAnnotationInterfaceElementDeclaration(self, ctx:Java20Parser.AnnotationInterfaceElementDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotationInterfaceElementModifier. + def visitAnnotationInterfaceElementModifier(self, ctx:Java20Parser.AnnotationInterfaceElementModifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#defaultValue. + def visitDefaultValue(self, ctx:Java20Parser.DefaultValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#annotation. + def visitAnnotation(self, ctx:Java20Parser.AnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#normalAnnotation. + def visitNormalAnnotation(self, ctx:Java20Parser.NormalAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValuePairList. + def visitElementValuePairList(self, ctx:Java20Parser.ElementValuePairListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValuePair. + def visitElementValuePair(self, ctx:Java20Parser.ElementValuePairContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValue. + def visitElementValue(self, ctx:Java20Parser.ElementValueContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValueArrayInitializer. + def visitElementValueArrayInitializer(self, ctx:Java20Parser.ElementValueArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#elementValueList. + def visitElementValueList(self, ctx:Java20Parser.ElementValueListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#markerAnnotation. + def visitMarkerAnnotation(self, ctx:Java20Parser.MarkerAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#singleElementAnnotation. + def visitSingleElementAnnotation(self, ctx:Java20Parser.SingleElementAnnotationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayInitializer. + def visitArrayInitializer(self, ctx:Java20Parser.ArrayInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableInitializerList. + def visitVariableInitializerList(self, ctx:Java20Parser.VariableInitializerListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#block. + def visitBlock(self, ctx:Java20Parser.BlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#blockStatements. + def visitBlockStatements(self, ctx:Java20Parser.BlockStatementsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#blockStatement. + def visitBlockStatement(self, ctx:Java20Parser.BlockStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localClassOrInterfaceDeclaration. + def visitLocalClassOrInterfaceDeclaration(self, ctx:Java20Parser.LocalClassOrInterfaceDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableDeclaration. + def visitLocalVariableDeclaration(self, ctx:Java20Parser.LocalVariableDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableType. + def visitLocalVariableType(self, ctx:Java20Parser.LocalVariableTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#localVariableDeclarationStatement. + def visitLocalVariableDeclarationStatement(self, ctx:Java20Parser.LocalVariableDeclarationStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statement. + def visitStatement(self, ctx:Java20Parser.StatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementNoShortIf. + def visitStatementNoShortIf(self, ctx:Java20Parser.StatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementWithoutTrailingSubstatement. + def visitStatementWithoutTrailingSubstatement(self, ctx:Java20Parser.StatementWithoutTrailingSubstatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#emptyStatement_. + def visitEmptyStatement_(self, ctx:Java20Parser.EmptyStatement_Context): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#labeledStatement. + def visitLabeledStatement(self, ctx:Java20Parser.LabeledStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#labeledStatementNoShortIf. + def visitLabeledStatementNoShortIf(self, ctx:Java20Parser.LabeledStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expressionStatement. + def visitExpressionStatement(self, ctx:Java20Parser.ExpressionStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementExpression. + def visitStatementExpression(self, ctx:Java20Parser.StatementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenStatement. + def visitIfThenStatement(self, ctx:Java20Parser.IfThenStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenElseStatement. + def visitIfThenElseStatement(self, ctx:Java20Parser.IfThenElseStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#ifThenElseStatementNoShortIf. + def visitIfThenElseStatementNoShortIf(self, ctx:Java20Parser.IfThenElseStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assertStatement. + def visitAssertStatement(self, ctx:Java20Parser.AssertStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchStatement. + def visitSwitchStatement(self, ctx:Java20Parser.SwitchStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchBlock. + def visitSwitchBlock(self, ctx:Java20Parser.SwitchBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchRule. + def visitSwitchRule(self, ctx:Java20Parser.SwitchRuleContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchBlockStatementGroup. + def visitSwitchBlockStatementGroup(self, ctx:Java20Parser.SwitchBlockStatementGroupContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchLabel. + def visitSwitchLabel(self, ctx:Java20Parser.SwitchLabelContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#caseConstant. + def visitCaseConstant(self, ctx:Java20Parser.CaseConstantContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#whileStatement. + def visitWhileStatement(self, ctx:Java20Parser.WhileStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#whileStatementNoShortIf. + def visitWhileStatementNoShortIf(self, ctx:Java20Parser.WhileStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#doStatement. + def visitDoStatement(self, ctx:Java20Parser.DoStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forStatement. + def visitForStatement(self, ctx:Java20Parser.ForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forStatementNoShortIf. + def visitForStatementNoShortIf(self, ctx:Java20Parser.ForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#basicForStatement. + def visitBasicForStatement(self, ctx:Java20Parser.BasicForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#basicForStatementNoShortIf. + def visitBasicForStatementNoShortIf(self, ctx:Java20Parser.BasicForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forInit. + def visitForInit(self, ctx:Java20Parser.ForInitContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#forUpdate. + def visitForUpdate(self, ctx:Java20Parser.ForUpdateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#statementExpressionList. + def visitStatementExpressionList(self, ctx:Java20Parser.StatementExpressionListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enhancedForStatement. + def visitEnhancedForStatement(self, ctx:Java20Parser.EnhancedForStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#enhancedForStatementNoShortIf. + def visitEnhancedForStatementNoShortIf(self, ctx:Java20Parser.EnhancedForStatementNoShortIfContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#breakStatement. + def visitBreakStatement(self, ctx:Java20Parser.BreakStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#continueStatement. + def visitContinueStatement(self, ctx:Java20Parser.ContinueStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#returnStatement. + def visitReturnStatement(self, ctx:Java20Parser.ReturnStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#throwStatement. + def visitThrowStatement(self, ctx:Java20Parser.ThrowStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#synchronizedStatement. + def visitSynchronizedStatement(self, ctx:Java20Parser.SynchronizedStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#tryStatement. + def visitTryStatement(self, ctx:Java20Parser.TryStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catches. + def visitCatches(self, ctx:Java20Parser.CatchesContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchClause. + def visitCatchClause(self, ctx:Java20Parser.CatchClauseContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchFormalParameter. + def visitCatchFormalParameter(self, ctx:Java20Parser.CatchFormalParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#catchType. + def visitCatchType(self, ctx:Java20Parser.CatchTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#finallyBlock. + def visitFinallyBlock(self, ctx:Java20Parser.FinallyBlockContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#tryWithResourcesStatement. + def visitTryWithResourcesStatement(self, ctx:Java20Parser.TryWithResourcesStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resourceSpecification. + def visitResourceSpecification(self, ctx:Java20Parser.ResourceSpecificationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resourceList. + def visitResourceList(self, ctx:Java20Parser.ResourceListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#resource. + def visitResource(self, ctx:Java20Parser.ResourceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#variableAccess. + def visitVariableAccess(self, ctx:Java20Parser.VariableAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#yieldStatement. + def visitYieldStatement(self, ctx:Java20Parser.YieldStatementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pattern. + def visitPattern(self, ctx:Java20Parser.PatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typePattern. + def visitTypePattern(self, ctx:Java20Parser.TypePatternContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#expression. + def visitExpression(self, ctx:Java20Parser.ExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primary. + def visitPrimary(self, ctx:Java20Parser.PrimaryContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#primaryNoNewArray. + def visitPrimaryNoNewArray(self, ctx:Java20Parser.PrimaryNoNewArrayContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pNNA. + def visitPNNA(self, ctx:Java20Parser.PNNAContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classLiteral. + def visitClassLiteral(self, ctx:Java20Parser.ClassLiteralContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classInstanceCreationExpression. + def visitClassInstanceCreationExpression(self, ctx:Java20Parser.ClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unqualifiedClassInstanceCreationExpression. + def visitUnqualifiedClassInstanceCreationExpression(self, ctx:Java20Parser.UnqualifiedClassInstanceCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#classOrInterfaceTypeToInstantiate. + def visitClassOrInterfaceTypeToInstantiate(self, ctx:Java20Parser.ClassOrInterfaceTypeToInstantiateContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#typeArgumentsOrDiamond. + def visitTypeArgumentsOrDiamond(self, ctx:Java20Parser.TypeArgumentsOrDiamondContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpression. + def visitArrayCreationExpression(self, ctx:Java20Parser.ArrayCreationExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpressionWithoutInitializer. + def visitArrayCreationExpressionWithoutInitializer(self, ctx:Java20Parser.ArrayCreationExpressionWithoutInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayCreationExpressionWithInitializer. + def visitArrayCreationExpressionWithInitializer(self, ctx:Java20Parser.ArrayCreationExpressionWithInitializerContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dimExprs. + def visitDimExprs(self, ctx:Java20Parser.DimExprsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#dimExpr. + def visitDimExpr(self, ctx:Java20Parser.DimExprContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#arrayAccess. + def visitArrayAccess(self, ctx:Java20Parser.ArrayAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#fieldAccess. + def visitFieldAccess(self, ctx:Java20Parser.FieldAccessContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodInvocation. + def visitMethodInvocation(self, ctx:Java20Parser.MethodInvocationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#argumentList. + def visitArgumentList(self, ctx:Java20Parser.ArgumentListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#methodReference. + def visitMethodReference(self, ctx:Java20Parser.MethodReferenceContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postfixExpression. + def visitPostfixExpression(self, ctx:Java20Parser.PostfixExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#pfE. + def visitPfE(self, ctx:Java20Parser.PfEContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postIncrementExpression. + def visitPostIncrementExpression(self, ctx:Java20Parser.PostIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#postDecrementExpression. + def visitPostDecrementExpression(self, ctx:Java20Parser.PostDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unaryExpression. + def visitUnaryExpression(self, ctx:Java20Parser.UnaryExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#preIncrementExpression. + def visitPreIncrementExpression(self, ctx:Java20Parser.PreIncrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#preDecrementExpression. + def visitPreDecrementExpression(self, ctx:Java20Parser.PreDecrementExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#unaryExpressionNotPlusMinus. + def visitUnaryExpressionNotPlusMinus(self, ctx:Java20Parser.UnaryExpressionNotPlusMinusContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#castExpression. + def visitCastExpression(self, ctx:Java20Parser.CastExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#multiplicativeExpression. + def visitMultiplicativeExpression(self, ctx:Java20Parser.MultiplicativeExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#additiveExpression. + def visitAdditiveExpression(self, ctx:Java20Parser.AdditiveExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#shiftExpression. + def visitShiftExpression(self, ctx:Java20Parser.ShiftExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#relationalExpression. + def visitRelationalExpression(self, ctx:Java20Parser.RelationalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#equalityExpression. + def visitEqualityExpression(self, ctx:Java20Parser.EqualityExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#andExpression. + def visitAndExpression(self, ctx:Java20Parser.AndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#exclusiveOrExpression. + def visitExclusiveOrExpression(self, ctx:Java20Parser.ExclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#inclusiveOrExpression. + def visitInclusiveOrExpression(self, ctx:Java20Parser.InclusiveOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalAndExpression. + def visitConditionalAndExpression(self, ctx:Java20Parser.ConditionalAndExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalOrExpression. + def visitConditionalOrExpression(self, ctx:Java20Parser.ConditionalOrExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#conditionalExpression. + def visitConditionalExpression(self, ctx:Java20Parser.ConditionalExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignmentExpression. + def visitAssignmentExpression(self, ctx:Java20Parser.AssignmentExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignment. + def visitAssignment(self, ctx:Java20Parser.AssignmentContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#leftHandSide. + def visitLeftHandSide(self, ctx:Java20Parser.LeftHandSideContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#assignmentOperator. + def visitAssignmentOperator(self, ctx:Java20Parser.AssignmentOperatorContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaExpression. + def visitLambdaExpression(self, ctx:Java20Parser.LambdaExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameters. + def visitLambdaParameters(self, ctx:Java20Parser.LambdaParametersContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameterList. + def visitLambdaParameterList(self, ctx:Java20Parser.LambdaParameterListContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameter. + def visitLambdaParameter(self, ctx:Java20Parser.LambdaParameterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaParameterType. + def visitLambdaParameterType(self, ctx:Java20Parser.LambdaParameterTypeContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#lambdaBody. + def visitLambdaBody(self, ctx:Java20Parser.LambdaBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#switchExpression. + def visitSwitchExpression(self, ctx:Java20Parser.SwitchExpressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by Java20Parser#constantExpression. + def visitConstantExpression(self, ctx:Java20Parser.ConstantExpressionContext): + return self.visitChildren(ctx) + + + +del Java20Parser \ No newline at end of file diff --git a/csim/java/__init__.py b/csim/java/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csim/java/utils.py b/csim/java/utils.py new file mode 100644 index 0000000..19f962d --- /dev/null +++ b/csim/java/utils.py @@ -0,0 +1,60 @@ +from .Java20Lexer import Java20Lexer +from .Java20Parser import Java20Parser +from antlr4 import Token + +COLLAPSED_RULE_INDICES = { + # Import declarations + Java20Parser.RULE_singleTypeImportDeclaration, + Java20Parser.RULE_typeImportOnDemandDeclaration, + Java20Parser.RULE_singleStaticImportDeclaration, + Java20Parser.RULE_staticImportOnDemandDeclaration, + # Miscellaneous declarations + Java20Parser.RULE_variableInitializerList, + # Array dimensions + Java20Parser.RULE_dims, + Java20Parser.RULE_dimExpr, +} + +EXCLUDED_TOKEN_TYPES = { + # Punctuation that does not contribute to structural similarity + Java20Lexer.LPAREN, + Java20Lexer.RPAREN, + Java20Lexer.LBRACE, + Java20Lexer.RBRACE, + Java20Lexer.COLON, + Java20Lexer.COMMA, + Java20Lexer.SEMI, + Java20Lexer.Identifier, + # Keywords that do not contribute to structural similarity + Java20Lexer.PUBLIC, + Java20Lexer.CLASS, + Java20Lexer.STATIC, + Java20Lexer.NEW, + Java20Lexer.VOID, + Java20Lexer.RETURN, + Java20Lexer.BREAK, + # Keywords related to control flow + Java20Lexer.IF, + Java20Lexer.ELSE, + Java20Lexer.FOR, + Java20Lexer.WHILE, + Java20Lexer.DO, + Java20Lexer.SWITCH, + Java20Lexer.CASE, + # Keywords related to data types + Java20Lexer.INT, + Java20Lexer.BOOLEAN, + Java20Lexer.BYTE, + Java20Lexer.CHAR, + Java20Lexer.DOUBLE, + Java20Lexer.FLOAT, + Java20Lexer.LONG, + Java20Lexer.SHORT, + Java20Lexer.IntegerLiteral, + Java20Lexer.FloatingPointLiteral, + Java20Lexer.BooleanLiteral, + Java20Lexer.CharacterLiteral, + Java20Lexer.StringLiteral, + # Whitespace and comments + Token.EOF, +} diff --git a/csim/language/__init__.py b/csim/language/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csim/language/lexer.py b/csim/language/lexer.py new file mode 100644 index 0000000..ec2f3c4 --- /dev/null +++ b/csim/language/lexer.py @@ -0,0 +1,48 @@ +import sys +from ..python.PythonLexer import PythonLexer +from ..java.Java20Lexer import Java20Lexer +from ..cpp.CPP14Lexer import CPP14Lexer +from antlr4 import InputStream, CommonTokenStream +from antlr4.error.ErrorListener import ErrorListener + + +class ExtendedErrorListener(ErrorListener): + def __init__(self, file_name=""): + super(ExtendedErrorListener, self).__init__() + self.file_name = file_name + + def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): + print( + f"Syntax error in file {self.file_name} line {line}:{column} {msg}", + file=sys.stderr, + ) + + +def ANTLR_tokenize(file_name, file_content, lang): + """Tokenize source code using ANTLR and handle syntax errors. + + Args: + file_name: Name of the source file (used for error reporting). + file_content: Source code as a string to be tokenized. + lang: programming language of the source code (e.g. python, java, etc.). + Returns: + List of token types extracted from the source code. + """ + input_stream = InputStream(file_content) + error_listener = ExtendedErrorListener(file_name) + + if lang == "python": + lexer = PythonLexer(input_stream) + elif lang == "java": + lexer = Java20Lexer(input_stream) + elif lang == "cpp": + lexer = CPP14Lexer(input_stream) + else: + raise ValueError(f"Unsupported language: {lang}") + + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + token_stream = CommonTokenStream(lexer) + token_stream.fill() + + return [token.type for token in token_stream.tokens] diff --git a/csim/language/parser.py b/csim/language/parser.py new file mode 100644 index 0000000..92f8d10 --- /dev/null +++ b/csim/language/parser.py @@ -0,0 +1,77 @@ +import sys +from ..python.PythonParser import PythonParser +from ..python.PythonLexer import PythonLexer +from ..java.Java20Parser import Java20Parser +from ..java.Java20Lexer import Java20Lexer +from ..cpp.CPP14Parser import CPP14Parser +from ..cpp.CPP14Lexer import CPP14Lexer +from antlr4 import InputStream, CommonTokenStream +from antlr4.error.ErrorListener import ErrorListener + + +class ExtendedErrorListener(ErrorListener): + def __init__(self, file_name=""): + super(ExtendedErrorListener, self).__init__() + self.file_name = file_name + + def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): + print( + f"Syntax error in file {self.file_name} line {line}:{column} {msg}", + file=sys.stderr, + ) + + +def ANTLR_parse(file_name, file_content, lang): + """Parse source code into an ANTLR parse tree and handle syntax errors. + + Args: + file_name: Name of the source file (used for error reporting). + file_content: Source code as a string to be parsed. + lang: programming language of the source code (e.g. python, java, etc.). + + Returns: + ANTLR parse tree representing the code's syntactic structure. + """ + + tree = None + parser = None + input_stream = InputStream(file_content) + error_listener = ExtendedErrorListener(file_name) + + if lang == "python": + # Lexing the input code to create a token stream + lexer = PythonLexer(input_stream) + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + # Parsing the token stream to create a parse tree + token_stream = CommonTokenStream(lexer) + parser = PythonParser(token_stream) + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.file_input() + elif lang == "java": + # Lexing the input code to create a token stream + lexer = Java20Lexer(input_stream) + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + # Parsing the token stream to create a parse tree + token_stream = CommonTokenStream(lexer) + parser = Java20Parser(token_stream) + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.compilationUnit() + elif lang == "cpp": + # Lexing the input code to create a token stream + lexer = CPP14Lexer(input_stream) + lexer.removeErrorListeners() + lexer.addErrorListener(error_listener) + # Parsing the token stream to create a parse tree + token_stream = CommonTokenStream(lexer) + parser = CPP14Parser(token_stream) + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.translationUnit() + else: + raise ValueError(f"Unsupported language: {lang}") + + return tree diff --git a/csim/main.py b/csim/main.py index 577c022..d6c132e 100644 --- a/csim/main.py +++ b/csim/main.py @@ -1,91 +1,125 @@ import argparse -from .utils import group_by_similarity, process_files, compare_all, get_file +from .utils import ( + group_by_exhaustive_search, + process_files, + report_pairwise_similarity, +) def main(): """ Main function to parse command-line arguments and execute the similarity checker. - Arguments: - --files, -f (str, nargs=2): The input two files to compare. - --path, -p (str): Path to the directory containing the source code files. - --lang, -l (str): The programming language of the source files. Defaults to 'python'. - --threshold, -t (float): Similarity threshold between 0.0 and 1.0. Only valid when used with --path/-p option. - --talg, -ta (string): The tree edit distance algorithm to use. Defaults to 'zss'. - --help, -h: Show this help message and exit. + + Actions: + report: Generate a pairwise similarity report for all files. + group: Group files by similarity using a specified strategy. + + Arguments for 'report' action: + --path, -p (str): Path to a directory containing source code files (required). + --lang, -l (str): The programming language of the source files (default: 'python'). + --talg, -ta (str): The tree edit distance algorithm to use (default: 'zss'). + + Arguments for 'group' action: + --path, -p (str): Path to a directory containing source code files (required). + --threshold, -t (float): Similarity threshold between 0.0 and 1.0 (required). + --strategy, -s (str): Grouping strategy: 'exhaustive' (default). + --lang, -l (str): The programming language of the source files (default: 'python'). + --talg, -ta (str): The tree edit distance algorithm to use (default: 'zss'). + Returns: None """ - # Create the argument parser parser = argparse.ArgumentParser( - description="Compare two source code files for similarity." + description="A command-line tool to detect code similarity and plagiarism." ) - # Create a mutually exclusive group - group = parser.add_mutually_exclusive_group(required=True) + # Action argument (positional) + parser.add_argument( + "action", + choices=["report", "group"], + help="Action to perform: 'report' for pairwise similarity report, 'group' for grouping files by similarity.", + ) - # Add the 'path' argument to the group - group.add_argument( + # Required path argument + parser.add_argument( "--path", "-p", type=str, - help="Path to the directory containing the source code files to compare.", - ) - - # Add the 'files' argument to the group - group.add_argument( - "--files", "-f", type=get_file, nargs=2, help="The input two files to compare" + required=True, + help="Path to a directory containing source code files.", ) - # Add the 'lang' argument to the group + # Language of the source files parser.add_argument( "--lang", "-l", - choices=["python"], + choices=["python", "java", "cpp"], default="python", - help="The programming language of the source files. Defaults to 'python'.", + help="The programming language of the source files (default: python).", + ) + + # Algorithm for tree edit distance + parser.add_argument( + "--talg", + "-ta", + choices=["zss", "apted"], + default="apted", + help="The tree edit distance algorithm to use (default: zss).", ) - # Optional threshold used only when --path is selected + # Threshold (only for 'group' action) parser.add_argument( "--threshold", "-t", type=float, - help="Similarity threshold between 0.0 and 1.0. Only valid when used with --path/-p option.", + default=None, + help="Similarity threshold (0.0 to 1.0) for grouping files. Required for 'group' action.", ) - # Optional argument for tree edit distance algorithm + # Strategy (only for 'group' action) parser.add_argument( - "--talg", - "-ta", - choices=["zss", "apted"], - default="zss", - help="The tree edit distance algorithm to use. Defaults to 'zss'.", + "--strategy", + "-s", + choices=["exhaustive"], + default="exhaustive", + help="Grouping strategy: 'exhaustive' (all-pairs comparison). Default: exhaustive.", ) - # Parse the arguments args = parser.parse_args() - # Validate conditional use of --threshold: only allowed with --path - if args.threshold is not None: - if not args.path: - parser.error("argument --threshold: can only be used with --path/-p") + # Validate arguments based on action + if args.action == "group": + if args.threshold is None: + parser.error("The --threshold argument is required for 'group' action.") if not (0.0 <= args.threshold <= 1.0): - parser.error("argument --threshold: must be between 0.0 and 1.0") - - # Process the files - file_names, file_contents = process_files(args.path, args.files) + parser.error("The --threshold must be a float between 0.0 and 1.0.") + elif args.action == "report": + if args.threshold is not None: + parser.error("The --threshold argument is only valid for 'group' action.") + if args.strategy != "exhaustive": + parser.error("The --strategy argument is only valid for 'group' action and must be 'exhaustive'.") + # Process files try: - if len(file_names) >= 2: - if args.threshold is not None: - results = group_by_similarity(file_names, file_contents, args.lang, args.threshold, args.talg) - else: - results = compare_all(file_names, file_contents, args.lang, args.talg) - else: - results = "Please provide at least two files for comparison." + file_names, file_contents = process_files(args.path, args.lang) + + if len(file_names) < 2: + print("Error: At least two files are required for comparison.") + return + + # Execute the appropriate action + if args.action == "report": + results = report_pairwise_similarity( + file_names, file_contents, args.lang, args.talg + ) + elif args.action == "group": + results = group_by_exhaustive_search( + file_names, file_contents, args.lang, args.threshold, args.talg + ) + print(results) except Exception as e: - print(f"An error occurred during comparison: {e}") + print(f"An error occurred: {e}") if __name__ == "__main__": diff --git a/csim/processing/__init__.py b/csim/processing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csim/processing/distance_metrics.py b/csim/processing/distance_metrics.py new file mode 100644 index 0000000..94bc65c --- /dev/null +++ b/csim/processing/distance_metrics.py @@ -0,0 +1,80 @@ +from zss import simple_distance + + +def TreeEditDistance(N1, N2, ted_algorithm="zss"): + """Calculate the tree edit distance between two trees using the specified algorithm. + Args: + N1: First tree (root node). + N2: Second tree (root node). + ted_algorithm: The tree edit distance algorithm to use ('zss' or 'apted'). + Returns: + int: The computed tree edit distance between the two trees. + """ + if ted_algorithm == "zss": + # Custom configuration for zss to work with dictionaries + class CustomConfigZss: + @staticmethod + def get_children(node): + return node["children"] + + @staticmethod + def get_label(node): + return node["label"] + + d = simple_distance( + N1, + N2, + get_children=CustomConfigZss.get_children, + get_label=CustomConfigZss.get_label, + ) + elif ted_algorithm == "apted": + from apted import APTED, Config + + # Custom configuration for APTED to work with dictionaries + class CustomConfigApted(Config): + def rename(self, node1, node2): + """Compares attribute .value of trees""" + return 1 if node1["label"] != node2["label"] else 0 + + def children(self, node): + """Get childrens of a node""" + return node["children"] + + apted = APTED(N1, N2, CustomConfigApted()) + d = apted.compute_edit_distance() + else: + d = 0 + raise ValueError( + f"Unsupported ted_algorithm: {ted_algorithm}. " + "Supported algorithms are 'zss' and 'apted'." + ) + return d + + +def SimilarityIndex(d, T1, T2): + """Calculate the similarity index between two trees. + + Normalizes the tree edit distance to a value between 0 and 1, where + 1 indicates identical trees and 0 indicates maximum dissimilarity. + + Args: + d: Tree edit distance between the two trees. + T1: Number of nodes in the first tree. + T2: Number of nodes in the second tree. + + Returns: + float: Similarity index in the range [0, 1]. + """ + # If edit distance exceeds the bound given by max(T1, T2), + # normalize by total nodes to keep the value non-negative. + if d > max(T1, T2): + s_alt = 1 - (d / max(T1 + T2, 1)) + s_alt = round(s_alt, 2) + return s_alt + + m = max(T1, T2) + s = 1 - (d / m) + + # return similarity index with precision of 2 decimal places + s = round(s, 2) + return s diff --git a/csim/processing/tree_processing.py b/csim/processing/tree_processing.py new file mode 100644 index 0000000..8e0e772 --- /dev/null +++ b/csim/processing/tree_processing.py @@ -0,0 +1,184 @@ +import hashlib +from antlr4 import TerminalNode +from ..Visitors import ( + PythonParserVisitorExtended, + Java20ParserVisitorExtended, + CPP14ParserVisitorExtended, +) +from ..utils import ( + TOKEN_TYPE_OFFSET, + get_control_equivalence_rule_indices, + get_exclude_childrens_from_rule, + get_excluded_token_types, + get_hash_rule_indices, +) + + +def get_parser_visitor_class(lang): + """Factory function to create a ParserVisitor class with the correct base visitor. + Args: + lang (str): Programming language identifier. + Returns: + class: A ParserVisitor class that extends the appropriate base visitor for the given language. + """ + base_visitor = None + if lang == "python": + base_visitor = PythonParserVisitorExtended + elif lang == "java": + base_visitor = Java20ParserVisitorExtended + elif lang == "cpp": + base_visitor = CPP14ParserVisitorExtended + + if base_visitor is None: + raise ValueError(f"Unsupported language: {lang}") + + class ParserVisitor(base_visitor): + """Custom visitor class that extends the base visitor for the specified language. + This class can be further customized to implement language-specific normalization logic. + """ + + def __init__(self, excluded_token_types): + super().__init__() + self.excluded_token_types = excluded_token_types + + def visitChildren(self, node): + """Visit and process all children of a parse tree node. + + Args: + node: ANTLR parse tree node to process. + + Returns: + A dictionary representing the normalized subtree. + """ + rule_index = node.getRuleIndex() + children_nodes = [] + + for child in node.getChildren(): + if isinstance(child, TerminalNode): + token = child.symbol + if token.type not in self.excluded_token_types: + children_nodes.append( + { + "label": token.type + TOKEN_TYPE_OFFSET, + "children": [], + } + ) + else: + result = self.visit(child) + if result is not None: + children_nodes.append(result) + + if not children_nodes: + return {"label": rule_index, "children": []} + + # Node compression: if a node has only one child. + # Can return the child directly to reduce unnecessary levels in the tree. + if len(children_nodes) == 1: + # Single child: return it directly to avoid unnecessary nesting + return children_nodes[0] + + # Create parent node for multiple children + return {"label": rule_index, "children": children_nodes} + + return ParserVisitor + + +def PruneAndHash(tree, lang): + """Prune and hash a tree to reduce noise and improve comparison efficiency. + + Args: + tree: A dictionary-based tree to prune and hash. + lang: The programming language of the source code. + Returns: + tuple: (hashed_tree, node_count) where hashed_tree is a dictionary + and node_count is the total number of nodes in the tree. + """ + hashed_rule_indices = get_hash_rule_indices(lang) + control_equivalence_rule_indices = get_control_equivalence_rule_indices(lang) + exclude_childrens_from_rule = get_exclude_childrens_from_rule(lang) + + def traverse_subtree(node): + # Collect all labels in the subtree rooted at `node` into a single list + elements = [node["label"]] + for c in node["children"]: + elements.extend(traverse_subtree(c)) + return elements + + def prunning_tree(node): + if node is None: + return None + + label = node["label"] + new_node = {"label": label, "children": []} + + # Get the list of child labels to exclude for this rule, if any + childrens_to_exclude = exclude_childrens_from_rule.get(label, []) + + # Otherwise, recurse normally. + for children in node["children"]: + # Skip children that are in the exclusion list for this rule + if children["label"] in childrens_to_exclude: + continue + new_child = prunning_tree(children) + if new_child is not None: + new_node["children"].append(new_child) + return new_node + + def hash_children(label, childrens): + # Flatten all children subtree labels into a single sequence and hash + flat = [] + for c in childrens: + flat.extend(traverse_subtree(c)) + s = "|".join(map(str, flat)) + return str(label) + "|" + hashlib.sha256(s.encode("utf-8")).hexdigest() + + def hashing_tree(node): + if node is None: + return None, 0 + + # For control flow nodes, we can consider them equivalent regardless of their specific structure + label = node["label"] + if label in control_equivalence_rule_indices: + label = control_equivalence_rule_indices[label] + + # For nodes that are in the hashed rule set, we hash their entire subtree to a single digest + if node["label"] in hashed_rule_indices: + digest = hash_children(label, node["children"]) + return {"label": digest, "children": []}, 1 + + new_node = {"label": label, "children": []} + count = 1 + + # For other nodes, we recursively hash their children as usual + for children in node["children"]: + new_child, child_count = hashing_tree(children) + if new_child is not None: + new_node["children"].append(new_child) + count += child_count + return new_node, count + + pruned_tree = prunning_tree(tree) + hashed_tree, nodes_number = hashing_tree(pruned_tree) + + return hashed_tree, nodes_number + + +def Normalize(tree, lang): + """Normalize an ANTLR parse tree to a ZSS tree structure, excluding irrelevant tokens and compressing certain rules. + + Args: + tree: ANTLR parse tree to normalize. + lang: The programming language of the source code. + + Returns: + dict: A normalized tree represented as a dictionary with 'label' and 'children' keys. + """ + excluded_token_types = get_excluded_token_types(lang) + + # Get the correct ParserVisitor class for the given language + ParserVisitorClass = get_parser_visitor_class(lang) + visitor = ParserVisitorClass(excluded_token_types) + + normalized_tree = visitor.visit(tree) + + return normalized_tree diff --git a/csim/python/PythonLexer.py b/csim/python/PythonLexer.py index 7f4809d..b46395a 100644 --- a/csim/python/PythonLexer.py +++ b/csim/python/PythonLexer.py @@ -1,4 +1,4 @@ -# Generated from ./PythonLexer.g4 by ANTLR 4.13.2 +# Generated from PythonLexer.g4 by ANTLR 4.13.2 from antlr4 import * from io import StringIO import sys diff --git a/csim/python/PythonParser.py b/csim/python/PythonParser.py index 9f1dec3..d39fc46 100644 --- a/csim/python/PythonParser.py +++ b/csim/python/PythonParser.py @@ -1,4 +1,4 @@ -# Generated from ./PythonParser.g4 by ANTLR 4.13.2 +# Generated from PythonParser.g4 by ANTLR 4.13.2 # encoding: utf-8 from antlr4 import * from io import StringIO diff --git a/csim/python/PythonParserVisitor.py b/csim/python/PythonParserVisitor.py index 12a90ff..d84205b 100644 --- a/csim/python/PythonParserVisitor.py +++ b/csim/python/PythonParserVisitor.py @@ -1,4 +1,4 @@ -# Generated from ./PythonParser.g4 by ANTLR 4.13.2 +# Generated from PythonParser.g4 by ANTLR 4.13.2 from antlr4 import * if "." in __name__: from .PythonParser import PythonParser diff --git a/csim/python/utils.py b/csim/python/utils.py index c462d47..3108610 100644 --- a/csim/python/utils.py +++ b/csim/python/utils.py @@ -1,4 +1,4 @@ -from csim.utils import TOKEN_TYPE_OFFSET +from ..utils import TOKEN_TYPE_OFFSET from .PythonParser import PythonParser from .PythonLexer import PythonLexer from antlr4 import Token diff --git a/csim/utils.py b/csim/utils.py index b89707e..8ddd3cb 100644 --- a/csim/utils.py +++ b/csim/utils.py @@ -1,6 +1,7 @@ import argparse from pathlib import Path import os +from csim.language.lexer import ANTLR_tokenize from .DataStructures import UFDS as UnionFind @@ -13,8 +14,8 @@ def get_file(file_path): def print_tree(node, indent=0): if node is None: return - print(" " * indent + str(node.label)) - for child in node.children: + print(" " * indent + str(node["label"])) + for child in node["children"]: print_tree(child, indent + 1) @@ -34,7 +35,18 @@ def read_file(file_path): return file_path, None -def process_files(path, files): +def get_extension_by_lang(lang): + if lang == "python": + return ".py" + elif lang == "java": + return ".java" + elif lang == "cpp": + return ".cpp" + else: + raise ValueError(f"Unsupported language: {lang}") + + +def process_files(path, lang): # Storage for file names and contents file_names = [] file_contents = [] @@ -48,18 +60,11 @@ def process_files(path, files): # Process the files in the directory for file in os.listdir(path): file_path = os.path.join(path, file) - if os.path.isfile(file_path) and file.endswith(".py"): + if os.path.isfile(file_path) and file.endswith(get_extension_by_lang(lang)): file_name, content = read_file(file_path) # Store the file name and content file_names.append(file_name) file_contents.append(content) - elif files: - file1, file2 = files - file_name1, content1 = read_file(file1) - file_name2, content2 = read_file(file2) - # Store the file name and content - file_names.extend([file_name1, file_name2]) - file_contents.extend([content1, content2]) return file_names, file_contents @@ -78,9 +83,17 @@ def get_excluded_token_types(lang): set: Set of excluded token types. """ if lang == "python": - from .python.utils import EXCLUDED_TOKEN_TYPES as python_excluded_tokens + from .python.utils import EXCLUDED_TOKEN_TYPES as python_excluded + + return python_excluded + elif lang == "java": + from .java.utils import EXCLUDED_TOKEN_TYPES as java_excluded - return python_excluded_tokens + return java_excluded + elif lang == "cpp": + from .cpp.utils import EXCLUDED_TOKEN_TYPES as cpp_excluded + + return cpp_excluded else: return set() # Default to empty set for unsupported languages @@ -107,7 +120,7 @@ def get_exclude_childrens_from_rule(lang): lang (str): Programming language identifier. Returns: - set: Set of rule indices whose children should be excluded from similarity comparison. + dict: Dictionary mapping rule indices to lists of child indices to exclude. """ if lang == "python": from .python.utils import ( @@ -116,7 +129,7 @@ def get_exclude_childrens_from_rule(lang): return python_exclude_childrens_from_rule else: - return set() # Default to empty set for unsupported languages + return dict() # Default to empty dict for unsupported languages def get_control_equivalence_rule_indices(lang): @@ -161,7 +174,7 @@ def get_similarity_coefficient(proccesed_code1, proccesed_code2, ted_algorithm): return result -def compare_all(file_names, file_contents, lang, ted_algorithm): +def report_pairwise_similarity(file_names, file_contents, lang, ted_algorithm): file_number = len(file_names) proccesed_files = [ @@ -190,7 +203,9 @@ def compare_all(file_names, file_contents, lang, ted_algorithm): similarity_matrix[i + 1][j + 1] = 1.00 else: file_b = proccesed_files[j] - similarity_index = get_similarity_coefficient(file_a, file_b, ted_algorithm) + similarity_index = get_similarity_coefficient( + file_a, file_b, ted_algorithm + ) similarity_matrix[i + 1][j + 1] = round(similarity_index, 2) similarity_matrix[j + 1][i + 1] = round(similarity_index, 2) results.append( @@ -229,7 +244,9 @@ def get_output_by_group(file_names, groups, similarity_indices, threshold): return "\n".join(result) -def group_by_similarity(file_names, file_contents, lang, threshold, ted_algorithm): +def group_by_exhaustive_search( + file_names, file_contents, lang, threshold, ted_algorithm +): file_number = len(file_names) grouper = UnionFind(file_number) diff --git a/docs/CodeSimilarity.md b/docs/CodeSimilarity.md index b36d860..251a4fa 100644 --- a/docs/CodeSimilarity.md +++ b/docs/CodeSimilarity.md @@ -3,8 +3,6 @@ This project analyzes structural similarity between Python source code using ANTLR4-generated Parse Trees and Tree Edit Distance (ZSS or APTED). -For next versions, support for additional programming languages will be added. - ## Parse Tree Normalization and ZSS Tree Construction This project compares Python source code by measuring **structural similarity** @@ -13,7 +11,7 @@ The Parse Trees are generated using **ANTLR4** and compared using **Tree Edit Distance (ZSS or APTED)** ### Version Baseline -- **Python:** 3.9–3.12 (recommended 3.11) +- **Python:** 3.10–3.12 (recommended 3.11) - **ANTLR4 Python Runtime:** 4.13.2 - **zss:** 1.2.0 - **apted:** 1.0.3 diff --git a/docs/STRATEGIES.md b/docs/STRATEGIES.md new file mode 100644 index 0000000..f2e4c5f --- /dev/null +++ b/docs/STRATEGIES.md @@ -0,0 +1,66 @@ +# Search Strategies in csim + +This document explains the search strategy used in csim for grouping similar files: **exhaustive search**. + +## Overview + +When grouping files by similarity, csim needs to: +1. Find candidate pairs of files that might be similar +2. Calculate the precise structural similarity for each candidate pair +3. Group files based on a similarity threshold + +The tool uses an exhaustive all-pairs approach for candidate selection and performs precise structural comparisons to ensure high accuracy. + +## Strategy: Exhaustive Search (Default) + +### How It Works + +Exhaustive search compares **every file against every other file**, then calculates the precise structural similarity for each pair. + +``` +For files [A, B, C, D]: + Compare: A-B, A-C, A-D, B-C, B-D, C-D + Total comparisons: C(n,2) = n*(n-1)/2 + Time complexity: O(n²) +``` + +### Characteristics + +| Property | Value | +|----------|-------| +| **Precision** | Maximum (100%) | +| **Recall** | Maximum (100%) | +| **Time Complexity** | O(n²) | +| **Best For** | Small to medium datasets | +| **Pros** | Finds all similar files without missing any | +| **Cons** | Slow for very large datasets | + +### When to Use + +Use exhaustive search when: +- Your dataset is small to medium-sized +- Accuracy is critical and missing a copy is unacceptable +- You can afford the computational cost for full comparison + +### Command + +```bash +csim group --path /path/to/files --threshold 0.8 +``` + +--- + +## Troubleshooting + +### "My copies weren't detected!" + +1. **Try adjusting the threshold:** Try a lower `--threshold` (e.g., 0.7) +2. **Check the code:** Verify the submissions are structurally similar +3. **Run an exhaustive report:** Use `csim report` to inspect pairwise similarity values + +--- + +## See Also + +- [Parse Tree (Wikipedia)](https://en.wikipedia.org/wiki/Parse_tree) +- [Tree Edit Distance (Wikipedia)](https://en.wikipedia.org/wiki/Tree_edit_distance) diff --git a/grammars/CPP14Lexer.g4 b/grammars/CPP14Lexer.g4 new file mode 100644 index 0000000..897f6ae --- /dev/null +++ b/grammars/CPP14Lexer.g4 @@ -0,0 +1,398 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine +// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true + +lexer grammar CPP14Lexer; + +IntegerLiteral: + DecimalLiteral Integersuffix? + | OctalLiteral Integersuffix? + | HexadecimalLiteral Integersuffix? + | BinaryLiteral Integersuffix? +; + +CharacterLiteral: ('u' | 'U' | 'L')? '\'' Cchar+ '\''; + +FloatingLiteral: + Fractionalconstant Exponentpart? Floatingsuffix? + | Digitsequence Exponentpart Floatingsuffix? +; + +StringLiteral: Encodingprefix? (Rawstring | '"' Schar* '"'); + +BooleanLiteral: False_ | True_; + +PointerLiteral: Nullptr; + +UserDefinedLiteral: + UserDefinedIntegerLiteral + | UserDefinedFloatingLiteral + | UserDefinedStringLiteral + | UserDefinedCharacterLiteral +; + +MultiLineMacro: '#' (~[\n]*? '\\' '\r'? '\n')+ ~ [\n]+ -> channel (HIDDEN); + +Directive: '#' ~ [\n]* -> channel (HIDDEN); +/*Keywords*/ + +Alignas: 'alignas'; + +Alignof: 'alignof'; + +Asm: 'asm'; + +Auto: 'auto'; + +Bool: 'bool'; + +Break: 'break'; + +Case: 'case'; + +Catch: 'catch'; + +Char: 'char'; + +Char16: 'char16_t'; + +Char32: 'char32_t'; + +Class: 'class'; + +Const: 'const'; + +Constexpr: 'constexpr'; + +Const_cast: 'const_cast'; + +Continue: 'continue'; + +Decltype: 'decltype'; + +Default: 'default'; + +Delete: 'delete'; + +Do: 'do'; + +Double: 'double'; + +Dynamic_cast: 'dynamic_cast'; + +Else: 'else'; + +Enum: 'enum'; + +Explicit: 'explicit'; + +Export: 'export'; + +Extern: 'extern'; + +//DO NOT RENAME - PYTHON NEEDS True and False +False_: 'false'; + +Final: 'final'; + +Float: 'float'; + +For: 'for'; + +Friend: 'friend'; + +Goto: 'goto'; + +If: 'if'; + +Inline: 'inline'; + +Int: 'int'; + +Long: 'long'; + +Mutable: 'mutable'; + +Namespace: 'namespace'; + +New: 'new'; + +Noexcept: 'noexcept'; + +Nullptr: 'nullptr'; + +Operator: 'operator'; + +Override: 'override'; + +Private: 'private'; + +Protected: 'protected'; + +Public: 'public'; + +Register: 'register'; + +Reinterpret_cast: 'reinterpret_cast'; + +Return: 'return'; + +Short: 'short'; + +Signed: 'signed'; + +Sizeof: 'sizeof'; + +Static: 'static'; + +Static_assert: 'static_assert'; + +Static_cast: 'static_cast'; + +Struct: 'struct'; + +Switch: 'switch'; + +Template: 'template'; + +This: 'this'; + +Thread_local: 'thread_local'; + +Throw: 'throw'; + +//DO NOT RENAME - PYTHON NEEDS True and False +True_: 'true'; + +Try: 'try'; + +Typedef: 'typedef'; + +Typeid_: 'typeid'; + +Typename_: 'typename'; + +Union: 'union'; + +Unsigned: 'unsigned'; + +Using: 'using'; + +Virtual: 'virtual'; + +Void: 'void'; + +Volatile: 'volatile'; + +Wchar: 'wchar_t'; + +While: 'while'; +/*Operators*/ + +LeftParen: '('; + +RightParen: ')'; + +LeftBracket: '['; + +RightBracket: ']'; + +LeftBrace: '{'; + +RightBrace: '}'; + +Plus: '+'; + +Minus: '-'; + +Star: '*'; + +Div: '/'; + +Mod: '%'; + +Caret: '^'; + +And: '&'; + +Or: '|'; + +Tilde: '~'; + +Not: '!' | 'not'; + +Assign: '='; + +Less: '<'; + +Greater: '>'; + +PlusAssign: '+='; + +MinusAssign: '-='; + +StarAssign: '*='; + +DivAssign: '/='; + +ModAssign: '%='; + +XorAssign: '^='; + +AndAssign: '&='; + +OrAssign: '|='; + +LeftShiftAssign: '<<='; + +RightShiftAssign: '>>='; + +Equal: '=='; + +NotEqual: '!='; + +LessEqual: '<='; + +GreaterEqual: '>='; + +AndAnd: '&&' | 'and'; + +OrOr: '||' | 'or'; + +PlusPlus: '++'; + +MinusMinus: '--'; + +Comma: ','; + +ArrowStar: '->*'; + +Arrow: '->'; + +Question: '?'; + +Colon: ':'; + +Doublecolon: '::'; + +Semi: ';'; + +Dot: '.'; + +DotStar: '.*'; + +Ellipsis: '...'; + +fragment Hexquad: HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT; + +fragment Universalcharactername: '\\u' Hexquad | '\\U' Hexquad Hexquad; + +Identifier: + /* + Identifiernondigit | Identifier Identifiernondigit | Identifier DIGIT + */ Identifiernondigit (Identifiernondigit | DIGIT)* +; + +fragment Identifiernondigit: NONDIGIT | Universalcharactername; + +fragment NONDIGIT: [a-zA-Z_]; + +fragment DIGIT: [0-9]; + +DecimalLiteral: NONZERODIGIT ('\''? DIGIT)*; + +OctalLiteral: '0' ('\''? OCTALDIGIT)*; + +HexadecimalLiteral: ('0x' | '0X') HEXADECIMALDIGIT ( '\''? HEXADECIMALDIGIT)*; + +BinaryLiteral: ('0b' | '0B') BINARYDIGIT ('\''? BINARYDIGIT)*; + +fragment NONZERODIGIT: [1-9]; + +fragment OCTALDIGIT: [0-7]; + +fragment HEXADECIMALDIGIT: [0-9a-fA-F]; + +fragment BINARYDIGIT: [01]; + +Integersuffix: + Unsignedsuffix Longsuffix? + | Unsignedsuffix Longlongsuffix? + | Longsuffix Unsignedsuffix? + | Longlongsuffix Unsignedsuffix? +; + +fragment Unsignedsuffix: [uU]; + +fragment Longsuffix: [lL]; + +fragment Longlongsuffix: 'll' | 'LL'; + +fragment Cchar: ~ ['\\\r\n] | Escapesequence | Universalcharactername; + +fragment Escapesequence: Simpleescapesequence | Octalescapesequence | Hexadecimalescapesequence; + +fragment Simpleescapesequence: + '\\\'' + | '\\"' + | '\\?' + | '\\\\' + | '\\a' + | '\\b' + | '\\f' + | '\\n' + | '\\r' + | '\\' ('\r' '\n'? | '\n') + | '\\t' + | '\\v' +; + +fragment Octalescapesequence: + '\\' OCTALDIGIT + | '\\' OCTALDIGIT OCTALDIGIT + | '\\' OCTALDIGIT OCTALDIGIT OCTALDIGIT +; + +fragment Hexadecimalescapesequence: '\\x' HEXADECIMALDIGIT+; + +fragment Fractionalconstant: Digitsequence? '.' Digitsequence | Digitsequence '.'; + +fragment Exponentpart: 'e' SIGN? Digitsequence | 'E' SIGN? Digitsequence; + +fragment SIGN: [+-]; + +fragment Digitsequence: DIGIT ('\''? DIGIT)*; + +fragment Floatingsuffix: [flFL]; + +fragment Encodingprefix: 'u8' | 'u' | 'U' | 'L'; + +fragment Schar: ~ ["\\\r\n] | Escapesequence | Universalcharactername; + +fragment Rawstring: 'R"' ( '\\' ["()] | ~[\r\n (])*? '(' ~[)]*? ')' ( '\\' ["()] | ~[\r\n "])*? '"'; + +UserDefinedIntegerLiteral: + DecimalLiteral Udsuffix + | OctalLiteral Udsuffix + | HexadecimalLiteral Udsuffix + | BinaryLiteral Udsuffix +; + +UserDefinedFloatingLiteral: + Fractionalconstant Exponentpart? Udsuffix + | Digitsequence Exponentpart Udsuffix +; + +UserDefinedStringLiteral: StringLiteral Udsuffix; + +UserDefinedCharacterLiteral: CharacterLiteral Udsuffix; + +fragment Udsuffix: Identifier; + +Whitespace: [ \t]+ -> skip; + +Newline: ('\r' '\n'? | '\n') -> skip; + +BlockComment: '/*' .*? '*/' -> skip; + +LineComment: '//' ~ [\r\n]* -> skip; \ No newline at end of file diff --git a/grammars/CPP14Parser.g4 b/grammars/CPP14Parser.g4 new file mode 100644 index 0000000..d89a8a8 --- /dev/null +++ b/grammars/CPP14Parser.g4 @@ -0,0 +1,1075 @@ +/******************************************************************************* + * The MIT License (MIT) + * + * Copyright (c) 2015 Camilo Sanchez (Camiloasc1) 2020 Martin Mirchev (Marti2203) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * **************************************************************************** + */ + +// $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging + +parser grammar CPP14Parser; + +options { + superClass = CPP14ParserBase; + tokenVocab = CPP14Lexer; +} + +// Insert here @header for C++ parser. + +/*Basic concepts*/ + +translationUnit + : declarationseq? EOF + ; + +/*Expressions*/ + +primaryExpression + : literal+ + | This + | LeftParen expression RightParen + | idExpression + | lambdaExpression + ; + +idExpression + : unqualifiedId + | qualifiedId + ; + +unqualifiedId + : Identifier + | operatorFunctionId + | conversionFunctionId + | literalOperatorId + | Tilde (className | decltypeSpecifier) + | templateId + ; + +qualifiedId + : nestedNameSpecifier Template? unqualifiedId + ; + +nestedNameSpecifier + : (theTypeName | namespaceName | decltypeSpecifier)? Doublecolon + | nestedNameSpecifier ( Identifier | Template? simpleTemplateId) Doublecolon + ; + +lambdaExpression + : lambdaIntroducer lambdaDeclarator? compoundStatement + ; + +lambdaIntroducer + : LeftBracket lambdaCapture? RightBracket + ; + +lambdaCapture + : captureList + | captureDefault (Comma captureList)? + ; + +captureDefault + : And + | Assign + ; + +captureList + : capture (Comma capture)* Ellipsis? + ; + +capture + : simpleCapture + | initcapture + ; + +simpleCapture + : And? Identifier + | This + ; + +initcapture + : And? Identifier initializer + ; + +lambdaDeclarator + : LeftParen parameterDeclarationClause? RightParen Mutable? exceptionSpecification? attributeSpecifierSeq? trailingReturnType? + ; + +postfixExpression + : primaryExpression + | postfixExpression LeftBracket (expression | bracedInitList) RightBracket + | postfixExpression LeftParen expressionList? RightParen + | (simpleTypeSpecifier | typeNameSpecifier) ( + LeftParen expressionList? RightParen + | bracedInitList + ) + | postfixExpression (Dot | Arrow) (Template? idExpression | pseudoDestructorName) + | postfixExpression (PlusPlus | MinusMinus) + | (Dynamic_cast | Static_cast | Reinterpret_cast | Const_cast) Less theTypeId Greater LeftParen expression RightParen + | typeIdOfTheTypeId LeftParen (expression | theTypeId) RightParen + ; + +/* + add a middle layer to eliminate duplicated function declarations + */ + +typeIdOfTheTypeId + : Typeid_ + ; + +expressionList + : initializerList + ; + +pseudoDestructorName + : nestedNameSpecifier? (theTypeName Doublecolon)? Tilde theTypeName + | nestedNameSpecifier Template simpleTemplateId Doublecolon Tilde theTypeName + | Tilde decltypeSpecifier + ; + +unaryExpression + : postfixExpression + | (PlusPlus | MinusMinus | unaryOperator | Sizeof) unaryExpression + | Sizeof (LeftParen theTypeId RightParen | Ellipsis LeftParen Identifier RightParen) + | Alignof LeftParen theTypeId RightParen + | noExceptExpression + | newExpression_ + | deleteExpression + ; + +unaryOperator + : Or + | Star + | And + | Plus + | Tilde + | Minus + | Not + ; + +newExpression_ + : Doublecolon? New newPlacement? (newTypeId | LeftParen theTypeId RightParen) newInitializer_? + ; + +newPlacement + : LeftParen expressionList RightParen + ; + +newTypeId + : typeSpecifierSeq newDeclarator_? + ; + +newDeclarator_ + : pointerOperator newDeclarator_? + | noPointerNewDeclarator + ; + +noPointerNewDeclarator + : LeftBracket expression RightBracket attributeSpecifierSeq? + | noPointerNewDeclarator LeftBracket constantExpression RightBracket attributeSpecifierSeq? + ; + +newInitializer_ + : LeftParen expressionList? RightParen + | bracedInitList + ; + +deleteExpression + : Doublecolon? Delete (LeftBracket RightBracket)? castExpression + ; + +noExceptExpression + : Noexcept LeftParen expression RightParen + ; + +castExpression + : unaryExpression + | LeftParen theTypeId RightParen castExpression + ; + +pointerMemberExpression + : castExpression ((DotStar | ArrowStar) castExpression)* + ; + +multiplicativeExpression + : pointerMemberExpression ((Star | Div | Mod) pointerMemberExpression)* + ; + +additiveExpression + : multiplicativeExpression ((Plus | Minus) multiplicativeExpression)* + ; + +shiftExpression + : additiveExpression (shiftOperator additiveExpression)* + ; + +shiftOperator + : Greater Greater + | Less Less + ; + +relationalExpression + : shiftExpression ((Less | Greater | LessEqual | GreaterEqual) shiftExpression)* + ; + +equalityExpression + : relationalExpression ((Equal | NotEqual) relationalExpression)* + ; + +andExpression + : equalityExpression (And equalityExpression)* + ; + +exclusiveOrExpression + : andExpression (Caret andExpression)* + ; + +inclusiveOrExpression + : exclusiveOrExpression (Or exclusiveOrExpression)* + ; + +logicalAndExpression + : inclusiveOrExpression (AndAnd inclusiveOrExpression)* + ; + +logicalOrExpression + : logicalAndExpression (OrOr logicalAndExpression)* + ; + +conditionalExpression + : logicalOrExpression (Question expression Colon assignmentExpression)? + ; + +assignmentExpression + : conditionalExpression + | logicalOrExpression assignmentOperator initializerClause + | throwExpression + ; + +assignmentOperator + : Assign + | StarAssign + | DivAssign + | ModAssign + | PlusAssign + | MinusAssign + | RightShiftAssign + | LeftShiftAssign + | AndAssign + | XorAssign + | OrAssign + ; + +expression + : assignmentExpression (Comma assignmentExpression)* + ; + +constantExpression + : conditionalExpression + ; + +/*Statements*/ + +statement + : labeledStatement + | declarationStatement + | attributeSpecifierSeq? ( + expressionStatement + | compoundStatement + | selectionStatement + | iterationStatement + | jumpStatement + | tryBlock + ) + ; + +labeledStatement + : attributeSpecifierSeq? (Identifier | Case constantExpression | Default) Colon statement + ; + +expressionStatement + : expression? Semi + ; + +compoundStatement + : LeftBrace statementSeq? RightBrace + ; + +statementSeq + : statement+ + ; + +selectionStatement + : If LeftParen condition RightParen statement (Else statement)? + | Switch LeftParen condition RightParen statement + ; + +condition + : expression + | attributeSpecifierSeq? declSpecifierSeq declarator ( + Assign initializerClause + | bracedInitList + ) + ; + +iterationStatement + : While LeftParen condition RightParen statement + | Do statement While LeftParen expression RightParen Semi + | For LeftParen ( + forInitStatement condition? Semi expression? + | forRangeDeclaration Colon forRangeInitializer + ) RightParen statement + ; + +forInitStatement + : expressionStatement + | simpleDeclaration + ; + +forRangeDeclaration + : attributeSpecifierSeq? declSpecifierSeq declarator + ; + +forRangeInitializer + : expression + | bracedInitList + ; + +jumpStatement + : (Break | Continue | Return (expression | bracedInitList)? | Goto Identifier) Semi + ; + +declarationStatement + : blockDeclaration + ; + +/*Declarations*/ + +declarationseq + : declaration+ + ; + +declaration + : blockDeclaration + | functionDefinition + | templateDeclaration + | explicitInstantiation + | explicitSpecialization + | linkageSpecification + | namespaceDefinition + | emptyDeclaration_ + | attributeDeclaration + ; + +blockDeclaration + : simpleDeclaration + | asmDefinition + | namespaceAliasDefinition + | usingDeclaration + | usingDirective + | staticAssertDeclaration + | aliasDeclaration + | opaqueEnumDeclaration + ; + +aliasDeclaration + : Using Identifier attributeSpecifierSeq? Assign theTypeId Semi + ; + +simpleDeclaration + : declSpecifierSeq? initDeclaratorList? Semi + | attributeSpecifierSeq declSpecifierSeq? initDeclaratorList Semi + ; + +staticAssertDeclaration + : Static_assert LeftParen constantExpression Comma StringLiteral RightParen Semi + ; + +emptyDeclaration_ + : Semi + ; + +attributeDeclaration + : attributeSpecifierSeq Semi + ; + +declSpecifier + : storageClassSpecifier + | typeSpecifier + | functionSpecifier + | Friend + | Typedef + | Constexpr + ; + +declSpecifierSeq + : declSpecifier+? attributeSpecifierSeq? + ; + +storageClassSpecifier + : Register + | Static + | Thread_local + | Extern + | Mutable + ; + +functionSpecifier + : Inline + | Virtual + | Explicit + ; + +typedefName + : Identifier + ; + +typeSpecifier + : trailingTypeSpecifier + | classSpecifier + | enumSpecifier + ; + +trailingTypeSpecifier + : simpleTypeSpecifier + | elaboratedTypeSpecifier + | typeNameSpecifier + | cvQualifier + ; + +typeSpecifierSeq + : typeSpecifier+ attributeSpecifierSeq? + ; + +trailingTypeSpecifierSeq + : trailingTypeSpecifier+ attributeSpecifierSeq? + ; + +simpleTypeLengthModifier + : Short + | Long + ; + +simpleTypeSignednessModifier + : Unsigned + | Signed + ; + +simpleTypeSpecifier + : nestedNameSpecifier? theTypeName + | nestedNameSpecifier Template simpleTemplateId + | Char + | Char16 + | Char32 + | Wchar + | Bool + | Short + | Int + | Long + | Float + | Signed + | Unsigned + | Float + | Double + | Void + | Auto + | decltypeSpecifier + ; + +theTypeName + : className + | enumName + | typedefName + | simpleTemplateId + ; + +decltypeSpecifier + : Decltype LeftParen (expression | Auto) RightParen + ; + +elaboratedTypeSpecifier + : classKey ( + attributeSpecifierSeq? nestedNameSpecifier? Identifier + | simpleTemplateId + | nestedNameSpecifier Template? simpleTemplateId + ) + | Enum nestedNameSpecifier? Identifier + ; + +enumName + : Identifier + ; + +enumSpecifier + : enumHead LeftBrace (enumeratorList Comma?)? RightBrace + ; + +enumHead + : enumkey attributeSpecifierSeq? (nestedNameSpecifier? Identifier)? enumbase? + ; + +opaqueEnumDeclaration + : enumkey attributeSpecifierSeq? Identifier enumbase? Semi + ; + +enumkey + : Enum (Class | Struct)? + ; + +enumbase + : Colon typeSpecifierSeq + ; + +enumeratorList + : enumeratorDefinition (Comma enumeratorDefinition)* + ; + +enumeratorDefinition + : enumerator (Assign constantExpression)? + ; + +enumerator + : Identifier + ; + +namespaceName + : originalNamespaceName + | namespaceAlias + ; + +originalNamespaceName + : Identifier + ; + +namespaceDefinition + : Inline? Namespace (Identifier | originalNamespaceName)? LeftBrace namespaceBody = declarationseq? RightBrace + ; + +namespaceAlias + : Identifier + ; + +namespaceAliasDefinition + : Namespace Identifier Assign qualifiednamespacespecifier Semi + ; + +qualifiednamespacespecifier + : nestedNameSpecifier? namespaceName + ; + +usingDeclaration + : Using (Typename_? nestedNameSpecifier | Doublecolon) unqualifiedId Semi + ; + +usingDirective + : attributeSpecifierSeq? Using Namespace nestedNameSpecifier? namespaceName Semi + ; + +asmDefinition + : Asm LeftParen StringLiteral RightParen Semi + ; + +linkageSpecification + : Extern StringLiteral (LeftBrace declarationseq? RightBrace | declaration) + ; + +attributeSpecifierSeq + : attributeSpecifier+ + ; + +attributeSpecifier + : LeftBracket LeftBracket attributeList? RightBracket RightBracket + | alignmentspecifier + ; + +alignmentspecifier + : Alignas LeftParen (theTypeId | constantExpression) Ellipsis? RightParen + ; + +attributeList + : attribute (Comma attribute)* Ellipsis? + ; + +attribute + : (attributeNamespace Doublecolon)? Identifier attributeArgumentClause? + ; + +attributeNamespace + : Identifier + ; + +attributeArgumentClause + : LeftParen balancedTokenSeq? RightParen + ; + +balancedTokenSeq + : balancedtoken+ + ; + +balancedtoken + : LeftParen balancedTokenSeq RightParen + | LeftBracket balancedTokenSeq RightBracket + | LeftBrace balancedTokenSeq RightBrace + | ~(LeftParen | RightParen | LeftBrace | RightBrace | LeftBracket | RightBracket)+ + ; + +/*Declarators*/ + +initDeclaratorList + : initDeclarator (Comma initDeclarator)* + ; + +initDeclarator + : declarator initializer? + ; + +declarator + : pointerDeclarator + | noPointerDeclarator parametersAndQualifiers trailingReturnType + ; + +pointerDeclarator + : (pointerOperator Const?)* noPointerDeclarator + ; + +noPointerDeclarator + : declaratorid attributeSpecifierSeq? + | noPointerDeclarator ( + parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + ) + | LeftParen pointerDeclarator RightParen + ; + +parametersAndQualifiers + : LeftParen parameterDeclarationClause? RightParen cvqualifierseq? refqualifier? exceptionSpecification? attributeSpecifierSeq? + ; + +trailingReturnType + : Arrow trailingTypeSpecifierSeq abstractDeclarator? + ; + +pointerOperator + : (And | AndAnd) attributeSpecifierSeq? + | nestedNameSpecifier? Star attributeSpecifierSeq? cvqualifierseq? + ; + +cvqualifierseq + : cvQualifier+ + ; + +cvQualifier + : Const + | Volatile + ; + +refqualifier + : And + | AndAnd + ; + +declaratorid + : Ellipsis? idExpression + ; + +theTypeId + : typeSpecifierSeq abstractDeclarator? + ; + +abstractDeclarator + : pointerAbstractDeclarator + | noPointerAbstractDeclarator? parametersAndQualifiers trailingReturnType + | abstractPackDeclarator + ; + +pointerAbstractDeclarator + : pointerOperator* (noPointerAbstractDeclarator | pointerOperator) + ; + +noPointerAbstractDeclarator + : (parametersAndQualifiers | LeftParen pointerAbstractDeclarator RightParen) ( + parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + )* + ; + +abstractPackDeclarator + : pointerOperator* noPointerAbstractPackDeclarator + ; + +noPointerAbstractPackDeclarator + : Ellipsis ( + parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + )* + ; + +parameterDeclarationClause + : parameterDeclarationList (Comma? Ellipsis)? + ; + +parameterDeclarationList + : parameterDeclaration (Comma parameterDeclaration)* + ; + +parameterDeclaration + : attributeSpecifierSeq? declSpecifierSeq (declarator | abstractDeclarator?) ( + Assign initializerClause + )? + ; + +functionDefinition + : attributeSpecifierSeq? declSpecifierSeq? declarator virtualSpecifierSeq? functionBody + ; + +functionBody + : constructorInitializer? compoundStatement + | functionTryBlock + | Assign (Default | Delete) Semi + ; + +initializer + : braceOrEqualInitializer + | LeftParen expressionList RightParen + ; + +braceOrEqualInitializer + : Assign initializerClause + | bracedInitList + ; + +initializerClause + : assignmentExpression + | bracedInitList + ; + +initializerList + : initializerClause Ellipsis? (Comma initializerClause Ellipsis?)* + ; + +bracedInitList + : LeftBrace (initializerList Comma?)? RightBrace + ; + +/*Classes*/ + +className + : Identifier + | simpleTemplateId + ; + +classSpecifier + : classHead LeftBrace memberSpecification? RightBrace + ; + +classHead + : classKey attributeSpecifierSeq? (classHeadName classVirtSpecifier?)? baseClause? + | Union attributeSpecifierSeq? ( classHeadName classVirtSpecifier?)? + ; + +classHeadName + : nestedNameSpecifier? className + ; + +classVirtSpecifier + : Final + ; + +classKey + : Class + | Struct + ; + +memberSpecification + : (memberdeclaration | accessSpecifier Colon)+ + ; + +memberdeclaration + : attributeSpecifierSeq? declSpecifierSeq? memberDeclaratorList? Semi + | functionDefinition + | usingDeclaration + | staticAssertDeclaration + | templateDeclaration + | aliasDeclaration + | emptyDeclaration_ + ; + +memberDeclaratorList + : memberDeclarator (Comma memberDeclarator)* + ; + +memberDeclarator + : declarator ( + virtualSpecifierSeq + | { this.IsPureSpecifierAllowed() }? pureSpecifier + | { this.IsPureSpecifierAllowed() }? virtualSpecifierSeq pureSpecifier + | braceOrEqualInitializer + ) + | declarator + | Identifier? attributeSpecifierSeq? Colon constantExpression + ; + +virtualSpecifierSeq + : virtualSpecifier+ + ; + +virtualSpecifier + : Override + | Final + ; + +/* + purespecifier: Assign '0'//Conflicts with the lexer ; + */ + +pureSpecifier + : Assign IntegerLiteral + ; + +/*Derived classes*/ + +baseClause + : Colon baseSpecifierList + ; + +baseSpecifierList + : baseSpecifier Ellipsis? (Comma baseSpecifier Ellipsis?)* + ; + +baseSpecifier + : attributeSpecifierSeq? ( + baseTypeSpecifier + | Virtual accessSpecifier? baseTypeSpecifier + | accessSpecifier Virtual? baseTypeSpecifier + ) + ; + +classOrDeclType + : nestedNameSpecifier? className + | decltypeSpecifier + ; + +baseTypeSpecifier + : classOrDeclType + ; + +accessSpecifier + : Private + | Protected + | Public + ; + +/*Special member functions*/ + +conversionFunctionId + : Operator conversionTypeId + ; + +conversionTypeId + : typeSpecifierSeq conversionDeclarator? + ; + +conversionDeclarator + : pointerOperator conversionDeclarator? + ; + +constructorInitializer + : Colon memInitializerList + ; + +memInitializerList + : memInitializer Ellipsis? (Comma memInitializer Ellipsis?)* + ; + +memInitializer + : meminitializerid (LeftParen expressionList? RightParen | bracedInitList) + ; + +meminitializerid + : classOrDeclType + | Identifier + ; + +/*Overloading*/ + +operatorFunctionId + : Operator theOperator + ; + +literalOperatorId + : Operator (StringLiteral Identifier | UserDefinedStringLiteral) + ; + +/*Templates*/ + +templateDeclaration + : Template Less templateparameterList Greater declaration + ; + +templateparameterList + : templateParameter (Comma templateParameter)* + ; + +templateParameter + : typeParameter + | parameterDeclaration + ; + +typeParameter + : ((Template Less templateparameterList Greater)? Class | Typename_) ( + Ellipsis? Identifier? + | Identifier? Assign theTypeId + ) + ; + +simpleTemplateId + : templateName Less templateArgumentList? Greater + ; + +templateId + : simpleTemplateId + | (operatorFunctionId | literalOperatorId) Less templateArgumentList? Greater + ; + +templateName + : Identifier + ; + +templateArgumentList + : templateArgument Ellipsis? (Comma templateArgument Ellipsis?)* + ; + +templateArgument + : theTypeId + | constantExpression + | idExpression + ; + +typeNameSpecifier + : Typename_ nestedNameSpecifier (Identifier | Template? simpleTemplateId) + ; + +explicitInstantiation + : Extern? Template declaration + ; + +explicitSpecialization + : Template Less Greater declaration + ; + +/*Exception handling*/ + +tryBlock + : Try compoundStatement handlerSeq + ; + +functionTryBlock + : Try constructorInitializer? compoundStatement handlerSeq + ; + +handlerSeq + : handler+ + ; + +handler + : Catch LeftParen exceptionDeclaration RightParen compoundStatement + ; + +exceptionDeclaration + : attributeSpecifierSeq? typeSpecifierSeq (declarator | abstractDeclarator)? + | Ellipsis + ; + +throwExpression + : Throw assignmentExpression? + ; + +exceptionSpecification + : dynamicExceptionSpecification + | noeExceptSpecification + ; + +dynamicExceptionSpecification + : Throw LeftParen typeIdList? RightParen + ; + +typeIdList + : theTypeId Ellipsis? (Comma theTypeId Ellipsis?)* + ; + +noeExceptSpecification + : Noexcept LeftParen constantExpression RightParen + | Noexcept + ; + +/*Preprocessing directives*/ + +/*Lexer*/ + +theOperator + : New (LeftBracket RightBracket)? + | Delete (LeftBracket RightBracket)? + | Plus + | Minus + | Star + | Div + | Mod + | Caret + | And + | Or + | Tilde + | Not + | Assign + | Greater + | Less + | GreaterEqual + | PlusAssign + | MinusAssign + | StarAssign + | ModAssign + | XorAssign + | AndAssign + | OrAssign + | Less Less + | Greater Greater + | RightShiftAssign + | LeftShiftAssign + | Equal + | NotEqual + | LessEqual + | AndAnd + | OrOr + | PlusPlus + | MinusMinus + | Comma + | ArrowStar + | Arrow + | LeftParen RightParen + | LeftBracket RightBracket + ; + +literal + : IntegerLiteral + | CharacterLiteral + | FloatingLiteral + | StringLiteral + | BooleanLiteral + | PointerLiteral + | UserDefinedLiteral + ; \ No newline at end of file diff --git a/grammars/Java20Lexer.g4 b/grammars/Java20Lexer.g4 new file mode 100644 index 0000000..0b6dfdd --- /dev/null +++ b/grammars/Java20Lexer.g4 @@ -0,0 +1,941 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine +// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true + +lexer grammar Java20Lexer; + +// LEXER + +EXPORTS : 'exports'; +MODULE : 'module'; +NONSEALED : 'non-sealed'; +OACA : '<>'; +OPEN : 'open'; +OPENS : 'opens'; +PERMITS : 'permits'; +PROVIDES : 'provides'; +RECORD : 'record'; +REQUIRES : 'requires'; +SEALED : 'sealed'; +TO : 'to'; +TRANSITIVE : 'transitive'; +USES : 'uses'; +VAR : 'var'; +WITH : 'with'; +YIELD : 'yield'; + +// §3.9 Keywords + +ABSTRACT : 'abstract'; +ASSERT : 'assert'; +BOOLEAN : 'boolean'; +BREAK : 'break'; +BYTE : 'byte'; +CASE : 'case'; +CATCH : 'catch'; +CHAR : 'char'; +CLASS : 'class'; +CONST : 'const'; +CONTINUE : 'continue'; +DEFAULT : 'default'; +DO : 'do'; +DOUBLE : 'double'; +ELSE : 'else'; +ENUM : 'enum'; +EXTENDS : 'extends'; +FINAL : 'final'; +FINALLY : 'finally'; +FLOAT : 'float'; +FOR : 'for'; +IF : 'if'; +GOTO : 'goto'; +IMPLEMENTS : 'implements'; +IMPORT : 'import'; +INSTANCEOF : 'instanceof'; +INT : 'int'; +INTERFACE : 'interface'; +LONG : 'long'; +NATIVE : 'native'; +NEW : 'new'; +PACKAGE : 'package'; +PRIVATE : 'private'; +PROTECTED : 'protected'; +PUBLIC : 'public'; +RETURN : 'return'; +SHORT : 'short'; +STATIC : 'static'; +STRICTFP : 'strictfp'; +SUPER : 'super'; +SWITCH : 'switch'; +SYNCHRONIZED : 'synchronized'; +THIS : 'this'; +THROW : 'throw'; +THROWS : 'throws'; +TRANSIENT : 'transient'; +TRY : 'try'; +VOID : 'void'; +VOLATILE : 'volatile'; +WHILE : 'while'; +UNDER_SCORE : '_'; //Introduced in Java 9 + +// §3.10.1 Integer Literals + +IntegerLiteral: + DecimalIntegerLiteral + | HexIntegerLiteral + | OctalIntegerLiteral + | BinaryIntegerLiteral +; + +fragment DecimalIntegerLiteral: DecimalNumeral IntegerTypeSuffix?; + +fragment HexIntegerLiteral: HexNumeral IntegerTypeSuffix?; + +fragment OctalIntegerLiteral: OctalNumeral IntegerTypeSuffix?; + +fragment BinaryIntegerLiteral: BinaryNumeral IntegerTypeSuffix?; + +fragment IntegerTypeSuffix: [lL]; + +fragment DecimalNumeral: '0' | NonZeroDigit (Digits? | Underscores Digits); + +fragment Digits: Digit (DigitsAndUnderscores? Digit)?; + +fragment Digit: '0' | NonZeroDigit; + +fragment NonZeroDigit: [1-9]; + +fragment DigitsAndUnderscores: DigitOrUnderscore+; + +fragment DigitOrUnderscore: Digit | '_'; + +fragment Underscores: '_'+; + +fragment HexNumeral: '0' [xX] HexDigits; + +fragment HexDigits: HexDigit (HexDigitsAndUnderscores? HexDigit)?; + +fragment HexDigit: [0-9a-fA-F]; + +fragment HexDigitsAndUnderscores: HexDigitOrUnderscore+; + +fragment HexDigitOrUnderscore: HexDigit | '_'; + +fragment OctalNumeral: '0' Underscores? OctalDigits; + +fragment OctalDigits: OctalDigit (OctalDigitsAndUnderscores? OctalDigit)?; + +fragment OctalDigit: [0-7]; + +fragment OctalDigitsAndUnderscores: OctalDigitOrUnderscore+; + +fragment OctalDigitOrUnderscore: OctalDigit | '_'; + +fragment BinaryNumeral: '0' [bB] BinaryDigits; + +fragment BinaryDigits: BinaryDigit (BinaryDigitsAndUnderscores? BinaryDigit)?; + +fragment BinaryDigit: [01]; + +fragment BinaryDigitsAndUnderscores: BinaryDigitOrUnderscore+; + +fragment BinaryDigitOrUnderscore: BinaryDigit | '_'; + +// §3.10.2 Floating-Point Literals + +FloatingPointLiteral: DecimalFloatingPointLiteral | HexadecimalFloatingPointLiteral; + +fragment DecimalFloatingPointLiteral: + Digits '.' Digits? ExponentPart? FloatTypeSuffix? + | '.' Digits ExponentPart? FloatTypeSuffix? + | Digits ExponentPart FloatTypeSuffix? + | Digits FloatTypeSuffix +; + +fragment ExponentPart: ExponentIndicator SignedInteger; + +fragment ExponentIndicator: [eE]; + +fragment SignedInteger: Sign? Digits; + +fragment Sign: [+-]; + +fragment FloatTypeSuffix: [fFdD]; + +fragment HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffix?; + +fragment HexSignificand: HexNumeral '.'? | '0' [xX] HexDigits? '.' HexDigits; + +fragment BinaryExponent: BinaryExponentIndicator SignedInteger; + +fragment BinaryExponentIndicator: [pP]; + +// §3.10.3 Boolean Literals + +BooleanLiteral: 'true' | 'false'; + +// §3.10.4 Character Literals + +CharacterLiteral: '\'' SingleCharacter '\'' | '\'' EscapeSequence '\''; + +fragment SingleCharacter: ~['\\\r\n]; + +// §3.10.5 String Literals + +StringLiteral: '"' StringCharacters? '"'; + +fragment StringCharacters: StringCharacter+; + +fragment StringCharacter: ~["\\\r\n] | EscapeSequence; + +TextBlock: '"""' [ \t]* [\n\r] [.\r\b]* '"""'; + +// §3.10.6 Escape Sequences for Character and String Literals + +fragment EscapeSequence: + '\\' [btnfr"'\\] + | OctalEscape + | UnicodeEscape // This is not in the spec but prevents having to preprocess the input +; + +fragment OctalEscape: + '\\' OctalDigit + | '\\' OctalDigit OctalDigit + | '\\' ZeroToThree OctalDigit OctalDigit +; + +fragment ZeroToThree: [0-3]; + +// This is not in the spec but prevents having to preprocess the input +fragment UnicodeEscape: '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit; + +// §3.10.7 The Null Literal + +NullLiteral: 'null'; + +// §3.11 Separators + +LPAREN : '('; +RPAREN : ')'; +LBRACE : '{'; +RBRACE : '}'; +LBRACK : '['; +RBRACK : ']'; +SEMI : ';'; +COMMA : ','; +DOT : '.'; +ELLIPSIS : '...'; +AT : '@'; +COLONCOLON : '::'; + +// §3.12 Operators + +ASSIGN : '='; +GT : '>'; +LT : '<'; +BANG : '!'; +TILDE : '~'; +QUESTION : '?'; +COLON : ':'; +ARROW : '->'; +EQUAL : '=='; +LE : '<='; +GE : '>='; +NOTEQUAL : '!='; +AND : '&&'; +OR : '||'; +INC : '++'; +DEC : '--'; +ADD : '+'; +SUB : '-'; +MUL : '*'; +DIV : '/'; +BITAND : '&'; +BITOR : '|'; +CARET : '^'; +MOD : '%'; +//LSHIFT : '<<'; +//RSHIFT : '>>'; +//URSHIFT : '>>>'; + +ADD_ASSIGN : '+='; +SUB_ASSIGN : '-='; +MUL_ASSIGN : '*='; +DIV_ASSIGN : '/='; +AND_ASSIGN : '&='; +OR_ASSIGN : '|='; +XOR_ASSIGN : '^='; +MOD_ASSIGN : '%='; +LSHIFT_ASSIGN : '<<='; +RSHIFT_ASSIGN : '>>='; +URSHIFT_ASSIGN : '>>>='; + +// §3.8 Identifiers (must appear after all keywords in the grammar) + +Identifier: IdentifierStart IdentifierPart*; +/* +fragment +JavaLetter + : [a-zA-Z$_] // these are the "java letters" below 0x7F + | // covers all characters above 0x7F which are not a surrogate + ~[\u0000-\u007F\uD800-\uDBFF] {this.wasJavaIdentiferStart()}? + | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF + [\uD800-\uDBFF] [\uDC00-\uDFFF] {this.wasJavaIdentiferStartUTF16()}? + ; + +fragment +JavaLetterOrDigit + : [a-zA-Z0-9$_] // these are the "java letters or digits" below 0x7F + | // covers all characters above 0x7F which are not a surrogate + ~[\u0000-\u007F\uD800-\uDBFF] {this.wasJavaIdentiferPart()}? + | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF + [\uD800-\uDBFF] [\uDC00-\uDFFF] {this.wasJavaIdentiferPartUTF16()}? + ;*/ + +// Dropped SMP support as ANTLR has no native support for it +fragment IdentifierStart: + [\u0024] + | [\u0041-\u005A] + | [\u005F] + | [\u0061-\u007A] + | [\u00A2-\u00A5] + | [\u00AA] + | [\u00B5] + | [\u00BA] + | [\u00C0-\u00D6] + | [\u00D8-\u00F6] + | [\u00F8-\u02C1] + | [\u02C6-\u02D1] + | [\u02E0-\u02E4] + | [\u02EC] + | [\u02EE] + | [\u0370-\u0374] + | [\u0376-\u0377] + | [\u037A-\u037D] + | [\u037F] + | [\u0386] + | [\u0388-\u038A] + | [\u038C] + | [\u038E-\u03A1] + | [\u03A3-\u03F5] + | [\u03F7-\u0481] + | [\u048A-\u052F] + | [\u0531-\u0556] + | [\u0559] + | [\u0561-\u0587] + | [\u058F] + | [\u05D0-\u05EA] + | [\u05F0-\u05F2] + | [\u060B] + | [\u0620-\u064A] + | [\u066E-\u066F] + | [\u0671-\u06D3] + | [\u06D5] + | [\u06E5-\u06E6] + | [\u06EE-\u06EF] + | [\u06FA-\u06FC] + | [\u06FF] + | [\u0710] + | [\u0712-\u072F] + | [\u074D-\u07A5] + | [\u07B1] + | [\u07CA-\u07EA] + | [\u07F4-\u07F5] + | [\u07FA] + | [\u0800-\u0815] + | [\u081A] + | [\u0824] + | [\u0828] + | [\u0840-\u0858] + | [\u0860-\u086A] + | [\u08A0-\u08B4] + | [\u08B6-\u08BD] + | [\u0904-\u0939] + | [\u093D] + | [\u0950] + | [\u0958-\u0961] + | [\u0971-\u0980] + | [\u0985-\u098C] + | [\u098F-\u0990] + | [\u0993-\u09A8] + | [\u09AA-\u09B0] + | [\u09B2] + | [\u09B6-\u09B9] + | [\u09BD] + | [\u09CE] + | [\u09DC-\u09DD] + | [\u09DF-\u09E1] + | [\u09F0-\u09F3] + | [\u09FB-\u09FC] + | [\u0A05-\u0A0A] + | [\u0A0F-\u0A10] + | [\u0A13-\u0A28] + | [\u0A2A-\u0A30] + | [\u0A32-\u0A33] + | [\u0A35-\u0A36] + | [\u0A38-\u0A39] + | [\u0A59-\u0A5C] + | [\u0A5E] + | [\u0A72-\u0A74] + | [\u0A85-\u0A8D] + | [\u0A8F-\u0A91] + | [\u0A93-\u0AA8] + | [\u0AAA-\u0AB0] + | [\u0AB2-\u0AB3] + | [\u0AB5-\u0AB9] + | [\u0ABD] + | [\u0AD0] + | [\u0AE0-\u0AE1] + | [\u0AF1] + | [\u0AF9] + | [\u0B05-\u0B0C] + | [\u0B0F-\u0B10] + | [\u0B13-\u0B28] + | [\u0B2A-\u0B30] + | [\u0B32-\u0B33] + | [\u0B35-\u0B39] + | [\u0B3D] + | [\u0B5C-\u0B5D] + | [\u0B5F-\u0B61] + | [\u0B71] + | [\u0B83] + | [\u0B85-\u0B8A] + | [\u0B8E-\u0B90] + | [\u0B92-\u0B95] + | [\u0B99-\u0B9A] + | [\u0B9C] + | [\u0B9E-\u0B9F] + | [\u0BA3-\u0BA4] + | [\u0BA8-\u0BAA] + | [\u0BAE-\u0BB9] + | [\u0BD0] + | [\u0BF9] + | [\u0C05-\u0C0C] + | [\u0C0E-\u0C10] + | [\u0C12-\u0C28] + | [\u0C2A-\u0C39] + | [\u0C3D] + | [\u0C58-\u0C5A] + | [\u0C60-\u0C61] + | [\u0C80] + | [\u0C85-\u0C8C] + | [\u0C8E-\u0C90] + | [\u0C92-\u0CA8] + | [\u0CAA-\u0CB3] + | [\u0CB5-\u0CB9] + | [\u0CBD] + | [\u0CDE] + | [\u0CE0-\u0CE1] + | [\u0CF1-\u0CF2] + | [\u0D05-\u0D0C] + | [\u0D0E-\u0D10] + | [\u0D12-\u0D3A] + | [\u0D3D] + | [\u0D4E] + | [\u0D54-\u0D56] + | [\u0D5F-\u0D61] + | [\u0D7A-\u0D7F] + | [\u0D85-\u0D96] + | [\u0D9A-\u0DB1] + | [\u0DB3-\u0DBB] + | [\u0DBD] + | [\u0DC0-\u0DC6] + | [\u0E01-\u0E30] + | [\u0E32-\u0E33] + | [\u0E3F-\u0E46] + | [\u0E81-\u0E82] + | [\u0E84] + | [\u0E87-\u0E88] + | [\u0E8A] + | [\u0E8D] + | [\u0E94-\u0E97] + | [\u0E99-\u0E9F] + | [\u0EA1-\u0EA3] + | [\u0EA5] + | [\u0EA7] + | [\u0EAA-\u0EAB] + | [\u0EAD-\u0EB0] + | [\u0EB2-\u0EB3] + | [\u0EBD] + | [\u0EC0-\u0EC4] + | [\u0EC6] + | [\u0EDC-\u0EDF] + | [\u0F00] + | [\u0F40-\u0F47] + | [\u0F49-\u0F6C] + | [\u0F88-\u0F8C] + | [\u1000-\u102A] + | [\u103F] + | [\u1050-\u1055] + | [\u105A-\u105D] + | [\u1061] + | [\u1065-\u1066] + | [\u106E-\u1070] + | [\u1075-\u1081] + | [\u108E] + | [\u10A0-\u10C5] + | [\u10C7] + | [\u10CD] + | [\u10D0-\u10FA] + | [\u10FC-\u1248] + | [\u124A-\u124D] + | [\u1250-\u1256] + | [\u1258] + | [\u125A-\u125D] + | [\u1260-\u1288] + | [\u128A-\u128D] + | [\u1290-\u12B0] + | [\u12B2-\u12B5] + | [\u12B8-\u12BE] + | [\u12C0] + | [\u12C2-\u12C5] + | [\u12C8-\u12D6] + | [\u12D8-\u1310] + | [\u1312-\u1315] + | [\u1318-\u135A] + | [\u1380-\u138F] + | [\u13A0-\u13F5] + | [\u13F8-\u13FD] + | [\u1401-\u166C] + | [\u166F-\u167F] + | [\u1681-\u169A] + | [\u16A0-\u16EA] + | [\u16EE-\u16F8] + | [\u1700-\u170C] + | [\u170E-\u1711] + | [\u1720-\u1731] + | [\u1740-\u1751] + | [\u1760-\u176C] + | [\u176E-\u1770] + | [\u1780-\u17B3] + | [\u17D7] + | [\u17DB-\u17DC] + | [\u1820-\u1877] + | [\u1880-\u1884] + | [\u1887-\u18A8] + | [\u18AA] + | [\u18B0-\u18F5] + | [\u1900-\u191E] + | [\u1950-\u196D] + | [\u1970-\u1974] + | [\u1980-\u19AB] + | [\u19B0-\u19C9] + | [\u1A00-\u1A16] + | [\u1A20-\u1A54] + | [\u1AA7] + | [\u1B05-\u1B33] + | [\u1B45-\u1B4B] + | [\u1B83-\u1BA0] + | [\u1BAE-\u1BAF] + | [\u1BBA-\u1BE5] + | [\u1C00-\u1C23] + | [\u1C4D-\u1C4F] + | [\u1C5A-\u1C7D] + | [\u1C80-\u1C88] + | [\u1CE9-\u1CEC] + | [\u1CEE-\u1CF1] + | [\u1CF5-\u1CF6] + | [\u1D00-\u1DBF] + | [\u1E00-\u1F15] + | [\u1F18-\u1F1D] + | [\u1F20-\u1F45] + | [\u1F48-\u1F4D] + | [\u1F50-\u1F57] + | [\u1F59] + | [\u1F5B] + | [\u1F5D] + | [\u1F5F-\u1F7D] + | [\u1F80-\u1FB4] + | [\u1FB6-\u1FBC] + | [\u1FBE] + | [\u1FC2-\u1FC4] + | [\u1FC6-\u1FCC] + | [\u1FD0-\u1FD3] + | [\u1FD6-\u1FDB] + | [\u1FE0-\u1FEC] + | [\u1FF2-\u1FF4] + | [\u1FF6-\u1FFC] + | [\u203F-\u2040] + | [\u2054] + | [\u2071] + | [\u207F] + | [\u2090-\u209C] + | [\u20A0-\u20BF] + | [\u2102] + | [\u2107] + | [\u210A-\u2113] + | [\u2115] + | [\u2119-\u211D] + | [\u2124] + | [\u2126] + | [\u2128] + | [\u212A-\u212D] + | [\u212F-\u2139] + | [\u213C-\u213F] + | [\u2145-\u2149] + | [\u214E] + | [\u2160-\u2188] + | [\u2C00-\u2C2E] + | [\u2C30-\u2C5E] + | [\u2C60-\u2CE4] + | [\u2CEB-\u2CEE] + | [\u2CF2-\u2CF3] + | [\u2D00-\u2D25] + | [\u2D27] + | [\u2D2D] + | [\u2D30-\u2D67] + | [\u2D6F] + | [\u2D80-\u2D96] + | [\u2DA0-\u2DA6] + | [\u2DA8-\u2DAE] + | [\u2DB0-\u2DB6] + | [\u2DB8-\u2DBE] + | [\u2DC0-\u2DC6] + | [\u2DC8-\u2DCE] + | [\u2DD0-\u2DD6] + | [\u2DD8-\u2DDE] + | [\u2E2F] + | [\u3005-\u3007] + | [\u3021-\u3029] + | [\u3031-\u3035] + | [\u3038-\u303C] + | [\u3041-\u3096] + | [\u309D-\u309F] + | [\u30A1-\u30FA] + | [\u30FC-\u30FF] + | [\u3105-\u312E] + | [\u3131-\u318E] + | [\u31A0-\u31BA] + | [\u31F0-\u31FF] + | [\u3400-\u4DB5] + | [\u4E00-\u9FEA] + | [\uA000-\uA48C] + | [\uA4D0-\uA4FD] + | [\uA500-\uA60C] + | [\uA610-\uA61F] + | [\uA62A-\uA62B] + | [\uA640-\uA66E] + | [\uA67F-\uA69D] + | [\uA6A0-\uA6EF] + | [\uA717-\uA71F] + | [\uA722-\uA788] + | [\uA78B-\uA7AE] + | [\uA7B0-\uA7B7] + | [\uA7F7-\uA801] + | [\uA803-\uA805] + | [\uA807-\uA80A] + | [\uA80C-\uA822] + | [\uA838] + | [\uA840-\uA873] + | [\uA882-\uA8B3] + | [\uA8F2-\uA8F7] + | [\uA8FB] + | [\uA8FD] + | [\uA90A-\uA925] + | [\uA930-\uA946] + | [\uA960-\uA97C] + | [\uA984-\uA9B2] + | [\uA9CF] + | [\uA9E0-\uA9E4] + | [\uA9E6-\uA9EF] + | [\uA9FA-\uA9FE] + | [\uAA00-\uAA28] + | [\uAA40-\uAA42] + | [\uAA44-\uAA4B] + | [\uAA60-\uAA76] + | [\uAA7A] + | [\uAA7E-\uAAAF] + | [\uAAB1] + | [\uAAB5-\uAAB6] + | [\uAAB9-\uAABD] + | [\uAAC0] + | [\uAAC2] + | [\uAADB-\uAADD] + | [\uAAE0-\uAAEA] + | [\uAAF2-\uAAF4] + | [\uAB01-\uAB06] + | [\uAB09-\uAB0E] + | [\uAB11-\uAB16] + | [\uAB20-\uAB26] + | [\uAB28-\uAB2E] + | [\uAB30-\uAB5A] + | [\uAB5C-\uAB65] + | [\uAB70-\uABE2] + | [\uAC00-\uD7A3] + | [\uD7B0-\uD7C6] + | [\uD7CB-\uD7FB] + | [\uF900-\uFA6D] + | [\uFA70-\uFAD9] + | [\uFB00-\uFB06] + | [\uFB13-\uFB17] + | [\uFB1D] + | [\uFB1F-\uFB28] + | [\uFB2A-\uFB36] + | [\uFB38-\uFB3C] + | [\uFB3E] + | [\uFB40-\uFB41] + | [\uFB43-\uFB44] + | [\uFB46-\uFBB1] + | [\uFBD3-\uFD3D] + | [\uFD50-\uFD8F] + | [\uFD92-\uFDC7] + | [\uFDF0-\uFDFC] + | [\uFE33-\uFE34] + | [\uFE4D-\uFE4F] + | [\uFE69] + | [\uFE70-\uFE74] + | [\uFE76-\uFEFC] + | [\uFF04] + | [\uFF21-\uFF3A] + | [\uFF3F] + | [\uFF41-\uFF5A] + | [\uFF66-\uFFBE] + | [\uFFC2-\uFFC7] + | [\uFFCA-\uFFCF] + | [\uFFD2-\uFFD7] + | [\uFFDA-\uFFDC] + | [\uFFE0-\uFFE1] + | [\uFFE5-\uFFE6] +; + +fragment IdentifierPart: + IdentifierStart + | [\u0030-\u0039] + | [\u007F-\u009F] + | [\u00AD] + | [\u0300-\u036F] + | [\u0483-\u0487] + | [\u0591-\u05BD] + | [\u05BF] + | [\u05C1-\u05C2] + | [\u05C4-\u05C5] + | [\u05C7] + | [\u0600-\u0605] + | [\u0610-\u061A] + | [\u061C] + | [\u064B-\u0669] + | [\u0670] + | [\u06D6-\u06DD] + | [\u06DF-\u06E4] + | [\u06E7-\u06E8] + | [\u06EA-\u06ED] + | [\u06F0-\u06F9] + | [\u070F] + | [\u0711] + | [\u0730-\u074A] + | [\u07A6-\u07B0] + | [\u07C0-\u07C9] + | [\u07EB-\u07F3] + | [\u0816-\u0819] + | [\u081B-\u0823] + | [\u0825-\u0827] + | [\u0829-\u082D] + | [\u0859-\u085B] + | [\u08D4-\u0903] + | [\u093A-\u093C] + | [\u093E-\u094F] + | [\u0951-\u0957] + | [\u0962-\u0963] + | [\u0966-\u096F] + | [\u0981-\u0983] + | [\u09BC] + | [\u09BE-\u09C4] + | [\u09C7-\u09C8] + | [\u09CB-\u09CD] + | [\u09D7] + | [\u09E2-\u09E3] + | [\u09E6-\u09EF] + | [\u0A01-\u0A03] + | [\u0A3C] + | [\u0A3E-\u0A42] + | [\u0A47-\u0A48] + | [\u0A4B-\u0A4D] + | [\u0A51] + | [\u0A66-\u0A71] + | [\u0A75] + | [\u0A81-\u0A83] + | [\u0ABC] + | [\u0ABE-\u0AC5] + | [\u0AC7-\u0AC9] + | [\u0ACB-\u0ACD] + | [\u0AE2-\u0AE3] + | [\u0AE6-\u0AEF] + | [\u0AFA-\u0AFF] + | [\u0B01-\u0B03] + | [\u0B3C] + | [\u0B3E-\u0B44] + | [\u0B47-\u0B48] + | [\u0B4B-\u0B4D] + | [\u0B56-\u0B57] + | [\u0B62-\u0B63] + | [\u0B66-\u0B6F] + | [\u0B82] + | [\u0BBE-\u0BC2] + | [\u0BC6-\u0BC8] + | [\u0BCA-\u0BCD] + | [\u0BD7] + | [\u0BE6-\u0BEF] + | [\u0C00-\u0C03] + | [\u0C3E-\u0C44] + | [\u0C46-\u0C48] + | [\u0C4A-\u0C4D] + | [\u0C55-\u0C56] + | [\u0C62-\u0C63] + | [\u0C66-\u0C6F] + | [\u0C81-\u0C83] + | [\u0CBC] + | [\u0CBE-\u0CC4] + | [\u0CC6-\u0CC8] + | [\u0CCA-\u0CCD] + | [\u0CD5-\u0CD6] + | [\u0CE2-\u0CE3] + | [\u0CE6-\u0CEF] + | [\u0D00-\u0D03] + | [\u0D3B-\u0D3C] + | [\u0D3E-\u0D44] + | [\u0D46-\u0D48] + | [\u0D4A-\u0D4D] + | [\u0D57] + | [\u0D62-\u0D63] + | [\u0D66-\u0D6F] + | [\u0D82-\u0D83] + | [\u0DCA] + | [\u0DCF-\u0DD4] + | [\u0DD6] + | [\u0DD8-\u0DDF] + | [\u0DE6-\u0DEF] + | [\u0DF2-\u0DF3] + | [\u0E31] + | [\u0E34-\u0E3A] + | [\u0E47-\u0E4E] + | [\u0E50-\u0E59] + | [\u0EB1] + | [\u0EB4-\u0EB9] + | [\u0EBB-\u0EBC] + | [\u0EC8-\u0ECD] + | [\u0ED0-\u0ED9] + | [\u0F18-\u0F19] + | [\u0F20-\u0F29] + | [\u0F35] + | [\u0F37] + | [\u0F39] + | [\u0F3E-\u0F3F] + | [\u0F71-\u0F84] + | [\u0F86-\u0F87] + | [\u0F8D-\u0F97] + | [\u0F99-\u0FBC] + | [\u0FC6] + | [\u102B-\u103E] + | [\u1040-\u1049] + | [\u1056-\u1059] + | [\u105E-\u1060] + | [\u1062-\u1064] + | [\u1067-\u106D] + | [\u1071-\u1074] + | [\u1082-\u108D] + | [\u108F-\u109D] + | [\u135D-\u135F] + | [\u1712-\u1714] + | [\u1732-\u1734] + | [\u1752-\u1753] + | [\u1772-\u1773] + | [\u17B4-\u17D3] + | [\u17DD] + | [\u17E0-\u17E9] + | [\u180B-\u180E] + | [\u1810-\u1819] + | [\u1885-\u1886] + | [\u18A9] + | [\u1920-\u192B] + | [\u1930-\u193B] + | [\u1946-\u194F] + | [\u19D0-\u19D9] + | [\u1A17-\u1A1B] + | [\u1A55-\u1A5E] + | [\u1A60-\u1A7C] + | [\u1A7F-\u1A89] + | [\u1A90-\u1A99] + | [\u1AB0-\u1ABD] + | [\u1B00-\u1B04] + | [\u1B34-\u1B44] + | [\u1B50-\u1B59] + | [\u1B6B-\u1B73] + | [\u1B80-\u1B82] + | [\u1BA1-\u1BAD] + | [\u1BB0-\u1BB9] + | [\u1BE6-\u1BF3] + | [\u1C24-\u1C37] + | [\u1C40-\u1C49] + | [\u1C50-\u1C59] + | [\u1CD0-\u1CD2] + | [\u1CD4-\u1CE8] + | [\u1CED] + | [\u1CF2-\u1CF4] + | [\u1CF7-\u1CF9] + | [\u1DC0-\u1DF9] + | [\u1DFB-\u1DFF] + | [\u200B-\u200F] + | [\u202A-\u202E] + | [\u2060-\u2064] + | [\u2066-\u206F] + | [\u20D0-\u20DC] + | [\u20E1] + | [\u20E5-\u20F0] + | [\u2CEF-\u2CF1] + | [\u2D7F] + | [\u2DE0-\u2DFF] + | [\u302A-\u302F] + | [\u3099-\u309A] + | [\uA620-\uA629] + | [\uA66F] + | [\uA674-\uA67D] + | [\uA69E-\uA69F] + | [\uA6F0-\uA6F1] + | [\uA802] + | [\uA806] + | [\uA80B] + | [\uA823-\uA827] + | [\uA880-\uA881] + | [\uA8B4-\uA8C5] + | [\uA8D0-\uA8D9] + | [\uA8E0-\uA8F1] + | [\uA900-\uA909] + | [\uA926-\uA92D] + | [\uA947-\uA953] + | [\uA980-\uA983] + | [\uA9B3-\uA9C0] + | [\uA9D0-\uA9D9] + | [\uA9E5] + | [\uA9F0-\uA9F9] + | [\uAA29-\uAA36] + | [\uAA43] + | [\uAA4C-\uAA4D] + | [\uAA50-\uAA59] + | [\uAA7B-\uAA7D] + | [\uAAB0] + | [\uAAB2-\uAAB4] + | [\uAAB7-\uAAB8] + | [\uAABE-\uAABF] + | [\uAAC1] + | [\uAAEB-\uAAEF] + | [\uAAF5-\uAAF6] + | [\uABE3-\uABEA] + | [\uABEC-\uABED] + | [\uABF0-\uABF9] + | [\uFB1E] + | [\uFE00-\uFE0F] + | [\uFE20-\uFE2F] + | [\uFEFF] + | [\uFF10-\uFF19] + | [\uFFF9-\uFFFB] +; + +// +// Whitespace and comments +// + +WS: [ \t\r\n\u000C]+ -> skip; + +COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN); \ No newline at end of file diff --git a/grammars/Java20Parser.g4 b/grammars/Java20Parser.g4 new file mode 100644 index 0000000..91e7884 --- /dev/null +++ b/grammars/Java20Parser.g4 @@ -0,0 +1,1655 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging + +parser grammar Java20Parser; + +options { + tokenVocab = Java20Lexer; +} + +//============= + +start_ + : compilationUnit EOF + ; + +// Paragraph 3.8 Identifiers +// ------------- + +identifier + : Identifier + | contextualKeyword + ; + +typeIdentifier + : Identifier + | contextualKeywordMinusForTypeIdentifier + ; + +unqualifiedMethodIdentifier + : Identifier + | contextualKeywordMinusForUnqualifiedMethodIdentifier + ; + +// 3.9 Keywords + +contextualKeyword + : 'exports' + | 'module' + | 'non-sealed' + | 'open' + | 'opens' + | 'permits' + | 'provides' + | 'record' + | 'requires' + | 'sealed' + | 'to' + | 'transitive' + | 'uses' + | 'var' + | 'with' + | 'yield' + ; + +contextualKeywordMinusForTypeIdentifier + : 'exports' + | 'module' + | 'non-sealed' + | 'open' + | 'opens' +// | 'permits' + | 'provides' +// | 'record' + | 'requires' +// | 'sealed' + | 'to' + | 'transitive' + | 'uses' +// | 'var' + | 'with' +// | 'yield' + ; + + +contextualKeywordMinusForUnqualifiedMethodIdentifier + : 'exports' + | 'module' + | 'non-sealed' + | 'open' + | 'opens' + | 'permits' + | 'provides' + | 'record' + | 'requires' + | 'sealed' + | 'to' + | 'transitive' + | 'uses' + | 'var' + | 'with' +// | 'yield' + ; + +// Paragraph 3.10 +// -------------- + +literal + : IntegerLiteral + | FloatingPointLiteral + | BooleanLiteral + | CharacterLiteral + | StringLiteral + | TextBlock + | NullLiteral + ; + +// Paragraph 4.1 // Type is not used. +// Type ::= primitiveType +// | referenceType +// ; + +// Paragraph 4.2 +// ------------- + +primitiveType + : annotation* (numericType | 'boolean') + ; + +numericType + : integralType + | floatingPointType + ; + +integralType + : 'byte' + | 'short' + | 'int' + | 'long' + | 'char' + ; + +floatingPointType + : 'float' + | 'double' + ; + +// Paragraph 4.3 +// ------------- + +referenceType + : classOrInterfaceType + | typeVariable + | arrayType + ; + +// replace classType in classOrInterfaceType + +// classOrInterfaceType +// : classType +// | interfaceType +// ; +// + +// classOrInterfaceType +// : annotation* typeIdentifier typeArguments? coit +// | packageName '.' annotation* typeIdentifier typeArguments? coit +// | classOrInterfaceType '.' annotation* typeIdentifier typeArguments? +// | interfaceType coit +// ; +// + +coit + : '.' annotation* typeIdentifier typeArguments? coit? + ; + +classOrInterfaceType + : (packageName '.')? annotation* typeIdentifier typeArguments? coit? + ; + +classType + : annotation* typeIdentifier typeArguments? + | packageName '.' annotation* typeIdentifier typeArguments? + | classOrInterfaceType '.' annotation* typeIdentifier typeArguments? + ; + +interfaceType + : classType + ; + +typeVariable + : annotation* typeIdentifier + ; + +arrayType + : primitiveType dims + | classType dims + | typeVariable dims + ; + +dims + : annotation* '[' ']' (annotation* '[' ']')* + ; + +// Paragraph 4.4 +// ------------- + +typeParameter + : typeParameterModifier* typeIdentifier typeBound? + ; + +typeParameterModifier + : annotation + ; + +typeBound + : 'extends' (typeVariable | classOrInterfaceType additionalBound*) + ; + +additionalBound + : '&' interfaceType + ; + +// Paragraph 4.5.1 +// --------------- + +typeArguments + : '<' typeArgumentList '>' + ; + +typeArgumentList + : typeArgument (',' typeArgument)* + ; + +typeArgument + : referenceType + | wildcard + ; + +wildcard + : annotation* '?' wildcardBounds? + ; + +wildcardBounds + : 'extends' referenceType + | 'super' referenceType + ; + +// Paragraph 6.5 +// ------------- + +moduleName + : identifier ('.' moduleName)? + // left recursion --> right recursion + ; + +packageName + : identifier ('.' packageName)? + // left recursion --> right recursion + ; + +typeName + : packageName ('.' typeIdentifier)? + ; + +packageOrTypeName + : identifier ('.' packageOrTypeName)? + // left recursion --> right recursion + ; + +expressionName + : (ambiguousName '.')? identifier + ; + +methodName + : unqualifiedMethodIdentifier + ; + +ambiguousName + : identifier ('.' ambiguousName)? + // left recursion --> right recursion + ; + +// Paragraph 7.3 +// ------------- + +compilationUnit + : ordinaryCompilationUnit + | modularCompilationUnit + ; + +ordinaryCompilationUnit + : packageDeclaration? importDeclaration* topLevelClassOrInterfaceDeclaration* + ; + +modularCompilationUnit + : importDeclaration* moduleDeclaration + ; + +// Paragraph 7.4 +// ------------- + +packageDeclaration + : packageModifier* 'package' identifier ('.' identifier)* ';' + ; + +packageModifier + : annotation + ; + +// Paragraph 7.5 +// ------------- + +importDeclaration + : singleTypeImportDeclaration + | typeImportOnDemandDeclaration + | singleStaticImportDeclaration + | staticImportOnDemandDeclaration + ; + +singleTypeImportDeclaration + : 'import' typeName ';' + ; + +typeImportOnDemandDeclaration + : 'import' packageOrTypeName '.' '*' ';' + ; + +singleStaticImportDeclaration + : 'import' 'static' typeName '.' identifier ';' + ; + +staticImportOnDemandDeclaration + : 'import' 'static' typeName '.' '*' ';' + ; + +// Paragraph 7.6 +// ------------- + +topLevelClassOrInterfaceDeclaration + : classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 7.7 +// ------------- + +moduleDeclaration + : annotation* 'open'? 'module' identifier ('.' identifier)* '{' moduleDirective* '}' + ; + +moduleDirective + : 'requires' requiresModifier* moduleName ';' + | 'exports' packageName ('to' moduleName ( ',' moduleName)*)? ';' + | 'opens' packageName ('to' moduleName ( ',' moduleName)*)? ';' + | 'uses' typeName ';' + | 'provides' typeName 'with' typeName ( ',' typeName)* ';' + ; + +requiresModifier + : 'transitive' + | 'static' + ; + +// Paragraph 8.1 +// ------------- + +classDeclaration + : normalClassDeclaration + | enumDeclaration + | recordDeclaration + ; + +normalClassDeclaration + : classModifier* 'class' typeIdentifier typeParameters? classExtends? classImplements? classPermits? classBody + ; + +classModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'final' + | 'sealed' + | 'non-sealed' + | 'strictfp' + ; + +typeParameters + : '<' typeParameterList '>' + ; + +typeParameterList + : typeParameter (',' typeParameter)* + ; + +classExtends + : 'extends' classType + ; + +classImplements + : 'implements' interfaceTypeList + ; + +interfaceTypeList + : interfaceType (',' interfaceType)* + ; + +classPermits + : 'permits' typeName (',' typeName)* + ; + +classBody + : '{' classBodyDeclaration* '}' + ; + +classBodyDeclaration + : classMemberDeclaration + | instanceInitializer + | staticInitializer + | constructorDeclaration + ; + +classMemberDeclaration + : fieldDeclaration + | methodDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 8.3 +// ------------- + +fieldDeclaration + : fieldModifier* unannType variableDeclaratorList ';' + ; + +fieldModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'final' + | 'transient' + | 'volatile' + ; + +variableDeclaratorList + : variableDeclarator (',' variableDeclarator)* + ; + +variableDeclarator + : variableDeclaratorId ('=' variableInitializer)? + ; + +variableDeclaratorId + : identifier dims? + ; + +variableInitializer + : expression + | arrayInitializer + ; + +unannType + : unannPrimitiveType + | unannReferenceType + ; + +unannPrimitiveType + : numericType + | 'boolean' + ; + +unannReferenceType + : unannClassOrInterfaceType + | unannTypeVariable + | unannArrayType + ; + +// Replace unannClassType in unannClassOrInterfaceType + +// unannClassOrInterfaceType +// : unannClassType +// | unannInterfaceType +// ; +// + +unannClassOrInterfaceType + : (packageName '.' annotation*)? typeIdentifier typeArguments? uCOIT? + ; + +uCOIT + : '.' annotation* typeIdentifier typeArguments? uCOIT? + ; + +unannClassType + : typeIdentifier typeArguments? + | (packageName | unannClassOrInterfaceType) '.' annotation* typeIdentifier typeArguments? + ; + +unannInterfaceType + : unannClassType + ; + +unannTypeVariable + : typeIdentifier + ; + +unannArrayType + : (unannPrimitiveType | unannClassOrInterfaceType | unannTypeVariable) dims + ; + +// Paragraph 8.4 +// ------------- + +methodDeclaration + : methodModifier* methodHeader methodBody + ; + +methodModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'final' + | 'synchronized' + | 'native' + | 'strictfp' + ; + +methodHeader + : (typeParameters annotation*)? result methodDeclarator throwsT? + ; + +result + : unannType + | 'void' + ; + +methodDeclarator + : identifier '(' (receiverParameter ',')? formalParameterList? ')' dims? + ; + +receiverParameter + : annotation* unannType (identifier '.')? 'this' + ; + +formalParameterList + : formalParameter (',' formalParameter)* + ; + +formalParameter + : variableModifier* unannType variableDeclaratorId + | variableArityParameter + ; + +variableArityParameter + : variableModifier* unannType annotation* '...' identifier + ; + +variableModifier + : annotation + | 'final' + ; + +throwsT + : 'throws' exceptionTypeList + ; + +exceptionTypeList + : exceptionType (',' exceptionType)* + ; + +exceptionType + : classType + | typeVariable + ; + +methodBody + : block + | ';' + ; + +// Paragraph 8.6 +// ------------- + +instanceInitializer + : block + ; + +// Paragraph 8.7 +// ------------- + +staticInitializer + : 'static' block + ; + +// Paragraph 8.8 +// ------------- + +constructorDeclaration + : constructorModifier* constructorDeclarator throwsT? constructorBody + ; + +constructorModifier + : annotation + | 'public' + | 'protected' + | 'private' + ; + +constructorDeclarator + : typeParameters? simpleTypeName '(' (receiverParameter ',')? formalParameterList? ')' + ; + +simpleTypeName + : typeIdentifier + ; + +constructorBody + : '{' explicitConstructorInvocation? blockStatements? '}' + ; + +explicitConstructorInvocation + : typeArguments? ('this' | 'super') '(' argumentList? ')' ';' + | (expressionName | primary) '.' typeArguments? 'super' '(' argumentList? ')' ';' + ; + +// Paragraph 8.9 +// ------------- + +enumDeclaration + : classModifier* 'enum' typeIdentifier classImplements? enumBody + ; + +enumBody + : '{' enumConstantList? ','? enumBodyDeclarations? '}' + // It is not my grammarmistake! It is based on //docs.oracle.com/javase/specs/jls/se20/jls20.pdf. + // Notice, javac accepts "enum One { , }" and also "enum Two { , ; {} }" + ; + +enumConstantList + : enumConstant (',' enumConstant)* + ; + +enumConstant + : enumConstantModifier* identifier ('(' argumentList? ')')? classBody? + ; + +enumConstantModifier + : annotation + ; + +enumBodyDeclarations + : ';' classBodyDeclaration* + ; + +// Paragraph 8.10 +// -------------- + +recordDeclaration + : classModifier* 'record' typeIdentifier typeParameters? recordHeader classImplements? recordBody + ; + +recordHeader + : '(' recordComponentList? ')' + ; + +recordComponentList + : recordComponent (',' recordComponent)* + ; + +recordComponent + : recordComponentModifier* unannType identifier + | variableArityRecordComponent + ; + +variableArityRecordComponent + : recordComponentModifier* unannType annotation* '...' identifier + ; + +recordComponentModifier + : annotation + ; + +recordBody + : '{' recordBodyDeclaration* '}' + ; + +recordBodyDeclaration + : classBodyDeclaration + | compactConstructorDeclaration + ; + +compactConstructorDeclaration + : constructorModifier* simpleTypeName constructorBody + ; + +// Paragraph 9.1 +// ------------- + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationInterfaceDeclaration + ; + +normalInterfaceDeclaration + : interfaceModifier* 'interface' typeIdentifier typeParameters? interfaceExtends? interfacePermits? interfaceBody + ; + +interfaceModifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'abstract' + | 'static' + | 'sealed' + | 'non-sealed' + | 'strictfp' + ; + +interfaceExtends + : 'extends' interfaceTypeList + ; + +interfacePermits + : 'permits' typeName (',' typeName)* + ; + +interfaceBody + : '{' interfaceMemberDeclaration* '}' + ; + +interfaceMemberDeclaration + : constantDeclaration + | interfaceMethodDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +// Paragraph 9.3 +// ------------- + +constantDeclaration + : constantModifier* unannType variableDeclaratorList ';' + ; + +constantModifier + : annotation + | 'public' + | 'static' + | 'final' + ; + +// Paragraph 9.4 +// ------------- + +interfaceMethodDeclaration + : interfaceMethodModifier* methodHeader methodBody + ; + +interfaceMethodModifier + : annotation + | 'public' + | 'private' + | 'abstract' + | 'default' + | 'static' + | 'strictfp' + ; + +// Paragraph 9.6 +// ------------- + +annotationInterfaceDeclaration + : interfaceModifier* '@' 'interface' typeIdentifier annotationInterfaceBody + ; + +annotationInterfaceBody + : '{' annotationInterfaceMemberDeclaration* '}' + ; + +annotationInterfaceMemberDeclaration + : annotationInterfaceElementDeclaration + | constantDeclaration + | classDeclaration + | interfaceDeclaration + | ';' + ; + +annotationInterfaceElementDeclaration + : annotationInterfaceElementModifier* unannType identifier '(' ')' dims? defaultValue? ';' + ; + +annotationInterfaceElementModifier + : annotation + | 'public' + | 'abstract' + ; + +defaultValue + : 'default' elementValue + ; + +// Paragraph 9.7 +// ------------- + +annotation + : normalAnnotation + | markerAnnotation + | singleElementAnnotation + ; + +normalAnnotation + : '@' typeName '(' elementValuePairList? ')' + ; + +elementValuePairList + : elementValuePair (',' elementValuePair)* + ; + +elementValuePair + : identifier '=' elementValue + ; + +elementValue + : conditionalExpression + | elementValueArrayInitializer + | annotation + ; + +elementValueArrayInitializer + : '{' elementValueList? ','? '}' + ; + +elementValueList + : elementValue (',' elementValue)* + ; + +markerAnnotation + : '@' typeName + ; + +singleElementAnnotation + : '@' typeName '(' elementValue ')' + ; + +// Paragraph 10.6 +// -------------- + +arrayInitializer + : '{' variableInitializerList? ','? '}' + // Strange ',' ?! staat ook in antlr_java.g4 + ; + +variableInitializerList + : variableInitializer (',' variableInitializer)* + ; + +// Paragraph 14.2 +// -------------- + +block + : '{' blockStatements? '}' + ; + +blockStatements + : blockStatement blockStatement* + ; + +blockStatement + : localClassOrInterfaceDeclaration + | localVariableDeclarationStatement + | statement + ; + +// Paragraph 14.3 +// -------------- + +localClassOrInterfaceDeclaration + : classDeclaration + | normalInterfaceDeclaration + ; + +// Paragraph 14.4 +// -------------- + +localVariableDeclaration + : variableModifier* localVariableType variableDeclaratorList + ; + +localVariableType + : unannType + | 'var' + ; + +localVariableDeclarationStatement + : localVariableDeclaration ';' + ; + +// Paragraph 14.5 +// -------------- + +statement + : statementWithoutTrailingSubstatement + | labeledStatement + | ifThenStatement + | ifThenElseStatement + | whileStatement + | forStatement + ; + +statementNoShortIf + : statementWithoutTrailingSubstatement + | labeledStatementNoShortIf + | ifThenElseStatementNoShortIf + | whileStatementNoShortIf + | forStatementNoShortIf + ; + +statementWithoutTrailingSubstatement + : block + | emptyStatement_ + | expressionStatement + | assertStatement + | switchStatement + | doStatement + | breakStatement + | continueStatement + | returnStatement + | synchronizedStatement + | throwStatement + | tryStatement + | yieldStatement + ; + +// Paragraph 14.6 +// -------------- + +emptyStatement_ + : ';' + ; + +// Paragraph 14.7 +// -------------- + +labeledStatement + : identifier ':' statement + ; + +labeledStatementNoShortIf + : identifier ':' statementNoShortIf + ; + +// Paragraph 14.8 +// -------------- + +expressionStatement + : statementExpression ';' + ; + +statementExpression + : assignment + | preIncrementExpression + | preDecrementExpression + | postIncrementExpression + | postDecrementExpression + | methodInvocation + | classInstanceCreationExpression + ; + +// Paragraph 14.9 +// -------------- + +ifThenStatement + : 'if' '(' expression ')' statement + ; + +ifThenElseStatement + : 'if' '(' expression ')' statementNoShortIf 'else' statement + ; + +ifThenElseStatementNoShortIf + : 'if' '(' expression ')' statementNoShortIf 'else' statementNoShortIf + ; + +// Paragraph 14.10 +// --------------- + +assertStatement + : 'assert' expression (':' expression)? ';' + ; + +// Paragraph 14.11 +// -------------- + +switchStatement + : 'switch' '(' expression ')' switchBlock + ; + +switchBlock + : '{' switchRule switchRule* '}' + | '{' switchBlockStatementGroup* ( switchLabel ':')* '}' + ; + +switchRule + : switchLabel '->' (expression ';' | block | throwStatement) + ; + +switchBlockStatementGroup + : switchLabel ':' (switchLabel ':')* blockStatements + ; + +switchLabel + : 'case' caseConstant (',' caseConstant)* + | 'default' + ; + +caseConstant + : conditionalExpression + ; + +// Paragraph 14.12 +// --------------- + +whileStatement + : 'while' '(' expression ')' statement + ; + +whileStatementNoShortIf + : 'while' '(' expression ')' statementNoShortIf + ; + +// Paragraph 14.13 +// --------------- + +doStatement + : 'do' statement 'while' '(' expression ')' ';' + ; + +// Paragraph 14.14 +// --------------- + +forStatement + : basicForStatement + | enhancedForStatement + ; + +forStatementNoShortIf + : basicForStatementNoShortIf + | enhancedForStatementNoShortIf + ; + +basicForStatement + : 'for' '(' forInit? ';' expression? ';' forUpdate? ')' statement + ; + +basicForStatementNoShortIf + : 'for' '(' forInit? ';' expression? ';' forUpdate? ')' statementNoShortIf + ; + +forInit + : statementExpressionList + | localVariableDeclaration + ; + +forUpdate + : statementExpressionList + ; + +statementExpressionList + : statementExpression (',' statementExpression)* + ; + +enhancedForStatement + : 'for' '(' localVariableDeclaration ':' expression ')' statement + ; + +enhancedForStatementNoShortIf + : 'for' '(' localVariableDeclaration ':' expression ')' statementNoShortIf + ; + +// Paragraph 14.15 +// --------------- + +breakStatement + : 'break' identifier? ';' + ; + +// Paragraph 14.16 +// --------------- + +continueStatement + : 'continue' identifier? ';' + ; + +// Paragraph 14.17 +// --------------- + +returnStatement + : 'return' expression? ';' + ; + +// Paragraph 14.18 +// --------------- + +throwStatement + : 'throw' expression ';' + ; + +// Paragraph 14.19 +// --------------- + +synchronizedStatement + : 'synchronized' '(' expression ')' block + ; + +// Paragraph 14.20 +// --------------- + +tryStatement + : 'try' block catches + | 'try' block finallyBlock + | 'try' block catches? finallyBlock + | tryWithResourcesStatement + ; + +catches + : catchClause catchClause* + ; + +catchClause + : 'catch' '(' catchFormalParameter ')' block + ; + +catchFormalParameter + : variableModifier* catchType variableDeclaratorId + ; + +catchType + : unannClassType ('|' classType)* + ; + +finallyBlock + : 'finally' block + ; + +tryWithResourcesStatement + : 'try' resourceSpecification block catches? finallyBlock? + ; + +resourceSpecification + : '(' resourceList ';'? ')' + ; + +resourceList + : resource (';' resource)* + ; + +resource + : localVariableDeclaration + | variableAccess + ; + +variableAccess + : expressionName + | fieldAccess + ; + +// Paragraph 14.21 +//---------------- + +yieldStatement + : 'yield' expression ';' + ; + +// Paragraph 14.30 +// -------------- + +pattern + : typePattern + ; + +typePattern + : localVariableDeclaration + ; + +// Paragraph 15.2 +// -------------- + +expression + : lambdaExpression + | assignmentExpression + ; + +// Paragraph 15.8 +// -------------- + +primary + : primaryNoNewArray + | arrayCreationExpression + ; + +// Replace classInstanceCreationExpression, fieldAccess, arrayAccess, methodInvocation, and +// methodReference in primaryNoNewArray. +// Replace in these two rules primary by primaryNoNewArray. + +// primaryNoNewArray +// : literal +// | classLiteral +// | 'this' +// | typeName '.' 'this' +// | '(' expression ')' +// | classInstanceCreationExpression +// | fieldAccess +// | arrayAccess +// | methodInvocation +// | methodReference +// ; +// + +// primaryNoNewArray +// : literal +// | classLiteral +// | 'this' +// | typeName '.' 'this' +// | '(' expression ')' +// | unqualifiedClassInstanceCreationExpression +// | expressionName '.' unqualifiedClassInstanceCreationExpression +// +// | primaryNoNewArray '.' unqualifiedClassInstanceCreationExpression +// | arrayCreationExpression '.' unqualifiedClassInstanceCreationExpression +// +// | primaryNoNewArray '.' Identifier +// | arrayCreationExpression '.' Identifier +// +// | 'super' '.' Identifier +// | typeName '.' 'super' '.' Identifier +// +// | expressionName '[' expression ']' +// | primaryNoNewArray '[' expression ']' +// | arrayCreationExpressionWithInitializer '[' expression ']' +// +// | methodName '(' argumentList? ')' +// | typeName '.' typeArguments? Identifier '(' argumentList? ')' +// | expressionName '.' typeArguments? Identifier '(' argumentList? ')' +// +// | primaryNoNewArray '.' typeArguments? Identifier '(' argumentList? ')' +// | arrayCreationExpression '.' typeArguments? Identifier '(' argumentList? ')' +// +// | 'super' '.' typeArguments? Identifier '(' argumentList? ')' +// | typeName '.' 'super' '.' typeArguments? Identifier '(' argumentList? ')' +// +// | expressionName '::' typeArguments? Identifier +// +// | primaryNoNewArray '::' typeArguments? Identifier +// | arrayCreationExpression '::' typeArguments? Identifier +// +// +// | referenceType '::' typeArguments? Identifier +// | 'super' '::' typeArguments? Identifier +// | typeName '.' 'super' '::' typeArguments? Identifier +// | classType '::' typeArguments? 'new' +// | arrayType '::' 'new' +// ; +// + +primaryNoNewArray + : literal pNNA? + | classLiteral pNNA? + | 'this' pNNA? + | typeName '.' 'this' pNNA? + | '(' expression ')' pNNA? + | unqualifiedClassInstanceCreationExpression pNNA? + | expressionName '.' unqualifiedClassInstanceCreationExpression pNNA? + | arrayCreationExpression '.' unqualifiedClassInstanceCreationExpression pNNA? + | arrayCreationExpression '.' identifier pNNA? + | 'super' '.' identifier pNNA? + | typeName '.' 'super' '.' identifier pNNA? + | expressionName '[' expression ']' pNNA? + | arrayCreationExpressionWithInitializer '[' expression ']' pNNA? + | methodName '(' argumentList? ')' pNNA? + | typeName '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | expressionName '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | arrayCreationExpression '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | 'super' '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | typeName '.' 'super' '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | expressionName '::' typeArguments? identifier pNNA? + | arrayCreationExpression '::' typeArguments? identifier pNNA? + | referenceType '::' typeArguments? identifier pNNA? + | 'super' '::' typeArguments? identifier pNNA? + | typeName '.' 'super' '::' typeArguments? identifier pNNA? + | classType '::' typeArguments? 'new' pNNA? + | arrayType '::' 'new' pNNA? + ; + +pNNA + : '.' unqualifiedClassInstanceCreationExpression pNNA? + | '.' identifier pNNA? + | '[' expression ']' pNNA? + | '.' typeArguments? identifier '(' argumentList? ')' pNNA? + | '::' typeArguments? identifier pNNA? + ; + +classLiteral + : typeName ('[' ']')* '.' 'class' + | numericType ( '[' ']')* '.' 'class' + | 'boolean' ( '[' ']')* '.' 'class' + | 'void' '.' 'class' + ; + +// Paragraph 15.9 +// -------------- + +classInstanceCreationExpression + : unqualifiedClassInstanceCreationExpression + | expressionName '.' unqualifiedClassInstanceCreationExpression + | primary '.' unqualifiedClassInstanceCreationExpression + ; + +unqualifiedClassInstanceCreationExpression + : 'new' typeArguments? classOrInterfaceTypeToInstantiate '(' argumentList? ')' classBody? + ; + +classOrInterfaceTypeToInstantiate + : annotation* identifier ('.' annotation* identifier)* typeArgumentsOrDiamond? + ; + +typeArgumentsOrDiamond + : typeArguments + | '<>' + ; + +// Paragraph 15.10 +// --------------- + +arrayCreationExpression + : arrayCreationExpressionWithoutInitializer + | arrayCreationExpressionWithInitializer + ; + +arrayCreationExpressionWithoutInitializer + : 'new' primitiveType dimExprs dims? + | 'new' classType dimExprs dims? + ; + +arrayCreationExpressionWithInitializer + : 'new' primitiveType dims arrayInitializer + | 'new' classOrInterfaceType dims arrayInitializer + ; + +dimExprs + : dimExpr dimExpr* + ; + +dimExpr + : annotation* '[' expression ']' + ; + +arrayAccess + : expressionName '[' expression ']' + | primaryNoNewArray '[' expression ']' + | arrayCreationExpressionWithInitializer '[' expression ']' + ; + +// Paragraph 15.11 +// --------------- + +fieldAccess + : primary '.' identifier + | 'super' '.' identifier + | typeName '.' 'super' '.' identifier + ; + +// Paragraph 15.12 +// --------------- + +methodInvocation + : methodName '(' argumentList? ')' + | typeName '.' typeArguments? identifier '(' argumentList? ')' + | expressionName '.' typeArguments? identifier '(' argumentList? ')' + | primary '.' typeArguments? identifier '(' argumentList? ')' + | 'super' '.' typeArguments? identifier '(' argumentList? ')' + | typeName '.' 'super' '.' typeArguments? identifier '(' argumentList? ')' + ; + +argumentList + : expression (',' expression)* + ; + +// Paragraph 15.13 +// --------------- + +methodReference + : expressionName '::' typeArguments? identifier + | primary '::' typeArguments? identifier + | referenceType '::' typeArguments? identifier + | 'super' '::' typeArguments? identifier + | typeName '.' 'super' '::' typeArguments? identifier + | classType '::' typeArguments? 'new' + | arrayType '::' 'new' + ; + +// Paragraph 15.14 +// --------------- + +// Replace postIncrementExpression and postDecrementExpression by postfixExpression. + +// postfixExpression +// : primary +// | expressionName +// | postIncrementExpression +// | postDecrementExpression +// ; +// + +// postfixExpression +// : primary +// | expressionName +// | postfixExpression '++' +// | postfixExpression '--' +// ; +// + +postfixExpression + : primary pfE? + | expressionName pfE? + ; + +pfE + : '++' pfE? + | '--' pfE? + ; + +postIncrementExpression + : postfixExpression '++' + ; + +postDecrementExpression + : postfixExpression '--' + ; + +// Paragraph 15.15 +// --------------- + +unaryExpression + : preIncrementExpression + | preDecrementExpression + | '+' unaryExpression + | '-' unaryExpression + | unaryExpressionNotPlusMinus + ; + +preIncrementExpression + : '++' unaryExpression + ; + +preDecrementExpression + : '--' unaryExpression + ; + +unaryExpressionNotPlusMinus + : postfixExpression + | '~' unaryExpression + | '!' unaryExpression + | castExpression + | switchExpression + ; + +// Paragraph 15.16 +// --------------- + +castExpression + : '(' primitiveType ')' unaryExpression + | '(' referenceType additionalBound* ')' unaryExpressionNotPlusMinus + | '(' referenceType additionalBound* ')' lambdaExpression + ; + +// Paragraph 15.17 +// --------------- + +multiplicativeExpression + : unaryExpression + | multiplicativeExpression '*' unaryExpression + | multiplicativeExpression '/' unaryExpression + | multiplicativeExpression '%' unaryExpression + ; + +// Paragraph 15.18 +// --------------- + +additiveExpression + : multiplicativeExpression + | additiveExpression '+' multiplicativeExpression + | additiveExpression '-' multiplicativeExpression + ; + +// Paragraph 15.19 +// --------------- + +shiftExpression + : additiveExpression + | shiftExpression '<' '<' additiveExpression + | shiftExpression '>' '>' additiveExpression + | shiftExpression '>' '>' '>' additiveExpression + ; + +// Paragraph 15.20 +// --------------- + +relationalExpression + : shiftExpression + | relationalExpression '<' shiftExpression + | relationalExpression '>' shiftExpression + | relationalExpression '<=' shiftExpression + | relationalExpression '>=' shiftExpression + // | instanceofExpression + | relationalExpression 'instanceof' (referenceType | pattern) + // Solves left recursion with instanceofExpression. + ; + +// instanceofExpression +// : relationalExpression 'instanceof' (referenceType | pattern) +// ; +// Resulted to left recursion with relationalExpression. + +// Paragraph 15.21 +// --------------- + +equalityExpression + : relationalExpression + | equalityExpression '==' relationalExpression + | equalityExpression '!=' relationalExpression + ; + +// Paragraph 15.22 +// --------------- + +andExpression + : equalityExpression + | andExpression '&' equalityExpression + ; + +exclusiveOrExpression + : andExpression + | exclusiveOrExpression '^' andExpression + ; + +inclusiveOrExpression + : exclusiveOrExpression + | inclusiveOrExpression '|' exclusiveOrExpression + ; + +// Paragraph 15.23 +// --------------- + +conditionalAndExpression + : inclusiveOrExpression + | conditionalAndExpression '&&' inclusiveOrExpression + ; + +// Paragraph 15.24 +// --------------- + +conditionalOrExpression + : conditionalAndExpression + | conditionalOrExpression '||' conditionalAndExpression + ; + +// Paragraph 15.25 +// --------------- + +conditionalExpression + : conditionalOrExpression + | conditionalOrExpression '?' expression ':' conditionalExpression + | conditionalOrExpression '?' expression ':' lambdaExpression + ; + +// Paragraph 15.26 +// --------------- + +assignmentExpression + : conditionalExpression + | assignment + ; + +assignment + : leftHandSide assignmentOperator expression + ; + +leftHandSide + : expressionName + | fieldAccess + | arrayAccess + ; + +assignmentOperator + : '=' + | '*=' + | '/=' + | '%=' + | '+=' + | '-=' + | '<<=' + | '>>=' + | '>>>=' + | '&=' + | '^=' + | '|=' + ; + +// Paragraph 15.27 +// --------------- + +lambdaExpression + : lambdaParameters '->' lambdaBody + ; + +lambdaParameters + : '(' lambdaParameterList? ')' + | identifier + ; + +lambdaParameterList + : lambdaParameter (',' lambdaParameter)* + | identifier ( ',' identifier)* + ; + +lambdaParameter + : variableModifier* lambdaParameterType variableDeclaratorId + | variableArityParameter + ; + +lambdaParameterType + : unannType + | 'var' + ; + +lambdaBody + : expression + | block + ; + +// Paragraph 15.28 +// --------------- + +switchExpression + : 'switch' '(' expression ')' switchBlock + ; + +// Paragraph 15.29 +// --------------- + +constantExpression + : expression + ; \ No newline at end of file diff --git a/setup.py b/setup.py index 536fc68..7d3dc82 100644 --- a/setup.py +++ b/setup.py @@ -2,13 +2,13 @@ setup( name="csim", - version="1.7.0", + version="2.0.0", packages=find_packages(), install_requires=[ "antlr4-python3-runtime==4.13.2", "zss==1.2.0", "numpy==1.26.4", - "apted==1.0.3" + "apted==1.0.3", ], author="Eddy Lecoña", author_email="crew0eddy@gmail.com", @@ -28,7 +28,7 @@ "Documentation": "https://github.com/EdsonEddy/csim/wiki", "Source Code": "https://github.com/EdsonEddy/csim", }, - python_requires='>=3.9', + python_requires='>=3.10', platforms=["All"], entry_points={ 'console_scripts': [ diff --git a/test/files/prob100.py b/test/files/prob100.py new file mode 100644 index 0000000..4ac5a91 --- /dev/null +++ b/test/files/prob100.py @@ -0,0 +1,4 @@ +a = 10 +b = 20 +c = a + b +print(c) \ No newline at end of file diff --git a/test/files/prob101.py b/test/files/prob101.py new file mode 100644 index 0000000..c479cfe --- /dev/null +++ b/test/files/prob101.py @@ -0,0 +1,20 @@ +# generate sieve of eratosthenes up to n +def sieve_of_eratosthenes(n): + """Generates a list of prime numbers up to n using the Sieve of Eratosthenes algorithm.""" + if n < 2: + return [] + + # Initialize a boolean array to track prime status of numbers + is_prime = [True] * (n + 1) + is_prime[0] = is_prime[1] = False # 0 and 1 are not prime numbers + + for i in range(2, int(n**0.5) + 1): + if is_prime[i]: + for j in range(i * i, n + 1, i): + is_prime[j] = False + + # Collecting all prime numbers + primes = [i for i in range(n + 1) if is_prime[i]] + return primes + +print(sieve_of_eratosthenes(30)) # Example usage: prints prime numbers up to 30 \ No newline at end of file diff --git a/test/files/prob200.java b/test/files/prob200.java new file mode 100644 index 0000000..14090f1 --- /dev/null +++ b/test/files/prob200.java @@ -0,0 +1,23 @@ +public class prob200 { + public static void main(String[] args) { + // Generate a sieve of eratosthenes to find all prime numbers up to 100 + int limit = 100; + boolean[] isPrime = new boolean[limit + 1]; + for (int i = 2; i <= limit; i++) { + isPrime[i] = true; + } + for (int i = 2; i * i <= limit; i++) { + if (isPrime[i]) { + for (int j = i * i; j <= limit; j += i) { + isPrime[j] = false; + } + } + } + System.out.println("Prime numbers up to " + limit + ":"); + for (int i = 2; i <= limit; i++) { + if (isPrime[i]) { + System.out.print(i + " "); + } + } + } +} \ No newline at end of file diff --git a/test/files/prob201.java b/test/files/prob201.java new file mode 100644 index 0000000..5e18273 --- /dev/null +++ b/test/files/prob201.java @@ -0,0 +1,5 @@ +public class prob201 { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } +} \ No newline at end of file diff --git a/test/files/prob300.cpp b/test/files/prob300.cpp new file mode 100644 index 0000000..9d12832 --- /dev/null +++ b/test/files/prob300.cpp @@ -0,0 +1,38 @@ +#include +#include +#include + +std::vector sieveOfEratosthenes(int n) { + std::vector isPrime(n + 1, true); + isPrime[0] = isPrime[1] = false; + + for (int i = 2; i <= std::sqrt(n); ++i) { + if (isPrime[i]) { + for (int j = i * i; j <= n; j += i) { + isPrime[j] = false; + } + } + } + + std::vector primes; + for (int i = 2; i <= n; ++i) { + if (isPrime[i]) { + primes.push_back(i); + } + } + + return primes; +} + +int main() { + int limit = 100; + std::vector primes = sieveOfEratosthenes(limit); + + std::cout << "Prime numbers up to " << limit << ": "; + for (int prime : primes) { + std::cout << prime << " "; + } + std::cout << std::endl; + + return 0; +} \ No newline at end of file diff --git a/test/files/prob301.cpp b/test/files/prob301.cpp new file mode 100644 index 0000000..32e487b --- /dev/null +++ b/test/files/prob301.cpp @@ -0,0 +1,7 @@ +#include +using namespace std; + +int main() { + cout << "Hello, World!" << endl; + return 0; +} \ No newline at end of file diff --git a/test/test_cli.py b/test/test_cli.py new file mode 100644 index 0000000..26069ba --- /dev/null +++ b/test/test_cli.py @@ -0,0 +1,78 @@ +import subprocess +import sys +import os + +CSIM_EXECUTABLE = os.path.join(os.path.dirname(sys.executable), 'csim') + +def test_cli_report_action(): + """ + Testing the execution of the CLI with the 'report' action. + This generates a pairwise similarity report for all files. + """ + test_dir = "test/files/" + + command = [CSIM_EXECUTABLE, "report", "-p", test_dir, "-l", "python"] + + result = subprocess.run(command, capture_output=True, text=True, check=False) + + assert result.returncode == 0, f"CLI failed with return code {result.returncode}. Error: {result.stderr}" + + assert result.stdout, "The output of the report command is empty." + assert "similarity index" in result.stdout, f"The output does not contain the expected text. Output: {result.stdout}" + print(f"\nOutput of report action:\n{result.stdout}") + + +def test_cli_group_action_exhaustive(): + """ + Testing the execution of the CLI with the 'group' action using exhaustive strategy. + This groups files by similarity using all-pairs comparison. + """ + test_dir = "test/files/" + + command = [CSIM_EXECUTABLE, "group", "-p", test_dir, "-t", "0.8", "-l", "python", "-s", "exhaustive"] + + result = subprocess.run(command, capture_output=True, text=True, check=False) + + assert result.returncode == 0, f"CLI failed with return code {result.returncode}. Error: {result.stderr}" + + assert result.stdout, "The output of the group command is empty." + assert "Threshold" in result.stdout, f"The output does not contain the expected text. Output: {result.stdout}" + assert "Total files processed" in result.stdout, f"The output does not contain the expected text. Output: {result.stdout}" + print(f"\nOutput of group action (exhaustive):\n{result.stdout}") + + + + + +def test_cli_group_action_default_strategy(): + """ + Testing the execution of the CLI with the 'group' action using default strategy (exhaustive). + If no strategy is specified, exhaustive should be used by default. + """ + test_dir = "test/files/" + + command = [CSIM_EXECUTABLE, "group", "-p", test_dir, "-t", "0.8", "-l", "python"] + + result = subprocess.run(command, capture_output=True, text=True, check=False) + + assert result.returncode == 0, f"CLI failed with return code {result.returncode}. Error: {result.stderr}" + + assert result.stdout, "The output of the group command is empty." + assert "Threshold" in result.stdout, f"The output does not contain the expected text. Output: {result.stdout}" + print(f"\nOutput of group action (default strategy):\n{result.stdout}") + + +def test_cli_group_missing_threshold(): + """ + Testing that the CLI properly validates that --threshold is required for the 'group' action. + """ + test_dir = "test/files/" + + command = [CSIM_EXECUTABLE, "group", "-p", test_dir, "-l", "python"] + + result = subprocess.run(command, capture_output=True, text=True, check=False) + + # This should fail because threshold is required for group action + assert result.returncode != 0, f"CLI should have failed without --threshold. Output: {result.stderr}" + assert "--threshold" in result.stderr or "required" in result.stderr.lower(), f"Error message should mention --threshold requirement. Error: {result.stderr}" + print(f"\nCorrectly rejected missing threshold:\n{result.stderr}") diff --git a/test/test_module.py b/test/test_module.py new file mode 100644 index 0000000..5127e14 --- /dev/null +++ b/test/test_module.py @@ -0,0 +1,63 @@ +from csim import Compare + + +def test_identical_python_code(): + """ + Tests that two identical Python code snippets have a similarity of 1.0. + """ + code = "x = 1\nprint(x)" + similarity = Compare(content_a=code, content_b=code, lang="python") + assert similarity == 1.0 + + +def test_different_python_code(): + """ + Tests that two completely different Python code snippets have a low similarity. + """ + code_a = "x = 1\nprint(x)" + code_b = "def my_func():\n return 'hello'" + similarity = Compare(content_a=code_a, content_b=code_b, lang="python") + assert similarity is not None + assert similarity < 0.5 + + +def test_structurally_similar_python_code(): + """ + Tests that two structurally identical Python snippets (with different variable names) + have a high similarity. + """ + code_a = "for i in range(10):\n print(i)" + code_b = "for item in range(10):\n print(item)" + similarity = Compare(content_a=code_a, content_b=code_b, lang="python") + assert similarity is not None + assert similarity > 0.9 + + +def test_java_identical_code(): + """ + Tests that two identical Java code snippets have a similarity of 1.0. + """ + code = 'public class Main { public static void main(String[] args) { System.out.println("Hello"); } }' + similarity = Compare(content_a=code, content_b=code, lang="java") + assert similarity == 1.0 + + +def test_cpp_identical_code(): + """ + Tests that two identical C++ code snippets have a similarity of 1.0. + """ + code = '#include \nint main() { std::cout << "Hello"; return 0; }' + similarity = Compare(content_a=code, content_b=code, lang="cpp") + assert similarity == 1.0 + + +def test_apted_algorithm(): + """ + Tests that the comparison runs successfully with the 'apted' algorithm. + """ + code_a = "a = 1" + code_b = "b = 2" + similarity = Compare( + content_a=code_a, content_b=code_b, lang="python", ted_algorithm="apted" + ) + assert similarity is not None