SlideShare una empresa de Scribd logo
1 de 32
Fases de un Compilador Capítulo 4 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 1
Introducción ¿Qué es un compilador? Programa que lee un programa (fuente) en un lenguaje. Lo traduce a un programa EQUIVALENTE en otro lenguaje (objeto). Además: da mensajes de error lleva a cabo determinadas “correcciones” (recuperación de errores). puede optimizar el código generado. Permite programar “independientemente” de la máquina. Importante, ya que el número de máquinas diferente crece deprisa. 2 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Fases de Compilación 3 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Agrupación de Fases Las fases se agrupan en dos partes o etapas:  frontend (las fases de análisis). Depende del lenguaje fuente y casi siempre es independiente (o debe serlo) de la máquina objeto para la que se va a generar código. back end (las fases de generación y optimización de código).  Depende del lenguaje objeto y debe ser independiente del lenguaje fuente (excepto quizá para algún tipo de optimización). Estas dos etapas se comunican mediante una representación intermedia (generada por el frontend), que puede ser una representación de la sintaxis del programa (un árbol sintáctico abstracto) o bien puede ser un programa en un lenguaje intermedio.  4 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Front End Fases que dependen del lenguaje fuente  Análisis Léxico Análisis Sintáctico Análisis Semántico (Estático) Creación de la Tabla de Símbolos Generación de Código Intermedio Algo de Optimización Manejo de errores correspondiente a las fases del Front End 5 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Back End Fases que dependen de la máquina objetivo Generación de la salida Optimización Manejo de errores correspondiente a las fases del Back End Operaciones sobre la Tabla de Símbolos 6 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Fases Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 7 Primera fase (precompilador) no siempre se realiza sustituciones de macros eliminación de comentarios inclusión de ficheros extensiones al lenguaje (C+SQL) Segunda fase es la parte fundamental (y siempre presente) consta de: analizador léxico analizador sintáctico generador de código traduce el código fuente a otro objeto puede ser el definitivo puede ser un código intermedio Tercera fase: no siempre presente realiza optimizaciones (algunas) sobre el código (intermedio) generado Cuarta fase: traduce el código intermedio (optimizado) a Ensamblador Binario Quinta fase: Optimización ligada a la máquina de destino Existen muchas variaciones posibles: sin preprocesador sin usar código intermedio optimizando directamente sobre el ensamblador de la máquina generar directamente binario, sin pasar por el ensamblador Etc.
Precompilación Suele haber preprocesadores para: Eliminar comentarios. Incluir archivos. Expandir macros. Efectuar compilación condicional. Reemplazar constantes simbólicas. 8 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
El Analizador Léxico (scanner) Lo realiza un “scanner”. también “tokenizer”. El scanner recorre los caracteres de entrada (el fuente) hasta reconocer un “token”. token: unidad léxica indivisible. ejemplos: while, if, ==, >=, ancho,... La secuencia de caracteres correspondiente se llama: “lexema” (componente léxico). 1 token <> 1 lexema. Además, suele realizar otras tareas: procesar directivas al compilador (opciones). introducir información preliminar en la tabla de símbolos. eliminar separadores innecesarios. sustituir macros. listar el fuente. Normalmente, los tokens se describen mediante expresiones regulares: Generación automática de autómatas finitos reconocedores. 9 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Ejemplo Consideremos la siguiente sentencia: posición = inicial + velocidad * 60 El scanner deberá reconocer sucesivamente: 10 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Fases Sintáctica (parser) y Semántica Las fases de análisis sintáctico y semántico por lo general manejan una gran proporción de los errores detectables por el compilador.  Fase Sintáctica Los errores donde la cadena de componentes léxicos violan las reglas de estructura (sintaxis) del lenguaje son determinados por la fase del análisis sintáctico. Fase Semántica Durante el análisis semántico el compilador intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada. Por ejemplo, si se intenta sumar dos identificadores. Uno de  los cuales es el  nombre de una matriz, y el otro, el nombre de un procedimiento.  11 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
El Analizador Sintáctico (Parser) Objetivo: agrupar los tokens suministrados por el scanner para reconocer “frases”. ¿Cómo lo hace? La sintaxis se suele especificar formalmente mediante una GLC. También de otros tipos. El parser recibe tokens y los agrupa de acuerdo a producciones especificadas por la GLC. El parser detecta errores sintácticos. Y si es bueno, puede además realizar algunas correcciones. 12 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. G.L.C.: Gramática Libre de Contexto
Ejemplo Consideremos el mismo ejemplo: posición = inicial + velocidad * 60 El árbol sintáctico correspondiente es: 13 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
El Analizador Semántico Realiza dos funciones: Análisis de la semántica estática. ¿Es cada construcción legal y “con sentido”? variables en una expresión definidas. del tipo adecuado. alcance de los objetos. Generación del código (intermedio). Generalmente se lleva a cabo mediante gramáticas de atributos. la GLC se completa con atributos necesarios: Tipo. Valor. acciones a ejecutar cuando se detecta una construcción legal. Etc. 14 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Generación de Código Intermedio Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente.  Se puede considerar esta representación intermedia como un programa para una máquina abstracta.  Esta representación intermedia debe tener dos propiedades importantes: Debe ser fácil de producir. Debe ser fácil de traducir al programa objeto. La representación intermedia puede tener diversas formas.  Existe una forma intermedia llamada “código de tres direcciones”, que es como el lenguaje ensamblador para una máquina en la que cada posición de memoria puede actuar como un registro.  El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos.  15 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Ejemplo Del ejemplo anterior, el programa fuente de (1) puede aparecer en código de tres direcciones como: temp1 := entarea1(60) temp2 := id3 * temp1   (2) temp3 := id2 + temp2 id1 := temp3 Esta representación intermedia tiene varias propiedades.  Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación.  Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicación precede a la adición al programa fuente de (1).  Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción.  Tercera, algunas instrucciones de “tres direcciones” tienen menos de tres operadores, por ejemplo la primera y la última instrucciones de (2). 16 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Código Intermedio Ejemplo ,[object Object],17 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
El Optimizador El código intermedio generado es analizado y transformado en uno equivalente optimizado. Es una tarea muy costosa. De hecho, generalmente se puede invocar al compilador activando/desactivando esta opción. Es una tarea difícil. Otras veces, optimiza el código objeto Usual la optimización “peephole”: Tomar una porción pequeña de código y hacer una optimización local. “desenrrollado” de bucles. Eliminación de recursividad final. Etc. 18 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Optimización Ejemplo ,[object Object],19 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
El Generador de Código Toma código intermedio y genera código objeto para la máquina considerada. Es la parte más próxima a la arquitectura de la máquina Habitualmente, se escriben “a mano”. desarrollo “a medida” para cada máquina específica. Dada la complejidad, si no se va a realizar optimización, se asocia la generación de código a las rutinas semánticas. Compiladores de “una pasada” (no hay pasos 1,3,4). 20 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
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).  Cuando el Análisis Léxico detecta un token de tipo identificador, lo ingresa en la Tabla de Símbolos. 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. Durante la Generación de Código puede ser necesario incorporar nuevas entradas a la Tabla de Símbolos. 21 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Administrador de la Tabla de Símbolos Una función esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir información sobre los distintos atributos de cada identificador.  Estos atributos pueden proporcionar información sobre la memoria asignada a un identificador, su tipo, su ámbito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el número y tipos de sus argumentos, el método de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si los hay. Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador.  La estructura de datos permite encontrar rápidamente el registro de cada identificador y almacenar o consultar rápidamente datos en un registro 22 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Administrador de la Tabla de Símbolos Cuando el analizador léxico detecta un identificador en el programa fuente, el identificador se introduce en la tabla de símbolos.  Sin embargo, normalmente los atributos de un identificador no se pueden determinar durante el análisis léxico.  Por ejemplo, en una declaración en Pascal como: var posición, inicial, velocidad : real; El tipo real no se conoce cuando el analizador léxico encuentra posición, inicial y velocidad. Las fases restantes introducen información sobre los identificadores en la tabla de símbolos y después la utilizan de varias formas.  Por ejemplo, cuando se está haciendo el análisis semántico y la generación de código intermedio, se necesita saber cuáles son los tipos de los identificadores, para poder comprobar si el programa fuente los usa de una forma válida y así poder generar las operaciones apropiadas con ellos.  El generador de código, por lo general, introduce y utiliza información detallada sobre la memoria asignada a los identificadores. 23 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Detección e Información de Errores Cada fase puede encontrar errores.  Sin embargo, después de detectar un error.  Cada fase debe tratar de alguna forma ese error, para poder continuar la compilación, permitiendo la detección de más errores en el programa fuente.  Un compilador que se detiene cuando encuentra el primer error, no resulta tan útil como debiera. 24 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Las Fases de Análisis Conforme avanza la traducción, la representación interna del programa fuente que tiene el compilador se modifica.  Para ilustrar esas representaciones, consideremos la traducción de la proposición:	 La figura muestra la representación de esa proposición después de cada fase. 25 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Posición := inicial + velocidad * 60      (1)
Estructura Jerárquica El análisis sintáctico impone una estructura jerárquica a la cadena de componentes léxicos, que se representará por medio de árboles sintácticos, como se muestra en la figura A. Una estructura de datos típica para el árbol se muestra en la figura B, en la que un nodo interior es un registro con un campo para el operador y dos campos que contienen apuntadores a los registros de los hijos izquierdo y derecho.  Una hoja es un registro con dos o más campos, uno para identificar el componente léxico de la hoja, y los otros para registrar información sobre el componente léxico.  Se puede tener información adicional sobre las construcciones del lenguaje añadiendo más campos a les registros de los nodos. 26 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Generación de Código Propiamente Dicho Se traduce la representación intermedia del programa fuente en el código nativo de la máquina objetivo. 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. 27 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Generación Código en Assembler Ejemplo ,[object Object],28 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Generación de Código en Ensamblador Mediante las instrucciones del Ensamblador queda representado el árbol sintáctico 29 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Optimación de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 30 La fase de optimación de código trata de mejorar el código intermedio de modo que resulte un código de máquina más rápido de ejecutar.  Algunas optimaciones son triviales.  Por ejemplo, un algoritmo natural genera el código intermedio (2) utilizando una instrucción para cada operador de la representación del árbol después del análisis semántico, aunque hay una forma mejor de realizar los mismos cálculos usando las dos instrucciones: Temp1 := id3 * 60.0     (3) id1 := id2 + temp1 Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar en la fase de optimación de código.  Esto es, el compilador puede deducir que la conversión de 60 de entero a real se puede hacer de una vez por todas en el momento de la compilación, de modo que la operación entreal se puede eliminar.  Además, temp3 se usa sólo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la última proposición de (2) no se necesita y se obtiene el código de (3). Hay muchas variaciones en la cantidad de optimación de código que ejecutan los distintos compiladores.  En los que hacen mucha optimación llamados “compiladores optimadores”,  una parte significativa del tiempo del compilador se ocupa en esta fase.  Sin embargo hay optimaciones sencillas que mejoran significativamente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación.
Generación de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 31
Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 32 Front end (análisis-c. fuente) Fase 1 Los tokens son generados por autómatas finitos Los comp. léxicos están compuestos por tokens (unid. indiv.) y estos  por lexemas El parser reconoce frases por el GLC Fase 2 …comunicación por:  -árbol sintáctico ó                                     -prog. en un leng. intermedio Programa para una máquina abstracta. Ej: código de 3 direcciones (para 3 operandos) Son un conjunto de identifica-dores Fase 3 Fase 5 Reorganizar, reducir operaciones Fase 4 …hacia el linker Back end (síntesis-c.objeto)

