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
@@ -6,39 +6,34 @@
6
6
  #pragma once
7
7
 
8
8
  #include <algorithm>
9
- #include <assert.h>
9
+ #include <any>
10
10
  #include <atomic>
11
- #include <chrono>
11
+ #include <bitset>
12
+ #include <cassert>
13
+ #include <climits>
14
+ #include <cstddef>
15
+ #include <cstdint>
16
+ #include <cstdlib>
17
+ #include <exception>
12
18
  #include <fstream>
13
19
  #include <iostream>
14
20
  #include <iterator>
15
21
  #include <limits>
16
- #include <limits.h>
17
- #include <list>
18
22
  #include <map>
19
23
  #include <memory>
24
+ #include <mutex>
20
25
  #include <set>
21
- #include <stdarg.h>
22
- #include <stdint.h>
23
- #include <stdlib.h>
26
+ #include <shared_mutex>
24
27
  #include <sstream>
25
28
  #include <stack>
26
29
  #include <string>
30
+ #include <string_view>
27
31
  #include <typeinfo>
28
32
  #include <type_traits>
29
33
  #include <unordered_map>
30
34
  #include <unordered_set>
31
35
  #include <utility>
32
36
  #include <vector>
33
- #include <mutex>
34
- #include <exception>
35
- #include <bitset>
36
- #include <condition_variable>
37
- #include <functional>
38
-
39
- #ifndef USE_UTF8_INSTEAD_OF_CODECVT
40
- #include <codecvt>
41
- #endif
42
37
 
43
38
  // Defines for the Guid class and other platform dependent stuff.
44
39
  #ifdef _WIN32
@@ -52,25 +47,12 @@
52
47
  #endif
53
48
  #endif
54
49
 
55
- #define GUID_WINDOWS
56
-
57
50
  #ifdef _WIN64
58
51
  typedef __int64 ssize_t;
59
52
  #else
60
53
  typedef __int32 ssize_t;
61
54
  #endif
62
55
 
63
- #if _MSC_VER >= 1900 && _MSC_VER < 2000
64
- // VS 2015 has a known bug when using std::codecvt_utf8<char32_t>
65
- // so we have to temporarily use __int32 instead.
66
- // https://connect.microsoft.com/VisualStudio/feedback/details/1403302/unresolved-external-when-using-codecvt-utf8
67
- typedef std::basic_string<__int32> i32string;
68
-
69
- typedef i32string UTF32String;
70
- #else
71
- typedef std::u32string UTF32String;
72
- #endif
73
-
74
56
  #ifdef ANTLR4CPP_EXPORTS
75
57
  #define ANTLR4CPP_PUBLIC __declspec(dllexport)
76
58
  #else
@@ -81,26 +63,13 @@
81
63
  #endif
82
64
  #endif
83
65
 
84
- #if defined(_MSC_VER) && !defined(__clang__)
85
- // clang-cl should escape this to prevent [ignored-attributes].
86
- namespace std {
87
- class ANTLR4CPP_PUBLIC exception; // Prevents warning C4275 from MSVC.
88
- } // namespace std
89
- #endif
90
-
91
66
  #elif defined(__APPLE__)
92
- typedef std::u32string UTF32String;
93
-
94
- #define GUID_CFUUID
95
67
  #if __GNUC__ >= 4
96
68
  #define ANTLR4CPP_PUBLIC __attribute__ ((visibility ("default")))
97
69
  #else
98
70
  #define ANTLR4CPP_PUBLIC
99
71
  #endif
100
72
  #else
101
- typedef std::u32string UTF32String;
102
-
103
- #define GUID_LIBUUID
104
73
  #if __GNUC__ >= 6
105
74
  #define ANTLR4CPP_PUBLIC __attribute__ ((visibility ("default")))
106
75
  #else
@@ -108,27 +77,16 @@
108
77
  #endif
109
78
  #endif
110
79
 
111
- #include "support/guid.h"
112
- #include "support/Declarations.h"
80
+ #ifdef __has_builtin
81
+ #define ANTLR4CPP_HAVE_BUILTIN(x) __has_builtin(x)
82
+ #else
83
+ #define ANTLR4CPP_HAVE_BUILTIN(x) 0
84
+ #endif
113
85
 
