Vous êtes sur la page 1sur 16

COMPILATION: GÉNÉRALITÉS

EMSI - 4ÈME IIR


2023/2024

Profs. M. D. RAHMANI, F.Z. TIJANE BADRI & R. FILALI

Plan
2

1. L'analyse lexicale : implantation d'un analyseur lexical :


1. Manuelle avec le langage C, C++
2. Automatique avec le langage Flex,
2. L'analyse syntaxique ascendante,
3. Implantation automatique d'un analyseur avec le langage Bison,
4. Conception d'un compilateur complet avec les langages Flex et Bison.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

1
1- Les compilateurs (1)
3

Définition:
Un compilateur est un programme qui lit un programme écrit dans un premier langage (le
langage source) et le traduit en un programme équivalent dans un autre langage (le
langage cible).
Le compilateur doit aussi vérifier que le programme a un certain sens et signaler les erreurs
qu'il détecte.

programme compilateur programme


source cible
messages d'erreur

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

1- Les compilateurs (2)


4

Il y'a deux parties dans la compilation: l'analyse et la synthèse.

 La partie analyse partitionne le programme source en ses


constituants et en crée une représentation intermédiaire.

 La partie synthèse construit le programme cible à partir de


cette représentation intermédiaire.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

2
2- Les phases d'analyse
5

L'analyse est constituée de 3 parties:


