You are on page 1of 16

Procesadores de Lenguaje

Francisco Ortn Soler

Lenguajes y Representaciones Intermedias I di

Lenguajes y Sistemas Informticos

Universidad de Oviedo

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

Introduccin

Cdigo Intermedio
La representacin intermedia del cdigo analizado representa el nexo entre el front-end y el back-end de un procesador El cdigo intermedio representa la salida del primer mdulo de sntesis (generacin de cdigo intermedio) El cdigo intermedio se puede representar de mltiples formas y en mltiples niveles d abstraccin f l l l de b
Front-end Analizador Semntico rbol Sint. Decorado Tabla de Smbolos Generador de Cdigo Intermedio Cdigo Intermedio Optimizador de Cdigo Sntesis Back-end
Francisco Ortn Soler

Gestin de Errores

Introduccin

Justificacin de Emplear un CI
El cdigo intermedio de un compilador suele ser cdigo del lenguaje de una mquina abstracta: Mquina diseada sin la intencin de ser implementada a nivel hardware Por qu existe una fase intermedia en la generacin de cdigo? Para reducir el nmero de traducciones necesarias para construir un compilador portable (retargetable) capaz de generar cdigo para distintas plataforma
Cdigo Fuente Fortran Pascal ... C n Lenguajes

n*m Traducciones
Compilacin Directa a las Plataformas Existentes Plataformas Especficas Motorola 68K Sun Sparc

i80x86

...

m Plataformas Francisco Ortn Soler

Introduccin

Reduccin de Traducciones
La traduccin de n lenguajes a m plataformas se ve reducida de n*m a n+m, gracias al empleo de un cdigo intermedio Tambin es comn ver este escenario para un nico lenguaje y varias plataformas

Cdigo Fuente

Fortran

Pascal

...

n Lenguajes

Compilacin a una Mquina Abstracta

Cdigo Intermedio

n+m Traducciones

Traduccin de Mquina Abstracta a Mquina Real

Plataformas Especficas

i80x86

Motorola 68K

...

Sun sparc

m Plataformas Francisco Ortn Soler

Introduccin

Otras Utilizaciones
Inicialmente, la reduccin del nmero de traducciones de un compilador fue el objetivo principal de la utilizacin de un cdigo intermedio Un caso particular de este esquema, que ofrece beneficios adicionales, es la utilizacin de una mquina virtual Una mquina virtual es una implementacin software de la especificacin de una mquina abstracta
Cdigo Fuente
Compilacin Lenguaje Intermedio de la Mquina Abstracta Lenguaje Fuente

Cdigo Intermedio

Ejecucin de la aplicacin en la plataforma A

Implementacin de la Mquina Virtual para la Plataforma A

Implementacin de la Mquina Virtual para la Plataforma B

Ejecucin de la aplicacin en la plataforma B

Plataforma A

Plataforma B

Francisco Ortn Soler

Introduccin

Beneficios de Utilizacin de MVs


