X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_generator%2FmQueryGenerator.ml;h=7e0dd9c965ba8aeb4ddef341ad9f6a60a6cada5c;hb=caf8d6cf32c9a9ec8d3fba0aa912d080ff5f7d52;hp=40c0ea0b8372dc063f79f4087ccde41aaa04c310;hpb=399f84005987d007bd24f8a0dea3bb2211070a18;p=helm.git diff --git a/helm/ocaml/mathql_generator/mQueryGenerator.ml b/helm/ocaml/mathql_generator/mQueryGenerator.ml index 40c0ea0b8..7e0dd9c96 100644 --- a/helm/ocaml/mathql_generator/mQueryGenerator.ml +++ b/helm/ocaml/mathql_generator/mQueryGenerator.ml @@ -34,21 +34,18 @@ module U = MQGUtil let locate s = let query = - M.Property true M.RefineExact ["objectName"] [] [] [] [] - false (M.Const s) + M.Property (true,M.RefineExact,["objectName"],[],[],[],[],false,(M.Const s) ) in M.StatQuery query let unreferred target_pattern source_pattern = let query = - M.Bin M.BinFDiff + M.Bin (M.BinFDiff, ( - M.Property false M.RefineExact [] [] [] [] [] - true (M.Const target_pattern) - ) ( - M.Property false M.RefineExact ["refObj"] ["h:occurrence"] [] [] [] - true (M.Const source_pattern) + M.Property(false,M.RefineExact,[],[],[],[],[],true,(M.Const target_pattern)) + ), ( + M.Property(false,M.RefineExact,["refObj"],["h:occurrence"],[],[],[],true,(M.Const source_pattern)) - ) + )) in M.StatQuery query let compose cl = @@ -81,13 +78,11 @@ let compose cl = con "h:depth" (List.map U.string_of_depth d) in let property_must n c = - M.Property true M.RefineExact [n] [] - (cons false c) [] [] false (M.Const "") + M.Property(true,M.RefineExact,[n],[],(cons false c),[],[],false,(M.Const "")) in let property_only n cl = let cll = List.map (cons true) cl in - M.Property false M.RefineExact [n] [] - ! univ cll [] false (M.Proj None (M.AVar "obj")) + M.Property(false,M.RefineExact,[n],[],!univ,cll,[],false,(M.Proj(None,(M.AVar "obj")))) in let rec aux = function | [] -> () @@ -95,17 +90,17 @@ let compose cl = only := true; let l = List.map U.string_of_position l in univ := [(false, ["h:position"], set_val l)]; aux tail - | T.MustObj r p d :: tail -> + | T.MustObj(r,p,d) :: tail -> must := property_must "refObj" (r, [], p, d) :: ! must; aux tail - | T.MustSort s p d :: tail -> + | T.MustSort(s,p,d) :: tail -> must := property_must "refSort" ([], s, p, d) :: ! must; aux tail - | T.MustRel p d :: tail -> + | T.MustRel(p,d) :: tail -> must := property_must "refRel" ([], [], p, d) :: ! must; aux tail - | T.OnlyObj r p d :: tail -> + | T.OnlyObj(r,p,d) :: tail -> onlyobj := (r, [], p, d) :: ! onlyobj; aux tail - | T.OnlySort s p d :: tail -> + | T.OnlySort(s,p,d) :: tail -> onlysort := ([], s, p, d) :: ! onlysort; aux tail - | T.OnlyRel p d :: tail -> + | T.OnlyRel(p,d) :: tail -> onlyrel := ([], [], p, d) :: ! onlyrel; aux tail in let rec iter f g = function @@ -118,28 +113,28 @@ let compose cl = aux cl; let must_query = if ! must = [] then - M.Property false M.RefineExact [] [] [] [] [] true (M.Const ".*") + M.Property(false,M.RefineExact,[],[],[],[],[],true,(M.Const ".*")) else - iter (fun x -> x) (fun x y -> M.Bin M.BinFMeet x y) ! must + iter (fun x -> x) (fun x y -> M.Bin(M.BinFMeet,x,y)) ! must in - let onlyobj_val = M.Not (M.Proj None (property_only "refObj" ! onlyobj)) in - let onlysort_val = M.Not (M.Proj None (property_only "refSort" ! onlysort)) in - let onlyrel_val = M.Not (M.Proj None (property_only "refRel" ! onlyrel)) in + let onlyobj_val = M.Not (M.Proj(None,(property_only "refObj" ! onlyobj))) in + let onlysort_val = M.Not (M.Proj(None,(property_only "refSort" ! onlysort))) in + let onlyrel_val = M.Not (M.Proj(None,(property_only "refRel" ! onlyrel))) in let select_query x = match ! onlyobj, ! onlysort, ! onlyrel with | [], [], [] -> x - | _, [], [] -> M.Select "obj" x onlyobj_val - | [], _, [] -> M.Select "obj" x onlysort_val - | [], [], _ -> M.Select "obj" x onlyrel_val - | _, _, [] -> M.Select "obj" x (M.Test M.And onlyobj_val onlysort_val) - | _, [], _ -> M.Select "obj" x (M.Test M.And onlyobj_val onlyrel_val) - | [], _, _ -> M.Select "obj" x (M.Test M.And onlysort_val onlyrel_val) - | _, _, _ -> M.Select "obj" x (M.Test M.And (M.Test M.And onlyobj_val onlysort_val) onlyrel_val) + | _, [], [] -> M.Select("obj",x,onlyobj_val) + | [], _, [] -> M.Select("obj",x,onlysort_val) + | [], [], _ -> M.Select("obj",x,onlyrel_val) + | _, _, [] -> M.Select("obj",x,(M.Test(M.And,onlyobj_val,onlysort_val))) + | _, [], _ -> M.Select("obj",x,(M.Test(M.And,onlyobj_val,onlyrel_val))) + | [], _, _ -> M.Select("obj",x,(M.Test(M.And,onlysort_val,onlyrel_val))) + | _, _, _ -> M.Select("obj",x,(M.Test(M.And,(M.Test(M.And,onlyobj_val,onlysort_val)),onlyrel_val))) in let letin_query = if ! letin = [] then fun x -> x else - let f (vvar, msval) x = M.LetVVar vvar msval x in + let f (vvar, msval) x = M.LetVVar(vvar,msval,x) in iter f (fun x y z -> x (y z)) ! letin in M.StatQuery (letin_query (select_query must_query))