1. L'analyse lexicale (linéaire): le flot de caractères formant le programme
source est lu de gauche à droite et groupé en lexèmes (mots), qui sont des
suites de caractères ayant une signification collective (production d'un
automate à états fini ou un diagramme de transition).
2. L'analyse syntaxique (grammaticale): les unités lexicales (classe de mots)
sont regroupés hiérarchiquement dans des collections imbriquées (phrases)
ayant une signification collective (production d'un arbre syntaxique).
3. L'analyse sémantique: contrôle pour s'assurer que l'assemblage des
constituants du programme a un sens (arbre syntaxique décoré).

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

3- Les phases de synthèse


6

La synthèse est constituée de 3 parties:


1. Code intermédiaire : production d'un arbre abstrait et d'un code
associé à 3 adresses.
2. Optimisation du code : amélioration du code intermédiaire pour que
le code final s'exécute plus rapidement et utilise le minimum de
mémoire.
3. Production du code: production du code en langage de la machine
cible.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

3
4- Deux phases supplémentaires
7

1. La création de la table des symboles: c'est une structure de données


contenant un enregistrement pour chaque identificateur, muni de champs
pour ses attributs (emplacement mémoire, son type, sa portée..).
Pour les fonctions, la table des symboles garde le nombre et les types de
ses arguments, le mode de passage de chacun d'eux et la valeur de retour.

1. Le traitement des erreurs associées à chacune de ces phases.


Après avoir détecté une erreur, une phase doit la traiter de telle
façon que la compilation puisse continuer et que d'autres erreurs dans le
programme puissent être détectées.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

5-Schéma logique d'un compilateur


8

Programme source
analyse lexicale

analyse syntaxique

analyse sémantique

gestionnaire de la génération du traitement


table des symboles code intermédiaire des erreurs

optimisation

production du code

programme cible
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

4
6-Les phases et les outils utilisés
9

Les différentes phases Les concepts utilisés


Phases d'analyse : - analyse lexicale - expression régulière
- automate à états finis
- analyse syntaxique - grammaires
- automate à pile
- analyse sémantique - traduction dirigée par syntaxe

Phases de synthèse: - code intermédiaire - traduction dirigée par la syntaxe


- optimisation
- production du code

Traitements parallèles: - table des symboles


- traitement des erreurs

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

7- Les interprètes
10

Au lieu de produire un programme cible, un interprète effectue lui même


les opérations spécifiées par le programme source.
Un interprète est un outil ayant pour tâche d'analyser, de traduire et
d'exécuter les programmes.
On utilise souvent des interprètes pour exécuter les langages de commandes.
Exemples:
- Le shell d'Unix
- Les langages de script: PHP, Perl, Python

Certains langages ont deux versions, une compilée et une autre interprétée.
Exemples: caml, lisp, scala

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

5
8- Les 3 grandes catégories de langages
11

1- Les langages de programmation permettent de créer des programmes, des


applications mobiles, des sites Internet, des systèmes d'exploitation, etc...
Les 10 langages de programmation les plus populaires (en 2012):
C, Java, C++, Objective-C, C#, PHP, Basic, Python, Perl, JavaScript.
2- Les langages de description permettent de décrire et de structurer un ensemble
de données selon un jeu de règles et contraintes définies.
Exemples : SGML, XML, HTML.
3- Les langages de requêtes permettent d'interroger des structures qui contiennent
des données.
Exemples : SQL pour les BD relationnelles, OWL pour les ontologies,
XQuery pour les documents XML.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

9- Le classement des langages (1)


12

 Meilleurs langages en 2019 selon l'IEEE : Python leader pour la troisième année consécutive
 Il s'impose dans tous les domaines dans lesquels il est utilisé, du développement web à
l'embarqué

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

6
9- Le classement des langages (2)
13

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

9- Le classement des langages (3)


14

https://pypl.github.io/PYPL.html

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

7
9- Le classement des langages (4)
15

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

9- Le classement des langages (5)


16

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

8
Bibliographie:
17

Livres de référence:
1- A. Aho, M. Lam, R. Sethi et J. Ullman,
"Compilateurs: principe, techniques et outils", Pearson Education.
2- J. Menu, " Compilateurs avec C++", Addison - Wesley.
3- R. Wilhelm et D. Maurer, "Les compilateurs: théorie, construction, génération",
Masson
4- J.E.F. Friedel, "Maîtrise des expressions régulières", O'Reilly

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Webographie:
18

1- Cours de compilation, Luc Maranget


http://pauillac.inria.fr/~maranget/X/compil/poly/

2- Cours de compilation, ENS de Lyon, Christophe Alias, cours, TD, TP, examens et
partiels
http://perso.ens-lyon.fr/christophe.alias/teaching/compilation_M1_ENS_Lyon/index.html

3- Introduction à la compilation, Aix Marseille Université


http://pageperso.lif.univ-mrs.fr/~alexis.nasr/Ens/Compilation/cm01_intro_compil.pdf

4- Cours de compilation, Université du littoral


http://www-lisic.univ-littoral.fr/~fonlupt/Enseignement/compilation/compilation.pdf

5- PYPL PopularitY of Programming Language: http://pypl.github.io/PYPL.html


Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

9
Outils
19

Flex et bison: http://sourceforge.net/projects/winflexbison/


Nous aurons un fichier compressé: win_flex_bison-latest à décompresser.
ou http://sourceforge.net/projects/gnuwin32/files/bison/2.4.1/bison-2.4.1-setup.exe/download
JFlex: logiciel http://jflex.de/ , manuel: http://jflex.de/manual.html
et Cup: http://www2.cs.tum.edu/projects/cup/

Dev-C++: http://www.commentcamarche.net/download/telecharger-59-dev-c
Nous aurons un fichier exécutable: Dev-Cpp_5.9.2_TDM-GCC_4.8.1_Setup

Geany: http://www.geany.org/ , manuel: http://www.geany.org/Documentation/Manual

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

COMPILATION TP1
EMSI - 4ÈME IIR
2023/2024
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R. Filali

10
Rappel: traitement de caractères
21

Les macros de traitement de caractères:


Ces macros sont incluses dans la bibliothèque <ctype.h>.
Elles acceptent comme argument un char ou un int et retournent un entier
différent de 0 si l'argument est compris dans les limites indiquées ci-dessous:
macros condition
isalpha(c) A-Z, a-z
isupper(c) A-Z
islower(c) a-z
isdigit(c) 0-9
isxdigit(c) 0-9, A-F, a-f
isspace(c) blanc
isalnum(c) 0-9, A-Z, a-z

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Saisie d'une chaine de caractères avec cin.get()


22

Si on utilise cin tout seul, on a 2 #include <iostream>


using namespace std;
problèmes: int main() {
 on risque d'écrire au delà des char chaine[7]; // un tableau de caractères
cout<<"Entrez une chaine de 6 car"<<endl;
limites du tableau, // la 7 ème sera le '\0'
 un espace serait compris comme cin.get(chaine,7);
cout<<"contenu de la chaine:"<<chaine<<endl;
fin de chaine. cout<<endl;
 Il vaut mieux utiliser return 0;
}
cin.get(tableau, taille);

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

11
Utilisation du type string
23

Créer un objet string : // string 1


#include <iostream>
Soit après les "include" on met : #include <string> // Pour utiliser les objets string
using namespace std;
using namespace std ;
int main(){
string maChaine; // chaine de caractères
Soit on précise le namespace de //Création d'un objet 'maChaine' de type string
la classe : ....
return 0;
std::string maChaine ; }
Avec string :
getline(cin, maChaine);
sans besoin de préciser la taille
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Série 1: TP généralités
24

 Exercice 1: Ecrire un programme qui vérifie que les


parenthèses d’une chaîne, saisie au clavier, sont
bien équilibrées.
 Le programme doit afficher l'un des 3 messages:
 Les parenthèses sont bien équilibrées
 Il manque, 'n' parenthèses ouvrantes
 il manque, 'n' parenthèses fermantes
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

12
Exercice1(Solution) : TP1_Exo1.cpp
25

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Série1: TP généralités
26

 Exercice 2:
 Ecrire un programme qui implante un automate qui indique si un nombre
est constitué d'un nombre paire ou impaire de ‘a’.
a
début
0 1

paire a impaire

Remarque: l'objectif n'est pas de connaitre si le nombre est paire ou impaire


en déterminant le reste de la division par 2, mais d'utiliser l'automate pour
déterminer la parité.
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

13
Exercice2(Solution) : TP1_Exo2.cpp
27

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI I Compilation EMSI 4ème année IIR 2023/24

Série1: TP généralités
28

 Exercice 3:
1. Proposer un automate à états finis déterministe qui
reconnait les mots sur l’alphabet {a, b} qui contiennent
au moins 2 ‘b’.
2. Ecrire un programme qui implante cet automate et
donne le nombre de ‘b’ dans la chaine.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

14
Exercice3(Solution) : TP1_Exo4.cpp
29

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Série 1: TP généralités
30

 Exercice 4:
 Ecrire un programme ayant pour effet de synthétiser des
expressions arithmétiques composées du seul chiffre 4, des
quatre opérateurs +, -, *, / et les parenthèses (,).
 Par exemple : on peut écrire : "2 = (4+4)/4" et "5=4+(4/4)".
 On teste ce programme pour les entiers de 1 à 19.

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

15
Exercice 4
31

Déroulement de l’Algorithme :
Entier Représentation
1 4/4
2 (4+4)/4
3 4-(4/4)
4 4
5 4 + 1 = 4 + 4/4
6 4 + 2 = 4 + (4+4)/4
7 4 + 3 = 4 + (4-(4/4))
8 4 * 2 = 4 * ((4+4)/4)
9 4 * 2 + 1 = 4 * ((4+4)/4) + 4/4
Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

Exercice 4(Solution) : TP1_Exo4.cpp


32

Profs. M.D. RAHMANI, F.Z. TIJANE BADRI & R.FILALI Compilation EMSI 4ème année IIR 2023/24

16

Vous aimerez peut-être aussi