Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Asignatura:
Lenguajes Autómatas II
Unidad 2:
Generación de código intermedio.
Tema:
Distintas formas de representación de código
Intermedio, (incluyendo la de tres y cuatro direcciones)
Alumna:
Prado Godoy Lizeth
Profesor:
I.S.C. Carlos Sánchez Pérez
Fecha:
30/09/2020
Introducción
El código fuente puede ser traducido en su código de la máquina destino, entonces,
¿por qué hemos de traducir el código fuente en un código intermedio que luego se
traduce en su código de destino? Vamos a ver las razones por las que necesitamos
un código intermedio.
Código
Intermedio
Código Código de
Fuente Destino
Es más fácil de aplicar las modificaciones del código fuente para mejorar
rendimiento del código mediante la aplicación de técnicas de optimización
código el código intermedio.
Representación intermedia
Códigos intermedios puede ser representado en una variedad de formas y tienen sus
propios beneficios.
Alto nivel IR - Alto nivel de representación de código intermedio está muy
cerca de la lengua de origen. Pueden ser fácilmente generados desde el
código fuente y podemos aplicar fácilmente modificaciones de código para
mejorar el rendimiento. Pero para optimización de la máquina destino, es
menos preferido.
Código Three-Address
Generador de código intermedio 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, por ejemplo, postfix notación.
Código intermedio tiende a ser código independiente de la máquina. Por lo tanto,
generador de código supone que tiene número ilimitado de almacenamiento en
memoria (registro) para generar el código.
Por ejemplo:
a = b + c * d;
* c d r1
+ b r1 r2
+ r2 r1 r3
= r3 a
Triples
Cada instrucción en triples presentación tiene tres campos : op, arg1, arg2.Los
resultados de las respectivas sub-expresiones son indicados por la posición de
expresión. Similitud con Triples representan DAG y árbol de sintaxis. Son
equivalentes a DAG al tiempo que representan las expresiones.
Op Arg1 Arg2
* C d
+ B (0)
+ (1) (0)
= (2)
Triples ante el problema de optimización código un inmovilismo mientras que, en la
medida en que los resultados son posicionales y cambiar el orden o la posición de
una expresión puede causar problemas.
Triples
Cada instrucción en triples presentación tiene tres campos : op, arg1, arg2.Los
resultados de las respectivas sub-expresiones son indicados por la posición de
expresión. Similitud con Triples representan DAG y árbol de sintaxis. Son
equivalentes a DAG al tiempo que representan las expresiones.
Op Arg1 Arg2
* C d
+ B (0)
+ (1) (0)
= (2)
Declaraciones
Una variable o procedimiento tiene que ser declarado antes de que se pueda
utilizar. Declaración implica asignación de espacio en la memoria y la entrada de
tipo y nombre de la tabla de símbolos. Un programa puede ser codificada y
diseñado siguiendo la estructura de la máquina destino en mente, pero es posible
que no siempre se pueda convertir con precisión un código fuente para su idioma de
destino.
Ejemplo:
Tomamos el ejemplo de lenguaje de programación C en una variable de tipo entero
se le asigna 2 bytes de memoria y una variable de tipo float se asigna 4 bytes de
memoria.
int a;
float b;
Allocation process:
{offset = 0}
int a;
id.type = int
id.width = 2
offset = offset + id.width
{offset = 2}
float b;
id.type = float
id.width = 4
offset = offset + id.width
{offset = 6}