|
|
| Introducción. |
| |
1.1. Procesadores de lenguaje. |
|
| |
1.2. La estructura de un compilador. |
|
| |
1.3. La evolución de los lenguajes de programación. |
|
| |
1.4. La ciencia de construir un compilador. |
|
| |
1.5. Aplicaciones de la tecnología de compiladores. |
|
| |
1.6. Fundamentos de los lenguajes de programación. |
|
| |
1.7. Resumen del capítulo 1. |
|
| |
1.8. Referencias para el capítulo 1. |
|
| 2. Un traductor simple orientado a la sintaxis. |
|
|
| |
2.2. Definición de sintaxis. |
|
| |
2.3. Traducción orientada a la sintaxis. |
|
| |
2.4. Análisis sintáctico. |
|
| |
2.5. Un traductor para las expresiones simples. |
|
|
|
|
|
| |
2.8. Generación de código intermedio. |
|
| |
2.9. Resumen del capítulo 2. |
|
| 3. Análisis léxico. |
| |
3.1. La función del analizador léxico. |
|
| |
3.2. Uso de búfer en la entrada. |
|
| |
3.3. Especificación de los tokens. |
|
| |
3.4. Reconocimiento de tokens. |
|
| |
3.5. El generador de analizadores léxicos Lex. |
|
|
|
| |
3.7. De las expresiones regulares a los autómatas. |
|
| |
3.8. Diseño de un generador de analizadores léxicos. |
|
| |
3.9. Optimización de los buscadores por concordancia de patrones basados en AFD. |
|
| |
3.10. Resumen del capítulo 3. |
|
| |
3.11. Referencias para el capítulo 3. |
|
| 4. Análisis sintáctico. |
|
|
| |
4.2. Gramáticas libres de contexto. |
|
| |
4.3. Escritura de una gramática. |
|
| |
4.4. Análisis sintáctico descendente. |
|
| |
4.5. Análisis sintácticos ascendente. |
|
| |
4.6. Introducción al análisis sintáctico LR: SLR (LR simple). |
|
| |
4.7. Analizadores sintácticos LR más poderoso. |
|
| |
4.8. Uso de gramáticas ambiguas. |
|
| |
4.9. Generadores de analizadores sintácticos. |
|
| |
4.10. Resumen del capítulo 4. |
|
| |
4.11. Referencias para el capítulo 4. |
|
| 5. Traducción orientada por la sintaxis. |
| |
5.1. Definiciones dirigidas por la sintaxis. |
|
| |
5.2. Órdenes de evaluación para las definiciones dirigidas por la sintaxis. |
|
| |
5.3. Aplicaciones de la traducción orientada por la sintaxis. |
|
| |
5.4. Esquemas de traducción orientados por la sintaxis. |
|
| |
5.5. Implementación de definiciones dirigidas por la sintaxis con atributos. |
|
| |
5.6. Resumen del capítulo 5. |
|
| |
5.7. Referencias para el capítulo 5. |
|
| 6. Generación de código intermedio. |
| |
6.1. Variantes de los árboles sintácticos. |
|
| |
6.2. Código de tres direcciones. |
|
| |
6.3. Tipos y declaraciones. |
|
| |
6.4. Traducción de expresiones. |
|
| |
6.5. Comprobación de tipos. |
|
|
|
| |
6.7. Parcheo de retroceso (bakpatch). |
|
| |
6.8. Instrucciones switch. |
|
| |
6.9. Código intermedio para procedimientos. |
|
| |
6.10. Resumen del capítulo 6. |
|
| |
6.11. Referencias para el capítulo 6. |
|
| 7. Entornos en tiempo de ejecución. |
| |
7.1. Organización del almacenamiento. |
|
| |
7.2. Asignación de espacio en la pila. |
|
| |
7.3. Acceso a los datos no locales en la pila. |
|
| |
7.4. Administración del montículo. |
|
| |
7.5. Introducción a la recolección de basura. |
|
| |
7.6. Introducción a la recolección basada en el rastreo. |
|
| |
7.7. Recolección de basura de pausa corta. |
|
| |
7.8. Temas avanzados sobre la recolección de basura. |
|
| |
7.9. Resumen del capítulo 7. |
|
| |
7.10. Referencias para el capítulo 7. |
|
| 8. Generación de código. |
| |
8.1. Cuestiones sobre el diseño de un generador de código. |
|
| |
8.2. El lenguaje destino. |
|
| |
8.3. Direcciones en el código destino. |
|
| |
8.4. Bloques básicos y grafos de flujo. |
|
| |
8.5. Optimización de los bloques básicos. |
|
| |
8.6. Un generador de código simple. |
|
| |
8.7. Optimización de mirilla (peephole). |
|
| |
8.8. Repartición y asignación de registros. |
|
| |
8.9. Selección de instrucciones mediante la rescritura de árboles. |
|
| |
8.10. Generación de código óptimo para las expresiones. |
|
| |
8.11. Generación de código de programación dinámica. |
|
| |
8.12. Resumen del capítulo 8. |
|
| |
8.13. Referencias para el capítulo 8. |
|
| 9. Optimizaciones independientes de la máquina. |
| |
9.1. Las fuentes principales de optimización. |
|
| |
9.2. Introducción al análisis del flujo de datos. |
|
| |
9.3. Fundamentos del análisis del flujo de datos. |
|
| |
9.4. Propagación de constantes. |
|
| |
9.5. Eliminación de redundancia parcial. |
|
| |
9.6. Ciclos en los grafos de flujo. |
|
| |
9.7. Análisis basado en regiones. |
|
|
|
| |
9.9. Resumen del capítulo 9. |
|
| |
9.10. Referencias para el capítulo 9. |
|
| 10. Paralelismo a nivel d e instrucción. |
| |
10.1. Arquitecturas de procesadores. |
|
| |
10.2. Restricciones de la programación del código. |
|
| |
10.3. Programación de bloques básicos. |
|
| |
10.4. Programación de código global. |
|
| |
10.5. Canalización por software. |
|
| |
10.6. Resumen del capítulo 10. |
|
| |
10.7. Referencias para el capítulo 10. |
|
| 11. Optimización para el paralelismo y la localidad. |
|
|
| |
11.2. Multiplicación de matrices: un ejemplo detallado. |
|
| |
11.3. Espacios de iteraciones. |
|
| |
11.4. Índices de arreglos afines. |
|
| |
11.5. Reutilización de datos. |
|
| |
11.6. Análisis de dependencias de datos de arreglos. |
|
| |
11.7. Búsqueda del paralelismo sin sincronización. |
|
| |
11.8. Sincronización entre ciclos paralelos. |
|
|
|
| |
11.10. Optimizaciones de localidad. |
|
| |
11.11. Otros usos de las transformaciones afines. |
|
| |
11.12. Resumen del capítulo 11. |
|
| |
11.13. Referencias para el capítulo 11. |
|
| 12. Análisis interpocedural. |
|
|
| |
12.2. ¿Por qué análisis interpocedural? |
|
| |
12.3. Una representación lógica del flujo de datos. |
|
| |
12.4. Un algoritmo simple de análisis de apuntadores. |
|
| |
12.5. Análisis interprocedural insensible al contexto. |
|
| |
12.6. Análisis de apuntadores sensible al contexto. |
|
| |
12.7. Implementación en Datalog mediante BDDs. |
|
| |
12.8. Resumen del capítulo 12. |
|
| |
12.9. Referencias para el capítulo 12. |
|
| A. Un front-end completo. |
| |
A.1. El lenguaje de código fuente. |
|
|
|
|
|
| |
A.4. Tablas de símbolos y tipos. |
|
| |
A.5. Código intermedio para las expresiones. |
|
| |
A.6. Código de salto para las expresiones booleanas. |
|
| |
A.7. Código intermedio para las instrucciones. |
|
| |
A.8. Analizador sintáctico. |
|
| |
A.9. Creación del front-end. |
|
| B. Búsqueda de soluciones linealmente independientes. |
|
|
Escribe un comentario