SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
Diseño de
Compiladores I
Estructura General de un
Compilador
Diseño de Compiladores I - 2008 Estructura General de un Compilador
2
Estructura General de un Compilador
COMPILADOR
PROGRAMA
FUENTE
SALIDA
Mensajes
de
Error
Diseño de Compiladores I - 2008 Estructura General de un Compilador
3
Un compilador es un programa
que traduce un programa escrito
en lenguaje fuente y produce
otro equivalente escrito en un
lenguaje destino.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
4
Lenguaje Fuente
l Lenguaje de alto nivel. Por ejemplo: C,
Pascal, C++.
l Lenguaje especializado para alguna
disciplina específica dentro de las Ciencias
de la Computación.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
5
Salida
l Código Assembler. Deberá ser ensamblado y
vinculado.
l Código Binario. Deberá ser vinculado con las
librerías correspondientes para obtener el
código ejecutable.
l Código de Máquina. Escrito en las
instrucciones de máquina de la computadora
en la que se ejecutará.
l Otro lenguaje de alto nivel.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
6
Fases de la Compilación
Tabla
de
Símbolos
Errores
Salida
Análisis
Léxico
Análisis
Sintáctico
Análisis
Semántico
Optimización
Generación de
Código Intermedio
Generación de
Código Destino
Programa Fuente
Diseño de Compiladores I - 2008 Estructura General de un Compilador
7
Front End (Análisis)
Fases que dependen del lenguaje fuente
l Análisis Léxico
l Análisis Sintáctico
l Análisis Semántico (Estático)
l Creación de la Tabla de Símbolos
l Generación de Código Intermedio
l Algo de Optimización
l Manejo de errores correspondiente a las fases del
Front End
Diseño de Compiladores I - 2008 Estructura General de un Compilador
8
Back End (Síntesis)
Fases que dependen de la máquina destino
l Generación de la salida
l Optimización
l Manejo de errores correspondiente a las fases del
Back End
l Operaciones sobre la Tabla de Símbolos
Diseño de Compiladores I - 2008 Estructura General de un Compilador
9
Fases de la Compilación
Tabla
de
Símbolos
Errores
Salida
Análisis
Léxico
Análisis
Sintáctico
Análisis
Semántico
Optimización
Generación de
Código Intermedio
Generación de
Código Destino
Programa Fuente
Diseño de Compiladores I - 2008 Estructura General de un Compilador
10
Fases de la Compilación
Tabla
de
Símbolos
Errores
Salida
Análisis
Léxico
Análisis
Sintáctico
Análisis
Semántico
Optimización
Generación de
Código Intermedio
Generación de
Código Destino
Programa Fuente
Diseño de Compiladores I - 2008 Estructura General de un Compilador
11
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Diseño de Compiladores I - 2008 Estructura General de un Compilador
12
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
*
Diseño de Compiladores I - 2008 Estructura General de un Compilador
13
Fases de la Compilación
Suele haber preprocesadores para:
l Eliminar comentarios
l Incluir archivos
l Expandir macros
l Efectuar compilación condicional
l Reemplazar constantes simbólicas
Diseño de Compiladores I - 2008 Estructura General de un Compilador
14
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
*
Diseño de Compiladores I - 2008 Estructura General de un Compilador
15
Análisis Léxico
l Lee el programa fuente.
l Remueve espacios en blanco, tabulaciones,
saltos de línea.
l Remueve comentarios.
l Agrupa los caracteres en unidades llamadas
tokens.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
16
Análisis Léxico
Un token es una secuencia de caracteres
que forman una unidad significativa
Diseño de Compiladores I - 2008 Estructura General de un Compilador
17
Análisis Léxico
La interacción entre el Análisis Léxico y el Análisis
Sintáctico puede ocurrir de distintas formas:
l Ambas actividades se ejecutan en modo batch.
l Ambas actividades son concurrentes.
l Ambas actividades son rutinas del Generador de
Código.
l El Análisis Léxico es una rutina del Análisis Sintáctico.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
18
Análisis Léxico
Ejemplo
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
Diseño de Compiladores I - 2008 Estructura General de un Compilador
19
Análisis Léxico
Ejemplo
[if] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
20
Análisis Léxico
Tokens
l Palabras reservadas.
l Ejemplos: IF, THEN, ELSE
l Operadores
l Ejemplos: ‘+’, ‘>=‘, ‘:=‘
l Cadenas de múltiples caracteres
l Ejemplos: Identificador, Constante
Diseño de Compiladores I - 2008 Estructura General de un Compilador
21
Análisis Léxico
Tokens
l Los tokens se diferencian de la cadena de
caracteres que representan.
l La cadena de caracteres es el Lexema o
valor léxico.
l Existen tokens que se corresponden con un único
lexema
l Ejemplo: Palabra Reservada IF
l Existen tokens que pueden representar lexemas
diferentes
l Ejemplo: Identificador Plazo, Identificador Tasa
Diseño de Compiladores I - 2008 Estructura General de un Compilador
22
Análisis Léxico
l El Análisis Léxico hace una correspondencia
entre cada token y un número entero.
l El Análisis Léxico entrega al Análisis
Sintáctico los tokens.
l Cuando un token puede corresponder a más
de un lexema, el Análisis Léxico entrega al
Análisis Sintáctico el par token-atributo.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
23
Análisis Léxico
73
/
85
:=
80
>=
70
+
61
ELSE
60
THEN
59
IF
28
CTE
27
ID
Identificación
del token
Token
Diseño de Compiladores I - 2008 Estructura General de un Compilador
24
Análisis Léxico
Ejemplo
[if] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
25
Análisis Léxico
Ejemplo
[59] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
26
Análisis Léxico
Ejemplo
[59] [27] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
27
Análisis Léxico
Ejemplo
[59] [27] [80] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
28
Análisis Léxico
Ejemplo
[59] [27] [80] [28]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
29
Análisis Léxico
Ejemplo
[59] [27] [80] [28]
[60] [27] [85] [27] [70] [27] [73] [28]
[61] [27] [85] [27]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
30
Análisis Léxico
Ejemplo
[59] [27, ‘Plazo’] [80] [28, ‘30’]
[60] [27, ‘Tasa’] [85] [27, ‘Base’] [70] [27,’Recargo’] [73] [28, ‘100’]
[61] [27,’Tasa’] [85] [27,‘Base’]
Diseño de Compiladores I - 2008 Estructura General de un Compilador
31
Análisis Léxico
Ejemplo
[59] [27] [80] [28] [60] [27] [85] [27] [70] [27]
[73] [28] [61] [27] [85] [27]
IF ID >= CTE THEN ID := ID + ID / CTE ELSE
ID := ID
Diseño de Compiladores I - 2008 Estructura General de un Compilador
32
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
33
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
*
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
34
Análisis Sintáctico
Agrupa los tokens del programa
fuente en frases gramaticales
que el compilador usará en las
siguientes etapas.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
35
Análisis Sintáctico
Los tokens son símbolos terminales en la
gramática que describe al lenguaje fuente
Diseño de Compiladores I - 2008 Estructura General de un Compilador
36
Análisis Sintáctico
l La estructura jerárquica de un programa es
representada por reglas que constituyen una
gramática.
l Las reglas se representan por medio de
producciones.
l Cada producción define un símbolo no terminal en
función de símbolos terminales o tokens, y otros
símbolos no terminales.
l Existe una producción que define al no terminal
programa.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
37
Análisis Sintáctico
Gramática
…
5. <sent> → <sel>
6. <sent> → <asig>
7. <sel> → IF <cond> THEN <sent> ELSE <sent>
8. <cond> → <exp> <comp> <exp>
9. <comp> → < | > | <= | >= | == | <>
10. <asig> → ID := <exp>
11. <exp> → <exp> + <term>
12. <exp> → <exp> - <term>
13. <exp> → <term>
14. <term> → <term> ∗ <fact>
15. <term> → <term> / <fact>
16. <term> → <fact>
17. <fact> → ID
18. <fact> → CTE
…
Diseño de Compiladores I - 2008 Estructura General de un Compilador
38
Análisis Sintáctico
l Usualmente, la estructura gramatical que el
Análisis Sintáctico detecta en el código
fuente es representada por un árbol de
parsing.
l El árbol de parsing demuestra como la
secuencia de tokens de entrada puede ser
derivada a partir de las reglas de una
gramática.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
39
Análisis Sintáctico
Árbol de Parsing
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
ID CTE
+ /
:= ID ID
fact fact
fact
expr
term
term
asig
(17) (17)
(16)
(10) (11)
(15)
(18)
term
(16)
expr
(13)
Lista de reglas: 17 16 13 17 16 18 15 11 10
Diseño de Compiladores I - 2008 Estructura General de un Compilador
40
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Lista de
reglas
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
41
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Lista de
reglas
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
42
Lista de
Reglas
Generación de Código
Código
Assembler
Árbol
Sintáctico
Tercetos
Polaca
Inversa
Cuartetos
A
B
C
D
E
F
G
H
I
J
K
L
Caminos posibles: Camino 1: A
Camino 2: D, I
Camino 3: E, L
Camino 4: C, J
Camino 5: B, K
Camino 6: D, F, K
Camino 7: D, G, J
Camino 8: D, H, L
Diseño de Compiladores I - 2008 Estructura General de un Compilador
43
Generación de Código
Árbol Sintáctico
Es una representación comprimida del Árbol de Parsing.
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
ID
ID CTE
:=
ID
+
/
Diseño de Compiladores I - 2008 Estructura General de un Compilador
44
Análisis Semántico
l Analiza el significado del programa.
l Chequea reglas que no pueden ser
capturadas por la gramática, pero que
pueden ser verificadas en tiempo de
compilación. Estas reglas corresponden a la
semántica estática del lenguaje.
l Ejemplos:
l Chequeo de tipos en expresiones aritméticas.
l Chequeo de tipo y número de parámetros en la
llamada a una rutina.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
45
Análisis Semántico
Ejemplo
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
ID
ID
CTE
:=
ID
+
ItoF
/
Diseño de Compiladores I - 2008 Estructura General de un Compilador
46
Código Intermedio
l Representación del código fuente como un
programa escrito para ser ejecutado en una
máquina abstracta.
l Posibles representaciones intermedias:
l Tercetos
l Cuartetos
l Polaca Inversa
Diseño de Compiladores I - 2008 Estructura General de un Compilador
47
Código Intermedio
Ejemplo
14. …
15. (ItoF, 100, -)
16. (/, Recargo, [15])
17. (+, Base, [16])
18. (:=, Tasa, [17])
19. …
Árbol Sintáctico Tercetos
ID
ID
CTE
:=
ID
+
ItoF
/
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
Diseño de Compiladores I - 2008 Estructura General de un Compilador
48
Optimización
l Transforma la representación actual del código en
una nueva versión que logra el mismo resultado
más eficientemente.
l Pueden aplicarse optimizaciones en diferentes
etapas de la compilación:
l durante la creación de la representación intermedia,
l durante la transformación de una representación
intermedia en otra,
l durante la traducción del código intermedio a la salida,
l luego de generar la salida,
l e incluso durante la linkedición o la ejecución.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
49
Optimización
Ejemplo
14. …
15. (ItoF, 100, -)
16. (/, Recargo, [15])
17. (+, Base, [16])
18. (:=, Tasa, [17])
19. …
14. …
15. (/, Recargo, 100.0)
16. (+, Base, [15])
17. (:=, Tasa, [16])
18. …
Tercetos Tercetos Optimizados
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
Diseño de Compiladores I - 2008 Estructura General de un Compilador
50
Generación de Código
propiamente dicho
l Se traduce la representación intermedia del
programa fuente en el código nativo de la
máquina destino.
l El código generado efectuará el chequeo de
las reglas de semántica dinámica del
lenguaje, que no pudieron ser verificadas
durante la compilación.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
51
Generación de Código Assembler
Ejemplo
…
FLD, Recargo
FLD, Cte1
FDIV
FLD, Base
FADD
FSTP, Tasa
…
Tercetos Optimizados Código Assembler
14. …
15. (/, Recargo, 100.0)
16. (+, Base, [15])
17. (:=, Tasa, [16])
18. …
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
Diseño de Compiladores I - 2008 Estructura General de un Compilador
52
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Lista de
reglas
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
53
Tabla de Símbolos
Es una estructura de datos que contiene un registro
para cada identificador utilizado en el código fuente,
con campos que contienen información relevante
para cada símbolo (atributos).
Diseño de Compiladores I - 2008 Estructura General de un Compilador
54
Tabla de Símbolos
l Cuando el Análisis Léxico detecta un token de
tipo identificador, lo ingresa en la Tabla de
Símbolos.
l Durante la Generación de Código se ingresa
información para los atributos de los símbolos, y
se usa esa información de diversas maneras.
l Durante la Generación de Código puede ser
necesario incorporar nuevas entradas a la Tabla
de Símbolos.
Diseño de Compiladores I - 2008 Estructura General de un Compilador
55
Fases de la Compilación
Programa
Fuente
Salida
Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Tabla
de
Símbolos
Errores
Lista de
reglas
Tira de
tokens
Diseño de Compiladores I - 2008 Estructura General de un Compilador
56
Manejo de Errores
l Cada una de las etapas del
Compilador puede detectar errores
que son informados al programador.
l Un buen compilador no debería
terminar su ejecución al detectar un
error, sino que debería recuperarse y
continuar con la compilación.

