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
@@ -10,34 +10,34 @@
10
10
  namespace antlr4 {
11
11
  namespace atn {
12
12
 
13
- class ANTLR4CPP_PUBLIC LexerATNConfig : public ATNConfig {
13
+ class ANTLR4CPP_PUBLIC LexerATNConfig final : public ATNConfig {
14
14
  public:
15
- LexerATNConfig(ATNState *state, int alt, Ref<PredictionContext> const& context);
16
- LexerATNConfig(ATNState *state, int alt, Ref<PredictionContext> const& context, Ref<LexerActionExecutor> const& lexerActionExecutor);
15
+ LexerATNConfig(ATNState *state, int alt, Ref<const PredictionContext> context);
16
+ LexerATNConfig(ATNState *state, int alt, Ref<const PredictionContext> context, Ref<const LexerActionExecutor> lexerActionExecutor);
17
17
 
18
- LexerATNConfig(Ref<LexerATNConfig> const& c, ATNState *state);
19
- LexerATNConfig(Ref<LexerATNConfig> const& c, ATNState *state, Ref<LexerActionExecutor> const& lexerActionExecutor);
20
- LexerATNConfig(Ref<LexerATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context);
18
+ LexerATNConfig(LexerATNConfig const& other, ATNState *state);
19
+ LexerATNConfig(LexerATNConfig const& other, ATNState *state, Ref<const LexerActionExecutor> lexerActionExecutor);
20
+ LexerATNConfig(LexerATNConfig const& other, ATNState *state, Ref<const PredictionContext> context);
21
21
 
22
22
  /**
23
23
  * Gets the {@link LexerActionExecutor} capable of executing the embedded
24
24
  * action(s) for the current configuration.
25
25
  */
26
- Ref<LexerActionExecutor> getLexerActionExecutor() const;
27
- bool hasPassedThroughNonGreedyDecision();
26
+ const Ref<const LexerActionExecutor>& getLexerActionExecutor() const { return _lexerActionExecutor; }
27
+ bool hasPassedThroughNonGreedyDecision() const { return _passedThroughNonGreedyDecision; }
28
28
 
29
29
  virtual size_t hashCode() const override;
30
30
 
31
- bool operator == (const LexerATNConfig& other) const;
31
+ bool operator==(const LexerATNConfig& other) const;
32
32
 
33
33
  private:
34
34
  /**
35
35
  * This is the backing field for {@link #getLexerActionExecutor}.
36
36
  */
37
- const Ref<LexerActionExecutor> _lexerActionExecutor;
38
- const bool _passedThroughNonGreedyDecision;
37
+ const Ref<const LexerActionExecutor> _lexerActionExecutor;
38
+ const bool _passedThroughNonGreedyDecision = false;
39
39
 
40
- static bool checkNonGreedyDecision(Ref<LexerATNConfig> const& source, ATNState *target);
40
+ static bool checkNonGreedyDecision(LexerATNConfig const& source, ATNState *target);
41
41
  };
42
42
 
43
43
  } // namespace atn
@@ -20,7 +20,6 @@
20
20
  #include "dfa/DFAState.h"
21
21
  #include "atn/LexerATNConfig.h"
22
22
  #include "atn/LexerActionExecutor.h"
23
- #include "atn/EmptyPredictionContext.h"
24
23
 
25
24
  #include "atn/LexerATNSimulator.h"
26
25
 
@@ -31,25 +30,10 @@ using namespace antlr4;
31
30
  using namespace antlr4::atn;
32
31
  using namespace antlrcpp;
33
32
 
34
- LexerATNSimulator::SimState::~SimState() {
35
- }
36
-
37
33
  void LexerATNSimulator::SimState::reset() {
38
- index = INVALID_INDEX;
39
- line = 0;
40
- charPos = INVALID_INDEX;
41
- dfaState = nullptr; // Don't delete. It's just a reference.
42
- }
43
-
44
- void LexerATNSimulator::SimState::InitializeInstanceFields() {
45
- index = INVALID_INDEX;
46
- line = 0;
47
- charPos = INVALID_INDEX;
34
+ *this = SimState();
48
35
  }
49
36
 
50
- int LexerATNSimulator::match_calls = 0;
51
-
52
-
53
37
  LexerATNSimulator::LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
54
38
  PredictionContextCache &sharedContextCache)
55
39
  : LexerATNSimulator(nullptr, atn, decisionToDFA, sharedContextCache) {
@@ -69,7 +53,6 @@ void LexerATNSimulator::copyState(LexerATNSimulator *simulator) {
69
53
  }
70
54
 
71
55
  size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
72
- match_calls++;
73
56
  _mode = mode;
74
57
  ssize_t mark = input->mark();
75
58
 
@@ -80,10 +63,15 @@ size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
80
63
  _startIndex = input->index();
81
64
  _prevAccept.reset();
82
65
  const dfa::DFA &dfa = _decisionToDFA[mode];
83
- if (dfa.s0 == nullptr) {
66
+ dfa::DFAState* s0;
67
+ {
68
+ std::shared_lock<std::shared_mutex> stateLock(atn._stateMutex);
69
+ s0 = dfa.s0;
70
+ }
71
+ if (s0 == nullptr) {
84
72
  return matchATN(input);
85
73
  } else {
86
- return execATN(input, dfa.s0);
74
+ return execATN(input, s0);
87
75
  }
88
76
  }
89
77
 
@@ -111,10 +99,7 @@ size_t LexerATNSimulator::matchATN(CharStream *input) {
111
99
  bool suppressEdge = s0_closure->hasSemanticContext;
112
100
  s0_closure->hasSemanticContext = false;
113
101
 
114
- dfa::DFAState *next = addDFAState(s0_closure.release());
115
- if (!suppressEdge) {
116
- _decisionToDFA[_mode].s0 = next;
117
- }
102
+ dfa::DFAState *next = addDFAState(s0_closure.release(), suppressEdge);
118
103
 
119
104
  size_t predict = execATN(input, next);
120
105
 
@@ -182,7 +167,7 @@ size_t LexerATNSimulator::execATN(CharStream *input, dfa::DFAState *ds0) {
182
167
 
183
168
  dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_t t) {
184
169
  dfa::DFAState* retval = nullptr;
185
- _edgeLock.readLock();
170
+ std::shared_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
186
171
  if (t <= MAX_DFA_EDGE) {
187
172
  auto iterator = s->edges.find(t - MIN_DFA_EDGE);
188
173
  #if DEBUG_ATN == 1
@@ -194,7 +179,6 @@ dfa::DFAState *LexerATNSimulator::getExistingTargetState(dfa::DFAState *s, size_
194
179
  if (iterator != s->edges.end())
195
180
  retval = iterator->second;
196
181
  }
197
- _edgeLock.readUnlock();
198
182
  return retval;
199
183
  }
200
184
 
@@ -209,9 +193,9 @@ dfa::DFAState *LexerATNSimulator::computeTargetState(CharStream *input, dfa::DFA
209
193
  if (!reach->hasSemanticContext) {
210
194
  // we got nowhere on t, don't throw out this knowledge; it'd
211
195
  // cause a failover from DFA later.
212
- delete reach;
213
196
  addDFAEdge(s, t, ERROR.get());
214
197
  }
198
+ delete reach;
215
199
 
216
200
  // stop when we can't match any more char
217
201
  return ERROR.get();
@@ -223,8 +207,7 @@ dfa::DFAState *LexerATNSimulator::computeTargetState(CharStream *input, dfa::DFA
223
207
 
224
208
  size_t LexerATNSimulator::failOrAccept(CharStream *input, ATNConfigSet *reach, size_t t) {
225
209
  if (_prevAccept.dfaState != nullptr) {
226
- Ref<LexerActionExecutor> lexerActionExecutor = _prevAccept.dfaState->lexerActionExecutor;
227
- accept(input, lexerActionExecutor, _startIndex, _prevAccept.index, _prevAccept.line, _prevAccept.charPos);
210
+ accept(input, _prevAccept.dfaState->lexerActionExecutor, _startIndex, _prevAccept.index, _prevAccept.line, _prevAccept.charPos);
228
211
  return _prevAccept.dfaState->prediction;
229
212
  } else {
230
213
  // if no accept and EOF is first char, return EOF
@@ -241,7 +224,7 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
241
224
  // than a config that already reached an accept state for the same rule
242
225
  size_t skipAlt = ATN::INVALID_ALT_NUMBER;
243
226
 
244
- for (auto c : closure_->configs) {
227
+ for (const auto &c : closure_->configs) {
245
228
  bool currentAltReachedAcceptState = c->alt == skipAlt;
246
229
  if (currentAltReachedAcceptState && (std::static_pointer_cast<LexerATNConfig>(c))->hasPassedThroughNonGreedyDecision()) {
247
230
  continue;
@@ -253,17 +236,17 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
253
236
 
254
237
  size_t n = c->state->transitions.size();
255
238
  for (size_t ti = 0; ti < n; ti++) { // for each transition
256
- Transition *trans = c->state->transitions[ti];
239
+ const Transition *trans = c->state->transitions[ti].get();
257
240
  ATNState *target = getReachableTarget(trans, (int)t);
258
241
  if (target != nullptr) {
259
- Ref<LexerActionExecutor> lexerActionExecutor = std::static_pointer_cast<LexerATNConfig>(c)->getLexerActionExecutor();
242
+ auto lexerActionExecutor = downCast<const LexerATNConfig&>(*c).getLexerActionExecutor();
260
243
  if (lexerActionExecutor != nullptr) {
261
244
  lexerActionExecutor = lexerActionExecutor->fixOffsetBeforeMatch((int)input->index() - (int)_startIndex);
262
245
  }
263
246
 
264
247
  bool treatEofAsEpsilon = t == Token::EOF;
265
- Ref<LexerATNConfig> config = std::make_shared<LexerATNConfig>(std::static_pointer_cast<LexerATNConfig>(c),
266
- target, lexerActionExecutor);
248
+ Ref<LexerATNConfig> config = std::make_shared<LexerATNConfig>(downCast<const LexerATNConfig&>(*c),
249
+ target, std::move(lexerActionExecutor));
267
250
 
268
251
  if (closure(input, config, reach, currentAltReachedAcceptState, true, treatEofAsEpsilon)) {
269
252
  // any remaining configs for this alt have a lower priority than
@@ -276,7 +259,7 @@ void LexerATNSimulator::getReachableConfigSet(CharStream *input, ATNConfigSet *c
276
259
  }
277
260
  }
278
261
 
279
- void LexerATNSimulator::accept(CharStream *input, const Ref<LexerActionExecutor> &lexerActionExecutor, size_t /*startIndex*/,
262
+ void LexerATNSimulator::accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t /*startIndex*/,
280
263
  size_t index, size_t line, size_t charPos) {
281
264
  #if DEBUG_ATN == 1
282
265
  std::cout << "ACTION ";
@@ -293,7 +276,7 @@ void LexerATNSimulator::accept(CharStream *input, const Ref<LexerActionExecutor>
293
276
  }
294
277
  }
295
278
 
296
- atn::ATNState *LexerATNSimulator::getReachableTarget(Transition *trans, size_t t) {
279
+ atn::ATNState *LexerATNSimulator::getReachableTarget(const Transition *trans, size_t t) {
297
280
  if (trans->matches(t, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
298
281
  return trans->target;
299
282
  }
@@ -302,7 +285,7 @@ atn::ATNState *LexerATNSimulator::getReachableTarget(Transition *trans, size_t t
302
285
  }
303
286
 
304
287
  std::unique_ptr<ATNConfigSet> LexerATNSimulator::computeStartState(CharStream *input, ATNState *p) {
305
- Ref<PredictionContext> initialContext = PredictionContext::EMPTY; // ml: the purpose of this assignment is unclear
288
+ Ref<const PredictionContext> initialContext = PredictionContext::EMPTY; // ml: the purpose of this assignment is unclear
306
289
  std::unique_ptr<ATNConfigSet> configs(new OrderedATNConfigSet());
307
290
  for (size_t i = 0; i < p->transitions.size(); i++) {
308
291
  ATNState *target = p->transitions[i]->target;
@@ -319,7 +302,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
319
302
  std::cout << "closure(" << config->toString(true) << ")" << std::endl;
320
303
  #endif
321
304
 
322
- if (is<RuleStopState *>(config->state)) {
305
+ if (config->state != nullptr && config->state->getStateType() == ATNStateType::RULE_STOP) {
323
306
  #if DEBUG_ATN == 1
324
307
  if (_recog != nullptr) {
325
308
  std::cout << "closure at " << _recog->getRuleNames()[config->state->ruleIndex] << " rule stop " << config << std::endl;
@@ -333,7 +316,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
333
316
  configs->add(config);
334
317
  return true;
335
318
  } else {
336
- configs->add(std::make_shared<LexerATNConfig>(config, config->state, PredictionContext::EMPTY));
319
+ configs->add(std::make_shared<LexerATNConfig>(*config, config->state, PredictionContext::EMPTY));
337
320
  currentAltReachedAcceptState = true;
338
321
  }
339
322
  }
@@ -341,9 +324,9 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
341
324
  if (config->context != nullptr && !config->context->isEmpty()) {
342
325
  for (size_t i = 0; i < config->context->size(); i++) {
343
326
  if (config->context->getReturnState(i) != PredictionContext::EMPTY_RETURN_STATE) {
344
- std::weak_ptr<PredictionContext> newContext = config->context->getParent(i); // "pop" return state
327
+ Ref<const PredictionContext> newContext = config->context->getParent(i); // "pop" return state
345
328
  ATNState *returnState = atn.states[config->context->getReturnState(i)];
346
- Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(config, returnState, newContext.lock());
329
+ Ref<LexerATNConfig> c = std::make_shared<LexerATNConfig>(*config, returnState, newContext);
347
330
  currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
348
331
  }
349
332
  }
@@ -361,7 +344,7 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
361
344
 
362
345
  ATNState *p = config->state;
363
346
  for (size_t i = 0; i < p->transitions.size(); i++) {
364
- Transition *t = p->transitions[i];
347
+ const Transition *t = p->transitions[i].get();
365
348
  Ref<LexerATNConfig> c = getEpsilonTarget(input, config, t, configs, speculative, treatEofAsEpsilon);
366
349
  if (c != nullptr) {
367
350
  currentAltReachedAcceptState = closure(input, c, configs, currentAltReachedAcceptState, speculative, treatEofAsEpsilon);
@@ -371,22 +354,22 @@ bool LexerATNSimulator::closure(CharStream *input, const Ref<LexerATNConfig> &co
371
354
  return currentAltReachedAcceptState;
372
355
  }
373
356
 
374
- Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, Transition *t,
357
+ Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
375
358
  ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon) {
376
359
 
377
360
  Ref<LexerATNConfig> c = nullptr;
378
- switch (t->getSerializationType()) {
379
- case Transition::RULE: {
380
- RuleTransition *ruleTransition = static_cast<RuleTransition*>(t);
381
- Ref<PredictionContext> newContext = SingletonPredictionContext::create(config->context, ruleTransition->followState->stateNumber);
382
- c = std::make_shared<LexerATNConfig>(config, t->target, newContext);
361
+ switch (t->getTransitionType()) {
362
+ case TransitionType::RULE: {
363
+ const RuleTransition *ruleTransition = static_cast<const RuleTransition*>(t);
364
+ Ref<const PredictionContext> newContext = SingletonPredictionContext::create(config->context, ruleTransition->followState->stateNumber);
365
+ c = std::make_shared<LexerATNConfig>(*config, t->target, newContext);
383
366
  break;
384
367
  }
385
368
 
386
- case Transition::PRECEDENCE:
369
+ case TransitionType::PRECEDENCE:
387
370
  throw UnsupportedOperationException("Precedence predicates are not supported in lexers.");
388
371
 
389
- case Transition::PREDICATE: {
372
+ case TransitionType::PREDICATE: {
390
373
  /* Track traversing semantic predicates. If we traverse,
391
374
  we cannot add a DFA state for this "reach" computation
392
375
  because the DFA would not test the predicate again in the
@@ -405,20 +388,20 @@ Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const
405
388
  states reached by traversing predicates. Since this is when we
406
389
  test them, we cannot cash the DFA state target of ID.
407
390
  */
408
- PredicateTransition *pt = static_cast<PredicateTransition*>(t);
391
+ const PredicateTransition *pt = static_cast<const PredicateTransition*>(t);
409
392
 
410
393
  #if DEBUG_ATN == 1
411
- std::cout << "EVAL rule " << pt->ruleIndex << ":" << pt->predIndex << std::endl;
394
+ std::cout << "EVAL rule " << pt->getRuleIndex() << ":" << pt->getPredIndex() << std::endl;
412
395
  #endif
413
396
 
414
397
  configs->hasSemanticContext = true;
415
- if (evaluatePredicate(input, pt->ruleIndex, pt->predIndex, speculative)) {
416
- c = std::make_shared<LexerATNConfig>(config, t->target);
398
+ if (evaluatePredicate(input, pt->getRuleIndex(), pt->getPredIndex(), speculative)) {
399
+ c = std::make_shared<LexerATNConfig>(*config, t->target);
417
400
  }
418
401
  break;
419
402
  }
420
403
 
421
- case Transition::ACTION:
404
+ case TransitionType::ACTION:
422
405
  if (config->context == nullptr|| config->context->hasEmptyPath()) {
423
406
  // execute actions anywhere in the start rule for a token.
424
407
  //
@@ -432,27 +415,27 @@ Ref<LexerATNConfig> LexerATNSimulator::getEpsilonTarget(CharStream *input, const
432
415
  // getEpsilonTarget to return two configurations, so
433
416
  // additional modifications are needed before we can support
434
417
  // the split operation.
435
- Ref<LexerActionExecutor> lexerActionExecutor = LexerActionExecutor::append(config->getLexerActionExecutor(),
436
- atn.lexerActions[static_cast<ActionTransition *>(t)->actionIndex]);
437
- c = std::make_shared<LexerATNConfig>(config, t->target, lexerActionExecutor);
418
+ auto lexerActionExecutor = LexerActionExecutor::append(config->getLexerActionExecutor(),
419
+ atn.lexerActions[static_cast<const ActionTransition *>(t)->actionIndex]);
420
+ c = std::make_shared<LexerATNConfig>(*config, t->target, std::move(lexerActionExecutor));
438
421
  break;
439
422
  }
440
423
  else {
441
424
  // ignore actions in referenced rules
442
- c = std::make_shared<LexerATNConfig>(config, t->target);
425
+ c = std::make_shared<LexerATNConfig>(*config, t->target);
443
426
  break;
444
427
  }
445
428
 
446
- case Transition::EPSILON:
447
- c = std::make_shared<LexerATNConfig>(config, t->target);
429
+ case TransitionType::EPSILON:
430
+ c = std::make_shared<LexerATNConfig>(*config, t->target);
448
431
  break;
449
432
 
450
- case Transition::ATOM:
451
- case Transition::RANGE:
452
- case Transition::SET:
433
+ case TransitionType::ATOM:
434
+ case TransitionType::RANGE:
435
+ case TransitionType::SET:
453
436
  if (treatEofAsEpsilon) {
454
437
  if (t->matches(Token::EOF, Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE)) {
455
- c = std::make_shared<LexerATNConfig>(config, t->target);
438
+ c = std::make_shared<LexerATNConfig>(*config, t->target);
456
439
  break;
457
440
  }
458
441
  }
@@ -530,12 +513,15 @@ void LexerATNSimulator::addDFAEdge(dfa::DFAState *p, size_t t, dfa::DFAState *q)
530
513
  return;
531
514
  }
532
515
 
533
- _edgeLock.writeLock();
516
+ std::unique_lock<std::shared_mutex> edgeLock(atn._edgeMutex);
534
517
  p->edges[t - MIN_DFA_EDGE] = q; // connect
535
- _edgeLock.writeUnlock();
536
518
  }
537
519
 
538
520
  dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
521
+ return addDFAState(configs, true);
522
+ }
523
+
524
+ dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs, bool suppressEdge) {
539
525
  /* the lexer evaluates predicates on-the-fly; by this point configs
540
526
  * should not contain any configurations with unevaluated predicates.
541
527
  */
@@ -543,8 +529,8 @@ dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
543
529
 
544
530
  dfa::DFAState *proposed = new dfa::DFAState(std::unique_ptr<ATNConfigSet>(configs)); /* mem-check: managed by the DFA or deleted below */
545
531
  Ref<ATNConfig> firstConfigWithRuleStopState = nullptr;
546
- for (auto &c : configs->configs) {
547
- if (is<RuleStopState *>(c->state)) {
532
+ for (const auto &c : configs->configs) {
533
+ if (RuleStopState::is(c->state)) {
548
534
  firstConfigWithRuleStopState = c;
549
535
  break;
550
536
  }
@@ -552,28 +538,29 @@ dfa::DFAState *LexerATNSimulator::addDFAState(ATNConfigSet *configs) {
552
538
 
553
539
  if (firstConfigWithRuleStopState != nullptr) {
554
540
  proposed->isAcceptState = true;
555
- proposed->lexerActionExecutor = std::dynamic_pointer_cast<LexerATNConfig>(firstConfigWithRuleStopState)->getLexerActionExecutor();
541
+ proposed->lexerActionExecutor = downCast<const LexerATNConfig&>(*firstConfigWithRuleStopState).getLexerActionExecutor();
556
542
  proposed->prediction = atn.ruleToTokenType[firstConfigWithRuleStopState->state->ruleIndex];
557
543
  }
558
544
 
559
545
  dfa::DFA &dfa = _decisionToDFA[_mode];
560
546
 
561
- _stateLock.writeLock();
562
- if (!dfa.states.empty()) {
563
- auto iterator = dfa.states.find(proposed);
564
- if (iterator != dfa.states.end()) {
547
+ {
548
+ std::unique_lock<std::shared_mutex> stateLock(atn._stateMutex);
549
+ auto [existing, inserted] = dfa.states.insert(proposed);
550
+ if (!inserted) {
565
551
  delete proposed;
566
- _stateLock.writeUnlock();
567
- return *iterator;
552
+ proposed = *existing;
553
+ } else {
554
+ // Previously we did a lookup, then set fields, then inserted. It was `dfa.states.size()`,
555
+ // since we already inserted we need to subtract one.
556
+ proposed->stateNumber = static_cast<int>(dfa.states.size() - 1);
557
+ proposed->configs->setReadonly(true);
558
+ }
559
+ if (!suppressEdge) {
560
+ dfa.s0 = proposed;
568
561
  }
569
562
  }
570
563
 
571
- proposed->stateNumber = (int)dfa.states.size();
572
- proposed->configs->setReadonly(true);
573
-
574
- dfa.states.insert(proposed);
575
- _stateLock.writeUnlock();
576
-
577
564
  return proposed;
578
565
  }
579
566
 
@@ -5,6 +5,8 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <atomic>
9
+
8
10
  #include "atn/ATNSimulator.h"
9
11
  #include "atn/LexerATNConfig.h"
10
12
  #include "atn/ATNConfigSet.h"
@@ -15,38 +17,18 @@ namespace atn {
15
17
  /// "dup" of ParserInterpreter
16
18
  class ANTLR4CPP_PUBLIC LexerATNSimulator : public ATNSimulator {
17
19
  protected:
18
- class SimState {
19
- public:
20
- virtual ~SimState();
21
-
22
- protected:
23
- size_t index;
24
- size_t line;
25
- size_t charPos;
26
- dfa::DFAState *dfaState;
27
- virtual void reset();
28
- friend class LexerATNSimulator;
29
-
30
- private:
31
- void InitializeInstanceFields();
32
-
33
- public:
34
- SimState() {
35
- InitializeInstanceFields();
36
- }
37
- };
20
+ struct ANTLR4CPP_PUBLIC SimState final {
21
+ size_t index = INVALID_INDEX;
22
+ size_t line = 0;
23
+ size_t charPos = INVALID_INDEX;
24
+ dfa::DFAState *dfaState = nullptr;
38
25
 
26
+ void reset();
27
+ };
39
28
 
40
29
  public:
41
- #if __cplusplus >= 201703L
42
30
  static constexpr size_t MIN_DFA_EDGE = 0;
43
31
  static constexpr size_t MAX_DFA_EDGE = 127; // forces unicode to stay in ATN
44
- #else
45
- enum : size_t {
46
- MIN_DFA_EDGE = 0,
47
- MAX_DFA_EDGE = 127, // forces unicode to stay in ATN
48
- };
49
- #endif
50
32
 
51
33
  protected:
52
34
  /// <summary>
@@ -89,11 +71,9 @@ namespace atn {
89
71
  SimState _prevAccept;
90
72
 
91
73
  public:
92
- static int match_calls;
93
-
94
74
  LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
95
75
  LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
96
- virtual ~LexerATNSimulator () {}
76
+ virtual ~LexerATNSimulator() = default;
97
77
 
98
78
  virtual void copyState(LexerATNSimulator *simulator);
99
79
  virtual size_t match(CharStream *input, size_t mode);
@@ -140,10 +120,10 @@ namespace atn {
140
120
  void getReachableConfigSet(CharStream *input, ATNConfigSet *closure_, // closure_ as we have a closure() already
141
121
  ATNConfigSet *reach, size_t t);
142
122
 
143
- virtual void accept(CharStream *input, const Ref<LexerActionExecutor> &lexerActionExecutor, size_t startIndex, size_t index,
123
+ virtual void accept(CharStream *input, const Ref<const LexerActionExecutor> &lexerActionExecutor, size_t startIndex, size_t index,
144
124
  size_t line, size_t charPos);
145
125
 
146
- virtual ATNState *getReachableTarget(Transition *trans, size_t t);
126
+ virtual ATNState *getReachableTarget(const Transition *trans, size_t t);
147
127
 
148
128
  virtual std::unique_ptr<ATNConfigSet> computeStartState(CharStream *input, ATNState *p);
149
129
 
@@ -160,7 +140,7 @@ namespace atn {
160
140
  bool currentAltReachedAcceptState, bool speculative, bool treatEofAsEpsilon);
161
141
 
162
142
  // side-effect: can alter configs.hasSemanticContext
163
- virtual Ref<LexerATNConfig> getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, Transition *t,
143
+ virtual Ref<LexerATNConfig> getEpsilonTarget(CharStream *input, const Ref<LexerATNConfig> &config, const Transition *t,
164
144
  ATNConfigSet *configs, bool speculative, bool treatEofAsEpsilon);
165
145
 
166
146
  /// <summary>
@@ -197,6 +177,8 @@ namespace atn {
197
177
  /// </summary>
198
178
  virtual dfa::DFAState *addDFAState(ATNConfigSet *configs);
199
179
 
180
+ virtual dfa::DFAState *addDFAState(ATNConfigSet *configs, bool suppressEdge);
181
+
200
182
  public:
201
183
  dfa::DFA& getDFA(size_t mode);
202
184
 
@@ -1,9 +1,15 @@
1
- /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
2
- * Use of this file is governed by the BSD 3-clause license that
3
- * can be found in the LICENSE.txt file in the project root.
4
- */
5
-
6
1
  #include "LexerAction.h"
7
2
 
8
- antlr4::atn::LexerAction::~LexerAction() {
3
+ using namespace antlr4::atn;
4
+
5
+ size_t LexerAction::hashCode() const {
6
+ auto hash = cachedHashCode();
7
+ if (hash == 0) {
8
+ hash = hashCodeImpl();
9
+ if (hash == 0) {
10
+ hash = std::numeric_limits<size_t>::max();
11
+ }
12
+ _hashCode.store(hash, std::memory_order_relaxed);
13
+ }
14
+ return hash;
9
15
  }
@@ -21,13 +21,17 @@ namespace atn {
21
21
  /// </summary>
22
22
  class ANTLR4CPP_PUBLIC LexerAction {
23
23
  public:
24
- virtual ~LexerAction();
24
+ virtual ~LexerAction() = default;
25
25
 
26
26
  /// <summary>
27
27
  /// Gets the serialization type of the lexer action.
28
28
  /// </summary>
29
29
  /// <returns> The serialization type of the lexer action. </returns>
30
- virtual LexerActionType getActionType() const = 0;
30
+ ///
31
+ /// IMPORTANT: Unlike Java, this returns LexerActionType::INDEXED_CUSTOM for instances of
32
+ /// LexerIndexedCustomAction. If you need the wrapped action type, use
33
+ /// LexerIndexedCustomAction::getAction()->getActionType().
34
+ LexerActionType getActionType() const { return _actionType; }
31
35
 
32
36
  /// <summary>
33
37
  /// Gets whether the lexer action is position-dependent. Position-dependent
@@ -42,7 +46,7 @@ namespace atn {
42
46
  /// <returns> {@code true} if the lexer action semantics can be affected by the
43
47
  /// position of the input <seealso cref="CharStream"/> at the time it is executed;
44
48
  /// otherwise, {@code false}. </returns>
45
- virtual bool isPositionDependent() const = 0;
49
+ bool isPositionDependent() const { return _positionDependent; }
46
50
 
47
51
  /// <summary>
48
52
  /// Execute the lexer action in the context of the specified <seealso cref="Lexer"/>.
@@ -51,16 +55,46 @@ namespace atn {
51
55
  /// positioned correctly prior to calling this method.</para>
52
56
  /// </summary>
53
57
  /// <param name="lexer"> The lexer instance. </param>
54
- virtual void execute(Lexer *lexer) = 0;
58
+ virtual void execute(Lexer *lexer) const = 0;
55
59
 
56
- virtual size_t hashCode() const = 0;
57
- virtual bool operator == (const LexerAction &obj) const = 0;
58
- virtual bool operator != (const LexerAction &obj) const {
59
- return !(*this == obj);
60
- }
60
+ size_t hashCode() const;
61
+
62
+ virtual bool equals(const LexerAction &other) const = 0;
61
63
 
62
64
  virtual std::string toString() const = 0;
65
+
66
+ protected:
67
+ LexerAction(LexerActionType actionType, bool positionDependent)
68
+ : _actionType(actionType), _hashCode(0), _positionDependent(positionDependent) {}
69
+
70
+ virtual size_t hashCodeImpl() const = 0;
71
+
72
+ size_t cachedHashCode() const { return _hashCode.load(std::memory_order_relaxed); }
73
+
74
+ private:
75
+ const LexerActionType _actionType;
76
+ mutable std::atomic<size_t> _hashCode;
77
+ const bool _positionDependent;
78
+ };
79
+
80
+ inline bool operator==(const LexerAction &lhs, const LexerAction &rhs) {
81
+ return lhs.equals(rhs);
82
+ }
83
+
84
+ inline bool operator!=(const LexerAction &lhs, const LexerAction &rhs) {
85
+ return !operator==(lhs, rhs);
86
+ }
87
+
88
+ } // namespace atn
89
+ } // namespace antlr4
90
+
91
+ namespace std {
92
+
93
+ template <>
94
+ struct hash<::antlr4::atn::LexerAction> {
95
+ size_t operator()(const ::antlr4::atn::LexerAction &lexerAction) const {
96
+ return lexerAction.hashCode();
97
+ }
63
98
  };
64
99
 
65
- } // namespace atn
66
- } // namespace antlr4
100
+ } // namespace std