51
Compiladores e Int é rpretes Conceptos Generales Sebastian Gottifredi Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2019 1

Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes

Conceptos GeneralesSebastian Gottifredi

Universidad Nacional del Sur

Departamento de Ciencias e Ingeniería de la Computación

2019

1

Page 2: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Administrativa

• Clases Miércoles y Viernes de 16 a 20hs Aula 2 DCIC

• Página web: http://cs.uns.edu.ar/~lc/cei/

• Evaluación: Proyecto (múltiples etapas)

• Para más detalles consultar la información y los documentos

en la página web de la materia

2

Page 3: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Problema: ¿Cómo ejecutamos un programa?

3

prog1

if(id1>10)

var= “hola”;

else

print “chau”;

//fin

Ejecutar!

TEXT:if(id1>10)var=_“hola”;elseprint_“chau”;//fin

Page 4: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Problema: ¿Cómo ejecutamos un programa?

• Dos principales estrategias

4

011010

100110

101010

>chau

Ejecutar!

Traducción de prog1

a código de una

máquina destino

prog1

if(id1>10)

var= “hola”;

else

print “chau”;

//fin

Page 5: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Problema: ¿Cómo ejecutamos un programa?

• Dos principales estrategias

5

011010

100110

101010

>chau

Ejecutar!

Programa actualmente corriendo

en la máquina destino recibe y va

ejecutando prog1

prog1

if(id1>10)

var= “hola”;

else

print “chau”;

//fin >chau

Page 6: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Problema: ¿Cómo ejecutamos un programa?

• Dos principales estrategias

6

011010

100110

101010Compilador

>chau

Intérprete

Ejecutar!prog1

if(id1>10)

var= “hola”;

else

print “chau”;

//fin >chau

Page 7: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2018

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Características de un Compilador

7

Page 8: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Características de un Compilador

• Un Compilador es un software que traduce automáticamente

un programa de un lenguaje fuente a un programa equivalente

de un lenguaje destino.

8

011010

100110

101010

Compilador

Programa

fuente

Usualmente

Alto Nivel

Usualmente

Bajo Nivel

Page 9: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Usualmente

Alto Nivel

Usualmente

Bajo Nivel

Características de un Compilador

• Un Compilador es un software que traduce automáticamente

un programa de un lenguaje fuente a un programa equivalente

de un lenguaje destino.

9

011010

100110

101010

Programa

fuente

Lenguaje Alto Nivel

• Independiente de la

máquina

• Sintaxis compleja

• Semántica compleja

• Anidamiento

• Subprogramas

• Objetos

Compilador

Lenguaje Bajo Nivel

• Específico

• Sintaxis simple

• Semántica simple

• Manejo de Memoria

• Registros

• Alcance simple

Gran brecha entre el fuente

y el destino… ¿Cómo y por

dónde comenzamos?¡Dividir y Conquistar!

Page 10: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de

Análisis

Fases de

Síntesis

Características de un Compilador

• Las tareas del compilador se dividen en fases, las cuales se

agrupan de la siguiente manera:

10

011010

100110

101010

Compilador

Programa

fuente

CompiladorCompilador

Page 11: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de

Análisis

Fases de

Síntesis

Características de un Compilador

• Las tareas del compilador se dividen en fases, las cuales se

agrupan de la siguiente manera:

11

011010

100110

101010

Compilador

Programa

fuente

Compilador

Analizar el

programa fuente

Mapear lo

analizado al

código destino

Page 12: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2018

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

12

Page 13: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

13

Fases de

Análisis

Analizar y recopilar

la información de

la estructura y el

significado del

fuente

Programa

fuente

Page 14: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

14

Fases de

AnálisisConstruir una representación

interna del fuente que capture la

estructura del programa

Árbol Sintáctico Abstracto (AST)

Programa

fuente

Analizar y recopilar

la información de

la estructura y el

significado del

fuente

Page 15: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

15

Fases de

Análisis Nombre tipo

x float

y float

Nombre Retorno Params

m1 void -

Construir una estructura con

toda la información recolectada

de las entidades del programa

Tabla de Símbolos

Analizar y recopilar

la información de

la estructura y el

significado del

fuente

Programa

fuente

Page 16: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

16

Fases de

Análisis…

Verificar la correctitud sintáctica y semántica

del programa; en caso de no ser correcto,

