public AstNode Parse(CompilerContext context, SourceFile source)
{
_context = context;
int start = Environment.TickCount;
Scanner.Prepare(context, source);
IEnumerable<Token> tokenStream = Scanner.BeginScan();
//chain all token filters
foreach (TokenFilter filter in Grammar.TokenFilters) {
tokenStream = filter.BeginFiltering(context, tokenStream);
}
//finally, parser takes token stream and produces root Ast node
AstNode rootNode = Parser.Parse(context, tokenStream);
_compileTime = Environment.TickCount - start;
return rootNode;
}