This repository has been archived by the owner on May 12, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tds.mli
88 lines (67 loc) · 3.5 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
(* types nommés *)
| InfoTyp of string * typ
(* Struct *)
(* struct: InfoVar + liste des champs de la structure *)
| InfoStruct of string * typ * int * string * info_ast list
(* champ: nom - type - déplacement par rapport à la base de la structure parente *)
| InfoAttr of string * typ * int
(* Données stockées dans la tds et dans les AST : pointeur sur une information *)
and info_ast
(* Table des symboles *)
type tds
(* 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
(* Retourne le nom d'une variable, constante ou fonction *)
val get_nom: info_ast -> string
(* retourne le type d'une variable ou constante (Int), ou le type de retour d'une fonction *)
val get_type: info_ast -> typ
(* Retourne la taille du type associé (voir get_type) *)
val get_taille: info_ast -> int
(* Retourne la liste des types des paramètres d'une fonction. *)
val get_types_params: info_ast -> typ list
(* Retourne le déplacement par rapport au registre de la variable *)
val get_adresse_var: info_ast -> int
(* Retourne le registre dans lequel est stocké la variable *)
val get_registre_var: info_ast -> string