Université des Sciences et de la Technologie Houari Boumediene
Faculté d’Informatique
Département IA et SIQ
3 années ING sécurité Année Universitaire : 2024/2025
Module Compilation
I. Introduction :
Le but de ce projet est de réaliser un mini-compilateur passant par les
différentes phases de la compilation à savoir l'analyse lexicale et l'analyse syntaxico-
sémantique, ainsi que la génération du code intermédiaire.
Les traitements parallèles concernant la gestion de la table des symboles ainsi que le
traitement des différentes erreurs doivent être également réalisés lors des phases
d'analyse du processus de compilation.
II. Description du Langage MinING:
La structure générale d’un programme est la suivante :
VAR_GLOBAL {
}
DECLARATION {
}
INSTRUCTION {
}
1. Commentaire :
Un commentaire est ignoré par le compilateur. Il ne peut être que sur une seule
ligne. Exemple : %% ceci est un commentaire
2. Déclarations :
Le bloc déclaration comporte des variables simples, des tableaux, des structures
de données et des constantes.
2.1. Déclaration des variables de type simple :
La déclaration d’une variable a la forme suivante :
TYPE listeVariables ;
listeVariables est un ensemble d’identificateurs séparés par une virgule.
Exemple :
%% Déclaration d’une variable simple
TYPE nomVariable1 ;
%% Déclaration de 2 variables
TYPE nomVariable2, nomVariable3 ;
1
Dr H.BELHADI
2.2. Déclaration des tableaux
La déclaration d’un tableau a la forme suivante :
TYPE nomTable[taille] ;
La taille d’un tableau est positive (taille >0)
2.3. TYPE :
Le type peut être : INTEGER, FLOAT, CHAR.
INTEGER : Une constante entière est une suite de chiffres. Elle peut être
signée ou non signée tel que sa valeur est entre -32768 et 32767. Si la constante
entière est signée, elle doit être mise entre parenthèses.
Exemple : INTEGER a ; %% les valeurs possible 21, (-5) , (+5)
FLOAT : Une constante réelle est une suite de chiffres contenant le point
décimal. Elle peut être signée ou non signée. Si la constante réelle est signée,
elle doit être mise entre parenthèses.
Exemple : FLOAT a ; %% les valeurs possible 88.5, (-5.6), (+5.6)
CHAR : le type reflète un seul caractère, mais si on veut une chaine de
caractères, on déclare un tableau de char.
Exemple : CHAR d,tc[5] ;%% d : un seul caractères et tc : une chaine de
caractères
2.4. Déclaration des Constantes :
La déclaration d’une constante se fait comme suit :
CONST TYPE idf = valeur ;
CONST : une constante peut prendre une valeur unique correspondant à un
des types cités et qui reste inchangée tout au long du programme.
Exemple : CONST INTEGER d = 5 ;
3. Identificateur :
Un identificateur est une suite alpha-numérique qui commence par une lettre
majuscule suivie d’une suite de chiffres et lettres minuscules. Un IDF ne doit pas
contenir plus de 8 caractères.
Les noms du programme principal, des variables, et des constantes sont des
identificateurs.
4. Opérateurs arithmétique, logique et de comparaison
Opérateurs arithmétiques :
o +, - , *, /
Opérateurs logiques :
o (expression1 && expression2) : le et logique.
o (expression1 || expression2) : le ou logique.
o (! expression) : la négation.
2
Dr H.BELHADI
Opérateurs de comparaison
o expression1> expression2
o expression 1< expression2
o expression1 >= expression2
o expression1 <= expression2
o expression1 == expression2
o expression1 != expression2
Les conditions
Une condition est une expression qui renvoie ‘1’ ou ‘0’. Elle peut prendre la forme
d’une expression logique ou de comparaison.
5. Instructions :
L’affectation : Idf =expression ;
Exemple : A=(X+7+B)/ (5,3-(-2)) ; B= 0;
Condition IF (Si .. cond .. Alors ..inst1.. Sinon ..inst2.. FinSi) : Le
premier bloc est exécuté ssi la condition est vérifiée. Sinon le bloc « ELSE »
sera exécuté s’il existe. On peut avoir des conditions imbriquées.
Exemple : IF (Aa > Bb) { Cc=E+2.6; } ELSE{ Cc=0; }
Boucle For (Pour (initialisation : pas : cond_d’arrêt) ..inst..) : Le
bloc d’instructions est exécuté ssi la condition est vérifiée. On peut avoir des
boucles imbriquées.
Exemple : FOR(i =0 :2 :n){ i=i+1 ;}
Entrée /Sortie (READ(nomVar), WRITE(("…", nomVar, "…"))
Exemple :WRITE ("Donner la valeur de A :"); READ (A); WRITE ("La Valeur de
A est ", A, ".");
Remarque : Toute instruction doit se terminer par un point-virgule.
Associativité et priorité des opérateurs :
Les associativités et les priorités des opérateurs sont données par la table suivante par
ordre croissant :
Opérateur Associativité
! /
|| Gauche
Opérateurs
Logiques & Gauche
3
Dr H.BELHADI
Opérateurs de Gauche
> >= == != <= <
comparaison
+ - Gauche
Opérateurs
Arithmétiques * / Gauche
Le projet devrait inclure les étapes suivantes :
Analyse lexicale : Créer un analyseur lexical qui peut prendre en charge les
différentes entités lexicaux du langage tels que les mots-clés, les identificateurs, les
constantes, les opérateurs, etc...
Analyse syntaxique : Concevoir un analyseur syntaxique capable de comprendre
la structure grammaticale du langage.
Gestion de la table de symboles : La table de symboles doit être créée lors de la
phase de l’analyse lexicale. Elle doit regrouper l’ensemble des variables et
constantes définies par le programmeur avec toutes les informations nécessaires
pour le processus de compilation. Cette table sera implémentée sous forme d’une
table. Elle sera mise à jour au fur et à mesure de l’avancement de la compilation. Il
est demandé de prévoir des procédures pour permettre de rechercher et d’insérer
des éléments dans la table des symboles.
Analyse sémantique : Mettre en œuvre une analyse sémantique pour vérifier la
validité sémantique du programme. Cela pourrait inclure la gestion des portées des
variables, la résolution des types, etc.
Génération de code intermédiaire : Créer un générateur de code intermédiaire
prêt à être convertie en code machine sous forme de quadruplets.
Tests et validation : Développez des jeux de tests complets pour évaluer la
robustesse de votre compilateur. Assurez-vous que le compilateur génère un code
valide et fonctionnel pour différents programmes.
Documentation : Fournissez une documentation détaillée expliquant le
fonctionnement de votre compilateur (10page maximum), les choix de conception,
et les étapes nécessaires pour son utilisation.
Organisation :
Le projet se réalise avec un groupe de 5 à 6 étudiants.
Détaillez les tâches attribuées à chaque membre du groupe.
Date limite : 10 décembre 2024. Assurez-vous de respecter ce délai pour éviter
toute pénalité.
Format papier : Vous devez remettre une version imprimée de votre rapport de
projet.
Email : Vous devrez envoyer un email contiendra : le rapport, le code source.
Assurez-vous que le code est bien organisé, commenté et fonctionnel.
4
Dr H.BELHADI