Module O.Ast


module Ast: sig .. end


Arbres de syntaxe abstraite pour PCF objet
type label = string 
Les étiquettes des méthodes

type t =
| Num of int (*Constante entière*)
| Var of string (*Accès à une variable*)
| Op of Op.t * t * t (*Application d'un opérateur t1 op t2*)
| Ifz of t * t * t (*Conditionnelle Ifz t1 Then t2 Else t3*)
| Let of string * t * t (*Liaison locale Let x = t1 In t2*)
| App of t * t (*Application de fonction t1 t2*)
| Fun of string * t (*Définition de fonction Fun x -> t*)
| Fix of string * t (*Point fixe Fix x -> t*)
| Rec of (label * t) list (*Création d'un enregistrement { ...; lab=t; ..}*)
| Access of t * label (*Accès à un champ d'enregistrement t.lab*)
| CopyWith of t * (label * t) list (*Copie/extension d'enregistrement { t with ... ; lab=t; ... }*)
| Obj of string option * (label * t) list (*Création d'un objet obj [this] { ... ; lab=t ; ... }*)
| Invoke of t * label (*Invocation de méthode t#lab*)
| ObjWith of string option * t * (label * t) list (*Extension d'un objet obj [this] { t with ...; lab=t ; }*)
Type de la syntaxe abstraite des termes de oPCF.