expressir 0.2.4-x64-mingw32

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 (520) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rake.yml +46 -0
  3. data/.github/workflows/release.yml +75 -0
  4. data/.gitignore +15 -0
  5. data/.gitmodules +3 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +508 -0
  8. data/Gemfile +6 -0
  9. data/README.adoc +147 -0
  10. data/Rakefile +17 -0
  11. data/bin/console +12 -0
  12. data/bin/rspec +29 -0
  13. data/bin/setup +8 -0
  14. data/demo.rb +18 -0
  15. data/docs/development.md +90 -0
  16. data/exe/expressir +20 -0
  17. data/exe/generate-parser +48 -0
  18. data/expressir.gemspec +40 -0
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +118 -0
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +637 -0
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +984 -0
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +652 -0
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +990 -0
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +652 -0
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +990 -0
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +652 -0
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +990 -0
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp-ios/Info.plist +26 -0
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp-ios/antlrcpp_ios.h +17 -0
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +3024 -0
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +76 -0
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +80 -0
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +80 -0
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +34 -0
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +27 -0
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +155 -0
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +69 -0
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.h +37 -0
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +195 -0
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.h +158 -0
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +333 -0
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +99 -0
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +51 -0
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +218 -0
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +295 -0
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +196 -0
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +75 -0
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +52 -0
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +648 -0
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +467 -0
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +306 -0
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +179 -0
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +141 -0
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +66 -0
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +167 -0
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +164 -0
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +143 -0
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +137 -0
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +53 -0
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.cpp +9 -0
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +92 -0
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +85 -0
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.h +137 -0
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +425 -0
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +293 -0
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +211 -0
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +123 -0
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +104 -0
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +193 -0
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.h +23 -0
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +137 -0
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +167 -0
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +209 -0
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +112 -0
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +113 -0
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +148 -0
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +228 -0
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +110 -0
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +64 -0
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +50 -0
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +758 -0
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +85 -0
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +621 -0
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +61 -0
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +63 -0
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +87 -0
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +72 -0
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +133 -0
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +14 -0
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +24 -0
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +33 -0
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +33 -0
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +82 -0
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +43 -0
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +31 -0
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +30 -0
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +12 -0
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +22 -0
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +12 -0
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +21 -0
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +15 -0
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +24 -0
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +9 -0
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +21 -0
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +17 -0
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +30 -0
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +35 -0
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +27 -0
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +35 -0
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +39 -0
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +158 -0
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +109 -0
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +84 -0
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +628 -0
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +210 -0
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +9 -0
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +66 -0
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +107 -0
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +115 -0
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +55 -0
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +55 -0
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +63 -0
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +62 -0
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +87 -0
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +63 -0
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +82 -0
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +56 -0
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +61 -0
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +47 -0
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +57 -0
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +47 -0
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +57 -0
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +56 -0
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +61 -0
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +47 -0
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +55 -0
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +56 -0
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +55 -0
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +12 -0
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +22 -0
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +67 -0
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +27 -0
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +25 -0
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +12 -0
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +20 -0
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1366 -0
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +904 -0
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +12 -0
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +25 -0
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +12 -0
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +22 -0
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +32 -0
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +29 -0
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +34 -0
  221. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +39 -0
  222. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +662 -0
  223. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +254 -0
  224. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +201 -0
  225. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
  226. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
  227. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
  228. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +30 -0
  229. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +29 -0
  230. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +16 -0
  231. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +25 -0
  232. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +12 -0
  233. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +25 -0
  234. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +37 -0
  235. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +40 -0
  236. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +377 -0
  237. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +222 -0
  238. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +32 -0
  239. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +30 -0
  240. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +81 -0
  241. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +36 -0
  242. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +12 -0
  243. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +21 -0
  244. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +15 -0
  245. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +35 -0
  246. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
  247. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +21 -0
  248. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +12 -0
  249. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +21 -0
  250. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +44 -0
  251. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +76 -0
  252. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +25 -0
  253. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +25 -0
  254. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +127 -0
  255. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +91 -0
  256. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +67 -0
  257. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
  258. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +100 -0
  259. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +144 -0
  260. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +20 -0
  261. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +23 -0
  262. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
  263. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +31 -0
  264. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +89 -0
  265. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
  266. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +521 -0
  267. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +198 -0
  268. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +134 -0
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +76 -0
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +13 -0
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +170 -0
  274. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
  275. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +110 -0
  276. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
  277. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +248 -0
  278. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +78 -0
  279. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +163 -0
  280. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +36 -0
  281. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +54 -0
  282. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +303 -0
  283. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +112 -0
  284. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +128 -0
  285. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +9 -0
  286. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +19 -0
  287. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +23 -0
  288. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +33 -0
  289. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +71 -0
  290. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
  291. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +15 -0
  292. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +102 -0
  293. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
  294. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
  295. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
  296. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
  297. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
  298. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +49 -0
  299. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +31 -0
  300. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +9 -0
  301. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +32 -0
  302. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +57 -0
  303. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +33 -0
  304. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
  305. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
  306. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
  307. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
  308. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
  309. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
  310. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
  311. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
  312. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +371 -0
  313. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
  314. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
  315. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
  316. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
  317. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
  318. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
  319. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
  320. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
  321. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
  322. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
  323. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
  324. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
  325. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
  326. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +173 -0
  327. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.g4 +64 -0
  328. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +56 -0
  329. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.tokens +12 -0
  330. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
  331. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
  332. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
  333. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
  334. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
  335. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
  336. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
  337. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
  338. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
  339. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
  340. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
  341. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
  342. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
  343. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
  344. data/ext/express-parser/antlrgen/Express.interp +532 -0
  345. data/ext/express-parser/antlrgen/Express.tokens +190 -0
  346. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +7 -0
  347. data/ext/express-parser/antlrgen/ExpressBaseListener.h +623 -0
  348. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +7 -0
  349. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +816 -0
  350. data/ext/express-parser/antlrgen/ExpressLexer.cpp +1169 -0
  351. data/ext/express-parser/antlrgen/ExpressLexer.h +85 -0
  352. data/ext/express-parser/antlrgen/ExpressLexer.interp +534 -0
  353. data/ext/express-parser/antlrgen/ExpressLexer.tokens +190 -0
  354. data/ext/express-parser/antlrgen/ExpressListener.cpp +7 -0
  355. data/ext/express-parser/antlrgen/ExpressListener.h +616 -0
  356. data/ext/express-parser/antlrgen/ExpressParser.cpp +17284 -0
  357. data/ext/express-parser/antlrgen/ExpressParser.h +3696 -0
  358. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +7 -0
  359. data/ext/express-parser/antlrgen/ExpressVisitor.h +422 -0
  360. data/ext/express-parser/express_parser.cpp +17931 -0
  361. data/ext/express-parser/extconf.rb +34 -0
  362. data/lib/express_parser.so +0 -0
  363. data/lib/expressir.rb +21 -0
  364. data/lib/expressir/cli.rb +27 -0
  365. data/lib/expressir/cli/ui.rb +36 -0
  366. data/lib/expressir/config.rb +23 -0
  367. data/lib/expressir/express.rb +11 -0
  368. data/lib/expressir/express/aggregate_dimension.rb +38 -0
  369. data/lib/expressir/express/attribute.rb +15 -0
  370. data/lib/expressir/express/comment.rb +7 -0
  371. data/lib/expressir/express/defined_type.rb +36 -0
  372. data/lib/expressir/express/derived.rb +65 -0
  373. data/lib/expressir/express/derived_aggregate.rb +43 -0
  374. data/lib/expressir/express/entity.rb +137 -0
  375. data/lib/expressir/express/explicit.rb +70 -0
  376. data/lib/expressir/express/explicit_aggregate.rb +46 -0
  377. data/lib/expressir/express/explicit_or_derived.rb +16 -0
  378. data/lib/expressir/express/global_rule.rb +44 -0
  379. data/lib/expressir/express/interface_specification.rb +51 -0
  380. data/lib/expressir/express/interfaced_item.rb +38 -0
  381. data/lib/expressir/express/inverse.rb +46 -0
  382. data/lib/expressir/express/inverse_aggregate.rb +37 -0
  383. data/lib/expressir/express/model_element.rb +7 -0
  384. data/lib/expressir/express/named_type.rb +19 -0
  385. data/lib/expressir/express/remark.rb +8 -0
  386. data/lib/expressir/express/repository.rb +306 -0
  387. data/lib/expressir/express/schema_definition.rb +96 -0
  388. data/lib/expressir/express/subtype_constraint.rb +14 -0
  389. data/lib/expressir/express/type.rb +26 -0
  390. data/lib/expressir/express/type_aggregate.rb +42 -0
  391. data/lib/expressir/express/type_enum.rb +29 -0
  392. data/lib/expressir/express/type_parser.rb +45 -0
  393. data/lib/expressir/express/type_select.rb +82 -0
  394. data/lib/expressir/express/unique_rule.rb +35 -0
  395. data/lib/expressir/express/where_rule.rb +32 -0
  396. data/lib/expressir/express_exp/formatter.rb +1450 -0
  397. data/lib/expressir/express_exp/parser.rb +36 -0
  398. data/lib/expressir/express_exp/visitor.rb +2451 -0
  399. data/lib/expressir/express_parser.rb +30 -0
  400. data/lib/expressir/model.rb +65 -0
  401. data/lib/expressir/model/attribute.rb +27 -0
  402. data/lib/expressir/model/constant.rb +17 -0
  403. data/lib/expressir/model/entity.rb +46 -0
  404. data/lib/expressir/model/enumeration_item.rb +11 -0
  405. data/lib/expressir/model/expressions/aggregate_initializer.rb +13 -0
  406. data/lib/expressir/model/expressions/aggregate_item.rb +15 -0
  407. data/lib/expressir/model/expressions/attribute_reference.rb +15 -0
  408. data/lib/expressir/model/expressions/binary_expression.rb +40 -0
  409. data/lib/expressir/model/expressions/call.rb +15 -0
  410. data/lib/expressir/model/expressions/entity_constructor.rb +15 -0
  411. data/lib/expressir/model/expressions/group_reference.rb +15 -0
  412. data/lib/expressir/model/expressions/index_reference.rb +17 -0
  413. data/lib/expressir/model/expressions/interval.rb +21 -0
  414. data/lib/expressir/model/expressions/query_expression.rb +26 -0
  415. data/lib/expressir/model/expressions/simple_reference.rb +13 -0
  416. data/lib/expressir/model/expressions/unary_expression.rb +19 -0
  417. data/lib/expressir/model/function.rb +62 -0
  418. data/lib/expressir/model/identifier.rb +9 -0
  419. data/lib/expressir/model/interface.rb +18 -0
  420. data/lib/expressir/model/literals/binary.rb +13 -0
  421. data/lib/expressir/model/literals/integer.rb +13 -0
  422. data/lib/expressir/model/literals/logical.rb +17 -0
  423. data/lib/expressir/model/literals/real.rb +13 -0
  424. data/lib/expressir/model/literals/string.rb +15 -0
  425. data/lib/expressir/model/parameter.rb +17 -0
  426. data/lib/expressir/model/procedure.rb +60 -0
  427. data/lib/expressir/model/renamed_ref.rb +13 -0
  428. data/lib/expressir/model/repository.rb +19 -0
  429. data/lib/expressir/model/rule.rb +62 -0
  430. data/lib/expressir/model/schema.rb +67 -0
  431. data/lib/expressir/model/scope.rb +17 -0
  432. data/lib/expressir/model/statements/alias.rb +26 -0
  433. data/lib/expressir/model/statements/assignment.rb +15 -0
  434. data/lib/expressir/model/statements/call.rb +15 -0
  435. data/lib/expressir/model/statements/case.rb +17 -0
  436. data/lib/expressir/model/statements/case_action.rb +15 -0
  437. data/lib/expressir/model/statements/compound.rb +13 -0
  438. data/lib/expressir/model/statements/escape.rb +8 -0
  439. data/lib/expressir/model/statements/if.rb +17 -0
  440. data/lib/expressir/model/statements/null.rb +8 -0
  441. data/lib/expressir/model/statements/repeat.rb +34 -0
  442. data/lib/expressir/model/statements/return.rb +13 -0
  443. data/lib/expressir/model/statements/skip.rb +8 -0
  444. data/lib/expressir/model/subtype_constraint.rb +27 -0
  445. data/lib/expressir/model/type.rb +24 -0
  446. data/lib/expressir/model/types/aggregate.rb +17 -0
  447. data/lib/expressir/model/types/array.rb +21 -0
  448. data/lib/expressir/model/types/bag.rb +17 -0
  449. data/lib/expressir/model/types/binary.rb +15 -0
  450. data/lib/expressir/model/types/boolean.rb +8 -0
  451. data/lib/expressir/model/types/enumeration.rb +19 -0
  452. data/lib/expressir/model/types/generic.rb +13 -0
  453. data/lib/expressir/model/types/generic_entity.rb +13 -0
  454. data/lib/expressir/model/types/integer.rb +8 -0
  455. data/lib/expressir/model/types/list.rb +19 -0
  456. data/lib/expressir/model/types/logical.rb +8 -0
  457. data/lib/expressir/model/types/number.rb +8 -0
  458. data/lib/expressir/model/types/real.rb +13 -0
  459. data/lib/expressir/model/types/select.rb +21 -0
  460. data/lib/expressir/model/types/set.rb +17 -0
  461. data/lib/expressir/model/types/string.rb +15 -0
  462. data/lib/expressir/model/unique.rb +15 -0
  463. data/lib/expressir/model/variable.rb +17 -0
  464. data/lib/expressir/model/where.rb +15 -0
  465. data/lib/expressir/parser.rb +6 -0
  466. data/lib/expressir/parser/owl_parser.rb +8 -0
  467. data/lib/expressir/version.rb +3 -0
  468. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +9589 -0
  469. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +36619 -0
  470. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +13294 -0
  471. data/original/examples/employment/eclipse/.project +17 -0
  472. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  473. data/original/examples/employment/eclipse/Express/employment_schema.exp +33 -0
  474. data/original/examples/employment/eclipse/Express/employment_schema.xmi +77 -0
  475. data/original/examples/employment/eclipse/Express/employment_schema.xml +93 -0
  476. data/original/examples/employment/eclipse/Models/Employment.uml +4 -0
  477. data/original/examples/employment/eclipse/Models/Employment.umldi +240 -0
  478. data/original/examples/employment/eclipse/readme.txt +7 -0
  479. data/original/examples/employment/employment_schema.exp +33 -0
  480. data/original/examples/employment/employment_schema.rb +232 -0
  481. data/original/examples/employment/employment_schema.xml +93 -0
  482. data/original/examples/employment/employment_schema___module.rb +46 -0
  483. data/original/examples/employment/employment_schema___p28attr.rb +126 -0
  484. data/original/examples/employment/employment_schema___p28inst.rb +26 -0
  485. data/original/examples/employment/example_employment_data.xml +1 -0
  486. data/original/examples/employment/example_employment_data_copy.xml +1 -0
  487. data/original/examples/employment/example_employment_reader.rb +30 -0
  488. data/original/examples/employment/example_employment_writer.rb +51 -0
  489. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +3710 -0
  490. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +35880 -0
  491. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +15357 -0
  492. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +9468 -0
  493. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +8404 -0
  494. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +43147 -0
  495. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +18341 -0
  496. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +11632 -0
  497. data/original/examples/syntax/remark.exp +145 -0
  498. data/original/examples/syntax/remark_formatted.exp +174 -0
  499. data/original/examples/syntax/syntax.exp +310 -0
  500. data/original/examples/syntax/syntax_formatted.exp +1187 -0
  501. data/original/exp2ruby.rb +525 -0
  502. data/original/expsm.rb +34 -0
  503. data/original/mapping_owl.rb +1018 -0
  504. data/original/mapping_sysml.rb +2281 -0
  505. data/original/mapping_uml2.rb +599 -0
  506. data/original/mapping_uml2_eclipse.rb +433 -0
  507. data/original/reeper.rb +134 -0
  508. data/spec/acceptance/express_to_owl_spec.rb +18 -0
  509. data/spec/acceptance/version_spec.rb +12 -0
  510. data/spec/expressir/express/repository_spec.rb +25 -0
  511. data/spec/expressir/express_exp/ap233_spec.rb +22 -0
  512. data/spec/expressir/express_exp/format_remark_spec.rb +28 -0
  513. data/spec/expressir/express_exp/format_syntax_spec.rb +28 -0
  514. data/spec/expressir/express_exp/parse_remark_spec.rb +345 -0
  515. data/spec/expressir/express_exp/parse_syntax_spec.rb +2998 -0
  516. data/spec/expressir/model/find_spec.rb +110 -0
  517. data/spec/expressr_spec.rb +5 -0
  518. data/spec/spec_helper.rb +17 -0
  519. data/spec/support/console_helper.rb +29 -0
  520. metadata +695 -0
