Antlr3.Tool.Grammar.GetLeftRecursiveRules C# (CSharp) Method

GetLeftRecursiveRules() public method

public GetLeftRecursiveRules ( ) : HashSet
return HashSet
        public virtual HashSet<Rule> GetLeftRecursiveRules()
        {
            if ( nfa == null )
            {
                BuildNFA();
            }
            if ( leftRecursiveRules != null )
            {
                return leftRecursiveRules;
            }
            sanity.CheckAllRulesForLeftRecursion();
            return leftRecursiveRules;
        }

Usage Example

        public void TestIndirectRecursionLoop3()
        {
            Grammar g = new Grammar(
                "parser grammar t;\n" +
                "s : a ;\n" +
                "a : i b X ;\n" + // should see through i
                "b : a B ;\n" +
                "i : ;\n" +
                "d : e ;\n" +
                "e : d ;\n" );

            DecisionProbe.verbose = true; // make sure we get all error info
            ErrorQueue equeue = new ErrorQueue();
            ErrorManager.SetErrorListener( equeue );

            var leftRecursive = g.GetLeftRecursiveRules();
            var expectedRules = new HashSet<string>() { "a", "b", "d", "e" };

            Assert.IsTrue( expectedRules.SequenceEqual( ruleNames( leftRecursive ) ) );

            Assert.AreEqual(1, equeue.errors.Count);
            Message msg = equeue.errors[0];
            Assert.IsTrue(msg is LeftRecursionCyclesMessage, "expecting left recursion cycles; found " + msg.GetType().Name);
            LeftRecursionCyclesMessage cyclesMsg = (LeftRecursionCyclesMessage)msg;

            // cycle of [a, b]
            ICollection result = cyclesMsg.cycles;
            var expecting = new HashSet<string>() { "a", "b", "d", "e" };

            Assert.IsTrue( expecting.SequenceEqual( ruleNames2( result ) ) );
        }
All Usage Examples Of Antlr3.Tool.Grammar::GetLeftRecursiveRules
Grammar