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,96 @@
1
+ require "expressir/express/entity"
2
+ require "expressir/express/type_parser"
3
+ require "expressir/express/global_rule"
4
+
5
+ module Expressir
6
+ module Express
7
+ class SchemaDefinition < ModelElement
8
+ attr_accessor :contents, :name, :identification, :all_schema_array
9
+
10
+ def initialize(document = {})
11
+ @document = document
12
+ @all_schema_array = []
13
+
14
+ extract_attributes(@document)
15
+ end
16
+
17
+ # @todo Existing Code
18
+ #
19
+ # Please revisit this soon, and check if this is necessary
20
+ # after our recent restrucutre, if not then delegate this
21
+ # behavior to the respective instanace.
22
+ #
23
+ def find_namedtype_by_name(typename)
24
+ ## search current schema and interfaced item aliases
25
+ nt = contents.detect do |t|
26
+ t.is_a?(Express::NamedType) && t.name == typename
27
+ end
28
+
29
+ if nt != nil
30
+ return nt
31
+ end
32
+
33
+ for schema in self.all_schema_array
34
+ ## search all interfaced schemas
35
+ nt = schema.contents.detect do |t|
36
+ t.is_a?(Express::NamedType) && t.name == typename
37
+ end
38
+
39
+ if nt != nil
40
+ return nt
41
+ end
42
+ end
43
+
44
+ Expressir.ui.info("*** NOT HERE " + typename + " IN " + self.name)
45
+ Expressir.ui.info("*** SEARCHED " + all_schema_array.size.to_s + " SCHEMAS:")
46
+
47
+ all_schema_array.each do |schema|
48
+ Expressir.ui.info(" - " + schema.name)
49
+ end
50
+
51
+ nil
52
+ end
53
+
54
+ private
55
+
56
+ def extract_attributes(document)
57
+ @name = document.attributes["name"].to_s
58
+
59
+ contents = extract_interfaces(document)
60
+ contents += extract_entities(document)
61
+ contents += extract_types(document)
62
+ contents += extract_rules(document)
63
+
64
+ @contents = contents.flatten
65
+ end
66
+
67
+ # todo: current version does not contain any interface, so we need
68
+ # a solid example to test out this funcitonaality. But keeping it
69
+ # pending for now, let's revisit soon.
70
+ #
71
+ def extract_interfaces(document)
72
+ document.xpath("interface").map do |interface|
73
+ InterfaceSpecification.parse(interface, name)
74
+ end
75
+ end
76
+
77
+ def extract_entities(document)
78
+ document.xpath("//entity").map do |entity|
79
+ Express::Entity.parse(entity, name)
80
+ end
81
+ end
82
+
83
+ def extract_types(document)
84
+ document.xpath("type").map do |type_document|
85
+ Express::TypeParser.parse(type_document, name)
86
+ end
87
+ end
88
+
89
+ def extract_rules(document)
90
+ document.xpath("rule").map do |rule|
91
+ Express::GlobalRule.parse(rule, name)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,14 @@
1
+ require "expressir/express/model_element"
2
+
3
+ module Expressir
4
+ module Express
5
+ class SubtypeConstraint < ModelElement
6
+ attr_accessor :name, :entity, :isAbs, :totalover, :expression
7
+
8
+ def initialize
9
+ @isAbs = false
10
+ @totalover = nil
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ require "expressir/express/defined_type"
2
+
3
+ module Expressir
4
+ module Express
5
+ class Type < DefinedType
6
+ attr_accessor :isBuiltin, :domain, :isFixed, :width, :precision
7
+
8
+ def initialize(options = {})
9
+ @isBuiltin = false
10
+ @isFixed = false
11
+ @width = nil
12
+ @precision = nil
13
+ @wheres = []
14
+ @selectedBy = []
15
+
16
+ super(options)
17
+ end
18
+
19
+ private
20
+
21
+ def extract_type_attributes(document)
22
+ super(document)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ require "expressir/express/type"
2
+
3
+ module Expressir
4
+ module Express
5
+ class TypeAggregate < Type
6
+ attr_accessor :rank, :dimensions
7
+ def initialize(options = {})
8
+ @rank = 0
9
+ @dimensions = []
10
+ @wheres = []
11
+ @selectedBy = []
12
+
13
+ super(options)
14
+ end
15
+
16
+ private
17
+
18
+ def extract_type_attributes(document)
19
+ @name = document.first.attributes["name"].to_s
20
+ @dimensions = document.map do |aggregate|
21
+ Express::AggregateDimension.parse(aggregate)
22
+ end
23
+
24
+ @rank = @dimensions.size
25
+ extract_builtintype_attributes(document)
26
+ end
27
+
28
+ def extract_builtintype_attributes(document)
29
+ builtin_type = document.xpath("builtintype").first
30
+
31
+ if builtin_type
32
+ @isBuiltin = true
33
+ @domain = builtin_type.attributes["type"].to_s
34
+ @width = builtin_type.attributes["width"].to_s
35
+ @fixed = builtin_type.attributes["fixed"] == "YES"
36
+ @precision = builtin_type.attributes["precision"].to_s
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,29 @@
1
+ require "expressir/express/defined_type"
2
+
3
+ module Expressir
4
+ module Express
5
+ class TypeEnum < DefinedType
6
+ attr_accessor :items_array, :items, :extends, :extends_item,
7
+ :isExtensible, :allitems, :isBuiltin
8
+
9
+ def initialize(options = {})
10
+ @isBuiltin = false
11
+ @selectedBy = []
12
+
13
+ super(options)
14
+ end
15
+
16
+ private
17
+
18
+ def extract_type_attributes(document)
19
+ if document.class == Nokogiri::XML::NodeSet
20
+ document = document.first
21
+ end
22
+
23
+ @items = document.attributes["items"]
24
+ @items_array = items.to_s.scan(/\w+/)
25
+ super(document)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,45 @@
1
+ require "expressir/express/type_enum"
2
+ require "expressir/express/type_select"
3
+ require "expressir/express/type_aggregate"
4
+
5
+ module Expressir
6
+ module Express
7
+ class TypeParser
8
+ def initialize(options = {})
9
+ @options = options
10
+ @schema = options.fetch(:schema, nil)
11
+ end
12
+
13
+ def parse
14
+ document = @options.fetch(:document, nil)
15
+ extract_attributes(document) if document
16
+ end
17
+
18
+ def self.parse(document, schema)
19
+ new(document: document, schema: schema).parse
20
+ end
21
+
22
+ private
23
+
24
+ def extract_attributes(document)
25
+ document_with_klass = document_with_klass(document)
26
+ document_with_klass[:cls].parse(document_with_klass[:document], @schema)
27
+ end
28
+
29
+ def document_with_klass(document)
30
+ if !document.xpath("select").empty?
31
+ { document: document.xpath("select"), cls: Express::TypeSelect }
32
+
33
+ elsif !document.xpath("enumeration").empty?
34
+ { document: document.xpath("enumeration"), cls: Express::TypeEnum }
35
+
36
+ elsif !document.xpath("aggregate").empty?
37
+ { document: document.xpath("aggregate"), cls: Express::TypeAggregate }
38
+
39
+ else
40
+ { document: document, cls: Express::Type }
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,82 @@
1
+ require "expressir/express/defined_type"
2
+
3
+ module Expressir
4
+ module Express
5
+ class TypeSelect < DefinedType
6
+ attr_accessor :selectitems_array, :selectitems, :extends, :extends_item,
7
+ :isExtensible, :selectitems_all, :isGenericEntity, :isBuiltin,
8
+ :cleaned_select_items
9
+
10
+ def initialize(options = {})
11
+ @isBuiltin = false
12
+ @isExtensible = false
13
+ @isGenericEntity = false
14
+ @selectitems = nil
15
+ @selectitems_array = []
16
+ @cleaned_select_items = nil
17
+ @wheres = []
18
+ @selectedBy = []
19
+
20
+ super(options)
21
+ end
22
+
23
+ ##
24
+ # set cleaned_select_items = process select removing unnecessary
25
+ # entity types (i.e. if supertype is there)
26
+ #
27
+ def clean_select_items
28
+ @cleaned_select_items = ""
29
+
30
+ if selectitems != nil
31
+ itemname_list = selectitems.scan(/\w+/)
32
+ dupitem_list = []
33
+ for itemname in itemname_list
34
+ itemptr = schema.find_namedtype_by_name( itemname )
35
+
36
+ if itemptr.kind_of? EXPSM::Entity
37
+
38
+ for itemname2 in itemname_list
39
+ thetype = schema.find_namedtype_by_name( itemname2 )
40
+
41
+ if thetype != nil
42
+ if itemptr.supertypes_all != nil &&
43
+ itemptr.supertypes_all.include?(thetype.name)
44
+
45
+ dupitem_list.push itemname
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ itemname_list.each do |itemname|
53
+ if !dupitem_list.include? itemname
54
+ @cleaned_select_items = @cleaned_select_items + " " + itemname
55
+ end
56
+ end
57
+
58
+ @cleaned_select_items = @cleaned_select_items.lstrip
59
+ end
60
+ end
61
+
62
+ private
63
+
64
+ def extract_type_attributes(document)
65
+ if document.class == Nokogiri::XML::NodeSet
66
+ document = document.first
67
+ end
68
+
69
+ @selectitems = document.attributes["selectitems"]
70
+ @extends = document.attributes["basedon"]
71
+ @isExtensible = document.attributes["extensible"] == "YES"
72
+ @isGenericEntity = document.attributes["genericentity"] == "YES"
73
+
74
+ if isExtensible
75
+ @selectitems_all = selectitems
76
+ end
77
+
78
+ super(document)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,35 @@
1
+ require "expressir/express/model_element"
2
+
3
+ module Expressir
4
+ module Express
5
+ class UniqueRule < ModelElement
6
+ attr_accessor :name, :attributes
7
+
8
+ def initialize(options)
9
+ @name = nil
10
+ @attributes = []
11
+ @options = options
12
+ end
13
+
14
+ def parse
15
+ document = @options.fetch(:document, nil)
16
+ extract_unique_attributes(document)
17
+
18
+ self
19
+ end
20
+
21
+ def self.parse(document)
22
+ new(document: document).parse
23
+ end
24
+
25
+ private
26
+
27
+ def extract_unique_attributes(document)
28
+ @name = document.attributes["label"].to_s
29
+ @attributes = document.xpath("unique.attribute").map do |attribute|
30
+ attribute.attributes["attribute"]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ require "expressir/express/model_element"
2
+
3
+ module Expressir
4
+ module Express
5
+ class WhereRule < ModelElement
6
+ attr_accessor :name, :expression
7
+
8
+ def initialize(options = {})
9
+ @name = nil
10
+ @options = options
11
+ end
12
+
13
+ def parse
14
+ document = @options.fetch(:where, nil)
15
+ extract_where_attributes(document) if document
16
+
17
+ self
18
+ end
19
+
20
+ def self.parse(document)
21
+ new(document: document).parse
22
+ end
23
+
24
+ private
25
+
26
+ def extract_where_attributes(document)
27
+ @name = document.attributes["label"].to_s
28
+ @expression = document.attributes["expression"]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,1450 @@
1
+ require 'expressir/model'
2
+
3
+ module Expressir
4
+ module ExpressExp
5
+ class Formatter
6
+ INDENT_CHAR = ' '
7
+ INDENT_WIDTH = 2
8
+ INDENT = INDENT_CHAR * INDENT_WIDTH
9
+
10
+ OPERATOR_PRECEDENCE = {
11
+ Model::Expressions::BinaryExpression::EXPONENTIATION => 1,
12
+ Model::Expressions::BinaryExpression::MULTIPLICATION => 2,
13
+ Model::Expressions::BinaryExpression::REAL_DIVISION => 2,
14
+ Model::Expressions::BinaryExpression::INTEGER_DIVISION => 2,
15
+ Model::Expressions::BinaryExpression::MODULO => 2,
16
+ Model::Expressions::BinaryExpression::AND => 2,
17
+ Model::Expressions::BinaryExpression::COMBINE => 2,
18
+ Model::Expressions::BinaryExpression::SUBTRACTION => 3,
19
+ Model::Expressions::BinaryExpression::ADDITION => 3,
20
+ Model::Expressions::BinaryExpression::OR => 3,
21
+ Model::Expressions::BinaryExpression::XOR => 3,
22
+ Model::Expressions::BinaryExpression::EQUAL => 4,
23
+ Model::Expressions::BinaryExpression::NOT_EQUAL => 4,
24
+ Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL => 4,
25
+ Model::Expressions::BinaryExpression::GREATER_THAN_OR_EQUAL => 4,
26
+ Model::Expressions::BinaryExpression::LESS_THAN => 4,
27
+ Model::Expressions::BinaryExpression::GREATER_THAN => 4,
28
+ Model::Expressions::BinaryExpression::INSTANCE_EQUAL => 4,
29
+ Model::Expressions::BinaryExpression::INSTANCE_NOT_EQUAL => 4,
30
+ Model::Expressions::BinaryExpression::IN => 4,
31
+ Model::Expressions::BinaryExpression::LIKE => 4,
32
+ Model::Expressions::BinaryExpression::ANDOR => 4,
33
+ }
34
+
35
+ def self.format(node)
36
+ formatter = self.new
37
+ formatter.format(node)
38
+ end
39
+
40
+ def format(node)
41
+ if node.instance_of? Model::Attribute
42
+ format_attribute(node)
43
+ elsif node.instance_of? Model::Constant
44
+ format_constant(node)
45
+ elsif node.instance_of? Model::Entity
46
+ format_entity(node)
47
+ elsif node.instance_of? Model::EnumerationItem
48
+ format_enumeration_item(node)
49
+ elsif node.instance_of? Model::Function
50
+ format_function(node)
51
+ elsif node.instance_of? Model::Interface
52
+ format_interface(node)
53
+ elsif node.instance_of? Model::Parameter
54
+ format_parameter(node)
55
+ elsif node.instance_of? Model::Procedure
56
+ format_procedure(node)
57
+ elsif node.instance_of? Model::RenamedRef
58
+ format_renamed_ref(node)
59
+ elsif node.instance_of? Model::Repository
60
+ format_repository(node)
61
+ elsif node.instance_of? Model::Rule
62
+ format_rule(node)
63
+ elsif node.instance_of? Model::Schema
64
+ format_schema(node)
65
+ elsif node.instance_of? Model::SubtypeConstraint
66
+ format_subtype_constraint(node)
67
+ elsif node.instance_of? Model::Type
68
+ format_type(node)
69
+ elsif node.instance_of? Model::Unique
70
+ format_unique(node)
71
+ elsif node.instance_of? Model::Variable
72
+ format_variable(node)
73
+ elsif node.instance_of? Model::Where
74
+ format_where(node)
75
+ elsif node.instance_of? Model::Expressions::AggregateInitializer
76
+ format_expressions_aggregate_initializer(node)
77
+ elsif node.instance_of? Model::Expressions::AggregateItem
78
+ format_expressions_aggregate_item(node)
79
+ elsif node.instance_of? Model::Expressions::AttributeReference
80
+ format_expressions_attribute_reference(node)
81
+ elsif node.instance_of? Model::Expressions::BinaryExpression
82
+ format_expressions_binary_expression(node)
83
+ elsif node.instance_of? Model::Expressions::Call
84
+ format_expressions_call(node)
85
+ elsif node.instance_of? Model::Expressions::EntityConstructor
86
+ format_expressions_entity_constructor(node)
87
+ elsif node.instance_of? Model::Expressions::GroupReference
88
+ format_expressions_group_reference(node)
89
+ elsif node.instance_of? Model::Expressions::IndexReference
90
+ format_expressions_index_reference(node)
91
+ elsif node.instance_of? Model::Expressions::Interval
92
+ format_expressions_interval(node)
93
+ elsif node.instance_of? Model::Expressions::QueryExpression
94
+ format_expressions_query_expression(node)
95
+ elsif node.instance_of? Model::Expressions::SimpleReference
96
+ format_expressions_simple_reference(node)
97
+ elsif node.instance_of? Model::Expressions::UnaryExpression
98
+ format_expressions_unary_expression(node)
99
+ elsif node.instance_of? Model::Literals::Binary
100
+ format_literals_binary(node)
101
+ elsif node.instance_of? Model::Literals::Integer
102
+ format_literals_integer(node)
103
+ elsif node.instance_of? Model::Literals::Logical
104
+ format_literals_logical(node)
105
+ elsif node.instance_of? Model::Literals::Real
106
+ format_literals_real(node)
107
+ elsif node.instance_of? Model::Literals::String
108
+ format_literals_string(node)
109
+ elsif node.instance_of? Model::Statements::Alias
110
+ format_statements_alias(node)
111
+ elsif node.instance_of? Model::Statements::Assignment
112
+ format_statements_assignment(node)
113
+ elsif node.instance_of? Model::Statements::Call
114
+ format_statements_call(node)
115
+ elsif node.instance_of? Model::Statements::Case
116
+ format_statements_case(node)
117
+ elsif node.instance_of? Model::Statements::CaseAction
118
+ format_statements_case_action(node)
119
+ elsif node.instance_of? Model::Statements::Compound
120
+ format_statements_compound(node)
121
+ elsif node.instance_of? Model::Statements::Escape
122
+ format_statements_escape(node)
123
+ elsif node.instance_of? Model::Statements::If
124
+ format_statements_if(node)
125
+ elsif node.instance_of? Model::Statements::Null
126
+ format_statements_null(node)
127
+ elsif node.instance_of? Model::Statements::Repeat
128
+ format_statements_repeat(node)
129
+ elsif node.instance_of? Model::Statements::Return
130
+ format_statements_return(node)
131
+ elsif node.instance_of? Model::Statements::Skip
132
+ format_statements_skip(node)
133
+ elsif node.instance_of? Model::Types::Aggregate
134
+ format_types_aggregate(node)
135
+ elsif node.instance_of? Model::Types::Array
136
+ format_types_array(node)
137
+ elsif node.instance_of? Model::Types::Bag
138
+ format_types_bag(node)
139
+ elsif node.instance_of? Model::Types::Binary
140
+ format_types_binary(node)
141
+ elsif node.instance_of? Model::Types::Boolean
142
+ format_types_boolean(node)
143
+ elsif node.instance_of? Model::Types::Enumeration
144
+ format_types_enumeration(node)
145
+ elsif node.instance_of? Model::Types::GenericEntity
146
+ format_types_generic_entity(node)
147
+ elsif node.instance_of? Model::Types::Generic
148
+ format_types_generic(node)
149
+ elsif node.instance_of? Model::Types::Integer
150
+ format_types_integer(node)
151
+ elsif node.instance_of? Model::Types::List
152
+ format_types_list(node)
153
+ elsif node.instance_of? Model::Types::Logical
154
+ format_types_logical(node)
155
+ elsif node.instance_of? Model::Types::Number
156
+ format_types_number(node)
157
+ elsif node.instance_of? Model::Types::Real
158
+ format_types_real(node)
159
+ elsif node.instance_of? Model::Types::Select
160
+ format_types_select(node)
161
+ elsif node.instance_of? Model::Types::Set
162
+ format_types_set(node)
163
+ elsif node.instance_of? Model::Types::String
164
+ format_types_string(node)
165
+ else
166
+ puts node.class
167
+ end
168
+ end
169
+
170
+ private
171
+
172
+ def format_attribute(node)
173
+ [
174
+ *if node.supertype_attribute
175
+ [
176
+ format(node.supertype_attribute),
177
+ ' ',
178
+ ].join('')
179
+ end,
180
+ *if node.supertype_attribute and node.id
181
+ [
182
+ 'RENAMED',
183
+ ' '
184
+ ].join('')
185
+ end,
186
+ *if node.id
187
+ [
188
+ node.id,
189
+ ' '
190
+ ].join('')
191
+ end,
192
+ ':',
193
+ *if node.optional
194
+ [
195
+ ' ',
196
+ 'OPTIONAL'
197
+ ].join('')
198
+ end,
199
+ ' ',
200
+ format(node.type),
201
+ *if node.kind == Model::Attribute::DERIVED
202
+ [
203
+ ' ',
204
+ ':=',
205
+ ' ',
206
+ format(node.expression)
207
+ ].join('')
208
+ elsif node.kind == Model::Attribute::INVERSE
209
+ [
210
+ ' ',
211
+ 'FOR',
212
+ ' ',
213
+ format(node.expression)
214
+ ].join('')
215
+ end,
216
+ ';',
217
+ ].join('')
218
+ end
219
+
220
+ def format_constant(node)
221
+ [
222
+ node.id,
223
+ ' ',
224
+ ':',
225
+ ' ',
226
+ format(node.type),
227
+ ' ',
228
+ ':=',
229
+ ' ',
230
+ format(node.expression),
231
+ ';'
232
+ ].join('')
233
+ end
234
+
235
+ def format_entity(node)
236
+ [
237
+ [
238
+ 'ENTITY',
239
+ ' ',
240
+ node.id,
241
+ *if node.abstract and !node.supertype_expression
242
+ [
243
+ "\n",
244
+ INDENT,
245
+ 'ABSTRACT',
246
+ ' ',
247
+ 'SUPERTYPE'
248
+ ].join('')
249
+ end,
250
+ *if node.abstract and node.supertype_expression
251
+ [
252
+ "\n",
253
+ INDENT,
254
+ 'ABSTRACT',
255
+ ' ',
256
+ 'SUPERTYPE',
257
+ ' ',
258
+ 'OF',
259
+ ' ',
260
+ '(',
261
+ format(node.supertype_expression),
262
+ ')'
263
+ ].join('')
264
+ end,
265
+ *if !node.abstract and node.supertype_expression
266
+ [
267
+ "\n",
268
+ INDENT,
269
+ 'SUPERTYPE',
270
+ ' ',
271
+ 'OF',
272
+ ' ',
273
+ '(',
274
+ format(node.supertype_expression),
275
+ ')'
276
+ ].join('')
277
+ end,
278
+ *if node.subtype_of and node.subtype_of.length > 0
279
+ [
280
+ "\n",
281
+ INDENT,
282
+ 'SUBTYPE',
283
+ ' ',
284
+ 'OF',
285
+ ' ',
286
+ '(',
287
+ node.subtype_of.map{|x| format(x)}.join(', '),
288
+ ')'
289
+ ].join('')
290
+ end,
291
+ ';'
292
+ ].join(''),
293
+ *if node.explicit_attributes and node.explicit_attributes.length > 0
294
+ indent(node.explicit_attributes.map{|x| format(x)}.join("\n"))
295
+ end,
296
+ *if node.derived_attributes and node.derived_attributes.length > 0
297
+ indent([
298
+ 'DERIVE',
299
+ indent(node.derived_attributes.map{|x| format(x)}.join("\n")),
300
+ ].join("\n"))
301
+ end,
302
+ *if node.inverse_attributes and node.inverse_attributes.length > 0
303
+ indent([
304
+ 'INVERSE',
305
+ indent(node.inverse_attributes.map{|x| format(x)}.join("\n")),
306
+ ].join("\n"))
307
+ end,
308
+ *if node.unique and node.unique.length > 0
309
+ indent([
310
+ 'UNIQUE',
311
+ indent(node.unique.map{|x| format(x)}.join("\n"))
312
+ ].join("\n"))
313
+ end,
314
+ *if node.where and node.where.length > 0
315
+ indent([
316
+ 'WHERE',
317
+ indent(node.where.map{|x| format(x)}.join("\n")),
318
+ ].join("\n"))
319
+ end,
320
+ [
321
+ 'END_ENTITY',
322
+ ';'
323
+ ].join('')
324
+ ].join("\n")
325
+ end
326
+
327
+ def format_enumeration_item(node)
328
+ node.id
329
+ end
330
+
331
+ def format_function(node)
332
+ [
333
+ [
334
+ 'FUNCTION',
335
+ ' ',
336
+ node.id,
337
+ *if node.parameters and node.parameters.length > 0
338
+ [
339
+ '(',
340
+ node.parameters.map{|x| format(x)}.join('; '),
341
+ ')'
342
+ ].join('')
343
+ end,
344
+ ' ',
345
+ ':',
346
+ ' ',
347
+ format(node.return_type),
348
+ ';'
349
+ ].join(''),
350
+ *if node.declarations and node.declarations.length > 0
351
+ indent(node.declarations.map{|x| format(x)}.join("\n"))
352
+ end,
353
+ *if node.constants and node.constants.length > 0
354
+ indent([
355
+ 'CONSTANT',
356
+ indent(node.constants.map{|x| format(x)}.join("\n")),
357
+ [
358
+ 'END_CONSTANT',
359
+ ';'
360
+ ].join('')
361
+ ].join("\n"))
362
+ end,
363
+ *if node.variables and node.variables.length > 0
364
+ indent([
365
+ 'LOCAL',
366
+ indent(node.variables.map{|x| format(x)}.join("\n")),
367
+ [
368
+ 'END_LOCAL',
369
+ ';'
370
+ ].join('')
371
+ ].join("\n"))
372
+ end,
373
+ *if node.statements and node.statements.length > 0
374
+ indent(node.statements.map{|x| format(x)}.join("\n"))
375
+ end,
376
+ [
377
+ 'END_FUNCTION',
378
+ ';'
379
+ ].join('')
380
+ ].join("\n")
381
+ end
382
+
383
+ def format_interface(node)
384
+ [
385
+ case node.kind
386
+ when Model::Interface::USE then 'USE'
387
+ when Model::Interface::REFERENCE then 'REFERENCE'
388
+ end,
389
+ ' ',
390
+ 'FROM',
391
+ ' ',
392
+ format(node.schema),
393
+ *if node.items and node.items.length > 0
394
+ [
395
+ "\n",
396
+ INDENT,
397
+ '(',
398
+ node.items.map{|x| format(x)},
399
+ ')'
400
+ ].join('')
401
+ end,
402
+ ';',
403
+ ].join('')
404
+ end
405
+
406
+ def format_parameter(node)
407
+ [
408
+ *if node.var
409
+ [
410
+ 'VAR',
411
+ ' '
412
+ ].join('')
413
+ end,
414
+ node.id,
415
+ ' ',
416
+ ':',
417
+ ' ',
418
+ format(node.type)
419
+ ].join('')
420
+ end
421
+
422
+ def format_procedure(node)
423
+ [
424
+ [
425
+ 'PROCEDURE',
426
+ ' ',
427
+ node.id,
428
+ *if node.parameters and node.parameters.length > 0
429
+ [
430
+ '(',
431
+ node.parameters.map{|x| format(x)}.join('; '),
432
+ ')'
433
+ ].join('')
434
+ end,
435
+ ';'
436
+ ].join(''),
437
+ *if node.declarations and node.declarations.length > 0
438
+ indent(node.declarations.map{|x| format(x)}.join("\n"))
439
+ end,
440
+ *if node.constants and node.constants.length > 0
441
+ indent([
442
+ 'CONSTANT',
443
+ indent(node.constants.map{|x| format(x)}.join("\n")),
444
+ [
445
+ 'END_CONSTANT',
446
+ ';'
447
+ ].join('')
448
+ ].join("\n"))
449
+ end,
450
+ *if node.variables and node.variables.length > 0
451
+ indent([
452
+ 'LOCAL',
453
+ indent(node.variables.map{|x| format(x)}.join("\n")),
454
+ [
455
+ 'END_LOCAL',
456
+ ';'
457
+ ].join('')
458
+ ].join("\n"))
459
+ end,
460
+ *if node.statements and node.statements.length > 0
461
+ indent(node.statements.map{|x| format(x)}.join("\n"))
462
+ end,
463
+ [
464
+ 'END_PROCEDURE',
465
+ ';'
466
+ ].join('')
467
+ ].join("\n")
468
+ end
469
+
470
+ def format_renamed_ref(node)
471
+ [
472
+ format(node.ref),
473
+ ' ',
474
+ 'AS',
475
+ ' ',
476
+ node.id
477
+ ].join('')
478
+ end
479
+
480
+ def format_repository(node)
481
+ [
482
+ *if node.schemas and node.schemas.length > 0
483
+ node.schemas.map{|node| format(node)}
484
+ end,
485
+ *format_scope_remarks(node)
486
+ ].join("\n")
487
+ end
488
+
489
+ def format_rule(node)
490
+ [
491
+ [
492
+ 'RULE',
493
+ ' ',
494
+ node.id,
495
+ ' ',
496
+ 'FOR',
497
+ ' ',
498
+ '(',
499
+ node.applies_to.map{|x| format(x)}.join(', '),
500
+ ')',
501
+ ';'
502
+ ].join(''),
503
+ *if node.declarations and node.declarations.length > 0
504
+ indent(node.declarations.map{|x| format(x)}.join("\n"))
505
+ end,
506
+ *if node.constants and node.constants.length > 0
507
+ indent([
508
+ 'CONSTANT',
509
+ indent(node.constants.map{|x| format(x)}.join("\n")),
510
+ [
511
+ 'END_CONSTANT',
512
+ ';'
513
+ ].join('')
514
+ ].join("\n"))
515
+ end,
516
+ *if node.variables and node.variables.length > 0
517
+ indent([
518
+ 'LOCAL',
519
+ indent(node.variables.map{|x| format(x)}.join("\n")),
520
+ [
521
+ 'END_LOCAL',
522
+ ';'
523
+ ].join('')
524
+ ].join("\n"))
525
+ end,
526
+ *if node.statements and node.statements.length > 0
527
+ indent(node.statements.map{|x| format(x)}.join("\n"))
528
+ end,
529
+ *if node.where and node.where.length > 0
530
+ indent([
531
+ 'WHERE',
532
+ indent(node.where.map{|x| format(x)}.join("\n"))
533
+ ].join("\n"))
534
+ end,
535
+ [
536
+ 'END_RULE',
537
+ ';'
538
+ ].join('')
539
+ ].join("\n")
540
+ end
541
+
542
+ def format_schema(node)
543
+ [
544
+ [
545
+ 'SCHEMA',
546
+ ' ',
547
+ node.id,
548
+ *if node.version
549
+ [
550
+ ' ',
551
+ format(node.version),
552
+ ].join('')
553
+ end,
554
+ ';'
555
+ ].join(''),
556
+ *if node.interfaces and node.interfaces.length > 0
557
+ node.interfaces.map{|x| format(x)}.join("\n")
558
+ end,
559
+ *if node.constants and node.constants.length > 0
560
+ [
561
+ 'CONSTANT',
562
+ indent(node.constants.map{|x| format(x)}.join("\n")),
563
+ [
564
+ 'END_CONSTANT',
565
+ ';'
566
+ ].join('')
567
+ ].join("\n")
568
+ end,
569
+ *if node.declarations and node.declarations.length > 0
570
+ node.declarations.map{|x| format(x)}.join("\n\n")
571
+ end,
572
+ [
573
+ 'END_SCHEMA',
574
+ ';'
575
+ ].join('')
576
+ ].join("\n")
577
+ end
578
+
579
+ def format_subtype_constraint(node)
580
+ [
581
+ [
582
+ 'SUBTYPE_CONSTRAINT',
583
+ ' ',
584
+ node.id,
585
+ ' ',
586
+ 'FOR',
587
+ ' ',
588
+ format(node.applies_to),
589
+ ';'
590
+ ].join(''),
591
+ *if node.abstract
592
+ indent([
593
+ 'ABSTRACT',
594
+ ' ',
595
+ 'SUPERTYPE',
596
+ ';'
597
+ ].join(''))
598
+ end,
599
+ *if node.total_over and node.total_over.length > 0
600
+ indent([
601
+ 'TOTAL_OVER',
602
+ '(',
603
+ node.total_over.map{|x| format(x)}.join(', '),
604
+ ')',
605
+ ';'
606
+ ].join(''))
607
+ end,
608
+ *if node.supertype_expression
609
+ indent([
610
+ format(node.supertype_expression),
611
+ ';'
612
+ ].join(''))
613
+ end,
614
+ [
615
+ 'END_SUBTYPE_CONSTRAINT',
616
+ ';'
617
+ ].join('')
618
+ ].join("\n")
619
+ end
620
+
621
+ def format_type(node)
622
+ [
623
+ [
624
+ 'TYPE',
625
+ ' ',
626
+ node.id,
627
+ ' ',
628
+ '=',
629
+ ' ',
630
+ format(node.type),
631
+ ';',
632
+ ].join(''),
633
+ *if node.where and node.where.length > 0
634
+ indent([
635
+ 'WHERE',
636
+ indent(node.where.map{|x| format(x)}.join("\n"))
637
+ ].join("\n"))
638
+ end,
639
+ [
640
+ 'END_TYPE',
641
+ ';'
642
+ ].join('')
643
+ ].join("\n")
644
+ end
645
+
646
+ def format_unique(node)
647
+ [
648
+ *if node.id
649
+ [
650
+ node.id,
651
+ ' ',
652
+ ':',
653
+ ' '
654
+ ].join('')
655
+ end,
656
+ node.attributes.map{|x| format(x)}.join(', '),
657
+ ';'
658
+ ].join('')
659
+ end
660
+
661
+ def format_variable(node)
662
+ [
663
+ node.id,
664
+ ' ',
665
+ ':',
666
+ ' ',
667
+ format(node.type),
668
+ *if node.expression
669
+ [
670
+ ' ',
671
+ ':=',
672
+ ' ',
673
+ format(node.expression),
674
+ ].join('')
675
+ end,
676
+ ';'
677
+ ].join('')
678
+ end
679
+
680
+ def format_where(node)
681
+ [
682
+ *if node.id
683
+ [
684
+ node.id,
685
+ ' ',
686
+ ':',
687
+ ' '
688
+ ].join('')
689
+ end,
690
+ format(node.expression),
691
+ ';'
692
+ ].join('')
693
+ end
694
+
695
+ def format_expressions_aggregate_initializer(node)
696
+ [
697
+ '[',
698
+ node.items.map{|x| format(x)}.join(', '),
699
+ ']'
700
+ ].join('')
701
+ end
702
+
703
+ def format_expressions_aggregate_item(node)
704
+ [
705
+ format(node.expression),
706
+ ':',
707
+ format(node.repetition)
708
+ ].join('')
709
+ end
710
+
711
+ def format_expressions_attribute_reference(node)
712
+ [
713
+ format(node.ref),
714
+ '.',
715
+ format(node.attribute)
716
+ ].join('')
717
+ end
718
+
719
+ def format_expressions_binary_expression(node)
720
+ [
721
+ *if node.operand1.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
722
+ '('
723
+ end,
724
+ format(node.operand1),
725
+ *if node.operand1.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
726
+ ')'
727
+ end,
728
+ ' ',
729
+ case node.operator
730
+ when Model::Expressions::BinaryExpression::ADDITION then '+'
731
+ when Model::Expressions::BinaryExpression::AND then 'AND'
732
+ when Model::Expressions::BinaryExpression::ANDOR then 'ANDOR'
733
+ when Model::Expressions::BinaryExpression::COMBINE then '||'
734
+ when Model::Expressions::BinaryExpression::EQUAL then '='
735
+ when Model::Expressions::BinaryExpression::EXPONENTIATION then '**'
736
+ when Model::Expressions::BinaryExpression::GREATER_THAN then '>'
737
+ when Model::Expressions::BinaryExpression::GREATER_THAN_OR_EQUAL then '>='
738
+ when Model::Expressions::BinaryExpression::IN then 'IN'
739
+ when Model::Expressions::BinaryExpression::INSTANCE_EQUAL then ':=:'
740
+ when Model::Expressions::BinaryExpression::INSTANCE_NOT_EQUAL then ':<>:'
741
+ when Model::Expressions::BinaryExpression::INTEGER_DIVISION then 'DIV'
742
+ when Model::Expressions::BinaryExpression::LESS_THAN then '<'
743
+ when Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL then '<='
744
+ when Model::Expressions::BinaryExpression::LIKE then 'LIKE'
745
+ when Model::Expressions::BinaryExpression::MODULO then 'MOD'
746
+ when Model::Expressions::BinaryExpression::MULTIPLICATION then '*'
747
+ when Model::Expressions::BinaryExpression::NOT_EQUAL then '<>'
748
+ when Model::Expressions::BinaryExpression::OR then 'OR'
749
+ when Model::Expressions::BinaryExpression::REAL_DIVISION then '/'
750
+ when Model::Expressions::BinaryExpression::SUBTRACTION then '-'
751
+ when Model::Expressions::BinaryExpression::XOR then 'XOR'
752
+ end,
753
+ ' ',
754
+ *if node.operand2.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
755
+ '('
756
+ end,
757
+ format(node.operand2),
758
+ *if node.operand2.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
759
+ ')'
760
+ end,
761
+ ].join('')
762
+ end
763
+
764
+ def format_expressions_call(node)
765
+ [
766
+ format(node.ref),
767
+ '(',
768
+ node.parameters.map{|x| format(x)}.join(', '),
769
+ ')'
770
+ ].join('')
771
+ end
772
+
773
+ def format_expressions_entity_constructor(node)
774
+ [
775
+ format(node.entity),
776
+ '(',
777
+ node.parameters.map{|x| format(x)}.join(', '),
778
+ ')'
779
+ ].join('')
780
+ end
781
+
782
+ def format_expressions_group_reference(node)
783
+ [
784
+ format(node.ref),
785
+ '\\',
786
+ format(node.entity)
787
+ ].join('')
788
+ end
789
+
790
+ def format_expressions_index_reference(node)
791
+ [
792
+ format(node.ref),
793
+ '[',
794
+ format(node.index1),
795
+ *if node.index2
796
+ [
797
+ ':',
798
+ format(node.index2)
799
+ ].join('')
800
+ end,
801
+ ']'
802
+ ].join('')
803
+ end
804
+
805
+ def format_expressions_interval(node)
806
+ [
807
+ '{',
808
+ format(node.low),
809
+ ' ',
810
+ case node.operator1
811
+ when Model::Expressions::BinaryExpression::LESS_THAN then '<'
812
+ when Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL then '<='
813
+ end,
814
+ ' ',
815
+ format(node.item),
816
+ ' ',
817
+ case node.operator2
818
+ when Model::Expressions::BinaryExpression::LESS_THAN then '<'
819
+ when Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL then '<='
820
+ end,
821
+ ' ',
822
+ format(node.high),
823
+ '}'
824
+ ].join('')
825
+ end
826
+
827
+ def format_expressions_query_expression(node)
828
+ [
829
+ 'QUERY',
830
+ '(',
831
+ node.id,
832
+ ' ',
833
+ '<*',
834
+ ' ',
835
+ format(node.source),
836
+ ' ',
837
+ '|',
838
+ ' ',
839
+ format(node.expression),
840
+ *format_remarks(node).instance_eval{|x| x.length > 0 ? ["\n", *x, "\n"] : x},
841
+ ')'
842
+ ].join('')
843
+ end
844
+
845
+ def format_expressions_simple_reference(node)
846
+ node.id
847
+ end
848
+
849
+ def format_expressions_unary_expression(node)
850
+ [
851
+ case node.operator
852
+ when Model::Expressions::UnaryExpression::MINUS then '-'
853
+ when Model::Expressions::UnaryExpression::NOT then 'NOT'
854
+ when Model::Expressions::UnaryExpression::PLUS then '+'
855
+ end,
856
+ if node.operator == Model::Expressions::UnaryExpression::NOT
857
+ ' '
858
+ end,
859
+ *if node.operand.instance_of? Model::Expressions::BinaryExpression
860
+ '('
861
+ end,
862
+ format(node.operand),
863
+ *if node.operand.instance_of? Model::Expressions::BinaryExpression
864
+ ')'
865
+ end
866
+ ].join('')
867
+ end
868
+
869
+ def format_literals_binary(node)
870
+ [
871
+ '%',
872
+ node.value
873
+ ].join('')
874
+ end
875
+
876
+ def format_literals_integer(node)
877
+ node.value
878
+ end
879
+
880
+ def format_literals_logical(node)
881
+ case node.value
882
+ when Model::Literals::Logical::TRUE then 'TRUE'
883
+ when Model::Literals::Logical::FALSE then 'FALSE'
884
+ when Model::Literals::Logical::UNKNOWN then 'UNKNOWN'
885
+ end
886
+ end
887
+
888
+ def format_literals_real(node)
889
+ node.value
890
+ end
891
+
892
+ def format_literals_string(node)
893
+ if node.encoded
894
+ [
895
+ "\"",
896
+ node.value,
897
+ "\""
898
+ ].join('')
899
+ else
900
+ [
901
+ "'",
902
+ node.value,
903
+ "'"
904
+ ].join('')
905
+ end
906
+ end
907
+
908
+ def format_statements_alias(node)
909
+ [
910
+ [
911
+ 'ALIAS',
912
+ ' ',
913
+ node.id,
914
+ ' ',
915
+ 'FOR',
916
+ ' ',
917
+ format(node.expression),
918
+ ';'
919
+ ].join(''),
920
+ *if node.statements and node.statements.length > 0
921
+ indent(node.statements.map{|x| format(x)}.join("\n"))
922
+ end,
923
+ *format_remarks(node),
924
+ [
925
+ 'END_ALIAS',
926
+ ';'
927
+ ].join('')
928
+ ].join("\n")
929
+ end
930
+
931
+ def format_statements_assignment(node)
932
+ [
933
+ format(node.ref),
934
+ ' ',
935
+ ':=',
936
+ ' ',
937
+ format(node.expression),
938
+ ';'
939
+ ].join('')
940
+ end
941
+
942
+ def format_statements_call(node)
943
+ [
944
+ format(node.ref),
945
+ *if node.parameters and node.parameters.length > 0
946
+ [
947
+ '(',
948
+ node.parameters.map{|x| format(x)}.join(', '),
949
+ ')'
950
+ ].join('')
951
+ end,
952
+ ';'
953
+ ].join('')
954
+ end
955
+
956
+ def format_statements_case(node)
957
+ [
958
+ [
959
+ 'CASE',
960
+ ' ',
961
+ format(node.expression),
962
+ ' ',
963
+ 'OF'
964
+ ].join(''),
965
+ *if node.actions and node.actions.length > 0
966
+ node.actions.map{|x| format(x)}
967
+ end,
968
+ *if node.otherwise_statement
969
+ [
970
+ [
971
+ 'OTHERWISE',
972
+ ' ',
973
+ ':'
974
+ ].join(''),
975
+ indent(format(node.otherwise_statement))
976
+ ]
977
+ end,
978
+ [
979
+ 'END_CASE',
980
+ ';'
981
+ ].join('')
982
+ ].join("\n")
983
+ end
984
+
985
+ def format_statements_case_action(node)
986
+ [
987
+ [
988
+ node.labels.map{|x| format(x)}.join(', '),
989
+ ' ',
990
+ ':'
991
+ ].join(''),
992
+ indent(format(node.statement))
993
+ ].join("\n")
994
+ end
995
+
996
+ def format_statements_compound(node)
997
+ [
998
+ 'BEGIN',
999
+ *if node.statements and node.statements.length > 0
1000
+ indent(node.statements.map{|x| format(x)}.join("\n"))
1001
+ end,
1002
+ [
1003
+ 'END',
1004
+ ';'
1005
+ ].join('')
1006
+ ].join("\n")
1007
+ end
1008
+
1009
+ def format_statements_escape(node)
1010
+ [
1011
+ 'ESCAPE',
1012
+ ';'
1013
+ ].join('')
1014
+ end
1015
+
1016
+ def format_statements_if(node)
1017
+ [
1018
+ [
1019
+ 'IF',
1020
+ ' ',
1021
+ format(node.expression),
1022
+ ' ',
1023
+ 'THEN'
1024
+ ].join(''),
1025
+ *if node.statements and node.statements.length > 0
1026
+ indent(node.statements.map{|x| format(x)}.join("\n"))
1027
+ end,
1028
+ *if node.else_statements and node.else_statements.length > 0
1029
+ [
1030
+ 'ELSE',
1031
+ indent(node.else_statements.map{|x| format(x)}.join("\n")),
1032
+ ].join("\n")
1033
+ end,
1034
+ [
1035
+ 'END_IF',
1036
+ ';'
1037
+ ].join('')
1038
+ ].join("\n")
1039
+ end
1040
+
1041
+ def format_statements_null(node)
1042
+ ';'
1043
+ end
1044
+
1045
+ def format_statements_repeat(node)
1046
+ [
1047
+ [
1048
+ 'REPEAT',
1049
+ *if node.id
1050
+ [
1051
+ ' ',
1052
+ node.id,
1053
+ ' ',
1054
+ ':=',
1055
+ ' ',
1056
+ format(node.bound1),
1057
+ ' ',
1058
+ 'TO',
1059
+ ' ',
1060
+ format(node.bound2),
1061
+ *if node.increment
1062
+ [
1063
+ ' ',
1064
+ 'BY',
1065
+ ' ',
1066
+ format(node.increment)
1067
+ ].join('')
1068
+ end
1069
+ ].join('')
1070
+ end,
1071
+ *if node.while_expression
1072
+ [
1073
+ ' ',
1074
+ 'WHILE',
1075
+ ' ',
1076
+ format(node.while_expression)
1077
+ ].join('')
1078
+ end,
1079
+ *if node.until_expression
1080
+ [
1081
+ ' ',
1082
+ 'UNTIL',
1083
+ ' ',
1084
+ format(node.until_expression)
1085
+ ].join('')
1086
+ end,
1087
+ ';'
1088
+ ].join(''),
1089
+ *if node.statements and node.statements.length > 0
1090
+ indent(node.statements.map{|x| format(x)}.join("\n"))
1091
+ end,
1092
+ *format_remarks(node),
1093
+ [
1094
+ 'END_REPEAT',
1095
+ ';'
1096
+ ].join('')
1097
+ ].join("\n")
1098
+ end
1099
+
1100
+ def format_statements_return(node)
1101
+ [
1102
+ 'RETURN',
1103
+ *if node.expression
1104
+ [
1105
+ ' ',
1106
+ '(',
1107
+ format(node.expression),
1108
+ ')'
1109
+ ].join('')
1110
+ end,
1111
+ ';'
1112
+ ].join('')
1113
+ end
1114
+
1115
+ def format_statements_skip(node)
1116
+ [
1117
+ 'SKIP',
1118
+ ';'
1119
+ ].join('')
1120
+ end
1121
+
1122
+ def format_types_aggregate(node)
1123
+ 'AGGREGATE'
1124
+ end
1125
+
1126
+ def format_types_array(node)
1127
+ [
1128
+ 'ARRAY',
1129
+ *if node.bound1 and node.bound2
1130
+ [
1131
+ ' ',
1132
+ '[',
1133
+ format(node.bound1),
1134
+ ':',
1135
+ format(node.bound2),
1136
+ ']',
1137
+ ].join('')
1138
+ end,
1139
+ ' ',
1140
+ 'OF',
1141
+ *if node.optional
1142
+ [
1143
+ ' ',
1144
+ 'OPTIONAL'
1145
+ ].join('')
1146
+ end,
1147
+ *if node.unique
1148
+ [
1149
+ ' ',
1150
+ 'UNIQUE'
1151
+ ].join('')
1152
+ end,
1153
+ ' ',
1154
+ format(node.base_type)
1155
+ ].join('')
1156
+ end
1157
+
1158
+ def format_types_bag(node)
1159
+ [
1160
+ 'BAG',
1161
+ *if node.bound1 and node.bound2
1162
+ [
1163
+ ' ',
1164
+ '[',
1165
+ format(node.bound1),
1166
+ ':',
1167
+ format(node.bound2),
1168
+ ']',
1169
+ ].join('')
1170
+ end,
1171
+ ' ',
1172
+ 'OF',
1173
+ ' ',
1174
+ format(node.base_type)
1175
+ ].join('')
1176
+ end
1177
+
1178
+ def format_types_binary(node)
1179
+ [
1180
+ 'BINARY',
1181
+ *if node.width
1182
+ [
1183
+ ' ',
1184
+ '(',
1185
+ format(node.width),
1186
+ ')'
1187
+ ].join('')
1188
+ end,
1189
+ *if node.fixed
1190
+ [
1191
+ ' ',
1192
+ 'FIXED'
1193
+ ].join('')
1194
+ end
1195
+ ].join('')
1196
+ end
1197
+
1198
+ def format_types_boolean(node)
1199
+ 'BOOLEAN'
1200
+ end
1201
+
1202
+ def format_types_enumeration(node)
1203
+ [
1204
+ *if node.extensible
1205
+ [
1206
+ 'EXTENSIBLE',
1207
+ ' '
1208
+ ].join('')
1209
+ end,
1210
+ 'ENUMERATION',
1211
+ *if node.items and node.items.length > 0
1212
+ [
1213
+ ' ',
1214
+ 'OF',
1215
+ ' ',
1216
+ '(',
1217
+ node.items.map{|x| format(x)}.join(', '),
1218
+ ')'
1219
+ ].join('')
1220
+ end,
1221
+ *if node.extension_type
1222
+ [
1223
+ ' ',
1224
+ 'BASED_ON',
1225
+ ' ',
1226
+ format(node.extension_type)
1227
+ ].join('')
1228
+ end,
1229
+ *if node.extension_items
1230
+ [
1231
+ ' ',
1232
+ 'WITH',
1233
+ ' ',
1234
+ '(',
1235
+ node.extension_items.map{|x| format(x)}.join(', '),
1236
+ ')'
1237
+ ].join('')
1238
+ end
1239
+ ].join('')
1240
+ end
1241
+
1242
+ def format_types_generic_entity(node)
1243
+ 'GENERIC_ENTITY'
1244
+ end
1245
+
1246
+ def format_types_generic(node)
1247
+ 'GENERIC'
1248
+ end
1249
+
1250
+ def format_types_integer(node)
1251
+ 'INTEGER'
1252
+ end
1253
+
1254
+ def format_types_list(node)
1255
+ [
1256
+ 'LIST',
1257
+ *if node.bound1 and node.bound2
1258
+ [
1259
+ ' ',
1260
+ '[',
1261
+ format(node.bound1),
1262
+ ':',
1263
+ format(node.bound2),
1264
+ ']',
1265
+ ].join('')
1266
+ end,
1267
+ ' ',
1268
+ 'OF',
1269
+ *if node.unique
1270
+ [
1271
+ ' ',
1272
+ 'UNIQUE'
1273
+ ].join('')
1274
+ end,
1275
+ ' ',
1276
+ format(node.base_type)
1277
+ ].join('')
1278
+ end
1279
+
1280
+ def format_types_logical(node)
1281
+ 'LOGICAL'
1282
+ end
1283
+
1284
+ def format_types_number(node)
1285
+ 'NUMBER'
1286
+ end
1287
+
1288
+ def format_types_real(node)
1289
+ [
1290
+ 'REAL',
1291
+ *if node.precision
1292
+ [
1293
+ ' ',
1294
+ '(',
1295
+ format(node.precision),
1296
+ ')'
1297
+ ].join('')
1298
+ end
1299
+ ].join('')
1300
+ end
1301
+
1302
+ def format_types_select(node)
1303
+ [
1304
+ *if node.extensible
1305
+ [
1306
+ 'EXTENSIBLE',
1307
+ ' '
1308
+ ].join('')
1309
+ end,
1310
+ *if node.generic_entity
1311
+ [
1312
+ 'GENERIC_ENTITY',
1313
+ ' '
1314
+ ].join('')
1315
+ end,
1316
+ 'SELECT',
1317
+ *if node.items and node.items.length > 0
1318
+ [
1319
+ ' ',
1320
+ '(',
1321
+ node.items.map{|x| format(x)}.join(', '),
1322
+ ')'
1323
+ ].join('')
1324
+ end,
1325
+ *if node.extension_type
1326
+ [
1327
+ ' ',
1328
+ 'BASED_ON',
1329
+ ' ',
1330
+ format(node.extension_type)
1331
+ ].join('')
1332
+ end,
1333
+ *if node.extension_items
1334
+ [
1335
+ ' ',
1336
+ 'WITH',
1337
+ ' ',
1338
+ '(',
1339
+ node.extension_items.map{|x| format(x)}.join(', '),
1340
+ ')'
1341
+ ].join('')
1342
+ end
1343
+ ].join('')
1344
+ end
1345
+
1346
+ def format_types_set(node)
1347
+ [
1348
+ 'SET',
1349
+ *if node.bound1 and node.bound2
1350
+ [
1351
+ ' ',
1352
+ '[',
1353
+ format(node.bound1),
1354
+ ':',
1355
+ format(node.bound2),
1356
+ ']',
1357
+ ].join('')
1358
+ end,
1359
+ ' ',
1360
+ 'OF',
1361
+ ' ',
1362
+ format(node.base_type)
1363
+ ].join('')
1364
+ end
1365
+
1366
+ def format_types_string(node)
1367
+ [
1368
+ 'STRING',
1369
+ *if node.width
1370
+ [
1371
+ ' ',
1372
+ '(',
1373
+ format(node.width),
1374
+ ')'
1375
+ ].join('')
1376
+ end,
1377
+ *if node.fixed
1378
+ [
1379
+ ' ',
1380
+ 'FIXED'
1381
+ ].join('')
1382
+ end
1383
+ ].join('')
1384
+ end
1385
+
1386
+ def indent(str)
1387
+ str.split("\n").map{|x| "#{INDENT}#{x}"}.join("\n")
1388
+ end
1389
+
1390
+ def format_remark_ref(node)
1391
+ [
1392
+ *if node.class.method_defined? :parent and node.parent.class.method_defined? :id and node.parent != node
1393
+ [
1394
+ format_remark_ref(node.parent),
1395
+ '.'
1396
+ ].join('')
1397
+ end,
1398
+ node.id,
1399
+ ].join('')
1400
+ end
1401
+
1402
+ def format_remark(node, remark)
1403
+ if remark.include?("\n")
1404
+ [
1405
+ [
1406
+ '(*',
1407
+ '"',
1408
+ format_remark_ref(node),
1409
+ '"',
1410
+ ].join(''),
1411
+ remark,
1412
+ '*)'
1413
+ ].join("\n")
1414
+ else
1415
+ [
1416
+ '--',
1417
+ '"',
1418
+ format_remark_ref(node),
1419
+ '"',
1420
+ ' ',
1421
+ remark
1422
+ ].join('')
1423
+ end
1424
+ end
1425
+
1426
+ def format_remarks(node)
1427
+ if node.class.method_defined? :remarks and node.remarks and node.remarks.length > 0
1428
+ node.remarks.map do |remark|
1429
+ format_remark(node, remark)
1430
+ end
1431
+ else
1432
+ []
1433
+ end
1434
+ end
1435
+
1436
+ def format_scope_remarks(node)
1437
+ [
1438
+ *format_remarks(node),
1439
+ *if node.class.method_defined? :children
1440
+ node.children.flat_map do |x|
1441
+ if x != node
1442
+ format_scope_remarks(x)
1443
+ end
1444
+ end
1445
+ end
1446
+ ]
1447
+ end
1448
+ end
1449
+ end
1450
+ end