Sie sind auf Seite 1von 8

ITSSAT

SAN ANDRS TUXTLA

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA

INGENIERA EN SISTEMAS COMPUTACIONALES

ITSSAT

LENGUAJE Y AUTOMATAS II

ALUMNA:
PABLO ANTONIO MENDOZA GUZMN

PROFESOR:
LILY ALEJANDRA MENDRANO MENDOZA

TRABAJO:
INVESTIGACIN DE GENERACIN
CODIGO INTERMEDIO

ISC

INTRODUCCIN
En el modelo de anlisis y sntesis de un compilador, la etapa inicial
traduce un programa fuente a una representacin intermedia a partir de la cual
la etapa final genera el cdigo objeto.
Los detalles del lenguaje objeto se confinan en la etapa final, si esto es posible.
Aunque un programa fuente se puede traducir directamente al lenguaje objeto,
algunas ventajas de utilizar una forma intermedia independiente de la mquina
son:
1. 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.
2. Se puede aplicar a la representacin intermedia un optimizador de cdigo
independiente de la mquina.

GENERACIN DE CODIGO INTERMEDIO


Esta fase del compilador no es en realidad una parte separada del
compilador, la mayora de los compiladores generan cdigo como parte del
proceso de anlisis sintctico, esto es debido a que requieren del rbol de
sintaxis y si este no va a ser construido fsicamente, entonces deber
acompaar al analizador sintctico al barrer el rbol implcito. En lugar de
generar cdigo ensamblador directamente, los compiladores generan un cdigo
intermedio que es ms parecido al cdigo ensamblador, las operaciones por
ejemplo nunca se hacen con ms de dos operandos. Al no generarse cdigo
ensamblador el cual es dependiente de la computadora especfica, sino cdigo
intermedio, se puede reutilizar la parte del compilador que genera cdigo
intermedio en otro compilador para una computadora con diferente procesador
cambiando solamente el generador de cdigo ensamblador al cual llamamos
back-end, la desventaja obviamente es la lentitud que esto conlleva.
La tarea de sntesis suele comenzar generando un cdigo intermedio. 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.

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.

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.

NOTACIONES INFIJA, PREFIJA Y POSFIJA

PREFIJA:
La Expresin o Notacin 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 l es una operacin.
Se evala de izquierda a derecha hasta que encontrmosle primer
operador seguido inmediatamente de un par de operandos.
Se evala la expresin binaria y el resultado se cambia como un nuevo
operando. Se repite este hasta que nos quede un solo resultado.

Ejemplo de notacion prefija:

*+abc = (a+b) * c
Notacin prefija: El orden es operador, primer operando, segundo operando

INFIJA:
La Expresin o Notacin Infija es la forma ms 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
Notacin infija: La notacin habitual. El orden es primer operando, operador,
segundo operando.

Posfija:
Como su nombre lo indica se refiere a que el operador ocupa la posicin
despus de los operandos sus caractersticas principales son:

El orden de los operandos se conserva igual que la expresin infija


equivalente no utiliza parntesis ya que no es una operacin ambigua.
a operacin posfija no es exactamente lo inverso a la operacin prefija
equivalente:

EJEMPLO DE NOTACIN POSFIJA


(A+B)*C AB+C*
Notacin postfija: El orden es primer operando, segundo operando, operador.

REPRESENTACIONES DE CDIGO INTERMEDIO.


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:
Estandar
Ejemplo 1: 2 * ( 3 + 5 )

Ejemplo 2: 2 * 3 + 5
Polaca
Ejemplo 1: * 2 + 3 5
Ejemplo 2: + * 2 3 5

CDIGO P (CDIGO P O PROLOG)


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
antecendente, 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.
CDIGO DE DOS DIRECCIONES (TERCETOS)
En un cdigo de tres direcciones se suele emplear un gran nmero de
variables auxiliares (temporales) para almacenar los resultados parciales
durante la evaluacin de una expresin. Un cdigo de dos direcciones evita
este problema permitiendo que los operandos que aparecen en una instruccin
sean apuntadores a las instrucciones cuyo resultado se desea emplear.La
forma general de una instruccin de dos direcciones es

