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
@@ -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