expressir 1.2.3 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -5,24 +5,30 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <atomic>
9
+
8
10
  #include "Recognizer.h"
9
11
  #include "atn/ATN.h"
10
12
  #include "atn/ATNState.h"
13
+ #include "atn/PredictionContextType.h"
11
14
 
12
15
  namespace antlr4 {
16
+
17
+ class RuleContext;
18
+
13
19
  namespace atn {
14
20
 
15
- struct PredictionContextHasher;
16
- struct PredictionContextComparer;
21
+ class ATN;
22
+ class ArrayPredictionContext;
23
+ class SingletonPredictionContext;
24
+ class PredictionContextCache;
17
25
  class PredictionContextMergeCache;
18
26
 
19
- typedef std::unordered_set<Ref<PredictionContext>, PredictionContextHasher, PredictionContextComparer> PredictionContextCache;
20
-
21
27
  class ANTLR4CPP_PUBLIC PredictionContext {
22
28
  public:
23
29
  /// Represents $ in local context prediction, which means wildcard.
24
30
  /// *+x = *.
25
- static const Ref<PredictionContext> EMPTY;
31
+ static const Ref<const PredictionContext> EMPTY;
26
32
 
27
33
  /// Represents $ in an array in full context mode, when $
28
34
  /// doesn't mean wildcard: $ + x = [$,x]. Here,
@@ -30,68 +36,13 @@ namespace atn {
30
36
  // ml: originally Integer.MAX_VALUE, which would be -1 for us, but this is already used in places where
31
37
  // -1 is converted to unsigned, so we use a different value here. Any value does the job provided it doesn't
32
38
  // conflict with real return states.
33
- static const size_t EMPTY_RETURN_STATE = static_cast<size_t>(-10); // std::numeric_limits<size_t>::max() - 9;
34
-
35
- private:
36
- static const size_t INITIAL_HASH = 1;
37
-
38
- public:
39
- static size_t globalNodeCount;
40
- const size_t id;
41
-
42
- /// <summary>
43
- /// Stores the computed hash code of this <seealso cref="PredictionContext"/>. The hash
44
- /// code is computed in parts to match the following reference algorithm.
45
- ///
46
- /// <pre>
47
- /// private int referenceHashCode() {
48
- /// int hash = <seealso cref="MurmurHash#initialize"/>(<seealso cref="#INITIAL_HASH"/>);
49
- ///
50
- /// for (int i = 0; i < <seealso cref="#size()"/>; i++) {
51
- /// hash = <seealso cref="MurmurHash#update"/>(hash, <seealso cref="#getParent"/>(i));
52
- /// }
53
- ///
54
- /// for (int i = 0; i < <seealso cref="#size()"/>; i++) {
55
- /// hash = <seealso cref="MurmurHash#update"/>(hash, <seealso cref="#getReturnState"/>(i));
56
- /// }
57
- ///
58
- /// hash = <seealso cref="MurmurHash#finish"/>(hash, 2 * <seealso cref="#size()"/>);
59
- /// return hash;
60
- /// }
61
- /// </pre>
62
- /// </summary>
63
- const size_t cachedHashCode;
39
+ static constexpr size_t EMPTY_RETURN_STATE = std::numeric_limits<size_t>::max() - 9;
64
40
 
65
- protected:
66
- PredictionContext(size_t cachedHashCode);
67
- ~PredictionContext();
68
-
69
- public:
70
- /// Convert a RuleContext tree to a PredictionContext graph.
71
- /// Return EMPTY if outerContext is empty.
72
- static Ref<PredictionContext> fromRuleContext(const ATN &atn, RuleContext *outerContext);
73
-
74
- virtual size_t size() const = 0;
75
- virtual Ref<PredictionContext> getParent(size_t index) const = 0;
76
- virtual size_t getReturnState(size_t index) const = 0;
77
-
78
- virtual bool operator == (const PredictionContext &o) const = 0;
79
-
80
- /// This means only the EMPTY (wildcard? not sure) context is in set.
81
- virtual bool isEmpty() const;
82
- virtual bool hasEmptyPath() const;
83
- virtual size_t hashCode() const;
84
-
85
- protected:
86
- static size_t calculateEmptyHashCode();
87
- static size_t calculateHashCode(Ref<PredictionContext> parent, size_t returnState);
88
- static size_t calculateHashCode(const std::vector<Ref<PredictionContext>> &parents,
89
- const std::vector<size_t> &returnStates);
90
-
91
- public:
92
41
  // dispatch
93
- static Ref<PredictionContext> merge(const Ref<PredictionContext> &a, const Ref<PredictionContext> &b,
94
- bool rootIsWildcard, PredictionContextMergeCache *mergeCache);
42
+ static Ref<const PredictionContext> merge(Ref<const PredictionContext> a,
43
+ Ref<const PredictionContext> b,
44
+ bool rootIsWildcard,
45
+ PredictionContextMergeCache *mergeCache);
95
46
 
96
47
  /// <summary>
97
48
  /// Merge two <seealso cref="SingletonPredictionContext"/> instances.
@@ -127,8 +78,10 @@ namespace atn {
127
78
  /// <param name="rootIsWildcard"> {@code true} if this is a local-context merge,
128
79
  /// otherwise false to indicate a full-context merge </param>
129
80
  /// <param name="mergeCache"> </param>
130
- static Ref<PredictionContext> mergeSingletons(const Ref<SingletonPredictionContext> &a,
131
- const Ref<SingletonPredictionContext> &b, bool rootIsWildcard, PredictionContextMergeCache *mergeCache);
81
+ static Ref<const PredictionContext> mergeSingletons(Ref<const SingletonPredictionContext> a,
82
+ Ref<const SingletonPredictionContext> b,
83
+ bool rootIsWildcard,
84
+ PredictionContextMergeCache *mergeCache);
132
85
 
133
86
  /**
134
87
  * Handle case where at least one of {@code a} or {@code b} is
@@ -168,8 +121,9 @@ namespace atn {
168
121
  * @param rootIsWildcard {@code true} if this is a local-context merge,
169
122
  * otherwise false to indicate a full-context merge
170
123
  */
171
- static Ref<PredictionContext> mergeRoot(const Ref<SingletonPredictionContext> &a,
172
- const Ref<SingletonPredictionContext> &b, bool rootIsWildcard);
124
+ static Ref<const PredictionContext> mergeRoot(Ref<const SingletonPredictionContext> a,
125
+ Ref<const SingletonPredictionContext> b,
126
+ bool rootIsWildcard);
173
127
 
174
128
  /**
175
129
  * Merge two {@link ArrayPredictionContext} instances.
@@ -190,65 +144,82 @@ namespace atn {
190
144
  * {@link SingletonPredictionContext}.<br>
191
145
  * <embed src="images/ArrayMerge_EqualTop.svg" type="image/svg+xml"/></p>
192
146
  */
193
- static Ref<PredictionContext> mergeArrays(const Ref<ArrayPredictionContext> &a,
194
- const Ref<ArrayPredictionContext> &b, bool rootIsWildcard, PredictionContextMergeCache *mergeCache);
147
+ static Ref<const PredictionContext> mergeArrays(Ref<const ArrayPredictionContext> a,
148
+ Ref<const ArrayPredictionContext> b,
149
+ bool rootIsWildcard,
150
+ PredictionContextMergeCache *mergeCache);
195
151
 
196
- protected:
197
- /// Make pass over all M parents; merge any equal() ones.
198
- /// @returns true if the list has been changed (i.e. duplicates where found).
199
- static bool combineCommonParents(std::vector<Ref<PredictionContext>> &parents);
152
+ static std::string toDOTString(const Ref<const PredictionContext> &context);
200
153
 
201
- public:
202
- static std::string toDOTString(const Ref<PredictionContext> &context);
154
+ static Ref<const PredictionContext> getCachedContext(const Ref<const PredictionContext> &context,
155
+ PredictionContextCache &contextCache);
203
156
 
204
- static Ref<PredictionContext> getCachedContext(const Ref<PredictionContext> &context,
205
- PredictionContextCache &contextCache,
206
- std::map<Ref<PredictionContext>, Ref<PredictionContext>> &visited);
157
+ static std::vector<Ref<const PredictionContext>> getAllContextNodes(const Ref<const PredictionContext> &context);
207
158
 
208
- // ter's recursive version of Sam's getAllNodes()
209
- static std::vector<Ref<PredictionContext>> getAllContextNodes(const Ref<PredictionContext> &context);
210
- static void getAllContextNodes_(const Ref<PredictionContext> &context,
211
- std::vector<Ref<PredictionContext>> &nodes, std::set<PredictionContext *> &visited);
159
+ /// Convert a RuleContext tree to a PredictionContext graph.
160
+ /// Return EMPTY if outerContext is empty.
161
+ static Ref<const PredictionContext> fromRuleContext(const ATN &atn, RuleContext *outerContext);
212
162
 
213
- virtual std::string toString() const;
214
- virtual std::string toString(Recognizer *recog) const;
163
+ PredictionContext(const PredictionContext&) = delete;
215
164
 
216
- std::vector<std::string> toStrings(Recognizer *recognizer, int currentState);
217
- std::vector<std::string> toStrings(Recognizer *recognizer, const Ref<PredictionContext> &stop, int currentState);
218
- };
165
+ virtual ~PredictionContext() = default;
219
166
 
220
- struct PredictionContextHasher {
221
- size_t operator () (const Ref<PredictionContext> &k) const {
222
- return k->hashCode();
223
- }
224
- };
167
+ PredictionContext& operator=(const PredictionContext&) = delete;
168
+ PredictionContext& operator=(PredictionContext&&) = delete;
225
169
 
226
- struct PredictionContextComparer {
227
- bool operator () (const Ref<PredictionContext> &lhs, const Ref<PredictionContext> &rhs) const
228
- {
229
- if (lhs == rhs) // Object identity.
230
- return true;
231
- return (lhs->hashCode() == rhs->hashCode()) && (*lhs == *rhs);
232
- }
233
- };
170
+ PredictionContextType getContextType() const { return _contextType; }
234
171
 
235
- class PredictionContextMergeCache {
236
- public:
237
- Ref<PredictionContext> put(Ref<PredictionContext> const& key1, Ref<PredictionContext> const& key2,
238
- Ref<PredictionContext> const& value);
239
- Ref<PredictionContext> get(Ref<PredictionContext> const& key1, Ref<PredictionContext> const& key2);
172
+ virtual size_t size() const = 0;
173
+ virtual const Ref<const PredictionContext>& getParent(size_t index) const = 0;
174
+ virtual size_t getReturnState(size_t index) const = 0;
240
175
 
241
- void clear();
242
- std::string toString() const;
243
- size_t count() const;
176
+ /// This means only the EMPTY (wildcard? not sure) context is in set.
177
+ virtual bool isEmpty() const = 0;
178
+ bool hasEmptyPath() const;
244
179
 
245
- private:
246
- std::unordered_map<Ref<PredictionContext>,
247
- std::unordered_map<Ref<PredictionContext>, Ref<PredictionContext>, PredictionContextHasher, PredictionContextComparer>,
248
- PredictionContextHasher, PredictionContextComparer> _data;
180
+ size_t hashCode() const;
181
+
182
+ virtual bool equals(const PredictionContext &other) const = 0;
249
183
 
184
+ virtual std::string toString() const = 0;
185
+
186
+ std::vector<std::string> toStrings(Recognizer *recognizer, int currentState) const;
187
+ std::vector<std::string> toStrings(Recognizer *recognizer,
188
+ const Ref<const PredictionContext> &stop,
189
+ int currentState) const;
190
+
191
+ protected:
192
+ explicit PredictionContext(PredictionContextType contextType);
193
+
194
+ PredictionContext(PredictionContext&& other);
195
+
196
+ virtual size_t hashCodeImpl() const = 0;
197
+
198
+ size_t cachedHashCode() const { return _hashCode.load(std::memory_order_relaxed); }
199
+
200
+ private:
201
+ const PredictionContextType _contextType;
202
+ mutable std::atomic<size_t> _hashCode;
250
203
  };
251
204
 
252
- } // namespace atn
253
- } // namespace antlr4
205
+ inline bool operator==(const PredictionContext &lhs, const PredictionContext &rhs) {
206
+ return lhs.equals(rhs);
207
+ }
208
+
209
+ inline bool operator!=(const PredictionContext &lhs, const PredictionContext &rhs) {
210
+ return !operator==(lhs, rhs);
211
+ }
212
+
213
+ } // namespace atn
214
+ } // namespace antlr4
215
+
216
+ namespace std {
217
+
218
+ template <>
219
+ struct hash<::antlr4::atn::PredictionContext> {
220
+ size_t operator()(const ::antlr4::atn::PredictionContext &predictionContext) const {
221
+ return predictionContext.hashCode();
222
+ }
223
+ };
254
224
 
225
+ } // namespace std
@@ -0,0 +1,56 @@
1
+ // Copyright 2012-2022 The ANTLR Project
2
+ //
3
+ // Redistribution and use in source and binary forms, with or without modification, are permitted
4
+ // provided that the following conditions are met:
5
+ //
6
+ // 1. Redistributions of source code must retain the above copyright notice, this list of conditions
7
+ // and the following disclaimer.
8
+ //
9
+ // 2. Redistributions in binary form must reproduce the above copyright notice, this list of
10
+ // conditions and the following disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ //
13
+ // 3. Neither the name of the copyright holder nor the names of its contributors may be used to
14
+ // endorse or promote products derived from this software without specific prior written
15
+ // permission.
16
+ //
17
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18
+ // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19
+ // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20
+ // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
24
+ // WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ #include "atn/PredictionContextCache.h"
27
+
28
+ using namespace antlr4::atn;
29
+
30
+ void PredictionContextCache::put(const Ref<const PredictionContext> &value) {
31
+ assert(value);
32
+
33
+ _data.insert(value);
34
+ }
35
+
36
+ Ref<const PredictionContext> PredictionContextCache::get(
37
+ const Ref<const PredictionContext> &value) const {
38
+ assert(value);
39
+
40
+ auto iterator = _data.find(value);
41
+ if (iterator == _data.end()) {
42
+ return nullptr;
43
+ }
44
+ return *iterator;
45
+ }
46
+
47
+ size_t PredictionContextCache::PredictionContextHasher::operator()(
48
+ const Ref<const PredictionContext> &predictionContext) const {
49
+ return predictionContext->hashCode();
50
+ }
51
+
52
+ bool PredictionContextCache::PredictionContextComparer::operator()(
53
+ const Ref<const PredictionContext> &lhs,
54
+ const Ref<const PredictionContext> &rhs) const {
55
+ return *lhs == *rhs;
56
+ }
@@ -0,0 +1,64 @@
1
+ // Copyright 2012-2022 The ANTLR Project
2
+ //
3
+ // Redistribution and use in source and binary forms, with or without modification, are permitted
4
+ // provided that the following conditions are met:
5
+ //
6
+ // 1. Redistributions of source code must retain the above copyright notice, this list of conditions
7
+ // and the following disclaimer.
8
+ //
9
+ // 2. Redistributions in binary form must reproduce the above copyright notice, this list of
10
+ // conditions and the following disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ //
13
+ // 3. Neither the name of the copyright holder nor the names of its contributors may be used to
14
+ // endorse or promote products derived from this software without specific prior written
15
+ // permission.
16
+ //
17
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18
+ // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19
+ // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20
+ // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
24
+ // WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ #pragma once
27
+
28
+ #include <unordered_set>
29
+
30
+ #include "atn/PredictionContext.h"
31
+
32
+ namespace antlr4 {
33
+ namespace atn {
34
+
35
+ class ANTLR4CPP_PUBLIC PredictionContextCache final {
36
+ public:
37
+ PredictionContextCache() = default;
38
+
39
+ PredictionContextCache(const PredictionContextCache&) = delete;
40
+ PredictionContextCache(PredictionContextCache&&) = delete;
41
+
42
+ PredictionContextCache& operator=(const PredictionContextCache&) = delete;
43
+ PredictionContextCache& operator=(PredictionContextCache&&) = delete;
44
+
45
+ void put(const Ref<const PredictionContext> &value);
46
+
47
+ Ref<const PredictionContext> get(const Ref<const PredictionContext> &value) const;
48
+
49
+ private:
50
+ struct ANTLR4CPP_PUBLIC PredictionContextHasher final {
51
+ size_t operator()(const Ref<const PredictionContext> &predictionContext) const;
52
+ };
53
+
54
+ struct ANTLR4CPP_PUBLIC PredictionContextComparer final {
55
+ bool operator()(const Ref<const PredictionContext> &lhs,
56
+ const Ref<const PredictionContext> &rhs) const;
57
+ };
58
+
59
+ std::unordered_set<Ref<const PredictionContext>,
60
+ PredictionContextHasher, PredictionContextComparer> _data;
61
+ };
62
+
63
+ } // namespace atn
64
+ } // namespace antlr4
@@ -0,0 +1,167 @@
1
+ // Copyright 2012-2022 The ANTLR Project
2
+ //
3
+ // Redistribution and use in source and binary forms, with or without modification, are permitted
4
+ // provided that the following conditions are met:
5
+ //
6
+ // 1. Redistributions of source code must retain the above copyright notice, this list of conditions
7
+ // and the following disclaimer.
8
+ //
9
+ // 2. Redistributions in binary form must reproduce the above copyright notice, this list of
10
+ // conditions and the following disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ //
13
+ // 3. Neither the name of the copyright holder nor the names of its contributors may be used to
14
+ // endorse or promote products derived from this software without specific prior written
15
+ // permission.
16
+ //
17
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18
+ // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19
+ // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20
+ // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
24
+ // WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ #include "atn/PredictionContextMergeCache.h"
27
+
28
+ #include "misc/MurmurHash.h"
29
+
30
+ using namespace antlr4::atn;
31
+ using namespace antlr4::misc;
32
+
33
+ PredictionContextMergeCache::PredictionContextMergeCache(
34
+ const PredictionContextMergeCacheOptions &options) : _options(options) {}
35
+
36
+ Ref<const PredictionContext> PredictionContextMergeCache::put(
37
+ const Ref<const PredictionContext> &key1,
38
+ const Ref<const PredictionContext> &key2,
39
+ Ref<const PredictionContext> value) {
40
+ assert(key1);
41
+ assert(key2);
42
+
43
+ if (getOptions().getMaxSize() == 0) {
44
+ // Cache is effectively disabled.
45
+ return value;
46
+ }
47
+
48
+ auto [existing, inserted] = _entries.try_emplace(std::make_pair(key1.get(), key2.get()));
49
+ if (inserted) {
50
+ try {
51
+ existing->second.reset(new Entry());
52
+ } catch (...) {
53
+ _entries.erase(existing);
54
+ throw;
55
+ }
56
+ existing->second->key = std::make_pair(key1, key2);
57
+ existing->second->value = std::move(value);
58
+ pushToFront(existing->second.get());
59
+ } else {
60
+ if (existing->second->value != value) {
61
+ existing->second->value = std::move(value);
62
+ }
63
+ moveToFront(existing->second.get());
64
+ }
65
+ compact(existing->second.get());
66
+ return existing->second->value;
67
+ }
68
+
69
+ Ref<const PredictionContext> PredictionContextMergeCache::get(
70
+ const Ref<const PredictionContext> &key1,
71
+ const Ref<const PredictionContext> &key2) const {
72
+ assert(key1);
73
+ assert(key2);
74
+
75
+ if (getOptions().getMaxSize() == 0) {
76
+ // Cache is effectively disabled.
77
+ return nullptr;
78
+ }
79
+
80
+ auto iterator = _entries.find(std::make_pair(key1.get(), key2.get()));
81
+ if (iterator == _entries.end()) {
82
+ return nullptr;
83
+ }
84
+ moveToFront(iterator->second.get());
85
+ return iterator->second->value;
86
+ }
87
+
88
+ void PredictionContextMergeCache::clear() {
89
+ Container().swap(_entries);
90
+ _head = _tail = nullptr;
91
+ _size = 0;
92
+ }
93
+
94
+ void PredictionContextMergeCache::moveToFront(Entry *entry) const {
95
+ if (entry->prev == nullptr) {
96
+ assert(entry == _head);
97
+ return;
98
+ }
99
+ entry->prev->next = entry->next;
100
+ if (entry->next != nullptr) {
101
+ entry->next->prev = entry->prev;
102
+ } else {
103
+ assert(entry == _tail);
104
+ _tail = entry->prev;
105
+ }
106
+ entry->prev = nullptr;
107
+ entry->next = _head;
108
+ _head->prev = entry;
109
+ _head = entry;
110
+ assert(entry->prev == nullptr);
111
+ }
112
+
113
+ void PredictionContextMergeCache::pushToFront(Entry *entry) {
114
+ ++_size;
115
+ entry->prev = nullptr;
116
+ entry->next = _head;
117
+ if (_head != nullptr) {
118
+ _head->prev = entry;
119
+ _head = entry;
120
+ } else {
121
+ assert(entry->next == nullptr);
122
+ _head = entry;
123
+ _tail = entry;
124
+ }
125
+ assert(entry->prev == nullptr);
126
+ }
127
+
128
+ void PredictionContextMergeCache::remove(Entry *entry) {
129
+ if (entry->prev != nullptr) {
130
+ entry->prev->next = entry->next;
131
+ } else {
132
+ assert(entry == _head);
133
+ _head = entry->next;
134
+ }
135
+ if (entry->next != nullptr) {
136
+ entry->next->prev = entry->prev;
137
+ } else {
138
+ assert(entry == _tail);
139
+ _tail = entry->prev;
140
+ }
141
+ --_size;
142
+ _entries.erase(std::make_pair(entry->key.first.get(), entry->key.second.get()));
143
+ }
144
+
145
+ void PredictionContextMergeCache::compact(const Entry *preserve) {
146
+ Entry *entry = _tail;
147
+ while (entry != nullptr && _size > getOptions().getMaxSize()) {
148
+ Entry *next = entry->prev;
149
+ if (entry != preserve) {
150
+ remove(entry);
151
+ }
152
+ entry = next;
153
+ }
154
+ }
155
+
156
+ size_t PredictionContextMergeCache::PredictionContextHasher::operator()(
157
+ const PredictionContextPair &value) const {
158
+ size_t hash = MurmurHash::initialize();
159
+ hash = MurmurHash::update(hash, value.first->hashCode());
160
+ hash = MurmurHash::update(hash, value.second->hashCode());
161
+ return MurmurHash::finish(hash, 2);
162
+ }
163
+
164
+ bool PredictionContextMergeCache::PredictionContextComparer::operator()(
165
+ const PredictionContextPair &lhs, const PredictionContextPair &rhs) const {
166
+ return *lhs.first == *rhs.first && *lhs.second == *rhs.second;
167
+ }
@@ -0,0 +1,101 @@
1
+ // Copyright 2012-2022 The ANTLR Project
2
+ //
3
+ // Redistribution and use in source and binary forms, with or without modification, are permitted
4
+ // provided that the following conditions are met:
5
+ //
6
+ // 1. Redistributions of source code must retain the above copyright notice, this list of conditions
7
+ // and the following disclaimer.
8
+ //
9
+ // 2. Redistributions in binary form must reproduce the above copyright notice, this list of
10
+ // conditions and the following disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ //
13
+ // 3. Neither the name of the copyright holder nor the names of its contributors may be used to
14
+ // endorse or promote products derived from this software without specific prior written
15
+ // permission.
16
+ //
17
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18
+ // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19
+ // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
20
+ // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
24
+ // WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ #pragma once
27
+
28
+ #include <unordered_map>
29
+ #include <utility>
30
+
31
+ #include "atn/PredictionContext.h"
32
+ #include "atn/PredictionContextMergeCacheOptions.h"
33
+
34
+ namespace antlr4 {
35
+ namespace atn {
36
+
37
+ class ANTLR4CPP_PUBLIC PredictionContextMergeCache final {
38
+ public:
39
+ PredictionContextMergeCache()
40
+ : PredictionContextMergeCache(PredictionContextMergeCacheOptions()) {}
41
+
42
+ explicit PredictionContextMergeCache(const PredictionContextMergeCacheOptions &options);
43
+
44
+ PredictionContextMergeCache(const PredictionContextMergeCache&) = delete;
45
+ PredictionContextMergeCache(PredictionContextMergeCache&&) = delete;
46
+
47
+ PredictionContextMergeCache& operator=(const PredictionContextMergeCache&) = delete;
48
+ PredictionContextMergeCache& operator=(PredictionContextMergeCache&&) = delete;
49
+
50
+ Ref<const PredictionContext> put(const Ref<const PredictionContext> &key1,
51
+ const Ref<const PredictionContext> &key2,
52
+ Ref<const PredictionContext> value);
53
+
54
+ Ref<const PredictionContext> get(const Ref<const PredictionContext> &key1,
55
+ const Ref<const PredictionContext> &key2) const;
56
+
57
+ const PredictionContextMergeCacheOptions& getOptions() const { return _options; }
58
+
59
+ void clear();
60
+
61
+ private:
62
+ using PredictionContextPair = std::pair<const PredictionContext*, const PredictionContext*>;
63
+
64
+ struct ANTLR4CPP_PUBLIC PredictionContextHasher final {
65
+ size_t operator()(const PredictionContextPair &value) const;
66
+ };
67
+
68
+ struct ANTLR4CPP_PUBLIC PredictionContextComparer final {
69
+ bool operator()(const PredictionContextPair &lhs, const PredictionContextPair &rhs) const;
70
+ };
71
+
72
+ struct ANTLR4CPP_PUBLIC Entry final {
73
+ std::pair<Ref<const PredictionContext>, Ref<const PredictionContext>> key;
74
+ Ref<const PredictionContext> value;
75
+ Entry *prev = nullptr;
76
+ Entry *next = nullptr;
77
+ };
78
+
79
+ void moveToFront(Entry *entry) const;
80
+
81
+ void pushToFront(Entry *entry);
82
+
83
+ void remove(Entry *entry);
84
+
85
+ void compact(const Entry *preserve);
86
+
87
+ using Container = std::unordered_map<PredictionContextPair, std::unique_ptr<Entry>,
88
+ PredictionContextHasher, PredictionContextComparer>;
89
+
90
+ const PredictionContextMergeCacheOptions _options;
91
+
92
+ Container _entries;
93
+
94
+ mutable Entry *_head = nullptr;
95
+ mutable Entry *_tail = nullptr;
96
+
97
+ size_t _size = 0;
98
+ };
99
+
100
+ } // namespace atn
101
+ } // namespace antlr4