La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Compiladores e intérpretes

Presentaciones similares


Presentación del tema: "Compiladores e intérpretes"— 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 Compiladores e intérpretes
Generación de código :Introducción 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 Compiladores e intérpretes
Generación de código :Máquina Objeto y juego de instrucciones 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,...Rn-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 Compiladores e intérpretes
Generación de código :Máquina Objeto y juego de instrucciones 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<rel>, 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: <rel>: <=, el resultado es negativo o 0 <rel>: =, el resultado es 0 <rel>: >=, el resultado es positivo o 0 <rel>: <, el resultado es negativo <rel>: >, el resultado es positivo <rel>: <>, el resultado no es 0

6 Compiladores e intérpretes
Generación de código :Uso de Arboles de sintaxis Abstracta 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 + + x * * a a c c b b

7 Compiladores e intérpretes
Generación de código :Uso de Arboles de sintaxis Abstracta Optimizando := := 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 x + y + * 3 a c b

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

9 Compiladores e intérpretes
Generación de código :Uso de códigos de tres direcciones 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<B THEN X:=B (1) < A B (1) mov A,R0 (2) sub B,R0 (2) IFF (4) (3) Cj>= (5) (3) := B X (4) mov B,X /*puede ser un bloque*/ (4) (,,) (5)

10 Compiladores e intérpretes
Generación de código :Uso de códigos de tres direcciones 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<B DO (1) < X B (1) mov X,R0 X:=X+1; (2) mov R0,R1 (3) sub B,R0 (2) IFF (6) (4) cj>= (8) (3) + X (5) add #1,R1 (4) := (3) X (6) mov R1,R0 (5) GOTO (1) (7) goto 3 (6) (8) En los ciclos se deben cuidar las variables que se ocupan en las expresiones


Descargar ppt "Compiladores e intérpretes"

Presentaciones similares


Anuncios Google