Professional Documents
Culture Documents
Asignatura: COMPILADORES Programa Educativo en Ingeniero en Sistemas Computacionales Prof. Prof. Ing. Felipe Silva Hernndez
SEMESTRE: Noveno EGRUPO: E-F-J-K
U.A.M.M. U.A.T.
DESCRIPCIN GENERAL
En el transcurso de esta materia se le presentar al alumno un repaso de la teora de Traductores, para despus estudiar la traduccin de expresiones aritmticas y boolenas, el anlisis sintctico y la traduccin de referencia a variables simples y dimensionadas y la traduccin de estatutos condicionales y de repeticin que ayudarn a comprender el cdigo objeto para que puedan desarrollar su propio Compilador. El alumno dar comienzo a un nuevo proyecto de desarrollo de un programa traductor Compilador donde se involucren los conocimientos adquiridos sobre programacin, estructura de datos, sistemas operativos y compiladores en forma ptima de acuerdo a la naturaleza del trabajo seleccionado.
INTENCIN EDUCATIVA
La estructura de compiladores abarca muchas y muy amplias tcnicas, como lo son el desarrollo e ingeniera de software, algoritmos, manejo de lenguajes y programacin, se desea generar un Compilador que funcione sin importar su mquina fuente y/o destino. Los conceptos establecidos y habilidades desarrolladas en la asignatura anterior (Traductores) se aplicarn como herramienta para desarrollar este proyecto.
OBJETIVO GENERAL
Al trmino de curso el alumno: Recordar y aplicar las herramientas para la generacin del Cdigo, adems reconocer y diferenciar la asociatividad relacionada a los operadores empleados aplicndola en la elaboracin de sus anlisis, podr desarrollar una traduccin completa de las expresiones Aritmticas y Booleanas, los tipos de las variables y la declaracin de estas, recordar y aplicar las herramientas para el direccionamiento de las mismas. Recordar y traducir los estatutos Condicionales IF y CASE, y los de repeticin WHILE, DO WHILE y FOR. Aprender a controlar las subrutinas y la memoria para aplicarlas en desarrollar el programa final y conocer y aplicar las tcnicas de optimizacin.
PONDERACIN
10 ASISTENCIA 20 TAREAS Y APUNTES 20 ANALIZADORES (LXICO, SINTCTICO Y COMPILADOR) 50 EVALUACIN
COMPILADORES
2/15
U.A.M.M. U.A.T.
COMPILADOR
Programa cuya caracterstica es convertir un programa fuente (lenguaje de alto nivel) a un programa objeto (programa compilado). El programa compilado contendr todos los errores del programa fuente y nicamente podr generar un programa ejecutable cuando se encuentre libre de errores. El l programa ejecutable esta hecho de forma que la computadora lo pueda comprender.
COMPILADORES
3/15
U.A.M.M. U.A.T.
1.1.- TIPO DE CDIGO INTERMEDIO. GDA. Grafo Dirigido Acclico. rbol Sintctico. n-tuplas: Cudruplo, Triple, Triple Indirecto. Cdigo de 3 Direcciones Notacin Polaca (prefija) Notacin Polaca Inversa (postfija) Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explicita del programa fuente. Se puede considerar esta representacin intermedia para una mquina abstracta (sin un lenguaje definido). Esta representacin intermedia debe tener dos propiedades importantes: a) Fcil de producir b) Fcil de traducir a programa objeto En el modelo de anlisis y sntesis de un compilador, la etapa inicial traduce un programa fuente a una representacin intermedia a partir de la cual la etapa final genera el cdigo objeto. Aunque un programa fuente se puede traducir directamente al lenguaje objeto algunas ventajas de utilizar una forma intermedia, independiente de la mquina. 1.- Se facilita la representacin; se puede crear un compilador para una mquina distinta uniendo una etapa final para la nueva mquina a una etapa ya existente. 2.- Se puede aplicar a la representacin intermedia a un optimizador del cdigo independiente.
1.2.- NOTACIN POLACA. Notacin Polaca.- La Notacin Polaca debe su nombre al famoso matemtico polaco Jan Lukasiewics y se basa en que el smbolo operador se coloca delante de sus operadores. Es una forma de notacin con prefijos, con que se escriben las expresiones lgicas, aritmticas y algebraicas, esto consiste en colocar el operador antes de los operandos. Esta notacin es exactamente inversa de la postfija por lo que no representa ninguna ventaja nueva para el problema, a esta notacin se le denomina NOTACIN POLACA.
COMPILADORES
4/15
id1
NOTACIN INFIJA (entrefija) id1 = id2 + id3 Notacin POLACA. A. Sintctico Notacin prefija (P I D) = id1 + id2 id3 Notacin POLACA INVERSA. Notacin postfija (I D P) id1 id2 id3 + =
id2
id3
NOTACIN INFIJA (entrefija) a=b*-c+b*-c = A. Lxico: id1 = id2 * menosu id3 + id2 * menosu id3 id1 + A. Sintctico
P
Notacin POLACA. Notacin prefija (P I D) = id1 + * id2 menosu id3 * id2 menosu id3
D
*
I
id2
menosu
id2
menosu
Notacin POLACA INVERSA. Notacin postfija (I D P) id1 id2 id3 menosu * id2 id3 menosu * + =
id3
id3
Promedio = (Cal1 + Cal2 + Cal3) / 3 An. Lxico: id1=(id2+id3+id4)/num(3) = An. Sintctico: id1 /
P
Num(3)
id2
id3
id4
Ejercicio: Disear la notacin (POLACA INVERSA) postfija y (POLACA) prefija, la representacin de cdigo intermedio (CDIGO DE 3 DIRECCIONES), para la proposicin que permita encontrar la base (B) de un tringulo conociendo: Su altura y rea. REA = B * H / 2 REA * 2 = B * H REA * 2 / H = B B = REA * 2 / H DESPEJANDO TENEMOS: B=AREA*2/H ANLISIS LXICO id1 = id2 * num(2) / id3 COMPILADORES 5/15
id1
Notacin POLACA. Prefija (P I D) = id1 * id2 / num(2) id3 = B * REA / num(2) H Notacin POLACA INVERSA. Postfija (I D P) id1 id2 num(2) id3 / * = B REA num(2) H / * =
id2
num(2)
id3
posicin = inicial + velocidad * tiempo = Notacin POLACA. Notacin prefija (P I D) = id1 + id2 * id3 id4 + Notacin POLACA INVERSA. Postfija (I D P) id1 id2 id3 id4 * + = id4
id1
id2
id3
Ejercicios: * Conociendo el valor de la raz cuadrada de una de las caras del cubo. Obtenga su volumen, y la notacin polaca de la expresin resultante. X = raz cuadrada de un lado rea= L * L = L ^ 2 VOL= L * L * L * Se remodelar el centro de la ciudad, y en lugar del kiosco de la plaza principal de la Cd. Central ser una esfera, si se estima un costo de $, por m3 de la figura obtenga el volumen que podr tener la esfera, considerando la variacin del radio. * La parte superior de un edificio circular cuyo dimetro es de w m, que tiene h pisos (cada piso es de 3 m), termina en un pico de 6 m de altura que tiene la mitad del dimetro del edificio. Si se desea conocer la mitad de agua que se podra almacenar en el pico, sabiendo que el grosor de las paredes del piso es de M cm. Obtenga la representacin intermedia en prefijos de la expresin que calculara la cantidad de agua en cm3. * La frmula de Pitgoras para un tringulo rectngulo indica que la suma de los cuadrados de los catetos es igual al cuadrado de la hipotenusa, obtenga la notacin polaca y la polaca inversa de la aplicacin de esta frmula para conocer el valor de cuadrado del cateto opuesto.
COMPILADORES
6/15
U.A.M.M. U.A.T.
* Se desea obtener el volumen en m3 de una construccin de tipo piramidal, debido a una serie de infraestructuras que sern usadas como adornos en todos los parques de la ciudad. Las bases de estas construcciones sern hexagonales. Obtenga las notaciones polaca y polaca inversa para la expresin que permita conocer el volumen de las pirmides, si se conoce solo la medida de uno de los lados de la base y la apotema, as como la altura. Vol. pirmide = rea base * altura / 3 rea del polgono regular = permetro * apotema / 2 Permetro = (num.lados) * (medida del lado). Vol. pirmide = (( 6 * medida del lado) * apotema / 2 ) * altura / 3 Vp = lado * apotema * altura Volpir=area de la base * altura/3 rea pol= permetro *apotema/2 Permetro = (lado)*l(medida del lado) Sustituyendo: Volpiramide=area de la base*h/3 Volpiramide=((p*a)/2)*h/2 Vol=(6*l*a)/2 * h /3 Vol=l*a*h = Id1=id2*id3*id4 Notacin POLACA. Notacin prefija (P I D) = id1 * id2 * id3 id4 Notacin POLACA INVERSA. Postfija (I D P) id1 id2 id3 id4 * * =
Id1
id2
id3
id4
IMPLANTACIN DE PROGRAMA DE 3 DIRECCIONES Una proposicin de tres direcciones es una forma abstracta de cdigo intermedio en un compilador. Estas proposiciones se pueden implantar como registros con campos para el operador y los operandos. Tres de dichas representaciones: Cudruplos, Triples y Triples Indirectos.
1.3.- CUDRUPLOS. Notacin cudruple.- Un cudruplo es una estructura tipo registro con cuatro campos que se llamarn: OPERADOR, ARGUMENTO 1, ARGUMENTO 2 y RESULTADO. El Campo OPERADOR contiene un cdigo interno para el operador, la proposicin de tres direcciones X = Y OP Z se presenta poniendo a Y en ARGUMENTO 1, Z en ARGUMENTO 2 y X en RESULTADO. Compiladores principios, tcnicas y herramientas. Aho, Seti, Ullman. Addison-Wesley. P. 484 COMPILADORES 7/15
U.A.M.M. U.A.T.
Como se muestra en la Figura 1.3 a. La operacin X = -Y se muestra en la Figura 1.3 b. Y la asignacin X = Y se desarrolla en la Figura 1.3 c. Registro OPERADOR ARGUMENTO1 ARGUMENTO2 0 OP Y Z 1 Menos u Y 2 = Y 3
RESULTADO X X X
Los contenidos de los campos ARGUMENTO 1, ARGUMENTO 2 y RESULTADO son generalmente apuntadores a las entradas de la tabla de smbolos correspondientes a los nombres representados por dichos campos. En ese caso los nombres temporales se deben introducir en la tabla de smbolos conforme van siendo creados. El cudruplo de la Figura 1.3 d corresponde a: A = B * - C + B * - C y se obtienen a partir del siguiente cdigo de tres direcciones: ANLISIS LXICO ID1 = ID2 * menosu ID3 + ID2 * menosu ID3 CDIGO INTERMEDIO (3 DIREC.) T1 = menosu ID3 T2 = ID2 * T1 T3 = menosu ID3 T4 = ID2 * T3 T5 = T4 + T2 ID1 = T5 Figura 1.3 d. CUDRUPLO
REG. 0 1 2 3 4 5 OPERADOR ARGUMENTO1 ARGUMENTO2
RESULTADO
menosu * menosu * + =
T1 T3 T2 -
T1 T2 T3 T4 T5 ID1
C ID3
C ID3
1.4.- TRIPLES. Notacin triples.- Para evitar introducir nombres temporales en las tablas de smbolos, se har referencia a un valor temporal segn la posicin de la proposicin que lo calcula. En ese caso las proposiciones de 3 direcciones se pueden representar mediante registros con solo 3 campos: OPERADOR, ARGUMENTO 1 y ARGUMENTO 2. Compiladores. Principios, tcnicas y herramientas. Aho Addison-Wesley.
COMPILADORES
8/15
U.A.M.M. U.A.T.
Los campos ARGUMENTO 1 y ARGUMENTO 2, para los argumentos de OPERADOR son apuntadores a la tabla de smbolos (para nombres constantes definidos por el programador) apuntadores dentro de la estructura del triple (para valores temporales) como se utilizan tres campos este formato de cdigo intermedio es el que conoce como Triple. Como en la Figura 1.4 (a). NOTA: A veces se denomina Cdigo de DOS direcciones y los Cudruplos Cdigo de TRES Direcciones, como una nocin abstracta de varias implantaciones, siendo los principales los triples y los cudruples. TRIPLES: Figura 1.4 a. Y = X Op Z REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2 0 Op X Z 1 Asigna Y (0) Figura 1.4 b Tm= Num(5) REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2 0 mueve Num (5) -
Figura 1.4 c X=-Y REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2 0 Menos u Y 1 Asigna X (0) El Triple de la Figura 1.4 d corresponde a: A = B * - C + B * - C y se obtienen a partir del siguiente cdigo de tres direcciones: Figura 1.4 d. TRIPLE
REG. 0 1 2 3 4 5 OPERADOR ARGUMENTO1 ARGUMENTO2
CDIGO INTERMEDIO (CDIGO DE 3 DIRECCIONES) (0) T1 = menosu ID5 (1) T2 = ID4 * T1 (2) T3 = menosu ID3 (3) T4 = ID2 * T3 (4) T5 = T4 + T2 ID1 = T5
TRIPLES INDIRECTOS Otra implantacin del cdigo de tres direcciones que se ha considerado es la de hacer una lista de apuntadores a Triples en lugar de hacer una lista de los Triples mismos. Esta aplicacin es llamada: Triple Indirecto. Por ejemplo se utilizar una matriz de proposicin para listar los apuntadores a Triples en el orden deseado.
COMPILADORES
9/15
U.A.M.M. U.A.T.
Entonces, el triple de la Figura 1.4 d. se puede representar como la Figura 1.4 e. CDIGO INTERMEDIO (3 DIR) (0) T1 = menosu ID5 (1) T2 = ID4 * T1 (2) T3 = menosu ID3 (3) T4 = ID2 * T3 (4) T5 = T4 + T2 ID1 = T5
Figura 1.4 e. TRIPLE INDIRECTO, formado por la Tabla de Apuntadores y el TRIPLE INDIRECTO, que se obtienen del Cdigo Intermedio
Tabla de Apuntadores
REGISTRO 0 1 2 3 4 5 POSICIN
TRIPLE INDIRECTO
REGISTRO 14 15 16 17 18 19 OPERADOR ARGUMENTO 1 ARGUMENTO 2
14 15 16 17 18 19
EJERCICIOS CON TRIPLES INDIRECTOS V=W*-X+Y/Z An. Lxico: ID1 = ID2 * Menosu ID3 + ID4 / ID5 Cdigo intermedio: t1 = ID4 / ID5 t2 = Menosu ID3 t3 = ID2 * t2 t4 = t3 + t1 ID1 = t4 Tabla de apuntadores
REGISTRO POSICIN
TRIPLE INDIRECTO
REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2
0 1 2 3 4 5
14 15 16 17 18 19
14 15 16 17 18 19
/ Menosu * + Asigna
1.5.- GENERACIN DE CDIGO La fase final de un compilador es la generacin de cdigo ensamblador, las operaciones de memoria se seleccionan para cada una de las variables usadas por el programa.
COMPILADORES
10/15
U.A.M.M. U.A.T.
Despus, cada una de las instrucciones intermedias se introduce a una secuencia de instrucciones de mquina que ejecutan la misma tarea. Un aspecto decisivo es la asignacin de variables o registros. Por ejemplo dos registros R1 y R2 la traduccin del cdigo siguiente. Posicin:= inicial + velocidad * 60 podra convertirse en: CDIGO FUENTE posicin = inicial + velocidad * 60 1.- ANALIZADOR LXICO Id1= Id2 + Id3 * Num (60) 2.- ANLISIS SINTCTICO = Id1 Id2 Id3 + * Num(60)
4.- CDIGO INTERMEDIO t1 = Num(60) t2 = Id3 * t1 t3 = Id2 + t3 id1 = t3 5.- CDIGO OPTIMIZADO t1 = Id3 * Num(60) Id1 = Id2 + t1 6.- CDIGO OBJETO R0, R1 y R2 MOV R2, MOV R1, MUL R1, MOV R0, ADD R0, MOV Id1, 003C Id3 R2 Id2 R1 R0
3.- ANLISIS SEMNTICO PROD id = E EXP EXP * EXP | EXP + EXP EXP Id | Num Id letletletletletletletlet | letletletletletletlet Id letletletletletletletletlet let p|o|s|i|c||n|a|l|v|e|d Num DigDig Dig 0|1|2|3|4|5|6|7|8|9
Nmeros: 60 D = 3C H
EJERCICIO COMPLETO: Cdigo Fuente: R = U / T + H 10 / 17 * A 1.- ANLISIS LXICO ID1 = ID2 / ID3 + ID4 NUM(10) / NUM (17) * ID5 2.- ANLISIS SINTCTICO P = 4.- CDIGO INTERMEDIO (CDIGO 3 DIRECCIONES) T1 = NUM(17) ID1 + I D T2 = T1 * ID5 T3 = NUM(10) / T4 = T3 / T2 T5 = ID4 T4 ID2 ID3 ID4 / T6 = ID2 / ID3 T7 = T6 + T5 NUM(10) * ID1 = T7 NUM(17) COMPILADORES ID5 11/15
U.A.M.M. U.A.T.
3.- ANLISIS SEMNTICO Prop ID = EXP EXP NUM | ID | EXP * EXP | EXP / EXP | EXP EXP | EXP + EXP ID R|U|T|H|A NUM DIGDIG DIG 09 4.- CDIGO INTERMEDIO Notacin Polaca (PREFIJOS) [ P I D ] = ID1 + / ID2 ID3 ID4 / NUM(10) * NUM(17) ID5 Notacin Polaca Inversa (POSFIJOS) [ I D P ] ID1 ID2 ID3 / ID4 NUM(10) NUM(17) ID5 * / + = Cudruplos
REG. 0 1 2 3 4 5 6 7 OPERADOR ARGUMENTO1 ARGUMENTO2 RESULTADO
= * = / / + = Triples
ID5 T2 T4 ID3 T5
T1 T2 T3 T4 T5 T6 T7 ID1
CD. INT. 3 DIR. T1 = NUM(17) T2 = T1 * ID5 T3 = NUM(10) T4 = T3 / T2 T5 = ID4 T4 T6 = ID2 / ID3 T7 = T6 + T5 ID1 = T7
REG. 0 1 2 3 4 5 6 7
OPERADOR
ARGUMENTO1
ARGUMENTO2
CD. INT. 3 DIR. (0) T1 = NUM(17) (1) T2 = T1 * ID5 (2) T3 = NUM(10) (3) T4 = T3 / T2 (4) T5 = ID4 T4 (5) T6 = ID2 / ID3 (6) T7 = T6 + T5 (7) ID1 = T7
TRIPLE INDIRECTO
OPERADOR ARGUMENTO 1 ARGUMENTO 2
0 1 2 3 4 5 6 7
COMPILADORES
U.A.M.M. U.A.T.
5.- OPTIMIZACIN DE CDIGO CDIGO OPTIMIZADO (CDIGO 3 DIRECCIONES) T1 = NUM(17) * ID5 T2 = NUM(10) / T1 T3 = 744110ID4 T2 T4 = ID2 / ID3 ID1 = T4 + T3 CDIGO INTERMEDIO (CDIGO 3 DIRECCIONES) T1 = NUM(17) T2 = T1 * ID5 T3 = NUM(10) T4 = T3 / T2 T5 = ID4 T4 T6 = ID2 / ID3 T7 = T6 + T5 ID1 = T7
6.- GENERACIN DE CDIGO OBJETO (LENGUAJE ENSAMBLADOR) MOV R5, ID5 MOV R4, 0011 MUL R4, R5 MOV R3, 000A DIV R3, R4 MOV R2, ID4 SUB R2, R3 MOV R1, ID3 MOV R0, ID2 DIV R0, R1 ADD R0, R2 MOV ID1, R0
COMPILADORES
13/15
U.A.M.M. U.A.T.
1.6.- ASOCIATIVIDAD IZQUIERDA Y ASOCIATIVIDAD DERECHA Por convencin 9 + 5 + 2 es equivalente a ( 9 + 5 ) + 2 y 9 5 2 es equivalente a ( 9 5 ) 2. Cuando un operando como 5 tiene operadores a su izquierda y derecha, se necesitan convenciones para decidir qu operador considera se operando. Se dice que el operador suma + asocia a la izquierda, porque un operando que tenga un signo de + a ambos lados es tomado por el operador que est a su izquierda. En la mayora de los lenguajes de programacin, los 4 operadores aritmticos bsicos: adicin, sustraccin, multiplicacin y divisin son asociativos por la izquierda. cadena cadena cadena + cadena + cadena 2 cadena 9 cadena + cadena cadena + cadena
Con la gramtica: Cadena cadena + cadena | cadena cadena | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Figura 1.6 b. Gramtica para sumas y restas Algunos operadores comunes como la exponenciacin (potencia) son asociativos por la derecha. Otro ejemplo anlogo, es el operador de asignacin = en C que es asociativo por la derecha; en C la expresin A=B=C se trata igual que la expresin a=b=c. Las cadenas como a=b=c con un operador asociativo a la derecha se pueden representar con la siguiente gramtica Figura 1.6 c. Figura 1.6 c. derecha letra = derecha | letra letra a | b | c | d | e | f | g | h | i | j | k | m | n | | o | p | q | r | s | t letra u | v | w | x | y | z derecha letra = a letra = derecha derecha
COMPILADORES
14/15
U.A.M.M. U.A.T.
BIBLIOGRAFA
TTULO: Compilers: Principles, Techniques, and Tools Autor: Aho, Alfred V., Lam. Monica S., Sethi. Ravi, Ullman Editorial: Addison Wesley Precio: 1000 Usd. ISBN-10: 0321486811 ISBN-13: 978-0321486813 TTULO: Compiladores: Principios Herramientas Autor: Aho A., Sethi R., Ullman J. Editorial: Addison-Wesley Iberoamericana. Willington, Delaware, 1990. 820 pginas. TTULO: SISTEMAS OPERATIVOS Y COMPILADORES Autor: Salas Parrilla Jess Editorial: Mc Graw Hill. Mxico D. F. 1992. 212 pginas. TTULO: COMPILADORES E INTRPRETES. 2a Ed. Autor: Snchez Dueas, G. Valverde Andrew, J.A. Editorial: Daz de Santos ISBN: 84-87189-06-7 Precio: 20.19 Euros Editorial: EDICIONES DIAZ DE SANTOS C/Albasanz,2 28037 MADRID-Espaa E-mail: ediciones@diazdesantos.es Telef. 34 + 917.434.890 Fax 34 + 917.434.023 TTULO: AN INTRODUCTION TO GCC Autor: Gough Brian Editorial: Network Theory Limited. 2004-2005 ISBN: 0-9541617-9-3 Precio: $19.95 USD TTULO: CONSTRUCCIN DE COMPILADORES Autor: Louden, Kenneth C. Editorial: THOMSON PARANINFO, S.A. 2004. 592 pgs ISBN: 9706862994 Precio: 39.00 Euros, 48.00 USD TTULO: CONSTRUCCIN DE COMPILADORES PRINCIPIOS Y PRCTICA Autor: Kenneth C. Louden Editorial: THOMSON. Primera edicin. ISBN-10: 9706862994 ISBN-13: 9789706862990 TTULO: TEORA DE AUTMATAS Y LENGUAJES FORMALES Autor: Alfonseca, Manuel 15-JAN-07 ISBN: 8448156374 TTULO: ADVANCED COMPILER DESIGN AND IMPLEMENTATION Autor: Steven S. Muchnick Jeffrey D.
Tcnicas y
E.U.A.
COMPILADORES
15/15