python3-parser 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +13 -0
- data/README.md +59 -0
- data/Rakefile +21 -0
- data/ext/python3-parser/Python3LexerBase.cpp +112 -0
- data/ext/python3-parser/Python3LexerBase.h +34 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +34 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +27 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +155 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +69 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.h +37 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +195 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.h +158 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +333 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +99 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +51 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +218 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +295 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +196 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +75 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +52 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +648 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +467 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +306 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +179 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +141 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +66 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +167 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +164 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +143 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +137 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +53 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +92 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +85 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.h +137 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +425 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +293 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +211 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +123 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +104 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +193 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.h +23 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +137 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +167 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +209 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +112 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +113 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +148 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +228 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +110 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +64 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +50 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +758 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +85 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +621 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +61 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +63 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +87 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +72 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +133 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +14 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +24 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +33 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +33 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +82 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +43 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +31 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +22 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +15 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +24 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +17 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +35 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +27 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +35 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +39 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +158 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +109 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +84 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +628 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +210 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +66 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +107 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +115 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +55 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +55 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +63 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +62 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +87 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +63 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +82 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +56 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +61 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +47 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +57 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +47 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +57 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +56 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +61 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +47 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +55 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +56 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +55 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +22 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +27 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +20 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1366 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +904 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +22 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +29 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +34 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +39 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +662 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +254 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +201 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +29 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +16 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +37 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +40 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +377 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +222 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +81 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +36 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +15 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +35 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +12 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +44 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +76 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +127 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +91 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +67 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +100 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +144 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +20 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +23 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +31 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +89 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +521 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +198 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +134 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +76 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +13 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +170 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +110 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +248 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +78 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +163 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +36 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +54 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +303 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +112 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +128 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +19 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +23 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +33 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +71 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +15 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +102 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +49 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +31 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +32 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +57 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +33 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +371 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +173 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +56 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
- data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
- data/ext/python3-parser/antlrgen/Python3Lexer.cpp +1024 -0
- data/ext/python3-parser/antlrgen/Python3Lexer.h +91 -0
- data/ext/python3-parser/antlrgen/Python3Lexer.interp +339 -0
- data/ext/python3-parser/antlrgen/Python3Lexer.tokens +181 -0
- data/ext/python3-parser/antlrgen/Python3Parser.cpp +10550 -0
- data/ext/python3-parser/antlrgen/Python3Parser.h +1811 -0
- data/ext/python3-parser/antlrgen/Python3Parser.interp +295 -0
- data/ext/python3-parser/antlrgen/Python3Parser.tokens +181 -0
- data/ext/python3-parser/antlrgen/Python3ParserBaseListener.cpp +7 -0
- data/ext/python3-parser/antlrgen/Python3ParserBaseListener.h +284 -0
- data/ext/python3-parser/antlrgen/Python3ParserBaseVisitor.cpp +7 -0
- data/ext/python3-parser/antlrgen/Python3ParserBaseVisitor.h +364 -0
- data/ext/python3-parser/antlrgen/Python3ParserListener.cpp +7 -0
- data/ext/python3-parser/antlrgen/Python3ParserListener.h +277 -0
- data/ext/python3-parser/antlrgen/Python3ParserVisitor.cpp +7 -0
- data/ext/python3-parser/antlrgen/Python3ParserVisitor.h +196 -0
- data/ext/python3-parser/extconf.rb +34 -0
- data/ext/python3-parser/python3_parser.cpp +10103 -0
- data/lib/python3-parser.rb +2 -0
- data/lib/python3-parser/version.rb +3 -0
- data/python3-parser.gemspec +31 -0
- data/spec/parser_spec.rb +105 -0
- data/spec/spec_helper.rb +9 -0
- metadata +391 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include "TokenSource.h"
|
|
9
|
+
#include "CommonTokenFactory.h"
|
|
10
|
+
|
|
11
|
+
namespace antlr4 {
|
|
12
|
+
|
|
13
|
+
/// Provides an implementation of <seealso cref="TokenSource"/> as a wrapper around a list
|
|
14
|
+
/// of <seealso cref="Token"/> objects.
|
|
15
|
+
///
|
|
16
|
+
/// If the final token in the list is an <seealso cref="Token#EOF"/> token, it will be used
|
|
17
|
+
/// as the EOF token for every call to <seealso cref="#nextToken"/> after the end of the
|
|
18
|
+
/// list is reached. Otherwise, an EOF token will be created.
|
|
19
|
+
class ANTLR4CPP_PUBLIC ListTokenSource : public TokenSource {
|
|
20
|
+
protected:
|
|
21
|
+
// This list will be emptied token by token as we call nextToken().
|
|
22
|
+
// Token streams can be used to buffer tokens for a while.
|
|
23
|
+
std::vector<std::unique_ptr<Token>> tokens;
|
|
24
|
+
|
|
25
|
+
private:
|
|
26
|
+
/// <summary>
|
|
27
|
+
/// The name of the input source. If this value is {@code null}, a call to
|
|
28
|
+
/// <seealso cref="#getSourceName"/> should return the source name used to create the
|
|
29
|
+
/// the next token in <seealso cref="#tokens"/> (or the previous token if the end of
|
|
30
|
+
/// the input has been reached).
|
|
31
|
+
/// </summary>
|
|
32
|
+
const std::string sourceName;
|
|
33
|
+
|
|
34
|
+
protected:
|
|
35
|
+
/// The index into <seealso cref="#tokens"/> of token to return by the next call to
|
|
36
|
+
/// <seealso cref="#nextToken"/>. The end of the input is indicated by this value
|
|
37
|
+
/// being greater than or equal to the number of items in <seealso cref="#tokens"/>.
|
|
38
|
+
size_t i;
|
|
39
|
+
|
|
40
|
+
private:
|
|
41
|
+
/// This is the backing field for <seealso cref="#getTokenFactory"/> and
|
|
42
|
+
/// <seealso cref="setTokenFactory"/>.
|
|
43
|
+
Ref<TokenFactory<CommonToken>> _factory = CommonTokenFactory::DEFAULT;
|
|
44
|
+
|
|
45
|
+
public:
|
|
46
|
+
/// Constructs a new <seealso cref="ListTokenSource"/> instance from the specified
|
|
47
|
+
/// collection of <seealso cref="Token"/> objects.
|
|
48
|
+
///
|
|
49
|
+
/// <param name="tokens"> The collection of <seealso cref="Token"/> objects to provide as a
|
|
50
|
+
/// <seealso cref="TokenSource"/>. </param>
|
|
51
|
+
/// <exception cref="NullPointerException"> if {@code tokens} is {@code null} </exception>
|
|
52
|
+
ListTokenSource(std::vector<std::unique_ptr<Token>> tokens);
|
|
53
|
+
ListTokenSource(const ListTokenSource& other) = delete;
|
|
54
|
+
|
|
55
|
+
ListTokenSource& operator = (const ListTokenSource& other) = delete;
|
|
56
|
+
|
|
57
|
+
/// <summary>
|
|
58
|
+
/// Constructs a new <seealso cref="ListTokenSource"/> instance from the specified
|
|
59
|
+
/// collection of <seealso cref="Token"/> objects and source name.
|
|
60
|
+
/// </summary>
|
|
61
|
+
/// <param name="tokens"> The collection of <seealso cref="Token"/> objects to provide as a
|
|
62
|
+
/// <seealso cref="TokenSource"/>. </param>
|
|
63
|
+
/// <param name="sourceName"> The name of the <seealso cref="TokenSource"/>. If this value is
|
|
64
|
+
/// {@code null}, <seealso cref="#getSourceName"/> will attempt to infer the name from
|
|
65
|
+
/// the next <seealso cref="Token"/> (or the previous token if the end of the input has
|
|
66
|
+
/// been reached).
|
|
67
|
+
/// </param>
|
|
68
|
+
/// <exception cref="NullPointerException"> if {@code tokens} is {@code null} </exception>
|
|
69
|
+
ListTokenSource(std::vector<std::unique_ptr<Token>> tokens_, const std::string &sourceName_);
|
|
70
|
+
|
|
71
|
+
virtual size_t getCharPositionInLine() override;
|
|
72
|
+
virtual std::unique_ptr<Token> nextToken() override;
|
|
73
|
+
virtual size_t getLine() const override;
|
|
74
|
+
virtual CharStream* getInputStream() override;
|
|
75
|
+
virtual std::string getSourceName() override;
|
|
76
|
+
|
|
77
|
+
template<typename T1>
|
|
78
|
+
void setTokenFactory(TokenFactory<T1> *factory) {
|
|
79
|
+
this->_factory = factory;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
virtual Ref<TokenFactory<CommonToken>> getTokenFactory() override;
|
|
83
|
+
|
|
84
|
+
private:
|
|
85
|
+
void InitializeInstanceFields();
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "Parser.h"
|
|
7
|
+
|
|
8
|
+
#include "NoViableAltException.h"
|
|
9
|
+
|
|
10
|
+
using namespace antlr4;
|
|
11
|
+
|
|
12
|
+
namespace {
|
|
13
|
+
|
|
14
|
+
// Create a normal shared pointer if the configurations are to be deleted. If not, then
|
|
15
|
+
// the shared pointer is created with a deleter that does nothing.
|
|
16
|
+
Ref<atn::ATNConfigSet> buildConfigsRef(atn::ATNConfigSet *configs, bool deleteConfigs) {
|
|
17
|
+
if (deleteConfigs) {
|
|
18
|
+
return Ref<atn::ATNConfigSet>(configs);
|
|
19
|
+
} else {
|
|
20
|
+
return Ref<atn::ATNConfigSet>(configs, [](atn::ATNConfigSet *){});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
NoViableAltException::NoViableAltException(Parser *recognizer)
|
|
27
|
+
: NoViableAltException(recognizer, recognizer->getTokenStream(), recognizer->getCurrentToken(),
|
|
28
|
+
recognizer->getCurrentToken(), nullptr, recognizer->getContext(), false) {
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
NoViableAltException::NoViableAltException(Parser *recognizer, TokenStream *input,Token *startToken,
|
|
32
|
+
Token *offendingToken, atn::ATNConfigSet *deadEndConfigs, ParserRuleContext *ctx, bool deleteConfigs)
|
|
33
|
+
: RecognitionException("No viable alternative", recognizer, input, ctx, offendingToken),
|
|
34
|
+
_deadEndConfigs(buildConfigsRef(deadEndConfigs, deleteConfigs)), _startToken(startToken) {
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
NoViableAltException::~NoViableAltException() {
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Token* NoViableAltException::getStartToken() const {
|
|
41
|
+
return _startToken;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
atn::ATNConfigSet* NoViableAltException::getDeadEndConfigs() const {
|
|
45
|
+
return _deadEndConfigs.get();
|
|
46
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include "RecognitionException.h"
|
|
9
|
+
#include "Token.h"
|
|
10
|
+
#include "atn/ATNConfigSet.h"
|
|
11
|
+
|
|
12
|
+
namespace antlr4 {
|
|
13
|
+
|
|
14
|
+
/// Indicates that the parser could not decide which of two or more paths
|
|
15
|
+
/// to take based upon the remaining input. It tracks the starting token
|
|
16
|
+
/// of the offending input and also knows where the parser was
|
|
17
|
+
/// in the various paths when the error. Reported by reportNoViableAlternative()
|
|
18
|
+
class ANTLR4CPP_PUBLIC NoViableAltException : public RecognitionException {
|
|
19
|
+
public:
|
|
20
|
+
NoViableAltException(Parser *recognizer); // LL(1) error
|
|
21
|
+
NoViableAltException(Parser *recognizer, TokenStream *input,Token *startToken,
|
|
22
|
+
Token *offendingToken, atn::ATNConfigSet *deadEndConfigs, ParserRuleContext *ctx, bool deleteConfigs);
|
|
23
|
+
~NoViableAltException();
|
|
24
|
+
|
|
25
|
+
virtual Token* getStartToken() const;
|
|
26
|
+
virtual atn::ATNConfigSet* getDeadEndConfigs() const;
|
|
27
|
+
|
|
28
|
+
private:
|
|
29
|
+
/// Which configurations did we try at input.index() that couldn't match input.LT(1)?
|
|
30
|
+
/// Shared pointer that conditionally deletes the configurations (based on flag
|
|
31
|
+
/// passed during construction)
|
|
32
|
+
Ref<atn::ATNConfigSet> _deadEndConfigs;
|
|
33
|
+
|
|
34
|
+
/// The token object at the start index; the input stream might
|
|
35
|
+
/// not be buffering tokens so get a reference to it. (At the
|
|
36
|
+
/// time the error occurred, of course the stream needs to keep a
|
|
37
|
+
/// buffer all of the tokens but later we might not have access to those.)
|
|
38
|
+
Token *_startToken;
|
|
39
|
+
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "atn/ATNDeserializationOptions.h"
|
|
7
|
+
#include "tree/pattern/ParseTreePatternMatcher.h"
|
|
8
|
+
#include "dfa/DFA.h"
|
|
9
|
+
#include "ParserRuleContext.h"
|
|
10
|
+
#include "tree/TerminalNode.h"
|
|
11
|
+
#include "tree/ErrorNodeImpl.h"
|
|
12
|
+
#include "Lexer.h"
|
|
13
|
+
#include "atn/ParserATNSimulator.h"
|
|
14
|
+
#include "misc/IntervalSet.h"
|
|
15
|
+
#include "atn/RuleStartState.h"
|
|
16
|
+
#include "DefaultErrorStrategy.h"
|
|
17
|
+
#include "atn/ATNDeserializer.h"
|
|
18
|
+
#include "atn/RuleTransition.h"
|
|
19
|
+
#include "atn/ATN.h"
|
|
20
|
+
#include "Exceptions.h"
|
|
21
|
+
#include "ANTLRErrorListener.h"
|
|
22
|
+
#include "tree/pattern/ParseTreePattern.h"
|
|
23
|
+
|
|
24
|
+
#include "atn/ProfilingATNSimulator.h"
|
|
25
|
+
#include "atn/ParseInfo.h"
|
|
26
|
+
|
|
27
|
+
#include "Parser.h"
|
|
28
|
+
|
|
29
|
+
using namespace antlr4;
|
|
30
|
+
using namespace antlr4::atn;
|
|
31
|
+
|
|
32
|
+
using namespace antlrcpp;
|
|
33
|
+
|
|
34
|
+
std::map<std::vector<uint16_t>, atn::ATN> Parser::bypassAltsAtnCache;
|
|
35
|
+
|
|
36
|
+
Parser::TraceListener::TraceListener(Parser *outerInstance_) : outerInstance(outerInstance_) {
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
Parser::TraceListener::~TraceListener() {
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void Parser::TraceListener::enterEveryRule(ParserRuleContext *ctx) {
|
|
43
|
+
std::cout << "enter " << outerInstance->getRuleNames()[ctx->getRuleIndex()]
|
|
44
|
+
<< ", LT(1)=" << outerInstance->_input->LT(1)->getText() << std::endl;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void Parser::TraceListener::visitTerminal(tree::TerminalNode *node) {
|
|
48
|
+
std::cout << "consume " << node->getSymbol() << " rule "
|
|
49
|
+
<< outerInstance->getRuleNames()[outerInstance->getContext()->getRuleIndex()] << std::endl;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void Parser::TraceListener::visitErrorNode(tree::ErrorNode * /*node*/) {
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void Parser::TraceListener::exitEveryRule(ParserRuleContext *ctx) {
|
|
56
|
+
std::cout << "exit " << outerInstance->getRuleNames()[ctx->getRuleIndex()]
|
|
57
|
+
<< ", LT(1)=" << outerInstance->_input->LT(1)->getText() << std::endl;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Parser::TrimToSizeListener Parser::TrimToSizeListener::INSTANCE;
|
|
61
|
+
|
|
62
|
+
Parser::TrimToSizeListener::~TrimToSizeListener() {
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void Parser::TrimToSizeListener::enterEveryRule(ParserRuleContext * /*ctx*/) {
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void Parser::TrimToSizeListener::visitTerminal(tree::TerminalNode * /*node*/) {
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void Parser::TrimToSizeListener::visitErrorNode(tree::ErrorNode * /*node*/) {
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void Parser::TrimToSizeListener::exitEveryRule(ParserRuleContext * ctx) {
|
|
75
|
+
ctx->children.shrink_to_fit();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
Parser::Parser(TokenStream *input) {
|
|
79
|
+
InitializeInstanceFields();
|
|
80
|
+
setInputStream(input);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
Parser::~Parser() {
|
|
84
|
+
_tracker.reset();
|
|
85
|
+
delete _tracer;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
void Parser::reset() {
|
|
89
|
+
if (getInputStream() != nullptr) {
|
|
90
|
+
getInputStream()->seek(0);
|
|
91
|
+
}
|
|
92
|
+
_errHandler->reset(this); // Watch out, this is not shared_ptr.reset().
|
|
93
|
+
|
|
94
|
+
_matchedEOF = false;
|
|
95
|
+
_syntaxErrors = 0;
|
|
96
|
+
setTrace(false);
|
|
97
|
+
_precedenceStack.clear();
|
|
98
|
+
_precedenceStack.push_back(0);
|
|
99
|
+
_ctx = nullptr;
|
|
100
|
+
_tracker.reset();
|
|
101
|
+
|
|
102
|
+
atn::ATNSimulator *interpreter = getInterpreter<atn::ParserATNSimulator>();
|
|
103
|
+
if (interpreter != nullptr) {
|
|
104
|
+
interpreter->reset();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
Token* Parser::match(size_t ttype) {
|
|
109
|
+
Token *t = getCurrentToken();
|
|
110
|
+
if (t->getType() == ttype) {
|
|
111
|
+
if (ttype == EOF) {
|
|
112
|
+
_matchedEOF = true;
|
|
113
|
+
}
|
|
114
|
+
_errHandler->reportMatch(this);
|
|
115
|
+
consume();
|
|
116
|
+
} else {
|
|
117
|
+
t = _errHandler->recoverInline(this);
|
|
118
|
+
if (_buildParseTrees && t->getTokenIndex() == INVALID_INDEX) {
|
|
119
|
+
// we must have conjured up a new token during single token insertion
|
|
120
|
+
// if it's not the current symbol
|
|
121
|
+
_ctx->addChild(createErrorNode(t));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return t;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
Token* Parser::matchWildcard() {
|
|
128
|
+
Token *t = getCurrentToken();
|
|
129
|
+
if (t->getType() > 0) {
|
|
130
|
+
_errHandler->reportMatch(this);
|
|
131
|
+
consume();
|
|
132
|
+
} else {
|
|
133
|
+
t = _errHandler->recoverInline(this);
|
|
134
|
+
if (_buildParseTrees && t->getTokenIndex() == INVALID_INDEX) {
|
|
135
|
+
// we must have conjured up a new token during single token insertion
|
|
136
|
+
// if it's not the current symbol
|
|
137
|
+
_ctx->addChild(createErrorNode(t));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return t;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
void Parser::setBuildParseTree(bool buildParseTrees) {
|
|
145
|
+
this->_buildParseTrees = buildParseTrees;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
bool Parser::getBuildParseTree() {
|
|
149
|
+
return _buildParseTrees;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
void Parser::setTrimParseTree(bool trimParseTrees) {
|
|
153
|
+
if (trimParseTrees) {
|
|
154
|
+
if (getTrimParseTree()) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
addParseListener(&TrimToSizeListener::INSTANCE);
|
|
158
|
+
} else {
|
|
159
|
+
removeParseListener(&TrimToSizeListener::INSTANCE);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
bool Parser::getTrimParseTree() {
|
|
164
|
+
return std::find(getParseListeners().begin(), getParseListeners().end(), &TrimToSizeListener::INSTANCE) != getParseListeners().end();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
std::vector<tree::ParseTreeListener *> Parser::getParseListeners() {
|
|
168
|
+
return _parseListeners;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
void Parser::addParseListener(tree::ParseTreeListener *listener) {
|
|
172
|
+
if (!listener) {
|
|
173
|
+
throw NullPointerException("listener");
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
this->_parseListeners.push_back(listener);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
void Parser::removeParseListener(tree::ParseTreeListener *listener) {
|
|
180
|
+
if (!_parseListeners.empty()) {
|
|
181
|
+
auto it = std::find(_parseListeners.begin(), _parseListeners.end(), listener);
|
|
182
|
+
if (it != _parseListeners.end()) {
|
|
183
|
+
_parseListeners.erase(it);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
void Parser::removeParseListeners() {
|
|
189
|
+
_parseListeners.clear();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
void Parser::triggerEnterRuleEvent() {
|
|
193
|
+
for (auto listener : _parseListeners) {
|
|
194
|
+
listener->enterEveryRule(_ctx);
|
|
195
|
+
_ctx->enterRule(listener);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
void Parser::triggerExitRuleEvent() {
|
|
200
|
+
// reverse order walk of listeners
|
|
201
|
+
for (auto it = _parseListeners.rbegin(); it != _parseListeners.rend(); ++it) {
|
|
202
|
+
_ctx->exitRule(*it);
|
|
203
|
+
(*it)->exitEveryRule(_ctx);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
size_t Parser::getNumberOfSyntaxErrors() {
|
|
208
|
+
return _syntaxErrors;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
Ref<TokenFactory<CommonToken>> Parser::getTokenFactory() {
|
|
212
|
+
return _input->getTokenSource()->getTokenFactory();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
const atn::ATN& Parser::getATNWithBypassAlts() {
|
|
217
|
+
std::vector<uint16_t> serializedAtn = getSerializedATN();
|
|
218
|
+
if (serializedAtn.empty()) {
|
|
219
|
+
throw UnsupportedOperationException("The current parser does not support an ATN with bypass alternatives.");
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
std::lock_guard<std::mutex> lck(_mutex);
|
|
223
|
+
|
|
224
|
+
// XXX: using the entire serialized ATN as key into the map is a big resource waste.
|
|
225
|
+
// How large can that thing become?
|
|
226
|
+
if (bypassAltsAtnCache.find(serializedAtn) == bypassAltsAtnCache.end())
|
|
227
|
+
{
|
|
228
|
+
atn::ATNDeserializationOptions deserializationOptions;
|
|
229
|
+
deserializationOptions.setGenerateRuleBypassTransitions(true);
|
|
230
|
+
|
|
231
|
+
atn::ATNDeserializer deserializer(deserializationOptions);
|
|
232
|
+
bypassAltsAtnCache[serializedAtn] = deserializer.deserialize(serializedAtn);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return bypassAltsAtnCache[serializedAtn];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
tree::pattern::ParseTreePattern Parser::compileParseTreePattern(const std::string &pattern, int patternRuleIndex) {
|
|
239
|
+
if (getTokenStream() != nullptr) {
|
|
240
|
+
TokenSource *tokenSource = getTokenStream()->getTokenSource();
|
|
241
|
+
if (is<Lexer*>(tokenSource)) {
|
|
242
|
+
Lexer *lexer = dynamic_cast<Lexer *>(tokenSource);
|
|
243
|
+
return compileParseTreePattern(pattern, patternRuleIndex, lexer);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
throw UnsupportedOperationException("Parser can't discover a lexer to use");
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
tree::pattern::ParseTreePattern Parser::compileParseTreePattern(const std::string &pattern, int patternRuleIndex,
|
|
250
|
+
Lexer *lexer) {
|
|
251
|
+
tree::pattern::ParseTreePatternMatcher m(lexer, this);
|
|
252
|
+
return m.compile(pattern, patternRuleIndex);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
Ref<ANTLRErrorStrategy> Parser::getErrorHandler() {
|
|
256
|
+
return _errHandler;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
void Parser::setErrorHandler(Ref<ANTLRErrorStrategy> const& handler) {
|
|
260
|
+
_errHandler = handler;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
IntStream* Parser::getInputStream() {
|
|
264
|
+
return getTokenStream();
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
void Parser::setInputStream(IntStream *input) {
|
|
268
|
+
setTokenStream(static_cast<TokenStream*>(input));
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
TokenStream* Parser::getTokenStream() {
|
|
272
|
+
return _input;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
void Parser::setTokenStream(TokenStream *input) {
|
|
276
|
+
_input = nullptr; // Just a reference we don't own.
|
|
277
|
+
reset();
|
|
278
|
+
_input = input;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
Token* Parser::getCurrentToken() {
|
|
282
|
+
return _input->LT(1);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
void Parser::notifyErrorListeners(const std::string &msg) {
|
|
286
|
+
notifyErrorListeners(getCurrentToken(), msg, nullptr);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
void Parser::notifyErrorListeners(Token *offendingToken, const std::string &msg, std::exception_ptr e) {
|
|
290
|
+
_syntaxErrors++;
|
|
291
|
+
size_t line = offendingToken->getLine();
|
|
292
|
+
size_t charPositionInLine = offendingToken->getCharPositionInLine();
|
|
293
|
+
|
|
294
|
+
ProxyErrorListener &listener = getErrorListenerDispatch();
|
|
295
|
+
listener.syntaxError(this, offendingToken, line, charPositionInLine, msg, e);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
Token* Parser::consume() {
|
|
299
|
+
Token *o = getCurrentToken();
|
|
300
|
+
if (o->getType() != EOF) {
|
|
301
|
+
getInputStream()->consume();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
bool hasListener = _parseListeners.size() > 0 && !_parseListeners.empty();
|
|
305
|
+
if (_buildParseTrees || hasListener) {
|
|
306
|
+
if (_errHandler->inErrorRecoveryMode(this)) {
|
|
307
|
+
tree::ErrorNode *node = createErrorNode(o);
|
|
308
|
+
_ctx->addChild(node);
|
|
309
|
+
if (_parseListeners.size() > 0) {
|
|
310
|
+
for (auto listener : _parseListeners) {
|
|
311
|
+
listener->visitErrorNode(node);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
} else {
|
|
315
|
+
tree::TerminalNode *node = _ctx->addChild(createTerminalNode(o));
|
|
316
|
+
if (_parseListeners.size() > 0) {
|
|
317
|
+
for (auto listener : _parseListeners) {
|
|
318
|
+
listener->visitTerminal(node);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return o;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
void Parser::addContextToParseTree() {
|
|
327
|
+
// Add current context to parent if we have a parent.
|
|
328
|
+
if (_ctx->parent == nullptr)
|
|
329
|
+
return;
|
|
330
|
+
|
|
331
|
+
ParserRuleContext *parent = dynamic_cast<ParserRuleContext *>(_ctx->parent);
|
|
332
|
+
parent->addChild(_ctx);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
void Parser::enterRule(ParserRuleContext *localctx, size_t state, size_t /*ruleIndex*/) {
|
|
336
|
+
setState(state);
|
|
337
|
+
_ctx = localctx;
|
|
338
|
+
_ctx->start = _input->LT(1);
|
|
339
|
+
if (_buildParseTrees) {
|
|
340
|
+
addContextToParseTree();
|
|
341
|
+
}
|
|
342
|
+
if (_parseListeners.size() > 0) {
|
|
343
|
+
triggerEnterRuleEvent();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
void Parser::exitRule() {
|
|
348
|
+
if (_matchedEOF) {
|
|
349
|
+
// if we have matched EOF, it cannot consume past EOF so we use LT(1) here
|
|
350
|
+
_ctx->stop = _input->LT(1); // LT(1) will be end of file
|
|
351
|
+
} else {
|
|
352
|
+
_ctx->stop = _input->LT(-1); // stop node is what we just matched
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// trigger event on ctx, before it reverts to parent
|
|
356
|
+
if (_parseListeners.size() > 0) {
|
|
357
|
+
triggerExitRuleEvent();
|
|
358
|
+
}
|
|
359
|
+
setState(_ctx->invokingState);
|
|
360
|
+
_ctx = dynamic_cast<ParserRuleContext *>(_ctx->parent);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
void Parser::enterOuterAlt(ParserRuleContext *localctx, size_t altNum) {
|
|
364
|
+
localctx->setAltNumber(altNum);
|
|
365
|
+
|
|
366
|
+
// if we have new localctx, make sure we replace existing ctx
|
|
367
|
+
// that is previous child of parse tree
|
|
368
|
+
if (_buildParseTrees && _ctx != localctx) {
|
|
369
|
+
if (_ctx->parent != nullptr) {
|
|
370
|
+
ParserRuleContext *parent = dynamic_cast<ParserRuleContext *>(_ctx->parent);
|
|
371
|
+
parent->removeLastChild();
|
|
372
|
+
parent->addChild(localctx);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
_ctx = localctx;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
int Parser::getPrecedence() const {
|
|
379
|
+
if (_precedenceStack.empty()) {
|
|
380
|
+
return -1;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
return _precedenceStack.back();
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
void Parser::enterRecursionRule(ParserRuleContext *localctx, size_t ruleIndex) {
|
|
387
|
+
enterRecursionRule(localctx, getATN().ruleToStartState[ruleIndex]->stateNumber, ruleIndex, 0);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
void Parser::enterRecursionRule(ParserRuleContext *localctx, size_t state, size_t /*ruleIndex*/, int precedence) {
|
|
391
|
+
setState(state);
|
|
392
|
+
_precedenceStack.push_back(precedence);
|
|
393
|
+
_ctx = localctx;
|
|
394
|
+
_ctx->start = _input->LT(1);
|
|
395
|
+
if (!_parseListeners.empty()) {
|
|
396
|
+
triggerEnterRuleEvent(); // simulates rule entry for left-recursive rules
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
void Parser::pushNewRecursionContext(ParserRuleContext *localctx, size_t state, size_t /*ruleIndex*/) {
|
|
401
|
+
ParserRuleContext *previous = _ctx;
|
|
402
|
+
previous->parent = localctx;
|
|
403
|
+
previous->invokingState = state;
|
|
404
|
+
previous->stop = _input->LT(-1);
|
|
405
|
+
|
|
406
|
+
_ctx = localctx;
|
|
407
|
+
_ctx->start = previous->start;
|
|
408
|
+
if (_buildParseTrees) {
|
|
409
|
+
_ctx->addChild(previous);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (_parseListeners.size() > 0) {
|
|
413
|
+
triggerEnterRuleEvent(); // simulates rule entry for left-recursive rules
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
void Parser::unrollRecursionContexts(ParserRuleContext *parentctx) {
|
|
418
|
+
_precedenceStack.pop_back();
|
|
419
|
+
_ctx->stop = _input->LT(-1);
|
|
420
|
+
ParserRuleContext *retctx = _ctx; // save current ctx (return value)
|
|
421
|
+
|
|
422
|
+
// unroll so ctx is as it was before call to recursive method
|
|
423
|
+
if (_parseListeners.size() > 0) {
|
|
424
|
+
while (_ctx != parentctx) {
|
|
425
|
+
triggerExitRuleEvent();
|
|
426
|
+
_ctx = dynamic_cast<ParserRuleContext *>(_ctx->parent);
|
|
427
|
+
}
|
|
428
|
+
} else {
|
|
429
|
+
_ctx = parentctx;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// hook into tree
|
|
433
|
+
retctx->parent = parentctx;
|
|
434
|
+
|
|
435
|
+
if (_buildParseTrees && parentctx != nullptr) {
|
|
436
|
+
// add return ctx into invoking rule's tree
|
|
437
|
+
parentctx->addChild(retctx);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
ParserRuleContext* Parser::getInvokingContext(size_t ruleIndex) {
|
|
442
|
+
ParserRuleContext *p = _ctx;
|
|
443
|
+
while (p) {
|
|
444
|
+
if (p->getRuleIndex() == ruleIndex) {
|
|
445
|
+
return p;
|
|
446
|
+
}
|
|
447
|
+
if (p->parent == nullptr)
|
|
448
|
+
break;
|
|
449
|
+
p = dynamic_cast<ParserRuleContext *>(p->parent);
|
|
450
|
+
}
|
|
451
|
+
return nullptr;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
ParserRuleContext* Parser::getContext() {
|
|
455
|
+
return _ctx;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
void Parser::setContext(ParserRuleContext *ctx) {
|
|
459
|
+
_ctx = ctx;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
bool Parser::precpred(RuleContext * /*localctx*/, int precedence) {
|
|
463
|
+
return precedence >= _precedenceStack.back();
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
bool Parser::inContext(const std::string &/*context*/) {
|
|
467
|
+
// TODO: useful in parser?
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
bool Parser::isExpectedToken(size_t symbol) {
|
|
472
|
+
const atn::ATN &atn = getInterpreter<atn::ParserATNSimulator>()->atn;
|
|
473
|
+
ParserRuleContext *ctx = _ctx;
|
|
474
|
+
atn::ATNState *s = atn.states[getState()];
|
|
475
|
+
misc::IntervalSet following = atn.nextTokens(s);
|
|
476
|
+
|
|
477
|
+
if (following.contains(symbol)) {
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
if (!following.contains(Token::EPSILON)) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
while (ctx && ctx->invokingState != ATNState::INVALID_STATE_NUMBER && following.contains(Token::EPSILON)) {
|
|
486
|
+
atn::ATNState *invokingState = atn.states[ctx->invokingState];
|
|
487
|
+
atn::RuleTransition *rt = static_cast<atn::RuleTransition*>(invokingState->transitions[0]);
|
|
488
|
+
following = atn.nextTokens(rt->followState);
|
|
489
|
+
if (following.contains(symbol)) {
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
ctx = dynamic_cast<ParserRuleContext *>(ctx->parent);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
if (following.contains(Token::EPSILON) && symbol == EOF) {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
bool Parser::isMatchedEOF() const {
|
|
504
|
+
return _matchedEOF;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
misc::IntervalSet Parser::getExpectedTokens() {
|
|
508
|
+
return getATN().getExpectedTokens(getState(), getContext());
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
misc::IntervalSet Parser::getExpectedTokensWithinCurrentRule() {
|
|
512
|
+
const atn::ATN &atn = getInterpreter<atn::ParserATNSimulator>()->atn;
|
|
513
|
+
atn::ATNState *s = atn.states[getState()];
|
|
514
|
+
return atn.nextTokens(s);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
size_t Parser::getRuleIndex(const std::string &ruleName) {
|
|
518
|
+
const std::map<std::string, size_t> &m = getRuleIndexMap();
|
|
519
|
+
auto iterator = m.find(ruleName);
|
|
520
|
+
if (iterator == m.end()) {
|
|
521
|
+
return INVALID_INDEX;
|
|
522
|
+
}
|
|
523
|
+
return iterator->second;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
ParserRuleContext* Parser::getRuleContext() {
|
|
527
|
+
return _ctx;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
std::vector<std::string> Parser::getRuleInvocationStack() {
|
|
531
|
+
return getRuleInvocationStack(_ctx);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
std::vector<std::string> Parser::getRuleInvocationStack(RuleContext *p) {
|
|
535
|
+
std::vector<std::string> const& ruleNames = getRuleNames();
|
|
536
|
+
std::vector<std::string> stack;
|
|
537
|
+
RuleContext *run = p;
|
|
538
|
+
while (run != nullptr) {
|
|
539
|
+
// compute what follows who invoked us
|
|
540
|
+
size_t ruleIndex = run->getRuleIndex();
|
|
541
|
+
if (ruleIndex == INVALID_INDEX ) {
|
|
542
|
+
stack.push_back("n/a");
|
|
543
|
+
} else {
|
|
544
|
+
stack.push_back(ruleNames[ruleIndex]);
|
|
545
|
+
}
|
|
546
|
+
if (p->parent == nullptr)
|
|
547
|
+
break;
|
|
548
|
+
run = dynamic_cast<RuleContext *>(run->parent);
|
|
549
|
+
}
|
|
550
|
+
return stack;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
std::vector<std::string> Parser::getDFAStrings() {
|
|
554
|
+
atn::ParserATNSimulator *simulator = getInterpreter<atn::ParserATNSimulator>();
|
|
555
|
+
if (!simulator->decisionToDFA.empty()) {
|
|
556
|
+
std::lock_guard<std::mutex> lck(_mutex);
|
|
557
|
+
|
|
558
|
+
std::vector<std::string> s;
|
|
559
|
+
for (size_t d = 0; d < simulator->decisionToDFA.size(); d++) {
|
|
560
|
+
dfa::DFA &dfa = simulator->decisionToDFA[d];
|
|
561
|
+
s.push_back(dfa.toString(getVocabulary()));
|
|
562
|
+
}
|
|
563
|
+
return s;
|
|
564
|
+
}
|
|
565
|
+
return std::vector<std::string>();
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
void Parser::dumpDFA() {
|
|
569
|
+
atn::ParserATNSimulator *simulator = getInterpreter<atn::ParserATNSimulator>();
|
|
570
|
+
if (!simulator->decisionToDFA.empty()) {
|
|
571
|
+
std::lock_guard<std::mutex> lck(_mutex);
|
|
572
|
+
bool seenOne = false;
|
|
573
|
+
for (size_t d = 0; d < simulator->decisionToDFA.size(); d++) {
|
|
574
|
+
dfa::DFA &dfa = simulator->decisionToDFA[d];
|
|
575
|
+
if (!dfa.states.empty()) {
|
|
576
|
+
if (seenOne) {
|
|
577
|
+
std::cout << std::endl;
|
|
578
|
+
}
|
|
579
|
+
std::cout << "Decision " << dfa.decision << ":" << std::endl;
|
|
580
|
+
std::cout << dfa.toString(getVocabulary());
|
|
581
|
+
seenOne = true;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
std::string Parser::getSourceName() {
|
|
588
|
+
return _input->getSourceName();
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
atn::ParseInfo Parser::getParseInfo() const {
|
|
592
|
+
atn::ProfilingATNSimulator *interp = getInterpreter<atn::ProfilingATNSimulator>();
|
|
593
|
+
return atn::ParseInfo(interp);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
void Parser::setProfile(bool profile) {
|
|
597
|
+
atn::ParserATNSimulator *interp = getInterpreter<atn::ProfilingATNSimulator>();
|
|
598
|
+
atn::PredictionMode saveMode = interp != nullptr ? interp->getPredictionMode() : atn::PredictionMode::LL;
|
|
599
|
+
if (profile) {
|
|
600
|
+
if (!is<atn::ProfilingATNSimulator *>(interp)) {
|
|
601
|
+
setInterpreter(new atn::ProfilingATNSimulator(this)); /* mem-check: replacing existing interpreter which gets deleted. */
|
|
602
|
+
}
|
|
603
|
+
} else if (is<atn::ProfilingATNSimulator *>(interp)) {
|
|
604
|
+
/* mem-check: replacing existing interpreter which gets deleted. */
|
|
605
|
+
atn::ParserATNSimulator *sim = new atn::ParserATNSimulator(this, getATN(), interp->decisionToDFA, interp->getSharedContextCache());
|
|
606
|
+
setInterpreter(sim);
|
|
607
|
+
}
|
|
608
|
+
getInterpreter<atn::ParserATNSimulator>()->setPredictionMode(saveMode);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
void Parser::setTrace(bool trace) {
|
|
612
|
+
if (!trace) {
|
|
613
|
+
if (_tracer)
|
|
614
|
+
removeParseListener(_tracer);
|
|
615
|
+
delete _tracer;
|
|
616
|
+
_tracer = nullptr;
|
|
617
|
+
} else {
|
|
618
|
+
if (_tracer)
|
|
619
|
+
removeParseListener(_tracer); // Just in case this is triggered multiple times.
|
|
620
|
+
_tracer = new TraceListener(this);
|
|
621
|
+
addParseListener(_tracer);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
bool Parser::isTrace() const {
|
|
626
|
+
return _tracer != nullptr;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
tree::TerminalNode *Parser::createTerminalNode(Token *t) {
|
|
630
|
+
return _tracker.createInstance<tree::TerminalNodeImpl>(t);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
tree::ErrorNode *Parser::createErrorNode(Token *t) {
|
|
634
|
+
return _tracker.createInstance<tree::ErrorNodeImpl>(t);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
void Parser::InitializeInstanceFields() {
|
|
638
|
+
_errHandler = std::make_shared<DefaultErrorStrategy>();
|
|
639
|
+
_precedenceStack.clear();
|
|
640
|
+
_precedenceStack.push_back(0);
|
|
641
|
+
_buildParseTrees = true;
|
|
642
|
+
_syntaxErrors = 0;
|
|
643
|
+
_matchedEOF = false;
|
|
644
|
+
_input = nullptr;
|
|
645
|
+
_tracer = nullptr;
|
|
646
|
+
_ctx = nullptr;
|
|
647
|
+
}
|
|
648
|
+
|