X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fhelena%2Fsrc%2Fbasic_rg%2FbrgOutput.ml;h=7bb9ce4363a73c9d91cf64cf1719224b521077c8;hb=88977b2d546e547e23b046792fe2ad8f6ff192a4;hp=78200e7e9be0e59122124ce88ee9f69e9cf2432c;hpb=edf9e34100f49d4aa5ba8f3ce53e34af7718d88e;p=helm.git diff --git a/helm/software/helena/src/basic_rg/brgOutput.ml b/helm/software/helena/src/basic_rg/brgOutput.ml index 78200e7e9..7bb9ce436 100644 --- a/helm/software/helena/src/basic_rg/brgOutput.ml +++ b/helm/software/helena/src/basic_rg/brgOutput.ml @@ -9,6 +9,7 @@ \ / This software is distributed as is, NO WARRANTY. V_______________________________________________________________ *) +module KF = Filename module KP = Printf module U = NUri @@ -51,26 +52,28 @@ let initial_counters = { uris = []; nodes = 0; xnodes = 0 } +IFDEF SUMMARY THEN + let rec count_term_binder f c e = function - | B.Abst (_, w) -> + | B.Abst (_, _, w) -> let c = {c with tabsts = succ c.tabsts; nodes = succ c.nodes} in count_term f c e w - | B.Abbr v -> + | B.Abbr v -> let c = {c with tabbrs = succ c.tabbrs; xnodes = succ c.xnodes} in count_term f c e v - | B.Void -> + | B.Void -> let c = {c with tvoids = succ c.tvoids; xnodes = succ c.xnodes} in f c and count_term f c e = function - | B.Sort _ -> + | B.Sort _ -> f {c with tsorts = succ c.tsorts; nodes = succ c.nodes} - | B.LRef (_, i) -> + | B.LRef (_, i) -> begin match B.get e i with - | _, _, _, B.Abst _ - | _, _, _, B.Void -> + | _, _, _, _, B.Abst _ + | _, _, _, _, B.Void -> f {c with tlrefs = succ c.tlrefs; nodes = succ c.nodes} - | _, _, _, B.Abbr _ -> + | _, _, _, _, B.Abbr _ -> f {c with tlrefs = succ c.tlrefs; xnodes = succ c.xnodes} end | B.GRef (_, u) -> @@ -80,7 +83,7 @@ and count_term f c e = function else {c with xnodes = succ c.xnodes} in f {c with tgrefs = succ c.tgrefs} - | B.Cast (_, v, t) -> + | B.Cast (v, t) -> let c = {c with tcasts = succ c.tcasts} in let f c = count_term f c e t in count_term f c e v @@ -88,24 +91,24 @@ and count_term f c e = function let c = {c with tappls = succ c.tappls; nodes = succ c.nodes} in let f c = count_term f c e t in count_term f c e v - | B.Bind (a, b, t) -> - let f c = count_term f c (B.push e B.empty a b) t in + | B.Bind (y, b, t) -> + let f c = count_term f c (B.push e B.empty E.empty_node y b) t in count_term_binder f c e b let count_entity f c = function - | _, _, u, E.Abst w -> + | _, _, u, E.Abst (_, w) -> let c = {c with eabsts = succ c.eabsts; nodes = succ c.nodes; uris = u :: c.uris } in count_term f c B.empty w - | _, _, _, E.Abbr v -> + | _, _, _, E.Abbr (_, v) -> let c = {c with eabbrs = succ c.eabbrs; xnodes = succ c.xnodes} in count_term f c B.empty v - | _, _, _, E.Void -> assert false + | _, _, _, E.Void -> assert false let print_counters f c = let terms = - c.tsorts + c.tgrefs + c.tgrefs + c.tcasts + c.tappls + c.tabsts + + c.tsorts + c.tlrefs + c.tgrefs + c.tcasts + c.tappls + c.tabsts + c.tabbrs in let items = c.eabsts + c.eabbrs in @@ -126,6 +129,8 @@ let print_counters f c = L.warn level (KP.sprintf " + Abbreviation nodes: %7u" nodes); f () +END + (* lenv/term pretty printing ************************************************) let name err och a = @@ -135,59 +140,66 @@ let name err och a = in E.name err f a +let pp_reduced och x = + if x then KP.fprintf och "%s" "^" + let pp_level st och n = KP.fprintf och "%s" (N.to_string st n) let rec pp_term st e och = function - | B.Sort (_, h) -> - let err _ = KP.fprintf och "*%u" h in + | B.Sort k -> + let err _ = KP.fprintf och "*%u" k in let f s = KP.fprintf och "%s" s in - H.string_of_sort err f h - | B.LRef (_, i) -> + H.string_of_sort err f k + | B.LRef (_, i) -> let err _ = KP.fprintf och "#%u" i in if !G.indexes then err () else - let _, _, a, b = B.get e i in - KP.fprintf och "%a" (name err) a - | B.GRef (_, s) -> - KP.fprintf och "$%s" (U.string_of_uri s) - | B.Cast (_, u, t) -> - KP.fprintf och "{%a}.%a" (pp_term st e) u (pp_term st e) t - | B.Appl (_, v, t) -> + let _, _, _, y, b = B.get e i in + KP.fprintf och "%a" (name err) y + | B.GRef (_, s) -> + let u = U.string_of_uri s in + KP.fprintf och "$%s" (if !G.short then KF.basename u else u) + | B.Cast (u, t) -> + KP.fprintf och "<%a>.%a" (pp_term st e) u (pp_term st e) t + | B.Appl (_, v, t) -> KP.fprintf och "(%a).%a" (pp_term st e) v (pp_term st e) t - | B.Bind (a, B.Abst (n, w), t) -> - let a = R.alpha B.mem e a in - let ee = B.push e B.empty a (B.abst n w) in - KP.fprintf och "%a[%a:%a].%a" (pp_level st) n (name C.start) a (pp_term st e) w (pp_term st ee) t - | B.Bind (a, B.Abbr v, t) -> - let a = R.alpha B.mem e a in - let ee = B.push e B.empty a (B.abbr v) in - KP.fprintf och "[%a=%a].%a" (name C.start) a (pp_term st e) v (pp_term st ee) t - | B.Bind (a, B.Void, t) -> - let a = R.alpha B.mem e a in - let ee = B.push e B.empty a B.Void in - KP.fprintf och "[%a].%a" (name C.start) a (pp_term st ee) t + | B.Bind (y, B.Abst (r, n, w), t) -> + let y = R.alpha B.mem e y in + let ee = B.push e B.empty E.empty_node y (B.abst r n w) in + KP.fprintf och "%a%a[%a:%a].%a" (pp_level st) n pp_reduced r (name C.start) y (pp_term st e) w (pp_term st ee) t + | B.Bind (y, B.Abbr v, t) -> + let y = R.alpha B.mem e y in + let ee = B.push e B.empty E.empty_node y (B.abbr v) in + KP.fprintf och "[%a=%a].%a" (name C.start) y (pp_term st e) v (pp_term st ee) t + | B.Bind (y, B.Void, t) -> + let y = R.alpha B.mem e y in + let ee = B.push e B.empty E.empty_node y B.Void in + KP.fprintf och "[%a].%a" (name C.start) y (pp_term st ee) t let pp_lenv st och e = - let pp_entry f e c a b x = f x (* match b with - | B.Abst (a, w) -> - let a = R.alpha B.mem e a in - KP.fprintf och "%a : %a\n" (name C.start) a (pp_term st e) w; f a - | B.Abbr (a, v) -> - let a = R.alpha B.mem e a in - KP.fprintf och "%a = %a\n" (name C.start) a (pp_term st e) v; f a - | B.Void a -> - let a = R.alpha B.mem e a in - KP.fprintf och "%a\n" (name C.start) a; f a -*) in - let e = B.empty in - if e = B.empty then KP.fprintf och "%s\n" "not shown" else + let pp_entry f c a y b x = + let y = R.alpha B.mem e y in + let x = B.push x c a y b in + match b with + | B.Abst (_, _, w) -> + KP.fprintf och "[%a : %a] " (name C.start) y (pp_term st c) w; f x + | B.Abbr v -> + KP.fprintf och "[%a = %a] " (name C.start) y (pp_term st c) v; f x + | B.Void -> + KP.fprintf och "[%a]" (name C.start) y; f x + in + if e = B.empty then KP.fprintf och "%s" "empty" else B.fold_right ignore pp_entry e B.empty let specs = { L.pp_term = pp_term; L.pp_lenv = pp_lenv } +IFDEF OBJECTS THEN + (* term xml printing ********************************************************) let export_term st = BD.crg_of_brg (XD.export_term st) + +END