public virtual Grammar CreateGrammar(GrammarRootAST ast)
{
Grammar g;
if (ast.grammarType == ANTLRParser.LEXER)
g = new LexerGrammar(this, ast);
else
g = new Grammar(this, ast);
// ensure each node has pointer to surrounding grammar
GrammarTransformPipeline.SetGrammarPtr(g, ast);
return g;
}