You are on page 1of 53

GENERACIN DE

CDIGO
INTERMEDIO
Curso : Teora de Lenguajes
Docente: SILVA ZAPATA Miguel Angel
Integrantes:

ARAOZ SOLIS Aldo


APARICIO LLIUYA Alexander
FALCON ALE Leopoldo
MENDEZ PASION Michael
TRINDAD CELESTINO Juan Diego

INTRODUCCIN

CDIGO INTERMEDIO

Definido lo mas
general posible

OBJETIVO DEL
CODIGO
INTERMEDIO:

Construir
traductores

Reducir el nmero de
programas necesarios para:

Transportabilidad

APARICIO LLIUYA Alexander

Intermedio

La generacin de cdigo es la tarea ms complicada de un


compilador.

Es necesario generar una nueva forma de representacin


intermedia, a esta representacin intermedia que se parece al
cdigo objeto pero que sigue siendo independiente de la
mquina, se le llama cdigo intermedio.

El cdigo intermedio puede tomar muchas formas, como,


linearizacin del rbol sintctico.

Intermedio
VENTAJAS DEL CDIGO INTERMEDIO
Facilitar la fase de optimizacin.
Aumentar la portabilidad del compilador de una
maquina a otra, se puede utilizar el mismo
analizador de una maquina a otra, tambin se
puede utilizar optimizadores independientes de la
mquina.
Facilitar la divisin en fases del proyecto.

Representacin
Intermedia
Es una estructura de datos que representa el
programa fuente durante el proceso de la
traduccin a cdigo objeto

VENTAJAS:

Se puede crear un compilador para una nueva


mquina distinta uniendo la etapa final de la
nueva mquina a una etapa inicial ya existente.
Se facilita la redestinacin.

Se puede aplicar, a la representacin


intermedia, un optimador de cdigo
independiente de la maquina

La representacin del
cdigo intermedio
depende de la maquina
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.

Propiedades

Fcil de producir en el anlisis


semntico.

Fcil de traducir a cdigo maquina


real.

Instrucciones simples y concisas,


de fcil b.
optimizacin.
Tipos

Arboles de sintaxis Abstracta

Notacin Polaca Inversa (RPN)

Cdigo P

Cdigo

de

cuartetos,
indirectos.

tres
tercetos,

direcciones:
tercetos

Caractersticas
deseables de una R.I.:
Sencillo de producir.
Facilitar traduccin al
lenguaje mquina final para
todas las posibles maquinas
objetivo.
Construcciones claras,
sencillas y uniformes, con
significado unvoco.
Facilita la especificacin de
la traduccin a la cada
mquina objetivo

Ejemplos de R.I:
Diana: represent. arbrea usada en
compiladores de ADA
RTL (register transfer language):
usada en familia de compiladores GCC.
Cdigo-P: compiladores Pascal
(tambin comn en intrpretes)
WAM (Warren abstract machinne):
intrpretes Prolog Bytecodes JAVA

ARAOZ SOLIS Aldo

TIPOS DE REPRESENTACIONES INTERMEDIAS


Existen maneras formales para representar cdigos intermedios.
Estas notaciones simplifican la traduccin de nuestro cdigo
fuente a nuestro cdigo objeto, entre las representaciones
tenemos:
rboles de Sintaxis Abstracta
Notacin Polaca Inversa (RPN)
Cdigos de tres direcciones:

Cuartetos
Tercetos
Tercetos Indirectos

o Cdigo intermedio como un


atributo sintetizado
o Cdigo P

RBOL DE SINTAXIS ABSTRACTA

ASA
El uso de los arboles sintcticos como representacin intermedia
permite que la traduccin se separe del anlisis sintctico, el
cual representa el cdigo mediante estructuras de rbol.
Caractersticas:
Son de fcil creacin (a partir del rbol sintctico).
Elimina la informacin innecesaria.
Cada nodo hoja representa un operando y cada nodo un operador.
Se toma en cuenta solamente los smbolos terminales.

Ejemplo:

Para la asignacin y estructura


de control(condicionales)

NOTACIN POSFIJA
La notacin postfija es una notacin muy simple
usada para expresiones aritmticas libres de
parntesis donde los operadores aparecen despus de
los operandos ,se observa lo siguiente:
Los operandos aparecen en el mismo orden
los operadores en el de evaluacin(de izquierda a
derecha)

Ejercicio
:

NOTACIN POLACA INVERSA (RPN)


Es aquella notacin postja con los operadores situados
a continuacin de los operandos

Ventajas
No necesita parntesis.
Es la notacin ms sencilla para el lenguaje
intermedio
Muy sencillo para expresiones aritmticas.
Interpretacin/Generacin de cdigo muy simple.

Ejercicio:

CDIGOS DE TRES DIRECCIONES


Es una secuencia de preposiciones de forma:

Donde:
X,Y,Z son identificadores, constantes(a
excepcin de x ) o variables temporales
generadas por un compilador
op representa cualquier tipo de operado

INTRUCCIONES COMUNES

