0% ont trouvé ce document utile (0 vote)
44 vues4 pages

Mini-compilateur : Guide de développement

Transféré par

amne.zem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
44 vues4 pages

Mini-compilateur : Guide de développement

Transféré par

amne.zem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi