Professional Documents
Culture Documents
Generación de código.
1. Es el proceso de traducir un programa fuente a código destino, un
compilador puede construir una o más representaciones intermedias, las
cuales pueden tener una variedad de formas. Los árboles sintácticos son
una forma de representación intermedia; por lo general, se utilizan durante el
análisis sintáctico y semántico.
Después del análisis sintáctico y semántico del programa fuente, muchos
compiladores generan un nivel bajo explicitó o una representación
intermedia similar al código máquina, que podemos considerar como un
programa para maquina abstracta. Esta representación debe ser fácil de
producir y fácil de traducir en la maquina destino.
2. REPRESENTACION:
ALTO NIVEL IR- Pueden ser fácilmente generados desde el código fuente
y podemos aplicar fácilmente modificaciones de código para mejorar el
rendimiento.
BAJO NIVEL IR-Este es cerca de la máquina de destino, lo que lo hace
adecuado para registro y asignación de memoria, un conjunto de
instrucciones selección, es bueno para optimizaciones dependientes de la
máquina.
CODIGO THRRE-ADDRESS- Recibe la entrada de su predecesor,
analizador semántico, en la forma de un árbol de sintaxis anotado. Árbol de
sintaxis que luego se puede convertir en una representación lineal.
3. ESQUEMAS DE GENERACIÓN
Los esquemas de generación son las estrategias o acciones que se deberán
realizarse y tomarse en cuenta en el momento de generar código intermedio.
Los esquemas de generación dependen de cada lenguaje. Tomaremos
algunos esquemas de generación del lenguaje C.
Tema: Generación de término intermedio
Esquema: Código de 3 direcciones
¿Qué es?
Es un lenguaje intermedio usado por compiladores optimizados para ayudar en las
transformaciones de mejora del código.
t1: = t2 + t3
Ejemplo:
X = (- b + sqrt (b ^ 2 – 4 * a * c) ) / ( 2 * a )
t1 = b*b
t2 = 4*a
t3 = t2*c
t4 = t1 - t3
t5 = sqrt (t4)
t6 = 0 - b
t7 = t6 + t5
t8 = 2 * a
t9 = t7 / t8
x = t9
Ejercicios.
Realiza el código de tres direcciones para cada una de las siguientes expresiones
a) r²=e(x-a)² +(y-b)²
T1=(x-a)
T2=T1*T1
T3=(y-b)
T4=T3*T3
T5=T2+T4
r²=T5
b) a²=b²+c²
T1=B*B
T2=C*C
T3=T1+T2
a²=T3
c) a=√r²-(1/2) ²
T1=1/2*1/2
T2=r*r
T3=T2-T1
T4=√T3
a=T4
d) A=π*(R²-r²) *ángulo/360
T1=R*R
T2=r*r
T3=T1-T2
T4= π*T3
T5=T4*ángulo
T6=T5/360
A=T6
e) m= y2+y1 / x2-x1
T1=y2+y1
T2=x2-x1
T3=T1/T2
m=T4
f) y=mx+b
T1=m*x
T2=T1+b
y=T2
g) (y-b) ²=2p(x-a)
T1=x-a
T2=2*p
T3=T2*T1
(y-b) ²=T3
h) V= 5/12*(3+√5)*a³
T1=√5
T2=3+T1
T3=a*a*a
T4=5/12
T5=T4*T2
T6=T5*T3
V=T6
i) A=P*Ap/2
T1=A*p
T2=P*T1
T3=T2/2
A=T3
j) V=h/3 * (A+A’+√A*A’)
T1=A*A’
T2=√T1
T3=A+A’
T4=T3+T2
T5=h/3
T6=T5*T4
V=6