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

 

Chapitre précédent               Chapitre 7 : Sémantique des déclarations               Chapitre suivant


7.1 Introduction

7.2 Table des quadruplets (QUADRUPLES)

7.3 Quadruplets

7.4 Le problème

7.5 Syntaxe des déclarations

7.6 Fonctions sémantiques

7.7 Exemple


 

7.1 Introduction  

L’analyseur sémantique est l’ensemble de fonctions sémantiques déduites à partir de la définition du langage. Le rôle des fonctions sémantiques est de générer une forme intermédiaire en tenant compte des concepts prédéfinis(organisation de la mémoire, attribution des adresses, tables de compilation, … ).

Une forme intermédiaire est une forme très proche du langage machine. Ça peut être des quadruplets, des triplés ou tout autre forme. Pour notre cas, nous avons opté pour les quadruplets qui seront décrits juste après.

Les fonctions sémantiques sont insérées quelque part dans les règles syntaxiques.

 

7.2 Table des quadruplets (QUADRUPLES) 

Le programme source est transformé et découpé en opérations élémentaires très proches du langage machine. Une opération élémentaire est représenté par un quadruplet .

Un quadruplet est formé de 4 champs (A, B, C, D)

A : Code Opération

B, C, D : Paramètres de l’opération

Les paramètres de l’opération sont des indices vers les tables de compilation.

On dispose ainsi d’une table de quadruplets QUADRUPLES.

 

Un module est nécessaire pour gérer cette table.

New_quadruple (P1,P2,P3,P4)

Il ajoute un nouveau quadruplet à la table des quadruplets QUADRUPLES et rend l’indice du quadruplet créé, -1 si échec.

Comme pour les autres tables, nous devons aussi définir une limite (LimitQuad) pour la table des quadruplets. On prendra une valeur arbitraire.

 

Les figures ci-après explicitent la phase sémantique. La figure 7 montre le résultat de la phase sémantique qui est tout simplement une forme intermédiaire composée de l’ensemble des tables de compilation adressées par la table des quadruplets.

 

 

Figure 7: Forme intermédiaire

 

La figure 8  montre que l’analyse sémantique est en fin de compte l’analyseur syntaxique étoffé par les fonctions sémantiques.

 

 

Figure 8: Analyse sémantique

 

7.3 Quadruplets  

Comme l’allocation des variables est dynamique, pour chaque déclaration de variable nous devons générer le quadruplet (A, B, C, D) tel que :

A est de la forme ‘D’+’Type’ (Type est le type de la variable)

B : pointeur dans TABOB vers l’objet

C et D non utilisés

Pour le langage Z minimal, un seul type de quadruplet : (‘DE’, B, , ).

Dans tout le document, pointeur désigne un indice ou un emplacement.

 

7.4 Le problème  

Réaliser la sémantique des déclarations revient à résoudre le problème suivant: Où insérer les fonctions sémantiques dans l’analyseur syntaxique pour faire les vérifications qu’il faut et générer pour chaque déclaration de variable le quadruplet correspondant à une déclaration ?

Dans ce qui suit, nous rappelons, dans un premier temps, la partie de la grammaire concernée par les déclarations (en surbrillance) et la définition sémantique des déclarations exprimée en langage naturel. Dans un deuxième temps, nous montrons le placement des fonctions sémantiques (en surbrillance) dans les règles de grammaire ainsi que leurs descriptions.

 

7.5 Syntaxe des déclarations  

<Algo Z>     →     [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]

<Ps>           →     <S>;{ [~Soit|Soient~] <S>;}*

<S>            →     <Li> Sep <Typ>

<Li>           →     Idf {, Idf}*

<Typ>        →     Entier

 

Définition sémantique

La partie déclaration consiste à définir l’ensemble des variables utilisées dans le programme source. Pour le langage Z minimal, seules les variables entières sont autorisées. Un identificateur ne doit pas désigner deux variables différentes. Le type peut ne pas être donné. Par défaut c’est Entier.

 

Conventions

Dans tout le document nous adoptons les conventions suivantes pour exprimer les fonctions sémantiques:

Italique  :            Variables utilisées par le compilateur

Gras Italique :    Inconnues à déterminer (dans les structures de contrôle)

Gras :                  Désigne des champs d’enregistrement dans les tables de compilation

‘---’   :                 Nom du quadruplet 

=    :                    Désigne l’affectation de variable

 

7.6 Fonctions sémantiques  

Les fonctions sémantiques (en surbrillance) sont insérées comme suit:

<Algo Z>     →       [ ~Soit Soient~ <Ps> ] Debut  <Lis> Fin [;]

<Ps>            →       <S>;{ [~Soit|Soient~] <S>;}*

<S>              →       <Li> Sep  <Typ> F3             

<Li>             →       Idf  F1 {, Idf   F1   }*

<Typ>          →       Entier F2 

 

Leurs descriptions sont les suivantes:

 

F1

- Vérifier que l’identificateur Idf n’est pas déclaré (ne figure pas dans la table des symboles TABSYM), sinon Erreur.

- Sauvegarder l’identificateur Idf dans une liste L.

 

F2

Récupérer le type dans Type. Ici, Type vaut ‘E’.

 

F3

Pour chaque Idf dans L :

- Le mettre dans la table des symboles TABSYM.

- Lui attribuer une adresse relative et le mettre dans la table des objets TABOB (soit Pt son emplacement).

- Générer le quadruplet (‘D’+Type, Pt, , )

 

7.7 Exemple  

La figure 9 montre les tables créées par la phase sémantique pour un programme source donné. En fin de compilation, programme source est transforme en tables: QUADRUPLES + TABOB + TABCONS + LONGZDD.

 

 

Figure 9: Tables de compilation (Déclaration de variables)