compiladores 2011 unidad 1

15
Universidad Autónoma d Universidad Autónoma d Universidad Autónoma d Universidad Autónoma de Tamaulipas e Tamaulipas e Tamaulipas e Tamaulipas Unidad Académica Multidisciplinaria Mante Unidad Académica Multidisciplinaria Mante Unidad Académica Multidisciplinaria Mante Unidad Académica Multidisciplinaria Mante Asignatura: signatura: signatura: signatura: COMPILADORES COMPILADORES COMPILADORES COMPILADORES Programa Educativo Programa Educativo Programa Educativo Programa Educativo Ingeniero e Ingeniero e Ingeniero e Ingeniero en Sistemas Computacionales n Sistemas Computacionales n Sistemas Computacionales n Sistemas Computacionales Prof Prof Prof Prof. Ing. Felipe Silva Hernández Ing. Felipe Silva Hernández Ing. Felipe Silva Hernández Ing. Felipe Silva Hernández SEMESTRE: SEMESTRE: SEMESTRE: SEMESTRE: Noveno Noveno Noveno Noveno GRUPO: GRUPO: GRUPO: GRUPO: “E “E “E “E-F-J-K“ K“ K“ K“ 20 20 20 2011-3 OTOÑO 3 OTOÑO 3 OTOÑO 3 OTOÑO

Upload: felitz-ruiz

Post on 06-Aug-2015

167 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Compiladores 2011 Unidad 1

Universidad Autónoma dUniversidad Autónoma dUniversidad Autónoma dUniversidad Autónoma de Tamaulipase Tamaulipase Tamaulipase Tamaulipas

Unidad Académica Multidisciplinaria ManteUnidad Académica Multidisciplinaria ManteUnidad Académica Multidisciplinaria ManteUnidad Académica Multidisciplinaria Mante

AAAAsignatura:signatura:signatura:signatura: COMPILADORESCOMPILADORESCOMPILADORESCOMPILADORES

Programa EducativoPrograma EducativoPrograma EducativoPrograma Educativo

Ingeniero eIngeniero eIngeniero eIngeniero en Sistemas Computacionalesn Sistemas Computacionalesn Sistemas Computacionalesn Sistemas Computacionales

ProfProfProfProf.... Ing. Felipe Silva HernándezIng. Felipe Silva HernándezIng. Felipe Silva HernándezIng. Felipe Silva Hernández

SEMESTRE:SEMESTRE:SEMESTRE:SEMESTRE: NovenoNovenoNovenoNoveno GRUPO:GRUPO:GRUPO:GRUPO: “E“E“E“E----FFFF----JJJJ----K“K“K“K“

2020202011111111----3 OTOÑO3 OTOÑO3 OTOÑO3 OTOÑO

Page 2: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 2/15

DESCRIPCIÓN GENERALDESCRIPCIÓN GENERALDESCRIPCIÓN GENERALDESCRIPCIÓN GENERAL En el transcurso de esta materia se le presentará al alumno un repaso de la teoría de Traductores,

para después estudiar la traducción de expresiones aritméticas y boolenas, el análisis sintáctico y la traducción de referencia a variables simples y dimensionadas y la traducción de estatutos condicionales y de repetición que ayudarán a comprender el código 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 programación, estructura de datos, sistemas operativos y compiladores en forma óptima de acuerdo a la naturaleza del trabajo seleccionado.

INTENCIÓN EDUCATIVAINTENCIÓN EDUCATIVAINTENCIÓN EDUCATIVAINTENCIÓN EDUCATIVA

La estructura de compiladores abarca muchas y muy amplias técnicas, como lo son el desarrollo e

ingeniería de software, algoritmos, manejo de lenguajes y programación, se desea generar un Compilador que funcione sin importar su máquina fuente y/o destino. Los conceptos establecidos y habilidades desarrolladas en la asignatura anterior (Traductores) se aplicarán como herramienta para desarrollar este proyecto.

OBJETIVO GENERALOBJETIVO GENERALOBJETIVO GENERALOBJETIVO GENERAL

Al término de curso el alumno: Recordará y aplicará las herramientas para la generación del Código, además reconocerá y

