expressir 1.2.4 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +200 -21
  4. data/.gitignore +7 -2
  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 +12 -10
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -34
  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 +11 -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 +20 -20
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -6
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +30 -19
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +13 -10
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -6
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -1
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -13
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +47 -27
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -6
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +19 -22
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +20 -20
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +10 -21
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -32
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +1 -1
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +2 -7
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -45
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -26
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -61
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +4 -55
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +34 -20
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +30 -35
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +35 -32
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -462
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -68
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +41 -42
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -106
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +9 -48
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +15 -33
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +164 -151
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +86 -127
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +9 -21
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -8
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +7 -20
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +34 -14
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +12 -53
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -33
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -62
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +13 -4
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +4 -4
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  221. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  222. data/ext/express-parser/antlrgen/Express.interp +1 -1
  223. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  224. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  225. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  226. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  227. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  228. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  229. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  230. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  231. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  232. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  233. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  234. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  235. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  236. data/ext/express-parser/express_parser.cpp +294 -86
  237. data/ext/express-parser/extconf.rb +13 -12
  238. data/lib/expressir/config.rb +1 -1
  239. data/lib/expressir/express/parser.rb +3 -4
  240. data/lib/expressir/express/visitor.rb +7 -5
  241. data/lib/expressir/model.rb +78 -78
  242. data/lib/expressir/version.rb +1 -1
  243. data/rakelib/antlr4-native.rake +161 -0
  244. data/rakelib/cross-ruby.rake +213 -162
  245. data/spec/acceptance/version_spec.rb +17 -2
  246. data/spec/expressir/express/cache_spec.rb +23 -5
  247. data/spec/expressir/express/formatter_spec.rb +54 -8
  248. data/spec/expressir/express/parser_spec.rb +47 -11
  249. data/spec/expressir/model/model_element_spec.rb +198 -146
  250. data/spec/spec_helper.rb +7 -0
  251. metadata +81 -93
  252. data/demo.rb +0 -18
  253. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  254. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  255. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  256. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  257. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  258. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  259. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  260. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  261. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  262. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  263. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  264. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  265. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  266. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  267. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  268. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  274. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  275. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  276. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  277. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  278. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  279. data/original/examples/employment/eclipse/.project +0 -17
  280. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  281. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  282. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  283. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  284. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  285. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  286. data/original/examples/employment/eclipse/readme.txt +0 -7
  287. data/original/examples/employment/employment_schema.exp +0 -33
  288. data/original/examples/employment/employment_schema.rb +0 -232
  289. data/original/examples/employment/employment_schema.xml +0 -93
  290. data/original/examples/employment/employment_schema___module.rb +0 -46
  291. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  292. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  293. data/original/examples/employment/example_employment_data.xml +0 -1
  294. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  295. data/original/examples/employment/example_employment_reader.rb +0 -30
  296. data/original/examples/employment/example_employment_writer.rb +0 -51
  297. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  298. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  299. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  300. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  301. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  302. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  303. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  304. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  305. data/original/exp2ruby.rb +0 -525
  306. data/original/expsm.rb +0 -34
  307. data/original/mapping_owl.rb +0 -1018
  308. data/original/mapping_sysml.rb +0 -2281
  309. data/original/mapping_uml2.rb +0 -599
  310. data/original/mapping_uml2_eclipse.rb +0 -433
  311. data/original/reeper.rb +0 -134
  312. data/spec/expressr_spec.rb +0 -5
@@ -5,86 +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
- #if __cplusplus >= 201703L
17
- static constexpr size_t SERIALIZED_VERSION = 3;
18
- #else
19
- enum : size_t {
20
- SERIALIZED_VERSION = 3,
21
- };
22
- #endif
23
-
24
- /// This is the current serialized UUID.
25
- // ml: defined as function to avoid the “static initialization order fiasco”.
26
- static Guid SERIALIZED_UUID();
18
+ static constexpr size_t SERIALIZED_VERSION = 4;
27
19
 
28
20
  ATNDeserializer();
29
- ATNDeserializer(const ATNDeserializationOptions& dso);
30
- virtual ~ATNDeserializer();
31
-
32
- static Guid toUUID(const unsigned short *data, size_t offset);
33
-
34
- virtual ATN deserialize(const std::vector<uint16_t> &input);
35
- virtual void verifyATN(const ATN &atn);
36
-
37
- static void checkCondition(bool condition);
38
- static void checkCondition(bool condition, const std::string &message);
39
21
 
40
- static Transition *edgeFactory(const ATN &atn, size_t type, size_t src, size_t trg, size_t arg1, size_t arg2,
41
- size_t arg3, const std::vector<misc::IntervalSet> &sets);
22
+ explicit ATNDeserializer(ATNDeserializationOptions deserializationOptions);
42
23
 
43
- static ATNState *stateFactory(size_t type, size_t ruleIndex);
44
-
45
- protected:
46
- /// Determines if a particular serialized representation of an ATN supports
47
- /// a particular feature, identified by the <seealso cref="UUID"/> used for serializing
48
- /// the ATN at the time the feature was first introduced.
49
- ///
50
- /// <param name="feature"> The <seealso cref="UUID"/> marking the first time the feature was
51
- /// supported in the serialized ATN. </param>
52
- /// <param name="actualUuid"> The <seealso cref="UUID"/> of the actual serialized ATN which is
53
- /// currently being deserialized. </param>
54
- /// <returns> {@code true} if the {@code actualUuid} value represents a
55
- /// serialized ATN at or after the feature identified by {@code feature} was
56
- /// introduced; otherwise, {@code false}. </returns>
57
- virtual bool isFeatureSupported(const Guid &feature, const Guid &actualUuid);
58
- void markPrecedenceDecisions(const ATN &atn);
59
- 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;
60
26
 
