Está en la página 1de 29

TECNOLGICO NACIONAL DE MXICO

Instituto Tecnolgico de Iguala

LENGUAJES Y AUTOMATAS II

UNIDAD 2: GENERACIN DE CDIGO


INTERMEDIO
2.2 Representacin de cdigo intermedio.
2.2.1 Notacin Polaca.
2.2.2 Cdigo P.
2.2.3 Triplos.
2.2.4 Cudruplos.

Profe: I.S.C. Emilio Romn Chvez.


Carretera Nacional Iguala-Taxco esquina Perifrico Norte, Col. Adolfo Lpez Mateos Infonavit, C.P. 40030
Iguala de la Independencia, Gro. Tels. (733) 3321425 Ext. 244, e-mail: comunicacion@itiguala.edu.mx
www.itiguala.edu.mx
2.2 Representacin de
cdigo intermedio.

La generacin de cdigo
intermedio forma parte
de la etapa de sntesis,
por lo que constituye
una de las tres fases
que forman parte de
esta etapa, adems de
la generacin de cdigo
mquina y la fase de
optimizacin.
En la fase de cdigo intermedio, se
genera un cdigo independiente de
la mquina muy parecido al
ensamblador. No se genera cdigo
maquina directamente porque as es
ms fcil hacer pseudocompiladores
y adems se facilita la optimizacin
de cdigo independientemente del
microprocesador.

Donde dicha representacin se


puede considerar como un
programa para una mquina
abstracta. Cualquier representacin
intermedia debe tener dos
propiedades importantes: debe ser
fcil generar y fcil de traducir al
cdigo mquina destino.
Una representacin intermedia puede tener diversas formas.
Por ejemplo un cdigo de tres direcciones que es muy
parecida a un lenguaje ensamblador para un microprocesador
que carece de registros y solo es capaz de trabajar con
direcciones de memoria y literales. En el cdigo de tres
direcciones cada instruccin tiene como mximo tres
operandos.

Cada instruccin de tres direcciones tiene a lo sumo un operador,


adems de la asignacin.
El compilador debe generar un nombre temporal para guardar los
valores intermedios calculados por cada instruccin: t1, t2 y t3.
Algunas instrucciones tienen menos de tres operandos, como la
primera y la ltima instrucciones del ejemplo.
2.2.1 Notacin Polaca
La notacin polaca, tambin conocida como notacin de
prefijo o notacin prefija, fue inventada por el polaco Jan
ukasiewicz alrededor de 1920 para simplificar la lgica
proposicional.
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.2 Cdigo P
Hay lenguajes que son pseudointerpretados que utilizan
un cdigo intermedio llamado cdigo-P que utiliza lo que
se denomina bytecodes. Por ejemplo java utiliza los
ficheros .class, estos tienen unos bytecodes que se
someten a una Java Virtual Machine, para que interprete
esas sentencias.
El cdigo P comenz como un cdigo ensamblador
objetivo estndar producido por varios compiladores
Pascal en la dcada de 1970 y principios de 1980, la idea
era hacer que los compiladores de Pascal se transportaran
fcilmente requiriendo solo que se volviera a escribir el
intrprete de la mquina P para una plataforma.

Por lo que el P-code esta pensado para Pascal y el


Java-bytecode para Java.
El cdigo P hace referencia a mquinas que utilizan o se
auxilian en pilas para generar cdigo objeto. En muchos casos
la P esta asociado a cdigo portable el cual garantiza que el
cdigo compilado en una mquina se pueda ejecutar en otras.

Para garantizar la portabilidad del cdigo se necesita que el


lenguaje este estandarizado por algn instituto y que dicho
cdigo no tenga extensiones particulares.
Tambin se recomienda la no utilizacin de caractersticas
especiales exclusivas de alguna arquitectura de computadoras
en particular.
Como Funciona la Tecnologa JAVA
Por lo general los programas en Java pasan a travs de
cinco fases:
Edicin.
Compilacin.
Carga.
Verificacin.
Ejecucin.
1. Creacin de un Programa.
Consiste en editar un archivo con un programa de edicin.
Se escribe el programa en Java por medio del editor,
realiza las correcciones necesarias y se guarda el
programa en un dispositivo de almacenamiento
secundario, como un disco duro.

Un nombre de archivo que termina con la extensin .java


