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