| Var of string
type value =
- | TermValue of Ast.term
+ | TermValue of NotationPt.term
| StringValue of ident_or_var
| NumValue of string
| OptValue of value option
| ListValue of value list
+ (* optional name of Ast.Symbols that we want to contain the interpretation of this literal
+ * location of the literal we are parsing
+ * optional uri, optional desc *)
+ | DisambiguationValue of (string option * Stdpp.location * string option * string option)
type value_type =
- | TermType of int
+ | TermType of int (* the level of the expected term *)
| StringType
| NumType
| OptType of value_type
| ListType of value_type
+ | NoType
exception Value_not_found of string
exception Type_mismatch of string * value_type
type binding = string * (value_type * value)
type t = binding list
+(* let rec pp_value = function
+ | TermValue t -> "T#" ^ NotationPp.pp_term (new NCicPp.status) t
+ | StringValue (Ident i) -> "I#" ^ i
+ | StringValue (Var v) -> "V#" ^ v
+ | NumValue n -> "N#" ^ n
+ | OptValue None -> "O#None"
+ | OptValue (Some v) -> "O#" ^ pp_value v
+ | ListValue vl -> "L#[" ^ (String.concat ";" (List.map pp_value vl)) ^ "]"
+ | DisambiguationValue _ -> "D#"
+
+let pp_binding = function
+ | s, (ty,v) -> Printf.sprintf "{ %s := %s : %s }" s (pp_value v) "..."
+
+let pp_env e = String.concat " " (List.map pp_binding e) *)
+
let lookup env name =
try
List.assoc name env
let value_of_term = function
| Ast.Num (s, _) -> NumValue s
- | Ast.Ident (s, None) -> StringValue (Var s)
+ | Ast.Ident (s, (* `Ambiguous? *) _) -> StringValue (Var s)
| t -> TermValue t
let term_of_value = function
- | NumValue s -> Ast.Num (s, 0)
- | StringValue (Ident s) -> Ast.Ident (s, None)
+ | NumValue s -> Ast.Num (s, None)
+ | StringValue (Ident s) -> Ast.Ident (s, `Ambiguous)
| TermValue t -> t
| _ -> assert false (* TO BE UNDERSTOOD *)