Está en la página 1de 10

NDICE

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

El objetivo del cdigo intermedio es reducir el nmero de programas


necesarios para construir traductores, y permitir ms fcilmente la
transportabilidad de unas mquinas 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.

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

La notacin prefija, tambin conocida como notacin de prefijo o notacin prefija, es


una forma de notacin para la lgica, la aritmtica, y el lgebra. Su caracterstica
distintiva es que coloca los operadores a la izquierda de sus operandos. Si la aridad
(es el nmero de argumentos necesarios para que dicho operador o funcin se pueda
calcular.) de los operadores es fija, el resultado es una sintaxis que carece de
parntesis u otros signos de agrupacin, y todava puede ser analizada sin
ambigedad.

2.1.2 NOTACIN DE INFIJA

La notacin de infijo es la notacin comn de frmulas aritmticas y lgicas, en la cual


se escriben los operadores entre los operandos en que estn actuando (ej. 2 + 2)
usando un estilo de infijo.
No es tan simple de analizar (parser, es una de las partes de un compilador que
transforma su entrada en un rbol de derivacin.) por las computadoras, como la
notacin de prefijo (ej. + 2 2) o la notacin de postfijo (ej. 2 2 +), aunque muchos
lenguajes de programacin la utilizan debido a su familiaridad. En la notacin de infijo,
a diferencia de las notaciones de prefijo o posfijo, es necesario rodear entre parntesis
a los grupos de operandos y operadores, para indicar el orden en el cual deben ser
realizadas las operaciones. En la ausencia de parntesis, ciertas reglas de prioridad
determinan el orden de las operaciones.

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=

2.2 REPRESENTACIN DE 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 smbolo. Existen diversos tipos
de cdigos intermedios que varan en cuanto a su sencillez, lo prximos que estn a
las maquinas reales y lo fcil que es trabajar con ellos, otros tipos de cdigo
intermedio que representan los programas como rboles o grafos y representaciones
mixtas que combinan grafos o rboles y representaciones lineales.
Generacin de Cdigo Intermedio
Proceso de Sntesis.
Lenguaje Intermedio
Generacin de Cdigo
Ventajas del cdigo intermedio.
Facilitar la fase de optimizacin.
Aumentar la portabilidad del compilador de una mquina a otra.
Se puede utilizar el mismo analizador para diferentes generadores.

Aumentar la portabilidad del compilador de una mquina a otra


Se puede utilizar el mismo analizador para diferentes generadores
Se pueden utilizar optimizadores independientes de la mquina

Tipos de representaciones intermedias


La representacin del cdigo intermedio depende de la mquina objeto:
0-direcciones: cdigo para mquinas de pila (cdigo P).
2-direcciones: cdigos para mquinas con operaciones sobre registros de
memoria.
3-direcciones: cdigo para mquinas de arquitectura RISC.
En todo caso, aade un recorrido descendente adicional para generar el cdigo final.

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

Prolog, proveniente del francs Programation et Logique, es un lenguaje de


programacin lgico e interpretado, bastante popular en el medio de investigacin en
Inteligencia Artificial. Se trata de un lenguaje de programacin ideado a principios de
los aos 70 en la universidad de Aix-Marseille por los profesores Alain Colmerauer y

Phillipe Roussel. Inicialmente se trataba de un lenguaje totalmente interpretado hasta


