2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department, University of Bologna, Italy.
6 ||T|| HELM is free software; you can redistribute it and/or
7 ||A|| modify it under the terms of the GNU General Public License
8 \ / version 2 or (at your option) any later version.
9 \ / This software is distributed as is, NO WARRANTY.
10 V_______________________________________________________________ *)
16 type uri_generator = string -> string
18 type kernel = V4 | V3 | V0
25 | LP1 (* elpi helena *)
26 | LP2 (* elpi helena *)
27 | TJ2 (* teyjus helena *)
28 | TJ3 (* teyjus helena *)
34 (* interface functions ******************************************************)
36 let version_string b =
37 if b then "Helena 0.8.3 M (December 2017)"
38 else "Helena 0.8.3 M - December 2017"
40 let kernel = ref V3 (* kernel type *)
42 let si = ref false (* use sort inclusion *)
44 let cover = ref "" (* initial uri segment *)
46 let cc = ref false (* activate conversion constraints *)
48 let indexes = ref false (* show de Bruijn indexes *)
50 let alpha = ref "" (* prefix of numeric identifiers *)
52 let first = ref 0 (* begin trace here *)
54 let last = ref max_int (* end trace here *)
56 let restricted = ref true (* restricted applications *)
58 let infinity = ref false (* use ∞-abstractions in contexts *)
60 let short = ref false (* short global constants *)
62 let cast = ref false (* anticipate cast *)
64 let root = ref "" (* initial segment of URI hierarchy *)
66 let trace = ref 0 (* trace level *)
69 let debug_lexer = ref false (* output lexer debug information *)
73 let debug_parser = ref false (* output parser debug information *)
77 let ct = ref 0 (* current trace level *)
81 let summary = ref false (* log summary information *)
85 let expand = ref false (* always expand global definitions *)
89 let manager_dir = ref "" (* output directory for manager *)
90 let manager = ref Quiet (* manager *)
91 let preamble = ref "" (* preamble file for manager *)
95 let stage = ref 3 (* stage *)
99 let export = ref false (* export entities to XML *)
100 let xdir = ref "" (* directory for XML output *)
103 IFDEF PREPROCESS THEN
104 let preprocess = ref false (* preprocess source *)
108 let quote = ref false (* quote identifiers when lexing *)
112 let validate = ref true (* validate vs. typecheck *)
113 let icm = ref 0 (* complexity measure of relocated terms *)
117 let id = match !kernel with
118 | V4 -> "Environment"
119 | V3 -> "Environment_V3"
120 | V0 -> "Environment_V0"
122 let si = if !si then "_si" else "" in
123 let rest = if !restricted then "" else "_x" in
127 String.concat "/" ["ld:"; kernel_id (); !cover; "" ]
130 let bu = get_baseuri () in
131 fun s -> KF.concat bu (s ^ ".ld")
134 let set_current_trace n =
135 ct := if !first <= n && n <= !last then !trace else 0
139 root := ""; first := 0; last := max_int;
140 kernel := V3; si := false; restricted := true; infinity := false; cast := false; cover := "";
141 indexes := false; short := false; trace := 0;
142 IFDEF LEXER THEN debug_lexer := false ELSE () END;
143 IFDEF PARSER THEN debug_parser := false ELSE () END;
144 IFDEF SUMMARY THEN summary := false ELSE () END;
145 IFDEF EXPAND THEN expand := false ELSE () END;
146 IFDEF MANAGER THEN manager_dir := ""; manager := Quiet; preamble := "" ELSE () END;
147 IFDEF STAGE THEN stage := 3 ELSE () END;
148 IFDEF OBJECTS THEN export := false; xdir := "" ELSE () END;
149 IFDEF PREPROCESS THEN preprocess := false ELSE () END;
150 IFDEF QUOTE THEN quote := false ELSE () END;
151 IFDEF TYPE THEN validate := true; icm := 0 ELSE () END