El código intermedio
se genera para una máquina virtual. Estas máquinas se definen con dos objetivos: Ser lo suficientemente simples como para poder generar código para ellas de manera sencilla, pero con la suficiente riqueza para poder expresar las construcciones del lenguaje fuente.
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.
Si un compilador traduce el idioma de origen a su ordenador de destino sin tener la opción de generar código intermedio, a continuación, en cada nueva máquina, una nativa del compilador completo es necesario.
Código Intermedio elimina la necesidad de un nuevo compilador completo para cada máquina de la sección de análisis mismo de todos los compiladores.
La segunda parte del compilador, síntesis, se modifica de acuerdo a la máquina de 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.
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, etc. es bueno para optimizaciones dependientes de la máquina.
Código intermedio puede ser específica para cada idioma (p. ej., código de bytes de Java) o independiente de la lengua (tres-código de dirección).
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}
Para entrar en este detalle en una tabla de símbolos, un procedimientoentrar puede ser utilizado. Este método puede tener la siguiente estructura:
enter(name, type, offset)
Este procedimiento debe crear una entrada en la tabla de símbolos, de nombre de la variable, en su tipo y el tipo de desplazamiento de dirección relativa en su área de datos.
link de video CODIGO INTERMEDIO
No hay comentarios.:
Publicar un comentario