Generación de código

Páginas: 6 (1290 palabras) Publicado: 16 de octubre de 2013
Procesadores de lenguaje

Tema 8
Generación de código

Ciencias de la Computación e Inteligencia Artificial

8. Generación de código

Índice

8.1 Visión general
8.2 Código de tres direcciones
8.3 Código asociado a las instrucciones comunes

2

Procesadores de lenguaje

1

8.1 Visión general

8. Generación de código

8.1.1 La arquitectura front-end/back-end
• El objetivofinal de un compilador es traducir el código fuente a
código máquina (o ensamblador) de la plataforma de destino.
• Muchos compiladores presentan una arquitectura dividida en
dos partes: front-end y back-end.
– El front-end realiza una traducción de código fuente a código
intermedio.
– El back-end realiza una traducción de código intermedio a código
máquina

• Esta división permitegenerar familias de compiladores que
comparten el front-end.
3

Procesadores de lenguaje

8.1 Visión general

8. Generación de código

8.1.2 Características del código intermedio
• Sus instrucciones corresponden básicamente a las
instrucciones generales de los procesadores
• Es independiente de la máquina (hasta cierto punto)
• No tiene en cuenta características como la
arquitectura delprocesador, el número de registros
del procesador o la funcionalidad de estos registros.
• Aunque se pueda expresar en modo texto, el código
intermedio se almacena en memoria en forma de
árbol (ASA)
El

d t t

Procesadores de lenguaje

tili

d

l

4

il d

2

8.1 Visión general

8. Generación de código

8.1.3 Otras opciones
• Lenguajes pseudointerpretados (Java). Elcompilador genera un
código binario de una máquina virtual. Este código es
interpretado en tiempo de ejecución.
• Traductores fuente-fuente. La idea es traducir un código fuente
a un lenguaje de alto nivel diferente (generalmente C) para el
que ya exista un compilador eficiente. Esta solución se aplica
comúnmente para lenguajes declarativos (Prolog, Haskell) o
para producir código paramicroprocesadores que se
distribuyan con un compilador de C.

5

Procesadores de lenguaje

8. Generación de código

8.2 Código de tres direcciones

8.2.1 Características generales
• Se suele tomar como código intermedio
• Está formado por instrucciones con un máximo de tres
direcciones: operando1, operando2 y resultado.
• Las instrucciones se representan por cuartetos: (operador,operando1, operando2, resultado).
• No todas las direcciones deben estar ocupadas. Existen
instrucciones con menos direcciones.
• Las instrucciones son muy parecidas a las de cualquier
ensamblador: sumas, restas, multiplicaciones, saltos
condicionales, saltos incondicionales, ...
6

Procesadores de lenguaje

3

8. Generación de código

8.2 Código de tres direcciones

8.2.1Características generales
• Las direcciones de memoria se gestionan de manera simbólica,
es decir, no se asigna un valor numérico a estas direcciones.
• No se trata de ningún estándar. Cada familia de compiladores
define su propia representación intermedia.
• Al diseñar un compilador hay total libertad a la hora de definir
las instrucciones del código intermedio.
• Por ejemplo, la familia de compiladoresgcc utiliza el código
intermedio RTL (Register Transfer Language). Los front-end de
C y C++ definen además otras representaciones previas
llamadas GENERIC y GIMPLE que facilitan la optimización.
7

Procesadores de lenguaje

8. Generación de código

8.2 Código de tres direcciones

8.2.2 Instrucciones típicas
• Instrucciones básicas:
– x := y op z (operación binaria aritmética ológica)
– x := op y

(operación unaria aritmética o lógica)

– x := y

(asignación simple)

– goto etiqueta (salto incondicional)
– if x oprelacional y goto etiqueta (salto condicional)

• Instrucciones de asignación con índice
– x[i] := y
– x := y[i]
8

Procesadores de lenguaje

4

8. Generación de código

8.2 Código de tres direcciones

8.2.2 Instrucciones típicas
•...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Investigacion Generacion De Codigo Objeto
  • Generación de código intermedio
  • Generacion de codigo objeto
  • Generación de código final
  • generacion de codigo objeto
  • Generacion De Un Codigo Intermedio
  • Unidad viii generación de código intermedio
  • Unidad 8. generacion de codigo objeto

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS