X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_notation%2FcicNotationPt.ml;h=ac6a0edbd1a37a9e1684a4089b9fd8849a3e3342;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=c702f5115703f46e8f31f35afec1ff6c0416e85b;hpb=3d63cb9ed38f05c679fc3284a5b3bb4d92e52296;p=helm.git diff --git a/helm/ocaml/cic_notation/cicNotationPt.ml b/helm/ocaml/cic_notation/cicNotationPt.ml index c702f5115..ac6a0edbd 100644 --- a/helm/ocaml/cic_notation/cicNotationPt.ml +++ b/helm/ocaml/cic_notation/cicNotationPt.ml @@ -27,7 +27,7 @@ type binder_kind = [ `Lambda | `Pi | `Exists | `Forall ] type induction_kind = [ `Inductive | `CoInductive ] -type sort_kind = [ `Prop | `Set | `Type | `CProp ] +type sort_kind = [ `Prop | `Set | `Type of CicUniv.universe | `CProp ] type fold_kind = [ `Left | `Right ] type location = Lexing.position * Lexing.position @@ -35,11 +35,22 @@ type location = Lexing.position * Lexing.position let loc_of_floc = function | { Lexing.pos_cnum = loc_begin }, { Lexing.pos_cnum = loc_end } -> (loc_begin, loc_end) +let fail floc msg = + let (x, y) = loc_of_floc floc in + failwith (Printf.sprintf "Error at characters %d - %d: %s" x y msg) + +type href = UriManager.uri + +type child_pos = [ `Left | `Right | `Inner ] type term_attribute = [ `Loc of location (* source file location *) | `IdRef of string (* ACic pointer *) | `Level of int * Gramext.g_assoc (* precedence, associativity *) + | `ChildPos of child_pos (* position of l1 pattern variables *) + | `XmlAttrs of (string option * string * string) list + (* list of XML attributes: namespace, name, value *) + | `Raw of string (* unparsed version *) ] type literal = @@ -48,6 +59,12 @@ type literal = | `Number of string ] +type case_indtype = string * href option + +(** To be increased each time the term type below changes, used for "safe" + * marshalling *) +let magic = 1 + type term = (* CIC AST *) @@ -55,8 +72,10 @@ type term = | Appl of term list | Binder of binder_kind * capture_variable * term (* kind, name, body *) - | Case of term * string option * term option * (case_pattern * term) list + | Case of term * case_indtype option * term option * + (case_pattern * term) list (* what to match, inductive type, out type, list *) + | Cast of term * term | LetIn of capture_variable * term * term (* name, body, where *) | LetRec of induction_kind * (capture_variable * term * int) list * term (* (name, body, decreasing argument) list, where *) @@ -78,6 +97,7 @@ type term = | Literal of literal | Layout of layout_pattern + | Magic of magic_term | Variable of pattern_variable @@ -86,7 +106,7 @@ and capture_variable = term * term option and meta_subst = term option and subst = string * term -and case_pattern = string * capture_variable list +and case_pattern = string * href option * capture_variable list and box_kind = H | V | HV | HOV and box_spec = box_kind * bool * bool (* kind, spacing, indent *) @@ -103,19 +123,22 @@ and layout_pattern = |+ column separator, row separator +| *) | Sqrt of term | Root of term * term (* argument, index *) -(* | Break *) + | Break | Box of box_spec * term list + | Group of term list and magic_term = (* level 1 magics *) - | List0 of term * literal option - | List1 of term * literal option + | List0 of term * literal option (* pattern, separator *) + | List1 of term * literal option (* pattern, separator *) | Opt of term (* level 2 magics *) | Fold of fold_kind * term * string list * term (* base case pattern, recursive case bound names, recursive case pattern *) | Default of term * term (* "some" case pattern, "none" case pattern *) + | Fail + | If of term * term * term (* test, pattern if true, pattern if false *) and pattern_variable = (* level 1 and 2 variables *) @@ -133,14 +156,20 @@ type argument_pattern = | IdentArg of int * string (* eta-depth, name *) type cic_appl_pattern = - | UriPattern of string + | UriPattern of UriManager.uri | VarPattern of string + | ImplicitPattern | ApplPattern of cic_appl_pattern list -type phrase = (* TODO hackish: replace with TacticAst.statement or similar *) - | Print of term - | Notation of term * Gramext.g_assoc option * int option * term - (* level 1 pattern, associativity, precedence, level 2 pattern *) - | Interpretation of (string * argument_pattern list) * cic_appl_pattern - | Render of UriManager.uri +(** {2 Standard precedences} *) + +let let_in_prec = 10 +let binder_prec = 20 +let apply_prec = 70 +let simple_prec = 90 + +let let_in_assoc = Gramext.NonA +let binder_assoc = Gramext.RightA +let apply_assoc = Gramext.LeftA +let simple_assoc = Gramext.NonA