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
@@ -12,10 +12,11 @@
12
12
  #include "atn/RuleTransition.h"
13
13
  #include "atn/ATN.h"
14
14
  #include "atn/ATNState.h"
15
+ #include "support/StringUtils.h"
16
+ #include "support/Casts.h"
15
17
  #include "Parser.h"
16
18
  #include "CommonToken.h"
17
19
  #include "Vocabulary.h"
18
- #include "support/StringUtils.h"
19
20
 
20
21
  #include "DefaultErrorStrategy.h"
21
22
 
@@ -106,10 +107,10 @@ void DefaultErrorStrategy::sync(Parser *recognizer) {
106
107
  }
107
108
 
108
109
  switch (s->getStateType()) {
109
- case atn::ATNState::BLOCK_START:
110
- case atn::ATNState::STAR_BLOCK_START:
111
- case atn::ATNState::PLUS_BLOCK_START:
112
- case atn::ATNState::STAR_LOOP_ENTRY:
110
+ case atn::ATNStateType::BLOCK_START:
111
+ case atn::ATNStateType::STAR_BLOCK_START:
112
+ case atn::ATNStateType::PLUS_BLOCK_START:
113
+ case atn::ATNStateType::STAR_LOOP_ENTRY:
113
114
  // report error and recover if possible
114
115
  if (singleTokenDeletion(recognizer) != nullptr) {
115
116
  return;
@@ -117,8 +118,8 @@ void DefaultErrorStrategy::sync(Parser *recognizer) {
117
118
 
118
119
  throw InputMismatchException(recognizer);
119
120
 
120
- case atn::ATNState::PLUS_LOOP_BACK:
121
- case atn::ATNState::STAR_LOOP_BACK: {
121
+ case atn::ATNStateType::PLUS_LOOP_BACK:
122
+ case atn::ATNStateType::STAR_LOOP_BACK: {
122
123
  reportUnwantedToken(recognizer);
123
124
  misc::IntervalSet expecting = recognizer->getExpectedTokens();
124
125
  misc::IntervalSet whatFollowsLoopIterationOrRule = expecting.Or(getErrorRecoverySet(recognizer));
@@ -292,11 +293,13 @@ size_t DefaultErrorStrategy::getSymbolType(Token *symbol) {
292
293
  }
293
294
 
294
295
  std::string DefaultErrorStrategy::escapeWSAndQuote(const std::string &s) const {
295
- std::string result = s;
296
- antlrcpp::replaceAll(result, "\n", "\\n");
297
- antlrcpp::replaceAll(result, "\r","\\r");
298
- antlrcpp::replaceAll(result, "\t","\\t");
299
- return "'" + result + "'";
296
+ std::string result;
297
+ result.reserve(s.size() + 2);
298
+ result.push_back('\'');
299
+ antlrcpp::escapeWhitespace(result, s);
300
+ result.push_back('\'');
301
+ result.shrink_to_fit();
302
+ return result;
300
303
  }
301
304
 
302
305
  misc::IntervalSet DefaultErrorStrategy::getErrorRecoverySet(Parser *recognizer) {
@@ -306,7 +309,7 @@ misc::IntervalSet DefaultErrorStrategy::getErrorRecoverySet(Parser *recognizer)
306
309
  while (ctx->invokingState != ATNState::INVALID_STATE_NUMBER) {
307
310
  // compute what follows who invoked us
308
311
  atn::ATNState *invokingState = atn.states[ctx->invokingState];
309
- atn::RuleTransition *rt = dynamic_cast<atn::RuleTransition*>(invokingState->transitions[0]);
312
+ const atn::RuleTransition *rt = downCast<const atn::RuleTransition*>(invokingState->transitions[0].get());
310
313
  misc::IntervalSet follow = atn.nextTokens(rt->followState);
311
314
  recoverSet.addAll(follow);
312
315
 
@@ -10,7 +10,7 @@ using namespace antlr4;
10
10
  RuntimeException::RuntimeException(const std::string &msg) : std::exception(), _message(msg) {
11
11
  }
12
12
 
13
- const char* RuntimeException::what() const NOEXCEPT {
13
+ const char* RuntimeException::what() const noexcept {
14
14
  return _message.c_str();
15
15
  }
16
16
 
@@ -19,7 +19,7 @@ const char* RuntimeException::what() const NOEXCEPT {
19
19
  IOException::IOException(const std::string &msg) : std::exception(), _message(msg) {
20
20
  }
21
21
 
22
- const char* IOException::what() const NOEXCEPT {
22
+ const char* IOException::what() const noexcept {
23
23
  return _message.c_str();
24
24
  }
25
25
 
@@ -16,7 +16,7 @@ namespace antlr4 {
16
16
  public:
17
17
  RuntimeException(const std::string &msg = "");
18
18
 
19
- virtual const char* what() const NOEXCEPT override;
19
+ virtual const char* what() const noexcept override;
20
20
  };
21
21
 
22
22
  class ANTLR4CPP_PUBLIC IllegalStateException : public RuntimeException {
@@ -77,7 +77,7 @@ namespace antlr4 {
77
77
  public:
78
78
  IOException(const std::string &msg = "");
79
79
 
80
- virtual const char* what() const NOEXCEPT override;
80
+ virtual const char* what() const noexcept override;
81
81
  };
82
82
 
83
83
  class ANTLR4CPP_PUBLIC CancellationException : public IllegalStateException {
@@ -8,6 +8,7 @@
8
8
  #include "atn/PredicateTransition.h"
9
9
  #include "atn/ATN.h"
10
10
  #include "atn/ATNState.h"
11
+ #include "support/Casts.h"
11
12
  #include "support/CPPUtils.h"
12
13
 
13
14
  #include "FailedPredicateException.h"
@@ -26,10 +27,10 @@ FailedPredicateException::FailedPredicateException(Parser *recognizer, const std
26
27
  recognizer->getInputStream(), recognizer->getContext(), recognizer->getCurrentToken()) {
27
28
 
28
29
  atn::ATNState *s = recognizer->getInterpreter<atn::ATNSimulator>()->atn.states[recognizer->getState()];
29
- atn::Transition *transition = s->transitions[0];
30
- if (is<atn::PredicateTransition*>(transition)) {
31
- _ruleIndex = static_cast<atn::PredicateTransition *>(transition)->ruleIndex;
32
- _predicateIndex = static_cast<atn::PredicateTransition *>(transition)->predIndex;
30
+ const atn::Transition *transition = s->transitions[0].get();
31
+ if (transition->getTransitionType() == atn::TransitionType::PREDICATE) {
32
+ _ruleIndex = downCast<const atn::PredicateTransition&>(*transition).getRuleIndex();
33
+ _predicateIndex = downCast<const atn::PredicateTransition&>(*transition).getPredIndex();
33
34
  } else {
34
35
  _ruleIndex = 0;
35
36
  _predicateIndex = 0;
@@ -15,7 +15,7 @@ namespace antlr4 {
15
15
  /// prediction.
16
16
  class ANTLR4CPP_PUBLIC FailedPredicateException : public RecognitionException {
17
17
  public:
18
- FailedPredicateException(Parser *recognizer);
18
+ explicit FailedPredicateException(Parser *recognizer);
19
19
  FailedPredicateException(Parser *recognizer, const std::string &predicate);
20
20
  FailedPredicateException(Parser *recognizer, const std::string &predicate, const std::string &message);
21
21
 
@@ -27,7 +27,7 @@ namespace antlr4 {
27
27
  /// </summary>
28
28
  class ANTLR4CPP_PUBLIC IntStream {
29
29
  public:
30
- static const size_t EOF = static_cast<size_t>(-1); // std::numeric_limits<size_t>::max(); doesn't work in VS 2013
30
+ static constexpr size_t EOF = std::numeric_limits<size_t>::max();
31
31
 
32
32
  /// The value returned by <seealso cref="#LA LA()"/> when the end of the stream is
33
33
  /// reached.
@@ -11,7 +11,6 @@
11
11
  #include "ANTLRErrorListener.h"
12
12
  #include "support/CPPUtils.h"
13
13
  #include "CommonToken.h"
14
- #include "support/StringUtils.h"
15
14
 
16
15
  #include "Lexer.h"
17
16
 
@@ -136,7 +135,7 @@ size_t Lexer::popMode() {
136
135
  }
137
136
 
138
137
 
139
- Ref<TokenFactory<CommonToken>> Lexer::getTokenFactory() {
138
+ TokenFactory<CommonToken>* Lexer::getTokenFactory() {
140
139
  return _factory;
141
140
  }
142
141
 
@@ -284,7 +283,7 @@ size_t Lexer::getNumberOfSyntaxErrors() {
284
283
  void Lexer::InitializeInstanceFields() {
285
284
  _syntaxErrors = 0;
286
285
  token = nullptr;
287
- _factory = CommonTokenFactory::DEFAULT;
286
+ _factory = CommonTokenFactory::DEFAULT.get();
288
287
  tokenStartCharIndex = INVALID_INDEX;
289
288
  tokenStartLine = 0;
290
289
  tokenStartCharPositionInLine = 0;
@@ -18,20 +18,20 @@ namespace antlr4 {
18
18
  /// of speed.
19
19
  class ANTLR4CPP_PUBLIC Lexer : public Recognizer, public TokenSource {
20
20
  public:
21
- static const size_t DEFAULT_MODE = 0;
22
- static const size_t MORE = static_cast<size_t>(-2);
23
- static const size_t SKIP = static_cast<size_t>(-3);
21
+ static constexpr size_t DEFAULT_MODE = 0;
22
+ static constexpr size_t MORE = std::numeric_limits<size_t>::max() - 1;
23
+ static constexpr size_t SKIP = std::numeric_limits<size_t>::max() - 2;
24
24
 
25
- static const size_t DEFAULT_TOKEN_CHANNEL = Token::DEFAULT_CHANNEL;
26
- static const size_t HIDDEN = Token::HIDDEN_CHANNEL;
27
- static const size_t MIN_CHAR_VALUE = 0;
28
- static const size_t MAX_CHAR_VALUE = 0x10FFFF;
25
+ static constexpr size_t DEFAULT_TOKEN_CHANNEL = Token::DEFAULT_CHANNEL;
26
+ static constexpr size_t HIDDEN = Token::HIDDEN_CHANNEL;
27
+ static constexpr size_t MIN_CHAR_VALUE = 0;
28
+ static constexpr size_t MAX_CHAR_VALUE = 0x10FFFF;
29
29
 
30
30
  CharStream *_input; // Pure reference, usually from statically allocated instance.
31
31
 
32
32
  protected:
33
33
  /// How to create token objects.
34
- Ref<TokenFactory<CommonToken>> _factory;
34
+ TokenFactory<CommonToken> *_factory;
35
35
 
36
36
  public:
37
37
  /// The goal of all lexer rules/methods is to create a token object.
@@ -100,7 +100,7 @@ namespace antlr4 {
100
100
  this->_factory = factory;
101
101
  }
102
102
 
103
- virtual Ref<TokenFactory<CommonToken>> getTokenFactory() override;
103
+ virtual TokenFactory<CommonToken>* getTokenFactory() override;
104
104
 
105
105
  /// Set the char stream and reset the lexer
106
106
  virtual void setInputStream(IntStream *input) override;
@@ -6,7 +6,6 @@
6
6
  #include "atn/ATNType.h"
7
7
  #include "atn/LexerATNSimulator.h"
8
8
  #include "dfa/DFA.h"
9
- #include "atn/EmptyPredictionContext.h"
10
9
  #include "Exceptions.h"
11
10
  #include "Vocabulary.h"
12
11
 
@@ -14,12 +13,6 @@
14
13
 
15
14
  using namespace antlr4;
16
15
 
17
- LexerInterpreter::LexerInterpreter(const std::string &grammarFileName, const std::vector<std::string> &tokenNames,
18
- const std::vector<std::string> &ruleNames, const std::vector<std::string> &channelNames, const std::vector<std::string> &modeNames,
19
- const atn::ATN &atn, CharStream *input)
20
- : LexerInterpreter(grammarFileName, dfa::Vocabulary::fromTokenNames(tokenNames), ruleNames, channelNames, modeNames, atn, input) {
21
- }
22
-
23
16
  LexerInterpreter::LexerInterpreter(const std::string &grammarFileName, const dfa::Vocabulary &vocabulary,
24
17
  const std::vector<std::string> &ruleNames, const std::vector<std::string> &channelNames, const std::vector<std::string> &modeNames,
25
18
  const atn::ATN &atn, CharStream *input)
@@ -31,10 +24,6 @@ LexerInterpreter::LexerInterpreter(const std::string &grammarFileName, const dfa
31
24
  throw IllegalArgumentException("The ATN must be a lexer ATN.");
32
25
  }
33
26
 
34
- for (size_t i = 0; i < atn.maxTokenType; i++) {
35
- _tokenNames.push_back(vocabulary.getDisplayName(i));
36
- }
37
-
38
27
  for (size_t i = 0; i < atn.getNumberOfDecisions(); ++i) {
39
28
  _decisionToDFA.push_back(dfa::DFA(_atn.getDecisionState(i), i));
40
29
  }
@@ -54,10 +43,6 @@ std::string LexerInterpreter::getGrammarFileName() const {
54
43
  return _grammarFileName;
55
44
  }
56
45
 
57
- const std::vector<std::string>& LexerInterpreter::getTokenNames() const {
58
- return _tokenNames;
59
- }
60
-
61
46
  const std::vector<std::string>& LexerInterpreter::getRuleNames() const {
62
47
  return _ruleNames;
63
48
  }
@@ -7,16 +7,13 @@
7
7
 
8
8
  #include "Lexer.h"
9
9
  #include "atn/PredictionContext.h"
10
+ #include "atn/PredictionContextCache.h"
10
11
  #include "Vocabulary.h"
11
12
 
12
13
  namespace antlr4 {
13
14
 
14
15
  class ANTLR4CPP_PUBLIC LexerInterpreter : public Lexer {
15
16
  public:
16
- // @deprecated
17
- LexerInterpreter(const std::string &grammarFileName, const std::vector<std::string> &tokenNames,
18
- const std::vector<std::string> &ruleNames, const std::vector<std::string> &channelNames,
19
- const std::vector<std::string> &modeNames, const atn::ATN &atn, CharStream *input);
20
17
  LexerInterpreter(const std::string &grammarFileName, const dfa::Vocabulary &vocabulary,
21
18
  const std::vector<std::string> &ruleNames, const std::vector<std::string> &channelNames,
22
19
  const std::vector<std::string> &modeNames, const atn::ATN &atn, CharStream *input);
@@ -25,7 +22,6 @@ namespace antlr4 {
25
22
 
26
23
  virtual const atn::ATN& getATN() const override;
27
24
  virtual std::string getGrammarFileName() const override;
28
- virtual const std::vector<std::string>& getTokenNames() const override;
29
25
  virtual const std::vector<std::string>& getRuleNames() const override;
30
26
  virtual const std::vector<std::string>& getChannelNames() const override;
31
27
  virtual const std::vector<std::string>& getModeNames() const override;
@@ -36,8 +32,6 @@ namespace antlr4 {
36
32
  const std::string _grammarFileName;
37
33
  const atn::ATN &_atn;
38
34
 
39
- // @deprecated
40
- std::vector<std::string> _tokenNames;
41
35
  const std::vector<std::string> &_ruleNames;
42
36
  const std::vector<std::string> &_channelNames;
43
37
  const std::vector<std::string> &_modeNames;
@@ -82,11 +82,11 @@ std::string ListTokenSource::getSourceName() {
82
82
  return "List";
83
83
  }
84
84
 
85
- Ref<TokenFactory<CommonToken>> ListTokenSource::getTokenFactory() {
85
+ TokenFactory<CommonToken>* ListTokenSource::getTokenFactory() {
86
86
  return _factory;
87
87
  }
88
88
 
89
89
  void ListTokenSource::InitializeInstanceFields() {
90
90
  i = 0;
91
- _factory = CommonTokenFactory::DEFAULT;
91
+ _factory = CommonTokenFactory::DEFAULT.get();
92
92
  }
@@ -40,7 +40,7 @@ namespace antlr4 {
40
40
  private:
41
41
  /// This is the backing field for <seealso cref="#getTokenFactory"/> and
42
42
  /// <seealso cref="setTokenFactory"/>.
43
- Ref<TokenFactory<CommonToken>> _factory = CommonTokenFactory::DEFAULT;
43
+ TokenFactory<CommonToken> *_factory = CommonTokenFactory::DEFAULT.get();
44
44
 
45
45
  public:
46
46
  /// Constructs a new <seealso cref="ListTokenSource"/> instance from the specified
@@ -79,7 +79,7 @@ namespace antlr4 {
79
79
  this->_factory = factory;
80
80
  }
81
81
 
82
- virtual Ref<TokenFactory<CommonToken>> getTokenFactory() override;
82
+ virtual TokenFactory<CommonToken>* getTokenFactory() override;
83
83
 
84
84
  private:
85
85
  void InitializeInstanceFields();
@@ -28,10 +28,25 @@
28
28
 
29
29
  using namespace antlr4;
30
30
  using namespace antlr4::atn;
31
-
32
31
  using namespace antlrcpp;
33
32
 
34
- std::map<std::vector<uint16_t>, atn::ATN> Parser::bypassAltsAtnCache;
33
+ namespace {
34
+
35
+ struct BypassAltsAtnCache final {
36
+ std::shared_mutex mutex;
37
+ /// This field maps from the serialized ATN string to the deserialized <seealso cref="ATN"/> with
38
+ /// bypass alternatives.
39
+ ///
40
+ /// <seealso cref= ATNDeserializationOptions#isGenerateRuleBypassTransitions() </seealso>
41
+ std::map<std::vector<int32_t>, std::unique_ptr<const atn::ATN>, std::less<>> map;
42
+ };
43
+
44
+ BypassAltsAtnCache* getBypassAltsAtnCache() {
45
+ static BypassAltsAtnCache* const instance = new BypassAltsAtnCache();
46
+ return instance;
47
+ }
48
+
49
+ }
35
50
 
36
51
  Parser::TraceListener::TraceListener(Parser *outerInstance_) : outerInstance(outerInstance_) {
37
52
  }
@@ -190,7 +205,7 @@ void Parser::removeParseListeners() {
190
205
  }
191
206
 
192
207
  void Parser::triggerEnterRuleEvent() {
193
- for (auto listener : _parseListeners) {
208
+ for (auto *listener : _parseListeners) {
194
209
  listener->enterEveryRule(_ctx);
195
210
  _ctx->enterRule(listener);
196
211
  }
@@ -208,31 +223,36 @@ size_t Parser::getNumberOfSyntaxErrors() {
208
223
  return _syntaxErrors;
209
224
  }
210
225
 
211
- Ref<TokenFactory<CommonToken>> Parser::getTokenFactory() {
226
+ TokenFactory<CommonToken>* Parser::getTokenFactory() {
212
227
  return _input->getTokenSource()->getTokenFactory();
213
228
  }
214
229
 
215
-
216
230
  const atn::ATN& Parser::getATNWithBypassAlts() {
217
- std::vector<uint16_t> serializedAtn = getSerializedATN();
231
+ auto serializedAtn = getSerializedATN();
218
232
  if (serializedAtn.empty()) {
219
233
  throw UnsupportedOperationException("The current parser does not support an ATN with bypass alternatives.");
220
234
  }
221
-
222
- std::lock_guard<std::mutex> lck(_mutex);
223
-
224
235
  // XXX: using the entire serialized ATN as key into the map is a big resource waste.
225
236
  // How large can that thing become?
226
- if (bypassAltsAtnCache.find(serializedAtn) == bypassAltsAtnCache.end())
237
+ auto *cache = getBypassAltsAtnCache();
227
238
  {
228
- atn::ATNDeserializationOptions deserializationOptions;
229
- deserializationOptions.setGenerateRuleBypassTransitions(true);
230
-
231
- atn::ATNDeserializer deserializer(deserializationOptions);
232
- bypassAltsAtnCache[serializedAtn] = deserializer.deserialize(serializedAtn);
239
+ std::shared_lock<std::shared_mutex> lock(cache->mutex);
240
+ auto existing = cache->map.find(serializedAtn);
241
+ if (existing != cache->map.end()) {
242
+ return *existing->second;
243
+ }
233
244
  }
234
245
 
235
- return bypassAltsAtnCache[serializedAtn];
246
+ std::unique_lock<std::shared_mutex> lock(cache->mutex);
247
+ auto existing = cache->map.find(serializedAtn);
248
+ if (existing != cache->map.end()) {
249
+ return *existing->second;
250
+ }
251
+ atn::ATNDeserializationOptions deserializationOptions;
252
+ deserializationOptions.setGenerateRuleBypassTransitions(true);
253
+ atn::ATNDeserializer deserializer(deserializationOptions);
254
+ auto atn = deserializer.deserialize(serializedAtn);
255
+ return *cache->map.insert(std::make_pair(std::vector<int32_t>(serializedAtn.begin(), serializedAtn.end()), std::move(atn))).first->second;
236
256
  }
237
257
 
238
258
  tree::pattern::ParseTreePattern Parser::compileParseTreePattern(const std::string &pattern, int patternRuleIndex) {
@@ -307,14 +327,14 @@ Token* Parser::consume() {
307
327
  tree::ErrorNode *node = createErrorNode(o);
308
328
  _ctx->addChild(node);
309
329
  if (_parseListeners.size() > 0) {
310
- for (auto listener : _parseListeners) {
330
+ for (auto *listener : _parseListeners) {
311
331
  listener->visitErrorNode(node);
312
332
  }
313
333
  }
314
334
  } else {
315
335
  tree::TerminalNode *node = _ctx->addChild(createTerminalNode(o));
316
336
  if (_parseListeners.size() > 0) {
317
- for (auto listener : _parseListeners) {
337
+ for (auto *listener : _parseListeners) {
318
338
  listener->visitTerminal(node);
319
339
  }
320
340
  }
@@ -328,8 +348,7 @@ void Parser::addContextToParseTree() {
328
348
  if (_ctx->parent == nullptr)
329
349
  return;
330
350
 
331
- ParserRuleContext *parent = dynamic_cast<ParserRuleContext *>(_ctx->parent);
332
- parent->addChild(_ctx);
351
+ downCast<ParserRuleContext*>(_ctx->parent)->addChild(_ctx);
333
352
  }
334
353
 
335
354
  void Parser::enterRule(ParserRuleContext *localctx, size_t state, size_t /*ruleIndex*/) {
@@ -357,7 +376,7 @@ void Parser::exitRule() {
357
376
  triggerExitRuleEvent();
358
377
  }
359
378
  setState(_ctx->invokingState);
360
- _ctx = dynamic_cast<ParserRuleContext *>(_ctx->parent);
379
+ _ctx = downCast<ParserRuleContext*>(_ctx->parent);
361
380
  }
362
381
 
363
382
  void Parser::enterOuterAlt(ParserRuleContext *localctx, size_t altNum) {
@@ -367,7 +386,7 @@ void Parser::enterOuterAlt(ParserRuleContext *localctx, size_t altNum) {
367
386
  // that is previous child of parse tree
368
387
  if (_buildParseTrees && _ctx != localctx) {
369
388
  if (_ctx->parent != nullptr) {
370
- ParserRuleContext *parent = dynamic_cast<ParserRuleContext *>(_ctx->parent);
389
+ ParserRuleContext *parent = downCast<ParserRuleContext*>(_ctx->parent);
371
390
  parent->removeLastChild();
372
391
  parent->addChild(localctx);
373
392
  }
@@ -423,7 +442,7 @@ void Parser::unrollRecursionContexts(ParserRuleContext *parentctx) {
423
442
  if (_parseListeners.size() > 0) {
424
443
  while (_ctx != parentctx) {
425
444
  triggerExitRuleEvent();
426
- _ctx = dynamic_cast<ParserRuleContext *>(_ctx->parent);
445
+ _ctx = downCast<ParserRuleContext*>(_ctx->parent);
427
446
  }
428
447
  } else {
429
448
  _ctx = parentctx;
@@ -446,7 +465,7 @@ ParserRuleContext* Parser::getInvokingContext(size_t ruleIndex) {
446
465
  }
447
466
  if (p->parent == nullptr)
448
467
  break;
449
- p = dynamic_cast<ParserRuleContext *>(p->parent);
468
+ p = downCast<ParserRuleContext*>(p->parent);
450
469
  }
451
470
  return nullptr;
452
471
  }
@@ -484,13 +503,13 @@ bool Parser::isExpectedToken(size_t symbol) {
484
503
 
485
504
  while (ctx && ctx->invokingState != ATNState::INVALID_STATE_NUMBER && following.contains(Token::EPSILON)) {
486
505
  atn::ATNState *invokingState = atn.states[ctx->invokingState];
487
- atn::RuleTransition *rt = static_cast<atn::RuleTransition*>(invokingState->transitions[0]);
506
+ const atn::RuleTransition *rt = static_cast<const atn::RuleTransition*>(invokingState->transitions[0].get());
488
507
  following = atn.nextTokens(rt->followState);
489
508
  if (following.contains(symbol)) {
490
509
  return true;
491
510
  }
492
511
 
493
- ctx = dynamic_cast<ParserRuleContext *>(ctx->parent);
512
+ ctx = downCast<ParserRuleContext*>(ctx->parent);
494
513
  }
495
514
 
496
515
  if (following.contains(Token::EPSILON) && symbol == EOF) {
@@ -543,9 +562,10 @@ std::vector<std::string> Parser::getRuleInvocationStack(RuleContext *p) {
543
562
  } else {
544
563
  stack.push_back(ruleNames[ruleIndex]);
545
564
  }
546
- if (p->parent == nullptr)
565
+ if (!RuleContext::is(run->parent)) {
547
566
  break;
548
- run = dynamic_cast<RuleContext *>(run->parent);
567
+ }
568
+ run = downCast<RuleContext*>(run->parent);
549
569
  }
550
570
  return stack;
551
571
  }
@@ -589,12 +609,12 @@ std::string Parser::getSourceName() {
589
609
  }
590
610
 
591
611
  atn::ParseInfo Parser::getParseInfo() const {
592
- atn::ProfilingATNSimulator *interp = getInterpreter<atn::ProfilingATNSimulator>();
593
- return atn::ParseInfo(interp);
612
+ atn::ParserATNSimulator *simulator = getInterpreter<atn::ParserATNSimulator>();
613
+ return atn::ParseInfo(dynamic_cast<atn::ProfilingATNSimulator*>(simulator));
594
614
  }
595
615
 
596
616
  void Parser::setProfile(bool profile) {
597
- atn::ParserATNSimulator *interp = getInterpreter<atn::ProfilingATNSimulator>();
617
+ atn::ParserATNSimulator *interp = getInterpreter<atn::ParserATNSimulator>();
598
618
  atn::PredictionMode saveMode = interp != nullptr ? interp->getPredictionMode() : atn::PredictionMode::LL;
599
619
  if (profile) {
600
620
  if (!is<atn::ProfilingATNSimulator *>(interp)) {
@@ -193,7 +193,7 @@ namespace antlr4 {
193
193
  /// <seealso cref= #notifyErrorListeners </seealso>
194
194
  virtual size_t getNumberOfSyntaxErrors();
195
195
 
196
- virtual Ref<TokenFactory<CommonToken>> getTokenFactory() override;
196
+ virtual TokenFactory<CommonToken>* getTokenFactory() override;
197
197
 
198
198
  /// <summary>
199
199
  /// Tell our token source and error strategy about a new way to create tokens. </summary>
@@ -448,12 +448,6 @@ namespace antlr4 {
448
448
  tree::ParseTreeTracker _tracker;
449
449
 
450
450
  private:
451
- /// This field maps from the serialized ATN string to the deserialized <seealso cref="ATN"/> with
452
- /// bypass alternatives.
453
- ///
454
- /// <seealso cref= ATNDeserializationOptions#isGenerateRuleBypassTransitions() </seealso>
455
- static std::map<std::vector<uint16_t>, atn::ATN> bypassAltsAtnCache;
456
-
457
451
  /// When setTrace(true) is called, a reference to the
458
452
  /// TraceListener is stored here so it can be easily removed in a
459
453
  /// later call to setTrace(false). The listener itself is