Más contenido relacionado

Similar a compilador.pdf

Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014joshram
 
Elementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivelElementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivelRicardo Axel
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos cJuan Torres
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfFtimaAF
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Alex Toapanta
 
Sesión1 Algoritmia Básica.ppt
Sesión1 Algoritmia Básica.pptSesión1 Algoritmia Básica.ppt
Sesión1 Algoritmia Básica.pptsamirvidal1
 
TALLER ANÁLISIS SINTÁCTICO
TALLER ANÁLISIS SINTÁCTICOTALLER ANÁLISIS SINTÁCTICO
TALLER ANÁLISIS SINTÁCTICOJOSSELINEMARIBEL
 
Introduccion a c++
Introduccion a c++Introduccion a c++
Introduccion a c++guestab91474
 
Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)genesis peña
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe finalPriscila Morocho
 
Lenguajes De Programacion C nivel1-unidad2
Lenguajes De Programacion C nivel1-unidad2Lenguajes De Programacion C nivel1-unidad2
Lenguajes De Programacion C nivel1-unidad2charnisch
 
Operaciones Básicas
Operaciones BásicasOperaciones Básicas
Operaciones Básicaschembe
 
Unidad2
Unidad2Unidad2
Unidad2JHONNY
 
Operaciones Básicas
Operaciones BásicasOperaciones Básicas
Operaciones Básicaschembe
 

