An experiment in parentheses-free lisp (in JavaScript)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

42 lines
1.0 KiB

#! /usr/bin/node
var typ = require("./representation.js");
var parse = require("./parse.js");
var tokenizer = require("./tokenize.js");
var pprint = require("./pprint.js");
//var istr = fs.readFileSync('/dev/stdin').toString();
var istr = "(a + b)";
var ast = parse.parseFull(tokenizer.tokenize(istr));
function apply(func, p, environment) {
var full_func = evaluate(func, environment);
return [full_func, evaluate(p, environment)];
}
function evaluateAll(ast, environment) {
var l = ast.length;
var evaled = [];
for (var i = 0; i < l; i++) {
evaled.push(evaluate(ast[i], environment));
}
return evaled;
}
function evaluate(ast, environment) {
if (ast.exprType == "Application") {
return apply(ast.func, ast.p, environment);
}
else if (ast.exprType === "Unary") { /* Unary function application */
return apply(ast.op, ast.val, environment);
}
else if (ast.exprType === "Name") {
return ast.ident;
}
else {
return ast.val;
}
}
console.log("%j", evaluateAll(ast[0], false));