<op> <operando1> <operando2>


El mismo ejemplo de instruccin de asignacin que hemos vistos representada
mediante un cdigo de tres direcciones, x := (a+b*c)/d se podra representar
mediante un cdigo de dos direcciones como
Operador op1 op2
(1) MULT b c
(2) SUMA a (1)
(3) DIV (2) d
(4) ASIGNA (3) x

CDIGO DE TRES DIRECCIONES (CUARTETOS)


Representacin intermedia en la que las instrucciones constan de un
operador y tres direcciones: dos para los operandos y una tercera para el
resultado. Las instrucciones tendrn la forma genrica
<operador> <op1> <op2> <resultado>
Por ejemplo, la instruccin de asignacin x := (a+b*c)/d se podra representar
mediante una secuencia de instrucciones en un cdigo de tres direcciones
como
Operador op1 op2 res
(1) MULT b c t1
(2) SUMA a t1 t2
(3) DIV t2 d t3
(4) ASIGNA t3 x
Un cdigo de tres direcciones no es ms que una representacin lineal de un
rbol de sintaxis abstracta o de un GDA en el que se ha empleado una variable
temporal para representar los valores de los nodos interiores.

VARIABLES Y CONSTANTES.
Cualquier variable necesita una posicin de memoria en la que, durante
la ejecucin del cdigo generado, se almacene su valor. Cuando se trata de
una variable de tipo lgico o boolena, para representar su valor tambin se
necesita una posicin de memoria (bastara un bit!) para almacenar su valor.
Como el cdigo intermedio definido en este captulo no dispone del tipo lgico
ni el tipo bit, en la posicin de memoria de una variable lgica se almacenar
un entero que representar su valor. Para esta representacin numrica se
emplear el mismo criterio seguido en el lenguaje C1 de que un cero
representa el valor de verdad falso, mientras que cualquier valor distinto de
cero representa el valor de verdad cierto.
Pero adems de variables lgicas, en los lenguajes de alto nivel aparecen otro
tipo de expresiones lgicas, conteniendo comparaciones y/o conectivas lgicas.
Para representar el valor de una expresin lgica se pueden emplear dos
mtodos: la representacin numrica y la representacin por control de flujo.

INSTRUCCIN DE ASIGNACIN.
Una instruccin de asignacin asigna el valor de una expresin a una
variable. En general, si la variable que se va a asignar es una propiedad, la
propiedad debe ser de lectura y escritura o de slo escritura; en caso contrario,
se produce un error de compilacin. Si la variable es una variable de slo
lectura, la asignacin debe producirse en un constructor Shared o un
constructor de instancia apropiado para el tipo de la variable; en caso contrario,
se producir un error de compilacin.
INSTRUCCIONES DE CONTROL.
Las instrucciones de control son aquellas que nos permiten variar o
alterar la secuencia normal de ejecucin de un programa. Prcticamente la
totalidad de lenguajes de programacin de alto nivel soportan tres tipos de
instrucciones de control.
CONCLUSIN
En sntesis para crear un generador de cdigo se deben hacer muchas de las
tareas que realizan los compiladores; algunas de estas tareas son: la bsqueda
de patrones, la escritura de cdigo, el anlisis sintctico, el anlisis lxico y la
optimizacin de cdigo. Estas tareas las realiza el desarrollador una vez para
una arquitectura especfica.

BIBLIOGRAFA
http://www.di-mare.com/adolfo/cursos/2008-1/pp-GenCodInterMed.pdf
http://www.giaa.inf.uc3m.es/docencia/II/PL1/ci05-06.pdf

Das könnte Ihnen auch gefallen