La utilizacin de mquinas virtuales, ha aportado los siguientes beneficios adicionales al mencionado Portabilidad de aplicaciones (independencia de plataforma): El cdigo intermedio se puede ejecutar en cualquier sitio donde exista una mquina virtual (Mquina-p, Java, C#) Adecuacin al paradigma. La traduccin de determinados paradigmas a cdigo binario es realmente compleja por el bajo nivel de abstraccin de los microprocesadores Una mquina virtual puede elevar este nivel de abstraccin, simplificando la tarea del compilador (Smalltalk para Objetos o SECD para LISP) Distribucin de (mdulos) aplicaciones a partir de un servidor Web (Applets o WebStart Java) Intercomunicacin de aplicaciones: Distintas plataformas representan los datos binarios de un modo distinto. La descripcin de los datos de una mquina abstracta no har necesaria esta traduccin (Java RMI o .net Remoting)

Francisco Ortn Soler

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

Tipos de Representacin Intermedia

Tipos de RI
Las representaciones intermedias que emplean los lenguajes de programacin pueden ser clasificadas en funcin de los siguientes criterios
En base a su nivel de abstraccin En base a las propiedades de su lenguaje

Nos centraremos en la primera clasificacin y, para cada caso, describiremos una clasificacin del segundo criterio Los procesadores de lenguaje pueden utilizar varias representaciones intermedias, en funcin en la fase en la que se encuentren En funcin de su nivel de abstraccin, se suelen distinguir Lenguajes Intermedios de alto, medio y bajo nivel de abstraccin, as como multinivel
Francisco Ortn Soler

Tipos de Representacin Intermedia

Clasificacin de RI
Lenguajes Intermedios de Alto Nivel: Son aquellos que se suelen emplear en las primeras fases de traduccin (anlisis), o incluso en preproceso Lenguajes Intermedios de Medio Nivel: Lenguajes intermedios que son Vlidos para representar un conjunto amplio de lenguajes fuente (no siendo dependientes de uno en concreto) Vlidos para representar un conjunto extenso de arquitecturas hardware Lenguajes Intermedios de Bajo Nivel: Permiten traducir a distintos micros de una misma arquitectura (dependientes de sta) Lenguajes Intermedios Multinivel: Aqullos que conjugan algunas de las caractersticas anteriores
Francisco Ortn Soler

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

RIs de Alto Nivel

RIs de Alto Nivel


Se empiezan a utilizar en la fase de anlisis El analizador semntico recibe un rbol de sintaxis (abstracta) del analizador sintctico En ocasiones estas estructuras sirven de cdigo intermedio, como entrada a la fase de sntesis (GNU RTL, Registrer Transfer Level) Otro uso (ms comn) es traducir stas a un cdigo intermedio de medio o bajo nivel Este tipo de representaciones son Dependientes de un lenguaje fuente, e Independientes de una arquitectura destino Su representacin interna facilita su procesamiento para tareas de: 1. Inferencia y comprobacin de tipos 2. Generacin de cdigo 3. Optimizacin de cdigo independiente de la plataforma
Francisco Ortn Soler

RIs de Alto Nivel

Caractersticas
Los elementos de una representacin de alto nivel, modelan las abstracciones de los lenguajes que procesan
Elementos condicionales Representacin de iteraciones Sentencias de asignacin e invocacin Expresiones (desde los operadores aritmticos y condicionales hasta accesos a arrays, atributos, campos y mtodos) Declaraciones de variables, funciones y mtodos

Los lenguajes intermedios de medio y bajo nivel ofrecen abstracciones ms cercanas a los microprocesadores hardware
Francisco Ortn Soler

RIs de Alto Nivel

Tipos de RIs de Alto Nivel


Las representaciones intermedias de alto nivel ms empleadas son rboles (ASTs), grafos dirigidos acclicos (GADs) y grafos de dependencia Representacin mediante rboles de sintaxis abstracta (AST ) b t t (ASTs)
Son una simplificacin de los rboles sintcticos Representan el cdigo mediante estructuras de rboles Cada nodo representa una construccin del lenguaje (clase, mtodo, sentencia, expresin) Permiten una manipulacin sencilla de los programas Aparecen el la fase de anlisis Francisco Ortn Soler

RIs de Alto Nivel

Representacin mediante ASTs


En ocasiones se utilizan como cdigo intermedio, de entrada al back-end (RTL de GNU) Se utilizan para Comprobaciones semnticas (de tipos) Generacin de cdigo intermedio (medio o bajo nivel) Optimizaciones de cdigo independientes de la arquitectura Se realizan mediante transformaciones de ASTs = Expresin en C: AST asociado

c=a*b/32+a*b

c / * a b 32

+ * a b
Francisco Ortn Soler

RIs de Alto Nivel

Implementacin de ASTs
Implementacin de diseo con el patrn Composite Ejemplo de diagrama de clases para expresiones, sentencias y condicionales:
Sentencia n 1..n

Expresion 1

1 2

Condicional condicion : Expresion cierto : vector<Sentencia> falso : vector<Sentencia>

ExpresionUnaria ConstanteEntera operador : char valor : int operando : Expresion

ExpresionBinaria operador : char operando1 : Expresion operando2 : Expresion


Francisco Ortn Soler

RIs de Alto Nivel

Representacin mediante GADs


La representacin de cdigo mediante Grafos Acclicos Dirigidos supone una optimizacin de la representacin de ASTs
Se reutilizan las expresiones comunes Generan cdigo optimizado respecto a los ASTs

Suele ser un soporte directo para la optimizacin de subexpresiones comunes independiente de la plataforma
= Expresin en C: c=a*b/32+a*b * a b c / 32 +

GAD asociado

Francisco Ortn Soler

RIs de Alto Nivel

Grafos de Dependencia
Los grafos de dependencia se emplean en tareas de optimizacin de cdigo Coexisten con las representaciones anteriores Pueden ser de dos tipos Grafos de dependencia de flujo: Grafos dirigidos que representan dependencias entre instrucciones q p Nodos que representan secuencias de instrucciones contiguas Aristas (etiquetadas con predicados) que representan saltos condicionales o incondicionales Ejemplo: Transforamciones SSA (Static SingleAssignment) Grafos de dependencia de datos: Grafos dirigidos que representan dependencias entre datos Nodos del grafo son instrucciones Aristas (etiquetadas con identificadores) del grafo representan dependencia entre los datos Ejemplo: alias analysis o liveness analysis Francisco Ortn Soler

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel p Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico
Francisco Ortn Soler

RIs de Medio Nivel

RIs de Medio Nivel


Representan un amplio abanico de lenguajes de programacin fuente, sin sufrir dependencia de un lenguaje especfico Permiten generar cdigo a un elevado nmero de e te ge e a cd go u e e ado e o plataformas Permiten realizar la mayora de optimizaciones de cdigo independientes de la plataforma y del lenguaje fuente Es el formato de cdigo intermedio ms utilizado en la mayora de los compiladores (nexo entre el back-end y front-end)
Francisco Ortn Soler

RIs de Medio Nivel

Elementos de RIs de Medio Nivel


Proporcionan las siguientes abstracciones:
Variables del cdigo fuente Variables temporales El flujo de ejecucin se realiza con saltos, llamadas a funciones y retornos de stas Asignacin de variables Obtencin de direcciones (&) e indireccionamiento (*) Puede utilizarse una pila de ejecucin y/o un conjunto de registros simblicos

Las representaciones ms empleadas son:


Mquinas de pila Cdigo de tres direcciones Notacin polaca inversa

Francisco Ortn Soler

RIs de Medio Nivel

Mquinas de Pila
Los operaciones trabajan con (operandos) y sobre (resultados) una estructura de pila No es comn el empleo de registros simblicos Ventajas
Generar este tipo de cdigo es sencillo Su i t S interpretacin ( j t i (ejecucin) resulta di i ) lt directa t empleando una estructura de pila

Inconvenientes
Las optimizaciones de cdigo son algo ms complejas, puesto que los parmetros estn implcitos en la pila Aunque existen microprocesadores basados en mquinas de pila (HP3000 y Burroughs B5500), en la actualidad la mayora estn basadas en registros

Es el formato ms empleado de cdigo intermedio Francisco Ortn Soler

RIs de Medio Nivel

Ejemplo de cdigo de Pila


Expresin en C: c=a*b/32+a*b Cdigo JVM: iload_1 iload_2 imul bipush 32 idiv iload_1 iload_2 imul iadd dup istore_3 // a // b pusha 4 ' pusha 0 ' loadi pusha 2 ' loadi muli pushi 32 divi pusha 0 ' loadi pusha 2 ' loadi muli addi storei c a b Cdigo MAPL:

Cdigo MSIL (.net): ldloc.0 ldloc.1 mul ldc.i4.s 32 div ldloc.0 ldloc.1 mul add stloc.2 // a // b

a b

// a // b

// a // b // c

// c

Francisco Ortn Soler

RIs de Medio Nivel

MAPL
MAPL es una Mquina Abstracta utilizada para Procesadores de Lenguaje (la asignatura) Es una mquina de pila Una mquina virtual (.Net Fw 2) y depurador estn disponibles en di ibl
http://www.di.uniovi.es/procesadores/Herramientas/ HerramientasCompiladores/interprete.zip

Se utiliza en las clases prcticas y en el examen prctico Aunque su propsito es didctico, su lenguaje es bastante similar a mquinas como JVM o CLI (CLR)
Francisco Ortn Soler

RIs de Medio Nivel

MAPL: Elementos
Memoria para datos entre 512 bytes y 16 Kb (1Kb por defecto) No ofrece primitivas de gestin de memoria heap Segmento de cdigo separado en un espacio de direcciones con una direccin para cada instruccin (comenzando en cero) Registros: IP -> Direccin en el segmento de cdigo de la instruccin actual SP -> Direccin en el segmento de datos de la cima de la pila BP -> Direccin en el segmento de datos del marco (frame) de la funcin actual No hay SS la pila siempre comienza al final del Francisco Ortn Soler segmento de datos

RIs de Medio Nivel

MAPL: Push y Pop


pushb cdigo_ASCII Apila el carcter cuyo cdigo es indicado en la pila push[i] cte_entera Apila el entero cte_entera en la pila pushf cte_real Apila el entero cte real en la pila p a e e te o cte_ ea e a p a pusha cte_entera Apila la direccin cte_entera en la pila pusha bp Apila el valor del registro bp (una direccin) popb, pop[i], popf Desapila un carcter, entero o real respectivamente dupb, dup[i], dupf Duplica el carcter, entero o real ubicado en el tope Francisco Ortn Soler de la pila

RIs de Medio Nivel

MAPL: Load y Store


loadb, load[i], loadf
Desapila una direccin de memoria Apila el carcter, entero o real apuntado por la direccin extrada Qu operador del C realiza esa misma operacin (la operacin load)?
1. 2.

storeb, store[i], storef


Desapila una direccin de memoria Desapila un valor carcter, entero o real 3. Asigna el valor extrado (en paso 2) en la direccin de memoria extrada (en el paso 1) Qu operador del C realiza esa misma operacin (la operacin store)?
1. 2. Francisco Ortn Soler

RIs de Medio Nivel

MAPL: Ejercicio

Dado el siguiente programa de alto nivel


a = 3; b = a;

Se pide,
Escribir el cdigo MAPL de salida Supngase las direcciones de a=0 y b=2 Ejecutar el cdigo en el depurador

Francisco Ortn Soler

RIs de Medio Nivel

MAPL: Operaciones
Aritmticas add[i], addf sub[i], subf mul[i], mulf div[i], divf mod[i], modf Lgicas: and , or, not
1. 2. 3.

Comparacin: gt[i], gtf lt[i], ltf ge[i], gef le[i], lef eq[i], eqf ne[i], nef

Desapilan los 2 operandos (uno en el caso de not) Realizan la operacin Apilan el resultado
Francisco Ortn Soler

RIs de Medio Nivel

MAPL: E/S y Conversin


Entrada / Salida outb, out[i], outf: Extrae el valor de la cima de la pila y lo muestra por pantalla inb, in[i], inf: Lee un valor por teclado y lo apila , [ ], p p Conversin: b2i: Desapila entero i2f: Desapila f2i: Desapila i2b: Desapila carcter un carcter y apila su valor como un enteroy apila su valor como real un real y apila su valor como entero un entero y apila su valor como

Francisco Ortn Soler

10

RIs de Medio Nivel

MAPL: Ejercicio

Dado el siguiente programa de alto nivel


cin >> entero; real = entero * 3.4 7; cout << real;

Se pide,
Escribir el cdigo MAPL de salida Supngase las direcciones de entero=0 y real=2 Ejecutar el cdigo en el depurador
Francisco Ortn Soler

RIs de Medio Nivel

Cdigo de tres direcciones


Representacin simblica de una mquina basada en registros La estructura general de sus instrucciones posee la siguiente sintaxis

Las arquitecturas CISC emplean cdigo de dos direcciones (coinciden el primer operando y el resultado) Ntese que no permite representar expresiones compuestas Ventajas: Es ms orientado a la optimizacin de cdigo y traduccin sencilla a micros hardware Inconvenientes: Su generacin e interpretacin es ms compleja
Francisco Ortn Soler

x y op z Donde x, y, z son identificadores, constantes (a excepcin de x) o variables temporales generadas por el compilador Y op representa cualquier tipo de operador

RIs de Medio Nivel

Ejemplo
ste es un formato utilizado principalmente como representacin interna del compilador SunIR es un lenguaje de tres direcciones empleado por los compiladores de Sparc y Motorola 68K para los lenguajes C, C++, Fortran77 y Pascal UCODE es un lenguaje intermedio que se ha empleado para compiladores HP PA-RISC y MIPS Expresin en C: c=a*b/32+a*b Cdigo de tres direcciones (no optimizado): t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4 Cdigo de tres direcciones (optimizado): t1 a * b t2 t1 / 32 c t2 + t1

Francisco Ortn Soler

11

RIs de Medio Nivel

Representacin de C3D
Como hemos comentado, ste suele ser un formato interno del compilador
Los lenguajes intermedios de mquinas de pila son ms comunes como formato externo

Por tanto, es importante idear un modo de representar internamente sus instrucciones (cuartetos, tercetos y tercetos indirectos)
Cuartetos: Estructura de tipo registro con cuatro campos: op, arg1, arg2 y resultado
Cdigo TD t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4 Representacin en Cuartetos op arg1 arg2 resultado * a b t1 / t1 32 t2 * a b t1 + t2 t3 t4 = t4 c Francisco Ortn Soler

(1) (2) (3) (4) (5)

RIs de Medio Nivel

Representacin de C3D
Tercetos: Evitan la utilizacin de valores temporales, utilizando posiciones de las operaciones Se elimina por tanto la variable resultado Ventajas: Menor memoria No gestionan el uso de temporales (las posiciones son punteros) Inconvenientes: El traslado de instrucciones empleado en optimizacin de cdigo resulta ms complejo Menor legibilidad (depuracin) Cdigo TD Representacin en Tercetos op arg1 arg2 t1 a * b (1) * a b t2 t1 / 32 (2) / (1) 32 t3 a * b (3) * a b t4 t2 + t3 (4) + (2) (3) c t4 (5) = c (4) Francisco Ortn Soler

RIs de Medio Nivel

Representacin de C3D
Los tercetos indirectos Permiten reordenar instrucciones en optimizaciones de cdigo (utilizan una indireccin) Eliminan la necesidad de gestionar variables temporales Tercetos Indirectos: Se aade una nueva lista de los p punteros a las instrucciones, para indicar su orden ,p El traslado de instrucciones modifica esta lista El cdigo de Sun IR que emplean los compiladores para Sparc, emplean una representacin de este tipo

Cdigo TD t1 a * b t2 t1 / 32 t3 a * b t4 t2 + t3 c t4

Representacin en Tercetos Indirectos orden op arg1 arg2 (101) (101) * a b (102) (102) / (101) 32 (103) (103) * a b (104) (104) + (102) (103) (105) (105) = c (104)

Francisco Ortn Soler

12

RIs de Medio Nivel

Notacin Polaca Inversa


Notacin polaca inversa o postfija: Resultado de un recorrido en postorden del AST Por tanto, pueden obtenerse directamente del AST Tambin es sencillo obtener el AST a partir de esta representacin intermedia Por ello, se suelen emplear como entrada de herramientas de generacin de cdigo Su cdigo es otra notacin de las representaciones b d d l basadas d en mquinas de pila Ventajas: Fciles de generar y ejecutar Inconvenientes: Difcil optimizacin del cdigo y traduccin a un microprocesador basado en registros Expresin en C: Notacin postfija: c c=a*b/32+a*b a b * 32 / a b * + = Francisco Ortn Soler

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

RIs de Bajo Nivel

RIs de Bajo Nivel


Representan un conjunto de lenguajes para una familia de microprocesadores de una misma arquitectura Permiten realizar la mxima optimizacin de cdigo para un microprocesador concreto Es la ltima (y opcional) representacin de cdigo intermedio de un compilador optimizador La semntica de sus instrucciones es cercana a la traduccin de una instruccin destino por cada instruccin origen Se especializa su traduccin para un micro especfico, de modo que sea la ms rpida posible Optimizacin a nivel de registro Todas se basan en lenguajes con registros simblicos, muy cercanos a la arquitectura destino Soler Francisco Ortn

13

RIs de Bajo Nivel

Ejemplo
HP PA-RISC (Precision Architecture, Reduced Instruction Set Computing) es una familia de micros RISC de HP cuyo cdigo intermedio de bajo nivel se denomina SLLIC (Spectrum Low-Level Intermediate Code) Cdigo 3D Cdigo C:

L1: t2 *t1 // t2 es *p t1 t1 + 1 // t1 es p t3 t3 + 1 // t3 es i t4 t3 < t2 SLLIC (PA-RISC) if t4 goto L1 // r1 es p, r2 es *p, r3 es i L1: LDWM 4(0,r1),r2 // Load (r2=*p) and modify (p++) ADDI 1,r3,r3 // Add integer (++i) COMB,< r3,r2,L1 // Compare and branch on < while (++i<*p++); HP 9000/700 // r1 es p, r2 es *p, r3 es i L1: LDWM 4(0,r1),r2 // Load (r2=*p) and modify (p++) ADDIB,< (1,r3)r2,L1 // Add (++i) and brach on < Soler Francisco Ortn

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

RIs con Mltiples Niveles de Abstraccin

RIs con Mltiples Niveles Abstraccin


Determinadas representaciones intermedias poseen abstracciones de distintos niveles de abstraccin
Por ejemplo, el lenguaje de nivel intermedio de la mquina virtual de Java (JVM) posee representaciones de alto nivel tales la manipulacin y acceso indexado de arrays multidimensionales multianewarray (multi-array-new-array), aaload (array-array-load) o aload (array-load)

Este criterio se suele emplear para facilitar la tarea de optimizar cdigo, sin embargo:
Subir el nivel de abstraccin representa dependencia del lenguaje de alto nivel (en este caso, de Java) Bajar el nivel conlleva una dependencia de una arquitectura especfica Francisco Ortn Soler

14

RIs con Mltiples Niveles de Abstraccin

Estructura Compilador Optimizador


Para no sufrir dependencias, la mayora de los compiladores optimizadores emplean varias representaciones intermedias Por ejemplo, los compiladores de HP para su arquitectura PA-RISC realizan el siguiente proceso

C++

1.

2.

3.

4.

5.

Traducen el programa fuente (C, C++, Fortran y Pascal) a una representacin de alto nivel ( (AST) ) El AST es optimizador mediante transformaciones por el HLO (High Level Optimizer) obteniendo un GAD La salida del HLO es traducida a UCode (lenguaje de pila), siendo sta la salida del front-end De los distintos back-end existentes para HP, el de la arquitectura RISC traduce Ucode a SLLIC (lenguaje de bajo nivel de PA-RISC) En este ltimo nivel se realizan la mayora de las optimizaciones, generando el cdigo objeto

Front-end C++

Anlisis AST HLO GAD GC Intermedio Ucode GC SLLIC Optimizador binario PA-RISC Francisco Ortn Soler
Back-end

Contenido

Introduccin Tipos de Representacin Intermedia Representaciones Intermedias de Alto Nivel Representaciones Intermedias de Medio Nivel Representaciones Intermedias de Bajo Nivel Representaciones Intermedias con Mltiples Niveles de Abstraccin Caso Prctico

Francisco Ortn Soler

Caso Prctico

Ejercicio: Compilador Portable C- Se quiere realizar un compilador de un subconjunto de C (C--) independiente de la plataforma Para ello su cdigo ser traducido a cdigo intermedio MAPL (front-end) El cdigo MAPL ser traducido a binario por distintas mquinas virtuales de las distintas plataformas (distintos back-ends) Para poder migrar las implementaciones de los backends, sta traduce MAPL a una representacin interna de cdigo de tres direcciones El cdigo de 3D ser optimizado antes de generar el cdigo dependiente de la plataforma Ejercicio: Mustrese La estructura de los procesadores de lenguaje para generar finalmente 80x86 Todas las representaciones de cdigo (interno y externo) para la expresin c = (a+b) * (a+b-4) Francisco Ortn Soler

15

Bibliografa

Steven Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufman, 1997. Louden, K.C. d Construccin de Compiladores Principios y Prctica. Thomson. 2004. Scott, M.L. Programming Language Pragmatics. Morgan Kaufmann. 2000.
Francisco Ortn Soler

Procesadores de Lenguaje
Francisco Ortn Soler

Lenguajes y Representaciones Intermedias I di

Lenguajes y Sistemas Informticos

Universidad de Oviedo

16