-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtranspiler.js
36 lines (28 loc) · 943 Bytes
/
transpiler.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
const jison = require("jison");
const fs = require('fs');
const bnf = fs.readFileSync("grammar.jison", "utf8");
const parserTruOne = new jison.Parser(bnf);
const source = parserTruOne.generate();
fs.writeFile("./interpreterSource.js", source, function(err) {
if(err) {
return console.log(err);
}
console.log("Interpreter source was saved!");
const parser = require('./interpreterSource.js').parser;
const Transpiler = require('./generator.js');
if (process.argv[2]) {
const fileName = process.argv[2];
const ext = fileName.split('.');
if (ext.length > 0 && ext[ext.length - 1] === 'sj') {
const data = fs.readFileSync(fileName, 'utf-8');
const AST = parser.parse(data);
console.log(JSON.stringify(AST))
const code = Transpiler.getJSCode(AST);
fs.writeFileSync(fileName + '.js', code);
} else {
console.log('File must have sj extension');
}
} else {
console.log('You must specify a file');
}
});