Search in sources :

Example 86 with DFA

use of org.antlr.v4.runtime.dfa.DFA in project antlr4 by antlr.

the class TestATNParserPrediction method testLL1Ambig.

@Test
public void testLL1Ambig() throws Exception {
    LexerGrammar lg = new LexerGrammar("lexer grammar L;\n" + "A : 'a' ;\n" + "B : 'b' ;\n" + "C : 'c' ;\n");
    Grammar g = new Grammar("parser grammar T;\n" + "a : A | A | A B ;");
    int decision = 0;
    checkPredictedAlt(lg, g, decision, "a", 1);
    checkPredictedAlt(lg, g, decision, "ab", 3);
    // After matching these inputs for decision, what is DFA after each prediction?
    String[] inputs = { "a", "ab", "ab" };
    String[] dfa = { "s0-'a'->s1\n" + "s1-EOF->:s2^=>1\n", "s0-'a'->s1\n" + "s1-EOF->:s2^=>1\n" + "s1-'b'->:s3=>3\n", "s0-'a'->s1\n" + "s1-EOF->:s2^=>1\n" + "s1-'b'->:s3=>3\n" };
    checkDFAConstruction(lg, g, decision, inputs, dfa);
}
Also used : Grammar(org.antlr.v4.tool.Grammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) Test(org.junit.Test)

Example 87 with DFA

use of org.antlr.v4.runtime.dfa.DFA in project antlr4 by antlr.

the class TestATNParserPrediction method checkDFAConstruction.

public void checkDFAConstruction(LexerGrammar lg, Grammar g, int decision, String[] inputString, String[] dfaString) {
    // Tool.internalOption_ShowATNConfigsInDFA = true;
    ATN lexatn = createATN(lg, true);
    LexerATNSimulator lexInterp = new LexerATNSimulator(lexatn, new DFA[] { new DFA(lexatn.getDecisionState(Lexer.DEFAULT_MODE)) }, new PredictionContextCache());
    semanticProcess(lg);
    g.importVocab(lg);
    semanticProcess(g);
    ParserInterpreterForTesting interp = new ParserInterpreterForTesting(g, null);
    for (int i = 0; i < inputString.length; i++) {
        // Check DFA
        IntegerList types = getTokenTypesViaATN(inputString[i], lexInterp);
        // System.out.println(types);
        TokenStream input = new MockIntTokenStream(types);
        try {
            interp.adaptivePredict(input, decision, ParserRuleContext.EMPTY);
        } catch (NoViableAltException nvae) {
            nvae.printStackTrace(System.err);
        }
        DFA dfa = interp.parser.decisionToDFA[decision];
        assertEquals(dfaString[i], dfa.toString(g.getVocabulary()));
    }
}
Also used : MockIntTokenStream(org.antlr.v4.test.runtime.MockIntTokenStream) TokenStream(org.antlr.v4.runtime.TokenStream) NoViableAltException(org.antlr.v4.runtime.NoViableAltException) LexerATNSimulator(org.antlr.v4.runtime.atn.LexerATNSimulator) IntegerList(org.antlr.v4.runtime.misc.IntegerList) MockIntTokenStream(org.antlr.v4.test.runtime.MockIntTokenStream) RuntimeTestUtils.getTokenTypesViaATN(org.antlr.v4.test.runtime.RuntimeTestUtils.getTokenTypesViaATN) ATN(org.antlr.v4.runtime.atn.ATN) PredictionContextCache(org.antlr.v4.runtime.atn.PredictionContextCache) DFA(org.antlr.v4.runtime.dfa.DFA)

Example 88 with DFA

use of org.antlr.v4.runtime.dfa.DFA in project antlr4 by antlr.

the class TestATNParserPrediction method testLL2Ambig.

@Test
public void testLL2Ambig() throws Exception {
    LexerGrammar lg = new LexerGrammar("lexer grammar L;\n" + "A : 'a' ;\n" + "B : 'b' ;\n" + "C : 'c' ;\n");
    Grammar g = new Grammar("parser grammar T;\n" + "a : A B | A B | A B C ;");
    int decision = 0;
    checkPredictedAlt(lg, g, decision, "ab", 1);
    checkPredictedAlt(lg, g, decision, "abc", 3);
    // After matching these inputs for decision, what is DFA after each prediction?
    String[] inputs = { "ab", "abc", "ab" };
    String[] dfa = { "s0-'a'->s1\n" + "s1-'b'->s2\n" + "s2-EOF->:s3^=>1\n", "s0-'a'->s1\n" + "s1-'b'->s2\n" + "s2-EOF->:s3^=>1\n" + "s2-'c'->:s4=>3\n", "s0-'a'->s1\n" + "s1-'b'->s2\n" + "s2-EOF->:s3^=>1\n" + "s2-'c'->:s4=>3\n" };
    checkDFAConstruction(lg, g, decision, inputs, dfa);
}
Also used : Grammar(org.antlr.v4.tool.Grammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) Test(org.junit.Test)

Example 89 with DFA

