9 |
%tokens |
%tokens |
10 |
: KW_actor ("actor") |
: KW_actor ("actor") |
11 |
| KW_bool ("bool") |
| KW_bool ("bool") |
12 |
|
| KW_D ("D") |
13 |
| KW_die ("die") |
| KW_die ("die") |
14 |
| KW_else ("else") |
| KW_else ("else") |
15 |
| KW_field ("field") |
| KW_field ("field") |
177 |
|
|
178 |
(***** Types *****) |
(***** Types *****) |
179 |
|
|
180 |
Type : "image" "<" Dimensions ">" |
Type : "image" Dimensions "[" Dimension "]" |
181 |
=> (markTy(FULL_SPAN, PT.T_Image Dimensions)) |
=> (markTy(FULL_SPAN, PT.T_Image{ |
182 |
| "field" "#" Dimension "<" Dimensions ">" |
order = Dimensions, dim = Dimension |
183 |
=> (markTy(FULL_SPAN, PT.T_Field(Dimension, Dimensions))) |
})) |
184 |
|
| "field" "#" Dimension Dimensions "[" Dimension "]" |
185 |
|
=> (markTy(FULL_SPAN, PT.T_Field{ |
186 |
|
diff = Dimension1, |
187 |
|
order = Dimensions, |
188 |
|
dim = Dimension2 |
189 |
|
})) |
190 |
| "kernel" "#" Dimension |
| "kernel" "#" Dimension |
191 |
=> (markTy(FULL_SPAN, PT.T_Kernel Dimension)) |
=> (markTy(FULL_SPAN, PT.T_Kernel Dimension)) |
192 |
| ValueType |
| ValueType ("[" Dimension "]")* |
193 |
=> (ValueType) |
=> (case SR |
194 |
|
of [] => ValueType |
195 |
|
| d => (markTy(FULL_SPAN, PT.T_Array(ValueType, d))) |
196 |
|
(* end case *)) |
197 |
; |
; |
198 |
|
|
199 |
ValueType |
ValueType |
200 |
: "tensor" "<" Dimensions ">" |
: "tensor" Dimensions |
201 |
=> (markTy(FULL_SPAN, PT.T_Tensor Dimensions)) |
=> (markTy(FULL_SPAN, PT.T_Tensor Dimensions)) |
202 |
| "vec" "<" Dimension ">" |
| "vec" "<" Dimension ">" |
203 |
=> (markTy(FULL_SPAN, PT.T_Vec Dimension)) |
=> (markTy(FULL_SPAN, PT.T_Vec Dimension)) |
212 |
; |
; |
213 |
|
|
214 |
Dimensions |
Dimensions |
215 |
: ( Dimension ("," Dimension)* )? |
: (* empty *) |
216 |
|
=> ([]) |
217 |
|
| "<" ( Dimension ("," Dimension)* )? ">" |
218 |
=> (flatten SR) |
=> (flatten SR) |
219 |
; |
; |
220 |
|
|
256 |
; |
; |
257 |
|
|
258 |
MulExpr |
MulExpr |
259 |
: SelExpr ( MulOp SelExpr )* |
: PrefixExpr ( MulOp PrefixExpr )* |
260 |
=> (mkLBinExp (SelExpr, SR)) |
=> (mkLBinExp (PrefixExpr, SR)) |
261 |
; |
; |
262 |
|
|
263 |
MulOp |
MulOp |
264 |
: "*" => (Op.times) | "/" => (Op.divide) |
: "*" => (Op.times) | "/" => (Op.divide) |
265 |
; |
; |
266 |
|
|
|
SelExpr |
|
|
: PrefixExpr ( "@" PrefixExpr => (Op.at, PrefixExpr) | "[" Expr "]" => (Op.sub, Expr) )* |
|
|
=> (mkRBinExp (PrefixExpr, SR)) |
|
|
; |
|
|
|
|
267 |
PrefixExpr |
PrefixExpr |
268 |
: AtomExp |
: SelExpr |
269 |
=> (AtomExp) |
=> (SelExpr) |
270 |
| "-" PrefixExpr |
| "-" PrefixExpr |
271 |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.uMinus, PrefixExpr))) |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.uMinus, PrefixExpr))) |
272 |
| "!" PrefixExpr |
| "!" PrefixExpr |
273 |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.bNot, PrefixExpr))) |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.bNot, PrefixExpr))) |
274 |
|
| "D" PrefixExpr |
275 |
|
=> (markExpr(FULL_SPAN, PT.E_Diff PrefixExpr)) |
276 |
|
; |
277 |
|
|
278 |
|
SelExpr |
279 |
|
: AtomExp ( "@" AtomExp => (Op.at, AtomExp) | "[" Expr "]" => (Op.sub, Expr) )* |
280 |
|
=> (mkRBinExp (AtomExp, SR)) |
281 |
; |
; |
282 |
|
|
283 |
AtomExp |
AtomExp |