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
@@ -12,9 +12,13 @@ namespace atn {
12
12
 
13
13
  class ANTLR4CPP_PUBLIC StarLoopbackState final : public ATNState {
14
14
  public:
15
- StarLoopEntryState *getLoopEntryState();
15
+ static bool is(const ATNState &atnState) { return atnState.getStateType() == ATNStateType::STAR_LOOP_BACK; }
16
16
 
17
- virtual size_t getStateType() override;
17
+ static bool is(const ATNState *atnState) { return atnState != nullptr && is(*atnState); }
18
+
19
+ StarLoopbackState() : ATNState(ATNStateType::STAR_LOOP_BACK) {}
20
+
21
+ StarLoopEntryState *getLoopEntryState() const;
18
22
  };
19
23
 
20
24
  } // namespace atn
@@ -12,9 +12,12 @@ namespace atn {
12
12
 
13
13
  /// The Tokens rule start state linking to each lexer rule start state.
14
14
  class ANTLR4CPP_PUBLIC TokensStartState final : public DecisionState {
15
-
16
15
  public:
17
- virtual size_t getStateType() override;
16
+ static bool is(const ATNState &atnState) { return atnState.getStateType() == ATNStateType::TOKEN_START; }
17
+
18
+ static bool is(const ATNState *atnState) { return atnState != nullptr && is(*atnState); }
19
+
20
+ TokensStartState() : DecisionState(ATNStateType::TOKEN_START) {}
18
21
  };
19
22
 
20
23
  } // namespace atn
@@ -10,14 +10,9 @@
10
10
 
11
11
  using namespace antlr4;
12
12
  using namespace antlr4::atn;
13
-
14
13
  using namespace antlrcpp;
15
14
 
16
- const std::vector<std::string> Transition::serializationNames = {
17
- "INVALID", "EPSILON", "RANGE", "RULE", "PREDICATE", "ATOM", "ACTION", "SET", "NOT_SET", "WILDCARD", "PRECEDENCE"
18
- };
19
-
20
- Transition::Transition(ATNState *target) {
15
+ Transition::Transition(TransitionType transitionType, ATNState *target) : _transitionType(transitionType) {
21
16
  if (target == nullptr) {
22
17
  throw NullPointerException("target cannot be null.");
23
18
  }
@@ -25,9 +20,6 @@ Transition::Transition(ATNState *target) {
25
20
  this->target = target;
26
21
  }
27
22
 
28
- Transition::~Transition() {
29
- }
30
-
31
23
  bool Transition::isEpsilon() const {
32
24
  return false;
33
25
  }
@@ -6,6 +6,7 @@
6
6
  #pragma once
7
7
 
8
8
  #include "misc/IntervalSet.h"
9
+ #include "atn/TransitionType.h"
9
10
 
10
11
  namespace antlr4 {
11
12
  namespace atn {
@@ -25,33 +26,13 @@ namespace atn {
25
26
  /// </summary>
26
27
  class ANTLR4CPP_PUBLIC Transition {
27
28
  public:
28
- // constants for serialization
29
- enum SerializationType {
30
- EPSILON = 1,
31
- RANGE = 2,
32
- RULE = 3,
33
- PREDICATE = 4, // e.g., {isType(input.LT(1))}?
34
- ATOM = 5,
35
- ACTION = 6,
36
- SET = 7, // ~(A|B) or ~atom, wildcard, which convert to next 2
37
- NOT_SET = 8,
38
- WILDCARD = 9,
39
- PRECEDENCE = 10,
40
- };
41
-
42
- static const std::vector<std::string> serializationNames;
43
-
44
29
  /// The target of this transition.
45
30
  // ml: this is a reference into the ATN.
46
31
  ATNState *target;
47
32
 
48
- virtual ~Transition();
33
+ virtual ~Transition() = default;
49
34
 
50
- protected:
51
- Transition(ATNState *target);
52
-
53
- public:
54
- virtual SerializationType getSerializationType() const = 0;
35
+ TransitionType getTransitionType() const { return _transitionType; }
55
36
 
56
37
  /**
57
38
  * Determines if the transition is an "epsilon" transition.
@@ -70,7 +51,15 @@ namespace atn {
70
51
 
71
52
  Transition(Transition const&) = delete;
72
53
  Transition& operator=(Transition const&) = delete;
54
+
55
+ protected:
56
+ Transition(TransitionType transitionType, ATNState *target);
57
+
58
+ private:
59
+ const TransitionType _transitionType;
73
60
  };
74
61
 
62
+ using ConstTransitionPtr = std::unique_ptr<const Transition>;
63
+
75
64
  } // namespace atn
76
65
  } // namespace antlr4
@@ -0,0 +1,27 @@
1
+ #include "atn/TransitionType.h"
2
+
3
+ std::string antlr4::atn::transitionTypeName(TransitionType transitionType) {
4
+ switch (transitionType) {
5
+ case TransitionType::EPSILON:
6
+ return "EPSILON";
7
+ case TransitionType::RANGE:
8
+ return "RANGE";
9
+ case TransitionType::RULE:
10
+ return "RULE";
11
+ case TransitionType::PREDICATE:
12
+ return "PREDICATE";
13
+ case TransitionType::ATOM:
14
+ return "ATOM";
15
+ case TransitionType::ACTION:
16
+ return "ACTION";
17
+ case TransitionType::SET:
18
+ return "SET";
19
+ case TransitionType::NOT_SET:
20
+ return "NOT_SET";
21
+ case TransitionType::WILDCARD:
22
+ return "WILDCARD";
23
+ case TransitionType::PRECEDENCE:
24
+ return "PRECEDENCE";
25
+ }
26
+ return "UNKNOWN";
27
+ }
@@ -0,0 +1,33 @@
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 transition serialization.
17
+ enum class TransitionType : size_t {
18
+ EPSILON = 1,
19
+ RANGE = 2,
20
+ RULE = 3,
21
+ PREDICATE = 4, // e.g., {isType(input.LT(1))}?
22
+ ATOM = 5,
23
+ ACTION = 6,
24
+ SET = 7, // ~(A|B) or ~atom, wildcard, which convert to next 2
25
+ NOT_SET = 8,
26
+ WILDCARD = 9,
27
+ PRECEDENCE = 10,
28
+ };
29
+
30
+ ANTLR4CPP_PUBLIC std::string transitionTypeName(TransitionType transitionType);
31
+
32
+ } // namespace atn
33
+ } // namespace antlr4
@@ -9,11 +9,7 @@
9
9
 
10
10
  using namespace antlr4::atn;
11
11
 
12
- WildcardTransition::WildcardTransition(ATNState *target) : Transition(target) {
13
- }
14
-
15
- Transition::SerializationType WildcardTransition::getSerializationType() const {
16
- return WILDCARD;
12
+ WildcardTransition::WildcardTransition(ATNState *target) : Transition(TransitionType::WILDCARD, target) {
17
13
  }
18
14
 
19
15
  bool WildcardTransition::matches(size_t symbol, size_t minVocabSymbol, size_t maxVocabSymbol) const {
@@ -12,9 +12,11 @@ namespace atn {
12
12
 
13
13
  class ANTLR4CPP_PUBLIC WildcardTransition final : public Transition {
14
14
  public:
15
- WildcardTransition(ATNState *target);
15
+ static bool is(const Transition &transition) { return transition.getTransitionType() == TransitionType::WILDCARD; }
16
16
 
17
- virtual SerializationType getSerializationType() const override;
17
+ static bool is(const Transition *transition) { return transition != nullptr && is(*transition); }
18
+
19
+ explicit WildcardTransition(ATNState *target);
18
20
 
19
21
  virtual bool matches(size_t symbol, size_t minVocabSymbol, size_t maxVocabSymbol) const override;
20
22
 
@@ -8,6 +8,7 @@
8
8
  #include "support/CPPUtils.h"
9
9
  #include "atn/StarLoopEntryState.h"
10
10
  #include "atn/ATNConfigSet.h"
11
+ #include "support/Casts.h"
11
12
 
12
13
  #include "dfa/DFA.h"
13
14
 
@@ -22,8 +23,8 @@ DFA::DFA(atn::DecisionState *atnStartState, size_t decision)
22
23
  : atnStartState(atnStartState), s0(nullptr), decision(decision) {
23
24
 
24
25
  _precedenceDfa = false;
25
- if (is<atn::StarLoopEntryState *>(atnStartState)) {
26
- if (static_cast<atn::StarLoopEntryState *>(atnStartState)->isPrecedenceDecision) {
26
+ if (atn::StarLoopEntryState::is(atnStartState)) {
27
+ if (downCast<atn::StarLoopEntryState*>(atnStartState)->isPrecedenceDecision) {
27
28
  _precedenceDfa = true;
28
29
  s0 = new DFAState(std::unique_ptr<atn::ATNConfigSet>(new atn::ATNConfigSet()));
29
30
  s0->isAcceptState = false;
@@ -32,13 +33,12 @@ DFA::DFA(atn::DecisionState *atnStartState, size_t decision)
32
33
  }
33
34
  }
34
35
 
35
- DFA::DFA(DFA &&other) : atnStartState(other.atnStartState), decision(other.decision) {
36
+ DFA::DFA(DFA &&other) : atnStartState(other.atnStartState), s0(other.s0), decision(other.decision) {
36
37
  // Source states are implicitly cleared by the move.
37
38
  states = std::move(other.states);
38
39
 
39
40
  other.atnStartState = nullptr;
40
41
  other.decision = 0;
41
- s0 = other.s0;
42
42
  other.s0 = nullptr;
43
43
  _precedenceDfa = other._precedenceDfa;
44
44
  other._precedenceDfa = false;
@@ -52,8 +52,9 @@ DFA::~DFA() {
52
52
  delete state;
53
53
  }
54
54
 
55
- if (!s0InList)
55
+ if (!s0InList) {
56
56
  delete s0;
57
+ }
57
58
  }
58
59
 
59
60
  bool DFA::isPrecedenceDfa() const {
@@ -70,7 +71,7 @@ DFAState* DFA::getPrecedenceStartState(int precedence) const {
70
71
  return iterator->second;
71
72
  }
72
73
 
73
- void DFA::setPrecedenceStartState(int precedence, DFAState *startState, SingleWriteMultipleReadLock &lock) {
74
+ void DFA::setPrecedenceStartState(int precedence, DFAState *startState) {
74
75
  if (!isPrecedenceDfa()) {
75
76
  throw IllegalStateException("Only precedence DFAs may contain a precedence start state.");
76
77
  }
@@ -79,11 +80,7 @@ void DFA::setPrecedenceStartState(int precedence, DFAState *startState, SingleWr
79
80
  return;
80
81
  }
81
82
 
82
- {
83
- lock.writeLock();
84
- s0->edges[precedence] = startState;
85
- lock.writeUnlock();
86
- }
83
+ s0->edges[precedence] = startState;
87
84
  }
88
85
 
89
86
  std::vector<DFAState *> DFA::getStates() const {
@@ -98,15 +95,6 @@ std::vector<DFAState *> DFA::getStates() const {
98
95
  return result;
99
96
  }
100
97
 
101
- std::string DFA::toString(const std::vector<std::string> &tokenNames) {
102
- if (s0 == nullptr) {
103
- return "";
104
- }
105
- DFASerializer serializer(this, tokenNames);
106
-
107
- return serializer.toString();
108
- }
109
-
110
98
  std::string DFA::toString(const Vocabulary &vocabulary) const {
111
99
  if (s0 == nullptr) {
112
100
  return "";
@@ -116,7 +104,7 @@ std::string DFA::toString(const Vocabulary &vocabulary) const {
116
104
  return serializer.toString();
117
105
  }
118
106
 
119
- std::string DFA::toLexerString() {
107
+ std::string DFA::toLexerString() const {
120
108
  if (s0 == nullptr) {
121
109
  return "";
122
110
  }
@@ -7,29 +7,38 @@
7
7
 
8
8
  #include "dfa/DFAState.h"
9
9
 
10
- namespace antlrcpp {
11
- class SingleWriteMultipleReadLock;
12
- }
13
-
14
10
  namespace antlr4 {
15
11
  namespace dfa {
16
12
 
17
- class ANTLR4CPP_PUBLIC DFA {
13
+ class ANTLR4CPP_PUBLIC DFA final {
14
+ private:
15
+ struct DFAStateHasher final {
16
+ size_t operator()(const DFAState *dfaState) const {
17
+ return dfaState->hashCode();
18
+ }
19
+ };
20
+
21
+ struct DFAStateComparer final {
22
+ bool operator()(const DFAState *lhs, const DFAState *rhs) const {
23
+ return lhs == rhs || *lhs == *rhs;
24
+ }
25
+ };
26
+
18
27
  public:
19
28
  /// A set of all DFA states. Use a map so we can get old state back.
20
29
  /// Set only allows you to see if it's there.
21
30
 
22
31
  /// From which ATN state did we create this DFA?
23
32
  atn::DecisionState *atnStartState;
24
- std::unordered_set<DFAState *, DFAState::Hasher, DFAState::Comparer> states; // States are owned by this class.
33
+ std::unordered_set<DFAState*, DFAStateHasher, DFAStateComparer> states; // States are owned by this class.
25
34
  DFAState *s0;
26
35
  size_t decision;
27
36
 
28
- DFA(atn::DecisionState *atnStartState);
37
+ explicit DFA(atn::DecisionState *atnStartState);
29
38
  DFA(atn::DecisionState *atnStartState, size_t decision);
30
39
  DFA(const DFA &other) = delete;
31
40
  DFA(DFA &&other);
32
- virtual ~DFA();
41
+ ~DFA();
33
42
 
34
43
  /**
35
44
  * Gets whether this DFA is a precedence DFA. Precedence DFAs use a special
@@ -66,18 +75,14 @@ namespace dfa {
66
75
  * @throws IllegalStateException if this is not a precedence DFA.
67
76
  * @see #isPrecedenceDfa()
68
77
  */
69
- void setPrecedenceStartState(int precedence, DFAState *startState, antlrcpp::SingleWriteMultipleReadLock &lock);
78
+ void setPrecedenceStartState(int precedence, DFAState *startState);
70
79
 
71
80
  /// Return a list of all states in this DFA, ordered by state number.
72
- virtual std::vector<DFAState *> getStates() const;
81
+ std::vector<DFAState *> getStates() const;
73
82
 
74
- /**
75
- * @deprecated Use {@link #toString(Vocabulary)} instead.
76
- */
77
- virtual std::string toString(const std::vector<std::string>& tokenNames);
78
83
  std::string toString(const Vocabulary &vocabulary) const;
79
84
 
80
- virtual std::string toLexerString();
85
+ std::string toLexerString() const;
81
86
 
82
87
  private:
83
88
  /**
@@ -10,16 +10,9 @@
10
10
 
11
11
  using namespace antlr4::dfa;
12
12
 
13
- DFASerializer::DFASerializer(const DFA *dfa, const std::vector<std::string>& tokenNames)
14
- : DFASerializer(dfa, Vocabulary::fromTokenNames(tokenNames)) {
15
- }
16
-
17
13
  DFASerializer::DFASerializer(const DFA *dfa, const Vocabulary &vocabulary) : _dfa(dfa), _vocabulary(vocabulary) {
18
14
  }
19
15
 
20
- DFASerializer::~DFASerializer() {
21
- }
22
-
23
16
  std::string DFASerializer::toString() const {
24
17
  if (_dfa->s0 == nullptr) {
25
18
  return "";
@@ -55,7 +48,7 @@ std::string DFASerializer::getStateString(DFAState *s) const {
55
48
  if (!s->predicates.empty()) {
56
49
  std::string buf;
57
50
  for (size_t i = 0; i < s->predicates.size(); i++) {
58
- buf.append(s->predicates[i]->toString());
51
+ buf.append(s->predicates[i].toString());
59
52
  }
60
53
  return baseStateStr + "=>" + buf;
61
54
  } else {
@@ -13,15 +13,15 @@ namespace dfa {
13
13
  /// A DFA walker that knows how to dump them to serialized strings.
14
14
  class ANTLR4CPP_PUBLIC DFASerializer {
15
15
  public:
16
- DFASerializer(const DFA *dfa, const std::vector<std::string>& tnames);
17
16
  DFASerializer(const DFA *dfa, const Vocabulary &vocabulary);
18
- virtual ~DFASerializer();
19
17
 
20
- virtual std::string toString() const;
18
+ virtual ~DFASerializer() = default;
19
+
20
+ std::string toString() const;
21
21
 
22
22
  protected:
23
23
  virtual std::string getEdgeLabel(size_t i) const;
24
- virtual std::string getStateString(DFAState *s) const;
24
+ std::string getStateString(DFAState *s) const;
25
25
 
26
26
  private:
27
27
  const DFA *_dfa;
@@ -13,41 +13,11 @@
13
13
  using namespace antlr4::dfa;
14
14
  using namespace antlr4::atn;
15
15
 
16
- DFAState::PredPrediction::PredPrediction(const Ref<SemanticContext> &pred, int alt) : pred(pred) {
17
- InitializeInstanceFields();
18
- this->alt = alt;
19
- }
20
-
21
- DFAState::PredPrediction::~PredPrediction() {
22
- }
23
-
24
- std::string DFAState::PredPrediction::toString() {
16
+ std::string DFAState::PredPrediction::toString() const {
25
17
  return std::string("(") + pred->toString() + ", " + std::to_string(alt) + ")";
26
18
  }
27
19
 
28
- void DFAState::PredPrediction::InitializeInstanceFields() {
29
- alt = 0;
30
- }
31
-
32
- DFAState::DFAState() {
33
- InitializeInstanceFields();
34
- }
35
-
36
- DFAState::DFAState(int state) : DFAState() {
37
- stateNumber = state;
38
- }
39
-
40
- DFAState::DFAState(std::unique_ptr<ATNConfigSet> configs_) : DFAState() {
41
- configs = std::move(configs_);
42
- }
43
-
44
- DFAState::~DFAState() {
45
- for (auto *predicate : predicates) {
46
- delete predicate;
47
- }
48
- }
49
-
50
- std::set<size_t> DFAState::getAltSet() {
20
+ std::set<size_t> DFAState::getAltSet() const {
51
21
  std::set<size_t> alts;
52
22
  if (configs != nullptr) {
53
23
  for (size_t i = 0; i < configs->size(); i++) {
@@ -58,22 +28,18 @@ std::set<size_t> DFAState::getAltSet() {
58
28
  }
59
29
 
60
30
  size_t DFAState::hashCode() const {
61
- size_t hash = misc::MurmurHash::initialize(7);
62
- hash = misc::MurmurHash::update(hash, configs->hashCode());
63
- hash = misc::MurmurHash::finish(hash, 1);
64
- return hash;
31
+ return configs != nullptr ? configs->hashCode() : 0;
65
32
  }
66
33
 
67
- bool DFAState::operator == (const DFAState &o) const {
68
- // compare set of ATN configurations in this set with other
69
- if (this == &o) {
34
+ bool DFAState::equals(const DFAState &other) const {
35
+ if (this == std::addressof(other)) {
70
36
  return true;
71
37
  }
72
-
73
- return *configs == *o.configs;
38
+ return configs == other.configs ||
39
+ (configs != nullptr && other.configs != nullptr && *configs == *other.configs);
74
40
  }
75
41
 
76
- std::string DFAState::toString() {
42
+ std::string DFAState::toString() const {
77
43
  std::stringstream ss;
78
44
  ss << stateNumber;
79
45
  if (configs) {
@@ -83,7 +49,7 @@ std::string DFAState::toString() {
83
49
  ss << " => ";
84
50
  if (!predicates.empty()) {
85
51
  for (size_t i = 0; i < predicates.size(); i++) {
86
- ss << predicates[i]->toString();
52
+ ss << predicates[i].toString();
87
53
  }
88
54
  } else {
89
55
  ss << prediction;
@@ -91,10 +57,3 @@ std::string DFAState::toString() {
91
57
  }
92
58
  return ss.str();
93
59
  }
94
-
95
- void DFAState::InitializeInstanceFields() {
96
- stateNumber = -1;
97
- isAcceptState = false;
98
- prediction = 0;
99
- requiresFullContext = false;
100
- }
@@ -7,6 +7,8 @@
7
7
 
8
8
  #include "antlr4-common.h"
9
9
 
10
+ #include "atn/ATNConfigSet.h"
11
+
10
12
  namespace antlr4 {
11
13
  namespace dfa {
12
14
 
@@ -35,23 +37,25 @@ namespace dfa {
35
37
  /// but with different ATN contexts (with same or different alts)
36
38
  /// meaning that state was reached via a different set of rule invocations.
37
39
  /// </summary>
38
- class ANTLR4CPP_PUBLIC DFAState {
40
+ class ANTLR4CPP_PUBLIC DFAState final {
39
41
  public:
40
- class PredPrediction {
42
+ struct ANTLR4CPP_PUBLIC PredPrediction final {
41
43
  public:
42
- Ref<atn::SemanticContext> pred; // never null; at least SemanticContext.NONE
44
+ Ref<const atn::SemanticContext> pred; // never null; at least SemanticContext.NONE
43
45
  int alt;
44
46
 
45
- PredPrediction(const Ref<atn::SemanticContext> &pred, int alt);
46
- virtual ~PredPrediction();
47
+ PredPrediction() = delete;
47
48
 
48
- virtual std::string toString();
49
+ PredPrediction(const PredPrediction&) = default;
50
+ PredPrediction(PredPrediction&&) = default;
49
51
 
50
- private:
51
- void InitializeInstanceFields();
52
- };
52
+ PredPrediction(Ref<const atn::SemanticContext> pred, int alt) : pred(std::move(pred)), alt(alt) {}
53
53
 
54
- int stateNumber;
54
+ PredPrediction& operator=(const PredPrediction&) = default;
55
+ PredPrediction& operator=(PredPrediction&&) = default;
56
+
57
+ std::string toString() const;
58
+ };
55
59
 
56
60
  std::unique_ptr<atn::ATNConfigSet> configs;
57
61
 
@@ -59,24 +63,14 @@ namespace dfa {
59
63
  /// <seealso cref="Token#EOF"/> maps to {@code edges[0]}.
60
64
  // ml: this is a sparse list, so we use a map instead of a vector.
61
65
  // Watch out: we no longer have the -1 offset, as it isn't needed anymore.
62
- std::unordered_map<size_t, DFAState *> edges;
63
-
64
- bool isAcceptState;
66
+ std::unordered_map<size_t, DFAState*> edges;
65
67
 
66
68
  /// if accept state, what ttype do we match or alt do we predict?
67
69
  /// This is set to <seealso cref="ATN#INVALID_ALT_NUMBER"/> when <seealso cref="#predicates"/>{@code !=null} or
68
70
  /// <seealso cref="#requiresFullContext"/>.
69
- size_t prediction;
70
-
71
- Ref<atn::LexerActionExecutor> lexerActionExecutor;
71
+ size_t prediction = 0;
72
72
 
73
- /// <summary>
74
- /// Indicates that this state was created during SLL prediction that
75
- /// discovered a conflict between the configurations in the state. Future
76
- /// <seealso cref="ParserATNSimulator#execATN"/> invocations immediately jumped doing
77
- /// full context prediction if this field is true.
78
- /// </summary>
79
- bool requiresFullContext;
73
+ Ref<const atn::LexerActionExecutor> lexerActionExecutor;
80
74
 
81
75
  /// <summary>
82
76
  /// During SLL parsing, this is a list of predicates associated with the
@@ -91,21 +85,34 @@ namespace dfa {
91
85
  /// <p/>
92
86
  /// This list is computed by <seealso cref="ParserATNSimulator#predicateDFAState"/>.
93
87
  /// </summary>
94
- std::vector<PredPrediction *> predicates;
88
+ std::vector<PredPrediction> predicates;
89
+
90
+ int stateNumber = -1;
91
+
92
+ bool isAcceptState = false;
93
+
94
+ /// <summary>
95
+ /// Indicates that this state was created during SLL prediction that
96
+ /// discovered a conflict between the configurations in the state. Future
97
+ /// <seealso cref="ParserATNSimulator#execATN"/> invocations immediately jumped doing
98
+ /// full context prediction if this field is true.
99
+ /// </summary>
100
+ bool requiresFullContext = false;
95
101
 
96
102
  /// Map a predicate to a predicted alternative.
97
- DFAState();
98
- DFAState(int state);
99
- DFAState(std::unique_ptr<atn::ATNConfigSet> configs);
100
- virtual ~DFAState();
103
+ DFAState() = default;
104
+
105
+ explicit DFAState(int stateNumber) : stateNumber(stateNumber) {}
106
+
107
+ explicit DFAState(std::unique_ptr<atn::ATNConfigSet> configs) : configs(std::move(configs)) {}
101
108
 
102
109
  /// <summary>
103
110
  /// Get the set of all alts mentioned by all ATN configurations in this
104
111
  /// DFA state.
105
112
  /// </summary>
106
- virtual std::set<size_t> getAltSet();
113
+ std::set<size_t> getAltSet() const;
107
114
 
108
- virtual size_t hashCode() const;
115
+ size_t hashCode() const;
109
116
 
110
117
  /// Two DFAState instances are equal if their ATN configuration sets
111
118
  /// are the same. This method is used to see if a state already exists.
@@ -118,27 +125,29 @@ namespace dfa {
118
125
  /// ParserATNSimulator#addDFAState we need to know if any other state
119
126
  /// exists that has this exact set of ATN configurations. The
120
127
  /// stateNumber is irrelevant.
121
- bool operator == (const DFAState &o) const;
128
+ bool equals(const DFAState &other) const;
122
129
 
123
- virtual std::string toString();
130
+ std::string toString() const;
131
+ };
124
132
 
125
- struct Hasher
126
- {
127
- size_t operator()(DFAState *k) const {
128
- return k->hashCode();
129
- }
130
- };
133
+ inline bool operator==(const DFAState &lhs, const DFAState &rhs) {
134
+ return lhs.equals(rhs);
135
+ }
131
136
 
132
- struct Comparer {
133
- bool operator()(DFAState *lhs, DFAState *rhs) const
134
- {
135
- return *lhs == *rhs;
136
- }
137
- };
137
+ inline bool operator!=(const DFAState &lhs, const DFAState &rhs) {
138
+ return !operator==(lhs, rhs);
139
+ }
140
+
141
+ } // namespace dfa
142
+ } // namespace antlr4
143
+
144
+ namespace std {
138
145
 
139
- private:
140
- void InitializeInstanceFields();
146
+ template <>
147
+ struct hash<::antlr4::dfa::DFAState> {
148
+ size_t operator()(const ::antlr4::dfa::DFAState &dfaState) const {
149
+ return dfaState.hashCode();
150
+ }
141
151
  };
142
152
 
143
- } // namespace atn
144
- } // namespace antlr4
153
+ } // namespace std