projects
/
lambda.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tweak lambda evaluator
[lambda.git]
/
code
/
parse.js
diff --git
a/code/parse.js
b/code/parse.js
index
2718218
..
8a4761b
100644
(file)
--- a/
code/parse.js
+++ b/
code/parse.js
@@
-40,8
+40,8
@@
var make_parse = function () {
a = o.arity || "keyword";
}
} else if (a === "number") {
a = o.arity || "keyword";
}
} else if (a === "number") {
- o = symbol_table["(
literal
)"];
- a = "literal";
+ o = symbol_table["(
number
)"];
+
a = "literal";
} else if (a === "operator") {
o = symbol_table[v];
if (!o) {
} else if (a === "operator") {
o = symbol_table[v];
if (!o) {
@@
-126,14
+126,13
@@
var make_parse = function () {
return body;
};
return body;
};
+ var number_handler = function () {
- var itself = function () {
- return this;
};
symbol("(end)");
symbol("(name)").handler = name_handler;
};
symbol("(end)");
symbol("(name)").handler = name_handler;
- symbol("(
literal)").handler = itself
;
+ symbol("(
number)").handler = number_handler
;
symbol("let").handler = lambda_handler;
symbol("=").handler = branch_handler;
symbol("in");
symbol("let").handler = lambda_handler;
symbol("=").handler = branch_handler;
symbol("in");
@@
-149,10
+148,16
@@
var make_parse = function () {
var x = symbol(s);
x.handler = function () {
this.value = symbol_table[this.id].value;
var x = symbol(s);
x.handler = function () {
this.value = symbol_table[this.id].value;
- return this;
+ if (this.first) {
+ return make_app(this.first.handler(), this.value);
+ } else {
+ return this.value;
+ }
};
};
- x.value = v;
+ // constants have their own id and arity = literal
+ // numbers have id = "(number)" and arity = literal
x.arity = "literal";
x.arity = "literal";
+ x.value = v;
return x;
};
return x;
};