diferenciará la asociatividad relacionada a los operadores empleados aplicándola en la elaboración de sus análisis, podrá desarrollar una traducción completa de las expresiones Aritméticas y Booleanas, los tipos de las variables y la declaración 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 repetición 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 técnicas de optimización.

PONDERACIÓNPONDERACIÓNPONDERACIÓNPONDERACIÓN

10 ASISTENCIA 20 TAREAS Y APUNTES 20 ANALIZADORES (LÉXICO, SINTÁCTICO Y COMPILADOR) 50 EVALUACIÓN

Page 3: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES

Programa cuya característica 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 ejecutableprograma ejecutable esta hecho de forma que la computadora lo pueda comprender.

RELACIÓN ENTRE UN COMPILADOR Y LA COMPUTADORA

FASES O ETAPAS DE UN COMPILADOR

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADOR

característica 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 lprograma ejecutable esta hecho de forma que la computadora lo pueda comprender.

RELACIÓN ENTRE UN COMPILADOR Y LA COMPUTADORA

FASES O ETAPAS DE UN COMPILADOR

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

3/15

característica es convertir un programa fuente (lenguaje de alto nivel) a un programa objeto (programa compilado). El programa compilado contendrá todos los errores del programa

cuando se encuentre libre de errores. El

RELACIÓN ENTRE UN COMPILADOR Y LA COMPUTADORA

Page 4: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 4/15

Unidad 1Unidad 1Unidad 1Unidad 1....---- Generación de Código IntermedioGeneración de Código IntermedioGeneración de Código IntermedioGeneración de Código Intermedio

CÓDIGO INTERMEDIO.- El código intermedio es una interpretación de las operaciones que se tienen en un lenguaje y que podrían ejecutarse en cualquier procesador al considerarse generados para una máquina virtual, una máquina inexistente pero con las características que toda computadora posee. Esta concepción permite generar código que puede ser optimizado ya que no depende de un operador específico y es completamente transportable.

1.1.- TIPO DE CÓDIGO INTERMEDIO. GDA. Grafo Dirigido Acíclico. Árbol Sintáctico. n-tuplas: Cuádruplo, Triple, Triple Indirecto. Código de 3 Direcciones Notación Polaca (prefija) Notación Polaca Inversa (postfija) Después de los análisis sintáctico y semántico, algunos compiladores generan una representación

intermedia explicita del programa fuente. Se puede considerar esta representación intermedia para una máquina abstracta (sin un lenguaje definido).

Esta representación intermedia debe tener dos propiedades importantes: a) Fácil de producir b) Fácil de traducir a programa objeto

En el modelo de análisis y síntesis de un compilador, la etapa inicial traduce un programa fuente a una representación intermedia a partir de la cual la etapa final genera el código objeto. Aunque un programa fuente se puede traducir directamente al lenguaje objeto algunas ventajas de utilizar una forma intermedia, independiente de la máquina.

1.- Se facilita la representación; se puede crear un compilador para una máquina distinta uniendo una etapa final para la nueva máquina a una etapa ya existente. 2.- Se puede aplicar a la representación intermedia a un optimizador del código independiente. 1.2.- NOTACIÓN POLACA.

Notación Polaca.- La Notación Polaca debe su nombre al famoso matemático polaco Jan Lukasiewics y se basa en que el símbolo operador se coloca delante de sus operadores.

Es una forma de notación con prefijos, con que se escriben las expresiones lógicas, aritméticas y

algebraicas, esto consiste en colocar el operador antes de los operandos. Esta notación es exactamente inversa de la postfija por lo que no representa ninguna ventaja nueva para el problema, a esta notación se le denomina NOTACIÓN POLACA.

Page 5: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 5/15

P

I D

= a = b + c NOTACIÓN INFIJA (entrefija) A. Léxico: id1 = id2 + id3

id1 + A. Sintáctico

id2 id3 NOTACIÓN INFIJA (entrefija) a = b * - c + b * - c

= A. Léxico: id1 = id2 * menosu id3 + id2 * menosu id3

id1 + A. Sintáctico * * id2 menosu id2 menosu id3 id3 Promedio = (Cal1 + Cal2 + Cal3) / 3

An. Léxico: id1=(id2+id3+id4)/num(3)

An. Sintáctico:

Ejercicio: Diseñar la notación (POLACA INVERSA) postfija y (POLACA) prefija, la

representación de código intermedio (CÓDIGO DE 3 DIRECCIONES), para la proposición que permita encontrar la base (B) de un triángulo 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 ANÁLISIS LÉXICO id1 = id2 * num(2) / id3

=

id1 /

+ Num(3)

id2 +

id3 id4

Notación POLACA. Notación prefija (P I D) = id1 / + id2 + id3 id4 Num(3) Notación POLACA INVERSA. Postfija (I D P) id1 id2 id3 id4 + + Num(3) / =

P

I D

Notación POLACA. Notación prefija (P I D) = id1 + * id2 menosu id3 * id2 menosu id3 Notación POLACA INVERSA. Notación postfija (I D P) id1 id2 id3 menosu * id2 id3 menosu * + =

Notación POLACA. Notación prefija (P I D) = id1 + id2 id3 Notación POLACA INVERSA. Notación postfija (I D P) id1 id2 id3 + =

Page 6: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 6/15

ANÁLISIS SINTÁCTICO = id1 * id2 / num(2) id3 posición = inicial + velocidad * tiempo = id1 + id2 * id3 id4 Ejercicios:

* Conociendo el valor de la raíz cuadrada de una de las caras del cubo. Obtenga su volumen, y la notación polaca de la expresión resultante. X = raíz 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 variación del radio.

* La parte superior de un edificio circular cuyo diámetro 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 diámetro del edificio. Si se desea conocer la mitad de agua que se podría almacenar en el pico, sabiendo que el grosor de las paredes del piso es de M cm. Obtenga la representación intermedia en prefijos de la expresión que calcularía la cantidad de agua en cm3.

* La fórmula de Pitágoras para un triángulo rectángulo indica que la suma de los cuadrados de los

catetos es igual al cuadrado de la hipotenusa, obtenga la notación polaca y la polaca inversa de la aplicación de esta fórmula para conocer el valor de cuadrado del cateto opuesto.

Notación POLACA. Prefija (P I D) = id1 * id2 / num(2) id3 = B * ÁREA / num(2) H Notación POLACA INVERSA. Postfija (I D P) id1 id2 num(2) id3 / * = B ÁREA num(2) H / * =

CÓDIGO INTERMEDIO t1=num(2) t2=t1/id3 t3=id2*t2 id1=t3

Notación POLACA. Notación prefija (P I D) = id1 + id2 * id3 id4 Notación POLACA INVERSA. Postfija (I D P) id1 id2 id3 id4 * + =

Page 7: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 7/15

* Se desea obtener el volumen en m3 de una construcción de tipo piramidal, debido a una serie de infraestructuras que serán usadas como adornos en todos los parques de la ciudad. Las bases de estas construcciones serán hexagonales.

Obtenga las notaciones polaca y polaca inversa para la expresión que permita conocer el volumen

de las pirámides, si se conoce solo la medida de uno de los lados de la base y la apotema, así como la altura. Vol. pirámide = área base * altura / 3 Área del polígono regular = perímetro * apotema / 2 Perímetro = (num.lados) * (medida del lado). Vol. pirámide = (( 6 * medida del lado) * apotema / 2 ) * altura / 3 Vp = lado * apotema * altura Volpir=area de la base * altura/3 Área pol= perímetro *apotema/2 Perímetro = (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 Id1 * id2 * id3 id4 IMPLANTACIÓN DE PROGRAMA DE 3 DIRECCIONES

Una proposición de tres direcciones es una forma abstracta de código intermedio en un compilador. Estas proposiciones se pueden implantar como registros con campos para el operador y los

operandos. Tres de dichas representaciones: Cuádruplos, Triples y Triples Indirectos. 1.3.- CUÁDRUPLOS.

Notación cuádruple.- Un cuádruplo es una estructura tipo registro con cuatro campos que se

llamarán: OPERADOR, ARGUMENTO 1, ARGUMENTO 2 y RESULTADO. El Campo OPERADOR contiene un código interno para el operador, la proposición 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, técnicas y herramientas. Aho, Seti, Ullman. Addison-Wesley. P. 484

Notación POLACA. Notación prefija (P I D) = id1 * id2 * id3 id4 Notación POLACA INVERSA. Postfija (I D P) id1 id2 id3 id4 * * =

Page 8: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 8/15

Como se muestra en la Figura 1.3 a. La operación “X = -Y” se muestra en la Figura 1.3 b. Y la asignación “X = Y” se desarrolla en la Figura 1.3 c.

Registro OPERADOR ARGUMENTO1 ARGUMENTO2 RESULTADO Figura 0 OP Y Z X 1.3 a 1 Menos u Y - X 1.3 b 2 = Y - X 1.3 c 3

Los contenidos de los campos ARGUMENTO 1, ARGUMENTO 2 y RESULTADO son

generalmente apuntadores a las entradas de la tabla de símbolos correspondientes a los nombres representados por dichos campos. En ese caso los nombres temporales se deben introducir en la tabla de símbolos conforme van siendo creados.

El cuádruplo de la Figura 1.3 d corresponde a: A = B * - C + B * - C y se obtienen a partir del

siguiente código de tres direcciones:

ANÁLISIS LÉXICO ANÁLISIS ID1 = ID2 * menosu ID3 + ID2 * menosu ID3 SINTÁCTICO Figura 1.3 d. CUÁDRUPLO REG. OPERADOR ARGUMENTO1 ARGUMENTO2 RESULTADO

0 menosu ID3 - T1 1 * ID2 T1 T2 2 menosu ID3 - T3 3 * ID2 T3 T4 4 + T4 T2 T5 5 = T5 - ID1

1.4.- TRIPLES.

Notación triples.- Para evitar introducir nombres temporales en las tablas de símbolos, se hará referencia a un valor temporal según la posición de la proposición 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, técnicas y herramientas. Aho… Addison-Wesley.

=

A ID1 +

*

C ID3

*

menosu B ID2 menosu B ID2

C ID3

CÓDIGO INTERMEDIO (3 DIREC.) T1 = menosu ID3 T2 = ID2 * T1 T3 = menosu ID3 T4 = ID2 * T3 T5 = T4 + T2 ID1 = T5

Page 9: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 9/15

Los campos ARGUMENTO 1 y ARGUMENTO 2, para los argumentos de OPERADOR son

apuntadores a la tabla de símbolos (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 código intermedio es el que conoce como Triple. Como en la Figura 1.4 (a).

NOTA: A veces se denomina “Código de DOS direcciones” y los Cuádruplos “Código de TRES

Direcciones”, como una noción abstracta de varias implantaciones, siendo los principales los triples y los cuádruples.

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 código de tres direcciones: Figura 1.4 d. TRIPLE

TRIPLES INDIRECTOS

Otra implantación del código 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 aplicación es llamada: Triple Indirecto. Por ejemplo se utilizará una matriz de proposición para listar los apuntadores a Triples en el orden deseado.

REG. OPERADOR ARGUMENTO1 ARGUMENTO2

0 menosu ID5 - 1 * ID4 (0) 2 menosu ID3 - 3 * ID2 (2) 4 + (3) (1) 5 Asigna ID1 (4)

CÓDIGO INTERMEDIO (CÓDIGO 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

Page 10: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 10/15

Entonces, el triple de la Figura 1.4 d. se puede representar como la Figura 1.4 e.

Figura 1.4 e. TRIPLE INDIRECTO, formado por la Tabla de Apuntadores y el TRIPLE INDIRECTO, que se obtienen del Código Intermedio Tabla de Apuntadores TRIPLE INDIRECTO REGISTRO POSICIÓN REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2

0 14 14 menosu ID5 - 1 15 15 * ID4 (14) 2 16 16 menosu ID3 - 3 17 17 * ID2 (16) 4 18 18 + (17) (15) 5 19 19 Asigna ID1 (18)

EJERCICIOS CON TRIPLES INDIRECTOS

V = W * - X + Y / Z An. Léxico: ID1 = ID2 * Menosu ID3 + ID4 / ID5 Código intermedio: t1 = ID4 / ID5 t2 = Menosu ID3 t3 = ID2 * t2 t4 = t3 + t1 ID1 = t4 Tabla de apuntadores TRIPLE INDIRECTO REGISTRO POSICIÓN REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2

0 14 14 / ID4 ID5 1 15 15 Menosu ID3 - 2 16 16 * ID2 (15) antes 1 3 17 17 + (16) antes 2 (14) antes 0 4 18 18 Asigna ID1 (17) antes 3 5 19 19

1.5.- GENERACIÓN DE CÓDIGO

La fase final de un compilador es la generación de código ensamblador, las operaciones de memoria se seleccionan para cada una de las variables usadas por el programa.

CÓDIGO 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

Page 11: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 11/15

=

Id1 +

Id2 *

Id3 Num(60)

Después, cada una de las instrucciones intermedias se introduce a una secuencia de instrucciones de máquina que ejecutan la misma tarea. Un aspecto decisivo es la asignación de variables o registros.

Por ejemplo dos registros R1 y R2 la traducción del código siguiente. Posición:= inicial + velocidad * 60 podría convertirse en: CÓDIGO FUENTE posición = inicial + velocidad * 60 1.- ANALIZADOR LÉXICO Id1= Id2 + Id3 * Num (60)

2.- ANÁLISIS SINTÁCTICO 3.- ANÁLISIS SEMÁNTICO 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 EJERCICIO COMPLETO: Código Fuente: R = U / T + H – 10 / 17 * A 1.- ANÁLISIS LÉXICO ID1 = ID2 / ID3 + ID4 – NUM(10) / NUM (17) * ID5 2.- ANÁLISIS SINTÁCTICO

4.- CÓDIGO INTERMEDIO t1 = Num(60) t2 = Id3 * t1 t3 = Id2 + t3 id1 = t3

+

/ –

=

ID1

ID4 / ID2 ID3

NUM(10) *

NUM(17) ID5

4.- CÓDIGO INTERMEDIO (CÓDIGO 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

P

I D

5.- CÓDIGO OPTIMIZADO t1 = Id3 * Num(60) Id1 = Id2 + t1

6.- CÓDIGO OBJETO R0, R1 y R2 MOV R2, 003C MOV R1, Id3 MUL R1, R2 MOV R0, Id2 ADD R0, R1 MOV Id1, R0 Números: 60 D = 3C H

Page 12: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 12/15

3.- ANÁLISIS SEMÁNTICO Prop ���� ID = EXP EXP ���� NUM | ID | EXP * EXP | EXP / EXP | EXP – EXP | EXP + EXP ID ���� R | U | T | H | A NUM ���� DIGDIG DIG ���� 0 – 9 4.- CÓDIGO INTERMEDIO

Notación Polaca (PREFIJOS) [ P I D ] = ID1 + / ID2 ID3 – ID4 / NUM(10) * NUM(17) ID5 Notación Polaca Inversa (POSFIJOS) [ I D P ] ID1 ID2 ID3 / ID4 NUM(10) NUM(17) ID5 * / – + = Cuádruplos

REG. OPERADOR ARGUMENTO1 ARGUMENTO2 RESULTADO

0 = NUM(17) – T1 1 * T1 ID5 T2 2 = NUM(10) – T3 3 / T3 T2 T4 4 – ID4 T4 T5 5 / ID2 ID3 T6 6 + T6 T5 T7 7 = T7 – ID1

Triples

REG. OPERADOR ARGUMENTO1 ARGUMENTO2

0 MOVER NUM(17) – 1 * (0) ID5 2 MOVER NUM(10) – 3 / (2) (1) 4 – ID4 (3) 5 / ID2 ID3 6 + (5) (4) 7 ASIGNA ID1 (6)

Triples Indirectos

TABLA DE APUNTADORES TRIPLE INDIRECTO REGISTRO POSICIÓN REGISTRO OPERADOR ARGUMENTO 1 ARGUMENTO 2

0 206 206 MOVER NUM(17) – 1 207 207 * (206) ID5 2 208 208 MOVER NUM(10) – 3 209 209 / (208) (207) 4 210 210 – ID4 (209) 5 211 211 / ID2 ID3 6 212 212 + (211) (210) 7 213 213 ASIGNA ID1 (212)

CÓD. 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

CÓD. 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

Page 13: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 13/15

5.- OPTIMIZACIÓN DE CÓDIGO 744110 6.- GENERACIÓN DE CÓDIGO OBJETO (LENGUAJE ENSAMBLADOR)

CÓDIGO INTERMEDIO (CÓDIGO 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

CÓDIGO OPTIMIZADO (CÓDIGO 3 DIRECCIONES) T1 = NUM(17) * ID5 T2 = NUM(10) / T1 T3 = ID4 – T2 T4 = ID2 / ID3 ID1 = T4 + T3

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

Page 14: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 14/15

1.6.- ASOCIATIVIDAD IZQUIERDA Y ASOCIATIVIDAD DERECHA

Por convención 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 mayoría de los lenguajes de programación, los 4 operadores aritméticos básicos: adición, sustracción, multiplicación y división son asociativos por la izquierda. cadena cadena cadena + cadena cadena + cadena cadena + cadena 2 9 cadena + cadena 9 5 5 2

Figura 1.6 a. Dos árboles de análisis sintácticos para (9 + 5) + 2

Con la gramática: Cadena ���� cadena + cadena | cadena – cadena | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Figura 1.6 b. Gramática para sumas y restas Algunos operadores comunes como la exponenciación (potencia) son asociativos por la derecha.

Otro ejemplo análogo, es el operador de asignación “=” en C que es asociativo por la derecha; en C la expresión A=B=C se trata igual que la expresión a=b=c.

Las cadenas como a=b=c con un operador asociativo a la derecha se pueden representar con la

siguiente gramática 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

= derecha a letra = derecha Figura 1.6 d, árbol para a=b=c b c

Page 15: Compiladores 2011 Unidad 1

U.A.M.M. U.A.T. M.C. I.S.C. Felipe Silva Hernández

COMPILADORES 15/15

BIBLIOGRAFÍABIBLIOGRAFÍABIBLIOGRAFÍABIBLIOGRAFÍA TÍTULO: Compilers: Principles, Techniques, and Tools Autor: Aho, Alfred V., Lam. Monica S., Sethi. Ravi, Ullman Jeffrey D. Editorial: Addison Wesley Precio: 1000 Usd. ISBN-10: 0321486811 ISBN-13: 978-0321486813

TÍTULO: Compiladores: Principios Técnicas y Herramientas Autor: Aho A., Sethi R., Ullman J. Editorial: Addison-Wesley Iberoamericana. Willington, Delaware, E.U.A. 1990. 820 páginas. TÍTULO: SISTEMAS OPERATIVOS Y COMPILADORES Autor: Salas Parrilla Jesús Editorial: Mc Graw Hill. México D. F. 1992. 212 páginas.

TÍTULO: COMPILADORES E INTÉRPRETES. 2a Ed. Autor: Sánchez Dueñas, G. Valverde Andrew, J.A. Editorial: Díaz de Santos ISBN: 84-87189-06-7 Precio: 20.19 Euros Editorial: EDICIONES DIAZ DE SANTOS C/Albasanz,2 28037 MADRID-España E-mail: [email protected] Telef. 34 + 917.434.890 Fax 34 + 917.434.023

TÍTULO: AN INTRODUCTION TO GCC Autor: Gough Brian Editorial: Network Theory Limited. 2004-2005 ISBN: 0-9541617-9-3 Precio: $19.95 USD TÍTULO: CONSTRUCCIÓN DE COMPILADORES Autor: Louden, Kenneth C. Editorial: THOMSON PARANINFO, S.A. 2004. 592 pgs ISBN: 9706862994 Precio: 39.00 Euros, 48.00 USD

TÍTULO: CONSTRUCCIÓN DE COMPILADORES PRINCIPIOS Y PRÁCTICA Autor: Kenneth C. Louden Editorial: THOMSON. Primera edición. ISBN-10: 9706862994 ISBN-13: 9789706862990 TÍTULO: TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Autor: Alfonseca, Manuel 15-JAN-07 ISBN: 8448156374 TÍTULO: ADVANCED COMPILER DESIGN AND IMPLEMENTATION Autor: Steven S. Muchnick