sig
type loc = Stdlib.Lexing.position * Stdlib.Lexing.position
type ident = { id : string; id_loc : Ptree.loc; }
type typ = Tint | Tstructp of Ptree.ident
type unop = Unot | Uminus
type binop =
Beq
| Bneq
| Blt
| Ble
| Bgt
| Bge
| Badd
| Bsub
| Bmul
| Bdiv
| Band
| Bor
type expr = { expr_node : Ptree.expr_node; expr_loc : Ptree.loc; }
and expr_node =
Econst of int32
| Eright of Ptree.lvalue
| Eassign of Ptree.lvalue * Ptree.expr
| Eunop of Ptree.unop * Ptree.expr
| Ebinop of Ptree.binop * Ptree.expr * Ptree.expr
| Ecall of Ptree.ident * Ptree.expr list
| Esizeof of Ptree.ident
and lvalue = Lident of Ptree.ident | Larrow of Ptree.expr * Ptree.ident
type decl_var = Ptree.typ * Ptree.ident
type stmt = { stmt_node : Ptree.stmt_node; stmt_loc : Ptree.loc; }
and stmt_node =
Sskip
| Sexpr of Ptree.expr
| Sif of Ptree.expr * Ptree.stmt * Ptree.stmt
| Swhile of Ptree.expr * Ptree.stmt
| Sblock of Ptree.block
| Sreturn of Ptree.expr
and block = Ptree.decl_var list * Ptree.stmt list
type decl_struct = Ptree.ident * Ptree.decl_var list
type decl_fun = {
fun_typ : Ptree.typ;
fun_name : Ptree.ident;
fun_formals : Ptree.decl_var list;
fun_body : Ptree.block;
}
type decl = Dstruct of Ptree.decl_struct | Dfun of Ptree.decl_fun
type file = Ptree.decl list
end