use of org.antlr.v4.runtime.atn.DecisionInfo in project antlr4 by antlr.
the class TestAmbigParseTrees method testAmbiguousTrees.
public void testAmbiguousTrees(LexerGrammar lg, Grammar g, String startRule, String input, int decision, String expectedAmbigAlts, String overallTree, String[] expectedParseTrees) {
InterpreterTreeTextProvider nodeTextProvider = new InterpreterTreeTextProvider(g.getRuleNames());
LexerInterpreter lexEngine = lg.createLexerInterpreter(new ANTLRInputStream(input));
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
final GrammarParserInterpreter parser = g.createGrammarParserInterpreter(tokens);
parser.setProfile(true);
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);
// PARSE
int ruleIndex = g.rules.get(startRule).index;
ParserRuleContext parseTree = parser.parse(ruleIndex);
assertEquals(overallTree, Trees.toStringTree(parseTree, nodeTextProvider));
System.out.println();
DecisionInfo[] decisionInfo = parser.getParseInfo().getDecisionInfo();
List<AmbiguityInfo> ambiguities = decisionInfo[decision].ambiguities;
assertEquals(1, ambiguities.size());
AmbiguityInfo ambiguityInfo = ambiguities.get(0);
List<ParserRuleContext> ambiguousParseTrees = GrammarParserInterpreter.getAllPossibleParseTrees(g, parser, tokens, decision, ambiguityInfo.ambigAlts, ambiguityInfo.startIndex, ambiguityInfo.stopIndex, ruleIndex);
assertEquals(expectedAmbigAlts, ambiguityInfo.ambigAlts.toString());
assertEquals(ambiguityInfo.ambigAlts.cardinality(), ambiguousParseTrees.size());
for (int i = 0; i < ambiguousParseTrees.size(); i++) {
ParserRuleContext t = ambiguousParseTrees.get(i);
assertEquals(expectedParseTrees[i], Trees.toStringTree(t, nodeTextProvider));
}
}
use of org.antlr.v4.runtime.atn.DecisionInfo in project antlr4 by antlr.
the class TestLookaheadTrees method testLookaheadTrees.
public void testLookaheadTrees(LexerGrammar lg, Grammar g, String input, String startRuleName, int decision, String[] expectedTrees) {
int startRuleIndex = g.getRule(startRuleName).index;
InterpreterTreeTextProvider nodeTextProvider = new InterpreterTreeTextProvider(g.getRuleNames());
LexerInterpreter lexEngine = lg.createLexerInterpreter(new ANTLRInputStream(input));
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
GrammarParserInterpreter parser = g.createGrammarParserInterpreter(tokens);
parser.setProfile(true);
ParseTree t = parser.parse(startRuleIndex);
DecisionInfo decisionInfo = parser.getParseInfo().getDecisionInfo()[decision];
LookaheadEventInfo lookaheadEventInfo = decisionInfo.SLL_MaxLookEvent;
List<ParserRuleContext> lookaheadParseTrees = GrammarParserInterpreter.getLookaheadParseTrees(g, parser, tokens, startRuleIndex, lookaheadEventInfo.decision, lookaheadEventInfo.startIndex, lookaheadEventInfo.stopIndex);
assertEquals(expectedTrees.length, lookaheadParseTrees.size());
for (int i = 0; i < lookaheadParseTrees.size(); i++) {
ParserRuleContext lt = lookaheadParseTrees.get(i);
assertEquals(expectedTrees[i], Trees.toStringTree(lt, nodeTextProvider));
}
}
use of org.antlr.v4.runtime.atn.DecisionInfo in project antlr4 by antlr.
the class TestParserProfiler method testRepeatedLL2.
@Test
public void testRepeatedLL2() throws Exception {
Grammar g = new Grammar("parser grammar T;\n" + "s : ID ';'{}\n" + " | ID '.'\n" + " ;\n", lg);
DecisionInfo[] info = interpAndGetDecisionInfo(lg, g, "s", "xyz;", "abc;");
assertEquals(1, info.length);
String expecting = "{decision=0, contextSensitivities=0, errors=0, ambiguities=0, SLL_lookahead=4, " + "SLL_ATNTransitions=2, SLL_DFATransitions=2, LL_Fallback=0, LL_lookahead=0, LL_ATNTransitions=0}";
assertEquals(expecting, info[0].toString());
}
use of org.antlr.v4.runtime.atn.DecisionInfo in project antlr4 by antlr.
the class TestParserProfiler method interpAndGetDecisionInfo.
public DecisionInfo[] interpAndGetDecisionInfo(LexerGrammar lg, Grammar g, String startRule, String... input) {
LexerInterpreter lexEngine = lg.createLexerInterpreter(null);
ParserInterpreter parser = g.createParserInterpreter(null);
parser.setProfile(true);
for (String s : input) {
lexEngine.reset();
parser.reset();
lexEngine.setInputStream(new ANTLRInputStream(s));
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
parser.setInputStream(tokens);
Rule r = g.rules.get(startRule);
if (r == null) {
return parser.getParseInfo().getDecisionInfo();
}
ParserRuleContext t = parser.parse(r.index);
// try {
// Utils.waitForClose(t.inspect(parser).get());
// }
// catch (Exception e) {
// e.printStackTrace();
// }
//
// System.out.println(t.toStringTree(parser));
}
return parser.getParseInfo().getDecisionInfo();
}
use of org.antlr.v4.runtime.atn.DecisionInfo in project antlr4 by antlr.
the class TestParserProfiler method testContextSensitivity.
@Test
public void testContextSensitivity() throws Exception {
Grammar g = new Grammar("parser grammar T;\n" + "a : '.' e ID \n" + " | ';' e INT ID ;\n" + "e : INT | ;\n", lg);
DecisionInfo[] info = interpAndGetDecisionInfo(lg, g, "a", "; 1 x");
assertEquals(2, info.length);
String expecting = "{decision=1, contextSensitivities=1, errors=0, ambiguities=0, SLL_lookahead=3, SLL_ATNTransitions=2, SLL_DFATransitions=0, LL_Fallback=1, LL_lookahead=3, LL_ATNTransitions=2}";
assertEquals(expecting, info[1].toString());
}
Aggregations