public virtual GrammarRootAST Parse(string fileName, ICharStream @in)
{
try
{
GrammarASTAdaptor adaptor = new GrammarASTAdaptor(@in);
ToolANTLRLexer lexer = new ToolANTLRLexer(@in, this);
CommonTokenStream tokens = new CommonTokenStream(lexer);
lexer.tokens = tokens;
ToolANTLRParser p = new ToolANTLRParser(tokens, this);
p.TreeAdaptor = adaptor;
try
{
var r = p.grammarSpec();
GrammarAST root = (GrammarAST)r.Tree;
if (root is GrammarRootAST)
{
((GrammarRootAST)root).hasErrors = lexer.NumberOfSyntaxErrors > 0 || p.NumberOfSyntaxErrors > 0;
Debug.Assert(((GrammarRootAST)root).tokenStream == tokens);
if (grammarOptions != null)
{
((GrammarRootAST)root).cmdLineOptions = grammarOptions;
}
return ((GrammarRootAST)root);
}
}
catch (v3TreeGrammarException e)
{
errMgr.GrammarError(ErrorType.V3_TREE_GRAMMAR, fileName, e.location);
}
return null;
}
catch (RecognitionException)
{
// TODO: do we gen errors now?
ErrorManager.InternalError("can't generate this message at moment; antlr recovers");
}
return null;
}