expressir 1.4.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql.yml +2 -14
  3. data/.github/workflows/rake.yml +6 -364
  4. data/.github/workflows/release.yml +15 -178
  5. data/.github/workflows/stress.yml +1 -18
  6. data/.rubocop.yml +1 -0
  7. data/.rubocop_todo.yml +7 -0
  8. data/Gemfile +13 -0
  9. data/README.adoc +6 -19
  10. data/Rakefile +6 -7
  11. data/expressir.gemspec +23 -32
  12. data/expressir_wrapped.txt +23068 -0
  13. data/lib/expressir/cli.rb +3 -2
  14. data/lib/expressir/express/formatter.rb +661 -661
  15. data/lib/expressir/express/parser.rb +299 -33
  16. data/lib/expressir/express/visitor.rb +238 -133
  17. data/lib/expressir/model/declarations/interface_item.rb +1 -1
  18. data/lib/expressir/version.rb +1 -1
  19. metadata +15 -573
  20. data/.cross_rubies +0 -28
  21. data/.gitmodules +0 -6
  22. data/.yardopts +0 -11
  23. data/exe/generate-parser +0 -51
  24. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +0 -191
  25. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +0 -652
  26. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -948
  27. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2022.vcxproj +0 -652
  28. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2022.vcxproj.filters +0 -948
  29. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp-ios/Info.plist +0 -26
  30. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp-ios/antlrcpp_ios.h +0 -17
  31. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +0 -3040
  32. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  33. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  34. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +0 -76
  35. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +0 -76
  36. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +0 -76
  37. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.noarch.nuspec +0 -23
  38. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.noarch.targets +0 -8
  39. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.shared.nuspec +0 -30
  40. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.shared.props +0 -21
  41. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.shared.targets +0 -44
  42. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.static.nuspec +0 -29
  43. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/ANTLR4.Runtime.cpp.static.targets +0 -44
  44. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/antlr4.jpg +0 -0
  45. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/nuget/pack.cmd +0 -93
  46. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +0 -10
  47. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.h +0 -167
  48. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +0 -10
  49. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +0 -121
  50. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -23
  51. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +0 -30
  52. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +0 -180
  53. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +0 -79
  54. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +0 -61
  55. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.h +0 -59
  56. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.cpp +0 -25
  57. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.h +0 -36
  58. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +0 -414
  59. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.h +0 -200
  60. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.cpp +0 -11
  61. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.h +0 -37
  62. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +0 -193
  63. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.h +0 -158
  64. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +0 -39
  65. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +0 -74
  66. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.cpp +0 -78
  67. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.h +0 -79
  68. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +0 -15
  69. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.h +0 -35
  70. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +0 -336
  71. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +0 -466
  72. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +0 -84
  73. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +0 -80
  74. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +0 -64
  75. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +0 -99
  76. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +0 -52
  77. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +0 -32
  78. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/FlatHashMap.h +0 -57
  79. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/FlatHashSet.h +0 -57
  80. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.cpp +0 -18
  81. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.h +0 -24
  82. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.cpp +0 -12
  83. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -218
  84. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +0 -19
  85. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.h +0 -45
  86. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -294
  87. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -196
  88. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -60
  89. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +0 -46
  90. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +0 -36
  91. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.h +0 -31
  92. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +0 -92
  93. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +0 -88
  94. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.cpp +0 -46
  95. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.h +0 -42
  96. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +0 -670
  97. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -461
  98. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +0 -294
  99. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +0 -173
  100. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +0 -138
  101. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +0 -147
  102. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +0 -53
  103. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.h +0 -38
  104. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -65
  105. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.h +0 -98
  106. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +0 -157
  107. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +0 -160
  108. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +0 -144
  109. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +0 -141
  110. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +0 -27
  111. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +0 -32
  112. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +0 -54
  113. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.h +0 -155
  114. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.cpp +0 -9
  115. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -92
  116. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenFactory.h +0 -30
  117. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.cpp +0 -9
  118. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +0 -85
  119. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.cpp +0 -11
  120. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.h +0 -137
  121. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +0 -425
  122. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +0 -295
  123. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +0 -208
  124. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +0 -117
  125. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +0 -270
  126. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +0 -115
  127. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +0 -42
  128. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +0 -64
  129. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +0 -177
  130. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.cpp +0 -9
  131. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.h +0 -23
  132. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +0 -101
  133. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +0 -168
  134. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +0 -159
  135. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +0 -133
  136. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +0 -106
  137. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +0 -157
  138. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +0 -233
  139. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +0 -157
  140. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +0 -39
  141. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +0 -48
  142. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +0 -628
  143. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +0 -32
  144. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +0 -33
  145. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +0 -71
  146. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +0 -56
  147. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +0 -139
  148. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +0 -33
  149. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +0 -36
  150. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNType.h +0 -20
  151. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +0 -29
  152. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +0 -35
  153. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +0 -16
  154. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +0 -68
  155. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +0 -129
  156. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +0 -51
  157. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +0 -27
  158. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +0 -33
  159. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +0 -24
  160. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +0 -23
  161. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +0 -26
  162. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +0 -30
  163. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +0 -14
  164. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +0 -47
  165. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +0 -14
  166. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +0 -70
  167. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +0 -25
  168. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +0 -227
  169. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -12
  170. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +0 -34
  171. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +0 -31
  172. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +0 -42
  173. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +0 -15
  174. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.h +0 -43
  175. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/HashUtils.h +0 -18
  176. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +0 -189
  177. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +0 -76
  178. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +0 -67
  179. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +0 -44
  180. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +0 -621
  181. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +0 -199
  182. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +0 -15
  183. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +0 -100
  184. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +0 -108
  185. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +0 -128
  186. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +0 -57
  187. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +0 -43
  188. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +0 -59
  189. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +0 -45
  190. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +0 -75
  191. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +0 -50
  192. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +0 -76
  193. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +0 -43
  194. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +0 -57
  195. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +0 -36
  196. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +0 -53
  197. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +0 -36
  198. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +0 -53
  199. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +0 -43
  200. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +0 -57
  201. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +0 -36
  202. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +0 -51
  203. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +0 -43
  204. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +0 -51
  205. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +0 -16
  206. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +0 -42
  207. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +0 -26
  208. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +0 -22
  209. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +0 -27
  210. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +0 -16
  211. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +0 -25
  212. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +0 -102
  213. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.h +0 -102
  214. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +0 -1413
  215. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +0 -911
  216. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +0 -50
  217. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +0 -29
  218. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +0 -25
  219. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +0 -23
  220. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +0 -35
  221. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +0 -17
  222. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +0 -62
  223. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +0 -24
  224. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +0 -50
  225. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +0 -601
  226. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +0 -225
  227. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +0 -56
  228. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +0 -63
  229. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +0 -167
  230. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +0 -101
  231. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +0 -71
  232. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +0 -21
  233. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +0 -202
  234. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +0 -436
  235. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +0 -179
  236. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +0 -60
  237. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +0 -26
  238. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +0 -31
  239. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +0 -26
  240. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +0 -27
  241. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +0 -33
  242. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +0 -42
  243. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +0 -418
  244. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +0 -237
  245. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +0 -23
  246. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +0 -101
  247. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +0 -28
  248. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +0 -38
  249. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +0 -79
  250. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +0 -43
  251. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +0 -24
  252. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +0 -37
  253. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +0 -19
  254. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +0 -25
  255. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +0 -24
  256. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +0 -36
  257. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +0 -65
  258. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +0 -27
  259. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +0 -33
  260. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +0 -21
  261. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +0 -27
  262. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +0 -115
  263. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +0 -96
  264. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +0 -60
  265. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +0 -32
  266. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +0 -59
  267. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +0 -154
  268. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +0 -17
  269. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +0 -22
  270. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/internal/Synchronization.cpp +0 -100
  271. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/internal/Synchronization.h +0 -154
  272. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +0 -124
  273. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +0 -33
  274. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +0 -61
  275. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +0 -84
  276. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +0 -508
  277. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +0 -190
  278. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +0 -120
  279. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +0 -102
  280. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.cpp +0 -4
  281. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.h +0 -21
  282. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -8
  283. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +0 -16
  284. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +0 -43
  285. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +0 -149
  286. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +0 -76
  287. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +0 -207
  288. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +0 -65
  289. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +0 -34
  290. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -161
  291. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +0 -38
  292. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +0 -16
  293. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +0 -28
  294. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +0 -242
  295. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +0 -54
  296. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +0 -129
  297. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +0 -24
  298. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +0 -54
  299. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +0 -43
  300. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +0 -66
  301. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +0 -53
  302. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -12
  303. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +0 -111
  304. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +0 -9
  305. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +0 -39
  306. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +0 -50
  307. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +0 -22
  308. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +0 -9
  309. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +0 -57
  310. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +0 -48
  311. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +0 -55
  312. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +0 -40
  313. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +0 -54
  314. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +0 -32
  315. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +0 -241
  316. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.h +0 -78
  317. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +0 -9
  318. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +0 -44
  319. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +0 -69
  320. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +0 -132
  321. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +0 -64
  322. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +0 -105
  323. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +0 -370
  324. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +0 -185
  325. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +0 -77
  326. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +0 -117
  327. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +0 -39
  328. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +0 -86
  329. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +0 -28
  330. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +0 -51
  331. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +0 -36
  332. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +0 -80
  333. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +0 -154
  334. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.h +0 -86
  335. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +0 -31
  336. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +0 -40
  337. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +0 -180
  338. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.g4 +0 -64
  339. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +0 -53
  340. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.tokens +0 -12
  341. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +0 -13
  342. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +0 -22
  343. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +0 -20
  344. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +0 -27
  345. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +0 -30
  346. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +0 -26
  347. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +0 -20
  348. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +0 -25
  349. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +0 -33
  350. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +0 -26
  351. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +0 -23
  352. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +0 -23
  353. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +0 -24
  354. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +0 -23
  355. data/ext/express_parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +0 -110
  356. data/ext/express_parser/antlrgen/Express.interp +0 -532
  357. data/ext/express_parser/antlrgen/Express.tokens +0 -190
  358. data/ext/express_parser/antlrgen/ExpressBaseListener.cpp +0 -7
  359. data/ext/express_parser/antlrgen/ExpressBaseListener.h +0 -623
  360. data/ext/express_parser/antlrgen/ExpressBaseVisitor.cpp +0 -7
  361. data/ext/express_parser/antlrgen/ExpressBaseVisitor.h +0 -816
  362. data/ext/express_parser/antlrgen/ExpressLexer.cpp +0 -685
  363. data/ext/express_parser/antlrgen/ExpressLexer.h +0 -78
  364. data/ext/express_parser/antlrgen/ExpressLexer.interp +0 -534
  365. data/ext/express_parser/antlrgen/ExpressLexer.tokens +0 -190
  366. data/ext/express_parser/antlrgen/ExpressListener.cpp +0 -7
  367. data/ext/express_parser/antlrgen/ExpressListener.h +0 -616
  368. data/ext/express_parser/antlrgen/ExpressParser.cpp +0 -17591
  369. data/ext/express_parser/antlrgen/ExpressParser.h +0 -3692
  370. data/ext/express_parser/antlrgen/ExpressVisitor.cpp +0 -7
  371. data/ext/express_parser/antlrgen/ExpressVisitor.h +0 -422
  372. data/ext/express_parser/express_parser.cpp +0 -19405
  373. data/ext/express_parser/extconf.rb +0 -63
  374. data/rakelib/antlr4-native.rake +0 -173
  375. data/rakelib/cross-ruby.rake +0 -403
  376. data/spec/acceptance/version_spec.rb +0 -30
  377. data/spec/expressir/express/cache_spec.rb +0 -89
  378. data/spec/expressir/express/formatter_spec.rb +0 -171
  379. data/spec/expressir/express/parser_spec.rb +0 -141
  380. data/spec/expressir/model/model_element_spec.rb +0 -343
  381. data/spec/spec_helper.rb +0 -24
  382. data/spec/support/console_helper.rb +0 -29
  383. data/spec/syntax/multiple.exp +0 -23
  384. data/spec/syntax/multiple.yaml +0 -198
  385. data/spec/syntax/multiple_formatted.exp +0 -71
  386. data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
  387. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
  388. data/spec/syntax/remark.exp +0 -193
  389. data/spec/syntax/remark.yaml +0 -471
  390. data/spec/syntax/remark_formatted.exp +0 -228
  391. data/spec/syntax/single.exp +0 -4
  392. data/spec/syntax/single.yaml +0 -18
  393. data/spec/syntax/single_formatted.exp +0 -10
  394. data/spec/syntax/single_formatted.yaml +0 -36
  395. data/spec/syntax/syntax.exp +0 -333
  396. data/spec/syntax/syntax.yaml +0 -3509
  397. data/spec/syntax/syntax_formatted.exp +0 -902
  398. data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
  399. data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
