Professional Documents
Culture Documents
CDIGO
INTERMEDIO
Curso : Teora de Lenguajes
Docente: SILVA ZAPATA Miguel Angel
Integrantes:
INTRODUCCIN
CDIGO INTERMEDIO
Definido lo mas
general posible
OBJETIVO DEL
CODIGO
INTERMEDIO:
Construir
traductores
Reducir el nmero de
programas necesarios para:
Transportabilidad
Intermedio
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:
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
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
Cuartetos
Tercetos
Tercetos Indirectos
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:
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
:
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:
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
rbol sintctico
abstracto (ASA)
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)
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.
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.
Si
se trata de
una estructura
condicional
IF A<B THEN
X:=B
Ojo: La subestructura de a * b
se repite dos veces.
Ejemplo.
C= a * b / 32 + a * b
Notacin posja.
Los
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
CONCLUSIONES
MUCHAS GRACIAS