La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Compiladores e intérpretes Generación de código Profesor: Eridan Otto.

Presentaciones similares


Presentación del tema: "Compiladores e intérpretes Generación de código Profesor: Eridan Otto."— Transcripción de la presentación:

1 Compiladores e intérpretes Generación de código Profesor: Eridan Otto

2 Generación de código Introducción Máquina objeto y juego de instrucciones Uso de ASA Uso de Notación Polaca Uso de códigos de tres direcciones

3 Generación de código :Introducción Compiladores e intérpretes –Es un proceso de tradución de la representación intermedia a código objeto: –Normalmente ensamblador, con referencias relativas a memoria. –Se debe tener en cuenta la arquitectura de la máquina para realizar una gestión eficiente de la memoria y de los registros. –Primero se generan las directivas para reservar memoria para las variables y los datos –Por ejemplo, los árboles de sintaxis abstracta, se recorren para generar código directamente –Hay que tener en cuenta –Los lenguajes fuente y objeto –Gestión de Memoria y de registros –Juego de instrucciones –Orden de evaluación

4 Generación de código :Máquina Objeto y juego de instrucciones Compiladores e intérpretes –La familiaridad con la máquina objeto y su juego de instrucciones es un prerequisito para diseñar un buen generador de código –Sin embargo, se para realizar una discusión sobre los principios básicos de la geneneración de código, se usa sólo un modelo genérico. –El modelo es el siguiente: –Direccionamiento de un byte relativo, es decir que se pueden usar símbolos para referirse a las direcciones en memoria. –n Registros de CPU, R0, R1,...R n-1 –Todo programa parte en la dirección 0 y las instrucciones tienen la forma: [dirección] operador fuente, destino –Donde operador es la instrucción en si que se ejecuta sobre las dos direcciones, dejendo el resultado en la dirección de destino: –Fuente: dirección,constante(# seguida de un numro),registro –Destino:dirección, registro. –La idea es usar las variables temporales del código intermedio en los registros, de la manera más óptima posible, en la fase enterior –Es más optimo hacer operaciones con un registro que con dos direciones de memoria

5 Generación de código :Máquina Objeto y juego de instrucciones Compiladores e intérpretes –Juego de instrucciones: –Mov, mueve fuente a destino –Add, suma fuente y destino, dejando resultado en destino –Sub, resta fuente al destino, dejando resultado en destino –Mul, multiplica fuente y destino, dejando resultado en destino –Div, resta fuente del destino, dejando resultado en destino –Goto, salta a la dirección fuente –Cj, salta a la dirección fuente si el resultado del último cálculo o movimiento a un registro es negativo, cero o positivo deacuerdo con: – : <=, el resultado es negativo o 0 – : =, el resultado es 0 – : >=, el resultado es positivo o 0 – : <, el resultado es negativo – : >, el resultado es positivo – : <>, el resultado no es 0

6 Generación de código :Uso de Arboles de sintaxis Abstracta Compiladores e intérpretes –Para generar código, se debe recorrer en profundidad el árbol y por cada operación ir generando una instrucción en código de máquina. –No olvidar los movimientos desde y hacia los registros. –Las operaciones deben hacerse con al menos un registro. –Intentar optimizar el ASA, antes de generar el código. –Ejemplo: Genere código objeto a partir del siguiente ASA := x+ a * b c x + a * b c

7 Generación de código :Uso de Arboles de sintaxis Abstracta Compiladores e intérpretes –Optimizando := x+ a * b c y+ 3 1 Mov b, R0 2 Mul c,R0 /*en R0 b*c */ 3 mov R0,R1 4 add a,R1 /*en R1 a+b*c */ 5 Mov R1,x 6 Add #3,R0 /*en R0 3+b*c */ 7 Mov R0,y

8 Generación de código :Uso de notación polaca Compiladores e intérpretes –Uso práctico en expresiones matemáticas –El código se genera cuando se encuentra el operador –Ejemplo: SABC*+:= Pila EntradaGodigo Generado $SABC*+:=$ $SABC *+:=$1 mov C,R0 2 mult B,R0 $SAT1 +:=$3 Add A,R0 $ST2 :=$4 mov R0 S $

9 Generación de código :Uso de códigos de tres direcciones Compiladores e intérpretes –Una vez derivados los cuartetos de la generación de código intermedio dirigida por sintaxis, derive el código de tercetos, para lo cual, derivar código final es casi directo. –O derive manualmente los tercetos. –Estrategias de generación de código a partir de tercetos. Ejemplos: –Expresión tercetos codigo de máquina S:= A+ B * C (1) * B C (1) mov C,R0 (2) mul B,R0 (2) + A (1) (3) add, A,R0 (3) := (2) S (4) mov R0,S IF A= (5) (3) := B X (4) mov B,X /* puede ser un bloque*/ (4) (,,) (5)

10 –Tercetos, ejemplos Expresión tercetos otra representación S:= A+ B * C (1) * B C (1) mov C,R0 (2) mul A,R0 X:= A+ B * C (2) + A (1) (3) add, A,R0 (3) := (2) S (4) mov R0,S (4) := (2) X (5) mov R0,X WHILE X= (8) (3) + X 1 (5) add #1,R1 (4) := (3) X (6) mov R1,R0 (5) GOTO (1) (7) goto 3 (6) (8) Generación de código :Uso de códigos de tres direcciones Compiladores e intérpretes En los ciclos se deben cuidar las variables que se ocupan en las expresiones


Descargar ppt "Compiladores e intérpretes Generación de código Profesor: Eridan Otto."

Presentaciones similares


Anuncios Google