- | FALSE
- { make_fun ["false"] [] [] }
- | TRUE
- { make_fun ["true"] [] [] }
- | STR
- { M.Const [$1, []] }
- | LB resources RB
- { M.Const $2 }
- | avar FS path
- { M.Dot $1 $3 }
- | LC sets RC
- { make_fun ["union"] [] $2 }
- | LC RC
- { make_fun ["union"] [] [] }
- | LP set_exp RP
- { $2 }
- | STAT set_exp
- { make_fun ["stat"] [] [$2] }
- | EX set_exp
- { M.Ex (analyze $2) $2 }
- | NOT set_exp
- { make_fun ["not"] [] [$2] }
- | PROJ path OF set_exp
- { make_fun ["proj"] [$2] [$4] }
- | COUNT set_exp
- { make_fun ["count"] [] [$2] }
- | ALIGN set_exp IN set_exp
- { make_fun ["align"] [] [$2; $4] }
- | EMPTY
- { make_fun ["false"] [] [] }
- | svar
- { M.SVar $1 }
- | avar
- { M.AVar $1 }
- | LET svar BE set_exp IN set_exp
- { M.Let $2 $4 $6 }
- | FOR avar IN set_exp gen_op
- { M.For (fst $5) $2 $4 (snd $5) }
- | ADD distr grp_exp IN set_exp
- { M.Add $2 $3 $5 }
- | IF set_exp THEN set_exp ELSE set_exp
- { make_fun ["diff"] [] [$2; $4; $6] }
+ | STAT set_exp { make_fun ["stat"] [] [$2] }
+ | RENDER set_exp { make_fun ["render"] [] [$2] }
+ | READ set_exp { make_fun ["read"] [] [$2] }
+ | FALSE { make_fun ["false"] [] [] }
+ | TRUE { make_fun ["true"] [] [] }
+ | LC sets RC { make_fun ["union"] [] $2 }
+ | NOT set_exp { make_fun ["not"] [] [$2] }
+ | PROJ path OF set_exp { make_fun ["proj"] [$2] [$4] }
+ | COUNT set_exp { make_fun ["count"] [] [$2] }
+ | ALIGN set_exp IN set_exp { make_fun ["align"] [] [$2; $4] }
+ | EMPTY { make_fun ["empty"] [] [] }
+ | LOG xml source set_exp { make_fun ["log"; $2; $3] [] [$4] }
+ | KEEP allbut ppaths IN set_exp { make_fun ["keep"; $2] $3 [$5] }
+ | KEEP allbut set_exp { make_fun ["keep"; $2] [] [$3] }
+ | path LC paths RC LC sets RC { make_fun $1 $3 $6 }
+ | set_exp DIFF set_exp { make_fun ["diff"] [] [$1; $3] }
+ | set_exp UNION set_exp { make_fun ["union"] [] [$1; $3] }
+ | set_exp INTER set_exp { make_fun ["intersect"] [] [$1; $3] }
+ | set_exp XOR set_exp { make_fun ["xor"] [] [$1; $3] }
+ | set_exp OR set_exp { make_fun ["or"] [] [$1; $3] }
+ | set_exp AND set_exp { make_fun ["and"] [] [$1; $3] }
+ | set_exp SUB set_exp { make_fun ["sub"] [] [$1; $3] }
+ | set_exp MEET set_exp { make_fun ["meet"] [] [$1; $3] }
+ | set_exp EQ set_exp { make_fun ["eq"] [] [$1; $3] }
+ | set_exp LE set_exp { make_fun ["le"] [] [$1; $3] }
+ | set_exp LT set_exp { make_fun ["lt"] [] [$1; $3] }
+ | PEEK set_exp { make_fun ["peek"] [] [$2] }
+ | IF set_exp THEN set_exp ELSE set_exp
+ { make_fun ["if"] [] [$2; $4; $6] }
+ | STR { M.Const [$1, []] }
+ | LB x_resources RB { M.Const $2 }
+ | avar FS path { M.Dot ($1, $3) }
+ | LP set_exp RP { $2 }
+ | EX set_exp { M.Ex (analyze $2, $2) }
+ | svar { M.SVar $1 }
+ | avar { M.AVar $1 }
+ | LET svar BE set_exp IN set_exp { M.Let (Some $2, $4, $6) }
+ | set_exp SEQ set_exp { M.Let (None, $1, $3) }
+ | FOR avar IN set_exp gen_op { M.For (fst $5, $2, $4, snd $5) }
+ | WHILE set_exp gen_op { M.While (fst $3, $2, snd $3) }
+ | ADD distr grp_exp IN set_exp { M.Add ($2, $3, $5) }