use of org.antlr.v4.runtime.dfa.DFA in project antlr4 by antlr.

the class TestATNParserPrediction method testAorB.

@Test
public void testAorB() throws Exception {
    LexerGrammar lg = new LexerGrammar("lexer grammar L;\n" + "A : 'a' ;\n" + "B : 'b' ;\n" + "C : 'c' ;\n");
    Grammar g = new Grammar("parser grammar T;\n" + "a : A{;} | B ;");
    int decision = 0;
    checkPredictedAlt(lg, g, decision, "a", 1);
    checkPredictedAlt(lg, g, decision, "b", 2);
    // After matching these inputs for decision, what is DFA after each prediction?
    String[] inputs = { "a", "b", "a" };
    String[] dfa = { "s0-'a'->:s1=>1\n", "s0-'a'->:s1=>1\n" + "s0-'b'->:s2=>2\n", // don't change after it works
    "s0-'a'->:s1=>1\n" + "s0-'b'->:s2=>2\n" };
    checkDFAConstruction(lg, g, decision, inputs, dfa);
}
Also used : Grammar(org.antlr.v4.tool.Grammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) Test(org.junit.Test)

Example 90 with DFA

use of org.antlr.v4.runtime.dfa.DFA in project antlr4 by antlr.

the class TestATNParserPrediction method testRecursiveLeftPrefixWithAorABIssue.

@Test
public void testRecursiveLeftPrefixWithAorABIssue() throws Exception {
    LexerGrammar lg = new LexerGrammar("lexer grammar L;\n" + "A : 'a' ;\n" + "B : 'b' ;\n" + "C : 'c' ;\n" + "LP : '(' ;\n" + "RP : ')' ;\n" + "INT : '0'..'9'+ ;\n");
    Grammar g = new Grammar("parser grammar T;\n" + "tokens {A,B,C,LP,RP,INT}\n" + "a : e A | e A B ;\n" + "e : LP e RP\n" + "  | INT\n" + "  ;");
    int decision = 0;
    checkPredictedAlt(lg, g, decision, "34a", 1);
    // PEG would miss this one!
    checkPredictedAlt(lg, g, decision, "34ab", 2);
    checkPredictedAlt(lg, g, decision, "((34))a", 1);
    checkPredictedAlt(lg, g, decision, "((34))ab", 2);
    // After matching these inputs for decision, what is DFA after each prediction?
    String[] inputs = { "34a", "34ab", "((34))a", "((34))ab" };
    String[] dfa = { "s0-INT->s1\n" + "s1-'a'->s2\n" + "s2-EOF->:s3=>1\n", "s0-INT->s1\n" + "s1-'a'->s2\n" + "s2-EOF->:s3=>1\n" + "s2-'b'->:s4=>2\n", "s0-'('->s5\n" + "s0-INT->s1\n" + "s1-'a'->s2\n" + "s2-EOF->:s3=>1\n" + "s2-'b'->:s4=>2\n" + "s5-'('->s6\n" + "s6-INT->s7\n" + "s7-')'->s8\n" + "s8-')'->s1\n", "s0-'('->s5\n" + "s0-INT->s1\n" + "s1-'a'->s2\n" + "s2-EOF->:s3=>1\n" + "s2-'b'->:s4=>2\n" + "s5-'('->s6\n" + "s6-INT->s7\n" + "s7-')'->s8\n" + "s8-')'->s1\n" };
    checkDFAConstruction(lg, g, decision, inputs, dfa);
}
Also used : Grammar(org.antlr.v4.tool.Grammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) LexerGrammar(org.antlr.v4.tool.LexerGrammar) Test(org.junit.Test)

Aggregations

DFA (org.antlr.v4.runtime.dfa.DFA)37 DFAState (org.antlr.v4.runtime.dfa.DFAState)28 Test (org.junit.Test)19 Grammar (org.antlr.v4.tool.Grammar)18 LexerGrammar (org.antlr.v4.tool.LexerGrammar)18 LexerATNSimulator (org.antlr.v4.runtime.atn.LexerATNSimulator)16 ArrayList (java.util.ArrayList)14 STGroupString (org.stringtemplate.v4.STGroupString)14 CharStream (org.antlr.v4.runtime.CharStream)13 IOException (java.io.IOException)10 IntegerList (org.antlr.v4.runtime.misc.IntegerList)10 BaseRuntimeTest.antlrOnString (org.antlr.v4.test.runtime.BaseRuntimeTest.antlrOnString)9 InputStream (java.io.InputStream)8 BitSet (java.util.BitSet)8 CommonTokenStream (org.antlr.v4.runtime.CommonTokenStream)7 ATN (org.antlr.v4.runtime.atn.ATN)7 Interval (org.antlr.v4.runtime.misc.Interval)7 NotNull (org.antlr.v4.runtime.misc.NotNull)7 ANTLRInputStream (org.antlr.v4.runtime.ANTLRInputStream)6 ParserRuleContext (org.antlr.v4.runtime.ParserRuleContext)5