SlideShare uma empresa Scribd logo
1 de 6
1.7 Fases de un compilador
Conceptualmente, un compilador opera en fases, cada una de las cuales
transforma al programa fuente de una presentación en otra. En la figura se
muestra una descomposición típica de un compilador. En la práctica, se pueden
agrupar algunas fases, y las representaciones intermedias entre las fases
agrupadas no necesitan ser construídas explícitamente.
Analizador semantico
Analizador léxico
Generador de código
intermedio
Analizador sintetico
Generador de código
Optimador de código
Manejador de erroresAdministrador de la
tabla de simbolos
Programa fuente
Programa objeto
Administración de la tabla de simbolos.
Una función especial de un compilador es registrar los identificadores utilizados en el
programa fuente y reunir informacion sobre los distintos atributos de cada indentificador.
Estos atributos pueden proporcionar información sobre la memoria asignada a un
identificador, su tipo, su ambito (la parte del programa donde tiene validez) y, en el caso
de nombres de procedimientos, cosas como el numero y tipos de sus argumento.
Detección e información de errores.
Cada fase puede encontrar errores. Sin embargo, despues de detectar un error, cada fase
debe de 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 útil como debiera.
Generación de codigo 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
represenatación intermedia debe de tener dos propiedades importantes; debe ser fácil de
producir y fácil de traducir al programa objeto.
Optimización de código.
La fase de optimización de código trata de mejorar el código intermedio, de modo que
resulte un código de máquina más rapido de ejecutar.
Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos
compiladores. En los que hacen mucha optimización, llamados “compiladores
optimizadores”, una parte significativa del tiempo del compilador se ocupa en esta fase.
Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de
ejecución del programa objeto sin retardar demasiado la compilación.
Generación de código.
La fase final de un compilador es la generación de código objeto, que por lo general
consiste en código de máquina relocalizable o código emsamblador. Las posiciones de
memoria se seleccionan para cada una de las variables usadas por el programa. Después
cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de
máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a
registros.
Sacar copias de la página de la 10 a la 15
1.1 Alfabeto.
Un alfabeto es un conjunto de símbolos finito y no vacío. Convencionalmente,
utilizamos el símbolo ∑ para designar un alfabeto. Entre los alfabetos más
comunes se incluyen los siguientes:
 ∑ = {0,1}, el alfabeto binario.
 ∑ = {a,b, . . . , z}, el conjunto de todas las letras minúsculas.
 El conjunto de todos los caracteres ASCII o el conjunto de todos los
