This commit is contained in:
nub31
2026-02-09 15:20:29 +01:00
parent 3e3757a402
commit f035499ba7
2 changed files with 51 additions and 42 deletions

2
compiler/.gitignore vendored
View File

@@ -1,4 +1,4 @@
.idea .idea
bin bin
obj obj
out.c .build

View File

@@ -1,47 +1,56 @@
using Compiler; using System.Diagnostics;
using Compiler;
const string fileName = "test.nub"; foreach (var fileName in args)
var file = File.ReadAllText(fileName);
var tokens = Tokenizer.Tokenize(fileName, file, out var tokenizerDiagnostics);
foreach (var diagnostic in tokenizerDiagnostics)
{ {
var file = File.ReadAllText(fileName);
var tokens = Tokenizer.Tokenize(fileName, file, out var tokenizerDiagnostics);
foreach (var diagnostic in tokenizerDiagnostics)
{
DiagnosticFormatter.Print(diagnostic, Console.Error); DiagnosticFormatter.Print(diagnostic, Console.Error);
} }
if (tokenizerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error)) if (tokenizerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{ {
return 1; return 1;
} }
var ast = Parser.Parse(fileName, tokens, out var parserDiagnostics); var ast = Parser.Parse(fileName, tokens, out var parserDiagnostics);
foreach (var diagnostic in parserDiagnostics) foreach (var diagnostic in parserDiagnostics)
{ {
DiagnosticFormatter.Print(diagnostic, Console.Error); DiagnosticFormatter.Print(diagnostic, Console.Error);
} }
if (parserDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error)) if (parserDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{ {
return 1; return 1;
} }
var typedAst = TypeChecker.Check(fileName, ast, out var typeCheckerDiagnostics); var typedAst = TypeChecker.Check(fileName, ast, out var typeCheckerDiagnostics);
foreach (var diagnostic in typeCheckerDiagnostics) foreach (var diagnostic in typeCheckerDiagnostics)
{ {
DiagnosticFormatter.Print(diagnostic, Console.Error); DiagnosticFormatter.Print(diagnostic, Console.Error);
} }
if (typeCheckerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error)) if (typeCheckerDiagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
{ {
return 1; 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]);
} }
var output = Generator.Emit(typedAst);
File.WriteAllText("out.c", output);
return 0; return 0;