123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #ifndef TAB_SYMB_H
- #define TAB_SYMB_H
-
- #include <stdint.h>
-
-
- /**************************************/
- /**************************************/
- /**** Gestion des types possibles ****/
- /**************************************/
- /**************************************/
-
- //Enumération des types de base reconnus
- enum base_type_t {UNKNOWN, INT, ADDR};
- //Table enregistrant la taille de ces types de bases (indexée sur les types)
- extern int taille_types[];
- //Structure gérant les types
- struct type_t {
- //Champs enregsitrant le type de base
- enum base_type_t base;
- //Si la variable est un pointeur, on enregitre son niveau (nombre de *)
- int pointeur_level;
- //Si il s'agit d'un tableau, on enregistre sa taille (nombre de cases) (même si c'est une variable on met quand même un nb_blocs à 1)
- int nb_blocs;
- //Si c'est un tableau cette valeur est à 1, 0 sinon.
- int isTab;
- //Si c'est une constante
- int isConst;
- };
-
- //Retourne la représentation d'un type en string
- char * type_to_string(struct type_t type);
- //Constante pour les entiers
- extern const struct type_t integer;
- //Constante pour les pointeurs
- extern const struct type_t pointer;
-
-
- /**************************************/
- /**************************************/
- /***** Gestion de la profondeur *****/
- /**************************************/
- /**************************************/
- //Incrémente la profondeur
- void inc_prof();
- //Récupère la profondeur
- int get_prof();
- //Détruit toutes les variables de la profondeur actuelle puis décrémente la profondeur
- void reset_prof();
- //Décrémente la profondeur sans reset les variables
- void decrement_prof();
-
-
-
- /**************************************/
- /**************************************/
- /*Table des symboles : fonctionnement */
- /**************************************/
- /**************************************/
-
- //Structure représentant un symbole
- struct symbole_t {
- //Son Nom
- char nom[30];
- //Son Adresse
- uintptr_t adresse;
- //Son type
- struct type_t type;
- //Est il initialisé
- int initialized;
- //Sa profondeur de création
- int profondeur;
- };
-
- //Fonction d'affichage d'un symbole
- void print_symbole(struct symbole_t symbole);
-
- //Fonction d'initialisation de la table, à appeler une fois
- void init(void);
-
-
-
-
-
-
- /**************************************/
- /**************************************/
- /** Table des symboles : primitives **/
- /**************************************/
- /**************************************/
-
- //Ajout d'un symbole a la table
- int push(char * nom, int isInit, struct type_t type);
- //Destruction et récupération du premier élément de la table
- struct symbole_t pop();
- //Destruction des n premiers elements de la table des symboles
- void multiple_pop(int n);
- //Retourne la dernière adresse disponible
- int get_last_addr();
- //Renvoi un pointeur vers le symbole correspondant au nom de variable
- struct symbole_t * get_variable(char * nom);
- //Affiche la table des symboles
- void print();
-
-
- #endif
|