UNIDAD 2:
GENERACION DE CODIGO INTERMEDIO
2.1 NOTACIONES3
2.1.1 PREFIJA.4
2.1.2 INFIJA....4
2.2.3 POSTFIJA..5
2.2 REPRESENTACIONES DE CDIGO INTERMEDIO....5
2.2.1 NOTACIN POLACA.7
2.2.2 CDIGO P....8
2.2.3 TRIPLOS......9
2.2.4 CUDRUPLOS....10
2.3 ESQUEMA DE GENERACIN.....10
2.3.4 INSTRUCCIONES DE CONTROL ......10
2.3.5 FUNCIONES.......11
2.3.6 ESTRUCTURAS..12
BIBLIOGRAFIA.13
2.- GENERACIN DE CDIGO INTERMEDIO
2.1 NOTACIONES
Las notaciones sirven de base para expresar sentencias bien definidas. El uso ms
extendido de las notaciones sirve para expresar operaciones aritmticas. Las
expresiones aritmticas se pueden expresar de tres formas distintas: infija, prefija y
postfija. La diversidad de notaciones corresponde en que para algunos casos es ms
sencillo un tipo de notacin.
2.1.1 NOTACIN PREFIJA
2.2.3 POSTFIJA
La notacin postfija pone el operador al final de los dos operandos, por lo que la
expresin queda: ab+5La notacin postfija utiliza una estructura del tipo LIFO (Last First Out) pila, la cual es
la ms utilizada para la implementacin. 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(3*4))=x y ((2+3)*4)=x en las tres
notaciones mencionadas anteriormente seria:
(2+3(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=
Propiedades:
Fcil de producir en el anlisis semntico.
Fcil de traducir a cdigo mquina real.
Instrucciones simples y concisas, de fcil optimizacin.
Tipos
rboles de Sintaxis Abstracta.
Notacin Polaca Inversa (RPN).
Cdigo P
Cdigos de tres direcciones
Cuartetos
Tercetos
Tercetos Indirectos.
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:
Estndar
Ejemplo 1: 2 * (3 + 5)
Ejemplo 2: 2 * 3 + 5
Polaca
Ejemplo 1: * 2 + 3 5
Ejemplo 2: + * 2 3 5
2.2.2 CDIGO P
valor intermedio hacia el nmero del triple que lo creo, pero en los cudruplos
requiere que ellos tengan nombre implcitos.
Los triples tienen una ventaja obvia de ser ms consistente, pero ellos
dependen de su posicin, y hacen que la optimizacin presente cambios de
cdigo mucho ms compleja.
Para evitar tener que introducir nombres temporales en la tabla de smbolos, se
hace referencia a un valor temporal segn la posicin de la proposicin que lo
calcula. Las propias instrucciones representan el valor del nombre temporal. La
implementacin se hace mediante registros de solo tres campos (op, arg1,
arg2).
En la notacin de tripletes se necesita menor espacio y el compilador no
necesita generar los nombres temporales. Sin embargo, en esta notacin,
trasladar una proposicin que defina un valor temporal exige que se modifiquen
todas las referencias a esa proposicin
Una forma de solucionar esto consiste en listar las posiciones a las tripletas en
lugar de listar las tripletas mismas. De esta manera, un optimizador podra
mover una instruccin reordenando la lista, sin tener que mover las tripletas en
s.
2.2.4 CUDRUPLOS.
Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2 y
resultado. OP tiene un cdigo intermedio. Los operadores unarios como x:=-y no
utilizan arg2. Generalmente arg1, arg2 y resultado son valores de tipo puntero y
apuntan a una entrada en la tabla de smbolos.
Por ejemplo, la proposicin de tres direcciones x = y + z se podra representar
mediante el cudruplo (ADD, x,y, z). Las proposiciones con operadores unarios no
usan el arg2. Los campos que no se usan se dejan vacos o un valor NULL. Como se
necesitan cuatro campos se le llama representacin mediante cudruplos.
Expresiones booleanas
En los lenguajes de programacin, las expresiones booleanas tienen dos propsitos
principales. Se utilizan para calcular valores lgicos y como expresiones
condicionales en proposiciones que alteran el flujo del control, como las
proposiciones if-else o do-while. Las expresiones booleanas se componen de los
operadores boleanos (and, or y not) aplicados a los elementos que son variables
booleanas o expresiones relacionales. Algunos lenguajes permiten expresiones ms
generales donde se pueden aplicar operadores booleanos, aritmticos y relacionales a
expresiones de cualquier tipo, sin diferenciar valores booleanos de aritmticos; si es
necesario se realiza una coercin.
Saltos
En el cdigo de los saltos los operadores lgicos &&, || y ! son traducidos a saltos
aunque estos no aparecen realmente en el cdigo. Por ejemplo la expresin: if (x <
100 || x > 200 && x!= y ) x=0; se puede traducir como las siguientes instrucciones:
BIBLIOGRAFA