No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

table_symboles.h 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifndef TAB_SYMB_H
  2. #define TAB_SYMB_H
  3. #include <stdint.h>
  4. /**************************************/
  5. /**************************************/
  6. /**** Gestion des types possibles ****/
  7. /**************************************/
  8. /**************************************/
  9. //Enumération des types de base reconnus
  10. enum base_type_t {UNKNOWN, INT, ADDR};
  11. //Table enregistrant la taille de ces types de bases (indexée sur les types)
  12. extern int taille_types[];
  13. //Structure gérant les types
  14. struct type_t {
  15. //Champs enregsitrant le type de base
  16. enum base_type_t base;
  17. //Si la variable est un pointeur, on enregitre son niveau (nombre de *)
  18. int pointeur_level;
  19. //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)
  20. int nb_blocs;
  21. //Si c'est un tableau cette valeur est à 1, 0 sinon.
  22. int isTab;
  23. };
  24. //Retourne la représentation d'un type en string
  25. char * type_to_string(struct type_t type);
  26. //Constante pour les entiers
  27. extern const struct type_t integer;
  28. //Constante pour les pointeurs
  29. extern const struct type_t pointer;
  30. /**************************************/
  31. /**************************************/
  32. /***** Gestion de la profondeur *****/
  33. /**************************************/
  34. /**************************************/
  35. //Incrémente la profondeur
  36. void inc_prof();
  37. //Récupère la profondeur
  38. int get_prof();
  39. //Détruit toutes les variables de la profondeur actuelle puis décrémente la profondeur
  40. void reset_prof();
  41. //Décrémente la profondeur sans reset les variables
  42. void decrement_prof();
  43. /**************************************/
  44. /**************************************/
  45. /*Table des symboles : fonctionnement */
  46. /**************************************/
  47. /**************************************/
  48. //Structure représentant un symbole
  49. struct symbole_t {
  50. //Son Nom
  51. char nom[30];
  52. //Son Adresse
  53. uintptr_t adresse;
  54. //Son type
  55. struct type_t type;
  56. //Est il initialisé
  57. int initialized;
  58. //Sa profondeur de création
  59. int profondeur;
  60. };
  61. //Fonction d'affichage d'un symbole
  62. void print_symbole(struct symbole_t symbole);
  63. //Fonction d'initialisation de la table, à appeler une fois
  64. void init(void);
  65. /**************************************/
  66. /**************************************/
  67. /** Table des symboles : primitives **/
  68. /**************************************/
  69. /**************************************/
  70. //Ajout d'un symbole a la table
  71. int push(char * nom, int isInit, struct type_t type);
  72. //Destruction et récupération du premier élément de la table
  73. struct symbole_t pop();
  74. //Destruction des n premiers elements de la table des symboles
  75. void multiple_pop(int n);
  76. //Retourne la dernière adresse disponible
  77. int get_last_addr();
  78. //Renvoi un pointeur vers le symbole correspondant au nom de variable
  79. struct symbole_t * get_variable(char * nom);
  80. //Affiche la table des symboles
  81. void print();
  82. #endif