public static string Compile(string input) { Console.Write("# Parsing {0}: ", input); FunctionDecl main; using (var file = new FileStream(input, FileMode.Open)) { var scanner = new Scanner(file); var parser = new Parser(scanner); if (!parser.Parse()) { Console.WriteLine("Not OK :("); throw new ArgumentException("Input is not valid..."); } Console.WriteLine("OK"); main = parser.Prog; } Console.Write("# Type checking {0}: ", input); var tcv = new TypecheckVisitor(); main.Accept(tcv); Console.WriteLine("OK"); Console.Write("# Return checking {0}: ", input); var rcv = new ReturnCheckVisitor(); main.Accept(rcv); Console.WriteLine("OK"); Console.WriteLine("# Contents of {0}:", input); var toStringVisitor = new ToStringVisitor(); main.Accept(toStringVisitor); Console.Write(toStringVisitor.Result); var prefix = input.Substring(0, input.LastIndexOf('.')); Console.Write("# Compiling {0} into {1}: ", input, prefix + ".exe"); var cecilVisitor = new CecilVisitor(tcv.Assembly, tcv.Module); main.Accept(cecilVisitor); cecilVisitor.Write(prefix); Console.WriteLine("OK"); Console.Out.Flush(); return(prefix + ".exe"); }
public static string Compile(string input) { Console.Write("# Parsing {0}: ", input); FunctionDecl main; using (var file = new FileStream(input, FileMode.Open)) { var scanner = new Scanner(file); var parser = new Parser(scanner); if (!parser.Parse()) { Console.WriteLine("Not OK :("); throw new ArgumentException("Input is not valid..."); } Console.WriteLine("OK"); main = parser.Prog; } Console.Write("# Type checking {0}: ", input); var tcv = new TypecheckVisitor(); main.Accept(tcv); Console.WriteLine("OK"); Console.Write("# Return checking {0}: ", input); var rcv = new ReturnCheckVisitor(); main.Accept(rcv); Console.WriteLine("OK"); Console.WriteLine("# Contents of {0}:", input); var toStringVisitor = new ToStringVisitor(); main.Accept(toStringVisitor); Console.Write(toStringVisitor.Result); var prefix = input.Substring(0, input.LastIndexOf('.')); Console.Write("# Compiling {0} into {1}: ", input, prefix + ".exe"); var cecilVisitor = new CecilVisitor(tcv.Assembly, tcv.Module); main.Accept(cecilVisitor); cecilVisitor.Write(prefix); Console.WriteLine("OK"); Console.Out.Flush(); return prefix + ".exe"; }