4 TABLE DES MATIÈRES
4 Les tâches et la structure d’un compilateur 59
4.1 Un peu d’anatomie et de physiologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.1.1 Lelexique......................................... 60
4.1.2 Syntaxe et Sémantique : introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.1.3 Lex et Yacc – premiers commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.1.4 Qu’est-ce que l’optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2 Intégration d’un compilateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.2.1 Intégrationprocédurale.................................. 65
4.2.2 Transducteurs de flux, ou «pipelining» . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3 Organisation de la table des symboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.1 Techniquesdehachage.................................. 67
4.4 Exercices ............................................. 68
5 Analyse syntaxique I – Techniques fonctionnelles 71
5.1 Grammaires et parsing ...................................... 71
5.1.1 Exemple ......................................... 71
5.2 Stratégiesduparsing ....................................... 73
5.2.1 Stratégiedescendante................................... 73
5.2.2 Techniquesascendantes ................................. 74
5.3 Philosophie du parsing fonctionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.3.1 Qu’est-ce qu’un parseur? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.2 Objectifsfinaux...................................... 75
5.4 Composition des parseurs fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.4.1 Premierspas ....................................... 77
5.4.2 Séquences, filtres, alternatives, itérations . . . . . . . . . . . . . . . . . . . . . . . . 78
5.4.3 Sérialisation sans mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4.4 Encore un exemple : listes Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.5 Exercices ............................................. 82
6 Analyse syntaxique II – développement et optimisation 85
6.1 Analyse des expressions algébriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.1.1 Premier essai, opérations Booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.1.2 Arithmétique et problèmes avec la récursivité à gauche . . . . . . . . . . . . . . . . . 87
6.1.3 Quelquesoptimisations.................................. 89
6.2 Opérateurs de précédence et associativité quelconques . . . . . . . . . . . . . . . . . . . . . 89
6.3 Exercices ............................................. 92
7 Informations complémentaires sur les parseurs descendants 94
7.1 Diagrammessyntaxiques..................................... 94
7.2 Optimisation classique des parseurs descendants . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.2.1 Élimination de la récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2.2 Tableaux PREMIER et SUIVANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.3 Exercices ............................................. 97
8 Stratégie ascendante d’analyse syntaxique 99
8.1 Idéegénérale ........................................... 99
8.2 Grammairesd’opérateurs..................................... 100
8.3 ParseursLR............................................ 101
8.3.1 Construction des tableaux de parsing . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.4 Exercices ............................................. 103