- symbol("let").handler = lambda_handler;
- symbol("=").handler = branch_handler;
- symbol("in");
- symbol(")").handler = branch_handler;
- symbol("(");
- symbol("\\").handler = lambda_handler;
- symbol("lambda").handler = lambda_handler;
- symbol(".");
-
- var expression = function (in_let) {
- var t, n;
- if (token.id === "\\" || token.id === "lambda") {
- token.value = "lambda";
- t = token;
- advance();
- n = token;
- if (n.arity !== "name") {
- n.error("Expected a variable name.");
- }
- advance();
- if (token.id === "(") {
- t.first = [n];
- advance();
- t.second = expression(false);
- advance(")");
- return t;
- } else {
- t.first = [];
- while (token.arity === "name") {
- t.first.push(n);
- n = token;
- advance();
- }
- if (token.id === ".") {
- t.first.push(n);
- advance();
- t.second = expression(in_let);
- } else if (t.first.length === 1) {
- t.second = n;
- } else {
- t.first.push(n);
- t.error("Can't parse lambda abstract.");
- }
- return t;
- };
- } else {
- n = null;
- while (token.id === "(") {
- advance();
- t = expression(false);
- token.first = n;
- token.second = t;
- n = token;
- advance(")");
- if (in_let && token.id === "let" || token.id === "(end)" || token.id === ")") {
- return n;
- }
- }
- if (token.arity != "name") {
- token.error("Expected a variable name.");
- }
- token.first = n;
- n = token;
- advance();
- while (true) {
- if (in_let && token.id === "in" || token.id === "(end)" || token.id === ")") {
- return n;
- } else if (token.id === "(") {
- advance();
- t = expression(false);
- token.first = n;
- token.second = t;
- n = token;
- advance(")");
- } else {
- if (token.arity != "name") {
- token.error("Expected a variable name.");
- }
- token.first = n;
- n = token;
- advance();
- }
- }
- }
- }
+ symbol("let").handler = lambda_handler;
+ symbol("=").handler = branch_handler;
+ symbol("in");
+ symbol(")").handler = branch_handler;
+ symbol("(");
+ symbol("\\").handler = lambda_handler;
+ symbol("lambda").handler = lambda_handler;
+ symbol(".");
+
+ var expression = function (in_let) {
+ var t, n;
+ if (token.id === "\\" || token.id === "lambda") {
+ token.value = "lambda";
+ t = token;
+ advance();
+ n = token;
+ if (n.arity !== "name") {
+ n.error("Expected a variable name.");
+ }
+ advance();
+ if (token.id === "(") {
+ t.first = [n];
+ advance();
+ t.second = expression(false);
+ advance(")");
+ return t;
+ } else {
+ t.first = [];
+ while (token.arity === "name") {
+ t.first.push(n);
+ n = token;
+ advance();
+ }
+ if (token.id === ".") {
+ t.first.push(n);
+ advance();
+ t.second = expression(in_let);
+ } else if (t.first.length === 1) {
+ t.second = n;
+ } else {
+ t.first.push(n);
+ t.error("Can't parse lambda abstract.");
+ }
+ return t;
+ }
+ } else {
+ n = null;
+ while (token.id === "(") {
+ advance();
+ t = expression(false);
+ token.first = n;
+ token.second = t;
+ n = token;
+ advance(")");
+ if (in_let && token.id === "let" || token.id === "(end)" || token.id === ")") {
+ return n;
+ }
+ }
+ if (token.arity !== "name") {
+ token.error("Expected a variable name.");
+ }
+ token.first = n;
+ n = token;
+ advance();
+ while (true) {
+ if (in_let && token.id === "in" || token.id === "(end)" || token.id === ")") {
+ return n;
+ } else if (token.id === "(") {
+ advance();
+ t = expression(false);
+ token.first = n;
+ token.second = t;
+ n = token;
+ advance(")");
+ } else {
+ if (token.arity !== "name") {
+ token.error("Expected a variable name.");
+ }
+ token.first = n;
+ n = token;
+ advance();
+ }
+ }
+ }
+ };