caracteres ASCII imprimibles.
1.2 Cadenas.
Una cadena de caracteres (que también se denomina en ocasiones palabra) es
una secuencia finita de símbolos
seleccionados de algún alfabeto. Por ejemplo, 01101 es una cadena del alfabeto
binario ∑ = {0,1}. La cadena 111 es otra cadena de dicho alfabeto.
La cadena vacía
La cadena vacía es aquella cadena que presenta cero apariciones de símbolos.
Esta cadena, designada por ɛ , es una cadena que puede construirse en cualquier
alfabeto
Longitud de una cadena
Suele ser útil clasificar las cadenas por su longitud, es decir, el número de
posiciones ocupadas por símbolos
dentro de la cadena. Por ejemplo, 01101 tiene una longitud de 5. Es habitual decir
que la longitud de una cadena es igual al “número de símbolos” que contiene; esta
proposición está aceptada coloquialmente, sin embargo, no es estrictamente
correcta. Así, en la cadena 01101 sólo hay dos símbolos, 0 y 1, aunque tiene cinco
posiciones para los mismos y su longitus es igual a 5. Sin embargo, generalmente
podremos utilizar la expresión “número de símbolos” cuando realmente a lo que se
está haciendo referencia es al “número de posiciones”. La notación estándar para
indicar la longitud de una cadena w es |w|. Por ejemplo, |011| = 3 y |ε | = 0.
1.3 Lenguajes.
Un conjunto de cadenas, todas ellas seleccionadas de un Σ∗, donde Σ es un
determinado alfabeto se denomina lenguaje.La elección del término “lenguaje”
puede parecer extraña. Sin embargo, los lenguajes habituales pueden
interpretarse como conjuntos de cadenas.Un ejemplo sería el inglés, donde la
colección de las palabras correctas inglesas es un conjunto de cadenas del
alfabeto que consta de todas las letras. Otro ejemplo es el lenguaje C,o cualquier
otro lenguaje de programación, donde los programas correctos son un
subconjunto de las posibles cadenas que pueden formarse a partir del alfabeto del
lenguaje. Este alfabeto es un subconjunto de los caracteres ASCII.El alfabeto en
concreto puede diferir ligeramente entre diferentes lenguajes de programación,
aunque generalmente incluye las letrasmayúsculas y minúsculas, los dígitos, los
caracteres de puntuación y los símbolos matemáticos.
1.4 Tipos de lenguajes.
Expresiones regulares
Ahora vamos a desviar nuestra atención de las descripciones tipo máquina de los
lenguajes, autómatas finitos deterministas y no deterministas, a un tipo de
expresión algebraica: la “expresión regular”. Comprobaremos que las expresiones
regulares pueden definir de forma exacta los mismos lenguajes que describen los
distintos tipos de autómatas: los lenguajes regulares. Sin embargo, las
expresiones regulares ofrecen algo que los autómatas no proporcionan: una forma
declarativa para expresar las cadenas que deseamos aceptar.
Aunque las expresiones regulares describen los lenguajes de manera
completamente diferente a como lo hacen los autómatas finitos, ambas notaciones
representan exactamente el mismo conjunto de lenguajes, que hemos
denominado “lenguajes regulares”.
Para demostrar que las expresiones regulares definen la misma clase, tenemos
que probar que:
1. Todo lenguaje definidomediante uno de estos autómatas también se define
mediante una expresión regular.
Para demostrar esto, podemos suponer que el lenguaje es aceptado por algún
AFD.
2. Todo lenguaje definido por una expresión regular puede definirse mediante uno
de estos autómatas. Para esta parte de la demostración, lo más sencillo es probar
que existe un AFN con transiciones-ε que acepta el mismo lenguaje.
1.5 Herramientas computacionales ligadas con lenguajes
1.6Estructura del traductor.
Un traductor divide su labor en dos etapas: una que analiza la entrada y genera
estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras.
Por tanto, el esquema de un traductor pasa de ser el de la figura 1.1, a ser el de la
figura 1.7. Básicamente los objetivos de la etapa de análisis son: a) controlar la
corrección del programa fuente, y b) generar las estructuras necesarias para
comenzar la etapa de síntesis.
Para llevar esto a cabo, la etapa de análisis consta de las siguientes fases: O
Análisis lexicográfico. Divide el programa fuente en los componentes básicos del
lenguaje a compilar. Cada componente básico es una subsecuencia decaracteres
del programa fuente, y pertenece a una categoría gramatical: números,
identificadores de usuario (variables, constantes, tipos, nombres de
procedimientos, ...), palabras reservadas, signos de puntuación, etc.
Trabajo maxi unidad i

Mais conteúdo relacionado

Mais procurados

Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a CompiladoresLeopoldo Capa
 
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_
 
Actividad 3
Actividad 3Actividad 3
Actividad 3maryr_
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
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
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquinatre_na_gil
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosInfomania pro
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Jennybeatriz1
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedioEmanuel Gs
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1Denisse C
 
Practica 1
Practica 1Practica 1
Practica 1Tensor
 
Generador de codigo lenguajes de programacion
Generador de codigo lenguajes de programacionGenerador de codigo lenguajes de programacion
Generador de codigo lenguajes de programacionbulnez
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Carlos
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.LuiS YmAY
 

Mais procurados (20)

Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a Compiladores
 
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
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Actividad 3
Actividad 3Actividad 3
Actividad 3
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquina
 
Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptos
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedio
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1
 
Compilador
CompiladorCompilador
Compilador
 
Guia en lenguaje c
Guia en lenguaje c Guia en lenguaje c
Guia en lenguaje c
 
Practica 1
Practica 1Practica 1
Practica 1
 
