Module Ptree

module Ptree: sig .. end

Arbres issus du parsing


type loc = Stdlib.Lexing.position * Stdlib.Lexing.position 
type ident = {
   id : string;
   id_loc : loc;
}
type typ = 
| Tint
| Tstructp of ident
type unop = 
| Unot
| Uminus
type binop = 
| Beq
| Bneq
| Blt
| Ble
| Bgt
| Bge
| Badd
| Bsub
| Bmul
| Bdiv
| Band
| Bor
type expr = {
   expr_node : expr_node;
   expr_loc : loc;
}

Expression C

type expr_node = 
| Econst of int32
| Eright of lvalue
| Eassign of lvalue * expr
| Eunop of unop * expr
| Ebinop of binop * expr * expr
| Ecall of ident * expr list
| Esizeof of ident
type lvalue = 
| Lident of ident
| Larrow of expr * ident

Une valeur gauche (en anglais, left value), c'est-à-dire une expression pouvant apparaître à gauche d'une affectation. Dans mini-C, une valeur gauche est soit un identificateur, soit un accès à un champ de structure.

type decl_var = typ * ident 
type stmt = {
   stmt_node : stmt_node;
   stmt_loc : loc;
}

Instruction C

type stmt_node = 
| Sskip
| Sexpr of expr
| Sif of expr * stmt * stmt
| Swhile of expr * stmt
| Sblock of block
| Sreturn of expr
type block = decl_var list * stmt list 
type decl_struct = ident * decl_var list 
type decl_fun = {
   fun_typ : typ;
   fun_name : ident;
   fun_formals : decl_var list;
   fun_body : block;
}
type decl = 
| Dstruct of decl_struct
| Dfun of decl_fun

Un fichier C est une liste de déclarations de structures et de fonctions

type file = decl list