]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/mQueryTParser.mly
standard library and while construction inserted
[helm.git] / helm / ocaml / mathql_interpreter / mQueryTParser.mly
index 3265a53a874ae680359531f9b71651bb93bb9593..4945edfc0531bcf3ee16acaea184579688a0f0bb 100644 (file)
@@ -59,6 +59,7 @@
          | M.Let _ x y
         | M.Select _ x y
          | M.For _ _ x y                -> iter an_set [x; y]
+        | M.While _ 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)
@@ -82,7 +83,7 @@
    %token    ADD ALIGN AND AS ATTR BE BUT COUNT DIFF DISTR ELSE EMPTY EQ EX  
    %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
+   %token    SEQ SOURCE STAT SUB SUP SUPER THEN TRUE UNION WHERE WHILE XOR
 
    %nonassoc SOURCE
    %right    IN SEQ
       | 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] }
       | 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 }
+      | 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 }
       | PROP qualif mainc istrue isfalse attrc OF pattern set_exp     
          { M.Property (f $2) (s $2) (t $2) $3 $4 $5 $6 $8 $9 }