Generador de codigo lenguajes de programacion
Generador de codigo lenguajes de programacionGenerador de codigo lenguajes de programacion
Generador de codigo lenguajes de programacion
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
 

Semelhante a Trabajo maxi unidad i

Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1X3025990
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
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
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
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
 
Alejandra gomez
Alejandra gomezAlejandra gomez
Alejandra gomezalejitaacg
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)alejandra985
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)alejandra985
 
Especialidad
EspecialidadEspecialidad
EspecialidadDilan19
 

Semelhante a Trabajo maxi unidad i (20)

Compiladores
CompiladoresCompiladores
Compiladores
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1
 
Resumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamachoResumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamacho
 
Compilador2
Compilador2Compilador2
Compilador2
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
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
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Herramientas de software
Herramientas de softwareHerramientas de software
Herramientas de software
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Desarrollo aplicaciones visuales
Desarrollo aplicaciones visualesDesarrollo aplicaciones visuales
Desarrollo aplicaciones visuales
 
Desarrollo aplicaciones visuales
Desarrollo aplicaciones visualesDesarrollo aplicaciones visuales
Desarrollo aplicaciones visuales
 
Desarrollo aplicaciones visuales
Desarrollo aplicaciones visualesDesarrollo aplicaciones visuales
Desarrollo aplicaciones visuales
 
Analisis lexico automatas i
Analisis lexico automatas iAnalisis lexico automatas i
Analisis lexico automatas i
 
Análisis lexicográfico
Análisis lexicográficoAnálisis lexicográfico
Análisis lexicográfico
 
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)
 
Alejandra gomez
Alejandra gomezAlejandra gomez
Alejandra gomez
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Especialidad
EspecialidadEspecialidad
Especialidad
 

