python3-parser 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +13 -0
  3. data/README.md +59 -0
  4. data/Rakefile +21 -0
  5. data/ext/python3-parser/Python3LexerBase.cpp +112 -0
  6. data/ext/python3-parser/Python3LexerBase.h +34 -0
  7. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
  8. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
  9. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
  10. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
  11. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +34 -0
  12. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +27 -0
  13. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +155 -0
  14. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +69 -0
  15. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
  16. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
  17. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
  18. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
  19. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
  20. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
  21. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
  22. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CharStream.h +37 -0
  23. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +195 -0
  24. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.h +158 -0
  25. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
  26. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
  27. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
  28. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
  29. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
  30. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
  31. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +333 -0
  32. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
  33. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
  34. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
  35. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
  36. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +99 -0
  37. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +51 -0
  38. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
  39. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
  40. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
  41. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
  42. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +218 -0
  43. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
  44. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
  45. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +295 -0
  46. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +196 -0
  47. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +75 -0
  48. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +52 -0
  49. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
  50. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
  51. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
  52. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
  53. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
  54. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
  55. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +648 -0
  56. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +467 -0
  57. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +306 -0
  58. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +179 -0
  59. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +141 -0
  60. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
  61. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
  62. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
  63. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +66 -0
  64. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
  65. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +167 -0
  66. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +164 -0
  67. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +143 -0
  68. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +137 -0
  69. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
  70. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
  71. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +53 -0
  72. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
  73. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.cpp +9 -0
  74. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +92 -0
  75. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
  76. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
  77. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +85 -0
  78. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
  79. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStream.h +137 -0
  80. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +425 -0
  81. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +293 -0
  82. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +211 -0
  83. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +123 -0
  84. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
  85. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
  86. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +104 -0
  87. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +193 -0
  88. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
  89. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/WritableToken.h +23 -0
  90. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +137 -0
  91. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +167 -0
  92. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +209 -0
  93. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +112 -0
  94. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +113 -0
  95. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +148 -0
  96. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +228 -0
  97. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +110 -0
  98. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +64 -0
  99. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +50 -0
  100. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +758 -0
  101. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +85 -0
  102. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +621 -0
  103. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +61 -0
  104. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +63 -0
  105. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +87 -0
  106. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +72 -0
  107. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +133 -0
  108. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
  109. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +14 -0
  110. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +24 -0
  111. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +33 -0
  112. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +33 -0
  113. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
  114. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
  115. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +82 -0
  116. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +43 -0
  117. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +31 -0
  118. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +30 -0
  119. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +12 -0
  120. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +22 -0
  121. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +12 -0
  122. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +21 -0
  123. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +15 -0
  124. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +24 -0
  125. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +9 -0
  126. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +21 -0
  127. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
  128. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
  129. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
  130. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
  131. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
  132. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
  133. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +17 -0
  134. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +30 -0
  135. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +35 -0
  136. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +27 -0
  137. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +35 -0
  138. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +39 -0
  139. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
  140. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
  141. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +158 -0
  142. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +109 -0
  143. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +84 -0
  144. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
  145. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +628 -0
  146. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +210 -0
  147. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +9 -0
  148. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +66 -0
  149. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +107 -0
  150. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +115 -0
  151. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +55 -0
  152. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +55 -0
  153. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +63 -0
  154. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +62 -0
  155. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +87 -0
  156. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +63 -0
  157. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +82 -0
  158. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +56 -0
  159. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +61 -0
  160. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +47 -0
  161. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +57 -0
  162. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +47 -0
  163. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +57 -0
  164. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +56 -0
  165. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +61 -0
  166. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +47 -0
  167. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +55 -0
  168. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +56 -0
  169. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +55 -0
  170. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
  171. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
  172. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +12 -0
  173. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +22 -0
  174. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +27 -0
  175. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +25 -0
  176. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +12 -0
  177. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +20 -0
  178. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
  179. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
  180. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1366 -0
  181. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +904 -0
  182. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +12 -0
  183. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +25 -0
  184. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +12 -0
  185. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +22 -0
  186. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +32 -0
  187. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +29 -0
  188. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
  189. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
  190. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +34 -0
  191. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +39 -0
  192. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +662 -0
  193. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +254 -0
  194. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +201 -0
  195. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
  196. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
  197. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
  198. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +30 -0
  199. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +29 -0
  200. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +16 -0
  201. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +25 -0
  202. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +12 -0
  203. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +25 -0
  204. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +37 -0
  205. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +40 -0
  206. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +377 -0
  207. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +222 -0
  208. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +32 -0
  209. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +30 -0
  210. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +81 -0
  211. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +36 -0
  212. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +12 -0
  213. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +21 -0
  214. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +15 -0
  215. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +35 -0
  216. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
  217. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +21 -0
  218. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +12 -0
  219. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +21 -0
  220. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +44 -0
  221. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +76 -0
  222. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +25 -0
  223. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +25 -0
  224. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +127 -0
  225. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +91 -0
  226. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +67 -0
  227. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
  228. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +100 -0
  229. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +144 -0
  230. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +20 -0
  231. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +23 -0
  232. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
  233. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +31 -0
  234. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +89 -0
  235. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
  236. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +521 -0
  237. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +198 -0
  238. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +134 -0
  239. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +76 -0
  240. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
  241. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
  242. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +13 -0
  243. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +170 -0
  244. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
  245. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +110 -0
  246. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
  247. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +248 -0
  248. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +78 -0
  249. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +163 -0
  250. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +36 -0
  251. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +54 -0
  252. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +303 -0
  253. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +112 -0
  254. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +128 -0
  255. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +9 -0
  256. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +19 -0
  257. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +23 -0
  258. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +33 -0
  259. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +71 -0
  260. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
  261. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +15 -0
  262. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +102 -0
  263. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
  264. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
  265. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
  266. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
  267. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
  268. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +49 -0
  269. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +31 -0
  270. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +9 -0
  271. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +32 -0
  272. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +57 -0
  273. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +33 -0
  274. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
  275. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
  276. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
  277. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
  278. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
  279. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
  280. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
  281. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
  282. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +371 -0
  283. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
  284. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
  285. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
  286. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
  287. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
  288. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
  289. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
  290. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
  291. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
  292. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
  293. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
  294. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
  295. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
  296. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +173 -0
  297. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +56 -0
  298. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
  299. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
  300. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
  301. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
  302. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
  303. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
  304. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
  305. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
  306. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
  307. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
  308. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
  309. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
  310. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
  311. data/ext/python3-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
  312. data/ext/python3-parser/antlrgen/Python3Lexer.cpp +1024 -0
  313. data/ext/python3-parser/antlrgen/Python3Lexer.h +91 -0
  314. data/ext/python3-parser/antlrgen/Python3Lexer.interp +339 -0
  315. data/ext/python3-parser/antlrgen/Python3Lexer.tokens +181 -0
  316. data/ext/python3-parser/antlrgen/Python3Parser.cpp +10550 -0
  317. data/ext/python3-parser/antlrgen/Python3Parser.h +1811 -0
  318. data/ext/python3-parser/antlrgen/Python3Parser.interp +295 -0
  319. data/ext/python3-parser/antlrgen/Python3Parser.tokens +181 -0
  320. data/ext/python3-parser/antlrgen/Python3ParserBaseListener.cpp +7 -0
  321. data/ext/python3-parser/antlrgen/Python3ParserBaseListener.h +284 -0
  322. data/ext/python3-parser/antlrgen/Python3ParserBaseVisitor.cpp +7 -0
  323. data/ext/python3-parser/antlrgen/Python3ParserBaseVisitor.h +364 -0
  324. data/ext/python3-parser/antlrgen/Python3ParserListener.cpp +7 -0
  325. data/ext/python3-parser/antlrgen/Python3ParserListener.h +277 -0
  326. data/ext/python3-parser/antlrgen/Python3ParserVisitor.cpp +7 -0
  327. data/ext/python3-parser/antlrgen/Python3ParserVisitor.h +196 -0
  328. data/ext/python3-parser/extconf.rb +34 -0
  329. data/ext/python3-parser/python3_parser.cpp +10103 -0
  330. data/lib/python3-parser.rb +2 -0
  331. data/lib/python3-parser/version.rb +3 -0
  332. data/python3-parser.gemspec +31 -0
  333. data/spec/parser_spec.rb +105 -0
  334. data/spec/spec_helper.rb +9 -0
  335. metadata +391 -0