Similar a compilador.pdf (20)

01 alp u3
01 alp u301 alp u3
01 alp u3
 
Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014
 
Elementosbasicosc
Elementosbasicosc Elementosbasicosc
Elementosbasicosc
 
Elementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivelElementos básicos de un lenguaje de alto nivel
Elementos básicos de un lenguaje de alto nivel
 
Turbo c
Turbo cTurbo c
Turbo c
 
Introduccion Lenguaje C Blanca
Introduccion Lenguaje  C BlancaIntroduccion Lenguaje  C Blanca
Introduccion Lenguaje C Blanca
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdf
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)
 
Sesión1 Algoritmia Básica.ppt
Sesión1 Algoritmia Básica.pptSesión1 Algoritmia Básica.ppt
Sesión1 Algoritmia Básica.ppt
 
TALLER ANÁLISIS SINTÁCTICO
TALLER ANÁLISIS SINTÁCTICOTALLER ANÁLISIS SINTÁCTICO
TALLER ANÁLISIS SINTÁCTICO
 
Introduccion a c++
Introduccion a c++Introduccion a c++
Introduccion a c++
 
Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)Nuevo presentación de microsoft power point (2)
Nuevo presentación de microsoft power point (2)
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe final
 
Programazion
ProgramazionProgramazion
Programazion
 
