• No results found

802.1X/EAP Authentication

de símbolos

G

G

ÆÆ

Códi i

di

Código intermedio

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ‰

‰ Genera una representación intermedia del código fuente que ha de tener

las siguientes características

ƒ Ha de ser fácil de generar a partir del código fuente ƒ Ha de ser fácil de generar a partir del código fuente. ƒ Ha de ser fácil de traducir al código objeto o ejecutable

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ‰

‰ Genera un representación intermedia del código fuente ‰ Es una fase opcional, pero muy recomendable.

ƒ “Redestinación” : al intergrarse en la “parte frontal” del compilador,

favorece la generación de código objeto para distintos entornos de ejecución. j

ƒ Optimización: se puede aplicar a la representación intermedia una

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ‰

‰ Este proceso se realiza mediante definiciones dirigidas por la sintaxis o

esquemas de traducción que se incorporan al análisis sintáctico.

‰ Tipos de representaciones intermedias: ‰ Tipos de representaciones intermedias:

ƒ Notación postfija

Á b l i á i

ƒ Árboles sintácticos

ƒ Grafos dirigidos acíclicos

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ‰

‰ V.g.: if (divisor != 0.0) dividendo = divisor * cociente + resto ; ‰ Representación intermedia en código de tres direcciones:

100. if divisor = 0 goto 104 101. t1 := divisor * cociente 101. t1 : divisor cociente 102. t2 := t1 + resto

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ¾

¾ Optimización del código intermedio ¾ Generación de código

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P

f

t

ÆÆ

A áli i lé iA áli i lé i

Programa fuente

ÆÆ

Análisis léxicoAnálisis léxico

ÆÆ

Análisis sintáctico

Análisis sintáctico

ÆÆ

Análisis semántico

Análisis semántico

ÆÆ

Administrador

Administrador

de la Tabla

de la Tabla

ÆÆ

ÆÆ

Generación de código intermedio

Generación de código intermedio

de símbolos

de símbolos

Gestor de erroresGestor de errores

ÆÆ

Optimización del código intermedio

Optimización del código intermedio

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código intermedio ‰

‰ Esta fase es opcional, pero también es recomendable ‰ Objetivo:

ƒ Realizar una optimización del código intermedio que sea

independiente de la máquina en la que se ejecute el código objeto.

‰ L i i ió bl NP C l

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código intermedio ‰

‰ V.g.: if (divisor != 0.0) dividendo = divisor * cociente + resto ;

‰ Optimización de la representación intermedia en código de tres

direcciones: direcciones: 100. if divisor = 0 goto 104 di i * i 100. if divisor = 0 goto 103 101 t1 divi r * iente 101. t1 := divisor * cociente 102. t2 := t1 + resto 101. t1 := divisor * cociente 102. dividendo := t1 + resto

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ¾

¾ Optimización del código intermedio ¾ Generación de código

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P

f

t

ÆÆ

A áli i lé iA áli i lé i

Programa fuente

ÆÆ

Análisis léxicoAnálisis léxico

ÆÆ

Análisis sintáctico

Análisis sintáctico

ÆÆ

Análisis semántico

Análisis semántico

ÆÆ

Administrador

Administrador

de la Tabla

de la Tabla

ÆÆ

ÆÆ

Generación de código intermedio

Generación de código intermedio

de símbolos

de símbolos

Gestor de erroresGestor de errores

ÆÆ

Optimización del código intermedio

Optimización del código intermedio

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código ‰

‰ Objetivo

ƒ Traducir la representación intermedia a código objeto o ejecutable

(código máquina) (código máquina).

‰ Ejemplo:

S ódi bj bl d

ƒ Se va a generar código objeto en ensamblador

ƒ Las operaciones aritmético – lógicas se han de realizar sobre

registros de máquina: R1 R2 registros de máquina: R1, R2, …

ƒ Las proposiciones condicionales son generadas mediante

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis ¾ Generación de código 100 MOV divisor R1 100. MOV divisor, R1 101. CMP #0, R1 102 JE 108 if (divisor != 0.0) 102. JE 108 103. MOV cociente, R2 U

dividendo = divisor * cociente + resto ;

104. MUL R2, R1 105. MOV resto, R3

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Generación de código intermedio ¾

¾ Optimización del código intermedio ¾ Generación de código

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P

f

t

ÆÆ

A áli i lé iA áli i lé i

Programa fuente

ÆÆ

Análisis léxicoAnálisis léxicoÆÆ

Análisis sintáctico

Análisis sintáctico

A áli i á ti

A áli i á ti

Análisis sintáctico

Análisis sintáctico

ÆÆ

Análisis semántico

Análisis semántico

ÆÆ

G

ió d ódi i t

di

G

ió d ódi i t

di

Administrador

Administrador

de la Tabla

de la Tabla

Gestor de erroresGestor de errores

ÆÆ

Generación de código intermedio

Generación de código intermedio

de símbolos

de símbolos

G

G

Optimización del código intermedio

Optimización del código intermedio

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código ‰

‰ Generar un código más eficiente: ƒ Ejecución más rápida

ƒ Ocupar menos espacio de memoria.

‰La optimización es un problema NP-Completo

‰Optimizar las necesidades de tiempo y memoria de forma conjunta suele

ser bastante complicado o, incluso, imposible.

‰ Tiempo y memoria son dos factores contrapuestos.

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código ‰

‰ Las mejores transformaciones son las que obtienen el mayor beneficio

con el menor esfuerzo

‰ Criterios: ‰ Criterios:

ƒ Se ha de preservar el significado del programa

D b l l d f i bl

ƒ Debe acelerar los programas de forma apreciable ƒ Tiene que merecer la pena

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código ‰

‰ Posibles mejoras del código:

ƒ No evaluación repetida de expresiones comunes ƒ Evitar la propagación de copias

ƒ Supresión de código inactivo o “muerto”: análisis de control de

fl j flujo.

ƒ Optimización de bucles: no evaluación de expresiones constantes

dentro de los bucles dentro de los bucles

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 Sí t i 9 Síntesis

¾ Optimización del código

100. MOV divisor, R1 101. CMP #0, R1 100. MOV divisor, R1 101. CMP #0, R1 102. JE 108 103. MOV cociente, R2 102. JE 108 103. MOV cociente, R2 104. MUL R2, R1 105. MOV resto, R2 104. MUL R2, R1 105. MOV resto, R3

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9 F 9 Fases

¾ Componentes auxiliares ‰

‰ Administrador de la tabla de símbolos ‰ Gestor de errores

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

9C t ili

9Componentes auxiliares

¾ Administrador de la tabla de símbolos ¾

Procesadores de Lenguajes

Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P

f

t

ÆÆ

A áli i lé iA áli i lé i

Programa fuente

ÆÆ

Análisis léxicoAnálisis léxicoÆÆ

Análisis sintáctico

Análisis sintáctico

A áli i á ti

A áli i á ti

Análisis sintáctico

Análisis sintáctico

ÆÆ

Administrador

Administrador

de la Tabla

de la Tabla

Análisis semántico

Análisis semántico

ÆÆ

G

ió d ódi i t

di

G

ió d ódi i t

di

Gestor de erroresGestor de errores

Related documents