@@ -1,911 +0,0 @@
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 "PredictionMode.h"
9
- #include "dfa/DFAState.h"
10
- #include "atn/ATNSimulator.h"
11
- #include "atn/PredictionContext.h"
12
- #include "atn/PredictionContextMergeCache.h"
13
- #include "atn/ParserATNSimulatorOptions.h"
14
- #include "SemanticContext.h"
15
- #include "atn/ATNConfig.h"
16
-
17
- namespace antlr4 {
18
- namespace atn {
19
-
20
- /**
21
- * The embodiment of the adaptive LL(*), ALL(*), parsing strategy.
22
- *
23
- * <p>
24
- * The basic complexity of the adaptive strategy makes it harder to understand.
25
- * We begin with ATN simulation to build paths in a DFA. Subsequent prediction
26
- * requests go through the DFA first. If they reach a state without an edge for
27
- * the current symbol, the algorithm fails over to the ATN simulation to
28
- * complete the DFA path for the current input (until it finds a conflict state
29
- * or uniquely predicting state).</p>
30
- *
31
- * <p>
32
- * All of that is done without using the outer context because we want to create
33
- * a DFA that is not dependent upon the rule invocation stack when we do a
34
- * prediction. One DFA works in all contexts. We avoid using context not
35
- * necessarily because it's slower, although it can be, but because of the DFA
36
- * caching problem. The closure routine only considers the rule invocation stack
37
- * created during prediction beginning in the decision rule. For example, if
38
- * prediction occurs without invoking another rule's ATN, there are no context
39
- * stacks in the configurations. When lack of context leads to a conflict, we
40
- * don't know if it's an ambiguity or a weakness in the strong LL(*) parsing
41
- * strategy (versus full LL(*)).</p>
42
- *
43
- * <p>
44
- * When SLL yields a configuration set with conflict, we rewind the input and
45
- * retry the ATN simulation, this time using full outer context without adding
46
- * to the DFA. Configuration context stacks will be the full invocation stacks
47
- * from the start rule. If we get a conflict using full context, then we can
48
- * definitively say we have a true ambiguity for that input sequence. If we
49
- * don't get a conflict, it implies that the decision is sensitive to the outer
50
- * context. (It is not context-sensitive in the sense of context-sensitive
51
- * grammars.)</p>
52
- *
53
- * <p>
54
- * The next time we reach this DFA state with an SLL conflict, through DFA
55
- * simulation, we will again retry the ATN simulation using full context mode.
56
- * This is slow because we can't save the results and have to "interpret" the
57
- * ATN each time we get that input.</p>
58
- *
59
- * <p>
60
- * <strong>CACHING FULL CONTEXT PREDICTIONS</strong></p>
61
- *
62
- * <p>
63
- * We could cache results from full context to predicted alternative easily and
64
- * that saves a lot of time but doesn't work in presence of predicates. The set
65
- * of visible predicates from the ATN start state changes depending on the
66
- * context, because closure can fall off the end of a rule. I tried to cache
67
- * tuples (stack context, semantic context, predicted alt) but it was slower
68
- * than interpreting and much more complicated. Also required a huge amount of
69
- * memory. The goal is not to create the world's fastest parser anyway. I'd like
70
- * to keep this algorithm simple. By launching multiple threads, we can improve
71
- * the speed of parsing across a large number of files.</p>
72
- *
73
- * <p>
74
- * There is no strict ordering between the amount of input used by SLL vs LL,
75
- * which makes it really hard to build a cache for full context. Let's say that
76
- * we have input A B C that leads to an SLL conflict with full context X. That
77
- * implies that using X we might only use A B but we could also use A B C D to
78
- * resolve conflict. Input A B C D could predict alternative 1 in one position
79
- * in the input and A B C E could predict alternative 2 in another position in
80
- * input. The conflicting SLL configurations could still be non-unique in the
81
- * full context prediction, which would lead us to requiring more input than the
82
- * original A B C. To make a prediction cache work, we have to track the exact
83
- * input used during the previous prediction. That amounts to a cache that maps
84
- * X to a specific DFA for that context.</p>
85
- *
86
- * <p>
87
- * Something should be done for left-recursive expression predictions. They are
88
- * likely LL(1) + pred eval. Easier to do the whole SLL unless error and retry
89
- * with full LL thing Sam does.</p>
90
- *
91
- * <p>
92
- * <strong>AVOIDING FULL CONTEXT PREDICTION</strong></p>
93
- *
94
- * <p>
95
- * We avoid doing full context retry when the outer context is empty, we did not
96
- * dip into the outer context by falling off the end of the decision state rule,
97
- * or when we force SLL mode.</p>
98
- *
99
- * <p>
100
- * As an example of the not dip into outer context case, consider as super
101
- * constructor calls versus function calls. One grammar might look like
102
- * this:</p>
103
- *
104
- * <pre>
105
- * ctorBody
106
- * : '{' superCall? stat* '}'
107
- * ;
108
- * </pre>
109
- *
110
- * <p>
111
- * Or, you might see something like</p>
112
- *
113
- * <pre>
114
- * stat
115
- * : superCall ';'
116
- * | expression ';'
117
- * | ...
118
- * ;
119
- * </pre>
120
- *
121
- * <p>
122
- * In both cases I believe that no closure operations will dip into the outer
123
- * context. In the first case ctorBody in the worst case will stop at the '}'.
124
- * In the 2nd case it should stop at the ';'. Both cases should stay within the
125
- * entry rule and not dip into the outer context.</p>
126
- *
127
- * <p>
128
- * <strong>PREDICATES</strong></p>
129
- *
130
- * <p>
131
- * Predicates are always evaluated if present in either SLL or LL both. SLL and
132
- * LL simulation deals with predicates differently. SLL collects predicates as
133
- * it performs closure operations like ANTLR v3 did. It delays predicate
134
- * evaluation until it reaches and accept state. This allows us to cache the SLL
135
- * ATN simulation whereas, if we had evaluated predicates on-the-fly during
136
- * closure, the DFA state configuration sets would be different and we couldn't
137
- * build up a suitable DFA.</p>
138
- *
139
- * <p>
140
- * When building a DFA accept state during ATN simulation, we evaluate any
141
- * predicates and return the sole semantically valid alternative. If there is
142
- * more than 1 alternative, we report an ambiguity. If there are 0 alternatives,
143
- * we throw an exception. Alternatives without predicates act like they have
144
- * true predicates. The simple way to think about it is to strip away all
145
- * alternatives with false predicates and choose the minimum alternative that
146
- * remains.</p>
147
- *
148
- * <p>
149
- * When we start in the DFA and reach an accept state that's predicated, we test
150
- * those and return the minimum semantically viable alternative. If no
151
- * alternatives are viable, we throw an exception.</p>
152
- *
153
- * <p>
154
- * During full LL ATN simulation, closure always evaluates predicates and
155
- * on-the-fly. This is crucial to reducing the configuration set size during
156
- * closure. It hits a landmine when parsing with the Java grammar, for example,
157
- * without this on-the-fly evaluation.</p>
158
- *
159
- * <p>
160
- * <strong>SHARING DFA</strong></p>
161
- *
162
- * <p>
163
- * All instances of the same parser share the same decision DFAs through a
164
- * static field. Each instance gets its own ATN simulator but they share the
165
- * same {@link #decisionToDFA} field. They also share a
166
- * {@link PredictionContextCache} object that makes sure that all
167
- * {@link PredictionContext} objects are shared among the DFA states. This makes
168
- * a big size difference.</p>
169
- *
170
- * <p>
171
- * <strong>THREAD SAFETY</strong></p>
172
- *
173
- * <p>
174
- * The {@link ParserATNSimulator} locks on the {@link #decisionToDFA} field when
175
- * it adds a new DFA object to that array. {@link #addDFAEdge}
176
- * locks on the DFA for the current decision when setting the
177
- * {@link DFAState#edges} field. {@link #addDFAState} locks on
178
- * the DFA for the current decision when looking up a DFA state to see if it
179
- * already exists. We must make sure that all requests to add DFA states that
180
- * are equivalent result in the same shared DFA object. This is because lots of
181
- * threads will be trying to update the DFA at once. The
182
- * {@link #addDFAState} method also locks inside the DFA lock
183
- * but this time on the shared context cache when it rebuilds the
184
- * configurations' {@link PredictionContext} objects using cached
185
- * subgraphs/nodes. No other locking occurs, even during DFA simulation. This is
186
- * safe as long as we can guarantee that all threads referencing
187
- * {@code s.edge[t]} get the same physical target {@link DFAState}, or
188
- * {@code null}. Once into the DFA, the DFA simulation does not reference the
189
- * {@link DFA#states} map. It follows the {@link DFAState#edges} field to new
190
- * targets. The DFA simulator will either find {@link DFAState#edges} to be
191
- * {@code null}, to be non-{@code null} and {@code dfa.edges[t]} null, or
192
- * {@code dfa.edges[t]} to be non-null. The
193
- * {@link #addDFAEdge} method could be racing to set the field
194
- * but in either case the DFA simulator works; if {@code null}, and requests ATN
195
- * simulation. It could also race trying to get {@code dfa.edges[t]}, but either
196
- * way it will work because it's not doing a test and set operation.</p>
197
- *
198
- * <p>
199
- * <strong>Starting with SLL then failing to combined SLL/LL (Two-Stage
200
- * Parsing)</strong></p>
201
- *
202
- * <p>
203
- * Sam pointed out that if SLL does not give a syntax error, then there is no
204
- * point in doing full LL, which is slower. We only have to try LL if we get a
205
- * syntax error. For maximum speed, Sam starts the parser set to pure SLL
206
- * mode with the {@link BailErrorStrategy}:</p>
207
- *
208
- * <pre>
209
- * parser.{@link Parser#getInterpreter() getInterpreter()}.{@link #setPredictionMode setPredictionMode}{@code (}{@link PredictionMode#SLL}{@code )};
210
- * parser.{@link Parser#setErrorHandler setErrorHandler}(new {@link BailErrorStrategy}());
211
- * </pre>
212
- *
213
- * <p>
214
- * If it does not get a syntax error, then we're done. If it does get a syntax
215
- * error, we need to retry with the combined SLL/LL strategy.</p>
216
- *
217
- * <p>
218
- * The reason this works is as follows. If there are no SLL conflicts, then the
219
- * grammar is SLL (at least for that input set). If there is an SLL conflict,
220
- * the full LL analysis must yield a set of viable alternatives which is a
221
- * subset of the alternatives reported by SLL. If the LL set is a singleton,
222
- * then the grammar is LL but not SLL. If the LL set is the same size as the SLL
223
- * set, the decision is SLL. If the LL set has size &gt; 1, then that decision
224
- * is truly ambiguous on the current input. If the LL set is smaller, then the
225
- * SLL conflict resolution might choose an alternative that the full LL would
226
- * rule out as a possibility based upon better context information. If that's
227
- * the case, then the SLL parse will definitely get an error because the full LL
228
- * analysis says it's not viable. If SLL conflict resolution chooses an
229
- * alternative within the LL set, them both SLL and LL would choose the same
230
- * alternative because they both choose the minimum of multiple conflicting
231
- * alternatives.</p>
232
- *
233
- * <p>
234
- * Let's say we have a set of SLL conflicting alternatives {@code {1, 2, 3}} and
235
- * a smaller LL set called <em>s</em>. If <em>s</em> is {@code {2, 3}}, then SLL
236
- * parsing will get an error because SLL will pursue alternative 1. If
237
- * <em>s</em> is {@code {1, 2}} or {@code {1, 3}} then both SLL and LL will
238
- * choose the same alternative because alternative one is the minimum of either
239
- * set. If <em>s</em> is {@code {2}} or {@code {3}} then SLL will get a syntax
240
- * error. If <em>s</em> is {@code {1}} then SLL will succeed.</p>
241
- *
242
- * <p>
243
- * Of course, if the input is invalid, then we will get an error for sure in
244
- * both SLL and LL parsing. Erroneous input will therefore require 2 passes over
245
- * the input.</p>
246
- */
247
- class ANTLR4CPP_PUBLIC ParserATNSimulator : public ATNSimulator {
248
- public:
249
- /// Testing only!
250
- ParserATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
251
- PredictionContextCache &sharedContextCache);
252
-
253
- ParserATNSimulator(Parser *parser, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
254
- PredictionContextCache &sharedContextCache);
255
-
256
- ParserATNSimulator(Parser *parser, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
257
- PredictionContextCache &sharedContextCache,
258
- const ParserATNSimulatorOptions &options);
259
-
260
- virtual void reset() override;
261
- virtual void clearDFA() override;
262
- virtual size_t adaptivePredict(TokenStream *input, size_t decision, ParserRuleContext *outerContext);
263
-
264
- static const bool TURN_OFF_LR_LOOP_ENTRY_BRANCH_OPT;
265
-
266
- std::vector<dfa::DFA> &decisionToDFA;
267
-
268
- /** Implements first-edge (loop entry) elimination as an optimization
269
- * during closure operations. See antlr/antlr4#1398.
270
- *
271
- * The optimization is to avoid adding the loop entry config when
272
- * the exit path can only lead back to the same
273
- * StarLoopEntryState after popping context at the rule end state
274
- * (traversing only epsilon edges, so we're still in closure, in
275
- * this same rule).
276
- *
277
- * We need to detect any state that can reach loop entry on
278
- * epsilon w/o exiting rule. We don't have to look at FOLLOW
279
- * links, just ensure that all stack tops for config refer to key
280
- * states in LR rule.
281
- *
282
- * To verify we are in the right situation we must first check
283
- * closure is at a StarLoopEntryState generated during LR removal.
284
- * Then we check that each stack top of context is a return state
285
- * from one of these cases:
286
- *
287
- * 1. 'not' expr, '(' type ')' expr. The return state points at loop entry state
288
- * 2. expr op expr. The return state is the block end of internal block of (...)*
289
- * 3. 'between' expr 'and' expr. The return state of 2nd expr reference.
290
- * That state points at block end of internal block of (...)*.
291
- * 4. expr '?' expr ':' expr. The return state points at block end,
292
- * which points at loop entry state.
293
- *
294
- * If any is true for each stack top, then closure does not add a
295
- * config to the current config set for edge[0], the loop entry branch.
296
- *
297
- * Conditions fail if any context for the current config is:
298
- *
299
- * a. empty (we'd fall out of expr to do a global FOLLOW which could
300
- * even be to some weird spot in expr) or,
301
- * b. lies outside of expr or,
302
- * c. lies within expr but at a state not the BlockEndState
303
- * generated during LR removal
304
- *
305
- * Do we need to evaluate predicates ever in closure for this case?
306
- *
307
- * No. Predicates, including precedence predicates, are only
308
- * evaluated when computing a DFA start state. I.e., only before
309
- * the lookahead (but not parser) consumes a token.
310
- *
311
- * There are no epsilon edges allowed in LR rule alt blocks or in
312
- * the "primary" part (ID here). If closure is in
313
- * StarLoopEntryState any lookahead operation will have consumed a
314
- * token as there are no epsilon-paths that lead to
315
- * StarLoopEntryState. We do not have to evaluate predicates
316
- * therefore if we are in the generated StarLoopEntryState of a LR
317
- * rule. Note that when making a prediction starting at that
318
- * decision point, decision d=2, compute-start-state performs
319
- * closure starting at edges[0], edges[1] emanating from
320
- * StarLoopEntryState. That means it is not performing closure on
321
- * StarLoopEntryState during compute-start-state.
322
- *
323
- * How do we know this always gives same prediction answer?
324
- *
325
- * Without predicates, loop entry and exit paths are ambiguous
326
- * upon remaining input +b (in, say, a+b). Either paths lead to
327
- * valid parses. Closure can lead to consuming + immediately or by
328
- * falling out of this call to expr back into expr and loop back
329
- * again to StarLoopEntryState to match +b. In this special case,
330
- * we choose the more efficient path, which is to take the bypass
331
- * path.
332
- *
333
- * The lookahead language has not changed because closure chooses
334
- * one path over the other. Both paths lead to consuming the same
335
- * remaining input during a lookahead operation. If the next token
336
- * is an operator, lookahead will enter the choice block with
337
- * operators. If it is not, lookahead will exit expr. Same as if
338
- * closure had chosen to enter the choice block immediately.
339
- *
340
- * Closure is examining one config (some loopentrystate, some alt,
341
- * context) which means it is considering exactly one alt. Closure
342
- * always copies the same alt to any derived configs.
343
- *
344
- * How do we know this optimization doesn't mess up precedence in
345
- * our parse trees?
346
- *
347
- * Looking through expr from left edge of stat only has to confirm
348
- * that an input, say, a+b+c; begins with any valid interpretation
349
- * of an expression. The precedence actually doesn't matter when
350
- * making a decision in stat seeing through expr. It is only when
351
- * parsing rule expr that we must use the precedence to get the
352
- * right interpretation and, hence, parse tree.
353
- */
354
- bool canDropLoopEntryEdgeInLeftRecursiveRule(ATNConfig *config) const;
355
- virtual std::string getRuleName(size_t index);
356
-
357
- virtual Ref<ATNConfig> precedenceTransition(Ref<ATNConfig> const& config, const PrecedencePredicateTransition *pt,
358
- bool collectPredicates, bool inContext, bool fullCtx);
359
-
360
- void setPredictionMode(PredictionMode newMode);
361
- PredictionMode getPredictionMode();
362
-
363
- Parser* getParser();
364
-
365
- virtual std::string getTokenName(size_t t);
366
-
367
- virtual std::string getLookaheadName(TokenStream *input);
368
-
369
- /// <summary>
370
- /// Used for debugging in adaptivePredict around execATN but I cut
371
- /// it out for clarity now that alg. works well. We can leave this
372
- /// "dead" code for a bit.
373
- /// </summary>
374
- virtual void dumpDeadEndConfigs(NoViableAltException &nvae);
375
-
376
- protected:
377
- Parser *const parser;
378
-
379
- /// <summary>
380
- /// Each prediction operation uses a cache for merge of prediction contexts.
381
- /// Don't keep around as it wastes huge amounts of memory. The merge cache
382
- /// isn't synchronized but we're ok since two threads shouldn't reuse same
383
- /// parser/atnsim object because it can only handle one input at a time.
384
- /// This maps graphs a and b to merged result c. (a,b)->c. We can avoid
385
- /// the merge if we ever see a and b again. Note that (b,a)->c should
386
- /// also be examined during cache lookup.
387
- /// </summary>
388
- PredictionContextMergeCache mergeCache;
389
- size_t _mergeCacheCounter = 0;
390
-
391
- // LAME globals to avoid parameters!!!!! I need these down deep in predTransition
392
- TokenStream *_input;
393
- size_t _startIndex;
394
- ParserRuleContext *_outerContext;
395
- dfa::DFA *_dfa; // Reference into the decisionToDFA vector.
396
-
397
- /// <summary>
398
- /// Performs ATN simulation to compute a predicted alternative based
399
- /// upon the remaining input, but also updates the DFA cache to avoid
400
- /// having to traverse the ATN again for the same input sequence.
401
- ///
402
- /// There are some key conditions we're looking for after computing a new
403
- /// set of ATN configs (proposed DFA state):
404
- /// if the set is empty, there is no viable alternative for current symbol
405
- /// does the state uniquely predict an alternative?
406
- /// does the state have a conflict that would prevent us from
407
- /// putting it on the work list?
408
- ///
409
- /// We also have some key operations to do:
410
- /// add an edge from previous DFA state to potentially new DFA state, D,
411
- /// upon current symbol but only if adding to work list, which means in all
412
- /// cases except no viable alternative (and possibly non-greedy decisions?)
413
- /// collecting predicates and adding semantic context to DFA accept states
414
- /// adding rule context to context-sensitive DFA accept states
415
- /// consuming an input symbol
416
- /// reporting a conflict
417
- /// reporting an ambiguity
418
- /// reporting a context sensitivity
419
- /// reporting insufficient predicates
420
- ///
421
- /// cover these cases:
422
- /// dead end
423
- /// single alt
424
- /// single alt + preds
425
- /// conflict
426
- /// conflict + preds
427
- /// </summary>
428
- virtual size_t execATN(dfa::DFA &dfa, dfa::DFAState *s0, TokenStream *input, size_t startIndex,
429
- ParserRuleContext *outerContext);
430
-
431
- /// <summary>
432
- /// Get an existing target state for an edge in the DFA. If the target state
433
- /// for the edge has not yet been computed or is otherwise not available,
434
- /// this method returns {@code null}.
435
- /// </summary>
436
- /// <param name="previousD"> The current DFA state </param>
437
- /// <param name="t"> The next input symbol </param>
438
- /// <returns> The existing target DFA state for the given input symbol
439
- /// {@code t}, or {@code null} if the target state for this edge is not
440
- /// already cached </returns>
441
- virtual dfa::DFAState* getExistingTargetState(dfa::DFAState *previousD, size_t t);
442
-
443
- /// <summary>
444
- /// Compute a target state for an edge in the DFA, and attempt to add the
445
- /// computed state and corresponding edge to the DFA.
446
- /// </summary>
447
- /// <param name="dfa"> The DFA </param>
448
- /// <param name="previousD"> The current DFA state </param>
449
- /// <param name="t"> The next input symbol
450
- /// </param>
451
- /// <returns> The computed target DFA state for the given input symbol
452
- /// {@code t}. If {@code t} does not lead to a valid DFA state, this method
453
- /// returns <seealso cref="#ERROR"/>. </returns>
454
- virtual dfa::DFAState *computeTargetState(dfa::DFA &dfa, dfa::DFAState *previousD, size_t t);
455
-
456
- virtual void predicateDFAState(dfa::DFAState *dfaState, DecisionState *decisionState);
457
-
458
- // comes back with reach.uniqueAlt set to a valid alt
459
- virtual size_t execATNWithFullContext(dfa::DFA &dfa, dfa::DFAState *D, ATNConfigSet *s0,
460
- TokenStream *input, size_t startIndex, ParserRuleContext *outerContext); // how far we got before failing over
461
-
462
- virtual std::unique_ptr<ATNConfigSet> computeReachSet(ATNConfigSet *closure, size_t t, bool fullCtx);
463
-
464
- /// <summary>
465
- /// Return a configuration set containing only the configurations from
466
- /// {@code configs} which are in a <seealso cref="RuleStopState"/>. If all
467
- /// configurations in {@code configs} are already in a rule stop state, this
468
- /// method simply returns {@code configs}.
469
- /// <p/>
470
- /// When {@code lookToEndOfRule} is true, this method uses
471
- /// <seealso cref="ATN#nextTokens"/> for each configuration in {@code configs} which is
472
- /// not already in a rule stop state to see if a rule stop state is reachable
473
- /// from the configuration via epsilon-only transitions.
474
- /// </summary>
475
- /// <param name="configs"> the configuration set to update </param>
476
- /// <param name="lookToEndOfRule"> when true, this method checks for rule stop states
477
- /// reachable by epsilon-only transitions from each configuration in
478
- /// {@code configs}.
479
- /// </param>
480
- /// <returns> {@code configs} if all configurations in {@code configs} are in a
481
- /// rule stop state, otherwise return a new configuration set containing only
482
- /// the configurations from {@code configs} which are in a rule stop state </returns>
483
- virtual ATNConfigSet* removeAllConfigsNotInRuleStopState(ATNConfigSet *configs, bool lookToEndOfRule);
484
-
485
- virtual std::unique_ptr<ATNConfigSet> computeStartState(ATNState *p, RuleContext *ctx, bool fullCtx);
486
-
487
- /* parrt internal source braindump that doesn't mess up
488
- * external API spec.
489
-
490
- applyPrecedenceFilter is an optimization to avoid highly
491
- nonlinear prediction of expressions and other left recursive
492
- rules. The precedence predicates such as {3>=prec}? Are highly
493
- context-sensitive in that they can only be properly evaluated
494
- in the context of the proper prec argument. Without pruning,
495
- these predicates are normal predicates evaluated when we reach
496
- conflict state (or unique prediction). As we cannot evaluate
497
- these predicates out of context, the resulting conflict leads
498
- to full LL evaluation and nonlinear prediction which shows up
499
- very clearly with fairly large expressions.
500
-
501
- Example grammar:
502
-
503
- e : e '*' e
504
- | e '+' e
505
- | INT
506
- ;
507
-
508
- We convert that to the following:
509
-
510
- e[int prec]
511
- : INT
512
- ( {3>=prec}? '*' e[4]
513
- | {2>=prec}? '+' e[3]
514
- )*
515
- ;
516
-
517
- The (..)* loop has a decision for the inner block as well as
518
- an enter or exit decision, which is what concerns us here. At
519
- the 1st + of input 1+2+3, the loop entry sees both predicates
520
- and the loop exit also sees both predicates by falling off the
521
- edge of e. This is because we have no stack information with
522
- SLL and find the follow of e, which will hit the return states
523
- inside the loop after e[4] and e[3], which brings it back to
524
- the enter or exit decision. In this case, we know that we
525
- cannot evaluate those predicates because we have fallen off
526
- the edge of the stack and will in general not know which prec
527
- parameter is the right one to use in the predicate.
528
-
529
- Because we have special information, that these are precedence
530
- predicates, we can resolve them without failing over to full
531
- LL despite their context sensitive nature. We make an
532
- assumption that prec[-1] <= prec[0], meaning that the current
533
- precedence level is greater than or equal to the precedence
534
- level of recursive invocations above us in the stack. For
535
- example, if predicate {3>=prec}? is true of the current prec,
536
- then one option is to enter the loop to match it now. The
537
- other option is to exit the loop and the left recursive rule
538
- to match the current operator in rule invocation further up
539
- the stack. But, we know that all of those prec are lower or
540
- the same value and so we can decide to enter the loop instead
541
- of matching it later. That means we can strip out the other
542
- configuration for the exit branch.
543
-
544
- So imagine we have (14,1,$,{2>=prec}?) and then
545
- (14,2,$-dipsIntoOuterContext,{2>=prec}?). The optimization
546
- allows us to collapse these two configurations. We know that
547
- if {2>=prec}? is true for the current prec parameter, it will
548
- also be true for any prec from an invoking e call, indicated
549
- by dipsIntoOuterContext. As the predicates are both true, we
550
- have the option to evaluate them early in the decision start
551
- state. We do this by stripping both predicates and choosing to
552
- enter the loop as it is consistent with the notion of operator
553
- precedence. It's also how the full LL conflict resolution
554
- would work.
555
-
556
- The solution requires a different DFA start state for each
557
- precedence level.
558
-
559
- The basic filter mechanism is to remove configurations of the
560
- form (p, 2, pi) if (p, 1, pi) exists for the same p and pi. In
561
- other words, for the same ATN state and predicate context,
562
- remove any configuration associated with an exit branch if
563
- there is a configuration associated with the enter branch.
564
-
565
- It's also the case that the filter evaluates precedence
566
- predicates and resolves conflicts according to precedence
567
- levels. For example, for input 1+2+3 at the first +, we see
568
- prediction filtering
569
-
570
- [(11,1,[$],{3>=prec}?), (14,1,[$],{2>=prec}?), (5,2,[$],up=1),
571
- (11,2,[$],up=1), (14,2,[$],up=1)],hasSemanticContext=true,dipsIntoOuterContext
572
-
573
- to
574
-
575
- [(11,1,[$]), (14,1,[$]), (5,2,[$],up=1)],dipsIntoOuterContext
576
-
577
- This filters because {3>=prec}? evals to true and collapses
578
- (11,1,[$],{3>=prec}?) and (11,2,[$],up=1) since early conflict
579
- resolution based upon rules of operator precedence fits with
580
- our usual match first alt upon conflict.
581
-
582
- We noticed a problem where a recursive call resets precedence
583
- to 0. Sam's fix: each config has flag indicating if it has
584
- returned from an expr[0] call. then just don't filter any
585
- config with that flag set. flag is carried along in
586
- closure(). so to avoid adding field, set bit just under sign
587
- bit of dipsIntoOuterContext (SUPPRESS_PRECEDENCE_FILTER).
588
- With the change you filter "unless (p, 2, pi) was reached
589
- after leaving the rule stop state of the LR rule containing
590
- state p, corresponding to a rule invocation with precedence
591
- level 0"
592
- */
593
-
594
- /**
595
- * This method transforms the start state computed by
596
- * {@link #computeStartState} to the special start state used by a
597
- * precedence DFA for a particular precedence value. The transformation
598
- * process applies the following changes to the start state's configuration
599
- * set.
600
- *
601
- * <ol>
602
- * <li>Evaluate the precedence predicates for each configuration using
603
- * {@link SemanticContext#evalPrecedence}.</li>
604
- * <li>When {@link ATNConfig#isPrecedenceFilterSuppressed} is {@code false},
605
- * remove all configurations which predict an alternative greater than 1,
606
- * for which another configuration that predicts alternative 1 is in the
607
- * same ATN state with the same prediction context. This transformation is
608
- * valid for the following reasons:
609
- * <ul>
610
- * <li>The closure block cannot contain any epsilon transitions which bypass
611
- * the body of the closure, so all states reachable via alternative 1 are
612
- * part of the precedence alternatives of the transformed left-recursive
613
- * rule.</li>
614
- * <li>The "primary" portion of a left recursive rule cannot contain an
615
- * epsilon transition, so the only way an alternative other than 1 can exist
616
- * in a state that is also reachable via alternative 1 is by nesting calls
617
- * to the left-recursive rule, with the outer calls not being at the
618
- * preferred precedence level. The
619
- * {@link ATNConfig#isPrecedenceFilterSuppressed} property marks ATN
620
- * configurations which do not meet this condition, and therefore are not
621
- * eligible for elimination during the filtering process.</li>
622
- * </ul>
623
- * </li>
624
- * </ol>
625
- *
626
- * <p>
627
- * The prediction context must be considered by this filter to address
628
- * situations like the following.
629
- * </p>
630
- * <code>
631
- * <pre>
632
- * grammar TA;
633
- * prog: statement* EOF;
634
- * statement: letterA | statement letterA 'b' ;
635
- * letterA: 'a';
636
- * </pre>
637
- * </code>
638
- * <p>
639
- * If the above grammar, the ATN state immediately before the token
640
- * reference {@code 'a'} in {@code letterA} is reachable from the left edge
641
- * of both the primary and closure blocks of the left-recursive rule
642
- * {@code statement}. The prediction context associated with each of these
643
- * configurations distinguishes between them, and prevents the alternative
644
- * which stepped out to {@code prog} (and then back in to {@code statement}
645
- * from being eliminated by the filter.
646
- * </p>
647
- *
648
- * @param configs The configuration set computed by
649
- * {@link #computeStartState} as the start state for the DFA.
650
- * @return The transformed configuration set representing the start state
651
- * for a precedence DFA at a particular precedence level (determined by
652
- * calling {@link Parser#getPrecedence}).
653
- */
654
- std::unique_ptr<ATNConfigSet> applyPrecedenceFilter(ATNConfigSet *configs);
655
-
656
- virtual ATNState *getReachableTarget(const Transition *trans, size_t ttype);
657
-
658
- virtual std::vector<Ref<const SemanticContext>> getPredsForAmbigAlts(const antlrcpp::BitSet &ambigAlts,
659
- ATNConfigSet *configs, size_t nalts);
660
-
661
- std::vector<dfa::DFAState::PredPrediction> getPredicatePredictions(const antlrcpp::BitSet &ambigAlts,
662
- const std::vector<Ref<const SemanticContext>> &altToPred);
663
-
664
- /**
665
- * This method is used to improve the localization of error messages by
666
- * choosing an alternative rather than throwing a
667
- * {@link NoViableAltException} in particular prediction scenarios where the
668
- * {@link #ERROR} state was reached during ATN simulation.
669
- *
670
- * <p>
671
- * The default implementation of this method uses the following
672
- * algorithm to identify an ATN configuration which successfully parsed the
673
- * decision entry rule. Choosing such an alternative ensures that the
674
- * {@link ParserRuleContext} returned by the calling rule will be complete
675
- * and valid, and the syntax error will be reported later at a more
676
- * localized location.</p>
677
- *
678
- * <ul>
679
- * <li>If a syntactically valid path or paths reach the end of the decision rule and
680
- * they are semantically valid if predicated, return the min associated alt.</li>
681
- * <li>Else, if a semantically invalid but syntactically valid path exist
682
- * or paths exist, return the minimum associated alt.
683
- * </li>
684
- * <li>Otherwise, return {@link ATN#INVALID_ALT_NUMBER}.</li>
685
- * </ul>
686
- *
687
- * <p>
688
- * In some scenarios, the algorithm described above could predict an
689
- * alternative which will result in a {@link FailedPredicateException} in
690
- * the parser. Specifically, this could occur if the <em>only</em> configuration
691
- * capable of successfully parsing to the end of the decision rule is
692
- * blocked by a semantic predicate. By choosing this alternative within
693
- * {@link #adaptivePredict} instead of throwing a
694
- * {@link NoViableAltException}, the resulting
695
- * {@link FailedPredicateException} in the parser will identify the specific
696
- * predicate which is preventing the parser from successfully parsing the
697
- * decision rule, which helps developers identify and correct logic errors
698
- * in semantic predicates.
699
- * </p>
700
- *
701
- * @param configs The ATN configurations which were valid immediately before
702
- * the {@link #ERROR} state was reached
703
- * @param outerContext The is the \gamma_0 initial parser context from the paper
704
- * or the parser stack at the instant before prediction commences.
705
- *
706
- * @return The value to return from {@link #adaptivePredict}, or
707
- * {@link ATN#INVALID_ALT_NUMBER} if a suitable alternative was not
708
- * identified and {@link #adaptivePredict} should report an error instead.
709
- */
710
- size_t getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(ATNConfigSet *configs,
711
- ParserRuleContext *outerContext);
712
-
713
- virtual size_t getAltThatFinishedDecisionEntryRule(ATNConfigSet *configs);
714
-
715
- /** Walk the list of configurations and split them according to
716
- * those that have preds evaluating to true/false. If no pred, assume
717
- * true pred and include in succeeded set. Returns Pair of sets.
718
- *
719
- * Create a new set so as not to alter the incoming parameter.
720
- *
721
- * Assumption: the input stream has been restored to the starting point
722
- * prediction, which is where predicates need to evaluate.
723
- */
724
- std::pair<ATNConfigSet *, ATNConfigSet *> splitAccordingToSemanticValidity(ATNConfigSet *configs,
725
- ParserRuleContext *outerContext);
726
-
727
- /// <summary>
728
- /// Look through a list of predicate/alt pairs, returning alts for the
729
- /// pairs that win. A {@code NONE} predicate indicates an alt containing an
730
- /// unpredicated config which behaves as "always true." If !complete
731
- /// then we stop at the first predicate that evaluates to true. This
732
- /// includes pairs with null predicates.
733
- /// </summary>
734
- antlrcpp::BitSet evalSemanticContext(const std::vector<dfa::DFAState::PredPrediction> &predPredictions,
735
- ParserRuleContext *outerContext, bool complete);
736
-
737
- /**
738
- * Evaluate a semantic context within a specific parser context.
739
- *
740
- * <p>
741
- * This method might not be called for every semantic context evaluated
742
- * during the prediction process. In particular, we currently do not
743
- * evaluate the following but it may change in the future:</p>
744
- *
745
- * <ul>
746
- * <li>Precedence predicates (represented by
747
- * {@link SemanticContext.PrecedencePredicate}) are not currently evaluated
748
- * through this method.</li>
749
- * <li>Operator predicates (represented by {@link SemanticContext.AND} and
750
- * {@link SemanticContext.OR}) are evaluated as a single semantic
751
- * context, rather than evaluating the operands individually.
752
- * Implementations which require evaluation results from individual
753
- * predicates should override this method to explicitly handle evaluation of
754
- * the operands within operator predicates.</li>
755
- * </ul>
756
- *
757
- * @param pred The semantic context to evaluate
758
- * @param parserCallStack The parser context in which to evaluate the
759
- * semantic context
760
- * @param alt The alternative which is guarded by {@code pred}
761
- * @param fullCtx {@code true} if the evaluation is occurring during LL
762
- * prediction; otherwise, {@code false} if the evaluation is occurring
763
- * during SLL prediction
764
- *
765
- * @since 4.3
766
- */
767
- virtual bool evalSemanticContext(Ref<const SemanticContext> const& pred, ParserRuleContext *parserCallStack,
768
- size_t alt, bool fullCtx);
769
-
770
- /* TODO: If we are doing predicates, there is no point in pursuing
771
- closure operations if we reach a DFA state that uniquely predicts
772
- alternative. We will not be caching that DFA state and it is a
773
- waste to pursue the closure. Might have to advance when we do
774
- ambig detection thought :(
775
- */
776
- virtual void closure(Ref<ATNConfig> const& config, ATNConfigSet *configs, ATNConfig::Set &closureBusy,
777
- bool collectPredicates, bool fullCtx, bool treatEofAsEpsilon);
778
-
779
- virtual void closureCheckingStopState(Ref<ATNConfig> const& config, ATNConfigSet *configs, ATNConfig::Set &closureBusy,
780
- bool collectPredicates, bool fullCtx, int depth, bool treatEofAsEpsilon);
781
-
782
- /// Do the actual work of walking epsilon edges.
783
- virtual void closure_(Ref<ATNConfig> const& config, ATNConfigSet *configs, ATNConfig::Set &closureBusy,
784
- bool collectPredicates, bool fullCtx, int depth, bool treatEofAsEpsilon);
785
-
786
- virtual Ref<ATNConfig> getEpsilonTarget(Ref<ATNConfig> const& config, const Transition *t, bool collectPredicates,
787
- bool inContext, bool fullCtx, bool treatEofAsEpsilon);
788
- virtual Ref<ATNConfig> actionTransition(Ref<ATNConfig> const& config, const ActionTransition *t);
789
-
790
- virtual Ref<ATNConfig> predTransition(Ref<ATNConfig> const& config, const PredicateTransition *pt, bool collectPredicates,
791
- bool inContext, bool fullCtx);
792
-
793
- virtual Ref<ATNConfig> ruleTransition(Ref<ATNConfig> const& config, const RuleTransition *t);
794
-
795
- /**
796
- * Gets a {@link BitSet} containing the alternatives in {@code configs}
797
- * which are part of one or more conflicting alternative subsets.
798
- *
799
- * @param configs The {@link ATNConfigSet} to analyze.
800
- * @return The alternatives in {@code configs} which are part of one or more
801
- * conflicting alternative subsets. If {@code configs} does not contain any
802
- * conflicting subsets, this method returns an empty {@link BitSet}.
803
- */
804
- virtual antlrcpp::BitSet getConflictingAlts(ATNConfigSet *configs);
805
-
806
- /// <summary>
807
- /// Sam pointed out a problem with the previous definition, v3, of
808
- /// ambiguous states. If we have another state associated with conflicting
809
- /// alternatives, we should keep going. For example, the following grammar
810
- ///
811
- /// s : (ID | ID ID?) ';' ;
812
- ///
813
- /// When the ATN simulation reaches the state before ';', it has a DFA
814
- /// state that looks like: [12|1|[], 6|2|[], 12|2|[]]. Naturally
815
- /// 12|1|[] and 12|2|[] conflict, but we cannot stop processing this node
816
- /// because alternative to has another way to continue, via [6|2|[]].
817
- /// The key is that we have a single state that has config's only associated
818
- /// with a single alternative, 2, and crucially the state transitions
819
- /// among the configurations are all non-epsilon transitions. That means
820
- /// we don't consider any conflicts that include alternative 2. So, we
821
- /// ignore the conflict between alts 1 and 2. We ignore a set of
822
- /// conflicting alts when there is an intersection with an alternative
823
- /// associated with a single alt state in the state->config-list map.
824
- ///
825
- /// It's also the case that we might have two conflicting configurations but
826
- /// also a 3rd nonconflicting configuration for a different alternative:
827
- /// [1|1|[], 1|2|[], 8|3|[]]. This can come about from grammar:
828
- ///
829
- /// a : A | A | A B ;
830
- ///
831
- /// After matching input A, we reach the stop state for rule A, state 1.
832
- /// State 8 is the state right before B. Clearly alternatives 1 and 2
833
- /// conflict and no amount of further lookahead will separate the two.
834
- /// However, alternative 3 will be able to continue and so we do not
835
- /// stop working on this state. In the previous example, we're concerned
836
- /// with states associated with the conflicting alternatives. Here alt
837
- /// 3 is not associated with the conflicting configs, but since we can continue
838
- /// looking for input reasonably, I don't declare the state done. We
839
- /// ignore a set of conflicting alts when we have an alternative
840
- /// that we still need to pursue.
841
- /// </summary>
842
-
843
- virtual antlrcpp::BitSet getConflictingAltsOrUniqueAlt(ATNConfigSet *configs);
844
-
845
- virtual NoViableAltException noViableAlt(TokenStream *input, ParserRuleContext *outerContext,
846
- ATNConfigSet *configs, size_t startIndex, bool deleteConfigs);
847
-
848
- static size_t getUniqueAlt(ATNConfigSet *configs);
849
-
850
- /// <summary>
851
- /// Add an edge to the DFA, if possible. This method calls
852
- /// <seealso cref="#addDFAState"/> to ensure the {@code to} state is present in the
853
- /// DFA. If {@code from} is {@code null}, or if {@code t} is outside the
854
- /// range of edges that can be represented in the DFA tables, this method
855
- /// returns without adding the edge to the DFA.
856
- /// <p/>
857
- /// If {@code to} is {@code null}, this method returns {@code null}.
858
- /// Otherwise, this method returns the <seealso cref="DFAState"/> returned by calling
859
- /// <seealso cref="#addDFAState"/> for the {@code to} state.
860
- /// </summary>
861
- /// <param name="dfa"> The DFA </param>
862
- /// <param name="from"> The source state for the edge </param>
863
- /// <param name="t"> The input symbol </param>
864
- /// <param name="to"> The target state for the edge
865
- /// </param>
866
- /// <returns> If {@code to} is {@code null}, this method returns {@code null};
867
- /// otherwise this method returns the result of calling <seealso cref="#addDFAState"/>
868
- /// on {@code to} </returns>
869
- virtual dfa::DFAState *addDFAEdge(dfa::DFA &dfa, dfa::DFAState *from, ssize_t t, dfa::DFAState *to);
870
-
871
- /// <summary>
872
- /// Add state {@code D} to the DFA if it is not already present, and return
873
- /// the actual instance stored in the DFA. If a state equivalent to {@code D}
874
- /// is already in the DFA, the existing state is returned. Otherwise this
875
- /// method returns {@code D} after adding it to the DFA.
876
- /// <p/>
877
- /// If {@code D} is <seealso cref="#ERROR"/>, this method returns <seealso cref="#ERROR"/> and
878
- /// does not change the DFA.
879
- /// </summary>
880
- /// <param name="dfa"> The dfa </param>
881
- /// <param name="D"> The DFA state to add </param>
882
- /// <returns> The state stored in the DFA. This will be either the existing
883
- /// state if {@code D} is already in the DFA, or {@code D} itself if the
884
- /// state was not already present. </returns>
885
- virtual dfa::DFAState *addDFAState(dfa::DFA &dfa, dfa::DFAState *D);
886
-
887
- virtual void reportAttemptingFullContext(dfa::DFA &dfa, const antlrcpp::BitSet &conflictingAlts,
888
- ATNConfigSet *configs, size_t startIndex, size_t stopIndex);
889
-
890
- virtual void reportContextSensitivity(dfa::DFA &dfa, size_t prediction, ATNConfigSet *configs,
891
- size_t startIndex, size_t stopIndex);
892
-
893
- /// If context sensitive parsing, we know it's ambiguity not conflict.
894
- virtual void reportAmbiguity(dfa::DFA &dfa,
895
- dfa::DFAState *D, // the DFA state from execATN() that had SLL conflicts
896
- size_t startIndex, size_t stopIndex,
897
- bool exact,
898
- const antlrcpp::BitSet &ambigAlts,
899
- ATNConfigSet *configs); // configs that LL not SLL considered conflicting
900
-
901
- private:
902
- // SLL, LL, or LL + exact ambig detection?
903
- PredictionMode _mode;
904
-
905
- static bool getLrLoopSetting();
906
- void InitializeInstanceFields();
907
- };
908
-
909
- } // namespace atn
910
- } // namespace antlr4
911
-