cours compilation

Download Cours Compilation

Post on 14-Aug-2015

142 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Universite de Bretagne Occidentale IUP Ingenierie INFORMATIQUE Deuxieme annee

COMPILATION THEORIE DES LANGAGES

Derniere revision: 29 janvier 2003

Table des matieres1 Introduction1.1 Qu'est ce que la compilation? : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.2 Pourquoi ce cours? : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3 Bibliographie succinte : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

3 6

3 4 5

2 Structure d'un compilateur

2.1 Phases d'analyse : : : : : : : : : : : : : 2.1.1 Analyse lexicale : : : : : : : : : : 2.1.2 Analyse syntaxique : : : : : : : : 2.1.3 Analyse semantique : : : : : : : 2.2 Phases de production : : : : : : : : : : : 2.2.1 Generation de code : : : : : : : : 2.2.2 Optimisation de code : : : : : : 2.3 Phases paralleles : : : : : : : : : : : : : 2.3.1 Gestion de la table des symboles 2.3.2 Gestion des erreurs : : : : : : : : 2.4 Conclusion : : : : : : : : : : : : : : : :

6 6 6 6 7 7 7 7 7 7 7

3 Analyse lexicale

3.1 Unites lexicales et lexemes : : : : : : : : 3.1.1 Expressions regulieres : : : : : : 3.2 Mise en uvre d'un analyseur lexical : : 3.2.1 Speci cation des unites lexicales 3.2.2 Attributs : : : : : : : : : : : : : 3.2.3 Analyseur lexical : : : : : : : : : 3.3 Erreurs lexicales : : : : : : : : : : : : :

9 9 11 11 11 11 13

9

4 L'outil (f)lex4.1 4.2 4.3 4.4 4.5

Structure du chier de speci cations (f)lex : Les expressions regulieres (f)lex : : : : : : : Variables et fonctions prede nies : : : : : : : Options de compilation ex : : : : : : : : : : Exemples de chier .l : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

15

15 16 16 17 17

5 Analyse syntaxique

5.1 Grammaires et Arbres de derivation : : : 5.1.1 Grammaires : : : : : : : : : : : : : 5.1.2 Arbre de derivation : : : : : : : : 5.2 Mise en oeuvre d'un analyseur syntaxique 5.3 Analyse descendante : : : : : : : : : : : : 5.3.1 Exemples : : : : : : : : : : : : : : 5.3.2 Table d'analyse LL(1) : : : : : : : 5.3.3 Analyseur syntaxique : : : : : : : 5.3.4 Grammaire LL(1) : : : : : : : : : 5.3.5 Recursivite a gauche : : : : : : : : 5.3.6 Grammaire propre : : : : : : : : : 5.3.7 Factorisation a gauche : : : : : : : 5.3.8 Conclusion : : : : : : : : : : : : : 5.4 Analyse ascendante : : : : : : : : : : : : : 5.5 Erreurs syntaxiques : : : : : : : : : : : : 5.5.1 Recuperation en mode panique : :

18

18 18 19 20 21 21 22 23 25 26 27 27 28 28 33 34

5.5.2 Recuperation au niveau du syntagme : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 5.5.3 Productions d'erreur : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35 5.5.4 Correction globale : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35

6 L'outil yacc/bison6.1 6.2 6.3 6.4 6.5

Structure du chier de speci cations bison : : : : : : : Attributs : : : : : : : : : : : : : : : : : : : : : : : : : : Communication avec l'analyseur lexical: yylval : : : : Variables, fonctions et actions prede nies : : : : : : : : Con its shift-reduce et reduce-reduce : : : : : : : : : : : 6.5.1 Associativite et priorite des symboles terminaux 6.6 Recuperation des erreurs : : : : : : : : : : : : : : : : : : 6.7 Exemples de chier .y : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

36

36 37 37 38 38 38 39 39

7 Theorie des langages : les automates

7.1 Classi cation des grammaires : : : : : : : : : : : : 7.1.1 Les langages contextuels : : : : : : : : : : : 7.1.2 Les langages reguliers : : : : : : : : : : : : 7.1.3 Les reconnaisseurs : : : : : : : : : : : : : : 7.2 Automates a etats nis : : : : : : : : : : : : : : : : 7.2.1 Construction d'un AEF a partir d'une E.R. 7.2.2 Automates nis deterministes (AFD) : : : : 7.2.3 Minimisation d'un AFD : : : : : : : : : : : 7.2.4 Calcul d'une E.R. decrite par un A.E.F. : : 7.3 Les automates a piles : : : : : : : : : : : : : : : : :

41

41 41 42 43 43 44 45 48 48 49

8 Analyse semantique

8.1 De nition dirigee par la syntaxe : : : : : : : : : : : 8.1.1 Schema de traduction dirige par la syntaxe 8.1.2 Graphe de dependances : : : : : : : : : : : 8.1.3 Evaluation des attributs : : : : : : : : : : : 8.2 Portee des identi cateurs : : : : : : : : : : : : : : 8.3 Contr^ ole de type : : : : : : : : : : : : : : : : : : : 8.3.1 Surcharge d'operateurs et de fonctions : : : 8.3.2 Fonctions polymorphes : : : : : : : : : : : : 8.4 Conclusion : : : : : : : : : : : : : : : : : : : : : :

51

51 53 53 54 57 58 59 59 59

9 Generation de code

9.1 Environnement d'execution : : : : : : : : : : : : : : : : 9.1.1 Organisation de la memoire a l'execution : : : : 9.1.2 Allocation dynamique: gestion du tas : : : : : : 9.2 Code intermediaire : : : : : : : : : : : : : : : : : : : : : 9.2.1 Caracteristiques communes aux machines cibles : 9.2.2 Code a 3 adresses simpli e : : : : : : : : : : : : 9.2.3 Production de code a 3 adresses : : : : : : : : : 9.3 Optimisation de code : : : : : : : : : : : : : : : : : : : : 9.3.1 Optimisations independantes de la machine cible 9.3.2 Op