114
- #if !defined(HAS_NOEXCEPT)
115
- #if defined(__clang__)
116
- #if __has_feature(cxx_noexcept)
117
- #define HAS_NOEXCEPT
118
- #endif
119
- #else
120
- #if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
121
- defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
122
- #define HAS_NOEXCEPT
123
- #endif
124
- #endif
86
+ #define ANTLR4CPP_INTERNAL_STRINGIFY(x) #x
87
+ #define ANTLR4CPP_STRINGIFY(x) ANTLR4CPP_INTERNAL_STRINGIFY(x)
125
88
 
126
- #ifdef HAS_NOEXCEPT
127
- #define NOEXCEPT noexcept
128
- #else
129
- #define NOEXCEPT
130
- #endif
131
- #endif
89
+ #include "support/Declarations.h"
132
90
 
133
91
  // We have to undefine this symbol as ANTLR will use this name for own members and even
134
92
  // generated functions. Because EOF is a global macro we cannot use e.g. a namespace scope to disambiguate.
@@ -49,6 +49,7 @@
49
49
  #include "TokenStreamRewriter.h"
50
50
  #include "UnbufferedCharStream.h"
51
51
  #include "UnbufferedTokenStream.h"
52
+ #include "Version.h"
52
53
  #include "Vocabulary.h"
53
54
  #include "Vocabulary.h"
54
55
  #include "WritableToken.h"
@@ -57,11 +58,9 @@
57
58
  #include "atn/ATNConfigSet.h"
58
59
  #include "atn/ATNDeserializationOptions.h"
59
60
  #include "atn/ATNDeserializer.h"
60
- #include "atn/ATNSerializer.h"
61
61
  #include "atn/ATNSimulator.h"
62
62
  #include "atn/ATNState.h"
63
63
  #include "atn/ATNType.h"
64
- #include "atn/AbstractPredicateTransition.h"
65
64
  #include "atn/ActionTransition.h"
66
65
  #include "atn/AmbiguityInfo.h"
67
66
  #include "atn/ArrayPredictionContext.h"
@@ -74,7 +73,6 @@
74
73
  #include "atn/DecisionEventInfo.h"
75
74
  #include "atn/DecisionInfo.h"
76
75
  #include "atn/DecisionState.h"
77
- #include "atn/EmptyPredictionContext.h"
78
76
  #include "atn/EpsilonTransition.h"
79
77
  #include "atn/ErrorInfo.h"
80
78
  #include "atn/LL1Analyzer.h"
@@ -98,12 +96,16 @@
98
96
  #include "atn/OrderedATNConfigSet.h"
99
97
  #include "atn/ParseInfo.h"
100
98
  #include "atn/ParserATNSimulator.h"
99
+ #include "atn/ParserATNSimulatorOptions.h"
101
100
  #include "atn/PlusBlockStartState.h"
102
101
  #include "atn/PlusLoopbackState.h"
103
102
  #include "atn/PrecedencePredicateTransition.h"
104
103
  #include "atn/PredicateEvalInfo.h"
105
104
  #include "atn/PredicateTransition.h"
106
105
  #include "atn/PredictionContext.h"
106
+ #include "atn/PredictionContextCache.h"
107
+ #include "atn/PredictionContextMergeCache.h"
108
+ #include "atn/PredictionContextMergeCacheOptions.h"
107
109
  #include "atn/PredictionMode.h"
108
110
  #include "atn/ProfilingATNSimulator.h"
109
111
  #include "atn/RangeTransition.h"
@@ -111,6 +113,7 @@
111
113
  #include "atn/RuleStopState.h"
112
114
  #include "atn/RuleTransition.h"
113
115
  #include "atn/SemanticContext.h"
116
+ #include "atn/SerializedATNView.h"
114
117
  #include "atn/SetTransition.h"
115
118
  #include "atn/SingletonPredictionContext.h"
116
119
  #include "atn/StarBlockStartState.h"
@@ -131,9 +134,8 @@
131
134
  #include "support/Any.h"
132
135
  #include "support/Arrays.h"
133
136
  #include "support/BitSet.h"
137
+ #include "support/Casts.h"
134
138
  #include "support/CPPUtils.h"
135
- #include "support/StringUtils.h"
136
- #include "support/guid.h"
137
139
  #include "tree/AbstractParseTreeVisitor.h"
