open Pp
exception PasEncore (* Pas encore fait *)
type valeur =
| Vint of int
| Vbool of bool
| Varray of valeur array
| Undefined (* Pour les variables non initialisées *)
type erreur =
| DivZero
| Type of type_expr * valeur
| PasDef
exception Erreur of erreur
let erreur e = raise (Erreur e)
(* Évaluation des primitives int * int -> valeur *)
let binop op i1 i2 = match op with
| Plus -> Vint (i1 + i2)
| Minus -> Vint (i1 - i2)
| Times -> Vint (i1 * i2)
| Div ->
if i2 = 0 then
erreur DivZero
else
Vint (i1/i2)
| _ -> raise PasEncore
(* Évaluation des expressions, type Pp.expression -> valeur *)
let rec expr e = match e with
| Int i -> Vint i
| Bin (op,e1, e2) -> binop op (expr_int e1) (expr_int e2)
| _ -> raise PasEncore
(* Évaluation des expressions de type entier, type Pp.expression -> int *)
and expr_int e = match expr e with
| Vint i -> i
| v -> erreur (Type (Integer, v))
let instr = function
| Writeln_int e ->
let i = expr_int e in
print_int i ;
print_newline () ;
| _ -> raise PasEncore
let eval
{global_vars = globs ;
definitions = defs ;
main = i} =
instr i
Ce document a été traduit de LATEX par
HEVEA.