1 / 10

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

Compiladores e intérpretes Generación de código Profesor: Eridan Otto. 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. Compiladores e intérpretes. Generación de código :Introducción.

chinue
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Compiladores einté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 T1 +:=$ 3 Add A,R0 • $ST2 :=$ 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 unbloque*/ (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 1 (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

More Related