-
Notifications
You must be signed in to change notification settings - Fork 0
/
tds.mli
63 lines (48 loc) · 2.58 KB
/
tds.mli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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