61
27
  private:
62
- /// This is the earliest supported serialized UUID.
63
- static Guid BASE_SERIALIZED_UUID();
64
-
65
- /// This UUID indicates an extension of <seealso cref="BASE_SERIALIZED_UUID"/> for the
66
- /// addition of precedence predicates.
67
- static Guid ADDED_PRECEDENCE_TRANSITIONS();
68
-
69
- /**
70
- * This UUID indicates an extension of ADDED_PRECEDENCE_TRANSITIONS
71
- * for the addition of lexer actions encoded as a sequence of
72
- * LexerAction instances.
73
- */
74
- static Guid ADDED_LEXER_ACTIONS();
75
-
76
- /**
77
- * This UUID indicates the serialized ATN contains two sets of
78
- * IntervalSets, where the second set's values are encoded as
79
- * 32-bit integers to support the full Unicode SMP range up to U+10FFFF.
80
- */
81
- static Guid ADDED_UNICODE_SMP();
82
-
83
- /// This list contains all of the currently supported UUIDs, ordered by when
84
- /// the feature first appeared in this branch.
85
- static std::vector<Guid>& SUPPORTED_UUIDS();
86
-
87
- ATNDeserializationOptions deserializationOptions;
28
+ const ATNDeserializationOptions _deserializationOptions;
88
29
  };
89
30
 
90
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,62 +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();
78
- ATNState(ATNState const&) = delete;
79
-
80
- virtual ~ATNState();
81
-
82
- ATNState& operator=(ATNState const&) = delete;
83
-
84
- #if __cplusplus >= 201703L
85
86
  static constexpr size_t INITIAL_NUM_TRANSITIONS = 4;
86
87
  static constexpr size_t INVALID_STATE_NUMBER = std::numeric_limits<size_t>::max();
87
- #else
88
- enum : size_t {
89
- INITIAL_NUM_TRANSITIONS = 4,
90
- INVALID_STATE_NUMBER = static_cast<size_t>(-1), // std::numeric_limits<size_t>::max(); doesn't work in VS 2013
91
- };
92
- #endif
93
-
94
- enum {
95
- ATN_INVALID_TYPE = 0,
96
- BASIC = 1,
97
- RULE_START = 2,
98
- BLOCK_START = 3,
99
- PLUS_BLOCK_START = 4,
100
- STAR_BLOCK_START = 5,
101
- TOKEN_START = 6,
102
- RULE_STOP = 7,
103
- BLOCK_END = 8,
104
- STAR_LOOP_BACK = 9,
105
- STAR_LOOP_ENTRY = 10,
106
- PLUS_LOOP_BACK = 11,
107
- LOOP_END = 12
108
- };
109
-
110
- static const std::vector<std::string> serializationNames;
111
88
 
112
89
  size_t stateNumber = INVALID_STATE_NUMBER;
113
90
  size_t ruleIndex = 0; // at runtime, we don't have Rule objects
114
91
  bool epsilonOnlyTransitions = false;
115
92
 
116
- public:
117
- virtual size_t hashCode();
118
- bool operator == (const ATNState &other);
119
-
120
93
  /// Track the transitions emanating from this ATN state.
121
- std::vector<Transition*> transitions;
94
+ std::vector<ConstTransitionPtr> transitions;
95
+
96
+ ATNState() = delete;
97
+
98
+ ATNState(ATNState const&) = delete;
99
+
100
+ ATNState(ATNState&&) = delete;
101
+
102
+ virtual ~ATNState() = default;
103
+
104
+ ATNState& operator=(ATNState const&) = delete;
105
+
106
+ ATNState& operator=(ATNState&&) = delete;
107
+
108
+ void addTransition(ConstTransitionPtr e);
109
+ void addTransition(size_t index, ConstTransitionPtr e);
110
+ ConstTransitionPtr removeTransition(size_t index);
122
111
 
123
- virtual bool isNonGreedyExitState();
112
+ virtual size_t hashCode() const;
113
+ virtual bool equals(const ATNState &other) const;
114
+
115
+ virtual bool isNonGreedyExitState() const;
124
116
  virtual std::string toString() const;
125
- virtual void addTransition(Transition *e);
126
- virtual void addTransition(size_t index, Transition *e);
127
- virtual Transition* removeTransition(size_t index);
128
- virtual size_t getStateType() = 0;
117
+
118
+ ATNStateType getStateType() const { return _stateType; }
119
+
120
+ protected:
121
+ explicit ATNState(ATNStateType stateType) : _stateType(stateType) {}
129
122
 
130
123
  private:
131
124
  /// Used to cache lookahead during parsing, not used during construction.
@@ -133,8 +126,14 @@ namespace atn {
133
126
  misc::IntervalSet _nextTokenWithinRule;
134
127
  std::atomic<bool> _nextTokenUpdated { false };
135
128
 
129
+ const ATNStateType _stateType;
130
+
136
131
  friend class ATN;
137
132
  };
138
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
+
139
138
  } // namespace atn
140
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