a54e570d0f
Hept Parsing too, all the reset to review carefully, Typing to cut from all the scoping.
43 lines
1.5 KiB
OCaml
43 lines
1.5 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* Heptagon *)
|
|
(* *)
|
|
(* Author : Marc Pouzet *)
|
|
(* Organization : Demons, LRI, University of Paris-Sud, Orsay *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
open Names
|
|
open Misc
|
|
open Location
|
|
|
|
type static_exp = { se_desc: static_exp_desc; se_ty: ty; se_loc: location }
|
|
|
|
and static_exp_desc =
|
|
| Svar of constant_name
|
|
| Sint of int
|
|
| Sfloat of float
|
|
| Sbool of bool
|
|
| Sconstructor of constructor_name
|
|
| Stuple of static_exp list
|
|
| Sarray_power of static_exp * static_exp (** power : 0^n : [0,0,0,0,0,..] *)
|
|
| Sarray of static_exp list (** [ e1, e2, e3 ] *)
|
|
| Srecord of (field_name * static_exp) list (** { f1 = e1; f2 = e2; ... } *)
|
|
| Sop of fun_name * static_exp list (** defined ops for now in pervasives *)
|
|
|
|
and ty = | Tprod of ty list | Tid of type_name | Tarray of ty * static_exp
|
|
|
|
let invalid_type = Tprod []
|
|
|
|
let prod = function
|
|
| [] -> assert false
|
|
| [ty] -> ty
|
|
| ty_list -> Tprod ty_list
|
|
|
|
|
|
(** DO NOT use this after the typing, since it could give invalid_type *)
|
|
let mk_static_exp ?(loc = no_location) ?(ty = invalid_type) desc =
|
|
{ se_desc = desc; se_ty = ty; se_loc = loc }
|
|
|
|
|