X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2FmQueryTParser.mly;h=3265a53a874ae680359531f9b71651bb93bb9593;hb=88271fa4a71a3642880d85e9efe32ce2306f0661;hp=a529326b19a211ac8947d8ea0cb54164c91a378d;hpb=605740107642920d90d0c88544d576d7836a1a25;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/mQueryTParser.mly b/helm/ocaml/mathql_interpreter/mQueryTParser.mly index a529326b1..3265a53a8 100644 --- a/helm/ocaml/mathql_interpreter/mQueryTParser.mly +++ b/helm/ocaml/mathql_interpreter/mQueryTParser.mly @@ -31,9 +31,13 @@ module L = MQILib let make_fun p pl xl = - L.check_arity p (List.length pl) (List.length xl); + L.fun_arity p (List.length pl) (List.length xl); M.Fun p pl xl + let make_gen p xl = + L.gen_arity p (List.length xl); + M.Gen p xl + let analyze x = let rec join l1 l2 = match l1, l2 with | [], _ -> l2 @@ -56,6 +60,7 @@ | M.Select _ x y | M.For _ _ x y -> iter an_set [x; y] | M.Fun _ _ l -> iter an_set l + | M.Gen _ l -> iter an_set l | M.Add _ g x -> join (an_grp g) (an_set x) | M.Property _ _ _ _ c d _ _ x -> join (an_set x) (iter an_con [c; List.concat d]) @@ -75,7 +80,7 @@ %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 FALSE FOR FROM GEN IF IN INF INTER INV ISF IST KEEP LE LET LOG LT %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 @@ -117,7 +122,8 @@ ; path: | SL subpath { $2 } - | SL { [] } +/* | subpath { $1 } +*/ | SL { [] } ; ppaths: | path CM ppaths { $1 :: $3 } @@ -210,88 +216,51 @@ | avar { M.From $1 } ; set_exp: - | 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 } - | 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 - { 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"] [] [] } - | 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 + | 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 SEQ set_exp { make_fun ["seq"] [] [$1; $3] } + | 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 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 $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 } | 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 ppaths IN set_exp - { make_fun ["keep"; $2] $3 [$5] } - | KEEP allbut set_exp - { make_fun ["keep"; $2] [] [$3] } - | SELECT avar FROM set_exp WHERE set_exp - { M.Select $2 $4 $6 } - | path LC paths RC LC sets RC - { make_fun $1 $3 $6 } - | 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 - { 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] } + | SELECT avar FROM set_exp WHERE set_exp { M.Select $2 $4 $6 } + | GEN path LC sets RC { make_gen $2 $4 } + | GEN path IN set_exp { make_gen $2 [$4] } ; psets: | set_exp CM psets { $1 :: $3 }