]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/mQueryIO.ml
patched and improved
[helm.git] / helm / ocaml / mathql_interpreter / mQueryIO.ml
index d59b2f2b74b381eeb0485eb2f804c1736412e936..a7d30dd0910ade259a1a2f549c1a562384b63738 100644 (file)
@@ -36,7 +36,7 @@ let txt_str out s = out ("\"" ^ s ^ "\"")
 
 let txt_path out p = out "/"; P.flat_list out (txt_str out) "/" p 
 
-let text_of_result out x sep = 
+let text_of_result out sep x = 
    let txt_attr = function
       | (p, []) -> txt_path out p
       | (p, l)  -> txt_path out p; out " = "; 
@@ -51,8 +51,8 @@ let text_of_result out x sep =
    let txt_set l = P.flat_list out txt_res ("; " ^ sep) l; out sep in
    txt_set x
 
-let text_of_query out x sep = 
-   let txt_svar sv = out ("%" ^ sv) in 
+let text_of_query out sep x = 
+   let txt_svar sv = out ("$" ^ sv) in 
    let txt_avar av = out ("@" ^ av) in
    let txt_inv i = if i then out "inverse " in
    let txt_ref = function
@@ -96,30 +96,37 @@ let text_of_query out x sep =
       | M.From av -> txt_avar av
    and txt_set = function
       | M.Fun p pl xl      -> 
-         L.txt_out out (txt_path out) txt_set p pl xl 
-      | M.Const [s, []]   -> txt_str out s
-      | M.Const r         -> text_of_result out r " "
-      | M.Dot av p        -> txt_avar av; out "."; txt_path out p
-      | M.Ex b x          -> out "ex "; txt_set x
-(*    | M.Ex b x          -> out "ex ["; P.flat_list out txt_avar "," b; 
-                             out "] "; txt_set x
-*)    | M.SVar sv         -> txt_svar sv
-      | M.AVar av         -> txt_avar av
+         let o = {L.out = out; L.path = txt_path out; L.query = txt_set;
+           L.result = text_of_result out sep} 
+        in
+        L.txt_out o p pl xl 
+      | M.Const [s, []] -> txt_str out s
+      | M.Const r       -> text_of_result out " " r
+      | M.Dot av p      -> txt_avar av; out "."; txt_path out p
+      | M.Ex b x        -> out "ex "; txt_set x
+(*    | M.Ex b x        -> out "ex ["; P.flat_list out txt_avar "," b; 
+                           out "] "; txt_set x
+*)    | M.SVar sv       -> txt_svar sv
+      | M.AVar av       -> txt_avar av
       | M.Property q0 q1 q2 mc ct cfl xl b x -> 
          out "property "; txt_qualif q0 q1 q2; main mc;
         txt_istrue ct; P.flat_list out txt_isfalse "" cfl; txt_exp_list xl;
         out " of "; pattern b; txt_set x
-      | M.Let sv x y      -> out "let "; txt_svar sv; out " be "; 
-                             txt_set x; out " in "; txt_set y
-      | M.Select av x y   -> out "select "; txt_avar av; out " from ";
-                             txt_set x; out " where "; txt_set y
-      | M.For k av x y    -> out "for "; txt_avar av; out " in ";
-                             txt_set x; txt_gen k; txt_set y
-      | M.Add d g x       -> out "add "; txt_distr d; txt_grp g; 
-                             out " in "; txt_set x
+      | M.Let sv x y    -> out "let "; txt_svar sv; out " = "; 
+                           txt_set x; out " in "; txt_set y
+      | M.Select av x y -> out "select "; txt_avar av; out " from ";
+                           txt_set x; out " where "; txt_set y
+      | M.For k av x y  -> out "for "; txt_avar av; out " in ";
+                           txt_set x; txt_gen k; txt_set y
+      | M.Add d g x     -> out "add "; txt_distr d; txt_grp g; 
+                           out " in "; txt_set x
    in 
    txt_set x; out sep
 
+let text_out_spec out sep =
+   {L.out = out; L.path = txt_path out; L.query = text_of_query out sep;
+    L.result = text_of_result out sep}
+
 let query_of_text lexbuf =
    MQueryTParser.query MQueryTLexer.query_token lexbuf