/
index.js
39 lines (36 loc) · 1.05 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env node
const { argv } = require("yargs")
.usage("$0 [-a] [-o] [-i] filename")
.boolean(["a", "o", "i"])
.describe("a", "show abstract syntax tree after parsing then stop")
.describe("o", "do optimizations")
.describe("i", "generate and show the intermediate code then stop")
.default({ target: "javascript" })
.demand(1);
const fs = require("fs");
const util = require("util");
const parse = require("./ast/parser");
const { analyze } = require("./semantics/analyzer");
const optimize = require("./semantics/optimizer");
const generate = require(`./backend/${argv.target}-generator`);
fs.readFile(argv._[0], "utf-8", (error, text) => {
if (error) {
console.error(error);
return;
}
let program = parse(text);
if (argv.a) {
console.log(util.inspect(program, { depth: null }));
return;
}
analyze(program);
if (argv.o) {
optimize(program);
}
if (argv.i) {
console.log(util.inspect(program, { depth: null }));
return;
}
let generatedProgram = generate(program);
console.log(generatedProgram);
});