53 |
| RCB ("}") |
| RCB ("}") |
54 |
| COMMA (",") |
| COMMA (",") |
55 |
| SEMI (";") |
| SEMI (";") |
56 |
|
| COLON (":") |
57 |
| HASH ("#") |
| HASH ("#") |
58 |
| BANG ("!") |
| BANG ("!") |
59 |
| BAR ("|") |
| BAR ("|") |
101 |
| mkRBinExp (e, [(id, e')]) = mkBinApp(e, id, e') |
| mkRBinExp (e, [(id, e')]) = mkBinApp(e, id, e') |
102 |
| mkRBinExp (e, (id, e')::r) = mkBinApp(e, id, mkRBinExp(e', r)) |
| mkRBinExp (e, (id, e')::r) = mkBinApp(e, id, mkRBinExp(e', r)) |
103 |
|
|
104 |
|
fun mkOptExp (_, e, NONE) = e |
105 |
|
| mkOptExp (spn, e, SOME mk) = mk(spn, e) |
106 |
|
|
107 |
fun flatten NONE = [] |
fun flatten NONE = [] |
108 |
| flatten (SOME(x, xs)) = x::xs |
| flatten (SOME(x, xs)) = x::xs |
109 |
|
|
340 |
: "*" => (B.op_mul) | "/" => (B.op_div) | "(*)" => (B.op_convolve) |
: "*" => (B.op_mul) | "/" => (B.op_div) | "(*)" => (B.op_convolve) |
341 |
; |
; |
342 |
|
|
343 |
|
ProbeExpr |
344 |
|
: PrefixExpr ( "@" AtomExpr => (AtomExpr) )? |
345 |
|
=> (case SR |
346 |
|
of NONE => PrefixExpr |
347 |
|
| SOME e => markExpr(FULL_SPAN, PT.E_BinOp(PrefixExpr, B.op_at, e)) |
348 |
|
(* end case *)) |
349 |
|
; |
350 |
|
|
351 |
PrefixExpr |
PrefixExpr |
352 |
: SelExpr |
: SliceExpr |
353 |
=> (SelExpr) |
=> (SliceExpr) |
354 |
| "-" PrefixExpr |
| "-" PrefixExpr |
355 |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr))) |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr))) |
356 |
| "!" PrefixExpr |
| "!" PrefixExpr |
359 |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_D, PrefixExpr))) |
=> (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_D, PrefixExpr))) |
360 |
; |
; |
361 |
|
|
362 |
SelExpr |
SliceExpr |
363 |
: AtomExp ( "@" AtomExp => (B.op_at, AtomExp) | "[" Expr "]" => (B.op_subscript, Expr) )* |
: AtomExpr ( "[" Indices "]" )? |
364 |
=> (mkRBinExp (AtomExp, SR)) |
=> (case SR |
365 |
|
of NONE => AtomExpr |
366 |
|
| SOME s => markExpr(FULL_SPAN, PT.E_Slice(AtomExpr, s)) |
367 |
|
(* end case *)) |
368 |
|
; |
369 |
|
|
370 |
|
Indices |
371 |
|
: Index ( "," Index )* |
372 |
|
=> (Index :: SR) |
373 |
|
; |
374 |
|
|
375 |
|
Index |
376 |
|
: ":" |
377 |
|
=> (NONE) |
378 |
|
| Expr |
379 |
|
=> (SOME Expr) |
380 |
; |
; |
381 |
|
|
382 |
AtomExp |
AtomExpr |
383 |
: ID ( "(" Arguments ")" )? |
: ID ( "(" Arguments ")" )? |
384 |
=> (case SR |
=> (case SR |
385 |
of NONE => markExpr(FULL_SPAN, PT.E_Var ID) |
of NONE => markExpr(FULL_SPAN, PT.E_Var ID) |