sig
type ident = string
type typ = Tint | Tstructp of Ttree.structure | Tvoidstar | Ttypenull
and structure = {
str_name : Ttree.ident;
str_fields : (Ttree.ident, Ttree.field) Stdlib.Hashtbl.t;
}
and field = { field_name : string; field_typ : Ttree.typ; }
type unop = Ptree.unop
type binop = Ptree.binop
type decl_var = Ttree.typ * Ttree.ident
type expr = { expr_node : Ttree.expr_node; expr_typ : Ttree.typ; }
and expr_node =
Econst of int32
| Eaccess_local of Ttree.ident
| Eaccess_field of Ttree.expr * Ttree.field
| Eassign_local of Ttree.ident * Ttree.expr
| Eassign_field of Ttree.expr * Ttree.field * Ttree.expr
| Eunop of Ttree.unop * Ttree.expr
| Ebinop of Ttree.binop * Ttree.expr * Ttree.expr
| Ecall of Ttree.ident * Ttree.expr list
| Esizeof of Ttree.structure
type stmt =
Sskip
| Sexpr of Ttree.expr
| Sif of Ttree.expr * Ttree.stmt * Ttree.stmt
| Swhile of Ttree.expr * Ttree.stmt
| Sblock of Ttree.block
| Sreturn of Ttree.expr
and block = Ttree.decl_var list * Ttree.stmt list
and decl_fun = {
fun_typ : Ttree.typ;
fun_name : Ttree.ident;
fun_formals : Ttree.decl_var list;
fun_body : Ttree.block;
}
type file = { funs : Ttree.decl_fun list; }
end