Bibliografa:
Modern compiler implementation in C, Andrew Appel Modern compiler implementation in Java, Andrew Appel Compilers: Principles, Techniques and Tools. Aho, Ullman, Compilers: Principles, Tools. Aho, Ullman, Sethi
Ser material de apoyo, no se seguirn textualmente
Previaturas
En el Plan '87 - Programacin III - Taller III - Teora I En el Plan '97 - Programacin 3 y 4 (exmen) Taller de Programacin Teora de Lenguajes (exmen)
Otros materiales:
Transparencias del curso Manuales, artculos, repartidos que se irn indicando Pgina Web
Segunda parte: Obligatorio Construccin de un traductor. parte: Prof. Juan Jos Cabezas
Diseo de Compiladores
Diseo de Compiladores
Estudiar la teora en la construccin de compiladores Aplicar la teora a la prctica, mostrando como se construyen Usar herramientas como Yacc (Cup, Bisson) y Lex (Flex, Jlex) Cup, Bisson) Flex, Jlex)
Diseo de Compiladores
compilador
scheme
front-end front-
rbol de parser
intrprete
back-end back-
Diseo de Compiladores
Diseo de Compiladores
Pgina 1
fuente
analizador lexicgrafico
tokens
analizador sintctico
parse tree
generador de RI
RI RI
optimizador de cdigo
RI mejorada
generador de cdigo
Diseo de Compiladores
fuente
analizador lexicgrafico
tokens
analizador sintctico
parse tree
generador de RI
fuente
tokens
analizador sintctico
parse tree
generador de RI
RI RI
optimizador de cdigo
RI mejorada
generador de cdigo
RI RI
optimizador de cdigo
RI mejorada
generador de cdigo
Diseo de Compiladores
Diseo de Compiladores
fuente
analizador lexicgrafico
tokens
analizador sintctico
parse tree
generador de RI
RI RI
optimizador de cdigo
RI mejorada
generador de cdigo
a x
(Tabla de Smbolos)
Diseo de Compiladores
Diseo de Compiladores
Pgina 2
EXPR_BIN
ASSIGN ID X
Valida la legalidad de los tokens - Realiza chequeos semnticos gramticas independientes del contexto parsers LR, LL traduccin dirigida por la sintaxis Herramienta: Yacc
Diseo de Compiladores
Tcnicas: Tcnicas:
Diseo de Compiladores
Optimizacin de Cdigo
if ( a > b + c ) then n=b+c else n=a
(representacin intermedia)
Optimizacin de Cdigo
T1 = a T2 = b T3 = c T4 = T2 + T3 if ( T1 > T4 ) goto THEN1 goto ELSE1 THEN1: T5 = b T6 = c T7 = T5 + T6 n = T7 goto ENDIF1 ELSE1: T8 = a n = T8 goto ENDIF1 T1 = a T2 = b T3 = c T4 = T2 + T3 if ( T1 > T4 ) goto THEN1 goto ELSE1 THEN1: n = T4 goto ENDIF1 ELSE1: n = T1 goto ENDIF1
subexpresin (b+c) se calcula una nica vez (representacin intermedia mejorada) (eliminacin de subexpresiones en comn )
Optimizacin de Cdigo
T1 = a T2 = b T3 = c T4 = T2 + T3 if ( T1 > T4 ) goto THEN1 goto ELSE1 THEN1: n = T4 goto ENDIF1 ELSE1: n = T1 goto ENDIF1 T1 = a T2 = b T3 = c T4 = T2 + T3 if ( T1 <= T4 ) goto ELSE1 n = T4 goto ENDIF1 ELSE1: n = T1 goto ENDIF1
Generacin de Cdigo
z=(x*y+3)/z T1 = x T2 = y T3 = T1 * T2 T4 = 3 T5 = T3 + T4 T6 = x T7 = T5 / T6 z = T7
(cdigo intermedio) (expresin)
movel _x,d0 movel _y,d1 mulsl d0,d1 moveq #3,d2 addl d1,d2 divsl d0,d2 movel d2,_z
(cdigo assembler) assembler)
Pgina 3
Otras definiciones
Anlisis y Sntesis
Anlisis - se realiza chequeo sintctico y semntico y se produce la RI Sntesis - a partir de la RI, se produce el lenguaje objeto
Diseo de Compiladores
Pgina 4