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(); } }