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 " = ";
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
| 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