introduction
Ce livre explore de manière complète et approfondie des sujets importants dans la conception de compilateurs, notamment l'analyse lexicale, l'analyse grammaticale, la définition guidée par la grammaire et la traduction guidée par la grammaire, l'environnement d'exécution, la génération de code cible, la technologie d'optimisation de code, la détection du parallélisme et la technologie d'analyse inter-processus. , et un grand nombre d'exemples sont donnés dans les chapitres correspondants. Par rapport à l'édition précédente, ce livre a été entièrement révisé pour couvrir les derniers développements en matière de développement de compilateurs. Un grand nombre d'exemples et de références sont fournis dans chaque chapitre.
Catalogue de livres
Mots de l'éditeur
Préface du traducteur
Avant-propos
Chapitre 1 Introduction< /p>
1.1 Processeur de langage
1.2 La structure d'un compilateur
1.2.1 Analyse lexicale
1.2.2 Analyse syntaxique
1.2.3 Analyse sémantique
1.2.4 Génération de code intermédiaire
1.2.5 Optimisation du code
1.2.6 Génération de code
1.2.7 Gestion de la table des symboles
1.2.8 Combiner plusieurs étapes dans un voyage
1.2.9 Outil de construction de compilateur
1.3 Conception du programme Processus de développement du langage
1.3.1 Vers un langage de programmation de haut niveau
1.3.2 Impact sur le compilateur
1.3.3 Exercices de la section 1.3
p>1.4 La science connexe de la construction d'un compilateur
. 1.4.1 Modélisation dans la conception et la mise en œuvre du compilateur
1.4.2 Science de l'optimisation du code
1.5 Application de la technologie de compilation
1.5.1 Implémentation du langage de programmation avancé
1.5.2 Optimisation pour l'architecture informatique
1.5. 3 Conception d'une nouvelle architecture informatique
1.5.4 Traduction de programme
1.5.5 Outils de productivité logicielle
1.6 Langage de programmation de base
1.6.1 La différence entre statique et dynamique
1.6.2 Environnement et état
1.6.3 Portée statique et structure de bloc
1.6.4 Contrôle d'accès explicite
1.6.5 Portée dynamique
1.6.6 Mécanisme de transmission des paramètres
1.6.7 Alias
1.6.8 1.6 Exercices de section
1.7 Résumé du chapitre 1
1.8 Bibliographie du chapitre 1
Chapitre 2 Un traducteur simple guidé par la grammaire
2.1 Présentation
2.2 Définition de la grammaire
2.2.1 Définition de la grammaire
2.2.2 Dérivation
2.2.3 Arbre d'analyse grammaticale
2.2.4 Ambiguïté
2.2.5 L'associativité des opérateurs
2.2.6 Priorité de l'opérateur
< p>2.2.7 Exercices de la section 2.22.3 Traduction guidée par la grammaire
2.3.1 Représentation du suffixe
2.3.2 Attributs complets
2.3.3 Définition d'un guide de syntaxe simple p>
2.3.4 Parcours d'arbre
2.3.5 Plan de traduction
2.3.6 Exercices de la section 2.3
2.4 Analyse syntaxique
2.4.1 Méthode d'analyse descendante
2.4.2 Méthode d'analyse prédictive
2.4.3 Quand utiliser la production
2.4. 4 Concevoir un analyseur de syntaxe prédictif
2.4.5 Récursivité à gauche
2.4.6 Section 2.4 exercices
2.5 Traducteur d'expression simple
2.5.1 Grammaire abstraite et concrète
2.5.2 Ajuster le plan de traduction
2.5.3 Le processus des symboles non terminaux
2.5.4 Simplification du traducteur
2.5.5 Programme complet
2.6 Analyse lexicale
2.6.1 Supprimer les blancs et les commentaires
2.6. 2 Prélecture
2.6.3 Constantes
2.6.4 Identification des mots-clés et des identifiants
2.6.5 Analyseur lexical
2.6.6 Exercices de la section 2.6
2.7 Tableau des symboles
2.7.1 Mettre en place une table des mnémoniques pour chaque portée
2.7.2 Utilisation de la table des mnémoniques
2.8 Génération de code intermédiaire
2.8.1 Deux représentations intermédiaires
2.8.2 Construction de l'arbre de syntaxe
2.8.4 Trois codes d'adresse
2.8.5 Section 2.8 exercices
2.9 Résumé du chapitre 2
Chapitre 3 Analyse lexicale
3.1 Le rôle de l'analyseur lexical
3.1.1 Analyse et analyse lexicale
3.1.2 Unités lexicales, motifs, morphèmes
3.1.3 Propriétés des unités lexicales< /p>
3.1.4 Erreur lexicale
3.1.5 Exercices de la section 3.1
3.2 Tampon d'entrée
3.2.1 Paire de tampons
p>3.2.2 Balise sentinelle
3.3 Spécification de l'unité lexicale
3.3.1 Chaîne et langue
3.3.2 Opération sur la langue< /p>
3.3.3 Expression régulière
3.3.4 Définition régulière
3.3.5 Extension d'expression régulière
3.3.6 3.3 Exercices de section
3.4 Reconnaissance des unités lexicales
3.4.1 Diagramme de transition d'état
3.4.2 Reconnaissance des mots réservés et des identifiants
< p>3.4.3 Compléter notre exemple de continuité3 .4.4 Architecture de l'analyseur lexical basée sur le diagramme de transition d'état
3.4.5 Exercices de la section 3.4
3.5 Outil de génération d'analyseur lexical lex
3.5. 1 L'utilisation de lex
3.5.2 La structure du programme lex
3.5.3 Résolution des conflits dans lex
3.5.4 Opérateurs prospectifs
p>3.5.5 3.5 exercices
3.6 automates finis
3.6.1 automates finis incertains
3.6.2 Tableau de conversion
3.6.3 nfa accepte la chaîne d'entrée
3.6.4 automates finis déterminés
3.6.5 Section 3.6 exercice
3.7 Des expressions régulières aux automates
3.7.1 Conversion de nfa en dfa
3.7.2 Simulation de nfa
3.7. 3 Efficacité de la simulation Nfa
3.7.4 Construire nfa à partir d'expressions régulières
3.7.5 Efficacité des algorithmes de traitement des chaînes
3.7.6 Exercices de la section 3.7
3.8 Conception de l'outil de génération d'analyseurs lexicaux
3.8.1 La structure de l'analyseur lexical généré
3.8.2 Correspondance de motifs basée sur nfa
p>3.8.3 DFA utilisé par l'analyseur lexical
3.8.4 Mise en œuvre de l'opérateur prospectif
3.8.5 3.8 exercices
3.9 Optimisation du pattern matcher basé sur dfa
3.9.1 État important de la nfa
3.9.2 Fonction calculée selon l'arbre syntaxique abstrait
3.9. 3 Calculer nullable, firstpos et lastpos
3.9.4 Calculer les suivis
3.9.5 Construire un dfa basé sur une expression régulière
3.9.6 Minimiser un dfa Nombre d'états
3.9.7 Minimiser l'état de l'analyseur lexical
3.9.8 Temps d'échange pour l'espace dans la simulation dfa
3.9.9 Section 3.9 Exercices
3.9.10 Résumé du chapitre 3
3.11 Chapitre 3 Références
Chapitre 4 Analyse syntaxique
4.1 Introduction Activé
4.1.1 Le rôle du parseur
4.1.2 Grammaire représentative
4.1.3 Le traitement des erreurs grammaticales
4.1.4 Stratégie de récupération d'erreur
4.2 Grammaire sans contexte
4.2.1 Définition formelle de la grammaire hors-contexte
4.2.2 Conventions symboliques
4.2.3 Dérivation
4.2.4 Arbre d'analyse et dérivation
p>4.2.5 Ambiguïté
4.2.6 Vérifier le langage généré par la grammaire
4.2.7 Grammaire sans contexte et expressions régulières
4.2.8 Exercices de la section 4.2
4.3 Grammaire de conception
4.3.1 Analyse lexicale et analyse syntaxique
4.3.2 Élimination de l'ambiguïté
4.3.3 Élimination de la récursivité gauche
4.3.4 Extraction du facteur commun gauche
4.3.5 Construction du langage non contextuel
4.3.6 Exercices de la section 4.3
4.4 Analyse grammaticale descendante
4.4.1 Analyse grammaticale récursivement descendante
4.4.2 premier et suivi
4.4.3 ll(1) grammaire
4.4.4 Analyse prédictive non récursive
4.4.5 Récupération d'erreur dans l'analyse prédictive
4.4.6 Exercices de la section 4.4
4.5 Analyse grammaticale ascendante
4.5.1 Réduction
4.5.2 Élagage à la poignée
4.5.3 Technologie d'analyse syntaxique par décalage dans la réduction
4.5.4 Conflits dans l'analyse syntaxique du décalage en réduction
4.5.5 Exercices de la section 4.5
4.6 Introduction à la technologie d'analyse syntaxique lr : technologie lr simple
4.6.1 Pourquoi utiliser l'analyseur de syntaxe lr ?
4.6.2 automates item et lr(0)
4.6.3 Algorithme d'analyse de la syntaxe lr
4.6.4 construire slr- table d'analyse
p>4.6.5 Préfixes possibles
4.6.6 Exercices de la section 4.6
4.7 Analyseur lr plus puissant
4.7.1 Élément de spécification lr(1)
4.7.2 Construction de l'ensemble d'éléments lr(1)
4.7.3 Table d'analyse standard lr(1)
4.7.4 Table d'analyse syntaxique de construction Lalr
4.7.5 La méthode de construction efficace de la table d'analyse syntaxique lalr
4.7.6 Compression de la table d'analyse syntaxique lr
Section 4.7.7 4.7 Exercices
4.8 Utiliser une grammaire ambiguë
4.8.1 Utiliser la priorité et l'associativité pour résoudre les conflits
4.8.2 Ambiguïté « Dangling-else »
4.8.3 Récupération d'erreur dans l'analyse syntaxique lr
4.8.4 Exercices de la section 4.8
4.9 Outil de génération d'analyseur syntaxique
4.9.1 yacc, un outil de génération d'analyseur grammatical
4.9.2 Utiliser yacc pour gérer une grammaire ambiguë
4.9.3 Utiliser lex pour créer un analyseur lexical yacc
p>4.9.4 Récupération d'erreur dans yacc
4.9.5 Exercices de la section 4.9
4.10 : Résumé du chapitre 4
4.11 Références pour le chapitre 4
Chapitre 5 Traduction du guide grammatical
5.1 Définition de l'orientation grammaticale
5.1.1 Héritage et attributs complets
< p>5.1.2 Évaluer un sdd au nœud d'un arbre d'analyse5.1.3 Exercices de la section 5.1
5.2 Ordre d'évaluation de sdd
5.2.1 Graphe de dépendance
5.2.2 Ordre d'évaluation des attributs
5.2.3 définition de l'attribut s
5.2.4 l- Définitions des attributs
5.2.5 Règles sémantiques à effets secondaires contrôlés
5.2.6 Exercices de la section 5.2
5.3 Application de la traduction guidée par la grammaire
5.3.1 Construction de l'arbre syntaxique abstrait
5.3.2 Structure des types
5.3.3 Exercices de la section 5.3
5.4 Schéma de traduction guidé par la grammaire
5.4.1 Schéma de traduction des suffixes
5.4.2 L'implémentation de la pile d'analyse syntaxique du suffixe sdt
5.4.3 La production contient des verbes sémantiques à l'intérieur de Sdt
5.4.4 Éliminer la récursivité gauche de sdt
5.4.5 l-attribut défini sdt
5.4.6 Exercices de la section 5.4< /p>
5.5 Réaliser l-attribut sdd
5.5.1 Traduire pendant l'analyse de descente récursive
5.5.2 Générer du code lors de la numérisation
>5.5.3 analyse syntaxique sdd et ll de l-attribut
5.5.4 analyse syntaxique ascendante de sdd de l-attribut
5.5.5 section 5.5 Exercice
5.6 Résumé du chapitre 5
5.7 Références du chapitre 5
Chapitre 6 Génération de code intermédiaire
Chapitre 7 Chapitre Environnement d'exécution
Chapitre 7 Résumé
Chapitre 8 Génération de code
Chapitre 9 Optimisation indépendante de la machine
Chapitre 10 Parallélisme au niveau de l'instruction
Chapitre 11 Optimisation du parallélisme et de la localité
Chapitre 12 Analyse interprocédurale