let s (x, y, z) = y
let t (x, y, z) = z
%}
- %token <string> ID STR
- %token LB RB SL IS LC RC CM SC LP RP AT DL FS DQ EOF
+ %token <string> SVAR AVAR STR
+ %token LB RB SL LC RC CM SC LP RP FS DQ EOF
%token ADD ALIGN AND AS ATTR BE BUT COUNT DIFF DISTR ELSE EMPTY EQ EX
%token FALSE FOR FROM IF IN INF INTER INV ISF IST KEEP LE LET LOG LT
- %token MAIN MATCH MEET NOT OF OR PAT PROJ PROP SELECT SEQ SOURCE STAT
- %token SUB SUP SUPER THEN TRUE UNION WHERE XOR
+ %token MAIN MATCH MEET NOT OF OR PAT PEEK PROJ PROP READ RENDER SELECT
+ %token SEQ SOURCE STAT SUB SUP SUPER THEN TRUE UNION WHERE XOR
+
%nonassoc SOURCE
%right IN SEQ
- %nonassoc SUP INF ELSE LOG STAT KEEP
+ %nonassoc SUP INF ELSE LOG STAT KEEP RENDER PEEK READ
%left DIFF
%left UNION
%left INTER
| STR qstr { $1 ^ $2 }
;
svar:
- | DL ID { $2 }
+ | SVAR { $1 }
;
avar:
- | AT ID { $2 }
+ | AVAR { $1 }
;
strs:
| STR CM strs { $1 :: $3 }
| SL subpath { $2 }
| SL { [] }
;
+ ppaths:
+ | path CM ppaths { $1 :: $3 }
+ | path { [$1] }
+ ;
paths:
- | path CM paths { $1 :: $3 }
- | path { [$1] }
+ | ppaths { $1 }
+ | { [] }
+ ;
inv:
| INV { true }
| { false }
{ 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] }
+ | RENDER set_exp
+ { make_fun ["render"] [] [$2] }
+ | READ set_exp
+ { make_fun ["read"] [] [$2] }
| EX set_exp
{ M.Ex (analyze $2) $2 }
| NOT set_exp
| 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] }
+ { make_fun ["if"] [] [$2; $4; $6] }
| PROP qualif mainc istrue isfalse attrc OF pattern set_exp
{ M.Property (f $2) (s $2) (t $2) $3 $4 $5 $6 $8 $9 }
| LOG xml source set_exp
{ make_fun ["log"; $2; $3] [] [$4] }
- | KEEP allbut paths IN set_exp
+ | KEEP allbut ppaths IN set_exp
{ make_fun ["keep"; $2] $3 [$5] }
| KEEP allbut set_exp
{ make_fun ["keep"; $2] [] [$3] }
{ M.Select $2 $4 $6 }
| path LC paths RC LC sets RC
{ make_fun $1 $3 $6 }
- | path LC sets RC
- { make_fun $1 [] $3 }
- | path LC RC
- { make_fun $1 [] [] }
| set_exp SEQ set_exp
{ make_fun ["seq"] [] [$1; $3] }
| set_exp DIFF set_exp
{ make_fun ["le"] [] [$1; $3] }
| set_exp LT set_exp
{ make_fun ["lt"] [] [$1; $3] }
+ | PEEK set_exp
+ { make_fun ["peek"] [] [$2] }
;
+ psets:
+ | set_exp CM psets { $1 :: $3 }
+ | set_exp { [$1] }
+ ;
sets:
- | set_exp CM sets { $1 :: $3 }
- | set_exp { [$1] }
+ | psets { $1 }
+ | { [] }
;
query:
| set_exp { $1 }
| EOF { raise End_of_file }
;
attr:
- | path IS strs { $1, $3 }
+ | path BE strs { $1, $3 }
| path { $1, [] }
;
attrs: