expressir 1.2.4 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cross_rubies +0 -6
- data/.github/workflows/rake.yml +200 -21
- data/.gitignore +7 -2
- data/.gitmodules +3 -0
- data/.rubocop.yml +13 -4
- data/README.adoc +8 -0
- data/Rakefile +4 -1
- data/bin/console +0 -1
- data/bin/rspec +3 -3
- data/exe/expressir +4 -2
- data/exe/format +1 -1
- data/exe/format-test +25 -25
- data/exe/generate-parser +16 -13
- data/expressir.gemspec +12 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -34
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +11 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +20 -20
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +30 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +13 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -13
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +47 -27
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +19 -22
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +20 -20
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +10 -21
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -32
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +2 -7
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -45
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -61
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +4 -55
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +34 -20
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +30 -35
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +35 -32
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -462
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -68
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +41 -42
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -106
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +9 -48
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +15 -33
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +164 -151
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +86 -127
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +9 -21
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -8
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +7 -20
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +34 -14
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +12 -53
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -33
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -62
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +13 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
- data/ext/express-parser/antlrgen/Express.interp +1 -1
- data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
- data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
- data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
- data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
- data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
- data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
- data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
- data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
- data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
- data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
- data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
- data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
- data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
- data/ext/express-parser/express_parser.cpp +294 -86
- data/ext/express-parser/extconf.rb +13 -12
- data/lib/expressir/config.rb +1 -1
- data/lib/expressir/express/parser.rb +3 -4
- data/lib/expressir/express/visitor.rb +7 -5
- data/lib/expressir/model.rb +78 -78
- data/lib/expressir/version.rb +1 -1
- data/rakelib/antlr4-native.rake +161 -0
- data/rakelib/cross-ruby.rake +213 -162
- data/spec/acceptance/version_spec.rb +17 -2
- data/spec/expressir/express/cache_spec.rb +23 -5
- data/spec/expressir/express/formatter_spec.rb +54 -8
- data/spec/expressir/express/parser_spec.rb +47 -11
- data/spec/expressir/model/model_element_spec.rb +198 -146
- data/spec/spec_helper.rb +7 -0
- metadata +81 -93
- data/demo.rb +0 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
- data/original/examples/employment/eclipse/.project +0 -17
- data/original/examples/employment/eclipse/Export/Employment.png +0 -0
- data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
- data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
- data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
- data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
- data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
- data/original/examples/employment/eclipse/readme.txt +0 -7
- data/original/examples/employment/employment_schema.exp +0 -33
- data/original/examples/employment/employment_schema.rb +0 -232
- data/original/examples/employment/employment_schema.xml +0 -93
- data/original/examples/employment/employment_schema___module.rb +0 -46
- data/original/examples/employment/employment_schema___p28attr.rb +0 -126
- data/original/examples/employment/employment_schema___p28inst.rb +0 -26
- data/original/examples/employment/example_employment_data.xml +0 -1
- data/original/examples/employment/example_employment_data_copy.xml +0 -1
- data/original/examples/employment/example_employment_reader.rb +0 -30
- data/original/examples/employment/example_employment_writer.rb +0 -51
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
- data/original/exp2ruby.rb +0 -525
- data/original/expsm.rb +0 -34
- data/original/mapping_owl.rb +0 -1018
- data/original/mapping_sysml.rb +0 -2281
- data/original/mapping_uml2.rb +0 -599
- data/original/mapping_uml2_eclipse.rb +0 -433
- data/original/reeper.rb +0 -134
- data/spec/expressr_spec.rb +0 -5
@@ -10,34 +10,34 @@
|
|
10
10
|
namespace antlr4 {
|
11
11
|
namespace atn {
|
12
12
|
|
13
|
-
class ANTLR4CPP_PUBLIC LexerATNConfig : public ATNConfig {
|
13
|
+
class ANTLR4CPP_PUBLIC LexerATNConfig final : public ATNConfig {
|
14
14
|
public:
|
15
|
-
LexerATNConfig(ATNState *state, int alt, Ref<PredictionContext>
|
16
|
-
LexerATNConfig(ATNState *state, int alt, Ref<PredictionContext>
|
15
|
+
LexerATNConfig(ATNState *state, int alt, Ref<const PredictionContext> context);
|
16
|
+
LexerATNConfig(ATNState *state, int alt, Ref<const PredictionContext> context, Ref<const LexerActionExecutor> lexerActionExecutor);
|
17
17
|
|
18
|
-
LexerATNConfig(
|
19
|
-
LexerATNConfig(
|
20
|
-
LexerATNConfig(
|
18
|
+
LexerATNConfig(LexerATNConfig const& other, ATNState *state);
|
19
|
+
LexerATNConfig(LexerATNConfig const& other, ATNState *state, Ref<const LexerActionExecutor> lexerActionExecutor);
|
20
|
+
LexerATNConfig(LexerATNConfig const& other, ATNState *state, Ref<const PredictionContext> context);
|
21
21
|
|
22
22
|
/**
|
23
23
|
* Gets the {@link LexerActionExecutor} capable of executing the embedded
|
24
24
|
* action(s) for the current configuration.
|
25
25
|
*/
|
26
|
-
Ref<LexerActionExecutor
|
27
|
-
bool hasPassedThroughNonGreedyDecision();
|
26
|
+
const Ref<const LexerActionExecutor>& getLexerActionExecutor() const { return _lexerActionExecutor; }
|
27
|
+
bool hasPassedThroughNonGreedyDecision() const { return _passedThroughNonGreedyDecision; }
|
28
28
|
|
29
29
|
virtual size_t hashCode() const override;
|
30
30
|
|
31
|
-
bool operator
|
31
|
+
bool operator==(const LexerATNConfig& other) const;
|
32
32
|
|
33
33
|
private:
|
34
34
|
/**
|
35
35
|
* This is the backing field for {@link #getLexerActionExecutor}.
|
36
36
|
*/
|
37
|
-
const Ref<LexerActionExecutor> _lexerActionExecutor;
|
38
|
-
const bool _passedThroughNonGreedyDecision;
|
37
|
+
const Ref<const LexerActionExecutor> _lexerActionExecutor;
|
38
|
+
const bool _passedThroughNonGreedyDecision = false;
|
39
39
|
|
40
|
-
static bool checkNonGreedyDecision(
|
40
|
+
static bool checkNonGreedyDecision(LexerATNConfig const& source, ATNState *target);
|
41
41
|
};
|
42
42
|
|
43
43
|
} // namespace atn
|
@@ -20,7 +20,6 @@
|
|
20
20
|
#include "dfa/DFAState.h"
|
21
21
|
#include "atn/LexerATNConfig.h"
|
22
22
|
#include "atn/LexerActionExecutor.h"
|
23
|
-
#include "atn/EmptyPredictionContext.h"
|
24
23
|
|
25
24
|
#include "atn/LexerATNSimulator.h"
|
26
25
|
|
@@ -31,25 +30,10 @@ using namespace antlr4;
|
|
31
30
|
using namespace antlr4::atn;
|
32
31
|
using namespace antlrcpp;
|
33
32
|
|
34
|
-
LexerATNSimulator::SimState::~SimState() {
|
35
|
-
}
|
36
|
-
|
37
33
|
void LexerATNSimulator::SimState::reset() {
|
38
|
-
|
39
|
-
line = 0;
|
40
|
-
charPos = INVALID_INDEX;
|
41
|
-
dfaState = nullptr; // Don't delete. It's just a reference.
|
42
|
-
}
|
43
|
-
|
44
|
-
void LexerATNSimulator::SimState::InitializeInstanceFields() {
|
45
|
-
index = INVALID_INDEX;
|
46
|
-
line = 0;
|
47
|
-
charPos = INVALID_INDEX;
|
34
|
+
*this = SimState();
|
48
35
|
}
|
49
36
|
|
50
|
-
int LexerATNSimulator::match_calls = 0;
|
51
|
-
|
52
|
-
|
53
37
|
LexerATNSimulator::LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
|
54
38
|
PredictionContextCache &sharedContextCache)
|
55
39
|
: LexerATNSimulator(nullptr, atn, decisionToDFA, sharedContextCache) {
|
@@ -69,7 +53,6 @@ void LexerATNSimulator::copyState(LexerATNSimulator *simulator) {
|
|
69
53
|
}
|
70
54
|
|
71
55
|
size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
|
72
|
-
match_calls++;
|
73
56
|
_mode = mode;
|
74
57
|
ssize_t mark = input->mark();
|
75
58
|
|
@@ -80,10 +63,15 @@ size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
|
|
80
63
|
_startIndex = input->index();
|
81
64
|
_prevAccept.reset();
|
82
65
|
const dfa::DFA &dfa = _decisionToDFA[mode];
|
83
|
-
|
66
|
+
dfa::DFAState* s0;
|
67
|
+
{
|
68
|
+
std::shared_lock<std::shared_mutex> stateLock(atn._stateMutex);
|
69
|
+
s0 = dfa.s0;
|
70
|
+
}
|
71
|
+
if (s0 == nullptr) {
|
84
72
|
return matchATN(input);
|
85
73
|
} else {
|
86
|
-
return execATN(input,
|
74
|
+
return execATN(input, s0);
|
87
75
|
}
|
88
76
|
}
|
89
77
|
|
@@ -111,10 +99,7 @@ size_t LexerATNSimulator::matchATN(CharStream *input) {
|
|
111
99
|
bool suppressEdge = s0_closure->hasSemanticContext;
|
112
100
|
s0_closure->hasSemanticContext = false;
|
113
101
|
|
114
|
-
dfa::DFAState *next = addDFAState(s0_closure.release());
|
115
|
-
if (!suppressEdge) {
|
116
|
-
_decisionToDFA[_mode].s0 = next;
|
117
|
-
}
|
102
|
+
dfa::DFAState *next = addDFAState(s0_closure.release(), suppressEdge);
|
118
103
|
|
119
104
|
size_t predict = execATN(input, next);
|
120
105
|
|
@@ -182,7 +167,7 @@ size_t LexerATNSimulator::execATN(CharStream *input, dfa::DFAState *ds0) {
|
|
182
167
|
|
183
168
|
dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_t t) {
|
184
169
|
dfa::DFAState* retval = nullptr;
|
185
|
-
|
170
|
+
std::shared_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
|
186
171
|
if (t <= MAX_DFA_EDGE) {
|
187
172
|
auto iterator = s->edges.find(t - MIN_DFA_EDGE);
|
188
173
|
#if DEBUG_ATN == 1
|
@@ -194,7 +179,6 @@ dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_
|
|
194
179
|
if (iterator != s->edges.end())
|
195
180
|
retval = iterator->second;
|
196
181
|
}
|
197
|
-
_edgeLock.readUnlock();
|
198
182
|
return retval;
|
199
183
|
}
|
200
184
|
|
@@ -209,9 +193,9 @@ dfa::DFAState *LexerATNSimulator::computeTargetState(CharStream *input, dfa::DFA
|
|
209
193
|
if (!reach->hasSemanticContext) {
|
210
194
|
// we got nowhere on t, don't throw out this knowledge; it'd
|
211
195
|
// cause a failover from DFA later.
|
212
|
-
delete reach;
|
213
196
|
addDFAEdge(s, t, ERROR.get());
|
214
197
|
}
|
198
|
+
delete reach;
|
215
199
|
|
216
200
|
// stop when we can't match any more char
|
217
201
|
return ERROR.get();
|
@@ -223,8 +207,7 @@ dfa::DFAState *LexerATNSimulator::computeTargetState(CharStream *input, dfa::DFA
|
|
223
207
|
|
224
208
|
size_t LexerATNSimulator::failOrAccept(CharStream *input, ATNConfigSet *reach, size_t t) {
|
225
209
|
if (_prevAccept.dfaState != nullptr) {
|
226
|
-
|
227
|
-
accept(input, lexerActionExecutor, _startIndex, _prevAccept.index, _prevAccept.line, _prevAccept.charPos);
|
210
|
+
accept(input, _prevAccept.dfaState->lexerActionExecutor, _startIndex, _prevAccept.index, _prevAccept.line, _prevAccept.charPos);
|
228
211
|
return _prevAccept.dfaState->prediction;
|
229
212
|
} else {
|
230
213
|
// if no accept and EOF is first char, return EOF
|
@@ -241,7 +224,7 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
|
|
241
224
|
// than a config that already reached an accept state for the same rule
|
242
225
|
size_t skipAlt = ATN::INVALID_ALT_NUMBER;
|
243
226
|
|
244
|
-
for (auto c : closure_->configs) {
|
227
|
+
for (const auto &c : closure_->configs) {
|
245
228
|
bool currentAltReachedAcceptState = c->alt == skipAlt;
|
246
229
|
if (currentAltReachedAcceptState && (std::static_pointer_cast<LexerATNConfig>(c))->hasPassedThroughNonGreedyDecision()) {
|
247
230
|
continue;
|
@@ -253,17 +236,17 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
|
|
253
236
|
|
254
237
|
size_t n = c->state->transitions.size();
|
255
238
|
for (size_t ti = 0; ti < n; ti++) { // for each transition
|
256
|
-
Transition *trans = c->state->transitions[ti];
|
239
|
+
const Transition *trans = c->state->transitions[ti].get();
|
257
240
|
ATNState *target = getReachableTarget(trans, (int)t);
|
258
241
|
if (target != nullptr) {
|
259
|
-
|
242
|
+
auto lexerActionExecutor = downCast<const LexerATNConfig&>(*c).getLexerActionExecutor();
|
260
243
|
if (lexerActionExecutor != nullptr) {
|
261
244
|
lexerActionExecutor = lexerActionExecutor->fixOffsetBeforeMatch((int)input->index() - (int)_startIndex);
|
262
245
|
}
|
263
246
|
|
264
247
|
bool treatEofAsEpsilon = t == Token::EOF;
|
265
|
-
Ref<LexerATNConfig> config = std::make_shared<LexerATNConfig>(
|
266
|
-
target, lexerActionExecutor);
|
248
|
+
Ref<LexerATNConfig> config = std::make_shared<LexerATNConfig>(downCast<const LexerATNConfig&>(*c),
|
249
|
+
target, std::move(lexerActionExecutor));
|
267
250
|
|
268
251
|
if (closure(input, config, reach, currentAltReachedAcceptState, true, treatEofAsEpsilon)) {
|
269
252
|
// any remaining configs for this alt have a lower priority than
|
@@ -276,7 +259,7 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
|
|
276
259
|
}
|
277
260
|
}
|
278
261
|
|
279
|
-
void LexerATNSimulator::accept(CharStream *input, const Ref<LexerActionExecutor> &lexerActionExecutor, size_t /*startIndex*/,
|
262
|
+
void LexerATNSimulator::accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t /*startIndex*/,
|
280
263
|
size_t index, size_t line, size_t charPos) {
|
281
264
|
#if DEBUG_ATN == 1
|
282
265
|
std::cout << "ACTION ";
|
@@ -293,7 +276,7 @@ void LexerATNSimulator::accept(CharStream *input, const Ref<LexerActionExecutor>
|
|
293
276
|
}
|
294
277
|
}
|
295
278
|
|
296
|
-
atn::ATNState *LexerATNSimulator::getReachableTarget(Transition *trans, size_t t) {
|
279
|
+
atn::ATNState *LexerATNSimulator::getReachableTarget(const Transition *trans, size_t t) {
|
297
280
|
if (trans->matches(t, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
|
298
281
|
return trans->target;
|
299
282
|
}
|
@@ -302,7 +285,7 @@ atn::ATNState *LexerATNSimulator::getReachableTarget(Transition *trans, size_t t
|
|
302
285
|
}
|
303
286
|
|
304
287
|
std::unique_ptr<ATNConfigSet> LexerATNSimulator::computeStartState(CharStream *input, ATNState *p) {
|
305
|
-
Ref<PredictionContext> initialContext = PredictionContext::EMPTY; // ml: the purpose of this assignment is unclear
|
288
|
+
Ref<const PredictionContext> initialContext = PredictionContext::EMPTY; // ml: the purpose of this assignment is unclear
|
306
289
|
std::unique_ptr<ATNConfigSet> configs(new OrderedATNConfigSet());
|
307
290
|
for (size_t i = 0; i < p->transitions.size(); i++) {
|
308
291
|
ATNState *target = p->transitions[i]->target;
|
@@ -319,7 +302,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
|
|
319
302
|
std::cout << "closure(" << config->toString(true) << ")" << std::endl;
|
320
303
|
#endif
|
321
304
|
|
322
|
-
if (
|
305
|
+
if (config->state != nullptr && config->state->getStateType() == ATNStateType::RULE_STOP) {
|
323
306
|
#if DEBUG_ATN == 1
|
324
307
|
if (_recog != nullptr) {
|
325
308
|
std::cout << "closure at " << _recog->getRuleNames()[config->state->ruleIndex] << " rule stop " << config << std::endl;
|
@@ -333,7 +316,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
|
|
333
316
|
configs->add(config);
|
334
317
|
return true;
|
335
318
|
} else {
|
336
|
-
configs->add(std::make_shared<LexerATNConfig>(config, config->state, PredictionContext::EMPTY));
|
319
|
+
configs->add(std::make_shared<LexerATNConfig>(*config, config->state, PredictionContext::EMPTY));
|
337
320
|
currentAltReachedAcceptState = true;
|
338
321
|
}
|
339
322
|
}
|
@@ -341,9 +324,9 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
|
|
341
324
|
if (config->context != nullptr && !config->context->isEmpty()) {
|
342
325
|
for (size_t i = 0; i < config->context->size(); i++) {
|
343
326
|
if (config->context->getReturnState(i) != PredictionContext::EMPTY_RETURN_STATE) {
|
344
|
-
|
327
|
+
Ref<const PredictionContext> newContext = config->context->getParent(i); // "pop" return state
|
345
328
|
ATNState *returnState = atn.states[config->context->getReturnState(i)];
|
346
|
-
Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(config, returnState, newContext
|
329
|
+
Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(*config, returnState, newContext);
|
347
330
|
currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
|
348
331
|
}
|
349
332
|
}
|
@@ -361,7 +344,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
|
|
361
344
|
|
362
345
|
ATNState *p = config->state;
|
363
346
|
for (size_t i = 0; i < p->transitions.size(); i++) {
|
364
|
-
Transition *t = p->transitions[i];
|
347
|
+
const Transition *t = p->transitions[i].get();
|
365
348
|
Ref<LexerATNConfig> c = getEpsilonTarget(input, config, t, configs, speculative, treatEofAsEpsilon);
|
366
349
|
if (c != nullptr) {
|
367
350
|
currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
|
@@ -371,22 +354,22 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
|
|
371
354
|
return currentAltReachedAcceptState;
|
372
355
|
}
|
373
356
|
|
374
|
-
Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, Transition *t,
|
357
|
+
Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
|
375
358
|
ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon) {
|
376
359
|
|
377
360
|
Ref<LexerATNConfig> c = nullptr;
|
378
|
-
switch (t->
|
379
|
-
case
|
380
|
-
RuleTransition *ruleTransition = static_cast<RuleTransition*>(t);
|
381
|
-
Ref<PredictionContext> newContext = SingletonPredictionContext::create(config->context, ruleTransition->followState->stateNumber);
|
382
|
-
c = std::make_shared<LexerATNConfig>(config, t->target, newContext);
|
361
|
+
switch (t->getTransitionType()) {
|
362
|
+
case TransitionType::RULE: {
|
363
|
+
const RuleTransition *ruleTransition = static_cast<const RuleTransition*>(t);
|
364
|
+
Ref<const PredictionContext> newContext = SingletonPredictionContext::create(config->context, ruleTransition->followState->stateNumber);
|
365
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target, newContext);
|
383
366
|
break;
|
384
367
|
}
|
385
368
|
|
386
|
-
case
|
369
|
+
case TransitionType::PRECEDENCE:
|
387
370
|
throw UnsupportedOperationException("Precedence predicates are not supported in lexers.");
|
388
371
|
|
389
|
-
case
|
372
|
+
case TransitionType::PREDICATE: {
|
390
373
|
/* Track traversing semantic predicates. If we traverse,
|
391
374
|
we cannot add a DFA state for this "reach" computation
|
392
375
|
because the DFA would not test the predicate again in the
|
@@ -405,20 +388,20 @@ Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const
|
|
405
388
|
states reached by traversing predicates. Since this is when we
|
406
389
|
test them, we cannot cash the DFA state target of ID.
|
407
390
|
*/
|
408
|
-
PredicateTransition *pt = static_cast<PredicateTransition*>(t);
|
391
|
+
const PredicateTransition *pt = static_cast<const PredicateTransition*>(t);
|
409
392
|
|
410
393
|
#if DEBUG_ATN == 1
|
411
|
-
std::cout << "EVAL rule " << pt->
|
394
|
+
std::cout << "EVAL rule " << pt->getRuleIndex() << ":" << pt->getPredIndex() << std::endl;
|
412
395
|
#endif
|
413
396
|
|
414
397
|
configs->hasSemanticContext = true;
|
415
|
-
if (evaluatePredicate(input, pt->
|
416
|
-
c = std::make_shared<LexerATNConfig>(config, t->target);
|
398
|
+
if (evaluatePredicate(input, pt->getRuleIndex(), pt->getPredIndex(), speculative)) {
|
399
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
417
400
|
}
|
418
401
|
break;
|
419
402
|
}
|
420
403
|
|
421
|
-
case
|
404
|
+
case TransitionType::ACTION:
|
422
405
|
if (config->context == nullptr|| config->context->hasEmptyPath()) {
|
423
406
|
// execute actions anywhere in the start rule for a token.
|
424
407
|
//
|
@@ -432,27 +415,27 @@ Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const
|
|
432
415
|
// getEpsilonTarget to return two configurations, so
|
433
416
|
// additional modifications are needed before we can support
|
434
417
|
// the split operation.
|
435
|
-
|
436
|
-
atn.lexerActions[static_cast<ActionTransition *>(t)->actionIndex]);
|
437
|
-
c = std::make_shared<LexerATNConfig>(config, t->target, lexerActionExecutor);
|
418
|
+
auto lexerActionExecutor = LexerActionExecutor::append(config->getLexerActionExecutor(),
|
419
|
+
atn.lexerActions[static_cast<const ActionTransition *>(t)->actionIndex]);
|
420
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target, std::move(lexerActionExecutor));
|
438
421
|
break;
|
439
422
|
}
|
440
423
|
else {
|
441
424
|
// ignore actions in referenced rules
|
442
|
-
c = std::make_shared<LexerATNConfig>(config, t->target);
|
425
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
443
426
|
break;
|
444
427
|
}
|
445
428
|
|
446
|
-
case
|
447
|
-
c = std::make_shared<LexerATNConfig>(config, t->target);
|
429
|
+
case TransitionType::EPSILON:
|
430
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
448
431
|
break;
|
449
432
|
|
450
|
-
case
|
451
|
-
case
|
452
|
-
case
|
433
|
+
case TransitionType::ATOM:
|
434
|
+
case TransitionType::RANGE:
|
435
|
+
case TransitionType::SET:
|
453
436
|
if (treatEofAsEpsilon) {
|
454
437
|
if (t->matches(Token::EOF, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
|
455
|
-
c = std::make_shared<LexerATNConfig>(config, t->target);
|
438
|
+
c = std::make_shared<LexerATNConfig>(*config, t->target);
|
456
439
|
break;
|
457
440
|
}
|
458
441
|
}
|
@@ -530,12 +513,15 @@ void LexerATNSimulator::addDFAEdge(dfa::DFAState *p, size_t t, dfa::DFAState *q)
|
|
530
513
|
return;
|
531
514
|
}
|
532
515
|
|
533
|
-
|
516
|
+
std::unique_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
|
534
517
|
p->edges[t - MIN_DFA_EDGE] = q; // connect
|
535
|
-
_edgeLock.writeUnlock();
|
536
518
|
}
|
537
519
|
|
538
520
|
dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
|
521
|
+
return addDFAState(configs, true);
|
522
|
+
}
|
523
|
+
|
524
|
+
dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs, bool suppressEdge) {
|
539
525
|
/* the lexer evaluates predicates on-the-fly; by this point configs
|
540
526
|
* should not contain any configurations with unevaluated predicates.
|
541
527
|
*/
|
@@ -543,8 +529,8 @@ dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
|
|
543
529
|
|
544
530
|
dfa::DFAState *proposed = new dfa::DFAState(std::unique_ptr<ATNConfigSet>(configs)); /* mem-check: managed by the DFA or deleted below */
|
545
531
|
Ref<ATNConfig> firstConfigWithRuleStopState = nullptr;
|
546
|
-
for (auto &c : configs->configs) {
|
547
|
-
if (is
|
532
|
+
for (const auto &c : configs->configs) {
|
533
|
+
if (RuleStopState::is(c->state)) {
|
548
534
|
firstConfigWithRuleStopState = c;
|
549
535
|
break;
|
550
536
|
}
|
@@ -552,28 +538,29 @@ dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
|
|
552
538
|
|
553
539
|
if (firstConfigWithRuleStopState != nullptr) {
|
554
540
|
proposed->isAcceptState = true;
|
555
|
-
proposed->lexerActionExecutor =
|
541
|
+
proposed->lexerActionExecutor = downCast<const LexerATNConfig&>(*firstConfigWithRuleStopState).getLexerActionExecutor();
|
556
542
|
proposed->prediction = atn.ruleToTokenType[firstConfigWithRuleStopState->state->ruleIndex];
|
557
543
|
}
|
558
544
|
|
559
545
|
dfa::DFA &dfa = _decisionToDFA[_mode];
|
560
546
|
|
561
|
-
|
562
|
-
|
563
|
-
auto
|
564
|
-
if (
|
547
|
+
{
|
548
|
+
std::unique_lock<std::shared_mutex> stateLock(atn._stateMutex);
|
549
|
+
auto [existing, inserted] = dfa.states.insert(proposed);
|
550
|
+
if (!inserted) {
|
565
551
|
delete proposed;
|
566
|
-
|
567
|
-
|
552
|
+
proposed = *existing;
|
553
|
+
} else {
|
554
|
+
// Previously we did a lookup, then set fields, then inserted. It was `dfa.states.size()`,
|
555
|
+
// since we already inserted we need to subtract one.
|
556
|
+
proposed->stateNumber = static_cast<int>(dfa.states.size() - 1);
|
557
|
+
proposed->configs->setReadonly(true);
|
558
|
+
}
|
559
|
+
if (!suppressEdge) {
|
560
|
+
dfa.s0 = proposed;
|
568
561
|
}
|
569
562
|
}
|
570
563
|
|
571
|
-
proposed->stateNumber = (int)dfa.states.size();
|
572
|
-
proposed->configs->setReadonly(true);
|
573
|
-
|
574
|
-
dfa.states.insert(proposed);
|
575
|
-
_stateLock.writeUnlock();
|
576
|
-
|
577
564
|
return proposed;
|
578
565
|
}
|
579
566
|
|
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
#pragma once
|
7
7
|
|
8
|
+
#include <atomic>
|
9
|
+
|
8
10
|
#include "atn/ATNSimulator.h"
|
9
11
|
#include "atn/LexerATNConfig.h"
|
10
12
|
#include "atn/ATNConfigSet.h"
|
@@ -15,38 +17,18 @@ namespace atn {
|
|
15
17
|
/// "dup" of ParserInterpreter
|
16
18
|
class ANTLR4CPP_PUBLIC LexerATNSimulator : public ATNSimulator {
|
17
19
|
protected:
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
size_t index;
|
24
|
-
size_t line;
|
25
|
-
size_t charPos;
|
26
|
-
dfa::DFAState *dfaState;
|
27
|
-
virtual void reset();
|
28
|
-
friend class LexerATNSimulator;
|
29
|
-
|
30
|
-
private:
|
31
|
-
void InitializeInstanceFields();
|
32
|
-
|
33
|
-
public:
|
34
|
-
SimState() {
|
35
|
-
InitializeInstanceFields();
|
36
|
-
}
|
37
|
-
};
|
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;
|
38
25
|
|
26
|
+
void reset();
|
27
|
+
};
|
39
28
|
|
40
29
|
public:
|
41
|
-
#if __cplusplus >= 201703L
|
42
30
|
static constexpr size_t MIN_DFA_EDGE = 0;
|
43
31
|
static constexpr size_t MAX_DFA_EDGE = 127; // forces unicode to stay in ATN
|
44
|
-
#else
|
45
|
-
enum : size_t {
|
46
|
-
MIN_DFA_EDGE = 0,
|
47
|
-
MAX_DFA_EDGE = 127, // forces unicode to stay in ATN
|
48
|
-
};
|
49
|
-
#endif
|
50
32
|
|
51
33
|
protected:
|
52
34
|
/// <summary>
|
@@ -89,11 +71,9 @@ namespace atn {
|
|
89
71
|
SimState _prevAccept;
|
90
72
|
|
91
73
|
public:
|
92
|
-
static int match_calls;
|
93
|
-
|
94
74
|
LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
|
95
75
|
LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
|
96
|
-
virtual ~LexerATNSimulator
|
76
|
+
virtual ~LexerATNSimulator() = default;
|
97
77
|
|
98
78
|
virtual void copyState(LexerATNSimulator *simulator);
|
99
79
|
virtual size_t match(CharStream *input, size_t mode);
|
@@ -140,10 +120,10 @@ namespace atn {
|
|
140
120
|
void getReachableConfigSet(CharStream *input, ATNConfigSet *closure_, // closure_ as we have a closure() already
|
141
121
|
ATNConfigSet *reach, size_t t);
|
142
122
|
|
143
|
-
virtual void accept(CharStream *input, const Ref<LexerActionExecutor> &lexerActionExecutor, size_t startIndex, size_t index,
|
123
|
+
virtual void accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t startIndex, size_t index,
|
144
124
|
size_t line, size_t charPos);
|
145
125
|
|
146
|
-
virtual ATNState *getReachableTarget(Transition *trans, size_t t);
|
126
|
+
virtual ATNState *getReachableTarget(const Transition *trans, size_t t);
|
147
127
|
|
148
128
|
virtual std::unique_ptr<ATNConfigSet> computeStartState(CharStream *input, ATNState *p);
|
149
129
|
|
@@ -160,7 +140,7 @@ namespace atn {
|
|
160
140
|
bool currentAltReachedAcceptState, bool speculative, bool treatEofAsEpsilon);
|
161
141
|
|
162
142
|
// side-effect: can alter configs.hasSemanticContext
|
163
|
-
virtual Ref<LexerATNConfig> getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, Transition *t,
|
143
|
+
virtual Ref<LexerATNConfig> getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
|
164
144
|
ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon);
|
165
145
|
|
166
146
|
/// <summary>
|
@@ -197,6 +177,8 @@ namespace atn {
|
|
197
177
|
/// </summary>
|
198
178
|
virtual dfa::DFAState *addDFAState(ATNConfigSet *configs);
|
199
179
|
|
180
|
+
virtual dfa::DFAState *addDFAState(ATNConfigSet *configs, bool suppressEdge);
|
181
|
+
|
200
182
|
public:
|
201
183
|
dfa::DFA& getDFA(size_t mode);
|
202
184
|
|
@@ -1,9 +1,15 @@
|
|
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
1
|
#include "LexerAction.h"
|
7
2
|
|
8
|
-
antlr4::atn
|
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;
|
9
15
|
}
|
@@ -21,13 +21,17 @@ namespace atn {
|
|
21
21
|
/// </summary>
|
22
22
|
class ANTLR4CPP_PUBLIC LexerAction {
|
23
23
|
public:
|
24
|
-
virtual ~LexerAction();
|
24
|
+
virtual ~LexerAction() = default;
|
25
25
|
|
26
26
|
/// <summary>
|
27
27
|
/// Gets the serialization type of the lexer action.
|
28
28
|
/// </summary>
|
29
29
|
/// <returns> The serialization type of the lexer action. </returns>
|
30
|
-
|
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; }
|
31
35
|
|
32
36
|
/// <summary>
|
33
37
|
/// Gets whether the lexer action is position-dependent. Position-dependent
|
@@ -42,7 +46,7 @@ namespace atn {
|
|
42
46
|
/// <returns> {@code true} if the lexer action semantics can be affected by the
|
43
47
|
/// position of the input <seealso cref="CharStream"/> at the time it is executed;
|
44
48
|
/// otherwise, {@code false}. </returns>
|
45
|
-
|
49
|
+
bool isPositionDependent() const { return _positionDependent; }
|
46
50
|
|
47
51
|
/// <summary>
|
48
52
|
/// Execute the lexer action in the context of the specified <seealso cref="Lexer"/>.
|
@@ -51,16 +55,46 @@ namespace atn {
|
|
51
55
|
/// positioned correctly prior to calling this method.</para>
|
52
56
|
/// </summary>
|
53
57
|
/// <param name="lexer"> The lexer instance. </param>
|
54
|
-
virtual void execute(Lexer *lexer) = 0;
|
58
|
+
virtual void execute(Lexer *lexer) const = 0;
|
55
59
|
|
56
|
-
|
57
|
-
|
58
|
-
virtual bool
|
59
|
-
return !(*this == obj);
|
60
|
-
}
|
60
|
+
size_t hashCode() const;
|
61
|
+
|
62
|
+
virtual bool equals(const LexerAction &other) const = 0;
|
61
63
|
|
62
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
|
+
}
|
63
98
|
};
|
64
99
|
|
65
|
-
}
|
66
|
-
} // namespace antlr4
|
100
|
+
} // namespace std
|