let t (x, y, z) = z
%}
%token <string> ID STR
- %token LB RB SL IS LC RC CM SC LP RP AT PC FS DQ EOF
+ %token LB RB SL IS LC RC CM SC LP RP AT DL 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 SOURCE STAT SUB
- %token SUP SUPER THEN TRUE UNION WHERE XOR
- %nonassoc IN SUP INF ELSE LOG STAT KEEP
+ %token MAIN MATCH MEET NOT OF OR PAT PROJ PROP SELECT SEQ SOURCE STAT
+ %token SUB SUP SUPER THEN TRUE UNION WHERE XOR
+ %nonassoc SOURCE
+ %right IN SEQ
+ %nonassoc SUP INF ELSE LOG STAT KEEP
%left DIFF
%left UNION
%left INTER
| STR qstr { $1 ^ $2 }
;
svar:
- | PC ID { $2 }
+ | DL ID { $2 }
;
avar:
| AT ID { $2 }
| ALIGN set_exp IN set_exp
{ make_fun ["align"] [] [$2; $4] }
| EMPTY
- { make_fun ["false"] [] [] }
+ { make_fun ["empty"] [] [] }
| svar
{ M.SVar $1 }
| avar
{ 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 ["diff"] [] [$1; $3] }
| set_exp UNION set_exp