Professional Documents
Culture Documents
1. Introduccin
1.1. Tipos de traductores
1.2. Autmatas
1.3. Gramticas formales
1.4. Fases de un compilador
2. Anlisis Lxico
2.1. Definir un reconocedor de cadenas no trivial
2.2. Programar sistemticamente el reconocedor en lo referente a la
obtencin del autmata, almacenarlo eficientemente y manejar
adecuadamente el archivo fuente
2.3. Utilera LEX
2.4. Notaciones y nomenclatura en LEX
2.5. Programacin LEX del mismo reconocedor
2.6. Comparacin de dos tipos de tcnicas
3. Anlisis Sintctico
3.1. Parsers LR
3.2. Gramticas LR
3.3. Mtodos SLR, LR cannico, LARL
3.4. Construccin de tablas de anlisis SLR, LR cannico y LARL
3.5. Manejo de gramticas ambiguas
3.6. Recuperacin de errores
3.7. Empleo de YACC
3.8. Notacin de YACC
3.9. Manejo de errores en YACC
4. Problemas de Implementacin
4.1. Estrategias de acceso a memoria. Tcnicas de acceso dinmico
4.2. Acceso a nombres no locales, bloques, alcance
4.3. Paso de parmetros
4.4. Tablas de datos, hashing, representacin del alcance. Diferentes tipos
de tablas
5. Generacin de Cdigo Intermedio
5.1. Representaciones de cdigo intermedio
5.2. Generacin de cdigo intermedio y anlisis semntico en compilacin
top-down
5.3. Generacin de cdigo intermedio y anlisis semntico en compilacin
bottom-up
5.4. Instrucciones de asignacin. Expresiones booleanas. Instrucciones de
control. Instrucciones de entrada y salida
6. Generacin de Cdigo
6.1. Aspectos generales de la generacin de cdigo. Manejo de memoria
6.2. Seleccin de instrucciones. Acceso de registros
6.3. Aspectos relacionados con la mquina anfitriona
6.4. Bloques bsicos y grficas de flujo
6.5. Grficas dirigidas acclicas
6.6. Algoritmos para generacin de cdigo
6.7. Generacin de cdigo en YACC
7. Optimizacin de Cdigo
7.1. Optimizacin de cdigo
7.2. Optimizacin de cdigo intermedio
7.3. Fuentes principales de optimizacin. Subexpresiones comunes
7.4. Propagacin de copias. Eliminacin de cdigo muerto. Ciclos
7.5. Optimizacin de bloques bsicos
7.6. Ciclos de grfica de flujo
7.7. Anlisis de flujo de datos
8. Proyectos
8.1. Definicin del proyecto
8.2. Anlisis y diseo del compilador
BIBLIOGRAFA
1. Compilers: Principles, Techniques and Tools.
A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman.
Addison-Wesley; 2nd edition (August 31, 2006)
Se encuentra en las bibliotecas: FISMATIN-Xalapa y ECONOMIA-Xalapa.
(QA76.76.C65 A36)
2. Compilers: Construction for Digital Computers
D. Gries.
Wiley International Edition.
Se encuentra en las bibliotecas: USBI-Xalapa, FISMATIN-Xalapa y
MIA-Xalapa (QA76.5 G74).
3. The Theory and Practice of Compiler Writing.
L.P. Tremblay, P.G. Serenson.
McGraw Hill (1985).
Se encuentra en la biblioteca: ECONOMIA-Xalapa. (QA76.6 T73)
EVALUACIN
-------------------
40%
40%
10%
-------
10%
Importante:
-
Sintaxis y Semntica de C
Una gramtica BNF para C es como se describe a continuacin:
1) program declaration-list
2) declaration-list declaration-list declaration | declaration
3) declaration var-declaration | fun-declaration
4) var-declaration type-specifier ID ; | type-specifier ID [ NUM ] ;
5) type-specifier int | void
6) fun-declaration type-specifier ID ( params ) compound-stmt
7) params param-list | void
8) param-list param-list , param | param
9) param type-specifier ID | type-specifier ID [ ]
10) compound-stmt { local-declarations statement-list }
11) local-declarations local-declarations var-declarations | empty
12) statement-list statement-list statement | empty
13) statement expression-stmt | compound-stmt | selection-stmt |
iteration-stmt | return-stmt
14) expression-stmt expression ; | ;
15) selection-stmt if ( expression ) statement
| if ( expression ) statement else statement
16) iteration-stmt while (expression) statement
17) return-stmt return ; | return expression ;
18) expression var = expression | simple-expression
19) var ID | ID [ expression ]
20) simple-expression additive-expression relop additive-expression |
additive-expression
21) relop <= | < | > | >= | == | !=
22) additive-expression additive-expression addop term | term
23) addop + | 24) term term mulop factor | factor
25) mulop * | /
26) factor (expression) | var | call | NUM
27) call ID (args)
Programas de Muestra en C
El siguiente es un programa que introduce dos enteros, calcula su mximo comn
divisor y lo imprime:
/* un programa para realizar el algoritmo de euclides
para calcular mcd */
int gcd(int u, int v){
if (v==0) return u;
else return gcd (v, u-u/v*v);
}
void main (void){
int x; int y;
x=input( ); y=input( );
output(gcd(x,y));
}
A continuacin tenemos un programa que introduce una lista de 10 enteros, los
clasifica por orden de seleccin, y los exhibe otra vez:
/* un programa para realizar ordenacin por seleccin
en un arreglo de 10 elementos */
int x[10];
int minloc (int a[], int low, int high) {
int i; int x; int k;
k = low;
x = a[low];
i = low+1;
while (i<high){
if (a[i] < x) {
x = a[i];
k = i;
}
i = i+1;
}
return k;
}
void sort (int a[ ], int low, int high){
int i; int k;
i = low;
while ( i< high-1) {
int t;
k = minloc (a, i, high);
t = a[k];
a[k] = a[i];
a[i] = t;
i = i+1;
}
}
void main (void){
int i;
i = 0;
while (i < 10) {
x[i] = input( );
i = i+1;
}
sort (x,0,10);
i = 0;
while (i < 10) {
output (x[i]);
i = i+1;
}
}
Primera Parte del Proyecto (fecha de entrega: 22 de abril):
1) Implementar una utilera de tabla de smbolos adecuada para el lenguaje
C. Esto requerir una estructura de tabla que incorpore informacin de
mbito, ya sea como tablas separadas vinculadas en conjunto o con un
mecanismo de eliminacin que funcione de manera basada en pilas,
como se describi en el capitulo 6. (Construccin de compiladores:
principios y prctica. Autor: Kenneth C. Louden.)
2) Implemente un analizador lxico de C, ya sea a mano como un DFA o
utilizando Lex, como se describio en el captulo 2. (Construccin de
compiladores: principios y prctica. Autor: Kenneth C. Louden.).