Lenguaje Intermedio. Tipo (1)
Es una representación más abstracta y uniforme que un lenguaje máquina concreto. Su misión es descomponer las expresiones complejas en binarias y las sentencias complejas en sentencias simples. Ventajas: • Permite una fase de análisis (análisis semántico) independiente de la máquina. • Se pueden realizar optimizaciones sobre el código intermedio (Las complejas rutinas de optimización son independientes de la máquina). Desventajas: • Pérdida de eficiencia (no permite una compilación de una sola pasada). • Introduce en el compilador una nueva fase de traducción.
Lenguaje Intermedio. Tipo (2)
Tipos de lenguajes intermedios: • Árbol sintáctico. • Árbol sintáctico abstracto. Todos los nodos del árbol representan símbolos terminales. Los nodos hijos son operandos y los nodos internos son operadores. • Grafo dirigido acíclico (GDA). • Notación posfija. • Definición de una máquina abstracta. • N-tupla: Cada sentencia del lenguaje intermedio consta de N elementos: (Operador, Operando1, Operando2, … , Operando N?−1) Los más usuales son los tercetos (tripletas) y los cuartetos (cuádruplas), llamados también código de tres direcciones.
Lenguaje Intermedio. Tipo (3)
Tripletas: Ejemplo: d = a + b * c [1] (*, b, c) [2] (+, a, [1]) [3] (=, d, [2]) <operador>, <operando_1>, <operando_2> Cuartetos: Ejemplo: d = a + b * c (*, b, c, temp1) (+, a, temp1, temp2) (=, temp2, —, d)