]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/mQueryTParser.mly
patched and some funtions added
[helm.git] / helm / ocaml / mathql_interpreter / mQueryTParser.mly
index da70610655a131396ce98a10405b8cb8308d8bfd..a529326b19a211ac8947d8ea0cb54164c91a378d 100644 (file)
    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: