|
1 | 1 | #lang crook |
2 | | -{:= A B C D0 D0.A D1 E0 E1 F H0 H1 I J K L} |
| 2 | +{:= A B C D0 D0.A D1 E0 E1 F F.A H0 H1 I J K L} |
3 | 3 | (provide {:> A} Lit {:> E0} Prim0 {:> B} Prim1 {:> F} Prim2 {:> H1} Prim3 |
4 | | - {:> C D0} IfZero {:> D0} If {:> E0} Eof {:> E0} Begin {:> F} Let |
5 | | - {:> F} Var {:> H0} Empty {:> I} Prog {:> I} Defn {:> I} App |
| 4 | + {:> C D0} IfZero {:> D0} If {:> E0} Eof {:> E0} Begin |
| 5 | + {:> F} Let {:> F} Var {:> I} Prog {:> I} Defn {:> I} App |
| 6 | + {:> F.A H} Cond {:> F.A H} Case |
6 | 7 | {:> K} Match {:> K} Box {:> K} Cons {:> K} Conj {:> L} Lam) |
7 | 8 |
|
8 | 9 | {:> I} ;; type Prog = (Prog (Listof Defn) Expr) |
|
14 | 15 | {:> A D0} ;; type Expr = (Lit Integer) |
15 | 16 | {:> D0} ;; type Expr = (Lit Datum) |
16 | 17 | {:> E0} ;; | (Eof) |
17 | | -{:> H0} ;; | (Empty) |
18 | 18 | {:> E0} ;; | (Prim0 Op0) |
19 | 19 | {:> B} ;; | (Prim1 Op1 Expr) |
20 | 20 | {:> F} ;; | (Prim2 Op2 Expr Expr) |
|
23 | 23 | {:> D0} ;; | (If Expr Expr Expr) |
24 | 24 | {:> D0.A D1} |
25 | 25 | ;; | (Cond [Listof CondClause] Expr) |
| 26 | +{:> F.A H0} |
| 27 | + ;; | (Cond [Listof CondClause] Expr) |
26 | 28 | {:> D0.A D1} |
27 | 29 | ;; | (Case Expr [Listof CaseClause] Expr) |
| 30 | +{:> F.A H0} |
| 31 | + ;; | (Case Expr [Listof CaseClause] Expr) |
28 | 32 | {:> E0} ;; | (Begin Expr Expr) |
29 | | -{:> F} ;; | (Let Id Expr Expr) |
| 33 | +{:> F F.A} |
| 34 | + ;; | (Let Id Expr Expr) |
| 35 | +{:> F.A H0} |
| 36 | + ;; | (Let (Listof Id) (Listof Expr) Expr) |
| 37 | +{:> H0} ;; | (Let Id Expr Expr) |
30 | 38 | {:> F} ;; | (Var Id) |
31 | 39 | {:> I L} ;; | (App Id (Listof Expr)) |
32 | 40 | {:> L} ;; | (App Expr (Listof Expr)) |
|
37 | 45 | ;; type CondClause = (Clause Expr Expr) |
38 | 46 | {:> D0.A D1} |
39 | 47 | ;; type CaseClause = (Clause [Listof Datum] Expr) |
| 48 | +{:> F.A H0} |
| 49 | +;; type CondClause = (Clause Expr Expr) |
| 50 | +{:> F.A H0} |
| 51 | +;; type CaseClause = (Clause [Listof Datum] Expr) |
40 | 52 |
|
41 | 53 | {:> F} ;; type Id = Symbol |
42 | 54 | {:> D0} ;; type Datum = Integer |
|
66 | 78 | {:> K} ;; | (Conj Pat Pat) |
67 | 79 |
|
68 | 80 | {:> E0} (struct Eof () #:prefab) |
69 | | -{:> H0} (struct Empty () #:prefab) |
70 | 81 | {:> A D0} (struct Lit (i) #:prefab) |
71 | 82 | {:> D0} (struct Lit (d) #:prefab) |
72 | 83 | {:> E0} (struct Prim0 (p) #:prefab) |
|
77 | 88 | {:> D0} (struct If (e1 e2 e3) #:prefab) |
78 | 89 | {:> E0} (struct Begin (e1 e2) #:prefab) |
79 | 90 | {:> F} (struct Let (x e1 e2) #:prefab) |
| 91 | +{:> F.A H} (struct Cond (cs es el) #:prefab) |
| 92 | +{:> F.A H} (struct Case (e ds es el) #:prefab) |
80 | 93 | {:> F} (struct Var (x) #:prefab) |
81 | 94 | {:> I} (struct App (f es) #:prefab) |
82 | 95 | {:> L} (struct Lam (f xs e) #:prefab) |
|
0 commit comments