expressir 1.2.3 → 1.2.6

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 (328) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +223 -31
  4. data/.gitignore +7 -1
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/README.adoc +8 -0
  8. data/Rakefile +4 -1
  9. data/bin/console +0 -1
  10. data/bin/rspec +3 -3
  11. data/exe/expressir +4 -2
  12. data/exe/format +1 -1
  13. data/exe/format-test +25 -25
  14. data/exe/generate-parser +16 -13
  15. data/expressir.gemspec +11 -9
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -9
  17. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
  18. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +19 -4
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +51 -35
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +1 -1
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +1 -5
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +1 -5
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +1 -12
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +9 -6
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +43 -18
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +16 -6
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +1 -1
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +1 -1
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +1 -1
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +2 -3
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +9 -9
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +2 -2
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +2 -2
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +51 -31
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +1 -7
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +20 -23
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +21 -21
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +4 -4
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +12 -17
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +7 -7
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +1 -1
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +6 -6
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +4 -2
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -53
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -27
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -58
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +6 -57
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +35 -15
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +29 -36
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +36 -27
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -464
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -62
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +42 -36
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -108
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +10 -43
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +17 -28
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +169 -152
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +87 -116
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +11 -23
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +2 -9
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +15 -28
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +35 -9
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +2 -2
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +13 -54
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -23
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -40
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  221. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +14 -5
  222. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  223. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  224. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  225. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +30 -6
  226. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  227. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  228. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  229. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +1 -1
  230. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +1 -1
  231. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  232. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +1 -1
  233. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  234. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  235. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +1 -1
  236. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +1 -1
  237. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  238. data/ext/express-parser/antlrgen/Express.interp +1 -1
  239. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  240. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  241. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  242. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  243. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  244. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  245. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  246. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  247. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  248. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  249. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  250. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  251. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  252. data/ext/express-parser/express_parser.cpp +165 -101
  253. data/ext/express-parser/extconf.rb +14 -14
  254. data/lib/expressir/config.rb +1 -1
  255. data/lib/expressir/express/parser.rb +17 -15
  256. data/lib/expressir/express/visitor.rb +7 -3
  257. data/lib/expressir/model.rb +78 -78
  258. data/lib/expressir/version.rb +1 -1
  259. data/rakelib/antlr4-native.rake +161 -0
  260. data/rakelib/cross-ruby.rake +213 -162
  261. data/spec/acceptance/version_spec.rb +17 -2
  262. data/spec/expressir/express/cache_spec.rb +23 -5
  263. data/spec/expressir/express/formatter_spec.rb +54 -8
  264. data/spec/expressir/express/parser_spec.rb +47 -11
  265. data/spec/expressir/model/model_element_spec.rb +198 -146
  266. data/spec/spec_helper.rb +7 -0
  267. metadata +79 -91
  268. data/demo.rb +0 -18
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  274. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  275. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  276. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  277. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  278. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  279. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  280. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  281. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  282. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  283. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  284. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  285. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  286. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  287. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  288. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  289. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  290. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  291. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  292. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  293. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  294. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  295. data/original/examples/employment/eclipse/.project +0 -17
  296. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  297. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  298. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  299. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  300. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  301. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  302. data/original/examples/employment/eclipse/readme.txt +0 -7
  303. data/original/examples/employment/employment_schema.exp +0 -33
  304. data/original/examples/employment/employment_schema.rb +0 -232
  305. data/original/examples/employment/employment_schema.xml +0 -93
  306. data/original/examples/employment/employment_schema___module.rb +0 -46
  307. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  308. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  309. data/original/examples/employment/example_employment_data.xml +0 -1
  310. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  311. data/original/examples/employment/example_employment_reader.rb +0 -30
  312. data/original/examples/employment/example_employment_writer.rb +0 -51
  313. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  314. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  315. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  316. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  317. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  318. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  319. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  320. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  321. data/original/exp2ruby.rb +0 -525
  322. data/original/expsm.rb +0 -34
  323. data/original/mapping_owl.rb +0 -1018
  324. data/original/mapping_sysml.rb +0 -2281
  325. data/original/mapping_uml2.rb +0 -599
  326. data/original/mapping_uml2_eclipse.rb +0 -433
  327. data/original/reeper.rb +0 -134
  328. data/spec/expressr_spec.rb +0 -5
