@@ -37,13 +37,13 @@ toplevel :
37
37
38
38
Program :
39
39
| Expr SEMISEMI { Exp $ 1 }
40
- | start= LET x= ID params= list (Param ) u= LetTypeAnnot EQ e= Expr SEMISEMI {
40
+ | start= LET x= ID params= list (Param ) u= Let_type_annot EQ e= Expr SEMISEMI {
41
41
let r = join_range start (range_of_exp e) in
42
42
let e = match u with None -> e | Some u -> AscExp (range_of_exp e, e, u) in
43
43
let e = List. fold_right (fun (x , u ) e -> FunExp (r, x.value, u, e)) params e in
44
44
LetDecl (x.value, ref [] , e)
45
45
}
46
- | start= LET REC x= ID params= nonempty_list(Param ) u2= LetRecTypeAnnot EQ e= Expr SEMISEMI {
46
+ | start= LET REC x= ID params= nonempty_list(Param ) u2= Let_rec_type_annot EQ e= Expr SEMISEMI {
47
47
let r = join_range start (range_of_exp e) in
48
48
match params with
49
49
| [] -> LetDecl (x.value, ref [] , AscExp (r, e, u2))
@@ -54,13 +54,13 @@ Program :
54
54
}
55
55
56
56
Expr :
57
- | start= LET x= ID params= list (Param ) u1= LetTypeAnnot EQ e1= Expr IN e2= Expr {
57
+ | start= LET x= ID params= list (Param ) u1= Let_type_annot EQ e1= Expr IN e2= Expr {
58
58
let r = join_range start (range_of_exp e2) in
59
59
let e1 = match u1 with None -> e1 | Some u1 -> AscExp (range_of_exp e1, e1, u1) in
60
60
let e1 = List. fold_right (fun (x , u ) e -> FunExp (r, x.value, u, e)) params e1 in
61
61
LetExp (r, x.value, ref [] , e1, e2)
62
62
}
63
- | start= LET REC x= ID params= nonempty_list(Param ) u2= LetRecTypeAnnot EQ e1= Expr IN e2= Expr {
63
+ | start= LET REC x= ID params= nonempty_list(Param ) u2= Let_rec_type_annot EQ e1= Expr IN e2= Expr {
64
64
let r = join_range start (range_of_exp e2) in
65
65
match params with
66
66
| [] -> LetExp (r, x.value, ref [] , AscExp (r, e1, u2), e2)
@@ -73,43 +73,43 @@ Expr :
73
73
let r = join_range start (range_of_exp e) in
74
74
List. fold_right (fun (x , u ) e -> FunExp (r, x.value, u, e)) params e
75
75
}
76
- | SeqExpr { $ 1 }
76
+ | Seq_expr { $ 1 }
77
77
78
78
Param :
79
79
| x= ID { (x, Typing. fresh_tyvar () ) }
80
80
| LPAREN x= ID COLON u= Type RPAREN { (x, u) }
81
81
82
- % inline LetTypeAnnot :
82
+ % inline Let_type_annot :
83
83
| /* empty */ { None }
84
84
| COLON u= Type { Some u }
85
85
86
- % inline LetRecTypeAnnot :
86
+ % inline Let_rec_type_annot :
87
87
| /* empty */ { Typing. fresh_tyvar () }
88
88
| COLON u2= Type { u2 }
89
89
90
- SeqExpr :
91
- | e1= SeqExpr SEMI e2= SeqExpr {
90
+ Seq_expr :
91
+ | e1= Seq_expr SEMI e2= Seq_expr {
92
92
let r = join_range (range_of_exp e1) (range_of_exp e2) in
93
93
LetExp (r, " _" , ref [] , AscExp (range_of_exp e1, e1, TyUnit ), e2)
94
94
}
95
- | start= IF e1= SeqExpr THEN e2= SeqExpr ELSE e3= SeqExpr % prec prec_if {
95
+ | start= IF e1= Seq_expr THEN e2= Seq_expr ELSE e3= Seq_expr % prec prec_if {
96
96
let r = join_range start (range_of_exp e3) in
97
97
IfExp (r, e1, e2, e3)
98
98
}
99
- | e1= SeqExpr op= LOR e2= SeqExpr {
99
+ | e1= Seq_expr op= LOR e2= Seq_expr {
100
100
let r = join_range (range_of_exp e1) (range_of_exp e2) in
101
101
let t, f = BConst (r, true ), BConst (r, false ) in
102
102
IfExp (r, e1, t, IfExp (r, e2, t, f))
103
103
}
104
- | e1= SeqExpr op= LAND e2= SeqExpr {
104
+ | e1= Seq_expr op= LAND e2= Seq_expr {
105
105
let r = join_range (range_of_exp e1) (range_of_exp e2) in
106
106
let t, f = BConst (r, true ), BConst (r, false ) in
107
107
IfExp (r, e1, IfExp (r, e2, t, f), f)
108
108
}
109
- | e1= SeqExpr op= Op e2= SeqExpr {
109
+ | e1= Seq_expr op= Op e2= Seq_expr {
110
110
BinOp (join_range (range_of_exp e1) (range_of_exp e2), op, e1, e2)
111
111
}
112
- | UnaryExpr { $ 1 }
112
+ | Unary_expr { $ 1 }
113
113
114
114
% inline Op :
115
115
| PLUS { Plus }
@@ -124,22 +124,22 @@ SeqExpr :
124
124
| GT { Gt }
125
125
| GTE { Gte }
126
126
127
- UnaryExpr :
128
- | PLUS e= UnaryExpr { e }
129
- | start_r= MINUS e= UnaryExpr {
127
+ Unary_expr :
128
+ | PLUS e= Unary_expr { e }
129
+ | start_r= MINUS e= Unary_expr {
130
130
let r = join_range start_r (range_of_exp e) in
131
131
let zero = IConst (dummy_range, 0 ) in
132
132
BinOp (r, Minus , zero, e)
133
133
}
134
- | AppExpr { $ 1 }
134
+ | App_expr { $ 1 }
135
135
136
- AppExpr :
137
- | e1= AppExpr e2= SimpleExpr {
136
+ App_expr :
137
+ | e1= App_expr e2= Simple_expr {
138
138
AppExp (join_range (range_of_exp e1) (range_of_exp e2), e1, e2)
139
139
}
140
- | SimpleExpr { $ 1 }
140
+ | Simple_expr { $ 1 }
141
141
142
- SimpleExpr :
142
+ Simple_expr :
143
143
| i= INTV { IConst (i.range, i.value) }
144
144
| r= TRUE { BConst (r, true ) }
145
145
| r= FALSE { BConst (r, false ) }
@@ -153,11 +153,10 @@ SimpleExpr :
153
153
| LPAREN e= Expr RPAREN { e }
154
154
155
155
Type :
156
- | u1= AType RARROW u2= Type { TyFun (u1, u2) }
157
- | AType { $ 1 }
156
+ | u1= Simple_type RARROW u2= Type { TyFun (u1, u2) }
157
+ | Simple_type { $ 1 }
158
158
159
- AType :
160
- | LPAREN u= Type RPAREN { u }
159
+ Simple_type :
161
160
| INT { TyInt }
162
161
| BOOL { TyBool }
163
162
| UNIT { TyUnit }
@@ -170,3 +169,4 @@ AType :
170
169
tyvenv := Environment .add x .value u ! tyvenv;
171
170
u
172
171
}
172
+ | LPAREN u= Type RPAREN { u }
0 commit comments