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,199 @@
|
|
|
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 <atomic>
|
|
9
|
+
|
|
10
|
+
#include "atn/ATNSimulator.h"
|
|
11
|
+
#include "atn/LexerATNConfig.h"
|
|
12
|
+
#include "atn/ATNConfigSet.h"
|
|
13
|
+
|
|
14
|
+
namespace antlr4 {
|
|
15
|
+
namespace atn {
|
|
16
|
+
|
|
17
|
+
/// "dup" of ParserInterpreter
|
|
18
|
+
class ANTLR4CPP_PUBLIC LexerATNSimulator : public ATNSimulator {
|
|
19
|
+
protected:
|
|
20
|
+
struct ANTLR4CPP_PUBLIC SimState final {
|
|
21
|
+
size_t index = INVALID_INDEX;
|
|
22
|
+
size_t line = 0;
|
|
23
|
+
size_t charPos = INVALID_INDEX;
|
|
24
|
+
dfa::DFAState *dfaState = nullptr;
|
|
25
|
+
|
|
26
|
+
void reset();
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
public:
|
|
30
|
+
static constexpr size_t MIN_DFA_EDGE = 0;
|
|
31
|
+
static constexpr size_t MAX_DFA_EDGE = 127; // forces unicode to stay in ATN
|
|
32
|
+
|
|
33
|
+
protected:
|
|
34
|
+
/// <summary>
|
|
35
|
+
/// When we hit an accept state in either the DFA or the ATN, we
|
|
36
|
+
/// have to notify the character stream to start buffering characters
|
|
37
|
+
/// via <seealso cref="IntStream#mark"/> and record the current state. The current sim state
|
|
38
|
+
/// includes the current index into the input, the current line,
|
|
39
|
+
/// and current character position in that line. Note that the Lexer is
|
|
40
|
+
/// tracking the starting line and characterization of the token. These
|
|
41
|
+
/// variables track the "state" of the simulator when it hits an accept state.
|
|
42
|
+
/// <p/>
|
|
43
|
+
/// We track these variables separately for the DFA and ATN simulation
|
|
44
|
+
/// because the DFA simulation often has to fail over to the ATN
|
|
45
|
+
/// simulation. If the ATN simulation fails, we need the DFA to fall
|
|
46
|
+
/// back to its previously accepted state, if any. If the ATN succeeds,
|
|
47
|
+
/// then the ATN does the accept and the DFA simulator that invoked it
|
|
48
|
+
/// can simply return the predicted token type.
|
|
49
|
+
/// </summary>
|
|
50
|
+
Lexer *const _recog;
|
|
51
|
+
|
|
52
|
+
/// The current token's starting index into the character stream.
|
|
53
|
+
/// Shared across DFA to ATN simulation in case the ATN fails and the
|
|
54
|
+
/// DFA did not have a previous accept state. In this case, we use the
|
|
55
|
+
/// ATN-generated exception object.
|
|
56
|
+
size_t _startIndex;
|
|
57
|
+
|
|
58
|
+
/// line number 1..n within the input.
|
|
59
|
+
size_t _line;
|
|
60
|
+
|
|
61
|
+
/// The index of the character relative to the beginning of the line 0..n-1.
|
|
62
|
+
size_t _charPositionInLine;
|
|
63
|
+
|
|
64
|
+
public:
|
|
65
|
+
std::vector<dfa::DFA> &_decisionToDFA;
|
|
66
|
+
|
|
67
|
+
protected:
|
|
68
|
+
size_t _mode;
|
|
69
|
+
|
|
70
|
+
/// Used during DFA/ATN exec to record the most recent accept configuration info.
|
|
71
|
+
SimState _prevAccept;
|
|
72
|
+
|
|
73
|
+
public:
|
|
74
|
+
LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
|
|
75
|
+
LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
|
|
76
|
+
virtual ~LexerATNSimulator() = default;
|
|
77
|
+
|
|
78
|
+
virtual void copyState(LexerATNSimulator *simulator);
|
|
79
|
+
virtual size_t match(CharStream *input, size_t mode);
|
|
80
|
+
virtual void reset() override;
|
|
81
|
+
|
|
82
|
+
virtual void clearDFA() override;
|
|
83
|
+
|
|
84
|
+
protected:
|
|
85
|
+
virtual size_t matchATN(CharStream *input);
|
|
86
|
+
virtual size_t execATN(CharStream *input, dfa::DFAState *ds0);
|
|
87
|
+
|
|
88
|
+
/// <summary>
|
|
89
|
+
/// Get an existing target state for an edge in the DFA. If the target state
|
|
90
|
+
/// for the edge has not yet been computed or is otherwise not available,
|
|
91
|
+
/// this method returns {@code null}.
|
|
92
|
+
/// </summary>
|
|
93
|
+
/// <param name="s"> The current DFA state </param>
|
|
94
|
+
/// <param name="t"> The next input symbol </param>
|
|
95
|
+
/// <returns> The existing target DFA state for the given input symbol
|
|
96
|
+
/// {@code t}, or {@code null} if the target state for this edge is not
|
|
97
|
+
/// already cached </returns>
|
|
98
|
+
virtual dfa::DFAState *getExistingTargetState(dfa::DFAState *s, size_t t);
|
|
99
|
+
|
|
100
|
+
/// <summary>
|
|
101
|
+
/// Compute a target state for an edge in the DFA, and attempt to add the
|
|
102
|
+
/// computed state and corresponding edge to the DFA.
|
|
103
|
+
/// </summary>
|
|
104
|
+
/// <param name="input"> The input stream </param>
|
|
105
|
+
/// <param name="s"> The current DFA state </param>
|
|
106
|
+
/// <param name="t"> The next input symbol
|
|
107
|
+
/// </param>
|
|
108
|
+
/// <returns> The computed target DFA state for the given input symbol
|
|
109
|
+
/// {@code t}. If {@code t} does not lead to a valid DFA state, this method
|
|
110
|
+
/// returns <seealso cref="#ERROR"/>. </returns>
|
|
111
|
+
virtual dfa::DFAState *computeTargetState(CharStream *input, dfa::DFAState *s, size_t t);
|
|
112
|
+
|
|
113
|
+
virtual size_t failOrAccept(CharStream *input, ATNConfigSet *reach, size_t t);
|
|
114
|
+
|
|
115
|
+
/// <summary>
|
|
116
|
+
/// Given a starting configuration set, figure out all ATN configurations
|
|
117
|
+
/// we can reach upon input {@code t}. Parameter {@code reach} is a return
|
|
118
|
+
/// parameter.
|
|
119
|
+
/// </summary>
|
|
120
|
+
void getReachableConfigSet(CharStream *input, ATNConfigSet *closure_, // closure_ as we have a closure() already
|
|
121
|
+
ATNConfigSet *reach, size_t t);
|
|
122
|
+
|
|
123
|
+
virtual void accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t startIndex, size_t index,
|
|
124
|
+
size_t line, size_t charPos);
|
|
125
|
+
|
|
126
|
+
virtual ATNState *getReachableTarget(const Transition *trans, size_t t);
|
|
127
|
+
|
|
128
|
+
virtual std::unique_ptr<ATNConfigSet> computeStartState(CharStream *input, ATNState *p);
|
|
129
|
+
|
|
130
|
+
/// <summary>
|
|
131
|
+
/// Since the alternatives within any lexer decision are ordered by
|
|
132
|
+
/// preference, this method stops pursuing the closure as soon as an accept
|
|
133
|
+
/// state is reached. After the first accept state is reached by depth-first
|
|
134
|
+
/// search from {@code config}, all other (potentially reachable) states for
|
|
135
|
+
/// this rule would have a lower priority.
|
|
136
|
+
/// </summary>
|
|
137
|
+
/// <returns> {@code true} if an accept state is reached, otherwise
|
|
138
|
+
/// {@code false}. </returns>
|
|
139
|
+
virtual bool closure(CharStream *input, const Ref<LexerATNConfig> &config, ATNConfigSet *configs,
|
|
140
|
+
bool currentAltReachedAcceptState, bool speculative, bool treatEofAsEpsilon);
|
|
141
|
+
|
|
142
|
+
// side-effect: can alter configs.hasSemanticContext
|
|
143
|
+
virtual Ref<LexerATNConfig> getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
|
|
144
|
+
ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon);
|
|
145
|
+
|
|
146
|
+
/// <summary>
|
|
147
|
+
/// Evaluate a predicate specified in the lexer.
|
|
148
|
+
/// <p/>
|
|
149
|
+
/// If {@code speculative} is {@code true}, this method was called before
|
|
150
|
+
/// <seealso cref="#consume"/> for the matched character. This method should call
|
|
151
|
+
/// <seealso cref="#consume"/> before evaluating the predicate to ensure position
|
|
152
|
+
/// sensitive values, including <seealso cref="Lexer#getText"/>, <seealso cref="Lexer#getLine"/>,
|
|
153
|
+
/// and <seealso cref="Lexer#getCharPositionInLine"/>, properly reflect the current
|
|
154
|
+
/// lexer state. This method should restore {@code input} and the simulator
|
|
155
|
+
/// to the original state before returning (i.e. undo the actions made by the
|
|
156
|
+
/// call to <seealso cref="#consume"/>.
|
|
157
|
+
/// </summary>
|
|
158
|
+
/// <param name="input"> The input stream. </param>
|
|
159
|
+
/// <param name="ruleIndex"> The rule containing the predicate. </param>
|
|
160
|
+
/// <param name="predIndex"> The index of the predicate within the rule. </param>
|
|
161
|
+
/// <param name="speculative"> {@code true} if the current index in {@code input} is
|
|
162
|
+
/// one character before the predicate's location.
|
|
163
|
+
/// </param>
|
|
164
|
+
/// <returns> {@code true} if the specified predicate evaluates to
|
|
165
|
+
/// {@code true}. </returns>
|
|
166
|
+
virtual bool evaluatePredicate(CharStream *input, size_t ruleIndex, size_t predIndex, bool speculative);
|
|
167
|
+
|
|
168
|
+
virtual void captureSimState(CharStream *input, dfa::DFAState *dfaState);
|
|
169
|
+
virtual dfa::DFAState* addDFAEdge(dfa::DFAState *from, size_t t, ATNConfigSet *q);
|
|
170
|
+
virtual void addDFAEdge(dfa::DFAState *p, size_t t, dfa::DFAState *q);
|
|
171
|
+
|
|
172
|
+
/// <summary>
|
|
173
|
+
/// Add a new DFA state if there isn't one with this set of
|
|
174
|
+
/// configurations already. This method also detects the first
|
|
175
|
+
/// configuration containing an ATN rule stop state. Later, when
|
|
176
|
+
/// traversing the DFA, we will know which rule to accept.
|
|
177
|
+
/// </summary>
|
|
178
|
+
virtual dfa::DFAState *addDFAState(ATNConfigSet *configs);
|
|
179
|
+
|
|
180
|
+
virtual dfa::DFAState *addDFAState(ATNConfigSet *configs, bool suppressEdge);
|
|
181
|
+
|
|
182
|
+
public:
|
|
183
|
+
dfa::DFA& getDFA(size_t mode);
|
|
184
|
+
|
|
185
|
+
/// Get the text matched so far for the current token.
|
|
186
|
+
virtual std::string getText(CharStream *input);
|
|
187
|
+
virtual size_t getLine() const;
|
|
188
|
+
virtual void setLine(size_t line);
|
|
189
|
+
virtual size_t getCharPositionInLine();
|
|
190
|
+
virtual void setCharPositionInLine(size_t charPositionInLine);
|
|
191
|
+
virtual void consume(CharStream *input);
|
|
192
|
+
virtual std::string getTokenName(size_t t);
|
|
193
|
+
|
|
194
|
+
private:
|
|
195
|
+
void InitializeInstanceFields();
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
} // namespace atn
|
|
199
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#include "LexerAction.h"
|
|
2
|
+
|
|
3
|
+
using namespace antlr4::atn;
|
|
4
|
+
|
|
5
|
+
size_t LexerAction::hashCode() const {
|
|
6
|
+
auto hash = cachedHashCode();
|
|
7
|
+
if (hash == 0) {
|
|
8
|
+
hash = hashCodeImpl();
|
|
9
|
+
if (hash == 0) {
|
|
10
|
+
hash = std::numeric_limits<size_t>::max();
|
|
11
|
+
}
|
|
12
|
+
_hashCode.store(hash, std::memory_order_relaxed);
|
|
13
|
+
}
|
|
14
|
+
return hash;
|
|
15
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
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 "atn/LexerActionType.h"
|
|
9
|
+
#include "antlr4-common.h"
|
|
10
|
+
|
|
11
|
+
namespace antlr4 {
|
|
12
|
+
namespace atn {
|
|
13
|
+
|
|
14
|
+
/// <summary>
|
|
15
|
+
/// Represents a single action which can be executed following the successful
|
|
16
|
+
/// match of a lexer rule. Lexer actions are used for both embedded action syntax
|
|
17
|
+
/// and ANTLR 4's new lexer command syntax.
|
|
18
|
+
///
|
|
19
|
+
/// @author Sam Harwell
|
|
20
|
+
/// @since 4.2
|
|
21
|
+
/// </summary>
|
|
22
|
+
class ANTLR4CPP_PUBLIC LexerAction {
|
|
23
|
+
public:
|
|
24
|
+
virtual ~LexerAction() = default;
|
|
25
|
+
|
|
26
|
+
/// <summary>
|
|
27
|
+
/// Gets the serialization type of the lexer action.
|
|
28
|
+
/// </summary>
|
|
29
|
+
/// <returns> The serialization type of the lexer action. </returns>
|
|
30
|
+
///
|
|
31
|
+
/// IMPORTANT: Unlike Java, this returns LexerActionType::INDEXED_CUSTOM for instances of
|
|
32
|
+
/// LexerIndexedCustomAction. If you need the wrapped action type, use
|
|
33
|
+
/// LexerIndexedCustomAction::getAction()->getActionType().
|
|
34
|
+
LexerActionType getActionType() const { return _actionType; }
|
|
35
|
+
|
|
36
|
+
/// <summary>
|
|
37
|
+
/// Gets whether the lexer action is position-dependent. Position-dependent
|
|
38
|
+
/// actions may have different semantics depending on the <seealso cref="CharStream"/>
|
|
39
|
+
/// index at the time the action is executed.
|
|
40
|
+
///
|
|
41
|
+
/// <para>Many lexer commands, including {@code type}, {@code skip}, and
|
|
42
|
+
/// {@code more}, do not check the input index during their execution.
|
|
43
|
+
/// Actions like this are position-independent, and may be stored more
|
|
44
|
+
/// efficiently as part of the <seealso cref="LexerATNConfig#lexerActionExecutor"/>.</para>
|
|
45
|
+
/// </summary>
|
|
46
|
+
/// <returns> {@code true} if the lexer action semantics can be affected by the
|
|
47
|
+
/// position of the input <seealso cref="CharStream"/> at the time it is executed;
|
|
48
|
+
/// otherwise, {@code false}. </returns>
|
|
49
|
+
bool isPositionDependent() const { return _positionDependent; }
|
|
50
|
+
|
|
51
|
+
/// <summary>
|
|
52
|
+
/// Execute the lexer action in the context of the specified <seealso cref="Lexer"/>.
|
|
53
|
+
///
|
|
54
|
+
/// <para>For position-dependent actions, the input stream must already be
|
|
55
|
+
/// positioned correctly prior to calling this method.</para>
|
|
56
|
+
/// </summary>
|
|
57
|
+
/// <param name="lexer"> The lexer instance. </param>
|
|
58
|
+
virtual void execute(Lexer *lexer) const = 0;
|
|
59
|
+
|
|
60
|
+
size_t hashCode() const;
|
|
61
|
+
|
|
62
|
+
virtual bool equals(const LexerAction &other) const = 0;
|
|
63
|
+
|
|
64
|
+
virtual std::string toString() const = 0;
|
|
65
|
+
|
|
66
|
+
protected:
|
|
67
|
+
LexerAction(LexerActionType actionType, bool positionDependent)
|
|
68
|
+
: _actionType(actionType), _hashCode(0), _positionDependent(positionDependent) {}
|
|
69
|
+
|
|
70
|
+
virtual size_t hashCodeImpl() const = 0;
|
|
71
|
+
|
|
72
|
+
size_t cachedHashCode() const { return _hashCode.load(std::memory_order_relaxed); }
|
|
73
|
+
|
|
74
|
+
private:
|
|
75
|
+
const LexerActionType _actionType;
|
|
76
|
+
mutable std::atomic<size_t> _hashCode;
|
|
77
|
+
const bool _positionDependent;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
inline bool operator==(const LexerAction &lhs, const LexerAction &rhs) {
|
|
81
|
+
return lhs.equals(rhs);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
inline bool operator!=(const LexerAction &lhs, const LexerAction &rhs) {
|
|
85
|
+
return !operator==(lhs, rhs);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
} // namespace atn
|
|
89
|
+
} // namespace antlr4
|
|
90
|
+
|
|
91
|
+
namespace std {
|
|
92
|
+
|
|
93
|
+
template <>
|
|
94
|
+
struct hash<::antlr4::atn::LexerAction> {
|
|
95
|
+
size_t operator()(const ::antlr4::atn::LexerAction &lexerAction) const {
|
|
96
|
+
return lexerAction.hashCode();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
} // namespace std
|
|
@@ -0,0 +1,111 @@
|
|
|
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 "misc/MurmurHash.h"
|
|
7
|
+
#include "atn/LexerIndexedCustomAction.h"
|
|
8
|
+
#include "support/CPPUtils.h"
|
|
9
|
+
#include "support/Arrays.h"
|
|
10
|
+
#include "support/Casts.h"
|
|
11
|
+
|
|
12
|
+
#include "atn/LexerActionExecutor.h"
|
|
13
|
+
|
|
14
|
+
using namespace antlr4;
|
|
15
|
+
using namespace antlr4::atn;
|
|
16
|
+
using namespace antlr4::misc;
|
|
17
|
+
using namespace antlrcpp;
|
|
18
|
+
|
|
19
|
+
namespace {
|
|
20
|
+
|
|
21
|
+
bool cachedHashCodeEqual(size_t lhs, size_t rhs) {
|
|
22
|
+
return lhs == rhs || lhs == 0 || rhs == 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
bool lexerActionEqual(const Ref<const LexerAction> &lhs, const Ref<const LexerAction> &rhs) {
|
|
26
|
+
return *lhs == *rhs;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
LexerActionExecutor::LexerActionExecutor(std::vector<Ref<const LexerAction>> lexerActions)
|
|
32
|
+
: _lexerActions(std::move(lexerActions)), _hashCode(0) {}
|
|
33
|
+
|
|
34
|
+
Ref<const LexerActionExecutor> LexerActionExecutor::append(const Ref<const LexerActionExecutor> &lexerActionExecutor,
|
|
35
|
+
Ref<const LexerAction> lexerAction) {
|
|
36
|
+
if (lexerActionExecutor == nullptr) {
|
|
37
|
+
return std::make_shared<LexerActionExecutor>(std::vector<Ref<const LexerAction>>{ std::move(lexerAction) });
|
|
38
|
+
}
|
|
39
|
+
std::vector<Ref<const LexerAction>> lexerActions;
|
|
40
|
+
lexerActions.reserve(lexerActionExecutor->_lexerActions.size() + 1);
|
|
41
|
+
lexerActions.insert(lexerActions.begin(), lexerActionExecutor->_lexerActions.begin(), lexerActionExecutor->_lexerActions.end());
|
|
42
|
+
lexerActions.push_back(std::move(lexerAction));
|
|
43
|
+
return std::make_shared<LexerActionExecutor>(std::move(lexerActions));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Ref<const LexerActionExecutor> LexerActionExecutor::fixOffsetBeforeMatch(int offset) const {
|
|
47
|
+
std::vector<Ref<const LexerAction>> updatedLexerActions;
|
|
48
|
+
for (size_t i = 0; i < _lexerActions.size(); i++) {
|
|
49
|
+
if (_lexerActions[i]->isPositionDependent() && !LexerIndexedCustomAction::is(*_lexerActions[i])) {
|
|
50
|
+
if (updatedLexerActions.empty()) {
|
|
51
|
+
updatedLexerActions = _lexerActions; // Make a copy.
|
|
52
|
+
}
|
|
53
|
+
updatedLexerActions[i] = std::make_shared<LexerIndexedCustomAction>(offset, _lexerActions[i]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (updatedLexerActions.empty()) {
|
|
57
|
+
return shared_from_this();
|
|
58
|
+
}
|
|
59
|
+
return std::make_shared<LexerActionExecutor>(std::move(updatedLexerActions));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const std::vector<Ref<const LexerAction>>& LexerActionExecutor::getLexerActions() const {
|
|
63
|
+
return _lexerActions;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void LexerActionExecutor::execute(Lexer *lexer, CharStream *input, size_t startIndex) const {
|
|
67
|
+
bool requiresSeek = false;
|
|
68
|
+
size_t stopIndex = input->index();
|
|
69
|
+
|
|
70
|
+
auto onExit = finally([requiresSeek, input, stopIndex]() {
|
|
71
|
+
if (requiresSeek) {
|
|
72
|
+
input->seek(stopIndex);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
for (const auto &lexerAction : _lexerActions) {
|
|
76
|
+
if (LexerIndexedCustomAction::is(*lexerAction)) {
|
|
77
|
+
int offset = downCast<const LexerIndexedCustomAction&>(*lexerAction).getOffset();
|
|
78
|
+
input->seek(startIndex + offset);
|
|
79
|
+
requiresSeek = (startIndex + offset) != stopIndex;
|
|
80
|
+
} else if (lexerAction->isPositionDependent()) {
|
|
81
|
+
input->seek(stopIndex);
|
|
82
|
+
requiresSeek = false;
|
|
83
|
+
}
|
|
84
|
+
lexerAction->execute(lexer);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
size_t LexerActionExecutor::hashCode() const {
|
|
89
|
+
auto hash = _hashCode.load(std::memory_order_relaxed);
|
|
90
|
+
if (hash == 0) {
|
|
91
|
+
hash = MurmurHash::initialize();
|
|
92
|
+
for (const auto &lexerAction : _lexerActions) {
|
|
93
|
+
hash = MurmurHash::update(hash, lexerAction);
|
|
94
|
+
}
|
|
95
|
+
hash = MurmurHash::finish(hash, _lexerActions.size());
|
|
96
|
+
if (hash == 0) {
|
|
97
|
+
hash = std::numeric_limits<size_t>::max();
|
|
98
|
+
}
|
|
99
|
+
_hashCode.store(hash, std::memory_order_relaxed);
|
|
100
|
+
}
|
|
101
|
+
return hash;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
bool LexerActionExecutor::equals(const LexerActionExecutor &other) const {
|
|
105
|
+
if (this == std::addressof(other)) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return cachedHashCodeEqual(_hashCode.load(std::memory_order_relaxed), other._hashCode.load(std::memory_order_relaxed)) &&
|
|
109
|
+
_lexerActions.size() == other._lexerActions.size() &&
|
|
110
|
+
std::equal(_lexerActions.begin(), _lexerActions.end(), other._lexerActions.begin(), lexerActionEqual);
|
|
111
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
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 "CharStream.h"
|
|
9
|
+
#include "atn/LexerAction.h"
|
|
10
|
+
|
|
11
|
+
namespace antlr4 {
|
|
12
|
+
namespace atn {
|
|
13
|
+
|
|
14
|
+
/// Represents an executor for a sequence of lexer actions which traversed during
|
|
15
|
+
/// the matching operation of a lexer rule (token).
|
|
16
|
+
///
|
|
17
|
+
/// <para>The executor tracks position information for position-dependent lexer actions
|
|
18
|
+
/// efficiently, ensuring that actions appearing only at the end of the rule do
|
|
19
|
+
/// not cause bloating of the <seealso cref="DFA"/> created for the lexer.</para>
|
|
20
|
+
class ANTLR4CPP_PUBLIC LexerActionExecutor final : public std::enable_shared_from_this<LexerActionExecutor> {
|
|
21
|
+
public:
|
|
22
|
+
/// <summary>
|
|
23
|
+
/// Constructs an executor for a sequence of <seealso cref="LexerAction"/> actions. </summary>
|
|
24
|
+
/// <param name="lexerActions"> The lexer actions to execute. </param>
|
|
25
|
+
explicit LexerActionExecutor(std::vector<Ref<const LexerAction>> lexerActions);
|
|
26
|
+
|
|
27
|
+
/// <summary>
|
|
28
|
+
/// Creates a <seealso cref="LexerActionExecutor"/> which executes the actions for
|
|
29
|
+
/// the input {@code lexerActionExecutor} followed by a specified
|
|
30
|
+
/// {@code lexerAction}.
|
|
31
|
+
/// </summary>
|
|
32
|
+
/// <param name="lexerActionExecutor"> The executor for actions already traversed by
|
|
33
|
+
/// the lexer while matching a token within a particular
|
|
34
|
+
/// <seealso cref="LexerATNConfig"/>. If this is {@code null}, the method behaves as
|
|
35
|
+
/// though it were an empty executor. </param>
|
|
36
|
+
/// <param name="lexerAction"> The lexer action to execute after the actions
|
|
37
|
+
/// specified in {@code lexerActionExecutor}.
|
|
38
|
+
/// </param>
|
|
39
|
+
/// <returns> A <seealso cref="LexerActionExecutor"/> for executing the combine actions
|
|
40
|
+
/// of {@code lexerActionExecutor} and {@code lexerAction}. </returns>
|
|
41
|
+
static Ref<const LexerActionExecutor> append(const Ref<const LexerActionExecutor> &lexerActionExecutor,
|
|
42
|
+
Ref<const LexerAction> lexerAction);
|
|
43
|
+
|
|
44
|
+
/// <summary>
|
|
45
|
+
/// Creates a <seealso cref="LexerActionExecutor"/> which encodes the current offset
|
|
46
|
+
/// for position-dependent lexer actions.
|
|
47
|
+
///
|
|
48
|
+
/// <para>Normally, when the executor encounters lexer actions where
|
|
49
|
+
/// <seealso cref="LexerAction#isPositionDependent"/> returns {@code true}, it calls
|
|
50
|
+
/// <seealso cref="IntStream#seek"/> on the input <seealso cref="CharStream"/> to set the input
|
|
51
|
+
/// position to the <em>end</em> of the current token. This behavior provides
|
|
52
|
+
/// for efficient DFA representation of lexer actions which appear at the end
|
|
53
|
+
/// of a lexer rule, even when the lexer rule matches a variable number of
|
|
54
|
+
/// characters.</para>
|
|
55
|
+
///
|
|
56
|
+
/// <para>Prior to traversing a match transition in the ATN, the current offset
|
|
57
|
+
/// from the token start index is assigned to all position-dependent lexer
|
|
58
|
+
/// actions which have not already been assigned a fixed offset. By storing
|
|
59
|
+
/// the offsets relative to the token start index, the DFA representation of
|
|
60
|
+
/// lexer actions which appear in the middle of tokens remains efficient due
|
|
61
|
+
/// to sharing among tokens of the same length, regardless of their absolute
|
|
62
|
+
/// position in the input stream.</para>
|
|
63
|
+
///
|
|
64
|
+
/// <para>If the current executor already has offsets assigned to all
|
|
65
|
+
/// position-dependent lexer actions, the method returns {@code this}.</para>
|
|
66
|
+
/// </summary>
|
|
67
|
+
/// <param name="offset"> The current offset to assign to all position-dependent
|
|
68
|
+
/// lexer actions which do not already have offsets assigned.
|
|
69
|
+
/// </param>
|
|
70
|
+
/// <returns> A <seealso cref="LexerActionExecutor"/> which stores input stream offsets
|
|
71
|
+
/// for all position-dependent lexer actions. </returns>
|
|
72
|
+
Ref<const LexerActionExecutor> fixOffsetBeforeMatch(int offset) const;
|
|
73
|
+
|
|
74
|
+
/// <summary>
|
|
75
|
+
/// Gets the lexer actions to be executed by this executor. </summary>
|
|
76
|
+
/// <returns> The lexer actions to be executed by this executor. </returns>
|
|
77
|
+
const std::vector<Ref<const LexerAction>>& getLexerActions() const;
|
|
78
|
+
|
|
79
|
+
/// <summary>
|
|
80
|
+
/// Execute the actions encapsulated by this executor within the context of a
|
|
81
|
+
/// particular <seealso cref="Lexer"/>.
|
|
82
|
+
///
|
|
83
|
+
/// <para>This method calls <seealso cref="IntStream#seek"/> to set the position of the
|
|
84
|
+
/// {@code input} <seealso cref="CharStream"/> prior to calling
|
|
85
|
+
/// <seealso cref="LexerAction#execute"/> on a position-dependent action. Before the
|
|
86
|
+
/// method returns, the input position will be restored to the same position
|
|
87
|
+
/// it was in when the method was invoked.</para>
|
|
88
|
+
/// </summary>
|
|
89
|
+
/// <param name="lexer"> The lexer instance. </param>
|
|
90
|
+
/// <param name="input"> The input stream which is the source for the current token.
|
|
91
|
+
/// When this method is called, the current <seealso cref="IntStream#index"/> for
|
|
92
|
+
/// {@code input} should be the start of the following token, i.e. 1
|
|
93
|
+
/// character past the end of the current token. </param>
|
|
94
|
+
/// <param name="startIndex"> The token start index. This value may be passed to
|
|
95
|
+
/// <seealso cref="IntStream#seek"/> to set the {@code input} position to the beginning
|
|
96
|
+
/// of the token. </param>
|
|
97
|
+
void execute(Lexer *lexer, CharStream *input, size_t startIndex) const;
|
|
98
|
+
|
|
99
|
+
size_t hashCode() const;
|
|
100
|
+
|
|
101
|
+
bool equals(const LexerActionExecutor &other) const;
|
|
102
|
+
|
|
103
|
+
private:
|
|
104
|
+
const std::vector<Ref<const LexerAction>> _lexerActions;
|
|
105
|
+
mutable std::atomic<size_t> _hashCode;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
inline bool operator==(const LexerActionExecutor &lhs, const LexerActionExecutor &rhs) {
|
|
109
|
+
return lhs.equals(rhs);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
inline bool operator!=(const LexerActionExecutor &lhs, const LexerActionExecutor &rhs) {
|
|
113
|
+
return !operator==(lhs, rhs);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
} // namespace atn
|
|
117
|
+
} // namespace antlr4
|
|
118
|
+
|
|
119
|
+
namespace std {
|
|
120
|
+
|
|
121
|
+
template <>
|
|
122
|
+
struct hash<::antlr4::atn::LexerActionExecutor> {
|
|
123
|
+
size_t operator()(const ::antlr4::atn::LexerActionExecutor &lexerActionExecutor) const {
|
|
124
|
+
return lexerActionExecutor.hashCode();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
} // namespace std
|
|
@@ -0,0 +1,57 @@
|
|
|
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 "antlr4-common.h"
|
|
9
|
+
|
|
10
|
+
namespace antlr4 {
|
|
11
|
+
namespace atn {
|
|
12
|
+
|
|
13
|
+
/// <summary>
|
|
14
|
+
/// Represents the serialization type of a <seealso cref="LexerAction"/>.
|
|
15
|
+
///
|
|
16
|
+
/// @author Sam Harwell
|
|
17
|
+
/// @since 4.2
|
|
18
|
+
/// </summary>
|
|
19
|
+
enum class LexerActionType : size_t {
|
|
20
|
+
/// <summary>
|
|
21
|
+
/// The type of a <seealso cref="LexerChannelAction"/> action.
|
|
22
|
+
/// </summary>
|
|
23
|
+
CHANNEL = 0,
|
|
24
|
+
/// <summary>
|
|
25
|
+
/// The type of a <seealso cref="LexerCustomAction"/> action.
|
|
26
|
+
/// </summary>
|
|
27
|
+
CUSTOM,
|
|
28
|
+
/// <summary>
|
|
29
|
+
/// The type of a <seealso cref="LexerModeAction"/> action.
|
|
30
|
+
/// </summary>
|
|
31
|
+
MODE,
|
|
32
|
+
/// <summary>
|
|
33
|
+
/// The type of a <seealso cref="LexerMoreAction"/> action.
|
|
34
|
+
/// </summary>
|
|
35
|
+
MORE,
|
|
36
|
+
/// <summary>
|
|
37
|
+
/// The type of a <seealso cref="LexerPopModeAction"/> action.
|
|
38
|
+
/// </summary>
|
|
39
|
+
POP_MODE,
|
|
40
|
+
/// <summary>
|
|
41
|
+
/// The type of a <seealso cref="LexerPushModeAction"/> action.
|
|
42
|
+
/// </summary>
|
|
43
|
+
PUSH_MODE,
|
|
44
|
+
/// <summary>
|
|
45
|
+
/// The type of a <seealso cref="LexerSkipAction"/> action.
|
|
46
|
+
/// </summary>
|
|
47
|
+
SKIP,
|
|
48
|
+
/// <summary>
|
|
49
|
+
/// The type of a <seealso cref="LexerTypeAction"/> action.
|
|
50
|
+
/// </summary>
|
|
51
|
+
TYPE,
|
|
52
|
+
|
|
53
|
+
INDEXED_CUSTOM,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
} // namespace atn
|
|
57
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,43 @@
|
|
|
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 "misc/MurmurHash.h"
|
|
7
|
+
#include "Lexer.h"
|
|
8
|
+
#include "support/Casts.h"
|
|
9
|
+
|
|
10
|
+
#include "atn/LexerChannelAction.h"
|
|
11
|
+
|
|
12
|
+
using namespace antlr4::atn;
|
|
13
|
+
using namespace antlr4::misc;
|
|
14
|
+
using namespace antlrcpp;
|
|
15
|
+
|
|
16
|
+
LexerChannelAction::LexerChannelAction(int channel)
|
|
17
|
+
: LexerAction(LexerActionType::CHANNEL, false), _channel(channel) {}
|
|
18
|
+
|
|
19
|
+
void LexerChannelAction::execute(Lexer *lexer) const {
|
|
20
|
+
lexer->setChannel(getChannel());
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
size_t LexerChannelAction::hashCodeImpl() const {
|
|
24
|
+
size_t hash = MurmurHash::initialize();
|
|
25
|
+
hash = MurmurHash::update(hash, static_cast<size_t>(getActionType()));
|
|
26
|
+
hash = MurmurHash::update(hash, getChannel());
|
|
27
|
+
return MurmurHash::finish(hash, 2);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
bool LexerChannelAction::equals(const LexerAction &other) const {
|
|
31
|
+
if (this == std::addressof(other)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (getActionType() != other.getActionType()) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const auto &lexerAction = downCast<const LexerChannelAction&>(other);
|
|
38
|
+
return getChannel() == lexerAction.getChannel();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
std::string LexerChannelAction::toString() const {
|
|
42
|
+
return "channel(" + std::to_string(getChannel()) + ")";
|
|
43
|
+
}
|