ocat-lang
Version:
A programming language for the web design and development
59 lines (58 loc) • 1.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.rund = rund;
exports.init = init;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const runner_1 = require("./runner/");
const memory_1 = require("./memory");
const error_1 = require("./error");
function rund(test, dev, content) {
if (test) {
console.time("Lexer");
}
const tokens = (0, runner_1.tokenize)(content);
if (dev) {
console.log(tokens);
}
if (test) {
console.timeEnd("Lexer");
console.time("Parser");
}
const nodes = (0, runner_1.parse)(tokens);
if (dev) {
console.log(nodes);
}
if (test) {
console.timeEnd("Parser");
console.time("Runner");
}
const memory = (0, runner_1.run)(nodes);
if (test) {
console.timeEnd("Runner");
}
return memory;
}
function init(test, dev, fileName) {
if (test) {
console.time("Start");
}
if (!fileName || !fileName.endsWith(".ocat")) {
console.error("Please provide a valid file name.");
process.exit(1);
}
const filePath = path_1.default.join(process.cwd(), fileName);
// @Flag
let memory = new memory_1.Memory();
if (!fs_1.default.existsSync(filePath)) {
new error_1.CustomError(`File ${fileName} not found.`, error_1.ErrorType.RuntimeError).display(0);
}
fs_1.default.readFile(filePath, "utf8", (err, data) => (memory = rund(test, dev, data)));
if (test) {
console.timeEnd("Start");
}
return memory;
}