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,23 +5,25 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <cstdint>
9
+ #include <type_traits>
10
+
8
11
  #include "antlr4-common.h"
9
12
 
10
13
  namespace antlr4 {
11
14
  namespace misc {
12
15
 
13
- class ANTLR4CPP_PUBLIC MurmurHash {
14
-
16
+ class ANTLR4CPP_PUBLIC MurmurHash final {
15
17
  private:
16
- static const size_t DEFAULT_SEED = 0;
18
+ static constexpr size_t DEFAULT_SEED = 0;
17
19
 
18
20
  /// Initialize the hash using the default seed value.
19
21
  /// Returns the intermediate hash value.
20
22
  public:
21
- static size_t initialize();
23
+ static size_t initialize() { return initialize(DEFAULT_SEED); }
22
24
 
23
25
  /// Initialize the hash using the specified seed.
24
- static size_t initialize(size_t seed);
26
+ static size_t initialize(size_t seed) { return seed; }
25
27
 
26
28
  /// Update the intermediate hash value for the next input {@code value}.
27
29
  /// <param name="hash"> the intermediate hash value </param>
@@ -46,6 +48,13 @@ namespace misc {
46
48
  return update(hash, value != nullptr ? value->hashCode() : 0);
47
49
  }
48
50
 
51
+ static size_t update(size_t hash, const void *data, size_t size);
52
+
53
+ template <typename T>
54
+ static size_t update(size_t hash, const T *data, size_t size) {
55
+ return update(hash, static_cast<const void*>(data), size * sizeof(std::remove_reference_t<T>));
56
+ }
57
+
49
58
  /// <summary>
50
59
  /// Apply the final computation steps to the intermediate value {@code hash}
51
60
  /// to form the final result of the MurmurHash 3 hash function.
@@ -62,14 +71,31 @@ namespace misc {
62
71
  /// <param name="seed"> the seed for the MurmurHash algorithm </param>
63
72
  /// <returns> the hash code of the data </returns>
64
73
  template<typename T> // where T is C array type
65
- static size_t hashCode(const std::vector<Ref<T>> &data, size_t seed) {
74
+ static size_t hashCode(const std::vector<Ref<T>> &data, size_t seed = DEFAULT_SEED) {
66
75
  size_t hash = initialize(seed);
67
- for (auto entry : data) {
68
- hash = update(hash, entry->hashCode());
76
+ for (auto &entry : data) {
77
+ hash = update(hash, entry);
69
78
  }
70
-
71
79
  return finish(hash, data.size());
72
80
  }
81
+
82
+ static size_t hashCode(const void *data, size_t size, size_t seed = DEFAULT_SEED) {
83
+ size_t hash = initialize(seed);
84
+ hash = update(hash, data, size);
85
+ return finish(hash, size);
86
+ }
87
+
88
+ template <typename T>
89
+ static size_t hashCode(const T *data, size_t size, size_t seed = DEFAULT_SEED) {
90
+ return hashCode(static_cast<const void*>(data), size * sizeof(std::remove_reference_t<T>), seed);
91
+ }
92
+
93
+ private:
94
+ MurmurHash() = delete;
95
+
96
+ MurmurHash(const MurmurHash&) = delete;
97
+
98
+ MurmurHash& operator=(const MurmurHash&) = delete;
73
99
  };
74
100
 
75
101
  } // namespace atn
@@ -6,8 +6,3 @@
6
6
  #include "Any.h"
7
7
 
8
8
  using namespace antlrcpp;
9
-
10
- Any::~Any()
11
- {
12
- delete _ptr;
13
- }
@@ -9,162 +9,8 @@
9
9
 
10
10
  #include "antlr4-common.h"
11
11
 
12
- #ifdef _MSC_VER
13
- #pragma warning(push)
14
- #pragma warning(disable: 4521) // 'antlrcpp::Any': multiple copy constructors specified
15
- #endif
16
-
17
12
  namespace antlrcpp {
18
13
 
19
- template<class T>
20
- using StorageType = typename std::decay<T>::type;
21
-
22
- struct ANTLR4CPP_PUBLIC Any
23
- {
24
- bool isNull() const { return _ptr == nullptr; }
25
- bool isNotNull() const { return _ptr != nullptr; }
26
-
27
- Any() : _ptr(nullptr) {
28
- }
29
-
30
- Any(Any& that) : _ptr(that.clone()) {
31
- }
32
-
33
- Any(Any&& that) : _ptr(that._ptr) {
34
- that._ptr = nullptr;
35
- }
36
-
37
- Any(const Any& that) : _ptr(that.clone()) {
38
- }
39
-
40
- Any(const Any&& that) : _ptr(that.clone()) {
41
- }
42
-
43
- template<typename U>
44
- Any(U&& value) : _ptr(new Derived<StorageType<U>>(std::forward<U>(value))) {
45
- }
46
-
47
- template<class U>
48
- bool is() const {
49
- auto derived = getDerived<U>(false);
50
-
51
- return derived != nullptr;
52
- }
53
-
54
- template<class U>
55
- StorageType<U>& as() {
56
- auto derived = getDerived<U>(true);
57
-
58
- return derived->value;
59
- }
60
-
61
- template<class U>
62
- const StorageType<U>& as() const {
63
- auto derived = getDerived<U>(true);
64
-
65
- return derived->value;
66
- }
67
-
68
- template<class U>
69
- operator U() {
70
- return as<StorageType<U>>();
71
- }
72
-
73
- template<class U>
74
- operator const U() const {
75
- return as<const StorageType<U>>();
76
- }
77
-
78
- Any& operator = (const Any& a) {
79
- if (_ptr == a._ptr)
80
- return *this;
81
-
82
- auto old_ptr = _ptr;
83
- _ptr = a.clone();
84
-
85
- if (old_ptr)
86
- delete old_ptr;
87
-
88
- return *this;
89
- }
90
-
91
- Any& operator = (Any&& a) {
92
- if (_ptr == a._ptr)
93
- return *this;
94
-
95
- std::swap(_ptr, a._ptr);
96
-
97
- return *this;
98
- }
99
-
100
- virtual ~Any();
101
-
102
- virtual bool equals(Any other) const {
103
- return _ptr == other._ptr;
104
- }
105
-
106
- private:
107
- struct Base {
108
- virtual ~Base() {};
109
- virtual Base* clone() const = 0;
110
- };
111
-
112
- template<typename T>
113
- struct Derived : Base
114
- {
115
- template<typename U> Derived(U&& value_) : value(std::forward<U>(value_)) {
116
- }
117
-
118
- T value;
119
-
120
- Base* clone() const {
121
- return clone<>();
122
- }
123
-
124
- private:
125
- template<int N = 0, typename std::enable_if<N == N && std::is_nothrow_copy_constructible<T>::value, int>::type = 0>
126
- Base* clone() const {
127
- return new Derived<T>(value);
128
- }
129
-
130
- template<int N = 0, typename std::enable_if<N == N && !std::is_nothrow_copy_constructible<T>::value, int>::type = 0>
131
- Base* clone() const {
132
- return nullptr;
133
- }
134
-
135
- };
136
-
137
- Base* clone() const
138
- {
139
- if (_ptr)
140
- return _ptr->clone();
141
- else
142
- return nullptr;
143
- }
144
-
145
- template<class U>
146
- Derived<StorageType<U>>* getDerived(bool checkCast) const {
147
- typedef StorageType<U> T;
148
-
149
- auto derived = dynamic_cast<Derived<T>*>(_ptr);
150
-
151
- if (checkCast && !derived)
152
- throw std::bad_cast();
153
-
154
- return derived;
155
- }
156
-
157
- Base *_ptr;
158
-
159
- };
160
-
161
- template<> inline
162
- Any::Any(std::nullptr_t&& ) : _ptr(nullptr) {
163
- }
164
-
14
+ using Any = std::any;
165
15
 
166
16
  } // namespace antlrcpp
167
-
168
- #ifdef _MSC_VER
169
- #pragma warning(pop)
170
- #endif
@@ -16,7 +16,7 @@ std::string Arrays::listToString(const std::vector<std::string> &list, const std
16
16
  bool firstEntry = true;
17
17
 
18
18
  ss << '[';
19
- for (auto &entry : list) {
19
+ for (const auto &entry : list) {
20
20
  ss << entry;
21
21
  if (firstEntry) {
22
22
  ss << separator;
@@ -32,7 +32,7 @@ template <>
32
32
  std::string Arrays::toString(const std::vector<antlr4::tree::ParseTree*> &source) {
33
33
  std::string result = "[";
34
34
  bool firstEntry = true;
35
- for (auto value : source) {
35
+ for (auto *value : source) {
36
36
  result += value->toStringTree();
37
37
  if (firstEntry) {
38
38
  result += ", ";
@@ -32,8 +32,13 @@ namespace antlrcpp {
32
32
  return false;
33
33
 
34
34
  for (size_t i = 0; i < a.size(); ++i) {
35
+ if (!a[i] && !b[i])
36
+ continue;
37
+ if (!a[i] || !b[i])
38
+ return false;
35
39
  if (a[i] == b[i])
36
40
  continue;
41
+
37
42
  if (!(*a[i] == *b[i]))
38
43
  return false;
39
44
  }
@@ -61,6 +66,26 @@ namespace antlrcpp {
61
66
  return true;
62
67
  }
63
68
 
69
+ template <typename T>
70
+ static bool equals(const std::vector<std::unique_ptr<T>> &a, const std::vector<std::unique_ptr<T>> &b) {
71
+ if (a.size() != b.size())
72
+ return false;
73
+
74
+ for (size_t i = 0; i < a.size(); ++i) {
75
+ if (!a[i] && !b[i])
76
+ continue;
77
+ if (!a[i] || !b[i])
78
+ return false;
79
+ if (a[i] == b[i])
80
+ continue;
81
+
82
+ if (!(*a[i] == *b[i]))
83
+ return false;
84
+ }
85
+
86
+ return true;
87
+ }
88
+
64
89
  template <typename T>
65
90
  static std::string toString(const std::vector<T> &source) {
66
91
  std::string result = "[";
@@ -89,6 +114,20 @@ namespace antlrcpp {
89
114
  return result + "]";
90
115
  }
91
116
 
117
+ template <typename T>
118
+ static std::string toString(const std::vector<std::unique_ptr<T>> &source) {
119
+ std::string result = "[";
120
+ bool firstEntry = true;
121
+ for (auto &value : source) {
122
+ result += value->toString();
123
+ if (firstEntry) {
124
+ result += ", ";
125
+ firstEntry = false;
126
+ }
127
+ }
128
+ return result + "]";
129
+ }
130
+
92
131
  template <typename T>
93
132
  static std::string toString(const std::vector<T *> &source) {
94
133
  std::string result = "[";
@@ -54,7 +54,7 @@ namespace antlrcpp {
54
54
  return result;
55
55
  }
56
56
 
57
- std::string toString(){
57
+ std::string toString() const {
58
58
  std::stringstream stream;
59
59
  stream << "{";
60
60
  bool valueAdded = false;
@@ -7,10 +7,10 @@
7
7
 
8
8
  namespace antlrcpp {
9
9
 
10
- std::string join(std::vector<std::string> strings, const std::string &separator) {
10
+ std::string join(const std::vector<std::string> &strings, const std::string &separator) {
11
11
  std::string str;
12
12
  bool firstItem = true;
13
- for (std::string s : strings) {
13
+ for (const std::string &s : strings) {
14
14
  if (!firstItem) {
15
15
  str.append(separator);
16
16
  }
@@ -46,18 +46,15 @@ namespace antlrcpp {
46
46
 
47
47
  case ' ':
48
48
  if (escapeSpaces) {
49
- result += "·";
49
+ result += "\u00B7";
50
50
  break;
51
51
  }
52
- // else fall through
53
- #ifndef _MSC_VER
54
- #if __has_cpp_attribute(clang::fallthrough)
55
- [[clang::fallthrough]];
56
- #endif
57
- #endif
52
+ result += c;
53
+ break;
58
54
 
59
55
  default:
60
56
  result += c;
57
+ break;
61
58
  }
62
59
  }
63
60
 
@@ -72,8 +69,13 @@ namespace antlrcpp {
72
69
 
73
70
  std::string arrayToString(const std::vector<std::string> &data) {
74
71
  std::string answer;
75
- for (auto sub: data) {
76
- answer += sub;
72
+ size_t toReserve = 0;
73
+ for (const auto &sub : data) {
74
+ toReserve += sub.size();
75
+ }
76
+ answer.reserve(toReserve);
77
+ for (const auto &sub: data) {
78
+ answer.append(sub);
77
79
  }
78
80
  return answer;
79
81
  }
@@ -202,47 +204,4 @@ namespace antlrcpp {
202
204
  return result;
203
205
  }
204
206
 
205
- //----------------- FinallyAction ------------------------------------------------------------------------------------
206
-
207
- FinalAction finally(std::function<void ()> f) {
208
- return FinalAction(f);
209
- }
210
-
211
- //----------------- SingleWriteMultipleRead --------------------------------------------------------------------------
212
-
213
- void SingleWriteMultipleReadLock::readLock() {
214
- std::unique_lock<std::mutex> lock(_mutex);
215
- while (_waitingWriters != 0)
216
- _readerGate.wait(lock);
217
- ++_activeReaders;
218
- lock.unlock();
219
- }
220
-
221
- void SingleWriteMultipleReadLock::readUnlock() {
222
- std::unique_lock<std::mutex> lock(_mutex);
223
- --_activeReaders;
224
- lock.unlock();
225
- _writerGate.notify_one();
226
- }
227
-
228
- void SingleWriteMultipleReadLock::writeLock() {
229
- std::unique_lock<std::mutex> lock(_mutex);
230
- ++_waitingWriters;
231
- while (_activeReaders != 0 || _activeWriters != 0)
232
- _writerGate.wait(lock);
233
- ++_activeWriters;
234
- lock.unlock();
235
- }
236
-
237
- void SingleWriteMultipleReadLock::writeUnlock() {
238
- std::unique_lock<std::mutex> lock(_mutex);
239
- --_waitingWriters;
240
- --_activeWriters;
241
- if (_waitingWriters > 0)
242
- _writerGate.notify_one();
243
- else
244
- _readerGate.notify_all();
245
- lock.unlock();
246
- }
247
-
248
207
  } // namespace antlrcpp
@@ -9,18 +9,19 @@
9
9
 
10
10
  namespace antlrcpp {
11
11
 
12
- std::string join(std::vector<std::string> strings, const std::string &separator);
13
- std::map<std::string, size_t> toMap(const std::vector<std::string> &keys);
14
- std::string escapeWhitespace(std::string str, bool escapeSpaces);
15
- std::string toHexString(const int t);
16
- std::string arrayToString(const std::vector<std::string> &data);
17
- std::string replaceString(const std::string &s, const std::string &from, const std::string &to);
18
- std::vector<std::string> split(const std::string &s, const std::string &sep, int count);
19
- std::string indent(const std::string &s, const std::string &indentation, bool includingFirst = true);
12
+ ANTLR4CPP_PUBLIC std::string join(const std::vector<std::string> &strings, const std::string &separator);
13
+ ANTLR4CPP_PUBLIC std::map<std::string, size_t> toMap(const std::vector<std::string> &keys);
14
+ ANTLR4CPP_PUBLIC std::string escapeWhitespace(std::string str, bool escapeSpaces);
15
+ ANTLR4CPP_PUBLIC std::string toHexString(const int t);
16
+ ANTLR4CPP_PUBLIC std::string arrayToString(const std::vector<std::string> &data);
17
+ ANTLR4CPP_PUBLIC std::string replaceString(const std::string &s, const std::string &from, const std::string &to);
18
+ ANTLR4CPP_PUBLIC std::vector<std::string> split(const std::string &s, const std::string &sep, int count);
19
+ ANTLR4CPP_PUBLIC std::string indent(const std::string &s, const std::string &indentation, bool includingFirst = true);
20
20
 
21
21
  // Using RAII + a lambda to implement a "finally" replacement.
22
+ template <typename OnEnd>
22
23
  struct FinalAction {
23
- FinalAction(std::function<void ()> f) : _cleanUp { f } {}
24
+ FinalAction(OnEnd f) : _cleanUp { std::move(f) } {}
24
25
  FinalAction(FinalAction &&other) :
25
26
  _cleanUp(std::move(other._cleanUp)), _enabled(other._enabled) {
26
27
  other._enabled = false; // Don't trigger the lambda after ownership has moved.
@@ -29,11 +30,14 @@ namespace antlrcpp {
29
30
 
30
31
  void disable() { _enabled = false; }
31
32
  private:
32
- std::function<void ()> _cleanUp;
33
+ OnEnd _cleanUp;
33
34
  bool _enabled {true};
34
35
  };
35
36
 
36
- ANTLR4CPP_PUBLIC FinalAction finally(std::function<void ()> f);
37
+ template <typename OnEnd>
38
+ FinalAction<OnEnd> finally(OnEnd f) {
39
+ return FinalAction<OnEnd>(std::move(f));
40
+ }
37
41
 
38
42
  // Convenience functions to avoid lengthy dynamic_cast() != nullptr checks in many places.
39
43
  template <typename T1, typename T2>
@@ -56,23 +60,6 @@ namespace antlrcpp {
56
60
  }
57
61
 
58
62
  // Get the error text from an exception pointer or the current exception.
59
- std::string what(std::exception_ptr eptr = std::current_exception());
60
-
61
- class SingleWriteMultipleReadLock {
62
- public:
63
- void readLock();
64
- void readUnlock();
65
- void writeLock();
66
- void writeUnlock();
67
-
68
- private:
69
- std::condition_variable _readerGate;
70
- std::condition_variable _writerGate;
71
-
72
- std::mutex _mutex;
73
- size_t _activeReaders = 0;
74
- size_t _waitingWriters = 0;
75
- size_t _activeWriters = 0;
76
- };
63
+ ANTLR4CPP_PUBLIC std::string what(std::exception_ptr eptr = std::current_exception());
77
64
 
78
65
  } // namespace antlrcpp
@@ -0,0 +1,34 @@
1
+ /* Copyright (c) 2012-2021 The ANTLR Project. All rights reserved.
2
+ * Use of this file is governed by the BSD 3-clause license that
3
+ * can be found in the LICENSE.txt file in the project root.
4
+ */
5
+
6
+ #pragma once
7
+
8
+ #include <cassert>
9
+ #include <memory>
10
+ #include <type_traits>
11
+
12
+ namespace antlrcpp {
13
+
14
+ template <typename To, typename From>
15
+ To downCast(From* from) {
16
+ static_assert(std::is_pointer_v<To>, "Target type not a pointer.");
17
+ static_assert(std::is_base_of_v<From, std::remove_pointer_t<To>>, "Target type not derived from source type.");
18
+ #if !defined(__GNUC__) || defined(__GXX_RTTI)
19
+ assert(from == nullptr || dynamic_cast<To>(from) != nullptr);
20
+ #endif
21
+ return static_cast<To>(from);
22
+ }
23
+
24
+ template <typename To, typename From>
25
+ To downCast(From& from) {
26
+ static_assert(std::is_lvalue_reference_v<To>, "Target type not a lvalue reference.");
27
+ static_assert(std::is_base_of_v<From, std::remove_reference_t<To>>, "Target type not derived from source type.");
28
+ #if !defined(__GNUC__) || defined(__GXX_RTTI)
29
+ assert(dynamic_cast<std::add_pointer_t<std::remove_reference_t<To>>>(std::addressof(from)) != nullptr);
30
+ #endif
31
+ return static_cast<To>(from);
32
+ }
33
+
34
+ }
@@ -69,7 +69,6 @@ namespace antlr4 {
69
69
  class ATNSimulator;
70
70
  class ATNState;
71
71
  enum class ATNType;
72
- class AbstractPredicateTransition;
73
72
  class ActionTransition;
74
73
  class ArrayPredictionContext;
75
74
  class AtomTransition;
@@ -78,7 +77,6 @@ namespace antlr4 {
78
77
  class BlockEndState;
79
78
  class BlockStartState;
80
79
  class DecisionState;
81
- class EmptyPredictionContext;
82
80
  class EpsilonTransition;
83
81
  class LL1Analyzer;
84
82
  class LexerAction;
@@ -7,30 +7,32 @@
7
7
 
8
8
  namespace antlrcpp {
9
9
 
10
- void replaceAll(std::string& str, std::string const& from, std::string const& to)
11
- {
12
- if (from.empty())
13
- return;
14
-
15
- size_t start_pos = 0;
16
- while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
17
- str.replace(start_pos, from.length(), to);
18
- start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'.
10
+ std::string escapeWhitespace(std::string_view in) {
11
+ std::string out;
12
+ escapeWhitespace(out, in);
13
+ out.shrink_to_fit();
14
+ return out;
19
15
  }
20
- }
21
-
22
- std::string ws2s(std::wstring const& wstr) {
23
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
24
- std::string narrow = converter.to_bytes(wstr);
25
16
 
26
- return narrow;
27
- }
28
-
29
- std::wstring s2ws(const std::string &str) {
30
- std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
31
- std::wstring wide = converter.from_bytes(str);
32
-
33
- return wide;
34
- }
17
+ std::string& escapeWhitespace(std::string& out, std::string_view in) {
18
+ out.reserve(in.size()); // Best case, no escaping.
19
+ for (const auto &c : in) {
20
+ switch (c) {
21
+ case '\t':
22
+ out.append("\\t");
23
+ break;
24
+ case '\r':
25
+ out.append("\\r");
26
+ break;
27
+ case '\n':
28
+ out.append("\\n");
29
+ break;
30
+ default:
31
+ out.push_back(c);
32
+ break;
33
+ }
34
+ }
35
+ return out;
36
+ }
35
37
 
36
38
  } // namespace antrlcpp
@@ -9,46 +9,8 @@
9
9
 
10
10
  namespace antlrcpp {
11
11
 
12
- // For all conversions utf8 <-> utf32.
13
- // VS 2015 and VS 2017 have different bugs in std::codecvt_utf8<char32_t> (VS 2013 works fine).
14
- #if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
15
- typedef std::wstring_convert<std::codecvt_utf8<__int32>, __int32> UTF32Converter;
16
- #else
17
- typedef std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> UTF32Converter;
18
- #endif
19
-
20
- // The conversion functions fails in VS2017, so we explicitly use a workaround.
21
- template<typename T>
22
- inline std::string utf32_to_utf8(T const& data)
23
- {
24
- // Don't make the converter static or we have to serialize access to it.
25
- thread_local UTF32Converter converter;
12
+ ANTLR4CPP_PUBLIC std::string escapeWhitespace(std::string_view in);
26
13
 
27
- #if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
28
- auto p = reinterpret_cast<const int32_t *>(data.data());
29
- return converter.to_bytes(p, p + data.size());
30
- #else
31
- return converter.to_bytes(data);
32
- #endif
33
- }
14
+ ANTLR4CPP_PUBLIC std::string& escapeWhitespace(std::string& out, std::string_view in);
34
15
 
35
- inline UTF32String utf8_to_utf32(const char* first, const char* last)
36
- {
37
- thread_local UTF32Converter converter;
38
-
39
- #if defined(_MSC_VER) && _MSC_VER >= 1900 && _MSC_VER < 2000
40
- auto r = converter.from_bytes(first, last);
41
- i32string s = reinterpret_cast<const int32_t *>(r.data());
42
- #else
43
- std::u32string s = converter.from_bytes(first, last);
44
- #endif
45
-
46
- return s;
47
- }
48
-
49
- void replaceAll(std::string &str, std::string const& from, std::string const& to);
50
-
51
- // string <-> wstring conversion (UTF-16), e.g. for use with Window's wide APIs.
52
- ANTLR4CPP_PUBLIC std::string ws2s(std::wstring const& wstr);
53
- ANTLR4CPP_PUBLIC std::wstring s2ws(std::string const& str);
54
16
  }