138
140
  #include "tree/ErrorNode.h"
139
141
  #include "tree/ErrorNodeImpl.h"
@@ -20,24 +20,9 @@ using namespace antlr4;
20
20
  using namespace antlr4::atn;
21
21
  using namespace antlrcpp;
22
22
 
23
- ATN::ATN() : ATN(ATNType::LEXER, 0) {
24
- }
23
+ ATN::ATN() : ATN(ATNType::LEXER, 0) {}
25
24
 
26
- ATN::ATN(ATN &&other) {
27
- // All source vectors are implicitly cleared by the moves.
28
- states = std::move(other.states);
29
- decisionToState = std::move(other.decisionToState);
30
- ruleToStartState = std::move(other.ruleToStartState);
31
- ruleToStopState = std::move(other.ruleToStopState);
32
- grammarType = std::move(other.grammarType);
33
- maxTokenType = std::move(other.maxTokenType);
34
- ruleToTokenType = std::move(other.ruleToTokenType);
35
- lexerActions = std::move(other.lexerActions);
36
- modeToStartState = std::move(other.modeToStartState);
37
- }
38
-
39
- ATN::ATN(ATNType grammarType_, size_t maxTokenType_) : grammarType(grammarType_), maxTokenType(maxTokenType_) {
40
- }
25
+ ATN::ATN(ATNType grammarType_, size_t maxTokenType_) : grammarType(grammarType_), maxTokenType(maxTokenType_) {}
41
26
 
