expressir 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +200 -9
  4. data/.gitignore +7 -2
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/Rakefile +4 -1
  8. data/bin/console +0 -1
  9. data/bin/rspec +3 -3
  10. data/exe/expressir +4 -2
  11. data/exe/format +1 -1
  12. data/exe/format-test +25 -25
  13. data/exe/generate-parser +16 -13
  14. data/expressir.gemspec +11 -9
  15. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -34
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
  17. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
  18. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +11 -4
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +20 -20
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -6
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +30 -19
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +13 -10
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -6
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -1
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -13
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +47 -27
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -6
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +19 -22
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +20 -20
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +10 -21
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -32
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +1 -1
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +2 -7
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -45
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -26
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -61
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +4 -55
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +34 -20
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +30 -35
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +35 -32
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -462
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -68
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +41 -42
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -106
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +9 -48
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +15 -33
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +164 -151
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +86 -127
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +9 -21
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -8
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +7 -20
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +34 -14
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +12 -53
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -33
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -62
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +13 -4
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +4 -4
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  221. data/ext/express-parser/antlrgen/Express.interp +1 -1
  222. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  223. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  224. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  225. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  226. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  227. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  228. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  229. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  230. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  231. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  232. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  233. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  234. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  235. data/ext/express-parser/express_parser.cpp +207 -75
  236. data/ext/express-parser/extconf.rb +10 -9
  237. data/lib/expressir/config.rb +1 -1
  238. data/lib/expressir/express/parser.rb +2 -2
  239. data/lib/expressir/express/visitor.rb +7 -5
  240. data/lib/expressir/model.rb +78 -78
  241. data/lib/expressir/version.rb +1 -1
  242. data/rakelib/antlr4-native.rake +63 -0
  243. data/rakelib/cross-ruby.rake +213 -162
  244. data/spec/acceptance/version_spec.rb +7 -2
  245. data/spec/expressir/express/cache_spec.rb +8 -5
  246. data/spec/expressir/express/formatter_spec.rb +16 -8
  247. data/spec/expressir/express/parser_spec.rb +17 -11
  248. data/spec/expressir/model/model_element_spec.rb +154 -146
  249. metadata +79 -91
  250. data/demo.rb +0 -18
  251. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  252. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  253. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  254. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  255. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  256. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  257. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  258. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  259. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  260. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  261. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  262. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  263. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  264. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  265. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  266. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  267. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  268. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  274. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  275. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  276. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  277. data/original/examples/employment/eclipse/.project +0 -17
  278. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  279. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  280. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  281. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  282. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  283. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  284. data/original/examples/employment/eclipse/readme.txt +0 -7
  285. data/original/examples/employment/employment_schema.exp +0 -33
  286. data/original/examples/employment/employment_schema.rb +0 -232
  287. data/original/examples/employment/employment_schema.xml +0 -93
  288. data/original/examples/employment/employment_schema___module.rb +0 -46
  289. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  290. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  291. data/original/examples/employment/example_employment_data.xml +0 -1
  292. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  293. data/original/examples/employment/example_employment_reader.rb +0 -30
  294. data/original/examples/employment/example_employment_writer.rb +0 -51
  295. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  296. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  297. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  298. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  299. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  300. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  301. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  302. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  303. data/original/exp2ruby.rb +0 -525
  304. data/original/expsm.rb +0 -34
  305. data/original/mapping_owl.rb +0 -1018
  306. data/original/mapping_sysml.rb +0 -2281
  307. data/original/mapping_uml2.rb +0 -599
  308. data/original/mapping_uml2_eclipse.rb +0 -433
  309. data/original/reeper.rb +0 -134
  310. 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