reportar el error con la información

adecuada.

Analizar y recopilar

la información de

la estructura y el

significado del

fuente

Programa

fuenteNombre tipo

x float

y float

Nombre Retorno Params

m1 void -

Programa

fuente

Page 17: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

17

Especificación del

Lenguaje fuente

Fases de

AnálisisEl compilador debe

valerse de la

especificación del

lenguaje fuente - de

sus reglas de

Sintaxis y Semántica

Analizar y recopilar

la información de

la estructura y el

significado del

fuente

Programa

fuenteNombre tipo

x float

y float

Nombre Retorno Params

m1 void -

Programa

fuente

Page 18: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

18

Analizador

Léxico

Analizador

Sintáctico

Analizador

Semántico

Fases de Análisis

¡Dividir y Conquistar!

Page 19: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Análisis

19

Analizador

Léxico

Analizador

Sintáctico

Analizador

Semántico

¡Dividir y Conquistar!

Fases de Análisis

Page 20: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Léxico

• Las reglas de sintaxis están expresadas en términos de los

tipos de palabras válidas (tokens) del lenguaje.

• Estas reglas determinan el orden en que pueden aparecer los

tokens en un programa válido.

• Problema: el programa fuente es una secuencia de

caracteres, no de tokens.

20

//cuenta

var = x * (y +10) ;

//fin cuenta

TEXT://cuentavar˽=˽x˽*˽˽(y˽+10)˽;//fin˽cuenta

Page 21: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Léxico

• Para atacar este problema está la fase de análisis léxico.

• El analizador léxico toma como entrada el fuente y lo transforma en

una secuencia de tokens.

• Para esto irá agrupando caracteres contiguos del fuente que formen tokens.

• Además es el encargado omitir blancos, separadores y comentarios.

21

Analizador

Léxico

//cuentavar˽=˽x˽*˽˽(y˽+10)˽;//fin˽cuenta

Secuencia tokens//cuenta

var = x * (y +10) ;

//fin cuenta

Page 22: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Léxico

• Además, el analizador léxico será el encargado de detectar y

reportar errores léxicos.

• Por ejemplo:

• Identificadores mal formados: 4varible me%todo

• Símbolos inválidos: € ☺ ~

