expressir 1.2.3 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (328) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +223 -31
  4. data/.gitignore +7 -1
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/README.adoc +8 -0
  8. data/Rakefile +4 -1
  9. data/bin/console +0 -1
  10. data/bin/rspec +3 -3
  11. data/exe/expressir +4 -2
  12. data/exe/format +1 -1
  13. data/exe/format-test +25 -25
  14. data/exe/generate-parser +16 -13
  15. data/expressir.gemspec +11 -9
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -9
  17. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
  18. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +19 -4
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +51 -35
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +1 -1
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +1 -5
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +1 -5
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +1 -12
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +9 -6
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +43 -18
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +16 -6
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +1 -1
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +1 -1
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +1 -1
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +2 -3
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +9 -9
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +2 -2
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +2 -2
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +51 -31
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +1 -7
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +20 -23
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +21 -21
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +4 -4
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +12 -17
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +7 -7
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +1 -1
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +6 -6
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +4 -2
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -53
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -27
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -58
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +6 -57
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +35 -15
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +29 -36
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +36 -27
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -464
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -62
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +42 -36
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -108
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +10 -43
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +17 -28
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +169 -152
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +87 -116
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +11 -23
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +2 -9
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +15 -28
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +35 -9
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +2 -2
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +13 -54
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -23
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -40
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  221. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +14 -5
  222. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  223. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  224. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  225. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +30 -6
  226. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  227. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  228. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  229. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +1 -1
  230. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +1 -1
  231. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  232. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +1 -1
  233. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  234. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  235. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +1 -1
  236. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +1 -1
  237. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  238. data/ext/express-parser/antlrgen/Express.interp +1 -1
  239. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  240. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  241. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  242. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  243. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  244. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  245. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  246. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  247. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  248. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  249. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  250. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  251. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  252. data/ext/express-parser/express_parser.cpp +165 -101
  253. data/ext/express-parser/extconf.rb +14 -14
  254. data/lib/expressir/config.rb +1 -1
  255. data/lib/expressir/express/parser.rb +17 -15
  256. data/lib/expressir/express/visitor.rb +7 -3
  257. data/lib/expressir/model.rb +78 -78
  258. data/lib/expressir/version.rb +1 -1
  259. data/rakelib/antlr4-native.rake +161 -0
  260. data/rakelib/cross-ruby.rake +213 -162
  261. data/spec/acceptance/version_spec.rb +17 -2
  262. data/spec/expressir/express/cache_spec.rb +23 -5
  263. data/spec/expressir/express/formatter_spec.rb +54 -8
  264. data/spec/expressir/express/parser_spec.rb +47 -11
  265. data/spec/expressir/model/model_element_spec.rb +198 -146
  266. data/spec/spec_helper.rb +7 -0
  267. metadata +79 -91
  268. data/demo.rb +0 -18
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  274. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  275. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  276. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  277. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  278. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  279. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  280. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  281. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  282. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  283. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  284. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  285. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  286. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  287. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  288. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  289. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  290. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  291. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  292. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  293. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  294. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  295. data/original/examples/employment/eclipse/.project +0 -17
  296. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  297. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  298. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  299. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  300. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  301. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  302. data/original/examples/employment/eclipse/readme.txt +0 -7
  303. data/original/examples/employment/employment_schema.exp +0 -33
  304. data/original/examples/employment/employment_schema.rb +0 -232
  305. data/original/examples/employment/employment_schema.xml +0 -93
  306. data/original/examples/employment/employment_schema___module.rb +0 -46
  307. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  308. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  309. data/original/examples/employment/example_employment_data.xml +0 -1
  310. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  311. data/original/examples/employment/example_employment_reader.rb +0 -30
  312. data/original/examples/employment/example_employment_writer.rb +0 -51
  313. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  314. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  315. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  316. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  317. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  318. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  319. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  320. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  321. data/original/exp2ruby.rb +0 -525
  322. data/original/expsm.rb +0 -34
  323. data/original/mapping_owl.rb +0 -1018
  324. data/original/mapping_sysml.rb +0 -2281
  325. data/original/mapping_uml2.rb +0 -599
  326. data/original/mapping_uml2_eclipse.rb +0 -433
  327. data/original/reeper.rb +0 -134
  328. data/spec/expressr_spec.rb +0 -5