Trabajo maxi unidad i

  • 1. 1.7 Fases de un compilador Conceptualmente, un compilador opera en fases, cada una de las cuales transforma al programa fuente de una presentación en otra. En la figura se muestra una descomposición típica de un compilador. En la práctica, se pueden agrupar algunas fases, y las representaciones intermedias entre las fases agrupadas no necesitan ser construídas explícitamente. Analizador semantico Analizador léxico Generador de código intermedio Analizador sintetico Generador de código Optimador de código Manejador de erroresAdministrador de la tabla de simbolos Programa fuente Programa objeto
  • 2. Administración de la tabla de simbolos. Una función especial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir informacion sobre los distintos atributos de cada indentificador. Estos atributos pueden proporcionar información sobre la memoria asignada a un identificador, su tipo, su ambito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el numero y tipos de sus argumento. Detección e información de errores. Cada fase puede encontrar errores. Sin embargo, despues de detectar un error, cada fase debe de 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 útil como debiera. Generación de codigo 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 represenatación intermedia debe de tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto. Optimización de código. La fase de optimización de código trata de mejorar el código intermedio, de modo que resulte un código de máquina más rapido de ejecutar. Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos compiladores. En los que hacen mucha optimización, llamados “compiladores optimizadores”, una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación. Generación de código. La fase final de un compilador es la generación de código objeto, que por lo general consiste en código de máquina relocalizable o código emsamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Después cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a registros. Sacar copias de la página de la 10 a la 15
  • 3. 1.1 Alfabeto. Un alfabeto es un conjunto de símbolos finito y no vacío. Convencionalmente, utilizamos el símbolo ∑ para designar un alfabeto. Entre los alfabetos más comunes se incluyen los siguientes:  ∑ = {0,1}, el alfabeto binario.  ∑ = {a,b, . . . , z}, el conjunto de todas las letras minúsculas.  El conjunto de todos los caracteres ASCII o el conjunto de todos los caracteres ASCII imprimibles. 1.2 Cadenas. Una cadena de caracteres (que también se denomina en ocasiones palabra) es una secuencia finita de símbolos seleccionados de algún alfabeto. Por ejemplo, 01101 es una cadena del alfabeto binario ∑ = {0,1}. La cadena 111 es otra cadena de dicho alfabeto. La cadena vacía La cadena vacía es aquella cadena que presenta cero apariciones de símbolos. Esta cadena, designada por ɛ , es una cadena que puede construirse en cualquier alfabeto Longitud de una cadena Suele ser útil clasificar las cadenas por su longitud, es decir, el número de posiciones ocupadas por símbolos dentro de la cadena. Por ejemplo, 01101 tiene una longitud de 5. Es habitual decir que la longitud de una cadena es igual al “número de símbolos” que contiene; esta proposición está aceptada coloquialmente, sin embargo, no es estrictamente correcta. Así, en la cadena 01101 sólo hay dos símbolos, 0 y 1, aunque tiene cinco posiciones para los mismos y su longitus es igual a 5. Sin embargo, generalmente podremos utilizar la expresión “número de símbolos” cuando realmente a lo que se está haciendo referencia es al “número de posiciones”. La notación estándar para indicar la longitud de una cadena w es |w|. Por ejemplo, |011| = 3 y |ε | = 0. 1.3 Lenguajes. Un conjunto de cadenas, todas ellas seleccionadas de un Σ∗, donde Σ es un determinado alfabeto se denomina lenguaje.La elección del término “lenguaje” puede parecer extraña. Sin embargo, los lenguajes habituales pueden interpretarse como conjuntos de cadenas.Un ejemplo sería el inglés, donde la colección de las palabras correctas inglesas es un conjunto de cadenas del alfabeto que consta de todas las letras. Otro ejemplo es el lenguaje C,o cualquier otro lenguaje de programación, donde los programas correctos son un
  • 4. subconjunto de las posibles cadenas que pueden formarse a partir del alfabeto del lenguaje. Este alfabeto es un subconjunto de los caracteres ASCII.El alfabeto en concreto puede diferir ligeramente entre diferentes lenguajes de programación, aunque generalmente incluye las letrasmayúsculas y minúsculas, los dígitos, los caracteres de puntuación y los símbolos matemáticos. 1.4 Tipos de lenguajes. Expresiones regulares Ahora vamos a desviar nuestra atención de las descripciones tipo máquina de los lenguajes, autómatas finitos deterministas y no deterministas, a un tipo de expresión algebraica: la “expresión regular”. Comprobaremos que las expresiones regulares pueden definir de forma exacta los mismos lenguajes que describen los distintos tipos de autómatas: los lenguajes regulares. Sin embargo, las expresiones regulares ofrecen algo que los autómatas no proporcionan: una forma declarativa para expresar las cadenas que deseamos aceptar. Aunque las expresiones regulares describen los lenguajes de manera completamente diferente a como lo hacen los autómatas finitos, ambas notaciones representan exactamente el mismo conjunto de lenguajes, que hemos denominado “lenguajes regulares”. Para demostrar que las expresiones regulares definen la misma clase, tenemos que probar que: 1. Todo lenguaje definidomediante uno de estos autómatas también se define mediante una expresión regular. Para demostrar esto, podemos suponer que el lenguaje es aceptado por algún AFD. 2. Todo lenguaje definido por una expresión regular puede definirse mediante uno de estos autómatas. Para esta parte de la demostración, lo más sencillo es probar que existe un AFN con transiciones-ε que acepta el mismo lenguaje. 1.5 Herramientas computacionales ligadas con lenguajes
  • 5. 1.6Estructura del traductor. Un traductor divide su labor en dos etapas: una que analiza la entrada y genera estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras. Por tanto, el esquema de un traductor pasa de ser el de la figura 1.1, a ser el de la figura 1.7. Básicamente los objetivos de la etapa de análisis son: a) controlar la corrección del programa fuente, y b) generar las estructuras necesarias para comenzar la etapa de síntesis. Para llevar esto a cabo, la etapa de análisis consta de las siguientes fases: O Análisis lexicográfico. Divide el programa fuente en los componentes básicos del lenguaje a compilar. Cada componente básico es una subsecuencia decaracteres del programa fuente, y pertenece a una categoría gramatical: números, identificadores de usuario (variables, constantes, tipos, nombres de procedimientos, ...), palabras reservadas, signos de puntuación, etc.