public CParser CreateParser(string code) { ICharStream stream = CharStreams.fromstring(code); var lexer = new CLexer(stream); lexer.AddErrorListener(new ThrowExceptionErrorListener()); ITokenStream tokens = new CommonTokenStream(lexer); var parser = new CParser(tokens); parser.BuildParseTree = true; parser.RemoveErrorListeners(); parser.AddErrorListener(new ThrowExceptionErrorListener()); return(parser); }
public string Compile(ICharStream cSource) { CLexer lexer = new CLexer(cSource); CommonTokenStream tokens = new CommonTokenStream(lexer); CParser parser = new CParser(tokens); parser.RemoveErrorListeners(); parser.AddErrorListener(this); try { CParser.CompilationUnitContext compilationUnit = parser.compilationUnit(); ParseTreeWalker walker = new ParseTreeWalker(); walker.Walk(this, compilationUnit); string idents = ""; foreach (CIdentifier ident in CIdentifier.FileScopeIdentifiers) { if (ident.Name.Equals("main")) { idents = ident.Emit() + idents; } else { idents += ident.Emit(); } } return(idents); } catch (SemanticException e) { m_outStream.WriteLine("Compilation Failed: " + e.Message); return(null); } }