Antlr4.Analysis.AnalysisPipeline.Process C# (CSharp) Method

Process() public method

public Process ( ) : void
return void
        public virtual void Process()
        {
            // LEFT-RECURSION CHECK
            LeftRecursionDetector lr = new LeftRecursionDetector(g, g.atn);
            lr.Check();
            if (lr.listOfRecursiveCycles.Count > 0)
                return; // bail out

            if (g.IsLexer())
            {
                ProcessLexer();
            }
            else
            {
                // BUILD DFA FOR EACH DECISION
                ProcessParser();
            }
        }

Usage Example

Example #1
0
        public virtual void ProcessNonCombinedGrammar(Grammar g, bool gencode)
        {
            if (g.ast == null || g.ast.hasErrors)
                return;
            if (internalOption_PrintGrammarTree)
                System.Console.WriteLine(g.ast.ToStringTree());

            bool ruleFail = CheckForRuleIssues(g);
            if (ruleFail)
                return;

            int prevErrors = errMgr.GetNumErrors();
            // MAKE SURE GRAMMAR IS SEMANTICALLY CORRECT (FILL IN GRAMMAR OBJECT)
            SemanticPipeline sem = new SemanticPipeline(g);
            sem.Process();

            if (errMgr.GetNumErrors() > prevErrors)
                return;

            // BUILD ATN FROM AST
            ATNFactory factory;
            if (g.IsLexer())
                factory = new LexerATNFactory((LexerGrammar)g);
            else
                factory = new ParserATNFactory(g);
            g.atn = factory.CreateATN();

            if (generate_ATN_dot)
                GenerateATNs(g);

            // PERFORM GRAMMAR ANALYSIS ON ATN: BUILD DECISION DFAs
            AnalysisPipeline anal = new AnalysisPipeline(g);
            anal.Process();

            //if ( generate_DFA_dot ) generateDFAs(g);

            if (g.tool.GetNumErrors() > prevErrors)
                return;

            // GENERATE CODE
            if (gencode)
            {
                CodeGenPipeline gen = new CodeGenPipeline(g);
                gen.Process();
            }
        }