42
27
  ATN::~ATN() {
43
28
  for (ATNState *state : states) {
@@ -45,42 +30,6 @@ ATN::~ATN() {
45
30
  }
46
31
  }
47
32
 
48
- /**
49
- * Required to be defined (even though not used) as we have an explicit move assignment operator.
50
- */
51
- ATN& ATN::operator = (ATN &other) NOEXCEPT {
52
- states = other.states;
53
- decisionToState = other.decisionToState;
54
- ruleToStartState = other.ruleToStartState;
55
- ruleToStopState = other.ruleToStopState;
56
- grammarType = other.grammarType;
57
- maxTokenType = other.maxTokenType;
58
- ruleToTokenType = other.ruleToTokenType;
59
- lexerActions = other.lexerActions;
60
- modeToStartState = other.modeToStartState;
61
-
62
- return *this;
63
- }
64
-
65
- /**
66
- * Explicit move assignment operator to make this the preferred assignment. With implicit copy/move assignment
67
- * operators it seems the copy operator is preferred causing trouble when releasing the allocated ATNState instances.
68
- */
69
- ATN& ATN::operator = (ATN &&other) NOEXCEPT {
70
- // All source vectors are implicitly cleared by the moves.
71
- states = std::move(other.states);
72
- decisionToState = std::move(other.decisionToState);
73
- ruleToStartState = std::move(other.ruleToStartState);
74
- ruleToStopState = std::move(other.ruleToStopState);
75
- grammarType = std::move(other.grammarType);
76
- maxTokenType = std::move(other.maxTokenType);
77
- ruleToTokenType = std::move(other.ruleToTokenType);
78
- lexerActions = std::move(other.lexerActions);
79
- modeToStartState = std::move(other.modeToStartState);
80
-
81
- return *this;
82
- }
83
-
84
33
  misc::IntervalSet ATN::nextTokens(ATNState *s, RuleContext *ctx) const {
85
34
  LL1Analyzer analyzer(*this);
86
35
  return analyzer.LOOK(s, ctx);
@@ -89,7 +38,7 @@ misc::IntervalSet ATN::nextTokens(ATNState *s, RuleContext *ctx) const {
89
38
 
90
39
  misc::IntervalSet const& ATN::nextTokens(ATNState *s) const {
91
40
  if (!s->_nextTokenUpdated) {
92
- std::unique_lock<std::mutex> lock { _mutex };
41
+ std::unique_lock<std::mutex> lock(_mutex);
93
42
  if (!s->_nextTokenUpdated) {
94
43
  s->_nextTokenWithinRule = nextTokens(s, nullptr);
95
44
  s->_nextTokenUpdated = true;
@@ -146,7 +95,7 @@ misc::IntervalSet ATN::getExpectedTokens(size_t stateNumber, RuleContext *contex
146
95
  expected.remove(Token::EPSILON);
147
96
  while (ctx && ctx->invokingState != ATNState::INVALID_STATE_NUMBER && following.contains(Token::EPSILON)) {
148
97
  ATNState *invokingState = states.at(ctx->invokingState);
149
- RuleTransition *rt = static_cast<RuleTransition*>(invokingState->transitions[0]);
98
+ const RuleTransition *rt = static_cast<const RuleTransition*>(invokingState->transitions[0].get());
150
99
  following = nextTokens(rt->followState);
151
100
  expected.addAll(following);
152
101
  expected.remove(Token::EPSILON);
@@ -7,24 +7,36 @@
7
7
 
8
8
  #include "RuleContext.h"
9
9
 
10
+ // GCC generates a warning when forward-declaring ATN if ATN has already been
11
+ // declared due to the attributes added by ANTLR4CPP_PUBLIC.
12
+ // See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39159
13
+ // Add constant that can be checked so forward-declarations can be omitted.
14
+ #define ANTLR4CPP_ATN_DECLARED
15
+
10
16
  namespace antlr4 {
11
17
  namespace atn {
12
18
 
19
+ class LexerATNSimulator;
20
+ class ParserATNSimulator;
21
+
13
22
  class ANTLR4CPP_PUBLIC ATN {
14
23
  public:
15
- #if __cplusplus >= 201703L
16
24
  static constexpr size_t INVALID_ALT_NUMBER = 0;
17
- #else
18
- enum : size_t {
19
- INVALID_ALT_NUMBER = 0,
20
- };
21
- #endif
22
25
 
23
26
  /// Used for runtime deserialization of ATNs from strings.
24
27
  ATN();
25
- ATN(ATN &&other);
28
+
26
29
  ATN(ATNType grammarType, size_t maxTokenType);
27
- virtual ~ATN();
30
+
31
+ ATN(const ATN&) = delete;
32
+
33
+ ATN(ATN&&) = delete;
34
+
35
+ ~ATN();
36
+
37
+ ATN& operator=(const ATN&) = delete;
38
+
39
+ ATN& operator=(ATN&&) = delete;
28
40
 
29
41
  std::vector<ATNState *> states;
30
42
 
@@ -56,37 +68,34 @@ namespace atn {
56
68
 
57
69
  /// For lexer ATNs, this is an array of {@link LexerAction} objects which may
58
70
  /// be referenced by action transitions in the ATN.
59
- std::vector<Ref<LexerAction>> lexerActions;
71
+ std::vector<Ref<const LexerAction>> lexerActions;
60
72
 
61
73
  std::vector<TokensStartState *> modeToStartState;
62
74
 
63
- ATN& operator = (ATN &other) NOEXCEPT;
64
- ATN& operator = (ATN &&other) NOEXCEPT;
65
-
66
75
  /// <summary>
67
76
  /// Compute the set of valid tokens that can occur starting in state {@code s}.
68
77
  /// If {@code ctx} is null, the set of tokens will not include what can follow
69
78
  /// the rule surrounding {@code s}. In other words, the set will be
70
79
  /// restricted to tokens reachable staying within {@code s}'s rule.
71
80
  /// </summary>
72
- virtual misc::IntervalSet nextTokens(ATNState *s, RuleContext *ctx) const;
81
+ misc::IntervalSet nextTokens(ATNState *s, RuleContext *ctx) const;
73
82
 
74
83
  /// <summary>
75
84
  /// Compute the set of valid tokens that can occur starting in {@code s} and
76
85
  /// staying in same rule. <seealso cref="Token#EPSILON"/> is in set if we reach end of
77
86
  /// rule.
78
87
  /// </summary>
79
- virtual misc::IntervalSet const& nextTokens(ATNState *s) const;
88
+ misc::IntervalSet const& nextTokens(ATNState *s) const;
80
89
 
81
- virtual void addState(ATNState *state);
90
+ void addState(ATNState *state);
82
91
 
83
- virtual void removeState(ATNState *state);
92
+ void removeState(ATNState *state);
84
93
 
85
- virtual int defineDecisionState(DecisionState *s);
94
+ int defineDecisionState(DecisionState *s);
86
95
 
87
- virtual DecisionState *getDecisionState(size_t decision) const;
96
+ DecisionState *getDecisionState(size_t decision) const;
88
97
 
89
- virtual size_t getNumberOfDecisions() const;
98
+ size_t getNumberOfDecisions() const;
90
99
 
91
100
  /// <summary>
92
101
  /// Computes the set of input symbols which could follow ATN state number
@@ -106,12 +115,17 @@ namespace atn {
106
115
  /// specified state in the specified context. </returns>
107
116
  /// <exception cref="IllegalArgumentException"> if the ATN does not contain a state with
108
117
  /// number {@code stateNumber} </exception>
109
- virtual misc::IntervalSet getExpectedTokens(size_t stateNumber, RuleContext *context) const;
118
+ misc::IntervalSet getExpectedTokens(size_t stateNumber, RuleContext *context) const;
110
119
 
111
120
  std::string toString() const;
112
121
 
113
122
  private:
123
+ friend class LexerATNSimulator;
124
+ friend class ParserATNSimulator;
125
+
114
126
  mutable std::mutex _mutex;
127
+ mutable std::shared_mutex _stateMutex;
128
+ mutable std::shared_mutex _edgeMutex;
115
129
  };
116
130
 
117
131
  } // namespace atn
@@ -11,41 +11,40 @@
11
11
 
12
12
  using namespace antlr4::atn;
13
13
 
14
- ATNConfig::ATNConfig(ATNState *state_, size_t alt_, Ref<PredictionContext> const& context_)
15
- : ATNConfig(state_, alt_, context_, SemanticContext::NONE) {
16
- }
14
+ namespace {
17
15
 
18
- ATNConfig::ATNConfig(ATNState *state_, size_t alt_, Ref<PredictionContext> const& context_, Ref<SemanticContext> const& semanticContext_)
19
- : state(state_), alt(alt_), context(context_), semanticContext(semanticContext_) {
20
- reachesIntoOuterContext = 0;
21
- }
16
+ /**
17
+ * This field stores the bit mask for implementing the
18
+ * {@link #isPrecedenceFilterSuppressed} property as a bit within the
19
+ * existing {@link #reachesIntoOuterContext} field.
20
+ */
21
+ inline constexpr size_t SUPPRESS_PRECEDENCE_FILTER = 0x40000000;
22
22
 
23
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c) : ATNConfig(c, c->state, c->context, c->semanticContext) {
24
23
  }
25
24
 
26
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state_) : ATNConfig(c, state_, c->context, c->semanticContext) {
27
- }
25
+ ATNConfig::ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context)
26
+ : ATNConfig(state, alt, std::move(context), 0, SemanticContext::NONE) {}
28
27
 
29
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<SemanticContext> const& semanticContext)
30
- : ATNConfig(c, state, c->context, semanticContext) {
31
- }
28
+ ATNConfig::ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context, Ref<const SemanticContext> semanticContext)
29
+ : ATNConfig(state, alt, std::move(context), 0, std::move(semanticContext)) {}
32
30
 
33
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, Ref<SemanticContext> const& semanticContext)
34
- : ATNConfig(c, c->state, c->context, semanticContext) {
35
- }
31
+ ATNConfig::ATNConfig(ATNConfig const& other, Ref<const SemanticContext> semanticContext)
32
+ : ATNConfig(other.state, other.alt, other.context, other.reachesIntoOuterContext, std::move(semanticContext)) {}
36
33
 
37
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context)
38
- : ATNConfig(c, state, context, c->semanticContext) {
39
- }
34
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state)
35
+ : ATNConfig(state, other.alt, other.context, other.reachesIntoOuterContext, other.semanticContext) {}
40
36
 
41
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context,
42
- Ref<SemanticContext> const& semanticContext)
43
- : state(state), alt(c->alt), context(context), reachesIntoOuterContext(c->reachesIntoOuterContext),
44
- semanticContext(semanticContext) {
45
- }
37
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state, Ref<const SemanticContext> semanticContext)
38
+ : ATNConfig(state, other.alt, other.context, other.reachesIntoOuterContext, std::move(semanticContext)) {}
46
39
 
47
- ATNConfig::~ATNConfig() {
48
- }
40
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state, Ref<const PredictionContext> context)
41
+ : ATNConfig(state, other.alt, std::move(context), other.reachesIntoOuterContext, other.semanticContext) {}
42
+
43
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state, Ref<const PredictionContext> context, Ref<const SemanticContext> semanticContext)
44
+ : ATNConfig(state, other.alt, std::move(context), other.reachesIntoOuterContext, std::move(semanticContext)) {}
45
+
46
+ ATNConfig::ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context, size_t reachesIntoOuterContext, Ref<const SemanticContext> semanticContext)
47
+ : state(state), alt(alt), context(std::move(context)), reachesIntoOuterContext(reachesIntoOuterContext), semanticContext(std::move(semanticContext)) {}
49
48
 