INTRUCCIONES COMUNES

x=y'op'z,
x=y'op'z, donde
donde 'op'
'op' es
es un
un operador
operador binario
binario aritmtico
aritmtico o
o una
una
expresin
expresin lgica.
lgica.

x='op'y,
x='op'y, donde
donde 'op'
'op' es
es una
una operacin
operacin unaria.
unaria.
x=y,
x=y, donde
donde a
ax
x se
se le
le asigna
asigna el
el valor
valor de
de y
y

goto
goto L,
L, la
la instruccin
instruccin con
con la
la etiqueta
etiqueta L
L se
se ejecutara.
ejecutara.
if
if x
x goto
goto L
Lo
o if
if false
false goto
goto L,
L, se
se ejecutara
ejecutara la
la instruccin
instruccin con
con la
la
etiqueta
etiqueta L
L dependiendo
dependiendo de
de si
si x
x es
es verdadero
verdadero o
o falso.
falso.

CARACTERSTICAS

EJERCICIO 1:

EJERCICIO 2 :

IMPLEMENTACIN DE CDIGO DE 3
DIRECCIONES

CUDRUPLO

Ejemplo

TRIPLOS

EJEMPLO:

FALCON ALE

Leopoldo

Anlisis
Anlisis
Semntico
Semntico

Anlisis
Anlisis
Sintctico
Sintctico

Cdigo
Cdigo
Intermedio
Intermedio

Fcil de
producir

Fcil de
traducir

PROPIEDADES

Permite al
compilador
ser mas
redirigirle

CDIGO INTERMEDIO
COMO UN ATRIBUTO SINTETIZADO

Si
Si el
el cdigo
cdigo
generado
generado se
se ve
ve
como
como un
un
atributo
atributo de
de
cadena
cadena

Se
Se
convierte
convierte

Atributo
Sintetizado

Para
Para ver
ver como
como el
el cdigo
cdigo de
de tres
tres direcciones
direcciones se
se pueden
pueden definir
definir como
como un
un
atributo
atributo sintetizador,
sintetizador, considere
considere la
la siguiente
siguiente gramtica
gramtica que
que representa
representa
un
un pequeo
pequeo subconjunto
subconjunto de
de expresiones
expresiones en
en C:
C:

Esta
Esta gramtica
gramtica contiene:
contiene:

Dos
Dos operaciones,
operaciones, la
la asignacin
asignacin (con
(con el
el smbolo
smbolo =)
=) y
y la
la adicin
adicin (con
(con
el
el smbolo+)
smbolo+)

El
El token
token id
id representa
representa un
un identificador
identificador simple,
simple, y
y el
el token
token num
num
simboliza
simboliza una
una secuencia
secuencia simpe
simpe de
de dgitos
dgitos que
que representa
representa un
un entero.
entero.
Se
Se supone
supone que
que ambos
ambos tokens
tokens tienen
tienen un
un atributo
atributo previamente
previamente
calculado,
calculado, que
que es
es el
el valor
valor de
de la
la cadena,
cadena, o
o lexema
lexema del
del token
token (Por
(Por
ejemplo,
42
para
un
num
o
xtemp
para
un
id)
ejemplo, 42 para un num o xtemp para un id)

CDIGO
P

El
El cdigo
cdigo P
P muestra
muestra sus
sus
orgenes
de
pascal,
en
el
orgenes de pascal, en el cual
cual no
no
existen
existen las
las asignaciones
asignaciones
incrustadas
incrustadas
La
La existencia
existencia de
de asignaciones
asignaciones
incrustadas
es
un
incrustadas es un factor
factor que
que
implica
complicaciones
implica complicaciones

ANTE ESTA
SITUACIN:

Aqu
Aqu la
la gramtica
gramtica con
con atributos
atributos
es
es mas
mas simple
simple debido
debido a
a que
que no
no
es
necesario
generar
nombres
es necesario generar nombres
para
para elementos
elementos temporales
temporales

Se
Se desea
desea mantener
mantener
el
valor
el valor
almacenado
almacenado como
como
el
el valor
valor resultante
resultante
de
de una
una expresin
expresin
de
asignacin
de asignacin

La instruccin
de cdigo P
estndar STO
es destructiva

Ya que

Cmo
Cmo resolvemos
resolvemos este
este problema?
problema?

Introduciendo
Introduciendo una
una instruccin
instruccin de
de almacenamiento
almacenamiento
no
destructiva
STN
en
nuestro
no destructiva STN en nuestro cdigo
cdigo

Supone
Supone que
que se
se encuentra
encuentra un
un valor
valor en
en
la
la parte
parte superior
superior o
o tope
tope de
de la
la pila
pila y
y
una
direccin
debajo
de
la
misma.
una direccin debajo de la misma.
STN
STN almacena
almacena el
el valor
valor en
en la
la direccin
direccin
pero
pero deja
deja el
el valor
valor en
en el
el tope
tope de
de la
la pila,
pila,
mientras
mientras que
que descarta
descarta la
la direccin
direccin

