Files
nub-lang/compiler/Program.cs
nub31 f035499ba7 ...
2026-02-09 15:20:29 +01:00

56 lines
1.4 KiB
C#

using System.Diagnostics;
using Compiler;
foreach (var fileName in args)
{
var file = File.ReadAllText(fileName);
var tokens = Tokenizer.Tokenize(fileName, file, out var tokenizerDiagnostics);
foreach (var diagnostic in tokenizerDiagnostics)
{
DiagnosticFormatter.Print(diagnostic, Console.Error);
}
if (tokenizerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{
return 1;
}
var ast = Parser.Parse(fileName, tokens, out var parserDiagnostics);
foreach (var diagnostic in parserDiagnostics)
{
DiagnosticFormatter.Print(diagnostic, Console.Error);
}
if (parserDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{
return 1;
}
var typedAst = TypeChecker.Check(fileName, ast, out var typeCheckerDiagnostics);
foreach (var diagnostic in typeCheckerDiagnostics)
{
DiagnosticFormatter.Print(diagnostic, Console.Error);
}
if (typeCheckerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{
return 1;
}
var output = Generator.Emit(typedAst);
Directory.Delete(".build", recursive: true);
Directory.CreateDirectory(".build");
var outFilePath = Path.Combine(".build", Path.ChangeExtension(fileName, "c"));
File.WriteAllText(outFilePath, output);
Process.Start("gcc", ["-Og", "-g", "-c", "-o", Path.ChangeExtension(outFilePath, "o"), outFilePath]);
}
return 0;