Vous êtes sur la page 1sur 28

UNIDAD 2

Generacin de cdigo
intermedio
TEMAS

2.3 Esquema de
2.1 Notaciones
generacin.
2.1.1 Prefija
2.1.2 Infija 2.3.1 Variables y
2.2.3 Postfija constantes.
2.2 Representaciones de 2.3.2 Expresiones.
cdigo Intermedio.
2.3.3 Instruccin de
2.2.1 Notacin Polaca
asignacin.
2.2.2 Cdigo P
2.2.3 Triplos 2.3.4 Instrucciones
2.2.4 Cudruplos. 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.
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
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
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
2.2.1 Notacin Polaca

La notacin polaca es la originada por un


Autmata con pila, en la que los operadores
siempre preceden a los operandos sobre los que
actan, y que tiene la ventaja de no necesitar
parntesis:
Se utiliza principalmente para la
representacin de expresiones aritmticas.
Expresin a notacin polaca inversa.
Algoritmo
Representa la expresin en forma de rbol
sintctico.
Recorrer el rbol en postorden
Ventajas y desventajas de la notacin polaca
Generacin de cdigo: simple, no utiliza
registros.
Optimizacin: es difcil de reordenar ya
que hay que considerar el contenido de la
pila.
Interpretacin rpida: es muy fcil de
interpretar ya que solo necesita una pila.
Transportable: si, ya que todos los
procesadores implementan una pila.
2.2.1 Cdigo P

El cdigo P comenz como un cdigo


ensamblador objetivo estndar producido por
varios compiladores Pascal en la dcada de 1970
y principios de la de 1980. Fue diseado para
cdigo real para una mquina de pila hipottica
la idea era hacer que los compiladores de Pascal
se transportaran fcilmente requiriendo solo
que se volviera a escribir el intrprete de la
maquina P para una plataforma, el cdigo P
tambin a probado ser til como cdigo
intermedio y sean utilizado varias extensiones y
modificaciones del mismo en diverso
compiladores de cdigo nativo, la mayor parte
para lenguaje tipo Pascal.
2.2.3 Triplos
2.2.4 Cudruplos
En la historia de los compiladores han sido utilizadas una
amplia variedad de representaciones intermedias como lo es
la siguiente clase de representacin de cdigo intermedio de
un rbol de 3 direcciones,2 para los operandos y una para la
ubicacin del resultado. esta clase incluye un amplio numero
de representaciones diferentes entre las cuales encontramos
cuadruplos y triplos.

La diferencia entre triples y cuadruplos es que con los triples es


referenciado el valor intermedio hacia el numero del triple que
lo creo, pero en los cudruplos requiere que ellos tengan
nombre implcitos.
Los triples tienen una ventaja obvia de ser mas consistente,
pero ellos dependen de su posicin, y hacen que la optimizacin
presente cambios de cdigo mucho mas compleja.
<Operador>, <Operando 1>, <Operando 2>
El resultado se asocia al nmero de tripleta

Ejemplo: W * X + (Y + Z)

1. *, W, X
2. +, Y, Z
3. +, (1), (2)
<Operador>, <Operando 1>, <Operando 2>, <Resultado>

Ejemplo: (A+B)*(C+D)-E
1. +, A, B, R1
2. +, C, D, R2
3. *, R1, R2, R3
4. -, R3, E, R4
2.3 Esquema de generacin

Los esquemas de generacin son las estrategias o


acciones que se debern realizarse y tomarse en cuenta
en el momento de generar cdigo intermedio. Los
esquemas de generacin dependen de cada lenguaje.
Tomaremos algunos esquemas de generacin del
lenguaje C.
2.3.1 Variables y constantes

Las variables y constantes deben separarse de tal


manera que queden las expresiones una por una de
manera simple. Por ejemplo int a,b,c; se descompone a
int a; int b; intc; respectivamente.
2.3.2 Expresiones

En esta funcin recibe una cadena que representa una


lnea de cdigo intermedio y toma las medidas
oportunas para que ese cdigo se utilice. Estas medidas
pueden ser escribir la lnea en un fichero adecuado,
almacenar la instruccin en una lista que despus se
pasar a otros mdulos, o cualquier otra que
necesitemos en nuestro compilador.
2.3.3 Instrucciones de
asignacin
La sintaxis general de la instruccin de
asignacin es:
nombre_de_la_variable = valor

El valor a la derecha del signo igual puede ser


una constante, otra variable o una expresin
que combine constantes y variables, pero
siempre la variable y su valor deben ser del
mismo tipo de dato
Ejemplos:
edad% = 5
area! = 12.3
nombre$ = Pedro
2.3.4 Instrucciones de contro

Esta forma de programacin slo permite


resolver problemas sencillos. Para resolver
problemas ms complejos, nos puede interesar
que dependiendo de los valores de los datos, se
ejecuten unas instrucciones u otras.

Las instrucciones condicionales nos van a


permitir representar ste tipo de
comportamiento. Sentencias IF y SWITCH. En
otros casos, nos encontraremos con la
necesidad de repetir una instruccin o
instrucciones un nmero determinado de veces.
En stos casos utilizaremos instrucciones de
control iterativas o repetitivas (ciclos).
Sentencias WHILE, DO-WHILE y FOR.
2.3.5 Funciones

Las funciones pueden reducir a en lnea, lo que


se hace que expandir el cdigo original de la
funcin. Las funciones se descomponen
simplificando los parmetros de manera
individual al igual que el valor de retorno.

Vous aimerez peut-être aussi