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,71 @@
|
|
|
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/ATN.h"
|
|
9
|
+
#include "atn/PredictionContext.h"
|
|
10
|
+
#include "atn/PredictionContextCache.h"
|
|
11
|
+
#include "misc/IntervalSet.h"
|
|
12
|
+
#include "support/CPPUtils.h"
|
|
13
|
+
|
|
14
|
+
namespace antlr4 {
|
|
15
|
+
namespace atn {
|
|
16
|
+
|
|
17
|
+
class ANTLR4CPP_PUBLIC ATNSimulator {
|
|
18
|
+
public:
|
|
19
|
+
/// Must distinguish between missing edge and edge we know leads nowhere.
|
|
20
|
+
static const Ref<dfa::DFAState> ERROR;
|
|
21
|
+
const ATN &atn;
|
|
22
|
+
|
|
23
|
+
ATNSimulator(const ATN &atn, PredictionContextCache &sharedContextCache);
|
|
24
|
+
|
|
25
|
+
virtual ~ATNSimulator() = default;
|
|
26
|
+
|
|
27
|
+
virtual void reset() = 0;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Clear the DFA cache used by the current instance. Since the DFA cache may
|
|
31
|
+
* be shared by multiple ATN simulators, this method may affect the
|
|
32
|
+
* performance (but not accuracy) of other parsers which are being used
|
|
33
|
+
* concurrently.
|
|
34
|
+
*
|
|
35
|
+
* @throws UnsupportedOperationException if the current instance does not
|
|
36
|
+
* support clearing the DFA.
|
|
37
|
+
*
|
|
38
|
+
* @since 4.3
|
|
39
|
+
*/
|
|
40
|
+
virtual void clearDFA();
|
|
41
|
+
|
|
42
|
+
PredictionContextCache& getSharedContextCache() const;
|
|
43
|
+
Ref<const PredictionContext> getCachedContext(const Ref<const PredictionContext> &context);
|
|
44
|
+
|
|
45
|
+
protected:
|
|
46
|
+
/// <summary>
|
|
47
|
+
/// The context cache maps all PredictionContext objects that are equals()
|
|
48
|
+
/// to a single cached copy. This cache is shared across all contexts
|
|
49
|
+
/// in all ATNConfigs in all DFA states. We rebuild each ATNConfigSet
|
|
50
|
+
/// to use only cached nodes/graphs in addDFAState(). We don't want to
|
|
51
|
+
/// fill this during closure() since there are lots of contexts that
|
|
52
|
+
/// pop up but are not used ever again. It also greatly slows down closure().
|
|
53
|
+
/// <p/>
|
|
54
|
+
/// This cache makes a huge difference in memory and a little bit in speed.
|
|
55
|
+
/// For the Java grammar on java.*, it dropped the memory requirements
|
|
56
|
+
/// at the end from 25M to 16M. We don't store any of the full context
|
|
57
|
+
/// graphs in the DFA because they are limited to local context only,
|
|
58
|
+
/// but apparently there's a lot of repetition there as well. We optimize
|
|
59
|
+
/// the config contexts before storing the config set in the DFA states
|
|
60
|
+
/// by literally rebuilding them with cached subgraphs only.
|
|
61
|
+
/// <p/>
|
|
62
|
+
/// I tried a cache for use during closure operations, that was
|
|
63
|
+
/// whacked after each adaptivePredict(). It cost a little bit
|
|
64
|
+
/// more time I think and doesn't save on the overall footprint
|
|
65
|
+
/// so it's not worth the complexity.
|
|
66
|
+
/// </summary>
|
|
67
|
+
PredictionContextCache &_sharedContextCache;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
} // namespace atn
|
|
71
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "atn/ATN.h"
|
|
7
|
+
#include "atn/Transition.h"
|
|
8
|
+
#include "misc/IntervalSet.h"
|
|
9
|
+
#include "support/CPPUtils.h"
|
|
10
|
+
|
|
11
|
+
#include "atn/ATNState.h"
|
|
12
|
+
|
|
13
|
+
using namespace antlr4::atn;
|
|
14
|
+
using namespace antlrcpp;
|
|
15
|
+
|
|
16
|
+
size_t ATNState::hashCode() const {
|
|
17
|
+
return stateNumber;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
bool ATNState::equals(const ATNState &other) const {
|
|
21
|
+
return stateNumber == other.stateNumber;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
bool ATNState::isNonGreedyExitState() const {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
std::string ATNState::toString() const {
|
|
29
|
+
return std::to_string(stateNumber);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void ATNState::addTransition(ConstTransitionPtr e) {
|
|
33
|
+
addTransition(transitions.size(), std::move(e));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
void ATNState::addTransition(size_t index, ConstTransitionPtr e) {
|
|
37
|
+
for (const auto &transition : transitions)
|
|
38
|
+
if (transition->target->stateNumber == e->target->stateNumber) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (transitions.empty()) {
|
|
43
|
+
epsilonOnlyTransitions = e->isEpsilon();
|
|
44
|
+
} else if (epsilonOnlyTransitions != e->isEpsilon()) {
|
|
45
|
+
std::cerr << "ATN state %d has both epsilon and non-epsilon transitions.\n" << stateNumber;
|
|
46
|
+
epsilonOnlyTransitions = false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
transitions.insert(transitions.begin() + index, std::move(e));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
ConstTransitionPtr ATNState::removeTransition(size_t index) {
|
|
53
|
+
ConstTransitionPtr result = std::move(transitions[index]);
|
|
54
|
+
transitions.erase(transitions.begin() + index);
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
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 "misc/IntervalSet.h"
|
|
9
|
+
#include "atn/Transition.h"
|
|
10
|
+
#include "atn/ATNStateType.h"
|
|
11
|
+
|
|
12
|
+
namespace antlr4 {
|
|
13
|
+
namespace atn {
|
|
14
|
+
|
|
15
|
+
/// <summary>
|
|
16
|
+
/// The following images show the relation of states and
|
|
17
|
+
/// <seealso cref="ATNState#transitions"/> for various grammar constructs.
|
|
18
|
+
///
|
|
19
|
+
/// <ul>
|
|
20
|
+
///
|
|
21
|
+
/// <li>Solid edges marked with an ε indicate a required
|
|
22
|
+
/// <seealso cref="EpsilonTransition"/>.</li>
|
|
23
|
+
///
|
|
24
|
+
/// <li>Dashed edges indicate locations where any transition derived from
|
|
25
|
+
/// <seealso cref="Transition"/> might appear.</li>
|
|
26
|
+
///
|
|
27
|
+
/// <li>Dashed nodes are place holders for either a sequence of linked
|
|
28
|
+
/// <seealso cref="BasicState"/> states or the inclusion of a block representing a nested
|
|
29
|
+
/// construct in one of the forms below.</li>
|
|
30
|
+
///
|
|
31
|
+
/// <li>Nodes showing multiple outgoing alternatives with a {@code ...} support
|
|
32
|
+
/// any number of alternatives (one or more). Nodes without the {@code ...} only
|
|
33
|
+
/// support the exact number of alternatives shown in the diagram.</li>
|
|
34
|
+
///
|
|
35
|
+
/// </ul>
|
|
36
|
+
///
|
|
37
|
+
/// <h2>Basic Blocks</h2>
|
|
38
|
+
///
|
|
39
|
+
/// <h3>Rule</h3>
|
|
40
|
+
///
|
|
41
|
+
/// <embed src="images/Rule.svg" type="image/svg+xml"/>
|
|
42
|
+
///
|
|
43
|
+
/// <h3>Block of 1 or more alternatives</h3>
|
|
44
|
+
///
|
|
45
|
+
/// <embed src="images/Block.svg" type="image/svg+xml"/>
|
|
46
|
+
///
|
|
47
|
+
/// <h2>Greedy Loops</h2>
|
|
48
|
+
///
|
|
49
|
+
/// <h3>Greedy Closure: {@code (...)*}</h3>
|
|
50
|
+
///
|
|
51
|
+
/// <embed src="images/ClosureGreedy.svg" type="image/svg+xml"/>
|
|
52
|
+
///
|
|
53
|
+
/// <h3>Greedy Positive Closure: {@code (...)+}</h3>
|
|
54
|
+
///
|
|
55
|
+
/// <embed src="images/PositiveClosureGreedy.svg" type="image/svg+xml"/>
|
|
56
|
+
///
|
|
57
|
+
/// <h3>Greedy Optional: {@code (...)?}</h3>
|
|
58
|
+
///
|
|
59
|
+
/// <embed src="images/OptionalGreedy.svg" type="image/svg+xml"/>
|
|
60
|
+
///
|
|
61
|
+
/// <h2>Non-Greedy Loops</h2>
|
|
62
|
+
///
|
|
63
|
+
/// <h3>Non-Greedy Closure: {@code (...)*?}</h3>
|
|
64
|
+
///
|
|
65
|
+
/// <embed src="images/ClosureNonGreedy.svg" type="image/svg+xml"/>
|
|
66
|
+
///
|
|
67
|
+
/// <h3>Non-Greedy Positive Closure: {@code (...)+?}</h3>
|
|
68
|
+
///
|
|
69
|
+
/// <embed src="images/PositiveClosureNonGreedy.svg" type="image/svg+xml"/>
|
|
70
|
+
///
|
|
71
|
+
/// <h3>Non-Greedy Optional: {@code (...)??}</h3>
|
|
72
|
+
///
|
|
73
|
+
/// <embed src="images/OptionalNonGreedy.svg" type="image/svg+xml"/>
|
|
74
|
+
/// </summary>
|
|
75
|
+
|
|
76
|
+
// GCC generates a warning here if ATN has already been declared due to the
|
|
77
|
+
// attributes added by ANTLR4CPP_PUBLIC.
|
|
78
|
+
// See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39159
|
|
79
|
+
// Only forward-declare if it hasn't already been declared.
|
|
80
|
+
#ifndef ANTLR4CPP_ATN_DECLARED
|
|
81
|
+
class ANTLR4CPP_PUBLIC ATN;
|
|
82
|
+
#endif
|
|
83
|
+
|
|
84
|
+
class ANTLR4CPP_PUBLIC ATNState {
|
|
85
|
+
public:
|
|
86
|
+
static constexpr size_t INITIAL_NUM_TRANSITIONS = 4;
|
|
87
|
+
static constexpr size_t INVALID_STATE_NUMBER = std::numeric_limits<size_t>::max();
|
|
88
|
+
|
|
89
|
+
size_t stateNumber = INVALID_STATE_NUMBER;
|
|
90
|
+
size_t ruleIndex = 0; // at runtime, we don't have Rule objects
|
|
91
|
+
bool epsilonOnlyTransitions = false;
|
|
92
|
+
|
|
93
|
+
/// Track the transitions emanating from this ATN state.
|
|
94
|
+
std::vector<ConstTransitionPtr> transitions;
|
|
95
|
+
|
|
96
|
+
ATNState() = delete;
|
|
97
|
+
|
|
98
|
+
ATNState(ATNState const&) = delete;
|
|
99
|
+
|
|
100
|
+
ATNState(ATNState&&) = delete;
|
|
101
|
+
|
|
102
|
+
virtual ~ATNState() = default;
|
|
103
|
+
|
|
104
|
+
ATNState& operator=(ATNState const&) = delete;
|
|
105
|
+
|
|
106
|
+
ATNState& operator=(ATNState&&) = delete;
|
|
107
|
+
|
|
108
|
+
void addTransition(ConstTransitionPtr e);
|
|
109
|
+
void addTransition(size_t index, ConstTransitionPtr e);
|
|
110
|
+
ConstTransitionPtr removeTransition(size_t index);
|
|
111
|
+
|
|
112
|
+
virtual size_t hashCode() const;
|
|
113
|
+
virtual bool equals(const ATNState &other) const;
|
|
114
|
+
|
|
115
|
+
virtual bool isNonGreedyExitState() const;
|
|
116
|
+
virtual std::string toString() const;
|
|
117
|
+
|
|
118
|
+
ATNStateType getStateType() const { return _stateType; }
|
|
119
|
+
|
|
120
|
+
protected:
|
|
121
|
+
explicit ATNState(ATNStateType stateType) : _stateType(stateType) {}
|
|
122
|
+
|
|
123
|
+
private:
|
|
124
|
+
/// Used to cache lookahead during parsing, not used during construction.
|
|
125
|
+
|
|
126
|
+
misc::IntervalSet _nextTokenWithinRule;
|
|
127
|
+
std::atomic<bool> _nextTokenUpdated { false };
|
|
128
|
+
|
|
129
|
+
const ATNStateType _stateType;
|
|
130
|
+
|
|
131
|
+
friend class ATN;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
inline bool operator==(const ATNState &lhs, const ATNState &rhs) { return lhs.equals(rhs); }
|
|
135
|
+
|
|
136
|
+
inline bool operator!=(const ATNState &lhs, const ATNState &rhs) { return !operator==(lhs, rhs); }
|
|
137
|
+
|
|
138
|
+
} // namespace atn
|
|
139
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include "atn/ATNStateType.h"
|
|
2
|
+
|
|
3
|
+
std::string antlr4::atn::atnStateTypeName(ATNStateType atnStateType) {
|
|
4
|
+
switch (atnStateType) {
|
|
5
|
+
case ATNStateType::INVALID:
|
|
6
|
+
return "INVALID";
|
|
7
|
+
case ATNStateType::BASIC:
|
|
8
|
+
return "BASIC";
|
|
9
|
+
case ATNStateType::RULE_START:
|
|
10
|
+
return "RULE_START";
|
|
11
|
+
case ATNStateType::BLOCK_START:
|
|
12
|
+
return "BLOCK_START";
|
|
13
|
+
case ATNStateType::PLUS_BLOCK_START:
|
|
14
|
+
return "PLUS_BLOCK_START";
|
|
15
|
+
case ATNStateType::STAR_BLOCK_START:
|
|
16
|
+
return "STAR_BLOCK_START";
|
|
17
|
+
case ATNStateType::TOKEN_START:
|
|
18
|
+
return "TOKEN_START";
|
|
19
|
+
case ATNStateType::RULE_STOP:
|
|
20
|
+
return "RULE_STOP";
|
|
21
|
+
case ATNStateType::BLOCK_END:
|
|
22
|
+
return "BLOCK_END";
|
|
23
|
+
case ATNStateType::STAR_LOOP_BACK:
|
|
24
|
+
return "STAR_LOOP_BACK";
|
|
25
|
+
case ATNStateType::STAR_LOOP_ENTRY:
|
|
26
|
+
return "STAR_LOOP_ENTRY";
|
|
27
|
+
case ATNStateType::PLUS_LOOP_BACK:
|
|
28
|
+
return "PLUS_LOOP_BACK";
|
|
29
|
+
case ATNStateType::LOOP_END:
|
|
30
|
+
return "LOOP_END";
|
|
31
|
+
}
|
|
32
|
+
return "UNKNOWN";
|
|
33
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 <cstddef>
|
|
9
|
+
#include <string>
|
|
10
|
+
|
|
11
|
+
#include "antlr4-common.h"
|
|
12
|
+
|
|
13
|
+
namespace antlr4 {
|
|
14
|
+
namespace atn {
|
|
15
|
+
|
|
16
|
+
// Constants for ATNState serialization.
|
|
17
|
+
enum class ATNStateType : size_t {
|
|
18
|
+
INVALID = 0,
|
|
19
|
+
BASIC = 1,
|
|
20
|
+
RULE_START = 2,
|
|
21
|
+
BLOCK_START = 3,
|
|
22
|
+
PLUS_BLOCK_START = 4,
|
|
23
|
+
STAR_BLOCK_START = 5,
|
|
24
|
+
TOKEN_START = 6,
|
|
25
|
+
RULE_STOP = 7,
|
|
26
|
+
BLOCK_END = 8,
|
|
27
|
+
STAR_LOOP_BACK = 9,
|
|
28
|
+
STAR_LOOP_ENTRY = 10,
|
|
29
|
+
PLUS_LOOP_BACK = 11,
|
|
30
|
+
LOOP_END = 12,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
ANTLR4CPP_PUBLIC std::string atnStateTypeName(ATNStateType atnStateType);
|
|
34
|
+
|
|
35
|
+
} // namespace atn
|
|
36
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
/// Represents the type of recognizer an ATN applies to.
|
|
14
|
+
enum class ATNType {
|
|
15
|
+
LEXER = 0,
|
|
16
|
+
PARSER = 1,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} // namespace atn
|
|
20
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "atn/ActionTransition.h"
|
|
7
|
+
|
|
8
|
+
using namespace antlr4::atn;
|
|
9
|
+
|
|
10
|
+
ActionTransition::ActionTransition(ATNState *target, size_t ruleIndex)
|
|
11
|
+
: Transition(TransitionType::ACTION, target), ruleIndex(ruleIndex), actionIndex(INVALID_INDEX), isCtxDependent(false) {
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
ActionTransition::ActionTransition(ATNState *target, size_t ruleIndex, size_t actionIndex, bool isCtxDependent)
|
|
15
|
+
: Transition(TransitionType::ACTION, target), ruleIndex(ruleIndex), actionIndex(actionIndex), isCtxDependent(isCtxDependent) {
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
bool ActionTransition::isEpsilon() const {
|
|
19
|
+
return true; // we are to be ignored by analysis 'cept for predicates
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
bool ActionTransition::matches(size_t /*symbol*/, size_t /*minVocabSymbol*/, size_t /*maxVocabSymbol*/) const {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
std::string ActionTransition::toString() const {
|
|
27
|
+
return " ACTION " + Transition::toString() + " { ruleIndex: " + std::to_string(ruleIndex) + ", actionIndex: " +
|
|
28
|
+
std::to_string(actionIndex) + ", isCtxDependent: " + std::to_string(isCtxDependent) + " }";
|
|
29
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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/Transition.h"
|
|
9
|
+
|
|
10
|
+
namespace antlr4 {
|
|
11
|
+
namespace atn {
|
|
12
|
+
|
|
13
|
+
class ANTLR4CPP_PUBLIC ActionTransition final : public Transition {
|
|
14
|
+
public:
|
|
15
|
+
static bool is(const Transition &transition) { return transition.getTransitionType() == TransitionType::ACTION; }
|
|
16
|
+
|
|
17
|
+
static bool is(const Transition *transition) { return transition != nullptr && is(*transition); }
|
|
18
|
+
|
|
19
|
+
const size_t ruleIndex;
|
|
20
|
+
const size_t actionIndex;
|
|
21
|
+
const bool isCtxDependent; // e.g., $i ref in action
|
|
22
|
+
|
|
23
|
+
ActionTransition(ATNState *target, size_t ruleIndex);
|
|
24
|
+
|
|
25
|
+
ActionTransition(ATNState *target, size_t ruleIndex, size_t actionIndex, bool isCtxDependent);
|
|
26
|
+
|
|
27
|
+
virtual bool isEpsilon() const override;
|
|
28
|
+
|
|
29
|
+
virtual bool matches(size_t symbol, size_t minVocabSymbol, size_t maxVocabSymbol) const override;
|
|
30
|
+
|
|
31
|
+
virtual std::string toString() const override;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
} // namespace atn
|
|
35
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "atn/AmbiguityInfo.h"
|
|
7
|
+
|
|
8
|
+
using namespace antlr4;
|
|
9
|
+
using namespace antlr4::atn;
|
|
10
|
+
|
|
11
|
+
AmbiguityInfo::AmbiguityInfo(size_t decision, ATNConfigSet *configs, const antlrcpp::BitSet &ambigAlts,
|
|
12
|
+
TokenStream *input, size_t startIndex, size_t stopIndex, bool fullCtx)
|
|
13
|
+
: DecisionEventInfo(decision, configs, input, startIndex, stopIndex, fullCtx) {
|
|
14
|
+
|
|
15
|
+
this->ambigAlts = ambigAlts;
|
|
16
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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/DecisionEventInfo.h"
|
|
9
|
+
#include "support/BitSet.h"
|
|
10
|
+
|
|
11
|
+
namespace antlr4 {
|
|
12
|
+
namespace atn {
|
|
13
|
+
|
|
14
|
+
/// <summary>
|
|
15
|
+
/// This class represents profiling event information for an ambiguity.
|
|
16
|
+
/// Ambiguities are decisions where a particular input resulted in an SLL
|
|
17
|
+
/// conflict, followed by LL prediction also reaching a conflict state
|
|
18
|
+
/// (indicating a true ambiguity in the grammar).
|
|
19
|
+
///
|
|
20
|
+
/// <para>
|
|
21
|
+
/// This event may be reported during SLL prediction in cases where the
|
|
22
|
+
/// conflicting SLL configuration set provides sufficient information to
|
|
23
|
+
/// determine that the SLL conflict is truly an ambiguity. For example, if none
|
|
24
|
+
/// of the ATN configurations in the conflicting SLL configuration set have
|
|
25
|
+
/// traversed a global follow transition (i.e.
|
|
26
|
+
/// <seealso cref="ATNConfig#reachesIntoOuterContext"/> is 0 for all configurations), then
|
|
27
|
+
/// the result of SLL prediction for that input is known to be equivalent to the
|
|
28
|
+
/// result of LL prediction for that input.</para>
|
|
29
|
+
///
|
|
30
|
+
/// <para>
|
|
31
|
+
/// In some cases, the minimum represented alternative in the conflicting LL
|
|
32
|
+
/// configuration set is not equal to the minimum represented alternative in the
|
|
33
|
+
/// conflicting SLL configuration set. Grammars and inputs which result in this
|
|
34
|
+
/// scenario are unable to use <seealso cref="PredictionMode#SLL"/>, which in turn means
|
|
35
|
+
/// they cannot use the two-stage parsing strategy to improve parsing performance
|
|
36
|
+
/// for that input.</para>
|
|
37
|
+
/// </summary>
|
|
38
|
+
/// <seealso cref= ParserATNSimulator#reportAmbiguity </seealso>
|
|
39
|
+
/// <seealso cref= ANTLRErrorListener#reportAmbiguity
|
|
40
|
+
///
|
|
41
|
+
/// @since 4.3 </seealso>
|
|
42
|
+
class ANTLR4CPP_PUBLIC AmbiguityInfo : public DecisionEventInfo {
|
|
43
|
+
public:
|
|
44
|
+
/// The set of alternative numbers for this decision event that lead to a valid parse.
|
|
45
|
+
antlrcpp::BitSet ambigAlts;
|
|
46
|
+
|
|
47
|
+
/// <summary>
|
|
48
|
+
/// Constructs a new instance of the <seealso cref="AmbiguityInfo"/> class with the
|
|
49
|
+
/// specified detailed ambiguity information.
|
|
50
|
+
/// </summary>
|
|
51
|
+
/// <param name="decision"> The decision number </param>
|
|
52
|
+
/// <param name="configs"> The final configuration set identifying the ambiguous
|
|
53
|
+
/// alternatives for the current input </param>
|
|
54
|
+
/// <param name="ambigAlts"> The set of alternatives in the decision that lead to a valid parse.
|
|
55
|
+
/// The predicted alt is the min(ambigAlts) </param>
|
|
56
|
+
/// <param name="input"> The input token stream </param>
|
|
57
|
+
/// <param name="startIndex"> The start index for the current prediction </param>
|
|
58
|
+
/// <param name="stopIndex"> The index at which the ambiguity was identified during
|
|
59
|
+
/// prediction </param>
|
|
60
|
+
/// <param name="fullCtx"> {@code true} if the ambiguity was identified during LL
|
|
61
|
+
/// prediction; otherwise, {@code false} if the ambiguity was identified
|
|
62
|
+
/// during SLL prediction </param>
|
|
63
|
+
AmbiguityInfo(size_t decision, ATNConfigSet *configs, const antlrcpp::BitSet &ambigAlts, TokenStream *input,
|
|
64
|
+
size_t startIndex, size_t stopIndex, bool fullCtx);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
} // namespace atn
|
|
68
|
+
} // namespace antlr4
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
2
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
3
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "atn/ArrayPredictionContext.h"
|
|
7
|
+
|
|
8
|
+
#include <cstring>
|
|
9
|
+
|
|
10
|
+
#include "atn/SingletonPredictionContext.h"
|
|
11
|
+
#include "misc/MurmurHash.h"
|
|
12
|
+
#include "support/Casts.h"
|
|
13
|
+
|
|
14
|
+
using namespace antlr4::atn;
|
|
15
|
+
using namespace antlr4::misc;
|
|
16
|
+
using namespace antlrcpp;
|
|
17
|
+
|
|
18
|
+
namespace {
|
|
19
|
+
|
|
20
|
+
bool cachedHashCodeEqual(size_t lhs, size_t rhs) {
|
|
21
|
+
return lhs == rhs || lhs == 0 || rhs == 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
bool predictionContextEqual(const Ref<const PredictionContext> &lhs, const Ref<const PredictionContext> &rhs) {
|
|
25
|
+
return *lhs == *rhs;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ArrayPredictionContext::ArrayPredictionContext(const SingletonPredictionContext &predictionContext)
|
|
31
|
+
: ArrayPredictionContext({ predictionContext.parent }, { predictionContext.returnState }) {}
|
|
32
|
+
|
|
33
|
+
ArrayPredictionContext::ArrayPredictionContext(std::vector<Ref<const PredictionContext>> parents,
|
|
34
|
+
std::vector<size_t> returnStates)
|
|
35
|
+
: PredictionContext(PredictionContextType::ARRAY), parents(std::move(parents)), returnStates(std::move(returnStates)) {
|
|
36
|
+
assert(this->parents.size() > 0);
|
|
37
|
+
assert(this->returnStates.size() > 0);
|
|
38
|
+
assert(this->parents.size() == this->returnStates.size());
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
bool ArrayPredictionContext::isEmpty() const {
|
|
42
|
+
// Since EMPTY_RETURN_STATE can only appear in the last position, we don't need to verify that size == 1.
|
|
43
|
+
return returnStates[0] == EMPTY_RETURN_STATE;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
size_t ArrayPredictionContext::size() const {
|
|
47
|
+
return returnStates.size();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const Ref<const PredictionContext>& ArrayPredictionContext::getParent(size_t index) const {
|
|
51
|
+
return parents[index];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
size_t ArrayPredictionContext::getReturnState(size_t index) const {
|
|
55
|
+
return returnStates[index];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
size_t ArrayPredictionContext::hashCodeImpl() const {
|
|
59
|
+
size_t hash = MurmurHash::initialize();
|
|
60
|
+
hash = MurmurHash::update(hash, static_cast<size_t>(getContextType()));
|
|
61
|
+
for (const auto &parent : parents) {
|
|
62
|
+
hash = MurmurHash::update(hash, parent);
|
|
63
|
+
}
|
|
64
|
+
for (const auto &returnState : returnStates) {
|
|
65
|
+
hash = MurmurHash::update(hash, returnState);
|
|
66
|
+
}
|
|
67
|
+
return MurmurHash::finish(hash, 1 + parents.size() + returnStates.size());
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
bool ArrayPredictionContext::equals(const PredictionContext &other) const {
|
|
71
|
+
if (this == std::addressof(other)) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
if (getContextType() != other.getContextType()) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const auto &array = downCast<const ArrayPredictionContext&>(other);
|
|
78
|
+
return returnStates.size() == array.returnStates.size() &&
|
|
79
|
+
parents.size() == array.parents.size() &&
|
|
80
|
+
cachedHashCodeEqual(cachedHashCode(), array.cachedHashCode()) &&
|
|
81
|
+
std::memcmp(returnStates.data(), array.returnStates.data(), returnStates.size() * sizeof(decltype(returnStates)::value_type)) == 0 &&
|
|
82
|
+
std::equal(parents.begin(), parents.end(), array.parents.begin(), predictionContextEqual);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
std::string ArrayPredictionContext::toString() const {
|
|
86
|
+
if (isEmpty()) {
|
|
87
|
+
return "[]";
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
std::stringstream ss;
|
|
91
|
+
ss << "[";
|
|
92
|
+
for (size_t i = 0; i < returnStates.size(); i++) {
|
|
93
|
+
if (i > 0) {
|
|
94
|
+
ss << ", ";
|
|
95
|
+
}
|
|
96
|
+
if (returnStates[i] == EMPTY_RETURN_STATE) {
|
|
97
|
+
ss << "$";
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
ss << returnStates[i];
|
|
101
|
+
if (parents[i] != nullptr) {
|
|
102
|
+
ss << " " << parents[i]->toString();
|
|
103
|
+
} else {
|
|
104
|
+
ss << "nul";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
ss << "]";
|
|
108
|
+
return ss.str();
|
|
109
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
|
3
|
+
* Use of this file is governed by the BSD 3-clause license that
|
|
4
|
+
* can be found in the LICENSE.txt file in the project root.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#pragma once
|
|
8
|
+
|
|
9
|
+
#include "atn/PredictionContext.h"
|
|
10
|
+
|
|
11
|
+
namespace antlr4 {
|
|
12
|
+
namespace atn {
|
|
13
|
+
|
|
14
|
+
class SingletonPredictionContext;
|
|
15
|
+
|
|
16
|
+
class ANTLR4CPP_PUBLIC ArrayPredictionContext final : public PredictionContext {
|
|
17
|
+
public:
|
|
18
|
+
static bool is(const PredictionContext &predictionContext) { return predictionContext.getContextType() == PredictionContextType::ARRAY; }
|
|
19
|
+
|
|
20
|
+
static bool is(const PredictionContext *predictionContext) { return predictionContext != nullptr && is(*predictionContext); }
|
|
21
|
+
|
|
22
|
+
/// Parent can be empty only if full ctx mode and we make an array
|
|
23
|
+
/// from EMPTY and non-empty. We merge EMPTY by using null parent and
|
|
24
|
+
/// returnState == EMPTY_RETURN_STATE.
|
|
25
|
+
// Also here: we use a strong reference to our parents to avoid having them freed prematurely.
|
|
26
|
+
// See also SinglePredictionContext.
|
|
27
|
+
std::vector<Ref<const PredictionContext>> parents;
|
|
28
|
+
|
|
29
|
+
/// Sorted for merge, no duplicates; if present, EMPTY_RETURN_STATE is always last.
|
|
30
|
+
std::vector<size_t> returnStates;
|
|
31
|
+
|
|
32
|
+
explicit ArrayPredictionContext(const SingletonPredictionContext &predictionContext);
|
|
33
|
+
|
|
34
|
+
ArrayPredictionContext(std::vector<Ref<const PredictionContext>> parents, std::vector<size_t> returnStates);
|
|
35
|
+
|
|
36
|
+
ArrayPredictionContext(ArrayPredictionContext&&) = default;
|
|
37
|
+
|
|
38
|
+
bool isEmpty() const override;
|
|
39
|
+
size_t size() const override;
|
|
40
|
+
const Ref<const PredictionContext>& getParent(size_t index) const override;
|
|
41
|
+
size_t getReturnState(size_t index) const override;
|
|
42
|
+
bool equals(const PredictionContext &other) const override;
|
|
43
|
+
std::string toString() const override;
|
|
44
|
+
|
|
45
|
+
protected:
|
|
46
|
+
size_t hashCodeImpl() const override;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
} // namespace atn
|
|
50
|
+
} // namespace antlr4
|
|
51
|
+
|