@@ -5,80 +5,27 @@
5
5
 
6
6
  #pragma once
7
7
 
8
- #include "atn/LexerAction.h"
9
8
  #include "atn/ATNDeserializationOptions.h"
9
+ #include "atn/SerializedATNView.h"
10
+ #include "atn/LexerAction.h"
11
+ #include "atn/Transition.h"
10
12
 
11
13
  namespace antlr4 {
12
14
  namespace atn {
13
15
 
14
- class ANTLR4CPP_PUBLIC ATNDeserializer {
16
+ class ANTLR4CPP_PUBLIC ATNDeserializer final {
15
17
  public:
16
- static const size_t SERIALIZED_VERSION;
17
-
18
- /// This is the current serialized UUID.
19
- // ml: defined as function to avoid the “static initialization order fiasco”.
20
- static Guid SERIALIZED_UUID();
18
+ static constexpr size_t SERIALIZED_VERSION = 4;
21
19
 
22
20
  ATNDeserializer();
23
- ATNDeserializer(const ATNDeserializationOptions& dso);
24
- virtual ~ATNDeserializer();
25
-
26
- static Guid toUUID(const unsigned short *data, size_t offset);
27
-
28
- virtual ATN deserialize(const std::vector<uint16_t> &input);
29
- virtual void verifyATN(const ATN &atn);
30
-
31
- static void checkCondition(bool condition);
32
- static void checkCondition(bool condition, const std::string &message);
33
21
 
34
- static Transition *edgeFactory(const ATN &atn, size_t type, size_t src, size_t trg, size_t arg1, size_t arg2,
35
- size_t arg3, const std::vector<misc::IntervalSet> &sets);
22
+ explicit ATNDeserializer(ATNDeserializationOptions deserializationOptions);
36
23
 
37
- static ATNState *stateFactory(size_t type, size_t ruleIndex);
38
-
39
- protected:
40
- /// Determines if a particular serialized representation of an ATN supports
41
- /// a particular feature, identified by the <seealso cref="UUID"/> used for serializing
42
- /// the ATN at the time the feature was first introduced.
43
- ///
44
- /// <param name="feature"> The <seealso cref="UUID"/> marking the first time the feature was
45
- /// supported in the serialized ATN. </param>
46
- /// <param name="actualUuid"> The <seealso cref="UUID"/> of the actual serialized ATN which is
47
- /// currently being deserialized. </param>
48
- /// <returns> {@code true} if the {@code actualUuid} value represents a
49
- /// serialized ATN at or after the feature identified by {@code feature} was
50
- /// introduced; otherwise, {@code false}. </returns>
51
- virtual bool isFeatureSupported(const Guid &feature, const Guid &actualUuid);
52
- void markPrecedenceDecisions(const ATN &atn);
53
- Ref<LexerAction> lexerActionFactory(LexerActionType type, int data1, int data2);
24
+ std::unique_ptr<ATN> deserialize(SerializedATNView input) const;
25
+ void verifyATN(const ATN &atn) const;
54
26
 
55
27
  private:
56
- /// This is the earliest supported serialized UUID.
57
- static Guid BASE_SERIALIZED_UUID();
58
-
59
- /// This UUID indicates an extension of <seealso cref="BASE_SERIALIZED_UUID"/> for the
60
- /// addition of precedence predicates.
61
- static Guid ADDED_PRECEDENCE_TRANSITIONS();
62
-
63
- /**
64
- * This UUID indicates an extension of ADDED_PRECEDENCE_TRANSITIONS
65
- * for the addition of lexer actions encoded as a sequence of
66
- * LexerAction instances.
67
- */
68
- static Guid ADDED_LEXER_ACTIONS();
69
-
70
- /**
71
- * This UUID indicates the serialized ATN contains two sets of
72
- * IntervalSets, where the second set's values are encoded as
73
- * 32-bit integers to support the full Unicode SMP range up to U+10FFFF.
74
- */
75
- static Guid ADDED_UNICODE_SMP();
76
-
77
- /// This list contains all of the currently supported UUIDs, ordered by when
78
- /// the feature first appeared in this branch.
79
- static std::vector<Guid>& SUPPORTED_UUIDS();
80
-
81
- ATNDeserializationOptions deserializationOptions;
28
+ const ATNDeserializationOptions _deserializationOptions;
82
29
  };
83
30
 
84
31
  } // namespace atn
@@ -3,61 +3,31 @@
3
3
  * can be found in the LICENSE.txt file in the project root.
4
4
  */
5
5
 
6
- #include "atn/ATNType.h"
6
+ #include "atn/ATNSimulator.h"
7
+
7
8
  #include "atn/ATNConfigSet.h"
8
- #include "dfa/DFAState.h"
9
9
  #include "atn/ATNDeserializer.h"
10
- #include "atn/EmptyPredictionContext.h"
11
-
12
- #include "atn/ATNSimulator.h"
10
+ #include "atn/ATNType.h"
11
+ #include "dfa/DFAState.h"
13
12
 
14
13
  using namespace antlr4;
15
14
  using namespace antlr4::dfa;
16
15
  using namespace antlr4::atn;
17
16
 
18
- const Ref<DFAState> ATNSimulator::ERROR = std::make_shared<DFAState>(INT32_MAX);
19
- antlrcpp::SingleWriteMultipleReadLock ATNSimulator::_stateLock;
20
- antlrcpp::SingleWriteMultipleReadLock ATNSimulator::_edgeLock;
17
+ const Ref<DFAState> ATNSimulator::ERROR = std::make_shared<DFAState>(std::numeric_limits<int>::max());
21
18
 
22
19
  ATNSimulator::ATNSimulator(const ATN &atn, PredictionContextCache &sharedContextCache)
23
- : atn(atn), _sharedContextCache(sharedContextCache) {
24
- }
25
-
26
- ATNSimulator::~ATNSimulator() {
27
- }
20
+ : atn(atn), _sharedContextCache(sharedContextCache) {}
28
21
 
29
22
  void ATNSimulator::clearDFA() {
30
23
  throw UnsupportedOperationException("This ATN simulator does not support clearing the DFA.");
31
24
  }
32
25
 
33
- PredictionContextCache& ATNSimulator::getSharedContextCache() {
26
+ PredictionContextCache& ATNSimulator::getSharedContextCache() const {
34
27
  return _sharedContextCache;
35
28
  }
36
29
 
37
- Ref<PredictionContext> ATNSimulator::getCachedContext(Ref<PredictionContext> const& context) {
30
+ Ref<const PredictionContext> ATNSimulator::getCachedContext(const Ref<const PredictionContext> &context) {
38
31
  // This function must only be called with an active state lock, as we are going to change a shared structure.
39
- std::map<Ref<PredictionContext>, Ref<PredictionContext>> visited;
40
- return PredictionContext::getCachedContext(context, _sharedContextCache, visited);
41
- }
42
-
43
- ATN ATNSimulator::deserialize(const std::vector<uint16_t> &data) {
44
- ATNDeserializer deserializer;
45
- return deserializer.deserialize(data);
46
- }
47
-
48
- void ATNSimulator::checkCondition(bool condition) {
49
- ATNDeserializer::checkCondition(condition);
50
- }
51
-
52
- void ATNSimulator::checkCondition(bool condition, const std::string &message) {
53
- ATNDeserializer::checkCondition(condition, message);
54
- }
55
-
56
- Transition *ATNSimulator::edgeFactory(const ATN &atn, int type, int src, int trg, int arg1, int arg2, int arg3,
57
- const std::vector<misc::IntervalSet> &sets) {
58
- return ATNDeserializer::edgeFactory(atn, type, src, trg, arg1, arg2, arg3, sets);
59
- }
60
-
61
- ATNState *ATNSimulator::stateFactory(int type, int ruleIndex) {
62
- return ATNDeserializer::stateFactory(type, ruleIndex);
32
+ return PredictionContext::getCachedContext(context, getSharedContextCache());
63
33
  }
@@ -6,9 +6,10 @@
6
6
  #pragma once
7
7
 
8
8
  #include "atn/ATN.h"
9
+ #include "atn/PredictionContext.h"
10
+ #include "atn/PredictionContextCache.h"
9
11
  #include "misc/IntervalSet.h"
10
12
  #include "support/CPPUtils.h"
11
- #include "atn/PredictionContext.h"
12
13
 
13
14
  namespace antlr4 {
14
15
  namespace atn {
@@ -20,7 +21,8 @@ namespace atn {
20
21
  const ATN &atn;
21
22
 
22
23
  ATNSimulator(const ATN &atn, PredictionContextCache &sharedContextCache);
23
- virtual ~ATNSimulator();
24
+
25
+ virtual ~ATNSimulator() = default;
24
26
 
25
27
  virtual void reset() = 0;
26
28
 
@@ -36,29 +38,11 @@ namespace atn {
36
38
  * @since 4.3
37
39
  */
38
40
  virtual void clearDFA();
39
- virtual PredictionContextCache& getSharedContextCache();
40
- virtual Ref<PredictionContext> getCachedContext(Ref<PredictionContext> const& context);
41
-
42
- /// @deprecated Use <seealso cref="ATNDeserializer#deserialize"/> instead.
43
- static ATN deserialize(const std::vector<uint16_t> &data);
44
41
 
45
- /// @deprecated Use <seealso cref="ATNDeserializer#checkCondition(boolean)"/> instead.
46
- static void checkCondition(bool condition);
47
-
48
- /// @deprecated Use <seealso cref="ATNDeserializer#checkCondition(boolean, String)"/> instead.
49
- static void checkCondition(bool condition, const std::string &message);
50
-
51
- /// @deprecated Use <seealso cref="ATNDeserializer#edgeFactory"/> instead.
52
- static Transition *edgeFactory(const ATN &atn, int type, int src, int trg, int arg1, int arg2, int arg3,
53
- const std::vector<misc::IntervalSet> &sets);
54
-
55
- /// @deprecated Use <seealso cref="ATNDeserializer#stateFactory"/> instead.
56
- static ATNState *stateFactory(int type, int ruleIndex);
42
+ PredictionContextCache& getSharedContextCache() const;
43
+ Ref<const PredictionContext> getCachedContext(const Ref<const PredictionContext> &context);
57
44
 
58
45
  protected:
59
- static antlrcpp::SingleWriteMultipleReadLock _stateLock; // Lock for DFA states.
60
- static antlrcpp::SingleWriteMultipleReadLock _edgeLock; // Lock for the sparse edge map in DFA states.
61
-
62
46
  /// <summary>
63
47
  /// The context cache maps all PredictionContext objects that are equals()
64
48
  /// to a single cached copy. This cache is shared across all contexts
@@ -13,30 +13,15 @@
13
13
  using namespace antlr4::atn;
14
14
  using namespace antlrcpp;
15
15
 
16
- ATNState::ATNState() {
17
- }
18
-
19
- ATNState::~ATNState() {
20
- for (auto transition : transitions) {
21
- delete transition;
22
- }
23
- }
24
-
25
- const std::vector<std::string> ATNState::serializationNames = {
26
- "INVALID", "BASIC", "RULE_START", "BLOCK_START",
27
- "PLUS_BLOCK_START", "STAR_BLOCK_START", "TOKEN_START", "RULE_STOP",
28
- "BLOCK_END", "STAR_LOOP_BACK", "STAR_LOOP_ENTRY", "PLUS_LOOP_BACK", "LOOP_END"
29
- };
30
-
31
- size_t ATNState::hashCode() {
16
+ size_t ATNState::hashCode() const {
32
17
  return stateNumber;
33
18
  }
34
19
 
35
- bool ATNState::operator == (const ATNState &other) {
20
+ bool ATNState::equals(const ATNState &other) const {
36
21
  return stateNumber == other.stateNumber;
37
22
  }
38
23
 
39
- bool ATNState::isNonGreedyExitState() {
24
+ bool ATNState::isNonGreedyExitState() const {
40
25
  return false;
41
26
  }
42
27
 
@@ -44,14 +29,13 @@ std::string ATNState::toString() const {
44
29
  return std::to_string(stateNumber);
45
30
  }
46
31
 
47
- void ATNState::addTransition(Transition *e) {
48
- addTransition(transitions.size(), e);
32
+ void ATNState::addTransition(ConstTransitionPtr e) {
33
+ addTransition(transitions.size(), std::move(e));
49
34
  }
50
35
 
51
- void ATNState::addTransition(size_t index, Transition *e) {
52
- for (Transition *transition : transitions)
36
+ void ATNState::addTransition(size_t index, ConstTransitionPtr e) {
37
+ for (const auto &transition : transitions)
53
38
  if (transition->target->stateNumber == e->target->stateNumber) {
54
- delete e;
55
39
  return;
56
40
  }
57
41
 
@@ -62,11 +46,11 @@ void ATNState::addTransition(size_t index, Transition *e) {
62
46
  epsilonOnlyTransitions = false;
63
47
  }
64
48
 
65
- transitions.insert(transitions.begin() + index, e);
49
+ transitions.insert(transitions.begin() + index, std::move(e));
66
50
  }
67
51
 
68
- Transition *ATNState::removeTransition(size_t index) {
69
- Transition *result = transitions[index];
52
+ ConstTransitionPtr ATNState::removeTransition(size_t index) {
53
+ ConstTransitionPtr result = std::move(transitions[index]);
70
54
  transitions.erase(transitions.begin() + index);
71
55
  return result;
72
56
  }
@@ -6,6 +6,8 @@
6
6
  #pragma once
7
7
 
8
8
  #include "misc/IntervalSet.h"
9
+ #include "atn/Transition.h"
10
+ #include "atn/ATNStateType.h"
9
11
 
10
12
  namespace antlr4 {
11
13
  namespace atn {
@@ -70,55 +72,53 @@ namespace atn {
70
72
  ///
71
73
  /// <embed src="images/OptionalNonGreedy.svg" type="image/svg+xml"/>
72
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
73
81
  class ANTLR4CPP_PUBLIC ATN;
82
+ #endif
74
83
 
75
84
  class ANTLR4CPP_PUBLIC ATNState {
76
85
  public:
77
- ATNState();
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
+
78
98
  ATNState(ATNState const&) = delete;
79
99
 
80
- virtual ~ATNState();
100
+ ATNState(ATNState&&) = delete;
101
+
102
+ virtual ~ATNState() = default;
81
103
 
82
104
  ATNState& operator=(ATNState const&) = delete;
83
105
 
84
- static const size_t INITIAL_NUM_TRANSITIONS = 4;
85
- static const size_t INVALID_STATE_NUMBER = static_cast<size_t>(-1); // std::numeric_limits<size_t>::max();
86
-
87
- enum {
88
- ATN_INVALID_TYPE = 0,
89
- BASIC = 1,
90
- RULE_START = 2,
91
- BLOCK_START = 3,
92
- PLUS_BLOCK_START = 4,
93
- STAR_BLOCK_START = 5,
94
- TOKEN_START = 6,
95
- RULE_STOP = 7,
96
- BLOCK_END = 8,
97
- STAR_LOOP_BACK = 9,
98
- STAR_LOOP_ENTRY = 10,
99
- PLUS_LOOP_BACK = 11,
100
- LOOP_END = 12
101
- };
102
-
103
- static const std::vector<std::string> serializationNames;
106
+ ATNState& operator=(ATNState&&) = delete;
104
107
 
105
- size_t stateNumber = INVALID_STATE_NUMBER;
106
- size_t ruleIndex = 0; // at runtime, we don't have Rule objects
107
- bool epsilonOnlyTransitions = false;
108
+ void addTransition(ConstTransitionPtr e);
109
+ void addTransition(size_t index, ConstTransitionPtr e);
110
+ ConstTransitionPtr removeTransition(size_t index);
108
111
 
109
- public:
110
- virtual size_t hashCode();
111
- bool operator == (const ATNState &other);
112
-
113
- /// Track the transitions emanating from this ATN state.
114
- std::vector<Transition*> transitions;
112
+ virtual size_t hashCode() const;
113
+ virtual bool equals(const ATNState &other) const;
115
114
 
116
- virtual bool isNonGreedyExitState();
115
+ virtual bool isNonGreedyExitState() const;
117
116
  virtual std::string toString() const;
118
- virtual void addTransition(Transition *e);
119
- virtual void addTransition(size_t index, Transition *e);
120
- virtual Transition* removeTransition(size_t index);
121
- virtual size_t getStateType() = 0;
117
+
118
+ ATNStateType getStateType() const { return _stateType; }
119
+
120
+ protected:
121
+ explicit ATNState(ATNStateType stateType) : _stateType(stateType) {}
122
122
 
123
123
  private:
124
124
  /// Used to cache lookahead during parsing, not used during construction.
@@ -126,8 +126,14 @@ namespace atn {
126
126
  misc::IntervalSet _nextTokenWithinRule;
127
127
  std::atomic<bool> _nextTokenUpdated { false };
128
128
 
129
+ const ATNStateType _stateType;
130
+
129
131
  friend class ATN;
130
132
  };
131
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
+
132
138
  } // namespace atn
133
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
@@ -8,15 +8,11 @@
8
8
  using namespace antlr4::atn;
9
9
 
10
10
  ActionTransition::ActionTransition(ATNState *target, size_t ruleIndex)
11
- : Transition(target), ruleIndex(ruleIndex), actionIndex(INVALID_INDEX), isCtxDependent(false) {
11
+ : Transition(TransitionType::ACTION, target), ruleIndex(ruleIndex), actionIndex(INVALID_INDEX), isCtxDependent(false) {
12
12
  }
13
13
 
14
14
  ActionTransition::ActionTransition(ATNState *target, size_t ruleIndex, size_t actionIndex, bool isCtxDependent)
15
- : Transition(target), ruleIndex(ruleIndex), actionIndex(actionIndex), isCtxDependent(isCtxDependent) {
16
- }
17
-
18
- Transition::SerializationType ActionTransition::getSerializationType() const {
19
- return ACTION;
15
+ : Transition(TransitionType::ACTION, target), ruleIndex(ruleIndex), actionIndex(actionIndex), isCtxDependent(isCtxDependent) {
20
16
  }
21
17
 
22
18
  bool ActionTransition::isEpsilon() const {
@@ -12,6 +12,10 @@ namespace atn {
12
12
 
13
13
  class ANTLR4CPP_PUBLIC ActionTransition final : public Transition {
14
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
+
15
19
  const size_t ruleIndex;
16
20
  const size_t actionIndex;
17
21
  const bool isCtxDependent; // e.g., $i ref in action
@@ -20,8 +24,6 @@ namespace atn {
20
24
 
21
25
  ActionTransition(ATNState *target, size_t ruleIndex, size_t actionIndex, bool isCtxDependent);
22
26
 
23
- virtual SerializationType getSerializationType() const override;
24
-
25
27
  virtual bool isEpsilon() const override;
26
28
 
27
29
  virtual bool matches(size_t symbol, size_t minVocabSymbol, size_t maxVocabSymbol) const override;
@@ -3,25 +3,39 @@
3
3
  * can be found in the LICENSE.txt file in the project root.
4
4
  */
5
5
 
6
- #include "support/Arrays.h"
7
- #include "atn/SingletonPredictionContext.h"
8
-
9
6
  #include "atn/ArrayPredictionContext.h"
10
7
 
8
+ #include <cstring>
9
+
10
+ #include "atn/SingletonPredictionContext.h"
11
+ #include "misc/MurmurHash.h"
12
+ #include "support/Casts.h"
13
+
11
14
  using namespace antlr4::atn;
15
+ using namespace antlr4::misc;
16
+ using namespace antlrcpp;
12
17
 
13
- ArrayPredictionContext::ArrayPredictionContext(Ref<SingletonPredictionContext> const& a)
14
- : ArrayPredictionContext({ a->parent }, { a->returnState }) {
15
- }
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
+ }
16
27
 
17
- ArrayPredictionContext::ArrayPredictionContext(std::vector<Ref<PredictionContext>> const& parents_,
18
- std::vector<size_t> const& returnStates)
19
- : PredictionContext(calculateHashCode(parents_, returnStates)), parents(parents_), returnStates(returnStates) {
20
- assert(parents.size() > 0);
21
- assert(returnStates.size() > 0);
22
28
  }
23
29
 
24
- ArrayPredictionContext::~ArrayPredictionContext() {
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());
25
39
  }
26
40
 
27
41
  bool ArrayPredictionContext::isEmpty() const {
@@ -33,7 +47,7 @@ size_t ArrayPredictionContext::size() const {
33
47
  return returnStates.size();
34
48
  }
35
49
 
36
- Ref<PredictionContext> ArrayPredictionContext::getParent(size_t index) const {
50
+ const Ref<const PredictionContext>& ArrayPredictionContext::getParent(size_t index) const {
37
51
  return parents[index];
38
52
  }
39
53
 
@@ -41,18 +55,31 @@ size_t ArrayPredictionContext::getReturnState(size_t index) const {
41
55
  return returnStates[index];
42
56
  }
43
57
 
44
- bool ArrayPredictionContext::operator == (PredictionContext const& o) const {
45
- if (this == &o) {
46
- return true;
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);
47
63
  }
48
-
49
- const ArrayPredictionContext *other = dynamic_cast<const ArrayPredictionContext*>(&o);
50
- if (other == nullptr || hashCode() != other->hashCode()) {
51
- return false; // can't be same if hash is different
64
+ for (const auto &returnState : returnStates) {
65
+ hash = MurmurHash::update(hash, returnState);
52
66
  }
67
+ return MurmurHash::finish(hash, 1 + parents.size() + returnStates.size());
68
+ }
53
69
 
54
- return antlrcpp::Arrays::equals(returnStates, other->returnStates) &&
55
- antlrcpp::Arrays::equals(parents, other->parents);
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);
56
83
  }
57
84
 
58
85
  std::string ArrayPredictionContext::toString() const {
@@ -13,29 +13,37 @@ namespace atn {
13
13
 
14
14
  class SingletonPredictionContext;
15
15
 
16
- class ANTLR4CPP_PUBLIC ArrayPredictionContext : public PredictionContext {
16
+ class ANTLR4CPP_PUBLIC ArrayPredictionContext final : public PredictionContext {
17
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
+
18
22
  /// Parent can be empty only if full ctx mode and we make an array
19
23
  /// from EMPTY and non-empty. We merge EMPTY by using null parent and
20
24
  /// returnState == EMPTY_RETURN_STATE.
21
25
  // Also here: we use a strong reference to our parents to avoid having them freed prematurely.
22
26
  // See also SinglePredictionContext.
23
- const std::vector<Ref<PredictionContext>> parents;
27
+ std::vector<Ref<const PredictionContext>> parents;
24
28
 
25
29
  /// Sorted for merge, no duplicates; if present, EMPTY_RETURN_STATE is always last.
26
- const std::vector<size_t> returnStates;
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);
27
35
 
28
- ArrayPredictionContext(Ref<SingletonPredictionContext> const& a);
29
- ArrayPredictionContext(std::vector<Ref<PredictionContext>> const& parents_, std::vector<size_t> const& returnStates);
30
- virtual ~ArrayPredictionContext();
36
+ ArrayPredictionContext(ArrayPredictionContext&&) = default;
31
37
 
32
- virtual bool isEmpty() const override;
33
- virtual size_t size() const override;
34
- virtual Ref<PredictionContext> getParent(size_t index) const override;
35
- virtual size_t getReturnState(size_t index) const override;
36
- bool operator == (const PredictionContext &o) const override;
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;
37
44
 
38
- virtual std::string toString() const override;
45
+ protected:
46
+ size_t hashCodeImpl() const override;
39
47
  };
40
48
 
41
49
  } // namespace atn
@@ -11,11 +11,7 @@
11
11
  using namespace antlr4::misc;
12
12
  using namespace antlr4::atn;
13
13
 
14
- AtomTransition::AtomTransition(ATNState *target, size_t label) : Transition(target), _label(label) {
15
- }
16
-
17
- Transition::SerializationType AtomTransition::getSerializationType() const {
18
- return ATOM;
14
+ AtomTransition::AtomTransition(ATNState *target, size_t label) : Transition(TransitionType::ATOM, target), _label(label) {
19
15
  }
20
16
 
21
17
  IntervalSet AtomTransition::label() const {