Más contenido relacionado

La actualidad más candente

Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedioEmanuel Gs
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosInfomania pro
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores Nestor Traña
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraAlexandraMolinaSanchez
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacionTensor
 
Actividad 3
Actividad 3Actividad 3
Actividad 3maryr_
 
GENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOGENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOMAURICIOANDRES39
 
Python guia01 1
Python guia01 1Python guia01 1
Python guia01 1zeta2015
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacionguest9a91e2
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedioyaya
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con CupLAUNASA NOVENO B
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De CompiladorBigbossH
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++Tensor
 

La actualidad más candente (20)

Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedio
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptos
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Compilador
CompiladorCompilador
Compilador
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacion
 
Actividad 3
Actividad 3Actividad 3
Actividad 3
 
GENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOGENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIO
 
Python guia01 1
Python guia01 1Python guia01 1
Python guia01 1
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacion
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De Compilador
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Compiladores
CompiladoresCompiladores
Compiladores
 

Destacado

Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxicoFARIDROJAS
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2perlallamas
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosDIEGO BAROJA
 
Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gonsepulvedas
 
Teoría de Autómatas y Lenguajes Formales (I Bimestre)
Teoría de Autómatas y Lenguajes Formales (I Bimestre)Teoría de Autómatas y Lenguajes Formales (I Bimestre)
Teoría de Autómatas y Lenguajes Formales (I Bimestre)Videoconferencias UTPL
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoangiepao1717
 
Kritische Masse als Erfolgsgarant
Kritische Masse als ErfolgsgarantKritische Masse als Erfolgsgarant
Kritische Masse als ErfolgsgarantBarbara Niedner
 
Präsentation repelen rheinkamp_eick_utfort
Präsentation repelen rheinkamp_eick_utfortPräsentation repelen rheinkamp_eick_utfort
Präsentation repelen rheinkamp_eick_utfortStadtMoers
 
Presentation gender
Presentation genderPresentation gender
Presentation genderHimmahmay
 
Verwechslungsgefahr 1
Verwechslungsgefahr 1Verwechslungsgefahr 1
Verwechslungsgefahr 1chillimann
 

Destacado (19)

Estructuras lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
Compilador2
Compilador2Compilador2
Compilador2
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
 
Compiladores, Analisis Lexico, Tabla de Transiciones
Compiladores, Analisis Lexico, Tabla de TransicionesCompiladores, Analisis Lexico, Tabla de Transiciones
Compiladores, Analisis Lexico, Tabla de Transiciones
 
Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50g
 
Teoría de Autómatas y Lenguajes Formales (I Bimestre)
Teoría de Autómatas y Lenguajes Formales (I Bimestre)Teoría de Autómatas y Lenguajes Formales (I Bimestre)
Teoría de Autómatas y Lenguajes Formales (I Bimestre)
 
Compiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico ConceptosCompiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico Conceptos
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintáctico
 
Etapas de compilacion
Etapas de compilacionEtapas de compilacion
Etapas de compilacion
 
Proyecto de Sistemas de Información I
Proyecto de Sistemas de Información IProyecto de Sistemas de Información I
Proyecto de Sistemas de Información I
 
Proyecto de Sistemas de Información
Proyecto de Sistemas de InformaciónProyecto de Sistemas de Información
Proyecto de Sistemas de Información
 
Justin missar
Justin missarJustin missar
Justin missar
 
Siemens
SiemensSiemens
Siemens
 
Kritische Masse als Erfolgsgarant
Kritische Masse als ErfolgsgarantKritische Masse als Erfolgsgarant
Kritische Masse als Erfolgsgarant
 
Präsentation repelen rheinkamp_eick_utfort
Präsentation repelen rheinkamp_eick_utfortPräsentation repelen rheinkamp_eick_utfort
Präsentation repelen rheinkamp_eick_utfort
 
Presentation gender
Presentation genderPresentation gender
Presentation gender
 
Verwechslungsgefahr 1
Verwechslungsgefahr 1Verwechslungsgefahr 1
Verwechslungsgefahr 1
 

Similar a Cap4

Compiladores Ex..ppt
Compiladores Ex..pptCompiladores Ex..ppt
Compiladores Ex..pptMarko Zapata
 
Cap3
Cap3Cap3
Cap3CJAO
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladoresCJAO
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfDavidErnestoT
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionBoris Salleg
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador FuncionamientoKriz Kozlov
 
Generador de codigo_intermedio
Generador de codigo_intermedioGenerador de codigo_intermedio
Generador de codigo_intermedioOscar Jose
 
C:\fakepath\generador de codigo_intermedio
C:\fakepath\generador de codigo_intermedioC:\fakepath\generador de codigo_intermedio
C:\fakepath\generador de codigo_intermedioOscar Jose
 
Generador de codigo_intermedio
Generador de codigo_intermedioGenerador de codigo_intermedio
Generador de codigo_intermedioOscar Jose
 
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
 
compiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladorescompiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladoresBEVERLYIGUARDIA
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresNancyandRegina317
 

Similar a Cap4 (20)

Compiladores Ex..ppt
Compiladores Ex..pptCompiladores Ex..ppt
Compiladores Ex..ppt
 
Cap3
Cap3Cap3
Cap3
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladores
 
Ec2
Ec2Ec2
Ec2
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacion
 
Jin Unidad6
Jin Unidad6Jin Unidad6
Jin Unidad6
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
Generador de codigo_intermedio
Generador de codigo_intermedioGenerador de codigo_intermedio
Generador de codigo_intermedio
 
C:\fakepath\generador de codigo_intermedio
C:\fakepath\generador de codigo_intermedioC:\fakepath\generador de codigo_intermedio
C:\fakepath\generador de codigo_intermedio
 
