unfuck
Version:
A brainfuck to Javascript compiler with optimizations.
44 lines (36 loc) • 1.02 kB
JavaScript
var prepare = require('./steps/prepare');
var analyse = require('./steps/analyse');
var optimise = require('./steps/optimise');
var convert = require('./steps/convert');
var wrap = require('./steps/wrap');
var initSettings = {
language: "standard",
target: "simple-es6",
type: Uint8Array,
width: 10240,
in: String,
out: String
}
module.exports = {
compiler ( settings ) {
this.settings = Object.assign({}, initSettings);
this.settings = Object.assign(this.settings, settings);
this.compile = function ( rawBf ) {
var bf = prepare(this.settings, rawBf);
var ast = analyse(this.settings, bf);
ast = optimise(this.settings, ast);
var raw = convert(this.settings, ast);
var out = wrap(this.settings, raw);
return {
bf, ast, out
};
}
this.use = function ( bf ) {
return eval(this.compile(bf).out);
}
this.run = function ( bf, ...params ) {
return this.use(bf)(...params);
}
return this;
}
}