que, a mediados de los 70, David H.D. Warren desarroll un compilador capaz de
traducir Prolog en un conjunto de instrucciones de una mquina abstracta denominada
Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un
lenguaje semi-interpretado. Prolog se enmarca en el paradigma de los lenguajes
lgicos, lo que lo diferencia enormemente de otros lenguajes ms populares tales
como Fortran, Pascal, C, etc. En todos los mencionados, las instrucciones se
ejecutan normalmente en orden secuencial, es decir, una a continuacin de otra, en el
mismo orden en que estn escritas, que slo vara cuando se alcanza una instruccin
de control (un bucle, una instruccin condicional o una transferencia).
Los programas en Prolog se componen de clusulas de Horn que constituyen reglas
del tipo modus ponendo ponens, es decir, Si es verdad el antecedente, entonces es
verdad el consecuente. No obstante, la forma de escribir las clusulas de Horn es al
contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El
antecedente puede ser una conjuncin de condiciones que se denomina secuencia de
objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una
instruccin o llamada a procedimiento de los lenguajes imperativos. En Prolog no
existen instrucciones de control. Su ejecucin se basa en dos conceptos: la unificacin
y el backtracking. Gracias a la unificacin, cada objetivo determina un subconjunto de
clusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de
eleccin. Prolog selecciona el primer punto de eleccin y sigue ejecutando el
programa hasta determinar si el objetivo es verdadero o falso. En caso de ser falso
entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando
el programa en el mismo estado en el que estaba justo antes de llegar al punto de
eleccin.
2.2.3 TRIPLOS
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 nmero de representaciones
diferentes entre las cuales encontramos cudruplos y triples. La principal diferencia
entre estas notaciones y la notacin postfija es que ellos incluyen referencias
explicitas para los resultados de los clculos intermedios, mientras que la notacin
posfija los resultados son implcitos al representarlos en una pila.

La diferencia entre triples y cudruplos es que con los triples es referenciado el

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.

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.
Esquema de generacin de cdigo

2.3.4 INSTRUCCIONES DE CONTROL.


En los lenguajes de programacin hay estructuras y operadores que permiten
controlar el flujo de la ejecucin, estos pueden ser ciclos, saltos, condiciones entre
otros.

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:

If x < 100 goto L2


If False x > 200 goto L1
If False x != y goto L1
L2: x =0
L1:
Si la expresin es verdadera se alcanza la etiqueta L2 y se realiza la asignacin en

caso contrario no hara nada.


2.3.5 FUNCIONES
Funcin del Lenguaje, entendemos que es el uso de la lengua que hace un hablante.
En simples palabras, las funciones del lenguaje son los diferentes objetivos,
propsitos y servicio que se le da al lenguaje al comunicarse, dndose una funcin del
lenguaje por cada factor que tiene ste, en donde la funcin que prevalece es el factor
en donde ms se pone nfasis al comunicarse. Diversos lingistas (Karl Bhler,
Roman Jakobson, Michael Halliday) han propuesto distintas clasificaciones de las
funciones del lenguaje: Bhler propuso que existan nicamente tres funciones:
La Representativa (por la cual se trasmiten informaciones objetivamente)
La Expresiva o emotiva (que expresa sentimientos del emisor)
La Conativa, mediante la que se influye en el receptor del mensaje a travs de
rdenes, mandatos o sugerencias.
2.3.6 ESTRUCTURAS
El cdigo intermedio no es el lenguaje de programacin de ninguna mquina real, sino
que corresponde a una mquina abstracta, que se debe de definir lo ms general
posible, de forma que sea posible traducir este cdigo intermedio a cualquier mquina
real. El objetivo del cdigo intermedio es reducir el nmero de programas necesarios
para construir traductores, y permitir ms fcilmente la transportabilidad de
unas mquinas a otras. Supngase que se tienen n lenguajes, y se desea
construir traductores entre ellos. Sera necesario construir n*(n-1) traductores.
Sin embargo si se construye un lenguaje intermedio, tan slo son necesarios
2*n traductores. As por ejemplo un fabricante de compiladores puede construir un
compilador para diferentes mquinas objeto con tan slo cambiar las dos ltimas
fases de la tarea de sntesis.

Aunque un programa fuente se puede traducir directa mente al lenguaje objeto,


algunas ventajas de utilizar una forma intermedia independiente de la mquina son:

Se facilita la redestinacin: se puede crear un compilador para una mquina


distinta uniendo una etapa final para la nueva mquina a una etapa inicial ya
existente.
Se puede aplicar a la representacin intermedia un optimizador de cdigo
independiente de la mquina.

BIBLIOGRAFA

Lenguaje y Autmatas II. Unidad VI Generacin de Cdigo Intermedio. M.C. Juan


Carlos Olivares Rojas. pg. 1-36. Ao 2010.
Generacin de cdigo procesador de lenguaje. Lenguaje y autmata II. Universidad
tcnica de Mxico pg. 1-28.
http://dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u6.pdf.

También podría gustarte