@@ -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);
@@ -183,7 +132,7 @@ std::string ATN::toString() const {
183
132
  ss << "states (" << states.size() << ") {" << std::endl;
184
133
 
185
134
  size_t index = 0;
186
- for (auto state : states) {
135
+ for (auto *state : states) {
187
136
  if (state == nullptr) {
188
137
  ss << " " << index++ << ": nul" << std::endl;
189
138
  } else {
@@ -193,7 +142,7 @@ std::string ATN::toString() const {
193
142
  }
194
143
 
195
144
  index = 0;
196
- for (auto state : decisionToState) {
145
+ for (auto *state : decisionToState) {
197
146
  if (state == nullptr) {
198
147
  ss << " " << index++ << ": nul" << std::endl;
199
148
  } else {
@@ -7,18 +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
- static const size_t INVALID_ALT_NUMBER = 0;
24
+ static constexpr size_t INVALID_ALT_NUMBER = 0;
16
25
 
17
26
  /// Used for runtime deserialization of ATNs from strings.
18
27
  ATN();
19
- ATN(ATN &&other);
28
+
20
29
  ATN(ATNType grammarType, size_t maxTokenType);
21
- 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;
22
40
 
23
41
  std::vector<ATNState *> states;
24
42
 
@@ -50,37 +68,34 @@ namespace atn {
50
68
 
51
69
  /// For lexer ATNs, this is an array of {@link LexerAction} objects which may
52
70
  /// be referenced by action transitions in the ATN.
53
- std::vector<Ref<LexerAction>> lexerActions;
71
+ std::vector<Ref<const LexerAction>> lexerActions;
54
72
 
55
73
  std::vector<TokensStartState *> modeToStartState;
56
74
 
57
- ATN& operator = (ATN &other) NOEXCEPT;
58
- ATN& operator = (ATN &&other) NOEXCEPT;
59
-
60
75
  /// <summary>
61
76
  /// Compute the set of valid tokens that can occur starting in state {@code s}.
62
77
  /// If {@code ctx} is null, the set of tokens will not include what can follow
63
78
  /// the rule surrounding {@code s}. In other words, the set will be
64
79
  /// restricted to tokens reachable staying within {@code s}'s rule.
65
80
  /// </summary>
66
- virtual misc::IntervalSet nextTokens(ATNState *s, RuleContext *ctx) const;
81
+ misc::IntervalSet nextTokens(ATNState *s, RuleContext *ctx) const;
67
82
 
68
83
  /// <summary>
69
84
  /// Compute the set of valid tokens that can occur starting in {@code s} and
70
85
  /// staying in same rule. <seealso cref="Token#EPSILON"/> is in set if we reach end of
71
86
  /// rule.
72
87
  /// </summary>
73
- virtual misc::IntervalSet const& nextTokens(ATNState *s) const;
88
+ misc::IntervalSet const& nextTokens(ATNState *s) const;
74
89
 
75
- virtual void addState(ATNState *state);
90
+ void addState(ATNState *state);
76
91
 
77
- virtual void removeState(ATNState *state);
92
+ void removeState(ATNState *state);
78
93
 
79
- virtual int defineDecisionState(DecisionState *s);
94
+ int defineDecisionState(DecisionState *s);
80
95
 
81
- virtual DecisionState *getDecisionState(size_t decision) const;
96
+ DecisionState *getDecisionState(size_t decision) const;
82
97
 
83
- virtual size_t getNumberOfDecisions() const;
98
+ size_t getNumberOfDecisions() const;
84
99
 
85
100
  /// <summary>
86
101
  /// Computes the set of input symbols which could follow ATN state number
@@ -100,12 +115,17 @@ namespace atn {
100
115
  /// specified state in the specified context. </returns>
101
116
  /// <exception cref="IllegalArgumentException"> if the ATN does not contain a state with
102
117
  /// number {@code stateNumber} </exception>
103
- virtual misc::IntervalSet getExpectedTokens(size_t stateNumber, RuleContext *context) const;
118
+ misc::IntervalSet getExpectedTokens(size_t stateNumber, RuleContext *context) const;
104
119
 
105
120
  std::string toString() const;
106
121
 
107
122
  private:
123
+ friend class LexerATNSimulator;
124
+ friend class ParserATNSimulator;
125
+
108
126
  mutable std::mutex _mutex;
127
+ mutable std::shared_mutex _stateMutex;
128
+ mutable std::shared_mutex _edgeMutex;
109
129
  };
110
130
 
111
131
  } // namespace atn
@@ -11,43 +11,40 @@
11
11
 
12
12
  using namespace antlr4::atn;
13
13
 
14
- const size_t ATNConfig::SUPPRESS_PRECEDENCE_FILTER = 0x40000000;
14
+ namespace {
15
15
 
16
- ATNConfig::ATNConfig(ATNState *state_, size_t alt_, Ref<PredictionContext> const& context_)
17
- : ATNConfig(state_, alt_, context_, SemanticContext::NONE) {
18
- }
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;
19
22
 
20
- ATNConfig::ATNConfig(ATNState *state_, size_t alt_, Ref<PredictionContext> const& context_, Ref<SemanticContext> const& semanticContext_)
21
- : state(state_), alt(alt_), context(context_), semanticContext(semanticContext_) {
22
- reachesIntoOuterContext = 0;
23
23
  }
24
24
 
25
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c) : ATNConfig(c, c->state, c->context, c->semanticContext) {
26
- }
25
+ ATNConfig::ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context)
26
+ : ATNConfig(state, alt, std::move(context), 0, SemanticContext::NONE) {}
27
27
 
28
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state_) : ATNConfig(c, state_, c->context, c->semanticContext) {
29
- }
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)) {}
30
30
 
31
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<SemanticContext> const& semanticContext)
32
- : ATNConfig(c, state, c->context, semanticContext) {
33
- }
31
+ ATNConfig::ATNConfig(ATNConfig const& other, Ref<const SemanticContext> semanticContext)
32
+ : ATNConfig(other.state, other.alt, other.context, other.reachesIntoOuterContext, std::move(semanticContext)) {}
34
33
 
35
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, Ref<SemanticContext> const& semanticContext)
36
- : ATNConfig(c, c->state, c->context, semanticContext) {
37
- }
34
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state)
35
+ : ATNConfig(state, other.alt, other.context, other.reachesIntoOuterContext, other.semanticContext) {}
38
36
 
