introduzione
Il libro introduce sistematicamente i principi generali di costruzione, i metodi di progettazione di base e le principali tecniche di implementazione del compilatore. Il contenuto include: conoscenza di base della grammatica e della lingua, principi di progettazione e metodi di costruzione di programmi di analisi lessicale, varie tecnologie di analisi grammaticale, tecnologia di traduzione guidata dalla grammatica e generazione di codice intermedio, organizzazione e gestione della tabella dei simboli, ottimizzazione del codice, organizzazione dello spazio di archiviazione runtime Base conoscenza della gestione, generazione di codice oggetto, tecnologia di compilazione parallela, ecc.
Catalogo libri
Capitolo 1 Panoramica sulla compilazione
1.1 Traduttore e compilatore
1.2 Processo del compilatore e struttura di base del compilatore
1.3 Metodo di generazione del compilatore
1.4 Applicazione della tecnologia di compilazione nello sviluppo del software
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 1
Esercizio 1
Capitolo 2 Conoscenze di base della grammatica e della lingua
2.1 Panoramica
2.2 Concetti base di alfabeto e stringa di simboli
2.2.1 Alfabeto e stringa di simboli
2.2.2 Operazione con stringa di simboli
2.3 Grammatica e linguaggio Definizione formale
2.3.1 Linguaggio formale
2.3.2 Definizione formale della grammatica
2.3.3 Definizione formale del linguaggio
2.3 .4 Derivazione Normativa e Riduzione Normativa
2.3.5 Regole ricorsive e ricorsività della grammatica
2.4 Frasi, frasi dirette e maniglia
2.4.1 Frasi E frasi dirette
2.4.2 Maniglia
2.5 Ambiguità tra albero sintattico e grammatica
2.5.1 Derivazione e albero sintattico
2.5.2 Ambiguità della grammatica
2.5.3 Eliminazione dell'ambiguità grammaticale
2.6 Classificazione della grammatica e della lingua
2.7 La praticità della grammatica Restrizioni e trasformazioni
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 2
Esercizio 2
Capitolo 3 Analisi lessicale e automi finiti
3.1 Funzione del programma di analisi lessicale
3.2 Simboli di parole e moduli di parole in uscita
3.2.1 Parole nei simboli del linguaggio
3.2.2 La forma delle parole di output del programma di analisi lessicale
3.3 Due definizioni di simboli linguistici
3.3.1 Normal form and normal set< /p>
3.3.2 Grammatica normale e forma normale
3.4 Forma normale e automi finiti
3.4.1 Automi finiti determinati (DFA)
3.4.2 Automi finiti non deterministici (NFA)
3.4.3 Costruire NFA dall'espressione regolare R
3.4.4 Method of determinizing NFA into DFA< /p>
3.4.5 Semplificazione del DFA
3.4.6 Conversione da automi finiti a forma normale
3.5 Grammatica normale e automi finiti
3.5.1 Metodo di conversione dalla grammatica normale lineare destra agli automi finiti
3.5.2 Metodo di conversione dalla grammatica normale lineare sinistra agli automi finiti
3.5 .3 Metodo di conversione da automa finito a grammatica regolare
3.6 Metodo di scrittura del programma di analisi lessicale
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 3
Esercizio 3
Capitolo 4 Analisi della sintassi
4.1 Funzione del programma di analisi della sintassi
4.2 Metodo di analisi dall'alto verso il basso
4.2.1 The idea of non-deterministic top-down analysis method
4.2.2 Ricorsione a sinistra della grammatica ed eliminazione del backtracking
4.2.3 Riscrittura di alcune grammatiche non LL(1) in LL(1).
4.2.4 Metodo di analisi della discesa ricorsiva
4.2.5 Metodo di analisi predittiva e analisi predittiva Struttura della tabella
4.3 Principi generali dell'analisi bottom-up
4.4 Analisi delle priorità dell'operatore
4.4.1 Panoramica del metodo
< p>4.4.2 Definition of operator precedence grammar4.4.3 Costruzione della tabella delle relazioni di precedenza degli operatori
4.4.4 Progettazione dell'algoritmo di analisi della precedenza degli operatori
< p>4.4.5 Construction of precedence function4.4.6 Limitazioni dell'analisi della precedenza degli operatori
Metodo di analisi 4.5LR
Analizzatore 4.5.1LR Il principio di funzionamento e il processo di
4.5.2Metodo di analisi LR(0).
4.5.3Metodo di analisi SLR(1).
4.5.4 Metodo di analisi LR(1).
Metodo di analisi 4.5.5LALR(1).
4.5.6 Applicazione del metodo di parsing LR alla grammatica ambigua
4.5.7 Recupero degli errori nella tecnica di parsing LR
4.6 Metodo di scrittura del programma di analisi della sintassi
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 4
< p>Exercise 4Capitolo 5 Tecnologia di traduzione guidata dalla grammatica e generazione di codice intermedio
5.1 Panoramica
5.2 Grammatica degli attributi
5.3 Grammatica Panoramica della traduzione guidata
5.4 Lingua intermedia
5.4.1 Stile polacco inverso
5.4.2 Rappresentazione ternaria e ad albero
5.4.3 Codici quaternari ea tre indirizzi
5.5 Traduzione bottom-up guidata dalla sintassi
5.5.1 Traduzione di semplici espressioni aritmetiche e istruzioni di assegnazione
5.5.2 Traduzione di espressioni booleane
5.5.3 Traduzione delle dichiarazioni di controllo
5.5.4 Traduzione di istruzioni di ciclo
5.5.5 Brevi dichiarazioni descrittive Traduzione di
5.5.6 Traduzione di istruzioni di assegnazione contenenti elementi di array
5.5.7 Traduzione di istruzioni di chiamata di procedura e funzione
5.6 Traduzione guidata dalla sintassi della discesa ricorsiva
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 5
Esercizio 5
Capitolo 6 L'organizzazione e la gestione della tabella dei simboli
6.1 Il ruolo della tavola dei simboli
6.2 L'organizzazione della tavola dei simboli
6.3 L'istituzione e la ricerca della tabella dei simboli
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 6
Esercizio 6
Capitolo 7 Ottimizzazione del codice
< p>7.1 Overview of optimization7.2 Ottimizzazione parziale
7.2.1 Metodo di divisione dei blocchi di base
7.2.2 Rappresentazione DAG dei blocchi base
< p>7.2.3 Use DAG to optimize basic blocks7.3 Ottimizzazione del ciclo
7.3.1 Diagramma di flusso e loop del programma
7.3.2 Ricerca loop
7.3.3 Ottimizzazione del ciclo
7.4 Ottimizzazione dello spioncino
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 7
Esercizio 7
Capitolo 8 Organizzazione e gestione dello storage in fase di runtime
8.1 Panoramica
8.2 Static Storage Allocation< /p>
8.3 Allocazione dello stoccaggio in pila
8.3.1 Semplice allocazione dello storage impilato
8.3.2 Allocazione dello storage in pila per il processo nidificato
8.4 Allocazione della memoria heap
8.5 Allocazione della memoria delle variabili temporanee
Riassunto di questo capitolo
Lettura estesa
Self-test exercise 8< /p>
Esercizi 8
Capitolo 9 Generazione del codice oggetto
9.1 Panoramica
9.2 Modello informatico ipotetico
9.3 Generatore di codice semplice
9.3.1 Informazioni in standby e informazioni attive
9.3.2 Algoritmo di generazione del codice
9.3.3 Allocazione del Registro
La tecnologia di generazione automatica del generatore di codice 9.4
Riassunto di questo capitolo
Lettura estesa
Esercizio di autotest 9
Esercizio 9
Capitolo 10 Conoscenza di base della tecnologia di compilazione parallela
10.1 Introduzione della tecnologia di compilazione parallela
10.2 Funzione e struttura del sistema di compilazione parallela
10.2.1 Funzione del sistema di compilazione parallela
10.2.2 Struttura del sistema di compilazione parallela
10.3 Tecnologia di compilazione del linguaggio vettoriale
10.3.1 Elaborazione della sintassi vettoriale
p>10.3.2 Ottimizzazione della struttura vettoriale
10.4 Tecnologia di compilazione parallela della macchina parallela a memoria condivisa
10.4.1 precompilazione
10.4.2 can be re Imported target code p>
Riassunto di questo capitolo
Esercizio 10
Appendice A Generatore di analizzatore lessicale Lex
A.1 Introduzione al generatore di analizzatore lessicale Lex
p>Formato file di input A.2Lex
A.3 Convenzioni Lex per le espressioni regolari
A.4 Regole del programma sorgente Lex
Opzioni di comando A.5Flex
Esempio di programma A.6Lex
Appendice B generatore di programma di analisi della sintassi YACC
B.1 introduzione to the syntax analysis program YACC< /p>
B.2 Formato del file di input YACC
B.3 Formato di scrittura YACC
B.3.1 definizione parte
B.3.2 Sezione Regole
B.3.3 Sezione del programma ausiliario
Nome integrato e meccanismo di definizione di B.4YACC
L'uso combinato di B.5Flex e Bison
Appendice C Esperimenti del compilatore
C.1 Analisi lessicale
C.1.1 Obiettivi dell'esperimento
C.1.2 Requisiti dell'esperimento
C.1.3 Pensieri algoritmici del programma di analisi lessicale
C.1.4 Struttura del programma in linguaggio C del programma di analisi lessicale
C.2 Analisi della sintassi
C.2.1 Lo scopo dell'esperimento
C.2.2 Requisiti sperimentali
C.2.3 The algorithm idea of the syntax analysis program
C.2.4 La struttura del programma in linguaggio C del programma di analisi della sintassi
p>C.3 Analisi semantica
C.3.1 Scopo sperimentale
C.3.2 Requisiti sperimentali
C.3.3 Linguaggio C del programma di analisi semantica Programma Quadro
C.4 Metodo di analisi della priorità dell'operatore
C.5 Esempio sperimentale
C.6 Conversione di forma formale in rappresentazione grafica di automi
p>C.6.1 Scopo sperimentale
C.6.2 Requisiti sperimentali
C.6.3 Idee progettuali di riferimento
C.6.4 Algoritmo di riferimento
Appendice D esercizi di autotest e risposte di riferimento agli esercizi
Riferimenti