Diseño de Compiladores I Instrucciones de Pentium Diseño de Compiladores I Cursada 2009.
Diseño de Compiladores I - UNICEN
Transcript of Diseño de Compiladores I - UNICEN
![Page 1: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/1.jpg)
Diseño de Compiladores I
Estructura General de un Compilador
![Page 2: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/2.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador2
Estructura General de un Compilador
COMPILADORPROGRAMAFUENTE
SALIDA
Mensajes de
Error
![Page 3: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/3.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador3
Un compilador es un programa que traduce un programa escrito en lenguaje fuente y produce otro equivalente escrito en un lenguaje destino.
![Page 4: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/4.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador4
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.
![Page 5: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/5.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador5
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.
![Page 6: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/6.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador6
Fases de la Compilación
Tablade
SímbolosErrores
Salida
AnálisisLéxico
AnálisisSintáctico
AnálisisSemántico
Optimización
Generación de Código Intermedio
Generación de Código Destino
Programa Fuente
![Page 7: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/7.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador7
Front End (Análisis)
Fases que dependen del lenguaje fuente l Análisis Léxicol Análisis Sintácticol Análisis Semántico (Estático)l Creación de la Tabla de Símbolosl Generación de Código Intermediol Algo de Optimizaciónl Manejo de errores correspondiente a las fases del
Front End
![Page 8: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/8.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador8
Back End (Síntesis)
Fases que dependen de la máquina destinol Generación de la salidal Optimizaciónl Manejo de errores correspondiente a las fases del
Back Endl Operaciones sobre la Tabla de Símbolos
![Page 9: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/9.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador9
Fases de la Compilación
Tablade
SímbolosErrores
Salida
AnálisisLéxico
AnálisisSintáctico
AnálisisSemántico
Optimización
Generación de Código Intermedio
Generación de Código Destino
Programa Fuente
![Page 10: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/10.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador10
Fases de la Compilación
Tablade
SímbolosErrores
Salida
AnálisisLéxico
AnálisisSintáctico
AnálisisSemántico
Optimización
Generación de Código Intermedio
Generación de Código Destino
Programa Fuente
![Page 11: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/11.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador11
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
![Page 12: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/12.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador12
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
*
![Page 13: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/13.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador13
Fases de la Compilación
Suele haber preprocesadores para:l Eliminar comentariosl Incluir archivosl Expandir macrosl Efectuar compilación condicionall Reemplazar constantes simbólicas
![Page 14: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/14.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador14
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
*
![Page 15: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/15.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador15
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.
![Page 16: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/16.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador16
Análisis Léxico
Un token es una secuencia de caracteres que forman una unidad significativa
![Page 17: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/17.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador17
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.
![Page 18: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/18.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador18
Análisis LéxicoEjemplo
if Plazo >= 30 then Tasa := Base + Recargo / 100else Tasa := Base
![Page 19: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/19.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador19
Análisis LéxicoEjemplo
[if] [Plazo] [>=] [30][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:=] [Base]
![Page 20: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/20.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador20
Análisis LéxicoTokens
l Palabras reservadas.l Ejemplos: IF, THEN, ELSE
l Operadoresl Ejemplos: ‘+’, ‘>=‘, ‘:=‘
l Cadenas de múltiples caracteresl Ejemplos: Identificador, Constante
![Page 21: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/21.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador21
Análisis LéxicoTokens
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
lexemal Ejemplo: Palabra Reservada IF
l Existen tokens que pueden representar lexemas diferentesl Ejemplo: Identificador Plazo, Identificador Tasa
![Page 22: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/22.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador22
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.
![Page 23: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/23.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador23
Análisis Léxico
73/
85:=
80>=
70+
61ELSE
60THEN
59IF
28CTE
27ID
Identificación del token
Token
![Page 24: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/24.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador24
Análisis LéxicoEjemplo
[if] [Plazo] [>=] [30][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100][else] [Tasa] [:=] [Base]
![Page 25: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/25.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador25
Análisis LéxicoEjemplo
[59] [Plazo] [>=] [30][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100][else] [Tasa] [:=] [Base]
![Page 26: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/26.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador26
Análisis LéxicoEjemplo
[59] [27] [>=] [30][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100][else] [Tasa] [:=] [Base]
![Page 27: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/27.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador27
Análisis LéxicoEjemplo
[59] [27] [80] [30][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100][else] [Tasa] [:=] [Base]
![Page 28: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/28.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador28
Análisis LéxicoEjemplo
[59] [27] [80] [28][then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100][else] [Tasa] [:=] [Base]
![Page 29: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/29.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador29
Análisis LéxicoEjemplo
[59] [27] [80] [28][60] [27] [85] [27] [70] [27] [73] [28][61] [27] [85] [27]
![Page 30: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/30.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador30
Análisis LéxicoEjemplo
[59] [27, ‘Plazo’] [80] [28, ‘30’][60] [27, ‘Tasa’] [85] [27, ‘Base’] [70] [27,’Recargo’] [73] [28, ‘100’][61] [27,’Tasa’] [85] [27,‘Base’]
![Page 31: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/31.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador31
Análisis LéxicoEjemplo
[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
![Page 32: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/32.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador32
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
Tira detokens
![Page 33: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/33.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador33
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
*Tira detokens
![Page 34: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/34.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador34
Análisis Sintáctico
Agrupa los tokens del programa fuente en frases gramaticales que el compilador usará en las siguientes etapas.
![Page 35: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/35.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador35
Análisis Sintáctico
Los tokens son símbolos terminales en la gramática que describe al lenguaje fuente
![Page 36: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/36.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador36
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.
![Page 37: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/37.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador37
Análisis SintácticoGramá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> → ID18. <fact> → CTE
…
![Page 38: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/38.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador38
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.
![Page 39: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/39.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador39
Análisis Sintáctico Árbol de Parsing
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
ID CTE+ /:= ID ID
fact factfact
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
![Page 40: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/40.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador40
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
Lista dereglas
Tira detokens
![Page 41: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/41.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador41
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
Lista dereglas
Tira detokens
![Page 42: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/42.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador42
Lista deReglas
Generación de Código
CódigoAssembler
ÁrbolSintáctico
Tercetos
PolacaInversa
Cuartetos
A
B
C
D
E
F
G
HI
J
K
L
Caminos posibles: Camino 1: ACamino 2: D, I
Camino 3: E, LCamino 4: C, J
Camino 5: B, KCamino 6: D, F, K
Camino 7: D, G, JCamino 8: D, H, L
![Page 43: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/43.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador43
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
+
/
![Page 44: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/44.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador44
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.
![Page 45: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/45.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador45
Análisis SemánticoEjemplo
Tasa := Base + Recargo / 100 → ID := ID + ID / CTE
ID
ID
CTE
:=
ID
+
ItoF
/
![Page 46: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/46.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador46
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 Tercetosl Cuartetosl Polaca Inversa
![Page 47: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/47.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador47
Código IntermedioEjemplo
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
![Page 48: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/48.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador48
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.
![Page 49: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/49.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador49
OptimizaciónEjemplo
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
![Page 50: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/50.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador50
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.
![Page 51: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/51.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador51
Generación de Código AssemblerEjemplo
…FLD, RecargoFLD, Cte1FDIVFLD, BaseFADDFSTP, 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
![Page 52: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/52.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador52
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
Lista dereglas
Tira detokens
![Page 53: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/53.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador53
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).
![Page 54: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/54.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador54
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.
![Page 55: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/55.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador55
Fases de la Compilación
ProgramaFuente SalidaAnálisis
LéxicoAnálisis
SintácticoGeneración de Código
Tablade
Símbolos
Errores
Lista dereglas
Tira detokens
![Page 56: Diseño de Compiladores I - UNICEN](https://reader035.fdocument.pub/reader035/viewer/2022071614/615811ef1aff010cf0120c0c/html5/thumbnails/56.jpg)
Diseño de Compiladores I - 2008 Estructura General de un Compilador56
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.