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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. //Si c'est une constante
  24. int isConst;
  25. };
  26. //Retourne la représentation d'un type en string
  27. char * type_to_string(struct type_t type);
  28. //Constante pour les entiers
  29. extern const struct type_t integer;
  30. //Constante pour les pointeurs
  31. extern const struct type_t pointer;
  32. /**************************************/
  33. /**************************************/
  34. /***** Gestion de la profondeur *****/
  35. /**************************************/
  36. /**************************************/
  37. //Incrémente la profondeur
  38. void inc_prof();
  39. //Récupère la profondeur
  40. int get_prof();
  41. //Détruit toutes les variables de la profondeur actuelle puis décrémente la profondeur
  42. void reset_prof();
  43. //Décrémente la profondeur sans reset les variables
  44. void decrement_prof();
  45. /**************************************/
  46. /**************************************/
  47. /*Table des symboles : fonctionnement */
  48. /**************************************/
  49. /**************************************/
  50. //Structure représentant un symbole
  51. struct symbole_t {
  52. //Son Nom
  53. char nom[30];
  54. //Son Adresse
  55. uintptr_t adresse;
  56. //Son type
  57. struct type_t type;
  58. //Est il initialisé
  59. int initialized;
  60. //Sa profondeur de création
  61. int profondeur;
  62. };
  63. //Fonction d'affichage d'un symbole
  64. void print_symbole(struct symbole_t symbole);
  65. //Fonction d'initialisation de la table, à appeler une fois
  66. void init(void);
  67. /**************************************/
  68. /**************************************/
  69. /** Table des symboles : primitives **/
  70. /**************************************/
  71. /**************************************/
  72. //Ajout d'un symbole a la table
  73. int push(char * nom, int isInit, struct type_t type);
  74. //Destruction et récupération du premier élément de la table
  75. struct symbole_t pop();
  76. //Destruction des n premiers elements de la table des symboles
  77. void multiple_pop(int n);
  78. //Retourne la dernière adresse disponible
  79. int get_last_addr();
  80. //Renvoi un pointeur vers le symbole correspondant au nom de variable
  81. struct symbole_t * get_variable(char * nom);
  82. //Affiche la table des symboles
  83. void print();
  84. #endif