Está en la página 1de 25

UNIDAD 2

Generacin de cdigo intermedio


TEMAS

2.3 Esquema de generacin.


2.1 Notaciones
2.1.1 Prefija 2.3.1 Variables y constantes.
2.1.2 Infija 2.3.2 Expresiones.
2.2.3 Postfija 2.3.3 Instruccin de asignacin.
2.2 Representaciones de cdigo 2.3.4 Instrucciones de control.
Intermedio.
2.3.5 Funciones
2.2.1 Notacin Polaca
2.2.2 Cdigo P 2.3.6 Estructuras
2.2.3 Triplos
2.2.4 Cudruplos.
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 ab*
a*(b+c/d) abcd/+*
a*b+c*d 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 ((2+3)*4) = x
Notacin prefija =+2*34x =*+234x
Notacin infija 2+3*4 = x (2+3)*4 = x
Notacin postfija 234*+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.t := Expr.t &
Expr -> Expr - Trmino Trmino.t & +
Expr -> Trmino Expr.t := Expr.t &
Trmino.t & -
Trmino -> 0
Expr.t := Trmino.t
Trmino -> 1
Trmino.t := 0
Trmino -> 2
Trmino.t := 1
....
Trmino.t := 2
Trmino -> 9
....
Trmino.t := 9
Infijo a postfijo
Expr -> Expr1 + Expr.t := Expr1.t & Trmino.t &
Trmino +
Expr -> Expr1 - Trmino Expr.t := Expr1.t & Trmino.t &
Expr -> Trmino -
Trmino -> 0 Expr.t := Trmino.t
Trmino -> 1 Trmino.t := 0
Trmino -> 2 Trmino.t := 1
.... Trmino.t := 2
Trmino -> 9 ....
Trmino.t := 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 4

Trmino 5

2
Transformacin

Expr.t = Expr.t & Trmino.t & -


Expr.t = 2 5 + 4 - Expr

Expr.t = Expr.t & Trmino.t & +


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

Expr + Trmino 4
Expr.t = 2 Trmino.t = 5

Trmino 5
Trmino.t = 2

2
Infijo a postfijo con comas

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

Expr.t = Expr.t & Expr.c & Trmino.t & -


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

Expr.t = 2 Expr + Trmino 4


Expr.c = , Trmino.t = 5

Trmino 5
Trmino.t = 2

2
Transformacin con comas

Expr
Expr.t = 7
Expr.c = ,

Trmino
Trmino.t = 7

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

También podría gustarte