Generador de codigo_intermedio
Generador de codigo_intermedioGenerador de codigo_intermedio
Generador de codigo_intermedio
 
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)
 
Analizador Lexico
Analizador LexicoAnalizador Lexico
Analizador Lexico
 
compiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladorescompiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladores
 
Resumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamachoResumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamacho
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladores
 
Resumen1
Resumen1Resumen1
Resumen1
 

Más de CJAO

Cap6
Cap6Cap6
Cap6CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap2
Cap2Cap2
Cap2CJAO
 
Cap1
Cap1Cap1
Cap1CJAO
 
Cap6
Cap6Cap6
Cap6CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap0
Cap0Cap0
Cap0CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap2
Cap2Cap2
Cap2CJAO
 
Cap1
Cap1Cap1
Cap1CJAO
 
Cap6
Cap6Cap6
Cap6CJAO
 
Cap10
Cap10Cap10
Cap10CJAO
 
Cap9
Cap9Cap9
Cap9CJAO
 
Cap8
Cap8Cap8
Cap8CJAO
 

Más de CJAO (20)

Cap6
Cap6Cap6
Cap6
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap2
Cap2Cap2
Cap2
 
Cap1
Cap1Cap1
Cap1
 
Cap6
Cap6Cap6
Cap6
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap0
Cap0Cap0
Cap0
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap2
Cap2Cap2
Cap2
 
Cap1
Cap1Cap1
Cap1
 
Cap6
Cap6Cap6
Cap6
 
Cap10
Cap10Cap10
Cap10
 
Cap9
Cap9Cap9
Cap9
 
Cap8
Cap8Cap8
Cap8
 

Último

CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOEveliaHernandez8
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAELIASPELAEZSARMIENTO1
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTESaraNolasco4
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 

Último (20)

CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 

