MultiSpaccSDK/Transpiler/Transpiler.js

88 lines
1.8 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs');
// idk if this actually will be ever finished
// https://stackoverflow.com/a/32567789
const IsLetter = c => {
console.log(c)
return c.toLowerCase() != c.toUpperCase();
};
const ParseArgv = _ => {
let Argv = process.argv.slice(2);
let Args = {};
for (let i = 0; i < Argv.length; i++) {
let Arg = Argv[i].split("=");
let Left = Arg[0];
let Right = Arg.slice(1).join("=");
Args[Left] = Right;
};
return Args;
};
const FillArgs = Args => {
if (Args["Input"] == undefined) {
console.log("No input file specified.");
process.exit(1);
};
if (Args["Output"] == undefined) {
Args["Output"] = Args["Input"] + ".c";
};
return Args;
};
const ParseArgs = _ => {
let Argv = ParseArgv();
let Args = {};
Object.keys(Argv).forEach(function(e) {
console.log(e)
if (e == "-i") Args["Input"] = Argv[e];
else if (e == "-o") Args["Output"] = Argv[e];
else if (e == "-t") Args["Target"] = Argv[e];
});
return FillArgs(Args);
};
const CheckMethod = (Keyword, Line) => {
if (Line.startsWith(Keyword+" ") || Line.startsWith(Keyword+"\t")) {
return true;
} else {
return false;
}
};
const Transpile = Source => {
let Final = "";
let Lines = Source.split('\n');
for (let i = 0; i < Lines.length; i++) {
let l = Lines[i];
let lt = l.trim();
console.log(lt);
if (CheckMethod("if", lt)) {
}
else if (CheckMethod("elif", lt)) {
}
else if (CheckMethod("else", lt)) {
}
else if (CheckMethod("for", lt)) {
}
else if (CheckMethod("while", lt)) {
}
else if (IsLetter(lt[0])) {
}
else {
console.log("Unknown statement at line "+i);
}
}
return Final;
}
const Main = _ => {
let Args = ParseArgs();
console.log(Args);
let Source = fs.readFileSync(Args["Input"], 'utf8');
let Final = Transpile(Source);
};
Main();