public Program Parse()
{
var lexer = new AntlrLexer(new ANTLRStringStream(_code));
var tokens = new CommonTokenStream(lexer);
var parser = new AntlrParser(tokens);
parser.TreeAdaptor = new Adapter();
var result = parser.program();
lexer.Errors.ForEach(x => Errors.Add(x));
parser.Errors.ForEach(x => Errors.Add(x));
if (Errors.Any())
return null;
var bridge = new BridgeVisitor(result.Tree);
return bridge.CreateAst();
}
private CodeCompileUnit[] GetCompileUnits() { var compileUnits = new List<CodeCompileUnit>(); foreach (var source in _sources) { var parser = new CodeParser(source); var ast = parser.Parse(); if (parser.Errors.Any()) //antlr parse errors Errors.AddRange(parser.Errors); if (!Errors.Any()) { var generator = new CodeDomGenerator(ast); compileUnits.Add(generator.Generate()); if (generator.Errors.Any()) //Semantic erros Errors.AddRange(generator.Errors); } } return compileUnits.ToArray(); }