Está en la página 1de 25

UNIDAD 2

Generacin de cdigo intermedio

TEMAS
2.1 Notaciones 2.1.1 Prefija 2.1.2 Infija 2.2.3 Postfija 2.2 Representaciones de cdigo Intermedio. 2.2.1 Notacin Polaca 2.2.2 Cdigo P 2.2.3 Triplos 2.2.4 Cudruplos.
2.3 Esquema de generacin. 2.3.1 Variables y constantes. 2.3.2 Expresiones. 2.3.3 Instruccin de asignacin. 2.3.4 Instrucciones de control. 2.3.5 Funciones 2.3.6 Estructuras

Generacin de cdigo intermedio


El objetivo del cdigo intermedio es reducir el numero de programas necesarios para construir traductores, y permitir mas fcilmente la transportabilidad de unas maquinas a otras. Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explicita del programa fuente. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto.

Lenguajes intermedios
Los lenguajes intermedios nos sirven para representar la produccin final de nuestro lenguaje fuente.

Existen muchos lenguajes intermedios, la mayora de ellos son una representacin ms simplificada del cdigo original para facilitar la traduccin hacia el cdigo final.

Lenguajes intermedios cont..


Por ejemplo al compilar un programa en C en Windows o DOS, se produce un cdigo objeto con extensin .obj para que posteriormente el enlazador cree finalmente el cdigo executable .exe

En sistemas basados en Unix, tambin ocurre algo similar generndose un archivo .o y el executable a.out

Lenguajes intermedios cont..

Otros lenguajes intermedios famosos son los generados para la mquina virtual de Java el

bytecode; y para la mquina virtual de .NET el


MISL para luego ejecutarse en tiempo de ejecucin JIT (Just in Time).

2.1 Notaciones
Forma especial en la que se pueden expresar una expresin matemtica en tres formas: Prefija: el operador binario es analizado antes que sus operandos. Infija: el operador binario es analizado entre sus operandos. Sufija: el operador binario es analizado despus que sus operandos.

2.1.1 Prefija
Nos indica que el operador va antes de los operandos sus caractersticas principales son: Los operandos conservan el mismo orden que la notacin infija equivalente. No requiere de parntesis para indicar el orden de precedencia de operadores ya que el es una operacin. Se evala de izquierda a derecha hasta que encontremos el primer operador seguido inmediatamente de un par de operandos. Se evala la expresin binaria y el resultado se cambia como un nuevo operando. a+b-5 +ab-5

2.1.2 Infija
Es la forma mas comn que utilizamos para escribir expresiones matemticas, estas notaciones se refiere a que el operador esta entre los operandos. La notacin infija puede estar completamente parentizada o puede basarse en un esquema de precedencia de operadores as como el uso de parntesis para invalidar los arreglos al expresar el orden de evaluacin de una expresin: 3*4=12 3*4+2=14 3*(4+2)=18

2.2.3 Postfija
Llamada tambin polaca inversa, se usa para representar expresiones sin necesidad de parntesis. La notacin postfija pone el operador al final de los dos operandos. Ejemplos: a*b a*(b+c/d) a*b+c*d ab* abcd/+* ab*cd*+

Ejemplo
Si deseamos representar las expresiones (2+(3*4)) = x y ((2+3)*4)= x en las tres notaciones mencionadas, el resultado sera: (2+(3*4)) = x Notacin prefija Notacin infija Notacin postfija =+2*34x 2+3*4 = x 234*+x= ((2+3)*4) = x =*+234x (2+3)*4 = x 23+4*x=

Ejercicios
Realizar los siguientes ejercicios a notacin infija, posfija, prefija. 1) (A+B)*C 2) 4+5/3 3) (2+4+3)*3/2 4) X- Y+Z*C 5) (X+5-2)/Y 6) 3*(X+Y)-4 7) (2+5)*8+7 8) 5*4+6/2

Infijo a postfijo
Expr -> Expr + Trmino Expr -> Expr - Trmino Expr -> Trmino Trmino -> 0 Trmino -> 1 Trmino -> 2
.... Expr.t := Expr.t & Trmino.t & + Expr.t := Expr.t & Trmino.t & - Expr.t := Trmino.t Trmino.t := 0 Trmino.t := 1 Trmino.t := 2 .... Trmino.t := 9

Trmino -> 9

Infijo a postfijo
Expr -> Expr1 + Trmino Expr -> Expr1 - Trmino Expr -> Trmino Trmino -> 0 Trmino -> 1 Trmino -> 2
.... Expr.t := + Expr.t := - Expr.t := Trmino.t Trmino.t Trmino.t .... Trmino.t Expr1.t & Trmino.t & Expr1.t & Trmino.t & Trmino.t := 0 := 1 := 2 := 9

Trmino -> 9

Ejemplo Infijo a postfijo


1. Evale la expresin: 2+5-4 2. Construya el rbol de anlisis sintctico 3. Transforme a postfijo con las reglas semnticas dadas 4. Modifique las reglas semnticas para que los nmeros se separen por coma

Arbol sintctico (2+5-4)


Expr

Expr

Trmino

Expr

Trmino

Trmino

Transformacin
Expr.t = Expr.t & Trmino.t & - Expr Expr.t = 2 5 + 4 - Expr.t = Expr.t & Trmino.t & + Expr.t = 2 5 + Expr

Trmino
Trmino.t = 4

Expr
Expr.t = 2

Trmino
Trmino.t = 5

Trmino
Trmino.t = 2

Infijo a postfijo con comas


Expr -> Expr1 + Trmino Expr.t := Expr1.t & Expr1.c & Trmino.t &
+ Expr -> Expr1 - Trmino Expr.c := Expr.t := - Expr -> Trmino Expr.c := Expr.t := Trmino -> 0 Expr.c := Trmino -> 1 Trmino.t Trmino -> 2 Trmino.t .... Trmino.t Trmino -> 9 .... Trmino.t Expr1.t & Expr1.c & Trmino.t &

Trmino.t , := 0 := 1 := 2
:= 9

Transformacin con comas


Expr.t = Expr.t & Expr.c & Trmino.t & - Expr Expr.t = 2 , 5 + 4 - Expr.c =
Expr.t = Expr.t & Expr.c & Trmino.t & + Expr.t = 2 , 5 + Expr Expr.c = Expr.t = 2 Expr.c = ,

Trmino
Trmino.t = 4

Expr

Trmino
Trmino.t = 5

Trmino
Trmino.t = 2

Transformacin con comas


Expr
Expr.t = 7 Expr.c = ,

Trmino
Trmino.t = 7

2.2 Representaciones de cdigo Intermedio. 2.2.1 Notacin Polaca 2.2.2 Cdigo P 2.2.3 Triplos 2.2.4 Cudruplos.

2.2 Representaciones de cdigo Intermedio.


Existen maneras formales para representar cdigo intermedio. Estas notaciones simplifican la traduccin de nuestro cdigo fuente a nuestro cdigo objeto ya que ahorran y acotan smbolos de la tabla de smbolos