feat: debut des pointeurs
This commit is contained in:
parent
a1fa41107b
commit
ba9e13e5b8
19
src/ast.ml
19
src/ast.ml
|
@ -5,6 +5,7 @@ module type Ast =
|
|||
sig
|
||||
type expression
|
||||
type instruction
|
||||
type affectable
|
||||
type fonction
|
||||
type programme
|
||||
end
|
||||
|
@ -22,6 +23,12 @@ type unaire = Numerateur | Denominateur
|
|||
(* Opérateurs binaires de Rat *)
|
||||
type binaire = Fraction | Plus | Mult | Equ | Inf
|
||||
|
||||
type affectable =
|
||||
(* Dé-référencement d'un affectable *)
|
||||
| Dref of affectable
|
||||
(* Identifiant *)
|
||||
| Ident of string
|
||||
|
||||
(* Expressions de Rat *)
|
||||
type expression =
|
||||
(* Appel de fonction représenté par le nom de la fonction et la liste des paramètres réels *)
|
||||
|
@ -36,14 +43,22 @@ type expression =
|
|||
| Unaire of unaire * expression
|
||||
(* Opération binaire représentée par l'opérateur, l'opérande gauche et l'opérande droite *)
|
||||
| Binaire of binaire * expression * expression
|
||||
(* Affectable représenté par son affectable *)
|
||||
| Affectable of affectable
|
||||
(* Null *)
|
||||
| Null
|
||||
(* Nouveau type *)
|
||||
| NewType of typ
|
||||
(* Adresse *)
|
||||
| Adresse of string
|
||||
|
||||
(* Instructions de Rat *)
|
||||
type bloc = instruction list
|
||||
and instruction =
|
||||
(* Déclaration de variable représentée par son type, son nom et l'expression d'initialisation *)
|
||||
| Declaration of typ * string * expression
|
||||
(* Affectation d'une variable représentée par son nom et la nouvelle valeur affectée *)
|
||||
| Affectation of string * expression
|
||||
(* Affectation d'un affectable à une expression *)
|
||||
| Affectation of affectable * expression
|
||||
(* Déclaration d'une constante représentée par son nom et sa valeur (entier) *)
|
||||
| Constante of string * int
|
||||
(* Affichage d'une expression *)
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
type typ = Bool | Int | Rat | Undefined
|
||||
type typ = Bool | Int | Rat | Pointeur of typ | Undefined
|
||||
|
||||
let string_of_type t =
|
||||
let rec string_of_type t =
|
||||
match t with
|
||||
| Bool -> "Bool"
|
||||
| Int -> "Int"
|
||||
| Rat -> "Rat"
|
||||
| Pointeur(t_p) -> "Poi " ^ string_of_type t_p
|
||||
| Undefined -> "Undefined"
|
||||
|
||||
|
||||
let est_compatible t1 t2 =
|
||||
let rec est_compatible t1 t2 =
|
||||
match t1, t2 with
|
||||
| Bool, Bool -> true
|
||||
| Int, Int -> true
|
||||
| Rat, Rat -> true
|
||||
| Pointeur(t_p1), Pointeur(t_p2) -> est_compatible t_p1 t_p2
|
||||
| _ -> false
|
||||
|
||||
let%test _ = est_compatible Bool Bool
|
||||
|
@ -50,6 +52,7 @@ let getTaille t =
|
|||
| Int -> 1
|
||||
| Bool -> 1
|
||||
| Rat -> 2
|
||||
| Pointeur(_) -> 1
|
||||
| Undefined -> 0
|
||||
|
||||
let%test _ = getTaille Int = 1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
(* Types manipulés dans Rat *)
|
||||
type typ = Bool | Int | Rat | Undefined
|
||||
type typ = Bool | Int | Rat | Pointeur of typ | Undefined
|
||||
|
||||
(* string_of_type : typ -> string *)
|
||||
(* transforme un typ en chaîne de caractère *)
|
||||
|
|
Loading…
Reference in a new issue