5. GENERALIDADES
■ Después de la etapa de análisis, se suele generar una representación intermedia
explícita del programa fuente. Dicha representación intermedia se puede considerar
como un programa para una máquina abstracta.
■ Se puede considerar esta representación intermedia como un programa para una
máquina abstracta.
■ Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil
de producir y fácil de traducir al programa objeto.
■ En 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.
■ La representación intermedia puede tener diversas 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.
■ Otra forma intermedia es la llamada “código de tres direcciones”, que es como el
lenguaje ensamblador para una máquina en la que cada posición de memoria puede
actuar como un registro.
6. FUNCIONAMIENTO
■ En lugar de generar código ensamblador directamente, los compiladores
generan un código intermedio que es más parecido al código ensamblador,
las operaciones por ejemplo nunca se hacen con más de dos operandos.
■ Al no generarse código ensamblador el cual es dependiente de la
computadora especifica, sino código intermedio, se puede reutilizar la parte
del compilador que genera código intermedio en otro compilador para una
computadora con diferente procesador cambiando solamente el generador
de código ensamblador al cual llamamos back-end, la desventaja
obviamente es la lentitud que esto conlleva.
■ El código intermedio no es el lenguaje de programación de ninguna
máquina real, sino que corresponde a una máquina abstracta, que se debe
de definir lo más general posible, de forma que sea posible traducir este
código intermedio a cualquier máquina real.
7. REPRESENTACION INTERMEDIA
■ Esta representación intermedia tiene varias propiedades.
– Primera, cada instrucción de tres direcciones tiene a lo
sumo un operador, además de la asignación. Por tanto,
cuando se generan esas instrucciones, el compilador tiene
que decidir el orden en que deben efectuarse las
operaciones.
– Segunda, el compilador debe generar un nombre temporal
para guardar los valores calculados por cada instrucción.
– Tercera, algunas instrucciones de ‘tres direcciones” tienen
8. TIPOS DE REPRESENTACION
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.
10. JUSTIFICACION
■ 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?
1. 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.
2. 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.
3. La segunda parte del compilador, síntesis, se modifica de acuerdo a la
máquina de destino.
4. 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.
11.
12. OBJETIVOS
■ El objetivo del código intermedio es reducir el número de programas
necesarios para construir traductores, y permitir más fácilmente la
transportabilidad de unas máquinas a otras.
■ Supóngase que se tienen n lenguajes, y se desea construir
traductores entre ellos.
■ Sería necesario construir n*(n-1) traductores. Sin embargo si se
construye un lenguaje intermedio, tan sólo son necesarios 2*n
traductores.
■ Así por ejemplo un fabricante de compiladores puede construir un
compilador para diferentes máquinas objeto con tan sólo cambiar
las dos últimas fases de la tarea de síntesis.
13. MAQUINA ABSTRACTA
■ La arquitectura de la máquina abstracta se elegirá de forma que
contribuya a facilitar la portabilidad dentro del grupo de
arquitecturas hacia las que previsiblemente se dirigirá el código
objeto.
■ Habitualmente las arquitecturas típicas de máquinas abstractas son:
– Máquinas basadas en pila,
– basadas en registros,
– combinación de pilas y registros,
– orientadas a objetos.
■ También se pueden clasificar desde el punto de vista de la cantidad y
complejidad de sus instrucciones en máquinas CISC (Complex
Instruction Set Computer)y RISC (Reduced Instruction Set Computer).
15. NOTACION POLACA
■ El lógico polaco Jan Łukasiewicz inventó esta notación alrededor de
1920 para simplificar la lógica proposicional.
■ La notación polaca, también conocida como notación de prefijo o
notación prefija, es una forma de notación para la lógica, la
aritmética, el álgebra y la computación.
■ Su característica distintiva es que coloca los operadores a la
izquierda de sus operandos.
■ Si la paridad de los operadores es fija, el resultado es una sintaxis
que carece de paréntesis u otros signos de agrupación, y todavía
puede ser analizada sin ambigüedad.
20. CODIGO P
■ El código P comenzó como un código ensamblador objetivo estándar
producido por varios compiladores Pascal en la década de 1970 y
principios de la de 1980.
■ El código P hace referencia a máquinas que utilizan o se auxilian de
pilas para generar código objeto.
■ En muchos caso la P se asociado a código portable el cual garantiza
que el código compilado en una máquina se pueda ejecutar en otras.
■ También se recomienda la no utilización de carácterísticas
especiales exclusivas de alguna arquitectura de computadoras en
particular.
■ Este tipod e código es el utilizado por los interpretes par aguardar el
código fuente sintetizado para su posterior interpretación.
■ Cada Lenguaje interpretado maneja un código P distinto,
usualmente se suele hacer analogía entre PCODE y BYTECODE
22. TRIPLOS
■ Las proposiciones de tres direcciones se parece mucho al
ensamblador, el cual es un lenguaje intermedio más
entendible para la máquina.
■ Esta notación se puede implementar como registros con
campos para el operador y operadores.
■ Las estructuras de control (if, switch, while, do-while, for)
son realmente etiquetas goto disfrazadas.