did_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 +12 -0
- data/Rakefile +28 -0
- data/did_parser.gemspec +31 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +30 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +180 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +79 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.h +37 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +193 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.h +158 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +336 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +99 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +52 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +218 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +294 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +196 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +60 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +46 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +668 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +461 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +294 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +173 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +138 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +65 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +156 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +159 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +144 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +141 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +54 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +92 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +85 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.h +137 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +425 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +295 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +208 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +117 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +64 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +177 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.h +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +98 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +169 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +158 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +132 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +106 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +157 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +232 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +156 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +54 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +48 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +629 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +32 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +71 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +56 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +139 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +29 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +35 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +109 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +51 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +30 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +12 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +34 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +31 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +42 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +189 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +76 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +67 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +615 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +199 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +15 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +100 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +111 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +128 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +57 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +59 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +45 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +75 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +57 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +76 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +57 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +53 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +53 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +57 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +51 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +51 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +22 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +16 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1383 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +911 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +29 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +35 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +50 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +579 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +225 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +202 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +31 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +42 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +418 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +233 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +28 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +38 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +86 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +37 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +65 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +21 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +115 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +96 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +60 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +59 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +153 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +17 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +22 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +61 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +508 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +190 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +120 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +102 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +8 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +16 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +149 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +207 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +65 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +161 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +38 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +16 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +129 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +54 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +43 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +66 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +12 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +111 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +48 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +55 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +40 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +54 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +32 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +370 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +182 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +47 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
- data/ext/did_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
- data/ext/did_parser/antlrgen/DIDLexer.cpp +225 -0
- data/ext/did_parser/antlrgen/DIDLexer.h +52 -0
- data/ext/did_parser/antlrgen/DIDLexer.interp +93 -0
- data/ext/did_parser/antlrgen/DIDLexer.tokens +42 -0
- data/ext/did_parser/antlrgen/DIDParser.cpp +2042 -0
- data/ext/did_parser/antlrgen/DIDParser.h +537 -0
- data/ext/did_parser/antlrgen/DIDParser.interp +74 -0
- data/ext/did_parser/antlrgen/DIDParser.tokens +42 -0
- data/ext/did_parser/antlrgen/DIDParserBaseListener.cpp +7 -0
- data/ext/did_parser/antlrgen/DIDParserBaseListener.h +104 -0
- data/ext/did_parser/antlrgen/DIDParserBaseVisitor.cpp +7 -0
- data/ext/did_parser/antlrgen/DIDParserBaseVisitor.h +124 -0
- data/ext/did_parser/antlrgen/DIDParserListener.cpp +7 -0
- data/ext/did_parser/antlrgen/DIDParserListener.h +97 -0
- data/ext/did_parser/antlrgen/DIDParserVisitor.cpp +7 -0
- data/ext/did_parser/antlrgen/DIDParserVisitor.h +76 -0
- data/ext/did_parser/did_parser.cpp +2996 -0
- data/ext/did_parser/extconf.rb +38 -0
- data/lib/did_parser/version.rb +3 -0
- data/lib/did_parser.rb +2 -0
- metadata +382 -0
|
@@ -0,0 +1,615 @@
|
|
|
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 "IntStream.h"
|
|
7
|
+
#include "atn/OrderedATNConfigSet.h"
|
|
8
|
+
#include "Token.h"
|
|
9
|
+
#include "LexerNoViableAltException.h"
|
|
10
|
+
#include "atn/RuleStopState.h"
|
|
11
|
+
#include "atn/RuleTransition.h"
|
|
12
|
+
#include "atn/SingletonPredictionContext.h"
|
|
13
|
+
#include "atn/PredicateTransition.h"
|
|
14
|
+
#include "atn/ActionTransition.h"
|
|
15
|
+
#include "atn/TokensStartState.h"
|
|
16
|
+
#include "misc/Interval.h"
|
|
17
|
+
#include "dfa/DFA.h"
|
|
18
|
+
#include "Lexer.h"
|
|
19
|
+
|
|
20
|
+
#include "dfa/DFAState.h"
|
|
21
|
+
#include "atn/LexerATNConfig.h"
|
|
22
|
+
#include "atn/LexerActionExecutor.h"
|
|
23
|
+
|
|
24
|
+
#include "atn/LexerATNSimulator.h"
|
|
25
|
+
|
|
26
|
+
#define DEBUG_ATN 0
|
|
27
|
+
#define DEBUG_DFA 0
|
|
28
|
+
|
|
29
|
+
using namespace antlr4;
|
|
30
|
+
using namespace antlr4::atn;
|
|
31
|
+
using namespace antlrcpp;
|
|
32
|
+
|
|
33
|
+
void LexerATNSimulator::SimState::reset() {
|
|
34
|
+
*this = SimState();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
LexerATNSimulator::LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
|
|
38
|
+
PredictionContextCache &sharedContextCache)
|
|
39
|
+
: LexerATNSimulator(nullptr, atn, decisionToDFA, sharedContextCache) {
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
LexerATNSimulator::LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
|
|
43
|
+
PredictionContextCache &sharedContextCache)
|
|
44
|
+
: ATNSimulator(atn, sharedContextCache), _recog(recog), _decisionToDFA(decisionToDFA) {
|
|
45
|
+
InitializeInstanceFields();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void LexerATNSimulator::copyState(LexerATNSimulator *simulator) {
|
|
49
|
+
_charPositionInLine = simulator->_charPositionInLine;
|
|
50
|
+
_line = simulator->_line;
|
|
51
|
+
_mode = simulator->_mode;
|
|
52
|
+
_startIndex = simulator->_startIndex;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
|
|
56
|
+
_mode = mode;
|
|
57
|
+
ssize_t mark = input->mark();
|
|
58
|
+
|
|
59
|
+
auto onExit = finally([input, mark] {
|
|
60
|
+
input->release(mark);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
_startIndex = input->index();
|
|
64
|
+
_prevAccept.reset();
|
|
65
|
+
const dfa::DFA &dfa = _decisionToDFA[mode];
|
|
66
|
+
dfa::DFAState* s0;
|
|
67
|
+
{
|
|
68
|
+
std::shared_lock<std::shared_mutex> stateLock(atn._stateMutex);
|
|
69
|
+
s0 = dfa.s0;
|
|
70
|
+
}
|
|
71
|
+
if (s0 == nullptr) {
|
|
72
|
+
return matchATN(input);
|
|
73
|
+
} else {
|
|
74
|
+
return execATN(input, s0);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void LexerATNSimulator::reset() {
|
|
79
|
+
_prevAccept.reset();
|
|
80
|
+
_startIndex = 0;
|
|
81
|
+
_line = 1;
|
|
82
|
+
_charPositionInLine = 0;
|
|
83
|
+
_mode = Lexer::DEFAULT_MODE;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void LexerATNSimulator::clearDFA() {
|
|
87
|
+
size_t size = _decisionToDFA.size();
|
|
88
|
+
_decisionToDFA.clear();
|
|
89
|
+
for (size_t d = 0; d < size; ++d) {
|
|
90
|
+
_decisionToDFA.emplace_back(atn.getDecisionState(d), d);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
size_t LexerATNSimulator::matchATN(CharStream *input) {
|
|
95
|
+
ATNState *startState = atn.modeToStartState[_mode];
|
|
96
|
+
|
|
97
|
+
std::unique_ptr<ATNConfigSet> s0_closure = computeStartState(input, startState);
|
|
98
|
+
|
|
99
|
+
bool suppressEdge = s0_closure->hasSemanticContext;
|
|
100
|
+
s0_closure->hasSemanticContext = false;
|
|
101
|
+
|
|
102
|
+
dfa::DFAState *next = addDFAState(s0_closure.release(), suppressEdge);
|
|
103
|
+
|
|
104
|
+
size_t predict = execATN(input, next);
|
|
105
|
+
|
|
106
|
+
return predict;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
size_t LexerATNSimulator::execATN(CharStream *input, dfa::DFAState *ds0) {
|
|
110
|
+
if (ds0->isAcceptState) {
|
|
111
|
+
// allow zero-length tokens
|
|
112
|
+
// ml: in Java code this method uses 3 params. The first is a member var of the class anyway (_prevAccept), so why pass it here?
|
|
113
|
+
captureSimState(input, ds0);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
size_t t = input->LA(1);
|
|
117
|
+
dfa::DFAState *s = ds0; // s is current/from DFA state
|
|
118
|
+
|
|
119
|
+
while (true) { // while more work
|
|
120
|
+
// As we move src->trg, src->trg, we keep track of the previous trg to
|
|
121
|
+
// avoid looking up the DFA state again, which is expensive.
|
|
122
|
+
// If the previous target was already part of the DFA, we might
|
|
123
|
+
// be able to avoid doing a reach operation upon t. If s!=null,
|
|
124
|
+
// it means that semantic predicates didn't prevent us from
|
|
125
|
+
// creating a DFA state. Once we know s!=null, we check to see if
|
|
126
|
+
// the DFA state has an edge already for t. If so, we can just reuse
|
|
127
|
+
// it's configuration set; there's no point in re-computing it.
|
|
128
|
+
// This is kind of like doing DFA simulation within the ATN
|
|
129
|
+
// simulation because DFA simulation is really just a way to avoid
|
|
130
|
+
// computing reach/closure sets. Technically, once we know that
|
|
131
|
+
// we have a previously added DFA state, we could jump over to
|
|
132
|
+
// the DFA simulator. But, that would mean popping back and forth
|
|
133
|
+
// a lot and making things more complicated algorithmically.
|
|
134
|
+
// This optimization makes a lot of sense for loops within DFA.
|
|
135
|
+
// A character will take us back to an existing DFA state
|
|
136
|
+
// that already has lots of edges out of it. e.g., .* in comments.
|
|
137
|
+
dfa::DFAState *target = getExistingTargetState(s, t);
|
|
138
|
+
if (target == nullptr) {
|
|
139
|
+
target = computeTargetState(input, s, t);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (target == ERROR.get()) {
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// If this is a consumable input element, make sure to consume before
|
|
147
|
+
// capturing the accept state so the input index, line, and char
|
|
148
|
+
// position accurately reflect the state of the interpreter at the
|
|
149
|
+
// end of the token.
|
|
150
|
+
if (t != Token::EOF) {
|
|
151
|
+
consume(input);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (target->isAcceptState) {
|
|
155
|
+
captureSimState(input, target);
|
|
156
|
+
if (t == Token::EOF) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
t = input->LA(1);
|
|
162
|
+
s = target; // flip; current DFA target becomes new src/from state
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return failOrAccept(input, s->configs.get(), t);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_t t) {
|
|
169
|
+
dfa::DFAState* retval = nullptr;
|
|
170
|
+
std::shared_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
|
|
171
|
+
if (t <= MAX_DFA_EDGE) {
|
|
172
|
+
auto iterator = s->edges.find(t - MIN_DFA_EDGE);
|
|
173
|
+
#if DEBUG_ATN == 1
|
|
174
|
+
if (iterator != s->edges.end()) {
|
|
175
|
+
std::cout << std::string("reuse state ") << s->stateNumber << std::string(" edge to ") << iterator->second->stateNumber << std::endl;
|
|
176
|
+
}
|
|
177
|
+
#endif
|
|
178
|
+
|
|
179
|
+
if (iterator != s->edges.end())
|
|
180
|
+
retval = iterator->second;
|
|
181
|
+
}
|
|
182
|
+
return retval;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
dfa::DFAState *LexerATNSimulator::computeTargetState(CharStream *input, dfa::DFAState *s, size_t t) {
|
|
186
|
+
OrderedATNConfigSet *reach = new OrderedATNConfigSet(); /* mem-check: deleted on error or managed by new DFA state. */
|
|
187
|
+
|
|
188
|
+
// if we don't find an existing DFA state
|
|
189
|
+
// Fill reach starting from closure, following t transitions
|
|
190
|
+
getReachableConfigSet(input, s->configs.get(), reach, t);
|
|
191
|
+
|
|
192
|
+
if (reach->isEmpty()) { // we got nowhere on t from s
|
|
193
|
+
if (!reach->hasSemanticContext) {
|
|
194
|
+
// we got nowhere on t, don't throw out this knowledge; it'd
|
|
195
|
+
// cause a failover from DFA later.
|
|
196
|
+
addDFAEdge(s, t, ERROR.get());
|
|
197
|
+
}
|
|
198
|
+
delete reach;
|
|
199
|
+
|
|
200
|
+
// stop when we can't match any more char
|
|
201
|
+
return ERROR.get();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Add an edge from s to target DFA found/created for reach
|
|
205
|
+
return addDFAEdge(s, t, reach);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
size_t LexerATNSimulator::failOrAccept(CharStream *input, ATNConfigSet *reach, size_t t) {
|
|
209
|
+
if (_prevAccept.dfaState != nullptr) {
|
|
210
|
+
accept(input, _prevAccept.dfaState->lexerActionExecutor, _startIndex, _prevAccept.index, _prevAccept.line, _prevAccept.charPos);
|
|
211
|
+
return _prevAccept.dfaState->prediction;
|
|
212
|
+
} else {
|
|
213
|
+
// if no accept and EOF is first char, return EOF
|
|
214
|
+
if (t == Token::EOF && input->index() == _startIndex) {
|
|
215
|
+
return Token::EOF;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
throw LexerNoViableAltException(_recog, input, _startIndex, reach);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *closure_, ATNConfigSet *reach, size_t t) {
|
|
223
|
+
// this is used to skip processing for configs which have a lower priority
|
|
224
|
+
// than a config that already reached an accept state for the same rule
|
|
225
|
+
size_t skipAlt = ATN::INVALID_ALT_NUMBER;
|
|
226
|
+
|
|
227
|
+
for (const auto &c : closure_->configs) {
|
|
228
|
+
bool currentAltReachedAcceptState = c->alt == skipAlt;
|
|
229
|
+
if (currentAltReachedAcceptState && (std::static_pointer_cast<LexerATNConfig>(c))->hasPassedThroughNonGreedyDecision()) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
#if DEBUG_ATN == 1
|
|
234
|
+
std::cout << "testing " << getTokenName((int)t) << " at " << c->toString(true) << std::endl;
|
|
235
|
+
#endif
|
|
236
|
+
|
|
237
|
+
size_t n = c->state->transitions.size();
|
|
238
|
+
for (size_t ti = 0; ti < n; ti++) { // for each transition
|
|
239
|
+
const Transition *trans = c->state->transitions[ti].get();
|
|
240
|
+
ATNState *target = getReachableTarget(trans, (int)t);
|
|
241
|
+
if (target != nullptr) {
|
|
242
|
+
auto lexerActionExecutor = downCast<const LexerATNConfig&>(*c).getLexerActionExecutor();
|
|
243
|
+
if (lexerActionExecutor != nullptr) {
|
|
244
|
+
lexerActionExecutor = lexerActionExecutor->fixOffsetBeforeMatch((int)input->index() - (int)_startIndex);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
bool treatEofAsEpsilon = t == Token::EOF;
|
|
248
|
+
Ref<LexerATNConfig> config = std::make_shared<LexerATNConfig>(downCast<const LexerATNConfig&>(*c),
|
|
249
|
+
target, std::move(lexerActionExecutor));
|
|
250
|
+
|
|
251
|
+
if (closure(input, config, reach, currentAltReachedAcceptState, true, treatEofAsEpsilon)) {
|
|
252
|
+
// any remaining configs for this alt have a lower priority than
|
|
253
|
+
// the one that just reached an accept state.
|
|
254
|
+
skipAlt = c->alt;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
void LexerATNSimulator::accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t /*startIndex*/,
|
|
263
|
+
size_t index, size_t line, size_t charPos) {
|
|
264
|
+
#if DEBUG_ATN == 1
|
|
265
|
+
std::cout << "ACTION ";
|
|
266
|
+
std::cout << toString(lexerActionExecutor) << std::endl;
|
|
267
|
+
#endif
|
|
268
|
+
|
|
269
|
+
// seek to after last char in token
|
|
270
|
+
input->seek(index);
|
|
271
|
+
_line = line;
|
|
272
|
+
_charPositionInLine = (int)charPos;
|
|
273
|
+
|
|
274
|
+
if (lexerActionExecutor != nullptr && _recog != nullptr) {
|
|
275
|
+
lexerActionExecutor->execute(_recog, input, _startIndex);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
atn::ATNState *LexerATNSimulator::getReachableTarget(const Transition *trans, size_t t) {
|
|
280
|
+
if (trans->matches(t, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
|
|
281
|
+
return trans->target;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return nullptr;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
std::unique_ptr<ATNConfigSet> LexerATNSimulator::computeStartState(CharStream *input, ATNState *p) {
|
|
288
|
+
Ref<const PredictionContext> initialContext = PredictionContext::EMPTY; // ml: the purpose of this assignment is unclear
|
|
289
|
+
std::unique_ptr<ATNConfigSet> configs(new OrderedATNConfigSet());
|
|
290
|
+
for (size_t i = 0; i < p->transitions.size(); i++) {
|
|
291
|
+
ATNState *target = p->transitions[i]->target;
|
|
292
|
+
Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(target, (int)(i + 1), initialContext);
|
|
293
|
+
closure(input, c, configs.get(), false, false, false);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return configs;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &config, ATNConfigSet *configs,
|
|
300
|
+
bool currentAltReachedAcceptState, bool speculative, bool treatEofAsEpsilon) {
|
|
301
|
+
#if DEBUG_ATN == 1
|
|
302
|
+
std::cout << "closure(" << config->toString(true) << ")" << std::endl;
|
|
303
|
+
#endif
|
|
304
|
+
|
|
305
|
+
if (config->state != nullptr && config->state->getStateType() == ATNStateType::RULE_STOP) {
|
|
306
|
+
#if DEBUG_ATN == 1
|
|
307
|
+
if (_recog != nullptr) {
|
|
308
|
+
std::cout << "closure at " << _recog->getRuleNames()[config->state->ruleIndex] << " rule stop " << config << std::endl;
|
|
309
|
+
} else {
|
|
310
|
+
std::cout << "closure at rule stop " << config << std::endl;
|
|
311
|
+
}
|
|
312
|
+
#endif
|
|
313
|
+
|
|
314
|
+
if (config->context == nullptr || config->context->hasEmptyPath()) {
|
|
315
|
+
if (config->context == nullptr || config->context->isEmpty()) {
|
|
316
|
+
configs->add(config);
|
|
317
|
+
return true;
|
|
318
|
+
} else {
|
|
319
|
+
configs->add(std::make_shared<LexerATNConfig>(*config, config->state, PredictionContext::EMPTY));
|
|
320
|
+
currentAltReachedAcceptState = true;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (config->context != nullptr && !config->context->isEmpty()) {
|
|
325
|
+
for (size_t i = 0; i < config->context->size(); i++) {
|
|
326
|
+
if (config->context->getReturnState(i) != PredictionContext::EMPTY_RETURN_STATE) {
|
|
327
|
+
Ref<const PredictionContext> newContext = config->context->getParent(i); // "pop" return state
|
|
328
|
+
ATNState *returnState = atn.states[config->context->getReturnState(i)];
|
|
329
|
+
Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(*config, returnState, newContext);
|
|
330
|
+
currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return currentAltReachedAcceptState;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// optimization
|
|
339
|
+
if (!config->state->epsilonOnlyTransitions) {
|
|
340
|
+
if (!currentAltReachedAcceptState || !config->hasPassedThroughNonGreedyDecision()) {
|
|
341
|
+
configs->add(config);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
ATNState *p = config->state;
|
|
346
|
+
for (size_t i = 0; i < p->transitions.size(); i++) {
|
|
347
|
+
const Transition *t = p->transitions[i].get();
|
|
348
|
+
Ref<LexerATNConfig> c = getEpsilonTarget(input, config, t, configs, speculative, treatEofAsEpsilon);
|
|
349
|
+
if (c != nullptr) {
|
|
350
|
+
currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return currentAltReachedAcceptState;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
|
|
358
|
+
ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon) {
|
|
359
|
+
|
|
360
|
+
Ref<LexerATNConfig> c = nullptr;
|
|
361
|
+
switch (t->getTransitionType()) {
|
|
362
|
+
case TransitionType::RULE: {
|
|
363
|
+
const RuleTransition *ruleTransition = static_cast<const RuleTransition*>(t);
|
|
364
|
+
Ref<const PredictionContext> newContext = SingletonPredictionContext::create(config->context, ruleTransition->followState->stateNumber);
|
|
365
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target, newContext);
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
case TransitionType::PRECEDENCE:
|
|
370
|
+
throw UnsupportedOperationException("Precedence predicates are not supported in lexers.");
|
|
371
|
+
|
|
372
|
+
case TransitionType::PREDICATE: {
|
|
373
|
+
/* Track traversing semantic predicates. If we traverse,
|
|
374
|
+
we cannot add a DFA state for this "reach" computation
|
|
375
|
+
because the DFA would not test the predicate again in the
|
|
376
|
+
future. Rather than creating collections of semantic predicates
|
|
377
|
+
like v3 and testing them on prediction, v4 will test them on the
|
|
378
|
+
fly all the time using the ATN not the DFA. This is slower but
|
|
379
|
+
semantically it's not used that often. One of the key elements to
|
|
380
|
+
this predicate mechanism is not adding DFA states that see
|
|
381
|
+
predicates immediately afterwards in the ATN. For example,
|
|
382
|
+
|
|
383
|
+
a : ID {p1}? | ID {p2}? ;
|
|
384
|
+
|
|
385
|
+
should create the start state for rule 'a' (to save start state
|
|
386
|
+
competition), but should not create target of ID state. The
|
|
387
|
+
collection of ATN states the following ID references includes
|
|
388
|
+
states reached by traversing predicates. Since this is when we
|
|
389
|
+
test them, we cannot cash the DFA state target of ID.
|
|
390
|
+
*/
|
|
391
|
+
const PredicateTransition *pt = static_cast<const PredicateTransition*>(t);
|
|
392
|
+
|
|
393
|
+
#if DEBUG_ATN == 1
|
|
394
|
+
std::cout << "EVAL rule " << pt->getRuleIndex() << ":" << pt->getPredIndex() << std::endl;
|
|
395
|
+
#endif
|
|
396
|
+
|
|
397
|
+
configs->hasSemanticContext = true;
|
|
398
|
+
if (evaluatePredicate(input, pt->getRuleIndex(), pt->getPredIndex(), speculative)) {
|
|
399
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
|
400
|
+
}
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
case TransitionType::ACTION:
|
|
405
|
+
if (config->context == nullptr|| config->context->hasEmptyPath()) {
|
|
406
|
+
// execute actions anywhere in the start rule for a token.
|
|
407
|
+
//
|
|
408
|
+
// TODO: if the entry rule is invoked recursively, some
|
|
409
|
+
// actions may be executed during the recursive call. The
|
|
410
|
+
// problem can appear when hasEmptyPath() is true but
|
|
411
|
+
// isEmpty() is false. In this case, the config needs to be
|
|
412
|
+
// split into two contexts - one with just the empty path
|
|
413
|
+
// and another with everything but the empty path.
|
|
414
|
+
// Unfortunately, the current algorithm does not allow
|
|
415
|
+
// getEpsilonTarget to return two configurations, so
|
|
416
|
+
// additional modifications are needed before we can support
|
|
417
|
+
// the split operation.
|
|
418
|
+
auto lexerActionExecutor = LexerActionExecutor::append(config->getLexerActionExecutor(),
|
|
419
|
+
atn.lexerActions[static_cast<const ActionTransition *>(t)->actionIndex]);
|
|
420
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target, std::move(lexerActionExecutor));
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// ignore actions in referenced rules
|
|
425
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
case TransitionType::EPSILON:
|
|
430
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
|
431
|
+
break;
|
|
432
|
+
|
|
433
|
+
case TransitionType::ATOM:
|
|
434
|
+
case TransitionType::RANGE:
|
|
435
|
+
case TransitionType::SET:
|
|
436
|
+
if (treatEofAsEpsilon) {
|
|
437
|
+
if (t->matches(Token::EOF, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
|
|
438
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
break;
|
|
444
|
+
|
|
445
|
+
default: // To silence the compiler. Other transition types are not used here.
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
return c;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
bool LexerATNSimulator::evaluatePredicate(CharStream *input, size_t ruleIndex, size_t predIndex, bool speculative) {
|
|
453
|
+
// assume true if no recognizer was provided
|
|
454
|
+
if (_recog == nullptr) {
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (!speculative) {
|
|
459
|
+
return _recog->sempred(nullptr, ruleIndex, predIndex);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
size_t savedCharPositionInLine = _charPositionInLine;
|
|
463
|
+
size_t savedLine = _line;
|
|
464
|
+
size_t index = input->index();
|
|
465
|
+
ssize_t marker = input->mark();
|
|
466
|
+
|
|
467
|
+
auto onExit = finally([this, input, savedCharPositionInLine, savedLine, index, marker] {
|
|
468
|
+
_charPositionInLine = savedCharPositionInLine;
|
|
469
|
+
_line = savedLine;
|
|
470
|
+
input->seek(index);
|
|
471
|
+
input->release(marker);
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
consume(input);
|
|
475
|
+
return _recog->sempred(nullptr, ruleIndex, predIndex);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
void LexerATNSimulator::captureSimState(CharStream *input, dfa::DFAState *dfaState) {
|
|
479
|
+
_prevAccept.index = input->index();
|
|
480
|
+
_prevAccept.line = _line;
|
|
481
|
+
_prevAccept.charPos = _charPositionInLine;
|
|
482
|
+
_prevAccept.dfaState = dfaState;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
dfa::DFAState *LexerATNSimulator::addDFAEdge(dfa::DFAState *from, size_t t, ATNConfigSet *q) {
|
|
486
|
+
/* leading to this call, ATNConfigSet.hasSemanticContext is used as a
|
|
487
|
+
* marker indicating dynamic predicate evaluation makes this edge
|
|
488
|
+
* dependent on the specific input sequence, so the static edge in the
|
|
489
|
+
* DFA should be omitted. The target DFAState is still created since
|
|
490
|
+
* execATN has the ability to resynchronize with the DFA state cache
|
|
491
|
+
* following the predicate evaluation step.
|
|
492
|
+
*
|
|
493
|
+
* TJP notes: next time through the DFA, we see a pred again and eval.
|
|
494
|
+
* If that gets us to a previously created (but dangling) DFA
|
|
495
|
+
* state, we can continue in pure DFA mode from there.
|
|
496
|
+
*/
|
|
497
|
+
bool suppressEdge = q->hasSemanticContext;
|
|
498
|
+
q->hasSemanticContext = false;
|
|
499
|
+
|
|
500
|
+
dfa::DFAState *to = addDFAState(q);
|
|
501
|
+
|
|
502
|
+
if (suppressEdge) {
|
|
503
|
+
return to;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
addDFAEdge(from, t, to);
|
|
507
|
+
return to;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
void LexerATNSimulator::addDFAEdge(dfa::DFAState *p, size_t t, dfa::DFAState *q) {
|
|
511
|
+
if (/*t < MIN_DFA_EDGE ||*/ t > MAX_DFA_EDGE) { // MIN_DFA_EDGE is 0
|
|
512
|
+
// Only track edges within the DFA bounds
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
std::unique_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
|
|
517
|
+
p->edges[t - MIN_DFA_EDGE] = q; // connect
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
|
|
521
|
+
return addDFAState(configs, true);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs, bool suppressEdge) {
|
|
525
|
+
/* the lexer evaluates predicates on-the-fly; by this point configs
|
|
526
|
+
* should not contain any configurations with unevaluated predicates.
|
|
527
|
+
*/
|
|
528
|
+
assert(!configs->hasSemanticContext);
|
|
529
|
+
|
|
530
|
+
dfa::DFAState *proposed = new dfa::DFAState(std::unique_ptr<ATNConfigSet>(configs)); /* mem-check: managed by the DFA or deleted below */
|
|
531
|
+
Ref<ATNConfig> firstConfigWithRuleStopState = nullptr;
|
|
532
|
+
for (const auto &c : configs->configs) {
|
|
533
|
+
if (RuleStopState::is(c->state)) {
|
|
534
|
+
firstConfigWithRuleStopState = c;
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
if (firstConfigWithRuleStopState != nullptr) {
|
|
540
|
+
proposed->isAcceptState = true;
|
|
541
|
+
proposed->lexerActionExecutor = downCast<const LexerATNConfig&>(*firstConfigWithRuleStopState).getLexerActionExecutor();
|
|
542
|
+
proposed->prediction = atn.ruleToTokenType[firstConfigWithRuleStopState->state->ruleIndex];
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
dfa::DFA &dfa = _decisionToDFA[_mode];
|
|
546
|
+
|
|
547
|
+
{
|
|
548
|
+
std::unique_lock<std::shared_mutex> stateLock(atn._stateMutex);
|
|
549
|
+
auto [existing, inserted] = dfa.states.insert(proposed);
|
|
550
|
+
if (!inserted) {
|
|
551
|
+
delete proposed;
|
|
552
|
+
proposed = *existing;
|
|
553
|
+
} else {
|
|
554
|
+
// Previously we did a lookup, then set fields, then inserted. It was `dfa.states.size()`,
|
|
555
|
+
// since we already inserted we need to subtract one.
|
|
556
|
+
proposed->stateNumber = static_cast<int>(dfa.states.size() - 1);
|
|
557
|
+
proposed->configs->setReadonly(true);
|
|
558
|
+
}
|
|
559
|
+
if (!suppressEdge) {
|
|
560
|
+
dfa.s0 = proposed;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
return proposed;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
dfa::DFA& LexerATNSimulator::getDFA(size_t mode) {
|
|
568
|
+
return _decisionToDFA[mode];
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
std::string LexerATNSimulator::getText(CharStream *input) {
|
|
572
|
+
// index is first lookahead char, don't include.
|
|
573
|
+
return input->getText(misc::Interval(_startIndex, input->index() - 1));
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
size_t LexerATNSimulator::getLine() const {
|
|
577
|
+
return _line;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
void LexerATNSimulator::setLine(size_t line) {
|
|
581
|
+
_line = line;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
size_t LexerATNSimulator::getCharPositionInLine() {
|
|
585
|
+
return _charPositionInLine;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
void LexerATNSimulator::setCharPositionInLine(size_t charPositionInLine) {
|
|
589
|
+
_charPositionInLine = charPositionInLine;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
void LexerATNSimulator::consume(CharStream *input) {
|
|
593
|
+
size_t curChar = input->LA(1);
|
|
594
|
+
if (curChar == '\n') {
|
|
595
|
+
_line++;
|
|
596
|
+
_charPositionInLine = 0;
|
|
597
|
+
} else {
|
|
598
|
+
_charPositionInLine++;
|
|
599
|
+
}
|
|
600
|
+
input->consume();
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
std::string LexerATNSimulator::getTokenName(size_t t) {
|
|
604
|
+
if (t == Token::EOF) {
|
|
605
|
+
return "EOF";
|
|
606
|
+
}
|
|
607
|
+
return std::string("'") + static_cast<char>(t) + std::string("'");
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
void LexerATNSimulator::InitializeInstanceFields() {
|
|
611
|
+
_startIndex = 0;
|
|
612
|
+
_line = 1;
|
|
613
|
+
_charPositionInLine = 0;
|
|
614
|
+
_mode = antlr4::Lexer::DEFAULT_MODE;
|
|
615
|
+
}
|