INSTRUCCIN STN

EJEMPLO: Describir el
calculo del atributo Pcode
en ejemplos individuales y
mostrar que, por ejemplo, la
expresin (x=x+3)+4 tiene
ese atributo

DECLARACIN:
lda x,
lod x,
ldc 3,
adi,
stn,
ldc 4,
adi

GENERACIN DE CDIGO
OBJETIVO A PARTIR DEL CDIGO
INTERMEDIO
Este paso puede ser bastante complejo por si mismo, en particular si el
cdigo intermedio es muy simblico y contiene poca o ninguna
informacin acerca de la maquina objetivo o el ambiente de ejecucin

Debe suministrar todas las ubicaciones


reales de variables y temporales, mas el
cdigo necesario para mantener el
ambiente de ejecucin

Debe realizarse la asignacin


apropiada de los registros y el
mantenimiento, sobre el uso de los
mismos

MENDEZ PASION Michael

rbol sintctico
abstracto (ASA)

Cada nodo no terminal representa un operador.


Cada nodo terminal representa un operando.

Ejemplos
1. Sea el conjunto de producciones
E:: = T+F
E:: = E
T:: = F
F:: = A|B
Smbolos no terminales: (E.T.F)
Smbolos terminales: (A, B)

rbol de anlisis sintctico

rbol sintctico abstracto

Para el caso 1.
E deriva a E+T
E derivara a T
T derivara a F
F derivara a los
operandos a A + B
Para el caso 2
Solamente se toma
encuentra los
smbolos terminales.
El operador suma +
representa el nodo
padre o raz de los
operandos A y B.

2. Caso de una asignacin


S:= A+B*C

Veremos:
Tenemos a S se le
asigna A+B *C
En este caso los
operadores sern la
asignacin, la suma y
el producto
Y que A, B y C sern
los smbolos
terminales.

3. Si se trata de una estructura condicional


IF A<B THEN
X:=B

Si

se trata de
una estructura
condicional
IF A<B THEN
X:=B

4. Tenemos la siguiente cadena


C = a * b / 32 + a * b

Los operadores son: =, +, /, * (sern los nodos no


terminales).
Los operadores son: c, a, b (sern los nodos
terminales).
Tendremos el siguiente rbol sintctico.

Ojo: La subestructura de a * b
se repite dos veces.

Grafo dirigido acclico (GDA)


Debemos saber:
Un nodo intermedio representa un operador y sus hijos los
operandos.
Un nodo hijo puede tener ms de un padre.

Ejemplo.
C= a * b / 32 + a * b

Los operadores son: =, +, /, * (sern los nodos


intermedios (nodos padres)).
Los operadores son: c, a, b (sern los smbolos
terminales (nodos hijos)).

Ojo: tengamos en cuenta que la


subestructura a * b no se repite por
lo que se crea un arco desde el
signo ms +hasta la estructura *
para reutilizar.

Notacin posja.
Los

operandos aparecen en el mismo orden.


Lo operadores en el de evaluacin (de
izquierda a derecha)

EJEMPLOS
a * b ab*
Tenemos que a y b son los operandos y * el operador
por ese motivo se va a la derecha.
a * (b + c / d) abcd/+*
Tenemos que a multiplica a la expresin b, c, d. Por
partes hacemos que c y d se deben dividir, al
resultado se debe de sumar y por ultimo a toda esa
expresin se la debe multiplicar.
a*b+c*d ab*cd*+
En este caso vemos la suma de dos productos.
Primero hallamos lo del primer producto(a*b) y
segundo (c*d). Por ltimo se ejecuta la suma.

Cdigo de tres
direcciones

Ejemplo.
Expresin en C
C = a * b / 32
+a*b

Cdigo de tres
direcciones (ASA)

Cdigo de tres
direcciones (GDA)

T1 a * b
T2 t1 / 32
T3 a * b
T4 t2 + t3
c t4

T1 a * b
T2 t1 / 32
C t2 + t1

se utilizan variables temporales (T).


En el rbol sintctico abstracto se utilizan ms
sentencias.
En el grado dirigido abstracto se utilizan menos
sentencias por que se reutiliza el cdigo.

CONCLUSIONES

El cdigo intermedio es ms parecido al cdigo ensamblador.


La generacin de cdigo intermedio trasforma todo lo que se
realiz en las etapas anteriores de un compilador en un lenguaje
intermedio, que suele ser cdigo suficientemente sencillo para
poder luego generar cdigo mquina.
El cdigo intermedio se puede reutilizar en otro compilador para
una computadora con diferente procesador, la desventaja es que
generara falta de velocidad.
El cdigo intermedio no es el lenguaje de programacin de
ninguna maquina real, sino que corresponde a una maquina
abstracta, que se debe de definir lo ms general posible, de forma
de forma que sea posible traducir este cdigo intermedio a
cualquier maquina real por lo cual uno de sus objetivos es permitir
ms fcilmente la transportabilidad de unas mquinas a otras.

MUCHAS GRACIAS

You might also like