projet-traduction-langage/tds.mli

64 lines
2.6 KiB
OCaml
Raw Normal View History

2021-11-24 13:13:45 +00:00
open Type
(* Définition du type des informations associées aux identifiants *)
type info =
(* Information associée à une constante : son nom (non indispensable mais aide au test et debbugage) et sa valeur *)
| InfoConst of string * int
(* Information associée à une variable : son nom (non indispensable mais aide au test et debbugage),
son type, et son adresse ie son déplacement (int) par rapport à un registre (string) *)
| InfoVar of string * typ * int * string
(* Information associée à une fonction : son nom (utile pour l'appel), son type de retour et la liste des types des paramètres *)
| InfoFun of string * typ * typ list
(* Table des symboles *)
type tds
(* Données stockées dans la tds et dans les AST : pointeur sur une information *)
type info_ast
(* Création d'une table des symboles à la racine *)
val creerTDSMere : unit -> tds
(* Création d'une table des symboles fille *)
(* Le paramètre est la table mère *)
val creerTDSFille : tds -> tds
(* Ajoute une information dans la table des symboles locale *)
(* tds : la tds courante *)
(* string : le nom de l'identificateur *)
(* info : l'information à associer à l'identificateur *)
(* Si l'identificateur est déjà présent dans TDS, l'information est écrasée *)
(* retour : unit *)
val ajouter : tds -> string -> info_ast -> unit
(* Recherche les informations d'un identificateur dans la tds locale *)
(* Ne cherche que dans la tds de plus bas niveau *)
val chercherLocalement : tds -> string -> info_ast option
(* Recherche les informations d'un identificateur dans la tds globale *)
(* Si l'identificateur n'est pas présent dans la tds de plus bas niveau *)
(* la recherche est effectuée dans sa table mère et ainsi de suite *)
(* jusqu'à trouver (ou pas) l'identificateur *)
val chercherGlobalement : tds -> string -> info_ast option
(* Affiche la tds locale *)
val afficher_locale : tds -> unit
(* Affiche la tds locale et récursivement *)
val afficher_globale : tds -> unit
(* Créer une information à associer à l'AST à partir d'une info *)
val info_to_info_ast : info -> info_ast
(* Récupère l'information associée à un noeud *)
val info_ast_to_info : info_ast -> info
(* Modifie le type si c'est une InfoVar, ne fait rien sinon *)
val modifier_type_info : typ -> info_ast -> unit
(* Modifie les types de retour et des paramètres si c'est une InfoFun, ne fait rien sinon *)
val modifier_type_fonction_info : typ -> typ list -> info_ast -> unit
(* Modifie l'emplacement (dépl, registre) si c'est une InfoVar, ne fait rien sinon *)
val modifier_adresse_info : int -> string -> info_ast -> unit