@@ -0,0 +1,436 @@
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 "support/BitSet.h"
9
+
10
+ namespace antlr4 {
11
+ namespace atn {
12
+
13
+ /**
14
+ * This enumeration defines the prediction modes available in ANTLR 4 along with
15
+ * utility methods for analyzing configuration sets for conflicts and/or
16
+ * ambiguities.
17
+ */
18
+ enum class PredictionMode {
19
+ /**
20
+ * The SLL(*) prediction mode. This prediction mode ignores the current
21
+ * parser context when making predictions. This is the fastest prediction
22
+ * mode, and provides correct results for many grammars. This prediction
23
+ * mode is more powerful than the prediction mode provided by ANTLR 3, but
24
+ * may result in syntax errors for grammar and input combinations which are
25
+ * not SLL.
26
+ *
27
+ * <p>
28
+ * When using this prediction mode, the parser will either return a correct
29
+ * parse tree (i.e. the same parse tree that would be returned with the
30
+ * {@link #LL} prediction mode), or it will report a syntax error. If a
31
+ * syntax error is encountered when using the {@link #SLL} prediction mode,
32
+ * it may be due to either an actual syntax error in the input or indicate
33
+ * that the particular combination of grammar and input requires the more
34
+ * powerful {@link #LL} prediction abilities to complete successfully.</p>
35
+ *
36
+ * <p>
37
+ * This prediction mode does not provide any guarantees for prediction
38
+ * behavior for syntactically-incorrect inputs.</p>
39
+ */
40
+ SLL,
41
+
42
+ /**
43
+ * The LL(*) prediction mode. This prediction mode allows the current parser
44
+ * context to be used for resolving SLL conflicts that occur during
45
+ * prediction. This is the fastest prediction mode that guarantees correct
46
+ * parse results for all combinations of grammars with syntactically correct
47
+ * inputs.
48
+ *
49
+ * <p>
50
+ * When using this prediction mode, the parser will make correct decisions
51
+ * for all syntactically-correct grammar and input combinations. However, in
52
+ * cases where the grammar is truly ambiguous this prediction mode might not
53
+ * report a precise answer for <em>exactly which</em> alternatives are
54
+ * ambiguous.</p>
55
+ *
56
+ * <p>
57
+ * This prediction mode does not provide any guarantees for prediction
58
+ * behavior for syntactically-incorrect inputs.</p>
59
+ */
60
+ LL,
61
+
62
+ /**
63
+ * The LL(*) prediction mode with exact ambiguity detection. In addition to
64
+ * the correctness guarantees provided by the {@link #LL} prediction mode,
65
+ * this prediction mode instructs the prediction algorithm to determine the
66
+ * complete and exact set of ambiguous alternatives for every ambiguous
67
+ * decision encountered while parsing.
68
+ *
69
+ * <p>
70
+ * This prediction mode may be used for diagnosing ambiguities during
71
+ * grammar development. Due to the performance overhead of calculating sets
72
+ * of ambiguous alternatives, this prediction mode should be avoided when
73
+ * the exact results are not necessary.</p>
74
+ *
75
+ * <p>
76
+ * This prediction mode does not provide any guarantees for prediction
77
+ * behavior for syntactically-incorrect inputs.</p>
78
+ */
79
+ LL_EXACT_AMBIG_DETECTION
80
+ };
81
+
82
+ class ANTLR4CPP_PUBLIC PredictionModeClass {
83
+ public:
84
+ /**
85
+ * Computes the SLL prediction termination condition.
86
+ *
87
+ * <p>
88
+ * This method computes the SLL prediction termination condition for both of
89
+ * the following cases.</p>
90
+ *
91
+ * <ul>
92
+ * <li>The usual SLL+LL fallback upon SLL conflict</li>
93
+ * <li>Pure SLL without LL fallback</li>
94
+ * </ul>
95
+ *
96
+ * <p><strong>COMBINED SLL+LL PARSING</strong></p>
97
+ *
98
+ * <p>When LL-fallback is enabled upon SLL conflict, correct predictions are
99
+ * ensured regardless of how the termination condition is computed by this
100
+ * method. Due to the substantially higher cost of LL prediction, the
101
+ * prediction should only fall back to LL when the additional lookahead
102
+ * cannot lead to a unique SLL prediction.</p>
103
+ *
104
+ * <p>Assuming combined SLL+LL parsing, an SLL configuration set with only
105
+ * conflicting subsets should fall back to full LL, even if the
106
+ * configuration sets don't resolve to the same alternative (e.g.
107
+ * {@code {1,2}} and {@code {3,4}}. If there is at least one non-conflicting
108
+ * configuration, SLL could continue with the hopes that more lookahead will
109
+ * resolve via one of those non-conflicting configurations.</p>
110
+ *
111
+ * <p>Here's the prediction termination rule them: SLL (for SLL+LL parsing)
112
+ * stops when it sees only conflicting configuration subsets. In contrast,
113
+ * full LL keeps going when there is uncertainty.</p>
114
+ *
115
+ * <p><strong>HEURISTIC</strong></p>
116
+ *
117
+ * <p>As a heuristic, we stop prediction when we see any conflicting subset
118
+ * unless we see a state that only has one alternative associated with it.
119
+ * The single-alt-state thing lets prediction continue upon rules like
120
+ * (otherwise, it would admit defeat too soon):</p>
121
+ *
122
+ * <p>{@code [12|1|[], 6|2|[], 12|2|[]]. s : (ID | ID ID?) ';' ;}</p>
123
+ *
124
+ * <p>When the ATN simulation reaches the state before {@code ';'}, it has a
125
+ * DFA state that looks like: {@code [12|1|[], 6|2|[], 12|2|[]]}. Naturally
126
+ * {@code 12|1|[]} and {@code 12|2|[]} conflict, but we cannot stop
127
+ * processing this node because alternative to has another way to continue,
128
+ * via {@code [6|2|[]]}.</p>
129
+ *
130
+ * <p>It also let's us continue for this rule:</p>
131
+ *
132
+ * <p>{@code [1|1|[], 1|2|[], 8|3|[]] a : A | A | A B ;}</p>
133
+ *
134
+ * <p>After matching input A, we reach the stop state for rule A, state 1.
135
+ * State 8 is the state right before B. Clearly alternatives 1 and 2
136
+ * conflict and no amount of further lookahead will separate the two.
137
+ * However, alternative 3 will be able to continue and so we do not stop
138
+ * working on this state. In the previous example, we're concerned with
139
+ * states associated with the conflicting alternatives. Here alt 3 is not
140
+ * associated with the conflicting configs, but since we can continue
141
+ * looking for input reasonably, don't declare the state done.</p>
142
+ *
143
+ * <p><strong>PURE SLL PARSING</strong></p>
144
+ *
145
+ * <p>To handle pure SLL parsing, all we have to do is make sure that we
146
+ * combine stack contexts for configurations that differ only by semantic
147
+ * predicate. From there, we can do the usual SLL termination heuristic.</p>
148
+ *
149
+ * <p><strong>PREDICATES IN SLL+LL PARSING</strong></p>
150
+ *
151
+ * <p>SLL decisions don't evaluate predicates until after they reach DFA stop
152
+ * states because they need to create the DFA cache that works in all
153
+ * semantic situations. In contrast, full LL evaluates predicates collected
154
+ * during start state computation so it can ignore predicates thereafter.
155
+ * This means that SLL termination detection can totally ignore semantic
156
+ * predicates.</p>
157
+ *
158
+ * <p>Implementation-wise, {@link ATNConfigSet} combines stack contexts but not
159
+ * semantic predicate contexts so we might see two configurations like the
160
+ * following.</p>
161
+ *
162
+ * <p>{@code (s, 1, x, {}), (s, 1, x', {p})}</p>
163
+ *
164
+ * <p>Before testing these configurations against others, we have to merge
165
+ * {@code x} and {@code x'} (without modifying the existing configurations).
166
+ * For example, we test {@code (x+x')==x''} when looking for conflicts in
167
+ * the following configurations.</p>
168
+ *
169
+ * <p>{@code (s, 1, x, {}), (s, 1, x', {p}), (s, 2, x'', {})}</p>
170
+ *
171
+ * <p>If the configuration set has predicates (as indicated by
172
+ * {@link ATNConfigSet#hasSemanticContext}), this algorithm makes a copy of
173
+ * the configurations to strip out all of the predicates so that a standard
174
+ * {@link ATNConfigSet} will merge everything ignoring predicates.</p>
175
+ */
176
+ static bool hasSLLConflictTerminatingPrediction(PredictionMode mode, ATNConfigSet *configs);
177
+
178
+ /// <summary>
179
+ /// Checks if any configuration in {@code configs} is in a
180
+ /// <seealso cref="RuleStopState"/>. Configurations meeting this condition have
181
+ /// reached
182
+ /// the end of the decision rule (local context) or end of start rule (full
183
+ /// context).
184
+ /// </summary>
185
+ /// <param name="configs"> the configuration set to test </param>
186
+ /// <returns> {@code true} if any configuration in {@code configs} is in a
187
+ /// <seealso cref="RuleStopState"/>, otherwise {@code false} </returns>
188
+ static bool hasConfigInRuleStopState(ATNConfigSet *configs);
189
+
190
+ /// <summary>
191
+ /// Checks if all configurations in {@code configs} are in a
192
+ /// <seealso cref="RuleStopState"/>. Configurations meeting this condition have
193
+ /// reached
194
+ /// the end of the decision rule (local context) or end of start rule (full
195
+ /// context).
196
+ /// </summary>
197
+ /// <param name="configs"> the configuration set to test </param>
198
+ /// <returns> {@code true} if all configurations in {@code configs} are in a
199
+ /// <seealso cref="RuleStopState"/>, otherwise {@code false} </returns>
200
+ static bool allConfigsInRuleStopStates(ATNConfigSet *configs);
201
+
202
+ /**
203
+ * Full LL prediction termination.
204
+ *
205
+ * <p>Can we stop looking ahead during ATN simulation or is there some
206
+ * uncertainty as to which alternative we will ultimately pick, after
207
+ * consuming more input? Even if there are partial conflicts, we might know
208
+ * that everything is going to resolve to the same minimum alternative. That
209
+ * means we can stop since no more lookahead will change that fact. On the
210
+ * other hand, there might be multiple conflicts that resolve to different
211
+ * minimums. That means we need more look ahead to decide which of those
212
+ * alternatives we should predict.</p>
213
+ *
214
+ * <p>The basic idea is to split the set of configurations {@code C}, into
215
+ * conflicting subsets {@code (s, _, ctx, _)} and singleton subsets with
216
+ * non-conflicting configurations. Two configurations conflict if they have
217
+ * identical {@link ATNConfig#state} and {@link ATNConfig#context} values
218
+ * but different {@link ATNConfig#alt} value, e.g. {@code (s, i, ctx, _)}
219
+ * and {@code (s, j, ctx, _)} for {@code i!=j}.</p>
220
+ *
221
+ * <p>Reduce these configuration subsets to the set of possible alternatives.
222
+ * You can compute the alternative subsets in one pass as follows:</p>
223
+ *
224
+ * <p>{@code A_s,ctx = {i | (s, i, ctx, _)}} for each configuration in
225
+ * {@code C} holding {@code s} and {@code ctx} fixed.</p>
226
+ *
227
+ * <p>Or in pseudo-code, for each configuration {@code c} in {@code C}:</p>
228
+ *
229
+ * <pre>
230
+ * map[c] U= c.{@link ATNConfig#alt alt} # map hash/equals uses s and x, not
231
+ * alt and not pred
232
+ * </pre>
233
+ *
234
+ * <p>The values in {@code map} are the set of {@code A_s,ctx} sets.</p>
235
+ *
236
+ * <p>If {@code |A_s,ctx|=1} then there is no conflict associated with
237
+ * {@code s} and {@code ctx}.</p>
238
+ *
239
+ * <p>Reduce the subsets to singletons by choosing a minimum of each subset. If
240
+ * the union of these alternative subsets is a singleton, then no amount of
241
+ * more lookahead will help us. We will always pick that alternative. If,
242
+ * however, there is more than one alternative, then we are uncertain which
243
+ * alternative to predict and must continue looking for resolution. We may
244
+ * or may not discover an ambiguity in the future, even if there are no
245
+ * conflicting subsets this round.</p>
246
+ *
247
+ * <p>The biggest sin is to terminate early because it means we've made a
248
+ * decision but were uncertain as to the eventual outcome. We haven't used
249
+ * enough lookahead. On the other hand, announcing a conflict too late is no
250
+ * big deal; you will still have the conflict. It's just inefficient. It
251
+ * might even look until the end of file.</p>
252
+ *
253
+ * <p>No special consideration for semantic predicates is required because
254
+ * predicates are evaluated on-the-fly for full LL prediction, ensuring that
255
+ * no configuration contains a semantic context during the termination
256
+ * check.</p>
257
+ *
258
+ * <p><strong>CONFLICTING CONFIGS</strong></p>
259
+ *
260
+ * <p>Two configurations {@code (s, i, x)} and {@code (s, j, x')}, conflict
261
+ * when {@code i!=j} but {@code x=x'}. Because we merge all
262
+ * {@code (s, i, _)} configurations together, that means that there are at
263
+ * most {@code n} configurations associated with state {@code s} for
264
+ * {@code n} possible alternatives in the decision. The merged stacks
265
+ * complicate the comparison of configuration contexts {@code x} and
266
+ * {@code x'}. Sam checks to see if one is a subset of the other by calling
267
+ * merge and checking to see if the merged result is either {@code x} or
268
+ * {@code x'}. If the {@code x} associated with lowest alternative {@code i}
269
+ * is the superset, then {@code i} is the only possible prediction since the
270
+ * others resolve to {@code min(i)} as well. However, if {@code x} is
271
+ * associated with {@code j>i} then at least one stack configuration for
272
+ * {@code j} is not in conflict with alternative {@code i}. The algorithm
273
+ * should keep going, looking for more lookahead due to the uncertainty.</p>
274
+ *
275
+ * <p>For simplicity, I'm doing a equality check between {@code x} and
276
+ * {@code x'} that lets the algorithm continue to consume lookahead longer
277
+ * than necessary. The reason I like the equality is of course the
278
+ * simplicity but also because that is the test you need to detect the
279
+ * alternatives that are actually in conflict.</p>
280
+ *
281
+ * <p><strong>CONTINUE/STOP RULE</strong></p>
282
+ *
283
+ * <p>Continue if union of resolved alternative sets from non-conflicting and
284
+ * conflicting alternative subsets has more than one alternative. We are
285
+ * uncertain about which alternative to predict.</p>
286
+ *
287
+ * <p>The complete set of alternatives, {@code [i for (_,i,_)]}, tells us which
288
+ * alternatives are still in the running for the amount of input we've
289
+ * consumed at this point. The conflicting sets let us to strip away
290
+ * configurations that won't lead to more states because we resolve
291
+ * conflicts to the configuration with a minimum alternate for the
292
+ * conflicting set.</p>
293
+ *
294
+ * <p><strong>CASES</strong></p>
295
+ *
296
+ * <ul>
297
+ *
298
+ * <li>no conflicts and more than 1 alternative in set =&gt; continue</li>
299
+ *
300
+ * <li> {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s, 3, z)},
301
+ * {@code (s', 1, y)}, {@code (s', 2, y)} yields non-conflicting set
302
+ * {@code {3}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} =
303
+ * {@code {1,3}} =&gt; continue
304
+ * </li>
305
+ *
306
+ * <li>{@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)},
307
+ * {@code (s', 2, y)}, {@code (s'', 1, z)} yields non-conflicting set
308
+ * {@code {1}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} =
309
+ * {@code {1}} =&gt; stop and predict 1</li>
310
+ *
311
+ * <li>{@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)},
312
+ * {@code (s', 2, y)} yields conflicting, reduced sets {@code {1}} U
313
+ * {@code {1}} = {@code {1}} =&gt; stop and predict 1, can announce
314
+ * ambiguity {@code {1,2}}</li>
315
+ *
316
+ * <li>{@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 2, y)},
317
+ * {@code (s', 3, y)} yields conflicting, reduced sets {@code {1}} U
318
+ * {@code {2}} = {@code {1,2}} =&gt; continue</li>
319
+ *
320
+ * <li>{@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 3, y)},
321
+ * {@code (s', 4, y)} yields conflicting, reduced sets {@code {1}} U
322
+ * {@code {3}} = {@code {1,3}} =&gt; continue</li>
323
+ *
324
+ * </ul>
325
+ *
326
+ * <p><strong>EXACT AMBIGUITY DETECTION</strong></p>
327
+ *
328
+ * <p>If all states report the same conflicting set of alternatives, then we
329
+ * know we have the exact ambiguity set.</p>
330
+ *
331
+ * <p><code>|A_<em>i</em>|&gt;1</code> and
332
+ * <code>A_<em>i</em> = A_<em>j</em></code> for all <em>i</em>, <em>j</em>.</p>
333
+ *
334
+ * <p>In other words, we continue examining lookahead until all {@code A_i}
335
+ * have more than one alternative and all {@code A_i} are the same. If
336
+ * {@code A={{1,2}, {1,3}}}, then regular LL prediction would terminate
337
+ * because the resolved set is {@code {1}}. To determine what the real
338
+ * ambiguity is, we have to know whether the ambiguity is between one and
339
+ * two or one and three so we keep going. We can only stop prediction when
340
+ * we need exact ambiguity detection when the sets look like
341
+ * {@code A={{1,2}}} or {@code {{1,2},{1,2}}}, etc...</p>
342
+ */
343
+ static size_t resolvesToJustOneViableAlt(const std::vector<antlrcpp::BitSet> &altsets);
344
+
345
+ /// <summary>
346
+ /// Determines if every alternative subset in {@code altsets} contains more
347
+ /// than one alternative.
348
+ /// </summary>
349
+ /// <param name="altsets"> a collection of alternative subsets </param>
350
+ /// <returns> {@code true} if every <seealso cref="BitSet"/> in {@code altsets}
351
+ /// has
352
+ /// <seealso cref="BitSet#cardinality cardinality"/> &gt; 1, otherwise {@code
353
+ /// false} </returns>
354
+ static bool allSubsetsConflict(const std::vector<antlrcpp::BitSet> &altsets);
355
+
356
+ /// <summary>
357
+ /// Determines if any single alternative subset in {@code altsets} contains
358
+ /// exactly one alternative.
359
+ /// </summary>
360
+ /// <param name="altsets"> a collection of alternative subsets </param>
361
+ /// <returns> {@code true} if {@code altsets} contains a <seealso
362
+ /// cref="BitSet"/> with
363
+ /// <seealso cref="BitSet#cardinality cardinality"/> 1, otherwise {@code false}
364
+ /// </returns>
365
+ static bool hasNonConflictingAltSet(const std::vector<antlrcpp::BitSet> &altsets);
366
+
367
+ /// <summary>
368
+ /// Determines if any single alternative subset in {@code altsets} contains
369
+ /// more than one alternative.
370
+ /// </summary>
371
+ /// <param name="altsets"> a collection of alternative subsets </param>
372
+ /// <returns> {@code true} if {@code altsets} contains a <seealso
373
+ /// cref="BitSet"/> with
374
+ /// <seealso cref="BitSet#cardinality cardinality"/> &gt; 1, otherwise {@code
375
+ /// false} </returns>
376
+ static bool hasConflictingAltSet(const std::vector<antlrcpp::BitSet> &altsets);
377
+
378
+ /// <summary>
379
+ /// Determines if every alternative subset in {@code altsets} is equivalent.
380
+ /// </summary>
381
+ /// <param name="altsets"> a collection of alternative subsets </param>
382
+ /// <returns> {@code true} if every member of {@code altsets} is equal to the
383
+ /// others, otherwise {@code false} </returns>
384
+ static bool allSubsetsEqual(const std::vector<antlrcpp::BitSet> &altsets);
385
+
386
+ /// <summary>
387
+ /// Returns the unique alternative predicted by all alternative subsets in
388
+ /// {@code altsets}. If no such alternative exists, this method returns
389
+ /// <seealso cref="ATN#INVALID_ALT_NUMBER"/>.
390
+ /// </summary>
391
+ /// <param name="altsets"> a collection of alternative subsets </param>
392
+ static size_t getUniqueAlt(const std::vector<antlrcpp::BitSet> &altsets);
393
+
394
+ /// <summary>
395
+ /// Gets the complete set of represented alternatives for a collection of
396
+ /// alternative subsets. This method returns the union of each <seealso
397
+ /// cref="BitSet"/>
398
+ /// in {@code altsets}.
399
+ /// </summary>
400
+ /// <param name="altsets"> a collection of alternative subsets </param>
401
+ /// <returns> the set of represented alternatives in {@code altsets} </returns>
402
+ static antlrcpp::BitSet getAlts(const std::vector<antlrcpp::BitSet> &altsets);
403
+
404
+ /** Get union of all alts from configs. @since 4.5.1 */
405
+ static antlrcpp::BitSet getAlts(ATNConfigSet *configs);
406
+
407
+ /// <summary>
408
+ /// This function gets the conflicting alt subsets from a configuration set.
409
+ /// For each configuration {@code c} in {@code configs}:
410
+ ///
411
+ /// <pre>
412
+ /// map[c] U= c.<seealso cref="ATNConfig#alt alt"/> # map hash/equals uses s and
413
+ /// x, not
414
+ /// alt and not pred
415
+ /// </pre>
416
+ /// </summary>
417
+ static std::vector<antlrcpp::BitSet> getConflictingAltSubsets(ATNConfigSet *configs);
418
+
419
+ /// <summary>
420
+ /// Get a map from state to alt subset from a configuration set. For each
421
+ /// configuration {@code c} in {@code configs}:
422
+ ///
423
+ /// <pre>
424
+ /// map[c.<seealso cref="ATNConfig#state state"/>] U= c.<seealso
425
+ /// cref="ATNConfig#alt alt"/>
426
+ /// </pre>
427
+ /// </summary>
428
+ static std::map<ATNState*, antlrcpp::BitSet> getStateToAltMap(ATNConfigSet *configs);
429
+
430
+ static bool hasStateAssociatedWithOneAlt(ATNConfigSet *configs);
431
+
432
+ static size_t getSingleViableAlt(const std::vector<antlrcpp::BitSet> &altsets);
433
+ };
434
+
435
+ } // namespace atn
436
+ } // namespace antlr4
@@ -0,0 +1,179 @@
1
+ /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
2
+ * Use of this file is governed by the BSD 3-clause license that
3
+ * can be found in the LICENSE.txt file in the project root.
4
+ */
5
+
6
+ #include "atn/PredicateEvalInfo.h"
7
+ #include "atn/LookaheadEventInfo.h"
8
+ #include "Parser.h"
9
+ #include "atn/ATNConfigSet.h"
10
+ #include "support/CPPUtils.h"
11
+
12
+ #include "atn/ProfilingATNSimulator.h"
13
+
14
+ using namespace antlr4;
15
+ using namespace antlr4::atn;
16
+ using namespace antlr4::dfa;
17
+ using namespace antlrcpp;
18
+
19
+ using namespace std::chrono;
20
+
21
+ ProfilingATNSimulator::ProfilingATNSimulator(Parser *parser)
22
+ : ParserATNSimulator(parser, parser->getInterpreter<ParserATNSimulator>()->atn,
23
+ parser->getInterpreter<ParserATNSimulator>()->decisionToDFA,
24
+ parser->getInterpreter<ParserATNSimulator>()->getSharedContextCache()) {
25
+ for (size_t i = 0; i < atn.decisionToState.size(); i++) {
26
+ _decisions.push_back(DecisionInfo(i));
27
+ }
28
+ }
29
+
30
+ size_t ProfilingATNSimulator::adaptivePredict(TokenStream *input, size_t decision, ParserRuleContext *outerContext) {
31
+ auto onExit = finally([this](){
32
+ _currentDecision = 0; // Originally -1, but that makes no sense (index into a vector and init value is also 0).
33
+ });
34
+
35
+ _sllStopIndex = -1;
36
+ _llStopIndex = -1;
37
+ _currentDecision = decision;
38
+ high_resolution_clock::time_point start = high_resolution_clock::now();
39
+ size_t alt = ParserATNSimulator::adaptivePredict(input, decision, outerContext);
40
+ high_resolution_clock::time_point stop = high_resolution_clock::now();
41
+ _decisions[decision].timeInPrediction += duration_cast<nanoseconds>(stop - start).count();
42
+ _decisions[decision].invocations++;
43
+
44
+ long long SLL_k = _sllStopIndex - _startIndex + 1;
45
+ _decisions[decision].SLL_TotalLook += SLL_k;
46
+ _decisions[decision].SLL_MinLook = _decisions[decision].SLL_MinLook == 0 ? SLL_k : std::min(_decisions[decision].SLL_MinLook, SLL_k);
47
+ if (SLL_k > _decisions[decision].SLL_MaxLook) {
48
+ _decisions[decision].SLL_MaxLook = SLL_k;
49
+ _decisions[decision].SLL_MaxLookEvent = std::make_shared<LookaheadEventInfo>(decision, nullptr, alt, input, _startIndex, _sllStopIndex, false);
50
+ }
51
+
52
+ if (_llStopIndex >= 0) {
53
+ long long LL_k = _llStopIndex - _startIndex + 1;
54
+ _decisions[decision].LL_TotalLook += LL_k;
55
+ _decisions[decision].LL_MinLook = _decisions[decision].LL_MinLook == 0 ? LL_k : std::min(_decisions[decision].LL_MinLook, LL_k);
56
+ if (LL_k > _decisions[decision].LL_MaxLook) {
57
+ _decisions[decision].LL_MaxLook = LL_k;
58
+ _decisions[decision].LL_MaxLookEvent = std::make_shared<LookaheadEventInfo>(decision, nullptr, alt, input, _startIndex, _llStopIndex, true);
59
+ }
60
+ }
61
+
62
+ return alt;
63
+ }
64
+
65
+ DFAState* ProfilingATNSimulator::getExistingTargetState(DFAState *previousD, size_t t) {
66
+ // this method is called after each time the input position advances
67
+ // during SLL prediction
68
+ _sllStopIndex = (int)_input->index();
69
+
70
+ DFAState *existingTargetState = ParserATNSimulator::getExistingTargetState(previousD, t);
71
+ if (existingTargetState != nullptr) {
72
+ _decisions[_currentDecision].SLL_DFATransitions++; // count only if we transition over a DFA state
73
+ if (existingTargetState == ERROR.get()) {
74
+ _decisions[_currentDecision].errors.push_back(
75
+ ErrorInfo(_currentDecision, previousD->configs.get(), _input, _startIndex, _sllStopIndex, false)
76
+ );
77
+ }
78
+ }
79
+
80
+ _currentState = existingTargetState;
81
+ return existingTargetState;
82
+ }
83
+
84
+ DFAState* ProfilingATNSimulator::computeTargetState(DFA &dfa, DFAState *previousD, size_t t) {
85
+ DFAState *state = ParserATNSimulator::computeTargetState(dfa, previousD, t);
86
+ _currentState = state;
87
+ return state;
88
+ }
89
+
90
+ std::unique_ptr<ATNConfigSet> ProfilingATNSimulator::computeReachSet(ATNConfigSet *closure, size_t t, bool fullCtx) {
91
+ if (fullCtx) {
92
+ // this method is called after each time the input position advances
93
+ // during full context prediction
94
+ _llStopIndex = (int)_input->index();
95
+ }
96
+
97
+ std::unique_ptr<ATNConfigSet> reachConfigs = ParserATNSimulator::computeReachSet(closure, t, fullCtx);
98
+ if (fullCtx) {
99
+ _decisions[_currentDecision].LL_ATNTransitions++; // count computation even if error
100
+ if (reachConfigs != nullptr) {
101
+ } else { // no reach on current lookahead symbol. ERROR.
102
+ // TODO: does not handle delayed errors per getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule()
103
+ _decisions[_currentDecision].errors.push_back(ErrorInfo(_currentDecision, closure, _input, _startIndex, _llStopIndex, true));
104
+ }
105
+ } else {
106
+ ++_decisions[_currentDecision].SLL_ATNTransitions;
107
+ if (reachConfigs != nullptr) {
108
+ } else { // no reach on current lookahead symbol. ERROR.
109
+ _decisions[_currentDecision].errors.push_back(ErrorInfo(_currentDecision, closure, _input, _startIndex, _sllStopIndex, false));
110
+ }
111
+ }
112
+ return reachConfigs;
113
+ }
114
+
115
+ bool ProfilingATNSimulator::evalSemanticContext(Ref<SemanticContext> const& pred, ParserRuleContext *parserCallStack,
116
+ size_t alt, bool fullCtx) {
117
+ bool result = ParserATNSimulator::evalSemanticContext(pred, parserCallStack, alt, fullCtx);
118
+ if (!(std::dynamic_pointer_cast<SemanticContext::PrecedencePredicate>(pred) != nullptr)) {
119
+ bool fullContext = _llStopIndex >= 0;
120
+ int stopIndex = fullContext ? _llStopIndex : _sllStopIndex;
121
+ _decisions[_currentDecision].predicateEvals.push_back(
122
+ PredicateEvalInfo(_currentDecision, _input, _startIndex, stopIndex, pred, result, alt, fullCtx));
123
+ }
124
+
125
+ return result;
126
+ }
127
+
128
+ void ProfilingATNSimulator::reportAttemptingFullContext(DFA &dfa, const BitSet &conflictingAlts, ATNConfigSet *configs,
129
+ size_t startIndex, size_t stopIndex) {
130
+ if (conflictingAlts.count() > 0) {
131
+ conflictingAltResolvedBySLL = conflictingAlts.nextSetBit(0);
132
+ } else {
133
+ conflictingAltResolvedBySLL = configs->getAlts().nextSetBit(0);
134
+ }
135
+ _decisions[_currentDecision].LL_Fallback++;
136
+ ParserATNSimulator::reportAttemptingFullContext(dfa, conflictingAlts, configs, startIndex, stopIndex);
137
+ }
138
+
139
+ void ProfilingATNSimulator::reportContextSensitivity(DFA &dfa, size_t prediction, ATNConfigSet *configs,
140
+ size_t startIndex, size_t stopIndex) {
141
+ if (prediction != conflictingAltResolvedBySLL) {
142
+ _decisions[_currentDecision].contextSensitivities.push_back(
143
+ ContextSensitivityInfo(_currentDecision, configs, _input, startIndex, stopIndex)
144
+ );
145
+ }
146
+ ParserATNSimulator::reportContextSensitivity(dfa, prediction, configs, startIndex, stopIndex);
147
+ }
148
+
149
+ void ProfilingATNSimulator::reportAmbiguity(DFA &dfa, DFAState *D, size_t startIndex, size_t stopIndex, bool exact,
150
+ const BitSet &ambigAlts, ATNConfigSet *configs) {
151
+ size_t prediction;
152
+ if (ambigAlts.count() > 0) {
153
+ prediction = ambigAlts.nextSetBit(0);
154
+ } else {
155
+ prediction = configs->getAlts().nextSetBit(0);
156
+ }
157
+ if (configs->fullCtx && prediction != conflictingAltResolvedBySLL) {
158
+ // Even though this is an ambiguity we are reporting, we can
159
+ // still detect some context sensitivities. Both SLL and LL
160
+ // are showing a conflict, hence an ambiguity, but if they resolve
161
+ // to different minimum alternatives we have also identified a
162
+ // context sensitivity.
163
+ _decisions[_currentDecision].contextSensitivities.push_back(
164
+ ContextSensitivityInfo(_currentDecision, configs, _input, startIndex, stopIndex)
165
+ );
166
+ }
167
+ _decisions[_currentDecision].ambiguities.push_back(
168
+ AmbiguityInfo(_currentDecision, configs, ambigAlts, _input, startIndex, stopIndex, configs->fullCtx)
169
+ );
170
+ ParserATNSimulator::reportAmbiguity(dfa, D, startIndex, stopIndex, exact, ambigAlts, configs);
171
+ }
172
+
173
+ std::vector<DecisionInfo> ProfilingATNSimulator::getDecisionInfo() const {
174
+ return _decisions;
175
+ }
176
+
177
+ DFAState* ProfilingATNSimulator::getCurrentState() const {
178
+ return _currentState;
179
+ }