slige/compiler/main.ts

36 lines
993 B
TypeScript
Raw Normal View History

2024-12-10 20:42:15 +00:00
import { Checker } from "./checker.ts";
2024-12-11 02:11:00 +00:00
import { Reporter } from "./info.ts";
2024-12-10 20:42:15 +00:00
import { Lexer } from "./lexer.ts";
import { Lowerer } from "./lowerer.ts";
import { Parser } from "./parser.ts";
import { Resolver } from "./resolver.ts";
2024-11-04 13:54:55 +00:00
2024-12-11 02:11:00 +00:00
//const text = await Deno.readTextFile("example.slg");
const text = await Deno.readTextFile(Deno.args[0]);
2024-11-04 13:54:55 +00:00
2024-12-11 02:11:00 +00:00
const reporter = new Reporter();
2024-11-20 14:41:20 +00:00
2024-12-11 02:11:00 +00:00
const lexer = new Lexer(text, reporter);
const parser = new Parser(lexer, reporter);
2024-12-10 09:39:12 +00:00
const ast = parser.parseStmts();
2024-12-11 12:03:01 +00:00
2024-12-11 12:16:34 +00:00
// console.log(JSON.stringify(ast, null, 4));
2024-12-11 12:03:01 +00:00
2024-12-11 02:11:00 +00:00
new Resolver(reporter).resolve(ast);
new Checker(reporter).check(ast);
if (reporter.errorOccured()) {
console.error("Errors occurred, stopping compilation.");
Deno.exit(1);
}
2024-12-10 13:36:41 +00:00
const lowerer = new Lowerer();
lowerer.lower(ast);
2024-12-10 22:30:15 +00:00
lowerer.printProgram();
2024-12-10 13:36:41 +00:00
const program = lowerer.finish();
2024-12-10 23:03:19 +00:00
//console.log(JSON.stringify(program, null, 4));
2024-12-12 09:17:09 +00:00
// console.log(JSON.stringify(program));
2024-12-11 02:11:00 +00:00
await Deno.writeTextFile("out.slgbc", JSON.stringify(program));