Lenguajes De Programacion C nivel1-unidad2
Lenguajes De Programacion C nivel1-unidad2Lenguajes De Programacion C nivel1-unidad2
Lenguajes De Programacion C nivel1-unidad2
 
Operaciones Básicas
Operaciones BásicasOperaciones Básicas
Operaciones Básicas
 
Unidad2
Unidad2Unidad2
Unidad2
 
Operaciones Básicas
Operaciones BásicasOperaciones Básicas
Operaciones Básicas
 

Último

Especificación casos de uso del negocio
Especificación  casos de uso del negocioEspecificación  casos de uso del negocio
Especificación casos de uso del negocioMagemyl Egana
 
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...juanforero141
 
Modelado de Casos de uso del negocio
Modelado de  Casos  de  uso  del negocioModelado de  Casos  de  uso  del negocio
Modelado de Casos de uso del negocioMagemyl Egana
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfUPSE
 
El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)Samuel Solís Fuentes
 
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxUPSE
 
contabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superiorcontabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superiorDalia Rodriguez
 
Tipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdfTipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdfCarlosSanchez452245
 

Último (8)

Especificación casos de uso del negocio
Especificación  casos de uso del negocioEspecificación  casos de uso del negocio
Especificación casos de uso del negocio
 
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
 
Modelado de Casos de uso del negocio
Modelado de  Casos  de  uso  del negocioModelado de  Casos  de  uso  del negocio
Modelado de Casos de uso del negocio
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
 