@@ -0,0 +1,30 @@
1
+ /* Copyright (c) 2012-2017 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 "antlr4-common.h"
9
+
10
+ namespace antlr4 {
11
+
12
+ /// The default mechanism for creating tokens. It's used by default in Lexer and
13
+ /// the error handling strategy (to create missing tokens). Notifying the parser
14
+ /// of a new factory means that it notifies it's token source and error strategy.
15
+ template<typename Symbol>
16
+ class ANTLR4CPP_PUBLIC TokenFactory {
17
+ public:
18
+ virtual ~TokenFactory() {}
19
+
20
+ /// This is the method used to create tokens in the lexer and in the
21
+ /// error handling strategy. If text!=null, than the start and stop positions
22
+ /// are wiped to -1 in the text override is set in the CommonToken.
23
+ virtual std::unique_ptr<Symbol> create(std::pair<TokenSource *, CharStream *> source, size_t type, const std::string &text,
24
+ size_t channel, size_t start, size_t stop, size_t line, size_t charPositionInLine) = 0;
25
+
26
+ /// Generically useful
27
+ virtual std::unique_ptr<Symbol> create(size_t type, const std::string &text) = 0;
28
+ };
29
+
30
+ } // namespace antlr4
@@ -0,0 +1,9 @@
1
+ /* Copyright (c) 2012-2017 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
+ #include "TokenSource.h"
7
+
8
+ antlr4::TokenSource::~TokenSource() {
9
+ }
@@ -0,0 +1,85 @@
1
+ /* Copyright (c) 2012-2017 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 "TokenFactory.h"
9
+
10
+ namespace antlr4 {
11
+
12
+ /// <summary>
13
+ /// A source of tokens must provide a sequence of tokens via <seealso cref="#nextToken()"/>
14
+ /// and also must reveal it's source of characters; <seealso cref="CommonToken"/>'s text is
15
+ /// computed from a <seealso cref="CharStream"/>; it only store indices into the char
16
+ /// stream.
17
+ /// <p/>
18
+ /// Errors from the lexer are never passed to the parser. Either you want to keep
19
+ /// going or you do not upon token recognition error. If you do not want to
20
+ /// continue lexing then you do not want to continue parsing. Just throw an
21
+ /// exception not under <seealso cref="RecognitionException"/> and Java will naturally toss
22
+ /// you all the way out of the recognizers. If you want to continue lexing then
23
+ /// you should not throw an exception to the parser--it has already requested a
24
+ /// token. Keep lexing until you get a valid one. Just report errors and keep
25
+ /// going, looking for a valid token.
26
+ /// </summary>
27
+ class ANTLR4CPP_PUBLIC TokenSource {
28
+ public:
29
+ virtual ~TokenSource();
30
+
31
+ /// Return a <seealso cref="Token"/> object from your input stream (usually a
32
+ /// <seealso cref="CharStream"/>). Do not fail/return upon lexing error; keep chewing
33
+ /// on the characters until you get a good one; errors are not passed through
34
+ /// to the parser.
35
+ virtual std::unique_ptr<Token> nextToken() = 0;
36
+
37
+ /// <summary>
38
+ /// Get the line number for the current position in the input stream. The
39
+ /// first line in the input is line 1.
40
+ /// </summary>
41
+ /// <returns> The line number for the current position in the input stream, or
42
+ /// 0 if the current token source does not track line numbers. </returns>
43
+ virtual size_t getLine() const = 0;
44
+
45
+ /// <summary>
46
+ /// Get the index into the current line for the current position in the input
47
+ /// stream. The first character on a line has position 0.
48
+ /// </summary>
49
+ /// <returns> The line number for the current position in the input stream, or
50
+ /// (sze_t)-1 if the current token source does not track character positions. </returns>
51
+ virtual size_t getCharPositionInLine() = 0;
52
+
53
+ /// <summary>
54
+ /// Get the <seealso cref="CharStream"/> from which this token source is currently
55
+ /// providing tokens.
56
+ /// </summary>
57
+ /// <returns> The <seealso cref="CharStream"/> associated with the current position in
58
+ /// the input, or {@code null} if no input stream is available for the token
59
+ /// source. </returns>
60
+ virtual CharStream* getInputStream() = 0;
61
+
62
+ /// <summary>
63
+ /// Gets the name of the underlying input source. This method returns a
64
+ /// non-null, non-empty string. If such a name is not known, this method
65
+ /// returns <seealso cref="IntStream#UNKNOWN_SOURCE_NAME"/>.
66
+ /// </summary>
67
+ virtual std::string getSourceName() = 0;
68
+
69
+ /// <summary>
70
+ /// Set the <seealso cref="TokenFactory"/> this token source should use for creating
71
+ /// <seealso cref="Token"/> objects from the input.
72
+ /// </summary>
73
+ /// <param name="factory"> The <seealso cref="TokenFactory"/> to use for creating tokens. </param>
74
+ template<typename T1>
75
+ void setTokenFactory(TokenFactory<T1> * /*factory*/) {}
76
+
77
+ /// <summary>
78
+ /// Gets the <seealso cref="TokenFactory"/> this token source is currently using for
79
+ /// creating <seealso cref="Token"/> objects from the input.
80
+ /// </summary>
81
+ /// <returns> The <seealso cref="TokenFactory"/> currently used by this token source. </returns>
82
+ virtual Ref<TokenFactory<CommonToken>> getTokenFactory() = 0;
83
+ };
84
+
85
+ } // namespace antlr4
@@ -0,0 +1,11 @@
1
+ /* Copyright (c) 2012-2017 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
+ #include "TokenStream.h"
7
+
8
+ using namespace antlr4;
9
+
10
+ TokenStream::~TokenStream() {
11
+ }
@@ -0,0 +1,137 @@
1
+ /* Copyright (c) 2012-2017 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 "IntStream.h"
9
+
10
+ namespace antlr4 {
11
+
12
+ /// <summary>
13
+ /// An <seealso cref="IntStream"/> whose symbols are <seealso cref="Token"/> instances.
14
+ /// </summary>
15
+ class ANTLR4CPP_PUBLIC TokenStream : public IntStream {
16
+ /// <summary>
17
+ /// Get the <seealso cref="Token"/> instance associated with the value returned by
18
+ /// <seealso cref="#LA LA(k)"/>. This method has the same pre- and post-conditions as
19
+ /// <seealso cref="IntStream#LA"/>. In addition, when the preconditions of this method
20
+ /// are met, the return value is non-null and the value of
21
+ /// {@code LT(k).getType()==LA(k)}.
22
+ /// </summary>
23
+ /// <seealso cref= IntStream#LA </seealso>
24
+ public:
25
+ virtual ~TokenStream();
26
+
27
+ virtual Token* LT(ssize_t k) = 0;
28
+
29
+ /// <summary>
30
+ /// Gets the <seealso cref="Token"/> at the specified {@code index} in the stream. When
31
+ /// the preconditions of this method are met, the return value is non-null.
32
+ /// <p/>
33
+ /// The preconditions for this method are the same as the preconditions of
34
+ /// <seealso cref="IntStream#seek"/>. If the behavior of {@code seek(index)} is
35
+ /// unspecified for the current state and given {@code index}, then the
36
+ /// behavior of this method is also unspecified.
37
+ /// <p/>
38
+ /// The symbol referred to by {@code index} differs from {@code seek()} only
39
+ /// in the case of filtering streams where {@code index} lies before the end
40
+ /// of the stream. Unlike {@code seek()}, this method does not adjust
41
+ /// {@code index} to point to a non-ignored symbol.
42
+ /// </summary>
43
+ /// <exception cref="IllegalArgumentException"> if {code index} is less than 0 </exception>
44
+ /// <exception cref="UnsupportedOperationException"> if the stream does not support
45
+ /// retrieving the token at the specified index </exception>
46
+ virtual Token* get(size_t index) const = 0;
47
+
48
+ /// Gets the underlying TokenSource which provides tokens for this stream.
49
+ virtual TokenSource* getTokenSource() const = 0;
50
+
51
+ /// <summary>
52
+ /// Return the text of all tokens within the specified {@code interval}. This
53
+ /// method behaves like the following code (including potential exceptions
54
+ /// for violating preconditions of <seealso cref="#get"/>, but may be optimized by the
55
+ /// specific implementation.
56
+ ///
57
+ /// <pre>
58
+ /// TokenStream stream = ...;
59
+ /// String text = "";
60
+ /// for (int i = interval.a; i <= interval.b; i++) {
61
+ /// text += stream.get(i).getText();
62
+ /// }
63
+ /// </pre>
64
+ /// </summary>
65
+ /// <param name="interval"> The interval of tokens within this stream to get text
66
+ /// for. </param>
67
+ /// <returns> The text of all tokens within the specified interval in this
68
+ /// stream.
69
+ /// </returns>
70
+ /// <exception cref="NullPointerException"> if {@code interval} is {@code null} </exception>
71
+ virtual std::string getText(const misc::Interval &interval) = 0;
72
+
73
+ /// <summary>
74
+ /// Return the text of all tokens in the stream. This method behaves like the
75
+ /// following code, including potential exceptions from the calls to
76
+ /// <seealso cref="IntStream#size"/> and <seealso cref="#getText(Interval)"/>, but may be
77
+ /// optimized by the specific implementation.
78
+ ///
79
+ /// <pre>
80
+ /// TokenStream stream = ...;
81
+ /// String text = stream.getText(new Interval(0, stream.size()));
82
+ /// </pre>
83
+ /// </summary>
84
+ /// <returns> The text of all tokens in the stream. </returns>
85
+ virtual std::string getText() = 0;
86
+
87
+ /// <summary>
88
+ /// Return the text of all tokens in the source interval of the specified
89
+ /// context. This method behaves like the following code, including potential
90
+ /// exceptions from the call to <seealso cref="#getText(Interval)"/>, but may be
91
+ /// optimized by the specific implementation.
92
+ /// </p>
93
+ /// If {@code ctx.getSourceInterval()} does not return a valid interval of
94
+ /// tokens provided by this stream, the behavior is unspecified.
95
+ ///
96
+ /// <pre>
97
+ /// TokenStream stream = ...;
98
+ /// String text = stream.getText(ctx.getSourceInterval());
99
+ /// </pre>
100
+ /// </summary>
101
+ /// <param name="ctx"> The context providing the source interval of tokens to get
102
+ /// text for. </param>
103
+ /// <returns> The text of all tokens within the source interval of {@code ctx}. </returns>
104
+ virtual std::string getText(RuleContext *ctx) = 0;
105
+
106
+ /// <summary>
107
+ /// Return the text of all tokens in this stream between {@code start} and
108
+ /// {@code stop} (inclusive).
109
+ /// <p/>
110
+ /// If the specified {@code start} or {@code stop} token was not provided by
111
+ /// this stream, or if the {@code stop} occurred before the {@code start}
112
+ /// token, the behavior is unspecified.
113
+ /// <p/>
114
+ /// For streams which ensure that the <seealso cref="Token#getTokenIndex"/> method is
115
+ /// accurate for all of its provided tokens, this method behaves like the
116
+ /// following code. Other streams may implement this method in other ways
117
+ /// provided the behavior is consistent with this at a high level.
118
+ ///
119
+ /// <pre>
120
+ /// TokenStream stream = ...;
121
+ /// String text = "";
122
+ /// for (int i = start.getTokenIndex(); i <= stop.getTokenIndex(); i++) {
123
+ /// text += stream.get(i).getText();
124
+ /// }
125
+ /// </pre>
126
+ /// </summary>
127
+ /// <param name="start"> The first token in the interval to get text for. </param>
128
+ /// <param name="stop"> The last token in the interval to get text for (inclusive). </param>
129
+ /// <returns> The text of all tokens lying between the specified {@code start}
130
+ /// and {@code stop} tokens.
131
+ /// </returns>
132
+ /// <exception cref="UnsupportedOperationException"> if this stream does not support
133
+ /// this method for the specified tokens </exception>
134
+ virtual std::string getText(Token *start, Token *stop) = 0;
135
+ };
136
+
137
+ } // namespace antlr4
@@ -0,0 +1,425 @@
1
+ /* Copyright (c) 2012-2017 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
+ #include "Exceptions.h"
7
+ #include "misc/Interval.h"
8
+ #include "Token.h"
9
+ #include "TokenStream.h"
10
+
11
+ #include "TokenStreamRewriter.h"
12
+
13
+ using namespace antlr4;
14
+
15
+ using antlr4::misc::Interval;
16
+
17
+ TokenStreamRewriter::RewriteOperation::RewriteOperation(TokenStreamRewriter *outerInstance_, size_t index_)
18
+ : outerInstance(outerInstance_) {
19
+
20
+ InitializeInstanceFields();
21
+ this->index = index_;
22
+ }
23
+
24
+ TokenStreamRewriter::RewriteOperation::RewriteOperation(TokenStreamRewriter *outerInstance_, size_t index_,
25
+ const std::string& text_) : outerInstance(outerInstance_) {
26
+
27
+ InitializeInstanceFields();
28
+ this->index = index_;
29
+ this->text = text_;
30
+ }
31
+
32
+ TokenStreamRewriter::RewriteOperation::~RewriteOperation()
33
+ {
34
+ }
35
+
36
+ size_t TokenStreamRewriter::RewriteOperation::execute(std::string * /*buf*/) {
37
+ return index;
38
+ }
39
+
40
+ std::string TokenStreamRewriter::RewriteOperation::toString() {
41
+ std::string opName = "TokenStreamRewriter";
42
+ size_t dollarIndex = opName.find('$');
43
+ opName = opName.substr(dollarIndex + 1, opName.length() - (dollarIndex + 1));
44
+ return "<" + opName + "@" + outerInstance->tokens->get(dollarIndex)->getText() + ":\"" + text + "\">";
45
+ }
46
+
47
+ void TokenStreamRewriter::RewriteOperation::InitializeInstanceFields() {
48
+ instructionIndex = 0;
49
+ index = 0;
50
+ }
51
+
52
+ TokenStreamRewriter::InsertBeforeOp::InsertBeforeOp(TokenStreamRewriter *outerInstance_, size_t index_, const std::string& text_)
53
+ : RewriteOperation(outerInstance_, index_, text_), outerInstance(outerInstance_) {
54
+ }
55
+
56
+ size_t TokenStreamRewriter::InsertBeforeOp::execute(std::string *buf) {
57
+ buf->append(text);
58
+ if (outerInstance->tokens->get(index)->getType() != Token::EOF) {
59
+ buf->append(outerInstance->tokens->get(index)->getText());
60
+ }
61
+ return index + 1;
62
+ }
63
+
64
+ TokenStreamRewriter::ReplaceOp::ReplaceOp(TokenStreamRewriter *outerInstance_, size_t from, size_t to, const std::string& text)
65
+ : RewriteOperation(outerInstance_, from, text), outerInstance(outerInstance_) {
66
+
67
+ InitializeInstanceFields();
68
+ lastIndex = to;
69
+ }
70
+
71
+ size_t TokenStreamRewriter::ReplaceOp::execute(std::string *buf) {
72
+ buf->append(text);
73
+ return lastIndex + 1;
74
+ }
75
+
76
+ std::string TokenStreamRewriter::ReplaceOp::toString() {
77
+ if (text.empty()) {
78
+ return "<DeleteOp@" + outerInstance->tokens->get(index)->getText() + ".." + outerInstance->tokens->get(lastIndex)->getText() + ">";
79
+ }
80
+ return "<ReplaceOp@" + outerInstance->tokens->get(index)->getText() + ".." + outerInstance->tokens->get(lastIndex)->getText() + ":\"" + text + "\">";
81
+ }
82
+
83
+ void TokenStreamRewriter::ReplaceOp::InitializeInstanceFields() {
84
+ lastIndex = 0;
85
+ }
86
+
87
+ //------------------ TokenStreamRewriter -------------------------------------------------------------------------------
88
+
89
+ const std::string TokenStreamRewriter::DEFAULT_PROGRAM_NAME = "default";
90
+
91
+ TokenStreamRewriter::TokenStreamRewriter(TokenStream *tokens_) : tokens(tokens_) {
92
+ _programs[DEFAULT_PROGRAM_NAME].reserve(PROGRAM_INIT_SIZE);
93
+ }
94
+
95
+ TokenStreamRewriter::~TokenStreamRewriter() {
96
+ for (auto program : _programs) {
97
+ for (auto operation : program.second) {
98
+ delete operation;
99
+ }
100
+ }
101
+ }
102
+
103
+ TokenStream *TokenStreamRewriter::getTokenStream() {
104
+ return tokens;
105
+ }
106
+
107
+ void TokenStreamRewriter::rollback(size_t instructionIndex) {
108
+ rollback(DEFAULT_PROGRAM_NAME, instructionIndex);
109
+ }
110
+
111
+ void TokenStreamRewriter::rollback(const std::string &programName, size_t instructionIndex) {
112
+ std::vector<RewriteOperation*> is = _programs[programName];
113
+ if (is.size() > 0) {
114
+ _programs.insert({ programName, std::vector<RewriteOperation*>(is.begin() + MIN_TOKEN_INDEX, is.begin() + instructionIndex) });
115
+ }
116
+ }
117
+
118
+ void TokenStreamRewriter::deleteProgram() {
119
+ deleteProgram(DEFAULT_PROGRAM_NAME);
120
+ }
121
+
122
+ void TokenStreamRewriter::deleteProgram(const std::string &programName) {
123
+ rollback(programName, MIN_TOKEN_INDEX);
124
+ }
125
+
126
+ void TokenStreamRewriter::insertAfter(Token *t, const std::string& text) {
127
+ insertAfter(DEFAULT_PROGRAM_NAME, t, text);
128
+ }
129
+
130
+ void TokenStreamRewriter::insertAfter(size_t index, const std::string& text) {
131
+ insertAfter(DEFAULT_PROGRAM_NAME, index, text);
132
+ }
133
+
134
+ void TokenStreamRewriter::insertAfter(const std::string &programName, Token *t, const std::string& text) {
135
+ insertAfter(programName, t->getTokenIndex(), text);
136
+ }
137
+
138
+ void TokenStreamRewriter::insertAfter(const std::string &programName, size_t index, const std::string& text) {
139
+ // to insert after, just insert before next index (even if past end)
140
+ insertBefore(programName, index + 1, text);
141
+ }
142
+
143
+ void TokenStreamRewriter::insertBefore(Token *t, const std::string& text) {
144
+ insertBefore(DEFAULT_PROGRAM_NAME, t, text);
145
+ }
146
+
147
+ void TokenStreamRewriter::insertBefore(size_t index, const std::string& text) {
148
+ insertBefore(DEFAULT_PROGRAM_NAME, index, text);
149
+ }
150
+
151
+ void TokenStreamRewriter::insertBefore(const std::string &programName, Token *t, const std::string& text) {
152
+ insertBefore(programName, t->getTokenIndex(), text);
153
+ }
154
+
155
+ void TokenStreamRewriter::insertBefore(const std::string &programName, size_t index, const std::string& text) {
156
+ RewriteOperation *op = new InsertBeforeOp(this, index, text); /* mem-check: deleted in d-tor */
157
+ std::vector<RewriteOperation*> &rewrites = getProgram(programName);
158
+ op->instructionIndex = rewrites.size();
159
+ rewrites.push_back(op);
160
+ }
161
+
162
+ void TokenStreamRewriter::replace(size_t index, const std::string& text) {
163
+ replace(DEFAULT_PROGRAM_NAME, index, index, text);
164
+ }
165
+
166
+ void TokenStreamRewriter::replace(size_t from, size_t to, const std::string& text) {
167
+ replace(DEFAULT_PROGRAM_NAME, from, to, text);
168
+ }
169
+
170
+ void TokenStreamRewriter::replace(Token *indexT, const std::string& text) {
171
+ replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text);
172
+ }
173
+
174
+ void TokenStreamRewriter::replace(Token *from, Token *to, const std::string& text) {
175
+ replace(DEFAULT_PROGRAM_NAME, from, to, text);
176
+ }
177
+
178
+ void TokenStreamRewriter::replace(const std::string &programName, size_t from, size_t to, const std::string& text) {
179
+ if (from > to || to >= tokens->size()) {
180
+ throw IllegalArgumentException("replace: range invalid: " + std::to_string(from) + ".." + std::to_string(to) +
181
+ "(size = " + std::to_string(tokens->size()) + ")");
182
+ }
183
+ RewriteOperation *op = new ReplaceOp(this, from, to, text); /* mem-check: deleted in d-tor */
184
+ std::vector<RewriteOperation*> &rewrites = getProgram(programName);
185
+ op->instructionIndex = rewrites.size();
186
+ rewrites.push_back(op);
187
+ }
188
+
189
+ void TokenStreamRewriter::replace(const std::string &programName, Token *from, Token *to, const std::string& text) {
190
+ replace(programName, from->getTokenIndex(), to->getTokenIndex(), text);
191
+ }
192
+
193
+ void TokenStreamRewriter::Delete(size_t index) {
194
+ Delete(DEFAULT_PROGRAM_NAME, index, index);
195
+ }
196
+
197
+ void TokenStreamRewriter::Delete(size_t from, size_t to) {
198
+ Delete(DEFAULT_PROGRAM_NAME, from, to);
199
+ }
200
+
201
+ void TokenStreamRewriter::Delete(Token *indexT) {
202
+ Delete(DEFAULT_PROGRAM_NAME, indexT, indexT);
203
+ }
204
+
205
+ void TokenStreamRewriter::Delete(Token *from, Token *to) {
206
+ Delete(DEFAULT_PROGRAM_NAME, from, to);
207
+ }
208
+
209
+ void TokenStreamRewriter::Delete(const std::string &programName, size_t from, size_t to) {
210
+ std::string nullString;
211
+ replace(programName, from, to, nullString);
212
+ }
213
+
214
+ void TokenStreamRewriter::Delete(const std::string &programName, Token *from, Token *to) {
215
+ std::string nullString;
216
+ replace(programName, from, to, nullString);
217
+ }
218
+
219
+ size_t TokenStreamRewriter::getLastRewriteTokenIndex() {
220
+ return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME);
221
+ }
222
+
223
+ size_t TokenStreamRewriter::getLastRewriteTokenIndex(const std::string &programName) {
224
+ if (_lastRewriteTokenIndexes.find(programName) == _lastRewriteTokenIndexes.end()) {
225
+ return INVALID_INDEX;
226
+ }
227
+ return _lastRewriteTokenIndexes[programName];
228
+ }
229
+
230
+ void TokenStreamRewriter::setLastRewriteTokenIndex(const std::string &programName, size_t i) {
231
+ _lastRewriteTokenIndexes.insert({ programName, i });
232
+ }
233
+
234
+ std::vector<TokenStreamRewriter::RewriteOperation*>& TokenStreamRewriter::getProgram(const std::string &name) {
235
+ auto iterator = _programs.find(name);
236
+ if (iterator == _programs.end()) {
237
+ return initializeProgram(name);
238
+ }
239
+ return iterator->second;
240
+ }
241
+
242
+ std::vector<TokenStreamRewriter::RewriteOperation*>& TokenStreamRewriter::initializeProgram(const std::string &name) {
243
+ _programs[name].reserve(PROGRAM_INIT_SIZE);
244
+ return _programs[name];
245
+ }
246
+
247
+ std::string TokenStreamRewriter::getText() {
248
+ return getText(DEFAULT_PROGRAM_NAME, Interval(0UL, tokens->size() - 1));
249
+ }
250
+
251
+ std::string TokenStreamRewriter::getText(std::string programName) {
252
+ return getText(programName, Interval(0UL, tokens->size() - 1));
253
+ }
254
+
255
+ std::string TokenStreamRewriter::getText(const Interval &interval) {
256
+ return getText(DEFAULT_PROGRAM_NAME, interval);
257
+ }
258
+
259
+ std::string TokenStreamRewriter::getText(const std::string &programName, const Interval &interval) {
260
+ std::vector<TokenStreamRewriter::RewriteOperation*> &rewrites = _programs[programName];
261
+ size_t start = interval.a;
262
+ size_t stop = interval.b;
263
+
264
+ // ensure start/end are in range
265
+ if (stop > tokens->size() - 1) {
266
+ stop = tokens->size() - 1;
267
+ }
268
+ if (start == INVALID_INDEX) {
269
+ start = 0;
270
+ }
271
+
272
+ if (rewrites.empty() || rewrites.empty()) {
273
+ return tokens->getText(interval); // no instructions to execute
274
+ }
275
+ std::string buf;
276
+
277
+ // First, optimize instruction stream
278
+ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> indexToOp = reduceToSingleOperationPerIndex(rewrites);
279
+
280
+ // Walk buffer, executing instructions and emitting tokens
281
+ size_t i = start;
282
+ while (i <= stop && i < tokens->size()) {
283
+ RewriteOperation *op = indexToOp[i];
284
+ indexToOp.erase(i); // remove so any left have index size-1
285
+ Token *t = tokens->get(i);
286
+ if (op == nullptr) {
287
+ // no operation at that index, just dump token
288
+ if (t->getType() != Token::EOF) {
289
+ buf.append(t->getText());
290
+ }
291
+ i++; // move to next token
292
+ }
293
+ else {
294
+ i = op->execute(&buf); // execute operation and skip
295
+ }
296
+ }
297
+
298
+ // include stuff after end if it's last index in buffer
299
+ // So, if they did an insertAfter(lastValidIndex, "foo"), include
300
+ // foo if end==lastValidIndex.
301
+ if (stop == tokens->size() - 1) {
302
+ // Scan any remaining operations after last token
303
+ // should be included (they will be inserts).
304
+ for (auto op : indexToOp) {
305
+ if (op.second->index >= tokens->size() - 1) {
306
+ buf.append(op.second->text);
307
+ }
308
+ }
309
+ }
310
+ return buf;
311
+ }
312
+
313
+ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> TokenStreamRewriter::reduceToSingleOperationPerIndex(
314
+ std::vector<TokenStreamRewriter::RewriteOperation*> &rewrites) {
315
+
316
+
317
+ // WALK REPLACES
318
+ for (size_t i = 0; i < rewrites.size(); ++i) {
319
+ TokenStreamRewriter::RewriteOperation *op = rewrites[i];
320
+ ReplaceOp *rop = dynamic_cast<ReplaceOp *>(op);
321
+ if (rop == nullptr)
322
+ continue;
323
+
324
+ // Wipe prior inserts within range
325
+ std::vector<InsertBeforeOp *> inserts = getKindOfOps<InsertBeforeOp>(rewrites, i);
326
+ for (auto iop : inserts) {
327
+ if (iop->index == rop->index) {
328
+ // E.g., insert before 2, delete 2..2; update replace
329
+ // text to include insert before, kill insert
330
+ delete rewrites[iop->instructionIndex];
331
+ rewrites[iop->instructionIndex] = nullptr;
332
+ rop->text = iop->text + (!rop->text.empty() ? rop->text : "");
333
+ }
334
+ else if (iop->index > rop->index && iop->index <= rop->lastIndex) {
335
+ // delete insert as it's a no-op.
336
+ delete rewrites[iop->instructionIndex];
337
+ rewrites[iop->instructionIndex] = nullptr;
338
+ }
339
+ }
340
+ // Drop any prior replaces contained within
341
+ std::vector<ReplaceOp*> prevReplaces = getKindOfOps<ReplaceOp>(rewrites, i);
342
+ for (auto prevRop : prevReplaces) {
343
+ if (prevRop->index >= rop->index && prevRop->lastIndex <= rop->lastIndex) {
344
+ // delete replace as it's a no-op.
345
+ delete rewrites[prevRop->instructionIndex];
346
+ rewrites[prevRop->instructionIndex] = nullptr;
347
+ continue;
348
+ }
349
+ // throw exception unless disjoint or identical
350
+ bool disjoint = prevRop->lastIndex < rop->index || prevRop->index > rop->lastIndex;
351
+ // Delete special case of replace (text==null):
352
+ // D.i-j.u D.x-y.v | boundaries overlap combine to max(min)..max(right)
353
+ if (prevRop->text.empty() && rop->text.empty() && !disjoint) {
354
+ delete rewrites[prevRop->instructionIndex];
355
+ rewrites[prevRop->instructionIndex] = nullptr; // kill first delete
356
+ rop->index = std::min(prevRop->index, rop->index);
357
+ rop->lastIndex = std::max(prevRop->lastIndex, rop->lastIndex);
358
+ std::cout << "new rop " << rop << std::endl;
359
+ }
360
+ else if (!disjoint) {
361
+ throw IllegalArgumentException("replace op boundaries of " + rop->toString() +
362
+ " overlap with previous " + prevRop->toString());
363
+ }
364
+ }
365
+ }
366
+
367
+ // WALK INSERTS
368
+ for (size_t i = 0; i < rewrites.size(); i++) {
369
+ InsertBeforeOp *iop = dynamic_cast<InsertBeforeOp *>(rewrites[i]);
370
+ if (iop == nullptr)
371
+ continue;
372
+
373
+ // combine current insert with prior if any at same index
374
+
375
+ std::vector<InsertBeforeOp *> prevInserts = getKindOfOps<InsertBeforeOp>(rewrites, i);
376
+ for (auto prevIop : prevInserts) {
377
+ if (prevIop->index == iop->index) { // combine objects
378
+ // convert to strings...we're in process of toString'ing
379
+ // whole token buffer so no lazy eval issue with any templates
380
+ iop->text = catOpText(&iop->text, &prevIop->text);
381
+ // delete redundant prior insert
382
+ delete rewrites[prevIop->instructionIndex];
383
+ rewrites[prevIop->instructionIndex] = nullptr;
384
+ }
385
+ }
386
+ // look for replaces where iop.index is in range; error
387
+ std::vector<ReplaceOp*> prevReplaces = getKindOfOps<ReplaceOp>(rewrites, i);
388
+ for (auto rop : prevReplaces) {
389
+ if (iop->index == rop->index) {
390
+ rop->text = catOpText(&iop->text, &rop->text);
391
+ delete rewrites[i];
392
+ rewrites[i] = nullptr; // delete current insert
393
+ continue;
394
+ }
395
+ if (iop->index >= rop->index && iop->index <= rop->lastIndex) {
396
+ throw IllegalArgumentException("insert op " + iop->toString() + " within boundaries of previous " + rop->toString());
397
+ }
398
+ }
399
+ }
400
+
401
+ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> m;
402
+ for (TokenStreamRewriter::RewriteOperation *op : rewrites) {
403
+ if (op == nullptr) { // ignore deleted ops
404
+ continue;
405
+ }
406
+ if (m.count(op->index) > 0) {
407
+ throw RuntimeException("should only be one op per index");
408
+ }
409
+ m[op->index] = op;
410
+ }
411
+
412
+ return m;
413
+ }
414
+
415
+ std::string TokenStreamRewriter::catOpText(std::string *a, std::string *b) {
416
+ std::string x = "";
417
+ std::string y = "";
418
+ if (a != nullptr) {
419
+ x = *a;
420
+ }
421
+ if (b != nullptr) {
422
+ y = *b;
423
+ }
424
+ return x + y;
425
+ }