public bool Compile() { try { ANTLRStringStream stream = new ANTLRStringStream(_source); TigerLexer lexer = new TigerLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); TigerParser parser = new TigerParser(tokens); AbstractSyntax.Expression result = parser.program(); if (ErrorList.Count > 0) return false; Mips.MipsFrame frame = new Mips.MipsFrame(); FindEscape.FindEscape escape = new FindEscape.FindEscape(); try { escape.Find(result); } catch { } Semantics.Semantics semantics = new Semantics.Semantics(frame); Translate.Frag frag = semantics.TranslateProgram(result); if (ErrorList.Count > 0) return false; using (_writer = File.CreateText(_output)) { for (Translate.Frag f = frag; f != null; f = f.Next) { if (f is Translate.ProcFrag) { EmitProcess(f as Translate.ProcFrag); } else { _writer.WriteLine((f as Translate.DataFrag).Data); } } if (File.Exists(_runtime)) { _writer.WriteLine(File.ReadAllText(_runtime)); } else { throw new FatalError("mips runtime library not found"); } } } catch { return false; } if (ErrorList.Count > 0) return false; else return true; }
public bool Compile() { try { ANTLRStringStream stream = new ANTLRStringStream(_source); TigerLexer lexer = new TigerLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); TigerParser parser = new TigerParser(tokens); AbstractSyntax.Expression result = parser.program(); if (ErrorList.Count > 0) { return(false); } Mips.MipsFrame frame = new Mips.MipsFrame(); FindEscape.FindEscape escape = new FindEscape.FindEscape(); try { escape.Find(result); } catch { } Semantics.Semantics semantics = new Semantics.Semantics(frame); Translate.Frag frag = semantics.TranslateProgram(result); if (ErrorList.Count > 0) { return(false); } using (_writer = File.CreateText(_output)) { for (Translate.Frag f = frag; f != null; f = f.Next) { if (f is Translate.ProcFrag) { EmitProcess(f as Translate.ProcFrag); } else { _writer.WriteLine((f as Translate.DataFrag).Data); } } if (File.Exists(_runtime)) { _writer.WriteLine(File.ReadAllText(_runtime)); } else { throw new FatalError("mips runtime library not found"); } } } catch { return(false); } if (ErrorList.Count > 0) { return(false); } else { return(true); } }