El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)
 
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
 
contabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superiorcontabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superior
 
Tipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdfTipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdf
 

compilador.pdf

  • 1. Diseño de Compiladores I Estructura General de un Compilador
  • 2. Diseño de Compiladores I - 2008 Estructura General de un Compilador 2 Estructura General de un Compilador COMPILADOR PROGRAMA FUENTE SALIDA Mensajes de Error
  • 3. Diseño de Compiladores I - 2008 Estructura General de un Compilador 3 Un compilador es un programa que traduce un programa escrito en lenguaje fuente y produce otro equivalente escrito en un lenguaje destino.
  • 4. Diseño de Compiladores I - 2008 Estructura General de un Compilador 4 Lenguaje Fuente l Lenguaje de alto nivel. Por ejemplo: C, Pascal, C++. l Lenguaje especializado para alguna disciplina específica dentro de las Ciencias de la Computación.
  • 5. Diseño de Compiladores I - 2008 Estructura General de un Compilador 5 Salida l Código Assembler. Deberá ser ensamblado y vinculado. l Código Binario. Deberá ser vinculado con las librerías correspondientes para obtener el código ejecutable. l Código de Máquina. Escrito en las instrucciones de máquina de la computadora en la que se ejecutará. l Otro lenguaje de alto nivel.
  • 6. Diseño de Compiladores I - 2008 Estructura General de un Compilador 6 Fases de la Compilación Tabla de Símbolos Errores Salida Análisis Léxico Análisis Sintáctico Análisis Semántico Optimización Generación de Código Intermedio Generación de Código Destino Programa Fuente
  • 7. Diseño de Compiladores I - 2008 Estructura General de un Compilador 7 Front End (Análisis) Fases que dependen del lenguaje fuente l Análisis Léxico l Análisis Sintáctico l Análisis Semántico (Estático) l Creación de la Tabla de Símbolos l Generación de Código Intermedio l Algo de Optimización l Manejo de errores correspondiente a las fases del Front End
  • 8. Diseño de Compiladores I - 2008 Estructura General de un Compilador 8 Back End (Síntesis) Fases que dependen de la máquina destino l Generación de la salida l Optimización l Manejo de errores correspondiente a las fases del Back End l Operaciones sobre la Tabla de Símbolos
  • 9. Diseño de Compiladores I - 2008 Estructura General de un Compilador 9 Fases de la Compilación Tabla de Símbolos Errores Salida Análisis Léxico Análisis Sintáctico Análisis Semántico Optimización Generación de Código Intermedio Generación de Código Destino Programa Fuente
  • 10. Diseño de Compiladores I - 2008 Estructura General de un Compilador 10 Fases de la Compilación Tabla de Símbolos Errores Salida Análisis Léxico Análisis Sintáctico Análisis Semántico Optimización Generación de Código Intermedio Generación de Código Destino Programa Fuente
  • 11. Diseño de Compiladores I - 2008 Estructura General de un Compilador 11 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores
  • 12. Diseño de Compiladores I - 2008 Estructura General de un Compilador 12 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores *
  • 13. Diseño de Compiladores I - 2008 Estructura General de un Compilador 13 Fases de la Compilación Suele haber preprocesadores para: l Eliminar comentarios l Incluir archivos l Expandir macros l Efectuar compilación condicional l Reemplazar constantes simbólicas
  • 14. Diseño de Compiladores I - 2008 Estructura General de un Compilador 14 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores *
  • 15. Diseño de Compiladores I - 2008 Estructura General de un Compilador 15 Análisis Léxico l Lee el programa fuente. l Remueve espacios en blanco, tabulaciones, saltos de línea. l Remueve comentarios. l Agrupa los caracteres en unidades llamadas tokens.
  • 16. Diseño de Compiladores I - 2008 Estructura General de un Compilador 16 Análisis Léxico Un token es una secuencia de caracteres que forman una unidad significativa
  • 17. Diseño de Compiladores I - 2008 Estructura General de un Compilador 17 Análisis Léxico La interacción entre el Análisis Léxico y el Análisis Sintáctico puede ocurrir de distintas formas: l Ambas actividades se ejecutan en modo batch. l Ambas actividades son concurrentes. l Ambas actividades son rutinas del Generador de Código. l El Análisis Léxico es una rutina del Análisis Sintáctico.
  • 18. Diseño de Compiladores I - 2008 Estructura General de un Compilador 18 Análisis Léxico Ejemplo if Plazo >= 30 then Tasa := Base + Recargo / 100 else Tasa := Base
  • 19. Diseño de Compiladores I - 2008 Estructura General de un Compilador 19 Análisis Léxico Ejemplo [if] [Plazo] [>=] [30] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 20. Diseño de Compiladores I - 2008 Estructura General de un Compilador 20 Análisis Léxico Tokens l Palabras reservadas. l Ejemplos: IF, THEN, ELSE l Operadores l Ejemplos: ‘+’, ‘>=‘, ‘:=‘ l Cadenas de múltiples caracteres l Ejemplos: Identificador, Constante
  • 21. Diseño de Compiladores I - 2008 Estructura General de un Compilador 21 Análisis Léxico Tokens l Los tokens se diferencian de la cadena de caracteres que representan. l La cadena de caracteres es el Lexema o valor léxico. l Existen tokens que se corresponden con un único lexema l Ejemplo: Palabra Reservada IF l Existen tokens que pueden representar lexemas diferentes l Ejemplo: Identificador Plazo, Identificador Tasa
  • 22. Diseño de Compiladores I - 2008 Estructura General de un Compilador 22 Análisis Léxico l El Análisis Léxico hace una correspondencia entre cada token y un número entero. l El Análisis Léxico entrega al Análisis Sintáctico los tokens. l Cuando un token puede corresponder a más de un lexema, el Análisis Léxico entrega al Análisis Sintáctico el par token-atributo.
  • 23. Diseño de Compiladores I - 2008 Estructura General de un Compilador 23 Análisis Léxico 73 / 85 := 80 >= 70 + 61 ELSE 60 THEN 59 IF 28 CTE 27 ID Identificación del token Token
  • 24. Diseño de Compiladores I - 2008 Estructura General de un Compilador 24 Análisis Léxico Ejemplo [if] [Plazo] [>=] [30] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 25. Diseño de Compiladores I - 2008 Estructura General de un Compilador 25 Análisis Léxico Ejemplo [59] [Plazo] [>=] [30] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 26. Diseño de Compiladores I - 2008 Estructura General de un Compilador 26 Análisis Léxico Ejemplo [59] [27] [>=] [30] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 27. Diseño de Compiladores I - 2008 Estructura General de un Compilador 27 Análisis Léxico Ejemplo [59] [27] [80] [30] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 28. Diseño de Compiladores I - 2008 Estructura General de un Compilador 28 Análisis Léxico Ejemplo [59] [27] [80] [28] [then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
  • 29. Diseño de Compiladores I - 2008 Estructura General de un Compilador 29 Análisis Léxico Ejemplo [59] [27] [80] [28] [60] [27] [85] [27] [70] [27] [73] [28] [61] [27] [85] [27]
  • 30. Diseño de Compiladores I - 2008 Estructura General de un Compilador 30 Análisis Léxico Ejemplo [59] [27, ‘Plazo’] [80] [28, ‘30’] [60] [27, ‘Tasa’] [85] [27, ‘Base’] [70] [27,’Recargo’] [73] [28, ‘100’] [61] [27,’Tasa’] [85] [27,‘Base’]
  • 31. Diseño de Compiladores I - 2008 Estructura General de un Compilador 31 Análisis Léxico Ejemplo [59] [27] [80] [28] [60] [27] [85] [27] [70] [27] [73] [28] [61] [27] [85] [27] IF ID >= CTE THEN ID := ID + ID / CTE ELSE ID := ID
  • 32. Diseño de Compiladores I - 2008 Estructura General de un Compilador 32 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores Tira de tokens
  • 33. Diseño de Compiladores I - 2008 Estructura General de un Compilador 33 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores * Tira de tokens
  • 34. Diseño de Compiladores I - 2008 Estructura General de un Compilador 34 Análisis Sintáctico Agrupa los tokens del programa fuente en frases gramaticales que el compilador usará en las siguientes etapas.
  • 35. Diseño de Compiladores I - 2008 Estructura General de un Compilador 35 Análisis Sintáctico Los tokens son símbolos terminales en la gramática que describe al lenguaje fuente
  • 36. Diseño de Compiladores I - 2008 Estructura General de un Compilador 36 Análisis Sintáctico l La estructura jerárquica de un programa es representada por reglas que constituyen una gramática. l Las reglas se representan por medio de producciones. l Cada producción define un símbolo no terminal en función de símbolos terminales o tokens, y otros símbolos no terminales. l Existe una producción que define al no terminal programa.
  • 37. Diseño de Compiladores I - 2008 Estructura General de un Compilador 37 Análisis Sintáctico Gramática … 5. <sent> → <sel> 6. <sent> → <asig> 7. <sel> → IF <cond> THEN <sent> ELSE <sent> 8. <cond> → <exp> <comp> <exp> 9. <comp> → < | > | <= | >= | == | <> 10. <asig> → ID := <exp> 11. <exp> → <exp> + <term> 12. <exp> → <exp> - <term> 13. <exp> → <term> 14. <term> → <term> ∗ <fact> 15. <term> → <term> / <fact> 16. <term> → <fact> 17. <fact> → ID 18. <fact> → CTE …
  • 38. Diseño de Compiladores I - 2008 Estructura General de un Compilador 38 Análisis Sintáctico l Usualmente, la estructura gramatical que el Análisis Sintáctico detecta en el código fuente es representada por un árbol de parsing. l El árbol de parsing demuestra como la secuencia de tokens de entrada puede ser derivada a partir de las reglas de una gramática.
  • 39. Diseño de Compiladores I - 2008 Estructura General de un Compilador 39 Análisis Sintáctico Árbol de Parsing Tasa := Base + Recargo / 100 → ID := ID + ID / CTE ID CTE + / := ID ID fact fact fact expr term term asig (17) (17) (16) (10) (11) (15) (18) term (16) expr (13) Lista de reglas: 17 16 13 17 16 18 15 11 10
  • 40. Diseño de Compiladores I - 2008 Estructura General de un Compilador 40 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores Lista de reglas Tira de tokens
  • 41. Diseño de Compiladores I - 2008 Estructura General de un Compilador 41 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores Lista de reglas Tira de tokens
  • 42. Diseño de Compiladores I - 2008 Estructura General de un Compilador 42 Lista de Reglas Generación de Código Código Assembler Árbol Sintáctico Tercetos Polaca Inversa Cuartetos A B C D E F G H I J K L Caminos posibles: Camino 1: A Camino 2: D, I Camino 3: E, L Camino 4: C, J Camino 5: B, K Camino 6: D, F, K Camino 7: D, G, J Camino 8: D, H, L
  • 43. Diseño de Compiladores I - 2008 Estructura General de un Compilador 43 Generación de Código Árbol Sintáctico Es una representación comprimida del Árbol de Parsing. Tasa := Base + Recargo / 100 → ID := ID + ID / CTE ID ID CTE := ID + /
  • 44. Diseño de Compiladores I - 2008 Estructura General de un Compilador 44 Análisis Semántico l Analiza el significado del programa. l Chequea reglas que no pueden ser capturadas por la gramática, pero que pueden ser verificadas en tiempo de compilación. Estas reglas corresponden a la semántica estática del lenguaje. l Ejemplos: l Chequeo de tipos en expresiones aritméticas. l Chequeo de tipo y número de parámetros en la llamada a una rutina.
  • 45. Diseño de Compiladores I - 2008 Estructura General de un Compilador 45 Análisis Semántico Ejemplo Tasa := Base + Recargo / 100 → ID := ID + ID / CTE ID ID CTE := ID + ItoF /
  • 46. Diseño de Compiladores I - 2008 Estructura General de un Compilador 46 Código Intermedio l Representación del código fuente como un programa escrito para ser ejecutado en una máquina abstracta. l Posibles representaciones intermedias: l Tercetos l Cuartetos l Polaca Inversa
  • 47. Diseño de Compiladores I - 2008 Estructura General de un Compilador 47 Código Intermedio Ejemplo 14. … 15. (ItoF, 100, -) 16. (/, Recargo, [15]) 17. (+, Base, [16]) 18. (:=, Tasa, [17]) 19. … Árbol Sintáctico Tercetos ID ID CTE := ID + ItoF / Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
  • 48. Diseño de Compiladores I - 2008 Estructura General de un Compilador 48 Optimización l Transforma la representación actual del código en una nueva versión que logra el mismo resultado más eficientemente. l Pueden aplicarse optimizaciones en diferentes etapas de la compilación: l durante la creación de la representación intermedia, l durante la transformación de una representación intermedia en otra, l durante la traducción del código intermedio a la salida, l luego de generar la salida, l e incluso durante la linkedición o la ejecución.
  • 49. Diseño de Compiladores I - 2008 Estructura General de un Compilador 49 Optimización Ejemplo 14. … 15. (ItoF, 100, -) 16. (/, Recargo, [15]) 17. (+, Base, [16]) 18. (:=, Tasa, [17]) 19. … 14. … 15. (/, Recargo, 100.0) 16. (+, Base, [15]) 17. (:=, Tasa, [16]) 18. … Tercetos Tercetos Optimizados Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
  • 50. Diseño de Compiladores I - 2008 Estructura General de un Compilador 50 Generación de Código propiamente dicho l Se traduce la representación intermedia del programa fuente en el código nativo de la máquina destino. l El código generado efectuará el chequeo de las reglas de semántica dinámica del lenguaje, que no pudieron ser verificadas durante la compilación.
  • 51. Diseño de Compiladores I - 2008 Estructura General de un Compilador 51 Generación de Código Assembler Ejemplo … FLD, Recargo FLD, Cte1 FDIV FLD, Base FADD FSTP, Tasa … Tercetos Optimizados Código Assembler 14. … 15. (/, Recargo, 100.0) 16. (+, Base, [15]) 17. (:=, Tasa, [16]) 18. … Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
  • 52. Diseño de Compiladores I - 2008 Estructura General de un Compilador 52 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores Lista de reglas Tira de tokens
  • 53. Diseño de Compiladores I - 2008 Estructura General de un Compilador 53 Tabla de Símbolos Es una estructura de datos que contiene un registro para cada identificador utilizado en el código fuente, con campos que contienen información relevante para cada símbolo (atributos).
  • 54. Diseño de Compiladores I - 2008 Estructura General de un Compilador 54 Tabla de Símbolos l Cuando el Análisis Léxico detecta un token de tipo identificador, lo ingresa en la Tabla de Símbolos. l Durante la Generación de Código se ingresa información para los atributos de los símbolos, y se usa esa información de diversas maneras. l Durante la Generación de Código puede ser necesario incorporar nuevas entradas a la Tabla de Símbolos.
  • 55. Diseño de Compiladores I - 2008 Estructura General de un Compilador 55 Fases de la Compilación Programa Fuente Salida Análisis Léxico Análisis Sintáctico Generación de Código Tabla de Símbolos Errores Lista de reglas Tira de tokens
  • 56. Diseño de Compiladores I - 2008 Estructura General de un Compilador 56 Manejo de Errores l Cada una de las etapas del Compilador puede detectar errores que son informados al programador. l Un buen compilador no debería terminar su ejecución al detectar un error, sino que debería recuperarse y continuar con la compilación.