- } 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();
- }
- }
- }
+ x.arity = "literal";
+ x.value = v;
+ return x;
+ };
+
+ constant("S", make_lam3(u, v, x, make_app3(uu, xx, make_app(vv, xx))));
+ constant("K", make_lam2(u, v, uu));
+ constant("I", make_lam(x, xx));
+ constant("B", make_lam3(u, v, x, make_app(uu, make_app(vv, xx))));
+ constant("C", make_lam3(u, v, x, make_app3(uu, xx, vv)));
+
+ // trush \uv.vu = CI = box
+ constant("T", make_lam2(u, v, make_app(vv, uu)));
+ // vireo \uvw.wuv = pair
+ constant("V", make_lam3(u, v, x, make_app3(xx, uu, vv)));
+ // warbler \uv.uvv = C(BM(BBT) = C(BS(C(BBI)I))I
+ constant("W", make_lam2(u, v, make_app3(uu, vv, vv)));
+ // mockingbird \u.uu = SII = omega
+ constant("M", make_lam(u, make_app(uu, uu)));
+ // lark \uv.u(vv) = CBM = BWB
+ constant("L", make_lam2(u, v, make_app(uu, make_app(vv, vv))));
+ // Y is SLL
+