Beispiel #1
0
        protected internal virtual void PerformGrammarAnalysis(CodeGenerator generator,
                                                               Grammar grammar)
        {
            // Build NFAs from the grammar AST
            grammar.BuildNFA();

            // Create the DFA predictors for each decision
            grammar.CreateLookaheadDFAs();
        }
Beispiel #2
0
 public void TestFiniteCommonLeftPrefixes()
 {
     Grammar g = new Grammar(
             "lexer grammar t;\n" +
             "A : 'a' 'b' | 'a' 'c' | 'd' 'e' ;" );
     g.BuildNFA();
     g.CreateLookaheadDFAs( false );
     DFA dfa = g.GetLookaheadDFA( 1 );
     checkPrediction( dfa, "ab", 1 );
     checkPrediction( dfa, "ac", 2 );
     checkPrediction( dfa, "de", 3 );
     checkPrediction( dfa, "q", NFA.INVALID_ALT_NUMBER );
 }
Beispiel #3
0
 public void TestSets()
 {
     Grammar g = new Grammar(
             "lexer grammar t;\n" +
             "A : {;}'a'..'z' | ';' | '0'..'9' ;" );
     g.BuildNFA();
     g.CreateLookaheadDFAs( false );
     DFA dfa = g.GetLookaheadDFA( 1 );
     checkPrediction( dfa, "a", 1 );
     checkPrediction( dfa, "q", 1 );
     checkPrediction( dfa, "z", 1 );
     checkPrediction( dfa, ";", 2 );
     checkPrediction( dfa, "9", 3 );
 }
Beispiel #4
0
        public void TestFiniteCommonLeftPrefixes() /*throws Exception*/
        {
            Grammar g = new Grammar(
                "lexer grammar t;\n" +
                "A : 'a' 'b' | 'a' 'c' | 'd' 'e' ;");

            g.BuildNFA();
            g.CreateLookaheadDFAs(false);
            DFA dfa = g.GetLookaheadDFA(1);

            checkPrediction(dfa, "ab", 1);
            checkPrediction(dfa, "ac", 2);
            checkPrediction(dfa, "de", 3);
            checkPrediction(dfa, "q", NFA.INVALID_ALT_NUMBER);
        }
Beispiel #5
0
        public void TestSimpleAltCharTest() /*throws Exception*/
        {
            Grammar g = new Grammar(
                "lexer grammar t;\n" +
                "A : {;}'a' | 'b' | 'c';");

            g.BuildNFA();
            g.CreateLookaheadDFAs(false);
            DFA dfa = g.GetLookaheadDFA(1);

            checkPrediction(dfa, "a", 1);
            checkPrediction(dfa, "b", 2);
            checkPrediction(dfa, "c", 3);
            checkPrediction(dfa, "d", NFA.INVALID_ALT_NUMBER);
        }
Beispiel #6
0
        public void TestSimpleLoops() /*throws Exception*/
        {
            Grammar g = new Grammar(
                "lexer grammar t;\n" +
                "A : (DIGIT)+ '.' DIGIT | (DIGIT)+ ;\n" +
                "fragment DIGIT : '0'..'9' ;\n");

            g.BuildNFA();
            g.CreateLookaheadDFAs(false);
            DFA dfa = g.GetLookaheadDFA(3);

            checkPrediction(dfa, "32", 2);
            checkPrediction(dfa, "999.2", 1);
            checkPrediction(dfa, ".2", NFA.INVALID_ALT_NUMBER);
        }
Beispiel #7
0
        public void TestSets() /*throws Exception*/
        {
            Grammar g = new Grammar(
                "lexer grammar t;\n" +
                "A : {;}'a'..'z' | ';' | '0'..'9' ;");

            g.BuildNFA();
            g.CreateLookaheadDFAs(false);
            DFA dfa = g.GetLookaheadDFA(1);

            checkPrediction(dfa, "a", 1);
            checkPrediction(dfa, "q", 1);
            checkPrediction(dfa, "z", 1);
            checkPrediction(dfa, ";", 2);
            checkPrediction(dfa, "9", 3);
        }
Beispiel #8
0
        protected internal virtual void PerformGrammarAnalysis( CodeGenerator generator,
                                              Grammar grammar )
        {
            // Build NFAs from the grammar AST
            grammar.BuildNFA();

            // Create the DFA predictors for each decision
            grammar.CreateLookaheadDFAs();
        }
Beispiel #9
0
 public void TestSimpleAltCharTest()
 {
     Grammar g = new Grammar(
             "lexer grammar t;\n" +
             "A : {;}'a' | 'b' | 'c';" );
     g.BuildNFA();
     g.CreateLookaheadDFAs( false );
     DFA dfa = g.GetLookaheadDFA( 1 );
     checkPrediction( dfa, "a", 1 );
     checkPrediction( dfa, "b", 2 );
     checkPrediction( dfa, "c", 3 );
     checkPrediction( dfa, "d", NFA.INVALID_ALT_NUMBER );
 }
Beispiel #10
0
 public void TestSimpleLoops()
 {
     Grammar g = new Grammar(
             "lexer grammar t;\n" +
             "A : (DIGIT)+ '.' DIGIT | (DIGIT)+ ;\n" +
             "fragment DIGIT : '0'..'9' ;\n" );
     g.BuildNFA();
     g.CreateLookaheadDFAs( false );
     DFA dfa = g.GetLookaheadDFA( 3 );
     checkPrediction( dfa, "32", 2 );
     checkPrediction( dfa, "999.2", 1 );
     checkPrediction( dfa, ".2", NFA.INVALID_ALT_NUMBER );
 }