// System.IO.Path.GetTempFileName() private static void Main() { var args = Environment.GetCommandLineArgs(); var parameters = Parameters.parse(args); if (parameters == null) { printHelp(args); return; } if (parameters.outputFile == null) { parameters.outputFile = System.IO.Path.GetTempFileName(); } var inputFile = new FileOrigin(args[1]); try { var parseTree = CSTBuilder.Build(inputFile); Console.WriteLine(parseTree.ToString()); var backendFunctions = new Frontend().FromParseTreeToBackend(parseTree); var backend = new Backend.Backend(); string assemblyFile = parameters.outputFile; if (!parameters.onlyAssembly) { assemblyFile = System.IO.Path.GetTempFileName(); } generateAssemblyFile(assemblyFile, backend.FromFunctionsToNasm(backendFunctions)); if (!parameters.onlyAssembly) { // TODO invoke NASM (using parameters) var nasm = new Process(); nasm.StartInfo.FileName = "nasm"; // take $PATH into account nasm.StartInfo.Arguments = assemblyFile + " -o " + parameters.outputFile; nasm.Start(); nasm.WaitForExit(); } } catch (CSTBuilder.LexerFailure ex) { Console.WriteLine("Syntax error:"); var diagnostics = new SourceDiagnostic(); diagnostics.PrintFragmentInLine(ex.Fragment); } }
public void PrintFragmentInLineTest() { string source = "OK. Error in line 1\nLine 2."; IOriginReader reader = new StringOrigin(source).GetReader(); for (int i = 0; i < 4; i++) { reader.MoveNext(); // 'OK. ' } ILocation locBeg = reader.CurrentLocation; for (int i = 0; i < 5; i++) { reader.MoveNext(); // 'Error' } ILocation locEnd = reader.CurrentLocation; IFragment fr = locBeg.Origin.MakeFragment(locBeg, locEnd); SourceDiagnostic sd = new SourceDiagnostic(); sd.PrintFragmentInLine(fr); }