const Compiler = require('./compiler') const Env = require('./env') const Evaluator = require('./evaluator') const Lexer = require('./lexer') const OsloError = require('./osloError') const Parser = require('./parser') module.exports = function oslo(source, context) { const lexer = new Lexer() const tokens = lexer.scan(source) const parser = new Parser() const tree = parser.parse(tokens) if (tree.constructor == OsloError) { return tree } const evaluator = new Evaluator() const evaluatedTree = evaluator.eval(tree, new Env()) if (evaluatedTree.constructor == OsloError) { return evaluatedTree } const compiler = new Compiler() return compiler.compile(evaluatedTree) }