tweak lambda evaluator
[lambda.git] / code / parse.js
index 2718218..8a4761b 100644 (file)
@@ -40,8 +40,8 @@ var make_parse = function () {
                 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) {
@@ -126,14 +126,13 @@ var make_parse = function () {
         return body;
     };
 
+    var number_handler = function () {
 
-    var itself = function () {
-        return this;
     };
 
     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");
@@ -149,10 +148,16 @@ var make_parse = function () {
                        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.value = v;
                        return x;
                };