Sommaire                    Définition du langage d’expérimentation          Compilateur pour le langage Z minimal          Extensions du langage Z minimal

 

Chapitre précédent               Chapitre 6 : Tables de compilation               Chapitre suivant


 

6.1 Introduction

6.2 Table des symboles (TABSYM )

6.3 Table des objets (TABOB)

6.4 Table des constantes (TABCONS)

6.5 Longueur de la zone de données (LONGZDD)


 

6. 1 Introduction 

Les tables de compilation reflètent l’image du programme source exprimée sous une autre forme. C’est la phase sémantique qui crée et gère ces tables.

Les tables utiles à la génération de code sont:

- Table des quadruplets.

- Table des objets.

- Table des constantes numériques.

- Etc.

Une table des symboles est aussi utilisée mais n’est pas utile pour la génération de code.

 

6.2 Table des symboles (TABSYM )  

Le but de la table des symboles est de mémoriser tous les identificateurs d’objets utilisés dans un module. Elle permet d’associer à chaque identificateur ses attributs. Comme attribut, on peut pour l’instant citer le type et l’adresse relative dans la zone de données. Une entrée de la table est le couple (identificateur, indice dans la table des objets).

Une entrée est ajoutée dans la table à chaque déclaration de variable.

Si un identificateur est utilisé dans une instruction, il est recherché pour retrouver ses attributs.

L’accès à cette table occupe un temps important dans la phase de compilation. Une structure de données efficace oblige. On peut choisir une table ordonnée.

Une entrée dans cette table est le couple (Identificateur, Indice dans la table des objets). La table des objets est décrite plus loin.

 

Deux modules sont nécessaires pour gérer la table des symboles.

    New_id(Idf)

Un nouvel identificateur vient d’être déclaré. Il vérifie si l’identificateur Idf n’est pas déjà déclaré (n’existe pas dans la table ) puis le met dans la table.

    Old_id(idf )

Un identificateur vient d’être déclaré(partie déclaration) ou utilisé (partie corps). Il recherche l’emplacement correspondant dans la table des symboles. S’il n’est pas trouvé, une erreur est signalée.

Nous devons définir une limite (LimitSymb) pour la table des symboles TABSYM.

On prendra une valeur arbitraire.

 

6.3 Table des objets (TABOB) 

A la table des symboles est associé la table des objets. Un objet sert à décrire l’identificateur via ses attributs.

Un élément de TABOB est un descripteur avec 4 champs:

    ( A1, A2, A3, A4 )

Le sens des attributs varie selon l’objet.

Cas des variables simples (Pour notre cas )

A1 = ‘L’ // indique un accès local

A2 = type // pour l’instant type=‘E’ (Entier) ou ‘B’ (Booléen) 

A3 non utilisé

A4 = adresse relative de l’identificateur (variable) dans la zone de données

 

Les modules New_attribut et Old_attribut Là aussi, deux modules sont nécessaires pour gérer la table des objets:

New_attribut (P1, P2, P3, P4)

De nouveaux attributs sont attribués à un objet. Il rend l’indice dans TABOB où l’objet est créé, -1 si échec.

 

Old_attribut (I)

Il récupère les attributs de l’objet d’emplacement I dans TABOB. Il les rend donc les paramètres P1, P2, P3, P4.

Nous définissons une limite(LimitObj) pour la table des objets. On prendra une valeur arbitraire.

 

6.4 Table des constantes (TABCONS)  

La table des constantes contient l’ensemble des constantes figurant dans le programme source. Chaque élément possède un seul champ qui contient la constante sous forme canonique, c’est à dire sous forme chaîne de caractères. 

 

6.5 Longueur de la zone de données (LONGZDD)  

Le compilateur maintient une variable fort utile renfermant la longueur de la zone de données. Elle est déterminée après allocation de tous les objets de la procédure.

 

Exemple

La figure 6 montre les tables de compilation créées par le compilateur pour un programme source donné. En fin de compilation, la table des symboles est détruite.

 

 

Figure 6: Tables de compilation