39
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context)
40
- : ATNConfig(c, state, context, c->semanticContext) {
41
- }
37
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state, Ref<const SemanticContext> semanticContext)
38
+ : ATNConfig(state, other.alt, other.context, other.reachesIntoOuterContext, std::move(semanticContext)) {}
42
39
 
43
- ATNConfig::ATNConfig(Ref<ATNConfig> const& c, ATNState *state, Ref<PredictionContext> const& context,
44
- Ref<SemanticContext> const& semanticContext)
45
- : state(state), alt(c->alt), context(context), reachesIntoOuterContext(c->reachesIntoOuterContext),
46
- semanticContext(semanticContext) {
47
- }
40
+ ATNConfig::ATNConfig(ATNConfig const& other, ATNState *state, Ref<const PredictionContext> context)
41
+ : ATNConfig(state, other.alt, std::move(context), other.reachesIntoOuterContext, other.semanticContext) {}
48
42
 
49
- ATNConfig::~ATNConfig() {
50
- }
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)) {}
51
48
 
52
49
  size_t ATNConfig::hashCode() const {
53
50
  size_t hashCode = misc::MurmurHash::initialize(7);
@@ -75,22 +72,18 @@ void ATNConfig::setPrecedenceFilterSuppressed(bool value) {
75
72
  }
76
73
  }
77
74
 
78
- bool ATNConfig::operator == (const ATNConfig &other) const {
75
+ bool ATNConfig::operator==(const ATNConfig &other) const {
79
76
  return state->stateNumber == other.state->stateNumber && alt == other.alt &&
80
77
  ((context == other.context) || (*context == *other.context)) &&
81
78
  *semanticContext == *other.semanticContext &&
82
79
  isPrecedenceFilterSuppressed() == other.isPrecedenceFilterSuppressed();
83
80
  }
84
81
 
85
- bool ATNConfig::operator != (const ATNConfig &other) const {
86
- return !operator==(other);
87
- }
88
-
89
- std::string ATNConfig::toString() {
82
+ std::string ATNConfig::toString() const {
90
83
  return toString(true);
91
84
  }
92
85
 
93
- std::string ATNConfig::toString(bool showAlt) {
86
+ std::string ATNConfig::toString(bool showAlt) const {
94
87
  std::stringstream ss;
95
88
  ss << "(";
96
89
 
@@ -102,12 +95,12 @@ std::string ATNConfig::toString(bool showAlt) {
102
95
  ss << ",[" << context->toString() << "]";
103
96
  }
104
97
  if (semanticContext != nullptr && semanticContext != SemanticContext::NONE) {
105
- ss << "," << semanticContext.get();
98
+ ss << ",[" << semanticContext->toString() << "]";
106
99
  }
107
100
  if (getOuterContextDepth() > 0) {
108
101
  ss << ",up=" << getOuterContextDepth();
109
102
  }
110
- ss << ')';
103
+ ss << ")";
111
104
 
112
105
  return ss.str();
113
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,26 +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
- static const size_t SUPPRESS_PRECEDENCE_FILTER;
126
+ ATNConfig(ATNState *state, size_t alt, Ref<const PredictionContext> context, size_t reachesIntoOuterContext, Ref<const SemanticContext> semanticContext);
118
127
  };
119
128
 
120
129
  } // namespace atn
@@ -139,7 +148,7 @@ namespace std {
139
148
  size_t operator() (const std::vector<Ref<ATNConfig>> &vector) const
140
149
  {
141
150
  std::size_t seed = 0;
142
- for (auto &config : vector) {
151
+ for (const auto &config : vector) {
143
152
  seed ^= config->hashCode() + 0x9e3779b9 + (seed << 6) + (seed >> 2);
144
153
  }
145
154
  return seed;