50
49
  size_t ATNConfig::hashCode() const {
51
50
  size_t hashCode = misc::MurmurHash::initialize(7);
@@ -73,22 +72,18 @@ void ATNConfig::setPrecedenceFilterSuppressed(bool value) {
73
72
  }
74
73
  }
75
74
 
76
- bool ATNConfig::operator == (const ATNConfig &other) const {
75
+ bool ATNConfig::operator==(const ATNConfig &other) const {
77
76
  return state->stateNumber == other.state->stateNumber && alt == other.alt &&
78
77
  ((context == other.context) || (*context == *other.context)) &&
79
78
  *semanticContext == *other.semanticContext &&
80
79
  isPrecedenceFilterSuppressed() == other.isPrecedenceFilterSuppressed();
81
80
  }
82
81
 
83
- bool ATNConfig::operator != (const ATNConfig &other) const {
84
- return !operator==(other);
85
- }
86
-
87
- std::string ATNConfig::toString() {
82
+ std::string ATNConfig::toString() const {
88
83
  return toString(true);
89
84
  }
90
85
 
91
- std::string ATNConfig::toString(bool showAlt) {
86
+ std::string ATNConfig::toString(bool showAlt) const {
92
87
  std::stringstream ss;
93
88
  ss << "(";
94
89
 
@@ -100,12 +95,12 @@ std::string ATNConfig::toString(bool showAlt) {
100
95
  ss << ",[" << context->toString() << "]";
101
96
  }
102
97
  if (semanticContext != nullptr && semanticContext != SemanticContext::NONE) {
103
- ss << "," << semanticContext.get();
98
+ ss << ",[" << semanticContext->toString() << "]";
104
99
  }
105
100
  if (getOuterContextDepth() > 0) {
106
101
  ss << ",up=" << getOuterContextDepth();
107
102
  }
108
- ss << ')';
103
+ ss << ")";
109
104
 
110
105
  return ss.str();
111
106
  }
@@ -5,6 +5,11 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <cassert>
9
+
10
+ #include "antlr4-common.h"
11
+ #include "atn/SemanticContext.h"
12
+
8
13
  namespace antlr4 {
9
14
  namespace atn {
10
15
 
@@ -20,32 +25,39 @@ namespace atn {
20
25
  public:
21
26
  struct Hasher
22
27
  {
28
+ size_t operator()(Ref<ATNConfig> const& k) const {
29
+ return k->hashCode();
30
+ }
31
+
23
32
  size_t operator()(ATNConfig const& k) const {
24
33
  return k.hashCode();
25
34
  }
26
35
  };
27
36
 
28
37
  struct Comparer {
38
+ bool operator()(Ref<ATNConfig> const& lhs, Ref<ATNConfig> const& rhs) const {
39
+ return (lhs == rhs) || (*lhs == *rhs);
40
+ }
41
+
29
42
  bool operator()(ATNConfig const& lhs, ATNConfig const& rhs) const {
30
43
  return (&lhs == &rhs) || (lhs == rhs);
31
44
  }
32
45
  };
33
46
 
34
-
35
47
  using Set = std::unordered_set<Ref<ATNConfig>, Hasher, Comparer>;
36
48
 
37
49
  /// The ATN state associated with this configuration.
38
- ATNState * state;
50
+ ATNState *state = nullptr;
39
51
 
40
52
  /// What alt (or lexer rule) is predicted by this configuration.
41
- const size_t alt;
53
+ const size_t alt = 0;
42
54
 
43
55
  /// The stack of invoking states leading to the rule/states associated
44
56
  /// with this config. We track only those contexts pushed during
45
57
  /// execution of the ATN simulator.
46
58
  ///
47
59
  /// Can be shared between multiple ANTConfig instances.
48
- Ref<PredictionContext> context;
60
+ Ref<const PredictionContext> context;
49
61
 
50
62
  /**
51
63
  * We cannot execute predicates dependent upon local context unless
@@ -70,23 +82,25 @@ namespace atn {
70
82
  * {@link ATNConfigSet#add(ATNConfig, DoubleKeyMap)} method are
71
83
  * <em>completely</em> unaffected by the change.</p>
72
84
  */
73
- size_t reachesIntoOuterContext;
85
+ size_t reachesIntoOuterContext = 0;
74
86
 
75
87
  /// Can be shared between multiple ATNConfig instances.
76
- Ref<SemanticContext> semanticContext;
88
+ Ref<const SemanticContext> semanticContext;
77
89
 
78
- ATNConfig(ATNState *state, size_t alt, Ref<PredictionContext> const& context);
79
- ATNConfig(ATNState *state, size_t alt, Ref<PredictionContext> const& context, Ref<SemanticContext> const& semanticContext);
90
+ ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context);
91
+ ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context, Ref<const SemanticContext> semanticContext);
80
92
 
81
- ATNConfig(Ref<ATNConfig> const& c); // dup
82
- ATNConfig(Ref<ATNConfig> const& c, ATNState *state);
83
- ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<SemanticContext> const& semanticContext);
84
- ATNConfig(Ref<ATNConfig> const& c, Ref<SemanticContext> const& semanticContext);
85
- ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context);
86
- ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context, Ref<SemanticContext> const& semanticContext);
93
+ ATNConfig(ATNConfig const& other, Ref<const SemanticContext> semanticContext);
94
+ ATNConfig(ATNConfig const& other, ATNState *state);
95
+ ATNConfig(ATNConfig const& other, ATNState *state, Ref<const SemanticContext> semanticContext);
96
+ ATNConfig(ATNConfig const& other, ATNState *state, Ref<const PredictionContext> context);
97
+ ATNConfig(ATNConfig const& other, ATNState *state, Ref<const PredictionContext> context, Ref<const SemanticContext> semanticContext);
87
98
 
88
99
  ATNConfig(ATNConfig const&) = default;
89
- virtual ~ATNConfig();
100
+
101
+ ATNConfig(ATNConfig&&) = default;
102
+
103
+ virtual ~ATNConfig() = default;
90
104
 
91
105
  virtual size_t hashCode() const;
92
106
 
@@ -95,32 +109,21 @@ namespace atn {
95
109
  * as it existed prior to the introduction of the
96
110
  * {@link #isPrecedenceFilterSuppressed} method.
97
111
  */
98
- size_t getOuterContextDepth() const ;
112
+ size_t getOuterContextDepth() const;
99
113
  bool isPrecedenceFilterSuppressed() const;
100
114
  void setPrecedenceFilterSuppressed(bool value);
101
115
 
102
116
  /// An ATN configuration is equal to another if both have
103
117
  /// the same state, they predict the same alternative, and
104
118
  /// syntactic/semantic contexts are the same.
105
- bool operator == (const ATNConfig &other) const;
106
- bool operator != (const ATNConfig &other) const;
119
+ bool operator==(const ATNConfig &other) const;
120
+ bool operator!=(const ATNConfig &other) const;
107
121
 
108
- virtual std::string toString();
109
- std::string toString(bool showAlt);
122
+ virtual std::string toString() const;
123
+ std::string toString(bool showAlt) const;
110
124
 
111
125
  private:
112
- /**
113
- * This field stores the bit mask for implementing the
114
- * {@link #isPrecedenceFilterSuppressed} property as a bit within the
115
- * existing {@link #reachesIntoOuterContext} field.
116
- */
117
- #if __cplusplus >= 201703L
118
- static constexpr size_t SUPPRESS_PRECEDENCE_FILTER = 0x40000000;
119
- #else
120
- enum : size_t {
121
- SUPPRESS_PRECEDENCE_FILTER = 0x40000000,
122
- };
123
- #endif
126
+ ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context, size_t reachesIntoOuterContext, Ref<const SemanticContext> semanticContext);
124
127
  };
125
128
 
126
129
  } // namespace atn