Cap4

  • 1. Fases de un Compilador Capítulo 4 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 1
  • 2. Introducción ¿Qué es un compilador? Programa que lee un programa (fuente) en un lenguaje. Lo traduce a un programa EQUIVALENTE en otro lenguaje (objeto). Además: da mensajes de error lleva a cabo determinadas “correcciones” (recuperación de errores). puede optimizar el código generado. Permite programar “independientemente” de la máquina. Importante, ya que el número de máquinas diferente crece deprisa. 2 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 3. Fases de Compilación 3 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 4. Agrupación de Fases Las fases se agrupan en dos partes o etapas: frontend (las fases de análisis). Depende del lenguaje fuente y casi siempre es independiente (o debe serlo) de la máquina objeto para la que se va a generar código. back end (las fases de generación y optimización de código). Depende del lenguaje objeto y debe ser independiente del lenguaje fuente (excepto quizá para algún tipo de optimización). Estas dos etapas se comunican mediante una representación intermedia (generada por el frontend), que puede ser una representación de la sintaxis del programa (un árbol sintáctico abstracto) o bien puede ser un programa en un lenguaje intermedio. 4 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 5. Front End Fases que dependen del lenguaje fuente Análisis Léxico Análisis Sintáctico Análisis Semántico (Estático) Creación de la Tabla de Símbolos Generación de Código Intermedio Algo de Optimización Manejo de errores correspondiente a las fases del Front End 5 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 6. Back End Fases que dependen de la máquina objetivo Generación de la salida Optimización Manejo de errores correspondiente a las fases del Back End Operaciones sobre la Tabla de Símbolos 6 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 7. Fases Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 7 Primera fase (precompilador) no siempre se realiza sustituciones de macros eliminación de comentarios inclusión de ficheros extensiones al lenguaje (C+SQL) Segunda fase es la parte fundamental (y siempre presente) consta de: analizador léxico analizador sintáctico generador de código traduce el código fuente a otro objeto puede ser el definitivo puede ser un código intermedio Tercera fase: no siempre presente realiza optimizaciones (algunas) sobre el código (intermedio) generado Cuarta fase: traduce el código intermedio (optimizado) a Ensamblador Binario Quinta fase: Optimización ligada a la máquina de destino Existen muchas variaciones posibles: sin preprocesador sin usar código intermedio optimizando directamente sobre el ensamblador de la máquina generar directamente binario, sin pasar por el ensamblador Etc.
  • 8. Precompilación Suele haber preprocesadores para: Eliminar comentarios. Incluir archivos. Expandir macros. Efectuar compilación condicional. Reemplazar constantes simbólicas. 8 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 9. El Analizador Léxico (scanner) Lo realiza un “scanner”. también “tokenizer”. El scanner recorre los caracteres de entrada (el fuente) hasta reconocer un “token”. token: unidad léxica indivisible. ejemplos: while, if, ==, >=, ancho,... La secuencia de caracteres correspondiente se llama: “lexema” (componente léxico). 1 token <> 1 lexema. Además, suele realizar otras tareas: procesar directivas al compilador (opciones). introducir información preliminar en la tabla de símbolos. eliminar separadores innecesarios. sustituir macros. listar el fuente. Normalmente, los tokens se describen mediante expresiones regulares: Generación automática de autómatas finitos reconocedores. 9 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 10. Ejemplo Consideremos la siguiente sentencia: posición = inicial + velocidad * 60 El scanner deberá reconocer sucesivamente: 10 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 11. Fases Sintáctica (parser) y Semántica Las fases de análisis sintáctico y semántico por lo general manejan una gran proporción de los errores detectables por el compilador. Fase Sintáctica Los errores donde la cadena de componentes léxicos violan las reglas de estructura (sintaxis) del lenguaje son determinados por la fase del análisis sintáctico. Fase Semántica Durante el análisis semántico el compilador intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada. Por ejemplo, si se intenta sumar dos identificadores. Uno de los cuales es el nombre de una matriz, y el otro, el nombre de un procedimiento. 11 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 12. El Analizador Sintáctico (Parser) Objetivo: agrupar los tokens suministrados por el scanner para reconocer “frases”. ¿Cómo lo hace? La sintaxis se suele especificar formalmente mediante una GLC. También de otros tipos. El parser recibe tokens y los agrupa de acuerdo a producciones especificadas por la GLC. El parser detecta errores sintácticos. Y si es bueno, puede además realizar algunas correcciones. 12 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. G.L.C.: Gramática Libre de Contexto
  • 13. Ejemplo Consideremos el mismo ejemplo: posición = inicial + velocidad * 60 El árbol sintáctico correspondiente es: 13 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 14. El Analizador Semántico Realiza dos funciones: Análisis de la semántica estática. ¿Es cada construcción legal y “con sentido”? variables en una expresión definidas. del tipo adecuado. alcance de los objetos. Generación del código (intermedio). Generalmente se lleva a cabo mediante gramáticas de atributos. la GLC se completa con atributos necesarios: Tipo. Valor. acciones a ejecutar cuando se detecta una construcción legal. Etc. 14 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 15. Generación de Código Intermedio Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes: Debe ser fácil de producir. Debe ser fácil de traducir al programa objeto. La representación intermedia puede tener diversas formas. Existe una forma intermedia llamada “código de tres direcciones”, que es como el lenguaje ensamblador para una máquina en la que cada posición de memoria puede actuar como un registro. El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos. 15 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 16. Ejemplo Del ejemplo anterior, el programa fuente de (1) puede aparecer en código de tres direcciones como: temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3 Esta representación intermedia tiene varias propiedades. Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicación precede a la adición al programa fuente de (1). Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. Tercera, algunas instrucciones de “tres direcciones” tienen menos de tres operadores, por ejemplo la primera y la última instrucciones de (2). 16 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 17.
  • 18. El Optimizador El código intermedio generado es analizado y transformado en uno equivalente optimizado. Es una tarea muy costosa. De hecho, generalmente se puede invocar al compilador activando/desactivando esta opción. Es una tarea difícil. Otras veces, optimiza el código objeto Usual la optimización “peephole”: Tomar una porción pequeña de código y hacer una optimización local. “desenrrollado” de bucles. Eliminación de recursividad final. Etc. 18 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 19.
  • 20. El Generador de Código Toma código intermedio y genera código objeto para la máquina considerada. Es la parte más próxima a la arquitectura de la máquina Habitualmente, se escriben “a mano”. desarrollo “a medida” para cada máquina específica. Dada la complejidad, si no se va a realizar optimización, se asocia la generación de código a las rutinas semánticas. Compiladores de “una pasada” (no hay pasos 1,3,4). 20 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 21. 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). Cuando el Análisis Léxico detecta un token de tipo identificador, lo ingresa en la Tabla de Símbolos. 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. Durante la Generación de Código puede ser necesario incorporar nuevas entradas a la Tabla de Símbolos. 21 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 22. Administrador de la Tabla de Símbolos Una función esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir información sobre los distintos atributos de cada identificador. Estos atributos pueden proporcionar información sobre la memoria asignada a un identificador, su tipo, su ámbito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el número y tipos de sus argumentos, el método de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si los hay. Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. La estructura de datos permite encontrar rápidamente el registro de cada identificador y almacenar o consultar rápidamente datos en un registro 22 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 23. Administrador de la Tabla de Símbolos Cuando el analizador léxico detecta un identificador en el programa fuente, el identificador se introduce en la tabla de símbolos. Sin embargo, normalmente los atributos de un identificador no se pueden determinar durante el análisis léxico. Por ejemplo, en una declaración en Pascal como: var posición, inicial, velocidad : real; El tipo real no se conoce cuando el analizador léxico encuentra posición, inicial y velocidad. Las fases restantes introducen información sobre los identificadores en la tabla de símbolos y después la utilizan de varias formas. Por ejemplo, cuando se está haciendo el análisis semántico y la generación de código intermedio, se necesita saber cuáles son los tipos de los identificadores, para poder comprobar si el programa fuente los usa de una forma válida y así poder generar las operaciones apropiadas con ellos. El generador de código, por lo general, introduce y utiliza información detallada sobre la memoria asignada a los identificadores. 23 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 24. Detección e Información de Errores Cada fase puede encontrar errores. Sin embargo, después de detectar un error. Cada fase debe tratar de alguna forma ese error, para poder continuar la compilación, permitiendo la detección de más errores en el programa fuente. Un compilador que se detiene cuando encuentra el primer error, no resulta tan útil como debiera. 24 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 25. Las Fases de Análisis Conforme avanza la traducción, la representación interna del programa fuente que tiene el compilador se modifica. Para ilustrar esas representaciones, consideremos la traducción de la proposición: La figura muestra la representación de esa proposición después de cada fase. 25 Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Posición := inicial + velocidad * 60 (1)
  • 26. Estructura Jerárquica El análisis sintáctico impone una estructura jerárquica a la cadena de componentes léxicos, que se representará por medio de árboles sintácticos, como se muestra en la figura A. Una estructura de datos típica para el árbol se muestra en la figura B, en la que un nodo interior es un registro con un campo para el operador y dos campos que contienen apuntadores a los registros de los hijos izquierdo y derecho. Una hoja es un registro con dos o más campos, uno para identificar el componente léxico de la hoja, y los otros para registrar información sobre el componente léxico. Se puede tener información adicional sobre las construcciones del lenguaje añadiendo más campos a les registros de los nodos. 26 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 27. Generación de Código Propiamente Dicho Se traduce la representación intermedia del programa fuente en el código nativo de la máquina objetivo. 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. 27 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 28.
  • 29. Generación de Código en Ensamblador Mediante las instrucciones del Ensamblador queda representado el árbol sintáctico 29 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 30. Optimación de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 30 La fase de optimación de código trata de mejorar el código intermedio de modo que resulte un código de máquina más rápido de ejecutar. Algunas optimaciones son triviales. Por ejemplo, un algoritmo natural genera el código intermedio (2) utilizando una instrucción para cada operador de la representación del árbol después del análisis semántico, aunque hay una forma mejor de realizar los mismos cálculos usando las dos instrucciones: Temp1 := id3 * 60.0 (3) id1 := id2 + temp1 Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar en la fase de optimación de código. Esto es, el compilador puede deducir que la conversión de 60 de entero a real se puede hacer de una vez por todas en el momento de la compilación, de modo que la operación entreal se puede eliminar. Además, temp3 se usa sólo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la última proposición de (2) no se necesita y se obtiene el código de (3). Hay muchas variaciones en la cantidad de optimación de código que ejecutan los distintos compiladores. En los que hacen mucha optimación llamados “compiladores optimadores”, una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo hay optimaciones sencillas que mejoran significativamente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación.
  • 31. Generación de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 31
  • 32. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. 32 Front end (análisis-c. fuente) Fase 1 Los tokens son generados por autómatas finitos Los comp. léxicos están compuestos por tokens (unid. indiv.) y estos por lexemas El parser reconoce frases por el GLC Fase 2 …comunicación por: -árbol sintáctico ó -prog. en un leng. intermedio Programa para una máquina abstracta. Ej: código de 3 direcciones (para 3 operandos) Son un conjunto de identifica-dores Fase 3 Fase 5 Reorganizar, reducir operaciones Fase 4 …hacia el linker Back end (síntesis-c.objeto)