indica que ste contiene cdigo fuente en Java.
2. Compilacin de un programa en Java
para convertirlo en cdigos de bytes
El programador utiliza el comando javac para compilar un
programa, en la ventana de comandos del sistema. Si el
programa se compila, el compilador produce un archivo .class
que contiene la versin compilada del programa.

El compilador de Java traduce el cdigo fuente


de Java en cdigos de bytes que representan
las tareas a ejecutar en la fase de ejecucin.
La mquina virtual de Java (JVM) que forma parte del
JDK y es la base de la plataforma Java, ejecuta los
cdigos de bytes. Si se implementa la misma VM en
muchas plataformas computacionales, las aplicaciones
que ejecute se podrn utilizar en todas esas plataformas.

A diferencia del lenguaje mquina que depende del


hardware de una computadora especfica, los cdigos de
bytes son instrucciones independientes de la plataforma;
no dependen de una plataforma de hardware especial.
Entonces, los cdigos de bytes de Java son portables.
3. Cargar un programa en memoria
La JVM coloca el programa en memoria para ejecutarlo; a esto
se le conoce como cargar. El cargador de clases toma los
archivos .class que contienen los cdigos de bytes del
programa y los transfiere a la memoria principal. El Cargador
de clases tambin carga cualquiera de los archivos .class que
su programa utilice, y que sean proporcionados por Java:
Puede cargar los archivos .class desde un disco en su sistema
o a travs de una red.
4. Verificacin del cdigo de bytes.
A medida que se cargan las clases, el verificador de cdigos
de bytes examina sus cdigos de bytes para asegurar que
sean vlidos y que no violen las restricciones de seguridad
de Java.
Java implementa una estrecha seguridad para asegurar que
los programas en Java que llegan a travs de la red no
daen sus archivos o su sistema.
5. Ejecucin
La JVM ejecuta los cdigos de bytes del programa,
realizando as las acciones especificadas por el mismo.
Algunas arquitecturas de computadoras modernas pueden
ejecutar varias instrucciones en paralelo. Las JVM
actuales ejecutan cdigos de bytes mediante una
combinacin de la interpretacin y la denominada
compilacin justo a tiempo. En este proceso, la JVM
analiza los cdigos de bytes a medida que se interpretan,
en busca de puntos activos: partes de los cdigos de
bytes que se ejecutan con frecuencia.

Un compilador justo a tiempo traduce los cdigos de bytes


al lenguaje mquina correspondiente a la computadora.
Cuando la JVM encuentra estas partes compiladas de
nuevo, se ejecuta el cdigo en lenguaje mquina, que es
ms rpido.
Por ende, los programas en Java en realidad pasan por
dos fases de compilacin: una en la cual el cdigo fuente
se traduce a cdigo de bytes (para tener portabilidad a
travs de las JVM en distintas plataformas
computacionales) y otra, en la que durante la ejecucin, los
cdigos de bytes se traducen en lenguaje mquina para la
computadora actual en la que se ejecuta el programa.
2.2.3 Triplos

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.
Donde:

arg1, arg2 y operacion pueden ser constantes ,


identificadores y variables definidos por el
compilador.

El operador representa una operacion arbitraria.


Las proposiciones de tres direcciones se
parecen mucho al emsamblador, el cual es
un lenguaje intermedio mas entendible para
la maquina.

Las estructuras de control (if, switch, while,


do-while,for) son realmente etiquetas goto
disfrazadas.
El problema de utilizar cuadruplos radica en que
se tienen que colocar los valores temporales en la
tabla de simbolo.

Con una estructura de tres campos se pueden


omitir los valores temporales, dicha estructura
recibe el nombre de triples y tiene los siguientes
campos; op, arg1 y arg2
Generalmente el codigo que generan los triples recibe el
nombre de codigo de dos direcciones, aunque en
ocasiones puede variar.

Cuando se utilizan triples se ocupan punteros a la misma


estructura de los triples.

* b t1 t2 //cuadruplos
*b (0) //triple
Ejemplo: a = b*(c+d) se traduce a:
tmp1= c+d
Tmp2= b*tmp1
a=tmp2
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.
<Operacin>, <operando1>, <operando2>, <resultado>

Ejemplo:
(A+B)*(C+D)-E
+, A, B, T1
+, C, D, T2
*, T1, T2, T3
-, T3, E, T4
Las cudruplas facilitan la aplicacin de
muchas optimizaciones, pero hay que
tener un algoritmo para la reutilizacin
de las variables temporales
(reutilizacin de registros del
procesador).