compiladores e intérpretes conceptos generaleslc/cei/downloads/clases/clase 1 - conceptos...alto...
TRANSCRIPT
![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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.co/reader034/viewer/2022050717/5e15547c38fdff181a7edec2/html5/thumbnails/51.jpg)
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