• Comentarios multi-línea no cerrados: /*comentario…

22

Page 23: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Léxico

23

Analizador

Léxico

Secuencia de Tokens

Reporte de Errores

Léxicos

Secuencia de Caracteres Fuente

Page 24: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

• A partir de la secuencia de tokens el compilador debe usar

las reglas de sintaxis de la especificación del lenguaje para:

• Controlar que la secuencia no viola ninguna de las reglas.

• Organizar los tokens en una representación arbórea que refleje la

estructura impuesta por estas reglas.

• Recolectar información de las entidades declaradas.

• El Analizador Sintáctico es el encargado de realizar estas

tareas.

24

Page 25: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

• La implementación del analizador sintáctico se vale de las

teorías de lenguajes formales.

• Las reglas de sintaxis del lenguaje están expresadas en

términos de una gramática libre de contexto.

25

Derivación: partiendo del

símbolo inicial aplicamos

producciones y llegamos a

la cadena

Re

gla

s

Sin

tax

is

<A>::= id = <E> ;

<E>::= id<E>::= intval<E>::= <E> + <E>

<E>::= <E> * <E>

<E>::=(<E>)

Describen cómo generar

las cadenas del lenguaje

Cómo generar los

programas

sintácticamente

validos del lenguaje

Page 26: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

• En esta fase ya tenemos la cadena (secuencia de tokens) y

queremos analizar su pertenencia al lenguaje.

• La estrategia general del analizador sintáctico será simular la

derivación (inteligentemente) buscando llegar a la secuencia

de tokens.

• En caso de no ser posible quiere decir que el programa fuente tiene

un error sintáctico, el cual deberá ser reportado.

26

Page 27: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

• Las derivaciones tienen asociado un árbol de derivación.

• Este árbol refleja cómo se aplicaron las reglas de manera

jerárquica.

• Contiene información redundante o irrelevante para las próximas

fases.

• El analizador sintáctico generará una versión más abstracta de

ese árbol conocida como Árbol Sintáctico Abstracto (AST).

27

Page 28: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

• Usualmente el analizador sintáctico recopila información de

las entidades declaradas.

• Esta información se almacena en la tabla de símbolos:

• Estructura jerárquica de tablas, que respeta los

ambientes de declaración del lenguaje.

• Para cada entidad se almacena información útil para las

siguientes fases (tipo, posición, tamaño, etc.).

28

Page 29: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Sintáctico

29

Analizador

Sintáctico

Árbol Sintáctico Abstracto

Reporte de Errores

Sintácticos

Secuencia

de Tokens

Tabla de Símbolos

Page 30: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Semántico

• En las fases anteriores obtuvimos información y controlamos la

forma del programa fuente.

• Esta fase concierne su significado.

• Intuitivamente, se busca:

• Descubrir cómo son utilizadas las entidades y los valores

del programa, y

• analizar si su uso es correcto.

30

Page 31: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Semántico

• El analizador semántico tiene dos actividades principales:

• Resolución de Nombres: Identificar adecuadamente a qué entidad

declarada hace referencia un identificador utilizado.

Por ejemplo (en un lenguaje al estilo Java):

31

void m1(A x){

w = x.m2() + r;

}

¿Está declarada

la clase A?

¿Es w una variable local? Sino

¿es un parámetro? Sino ¿es

una variable de instancia?¿Es m2 un método de la

clase A o de un ancestro?

Page 32: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Semántico

• El analizador semántico tiene dos actividades principales:

• Chequeo de Tipos: Controlar que cuando un elemento tipado

(variable, función, valor, expresión) es utilizado en un contexto su

tipo sea el adecuado.

Por ejemplo (en un lenguaje al estilo Java):

32

void m1(A x){

w = x.m2() + r;

}¿Puedo operar con + los

tipos de las sub-expresiones

(retorno de m2 y r)?

¿Es compatible el

tipo del resultado del

+ con el tipo de w?

Page 33: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Semántico

• En cada una de estas actividades se pueden detectar errores:

• Cuando en la resolución de nombres no se encuentra una entidad

asociada al identificador analizado.

• Cuando en el chequeo tipos se produce una incompatibilidad de

tipos.

• De manera similar a las fases anteriores, el compilador deberá

reportar los errores semánticos detectados.

33

Page 34: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Análisis Semántico

34

Analizador

Semántico

Árbol Sintáctico Abstracto*

Reporte de Errores

Semánticos

Tabla de Símbolos*

Árbol Sintáctico

Abstracto

Tabla de

Símbolos

Page 35: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2018

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Síntesis

35

Page 36: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de

Síntesis

Fases de Síntesis

36

011010

100110

101010

Árbol Sintáctico

Abstracto*

Tabla de

Símbolos*

Toman la información

recopilada por las

fases de análisis y

traducen a código del

lenguaje destino

Buscan que el

resultado sea un

código eficiente

Page 37: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Síntesis

37

Analizador

Léxico

Analizador

Sintáctico

Analizador

Semántico

Fases de Síntesis

¡Dividir y Conquistar!

Page 38: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Síntesis

38

Generador

de Código

Intermedio

Fases de Síntesis

¡Dividir y Conquistar!

Optimizador

(Código

Intermedio)

Generador

de Código

Destino

Optimizador

(Código

Destino)

Page 39: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Generación de Código Intermedio

• Objetivo: traducir el programa a una representación que sea

útil para las siguientes fases.

• La representación intermedia debe ser tal que:

• Sea fácil de generar a partir del AST y de la Tabla de Símbolos.

• Sea fácil de traducir al lenguaje destino.

• Sea útil para aplicar técnicas de optimización.

39

Page 40: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Generación de Código Intermedio

• En esta fase se traduce a una representación intermedia de

bajo nivel similar al lenguaje destino pero más abstracto.

• Para esto, el generador de código intermedio:

• Genera instrucciones a medida que recorre el AST.

• Utiliza la Tabla de Símbolos para obtener información.

40

Page 41: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Generación de Código Intermedio

41

Generador

de Código

Intermedio

Árbol Sintáctico

Abstracto*

Tabla de

Símbolos*

Código Intermedio

de Bajo Nivel

Tabla de Símbolos*

Page 42: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Optimización de Código Intermedio

• Esta fase reconstruye partes del código intermedio buscando

mejorar su calidad (abstrayéndose de la máquina destino).

• Sin alterar el resultado esperado de la computación.

• En general buscará hacer un código más eficiente, minimizando,

por ejemplo:

• Cantidad de instrucciones.

• Accesos a memoria.

• Uso de temporales.

42

Page 43: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fase de Optimización de Código Intermedio

43

Optimizador

(Código

Intermedio)

Código Intermedio de

Bajo Nivel Mejorado

Tabla de Símbolos*

Código Intermedio

de Bajo Nivel

Tabla de Símbolos*

Page 44: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Síntesis

44

Generador

de Código

Intermedio

Fases de Síntesis

Optimizador

(Código

Intermedio)

Generador

de Código

Destino

Optimizador

(Código

Destino)

Es posible tener varias fases

de generación de código

intermedio y optimización

Page 45: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Generación y Optimización de Código Destino

• En estas fases se traduce la representación intermedia de

bajo nivel del programa fuente a código del lenguaje destino.

• Si elegimos una representación intermedia adecuada, una

estrategia básica de traduccion implicará:

• Tomar una instrucción de la representación intermedia, y

• traducirla a una secuencia de instrucciones del lenguaje destino que

realicen la misma tarea.

• Esta tarea se denomina selección de instrucciones.

45

Page 46: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Fases de Generación y Optimización de Código Destino

• Si el destino es código máquina se asociarán registros y

locaciones de memoria para las variables del programa.

• Optimizaciones sobre el código destino requieren considerar

características de la arquitectura de la máquina destino.

• Por ejemplo: la máquina tiene un número limitado de registros.

• La clave es optimizar el uso de los registros reales, reutilizándolos

cuanto más sea posible.

46

Page 47: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Programa

fuente

Estructura de un Compilador

47

Fases de Análisis

An

ali

zad

or

Léxic

o

An

ali

zad

or

Sin

tácti

co

An

ali

za

do

r

Sem

án

tico

Fases de Síntesis

Gen

. C

ód

igo

Inte

rmed

io

Op

tim

izad

or

Inte

rmed

io

Gen

. C

ód

igo

Desti

no

Op

tim

izad

or

Desti

no 011010

100110

101010

Compilador Estándar

Page 48: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Programa

fuente

Estructura de un Compilador

48

Fases de Análisis

An

ali

zad

or

Léxic

o

An

ali

zad

or

Sin

tácti

co

An

ali

za

do

r

Sem

án

tico

Compilador Estándar

Fases de Síntesis

Gen

. C

ód

igo

Inte

rmed

io

Op

tim

izad

or

Inte

rmed

io

Gen

. C

ód

igo

Desti

no

Op

tim

izad

or

Desti

no 011010

100110

101010

No toda etapa necesita que la/s

anteriores terminen para

realizar su tareaCuanto más “secuenciales” son las etapas

más pasadas tendrá el compilador

En uno no Estándar

algunas etapas pueden

no existir

Page 49: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

¿Por qué estudiamos Compiladores?

• Los compiladores son piezas fundamentales en computación:

preparan el problema para que sea resuelto por una computadora

• Nos permiten tener lenguajes y herramientas de más alto nivel

adecuados a las necesidades de problemáticas más específicas

• Un compilador es un software complejo → Desafío de ingeniería

de software

• Los compiladores son un ejemplo de cómo aplicar técnicas

formales para asegurar resultados en la práctica

49

Page 50: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

¿Por qué estudiamos Compiladores?

• En la actualidad hay muchas herramientas que utilizan conceptos o son prácticamente compiladores, intérpretes o traductores

• Por Ejemplo:

• Web Browser

• Librerías de desarrollo web (JSX en React, GWT, etc.)

• Refactoring de código

• Parseo de datos en formatos específicos (JSON, XML, etc.)

• Procesadores de Lenguajes no estructurados

50

Page 51: Compiladores e Intérpretes Conceptos Generaleslc/cei/downloads/Clases/Clase 1 - Conceptos...Alto Nivel Usualmente Bajo Nivel. Compiladores e Intérpretes 2019 Departamento de Ciencias

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Bibliografía

• A. Aho, M. Lam, R. Sethi, J. Ullman - Compilers: Principles

Techniques and Tools.

• K. Cooper, L. Torczon - Engineering a Compiler

• T. A. Mogensen - Basics of Compiler Design

• M. Scott - Programming Languages Pragmatics

51