X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2FmQueryTParser.mly;h=a529326b19a211ac8947d8ea0cb54164c91a378d;hb=c172220b965a4d0e95004ae42911a886faac878c;hp=da70610655a131396ce98a10405b8cb8308d8bfd;hpb=9cbce40d56958c466459b028cf250441ec29c9fe;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/mQueryTParser.mly b/helm/ocaml/mathql_interpreter/mQueryTParser.mly index da7061065..a529326b1 100644 --- a/helm/ocaml/mathql_interpreter/mQueryTParser.mly +++ b/helm/ocaml/mathql_interpreter/mQueryTParser.mly @@ -72,15 +72,16 @@ let s (x, y, z) = y let t (x, y, z) = z %} - %token ID STR - %token LB RB SL IS LC RC CM SC LP RP AT DL FS DQ EOF + %token 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 @@ -101,10 +102,10 @@ | STR qstr { $1 ^ $2 } ; svar: - | DL ID { $2 } + | SVAR { $1 } ; avar: - | AT ID { $2 } + | AVAR { $1 } ; strs: | STR CM strs { $1 :: $3 } @@ -118,9 +119,14 @@ | 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 } @@ -216,12 +222,14 @@ { 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 @@ -245,12 +253,12 @@ | 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] } @@ -258,10 +266,6 @@ { 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 @@ -286,10 +290,16 @@ { 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 } @@ -297,7 +307,7 @@ | EOF { raise End_of_file } ; attr: - | path IS strs { $1, $3 } + | path BE strs { $1, $3 } | path { $1, [] } ; attrs: