SlideShare une entreprise Scribd logo
1  sur  25
CORPORACION UNIVERSITARIA REMINGTON
COMPILADORES
COMPILADORES Y SUS FASES
ALEXANDRA MOLINA SANCHEZ
18/04/2014
COMPILADORES
1
TABLA DE CONTENIDO
INTRODUCCION…………………………………………………………………….1
JUSTIFICACION……………………………………………………………………..4
OBJETIVO GENERAL……………………………………………………………….5
OBJETIVO ESPECIFICO……………………………………………………………6
CONCLUSION………………………………………………………………………...7
BIBLIOGRAFIA………………………………………………………………………..8
VOCABULARIO……………………………………………………………………….9
COMPILADOR Y SUS FASES………………………………………………………11
FASES DE UN COMPILADOR………………………………………………………16
MANEJO DE ERRORES SINTATICOS…………………………………………….17
ANALIZADOR LEXICO……………………………………………………………….19
FUNCION DEL ANALIZADOR LEXICO…………………………………………….20
AUTOMATA FINITO……………………………………………………………………21
AUTOMATA DE PILA………………………………………………………………….23
COMPILADORES
2
INTRODUCCION
"¿Cómo funciona un compilador? ", es la pregunta de todo aquel que se hace llamar
programador, a grandes rasgos un compilador toma un programa escrito en un
lenguaje de programación con una gramática, sintaxis y semántica definida, revisa que
este dentro de las pautas de definición del lenguaje, y lo traduce en programa de salida
escrito en lenguaje binario, el cual es entendido por el ordenador y por lo tanto puede
ser ejecutado por el mismo (recordar que un intérprete a diferencia de un compilador no
traduce todo el programa sino que va realizando la traducción e interpretación de la
misma paso a paso, sin crear ningún programa de salida ejecutable). Las partes del
proceso de compilación se dividen en dos: una llamada fase de Análisis y otra llamada
fase de Sintaxis, las cuales interactúan entre sí para la creación de la tabla de símbolos
y el control del manejador de errores, dentro del análisis hay tres etapas llamadas
análisis léxico, análisis sintáctico, análisis semántico. Dentro de la fase de Síntesis
existen las etapas de generación de código intermedio, optimización de código
intermedio, y generación de código.
Al tener que describir cómo funciona un compilador tenemos
que tener en claro en no confundir los términos compilador y compilación, se debe
entender que al decir compilador nos referimos al programa, y al decir compilación al
proceso en sí. En esencia ambos términos cumplen con la definición más simple de un
compilador, es decir, sea el programa compilador o el proceso de compilación, ambos
ES AQUEL QUE SE ENCARGA DE HACER EJECUTABLE NUESTRO PROGRAMA.
COMPILADORES
3
reciben como entrada un código escrito en algún lenguaje y producen como salida otro
código escrito en otro lenguaje.
COMPILADORES
4
JUSTIFICASION
La teoría de Compiladores es un área de conocimientos fundamental para la formación
del estudiante de Ciencias de la Computación.
Posee una relevancia práctica y teórica en la formación del futuro profesional tanto en
el aspecto de la programación de computadoras
Como en la construcción de la base teórica de conocimientos del mismo.
. Es importante que un profesional de la informática tenga
una sólida formación en este tema, ya que aunque durante su vida profesional no se
dedique al diseño de compiladores, sus aplicaciones podrán ser mucho más eficientes
si aplica los conocimientos adquiridos.
COMPILADORES
5
OBJETIVO GENERAL
Comprender el problema al que se enfrenta un compilador. Comprender los
Algoritmos que se utilizan para resolver cada una de las fases del compilador.
Dominar completamente el proceso para convertir un lenguaje de alto nivel a un
Lenguaje de bajo nivel.
COMPILADORES
6
OBJETIVO ESPECIFICO
1.1 Aplicar el concepto de compiladores como alternativa de solución de problemas.
1.2 Que nosotros los estudiantes realicemos una aplicación interactiva que trabaje
conjuntamente con el analizador.
1.3Que el estudiante sea capaz de crear gramáticas y de recuperarse de errores
léxicos, sintácticos.
1.4Iniciar el proceso de aprendizaje de herramientas generadoras de Analizadores
Léxicos y Sintácticos.
COMPILADORES
7
CONCLUSION
Comprendí que un compilador, requiere de una sintaxis y lenguajes específicos, ya
que, al igual que el lenguaje humano, si no lo escribimos correctamente el compilador
no hará lo que deseamos. Y que en la compilación hay dos partes: Análisis y Síntesis.
La parte del análisis divide al programa fuente en sus elementos componentes y crea
una representación intermedia.
Aprendí que las herramientas que muestran tipos de análisis
de programas fuente, son muy útiles al momento de crear un programa al codificar un
algoritmo, ya que estas herramientas nos ayudan formateando el texto, corrigiendo
errores, dando tips; para que nosotros como programadores seamos más eficientes al
momento de crear alguna aplicación.
COMPILADORES
8
BIBLIOGRAFIA
Es.scribd.com/doc./4750326/INTRODUCCION-A-COMPILADORES
www.cualtos.udg.mx/programas/computacion/cc317_compiladores.pdf
www.monografias.com/trabajos11/compil/compil2.shtml
yanethcardenas09.wix.com/compiladores#!análisis/ck1¡
COMPILADORES
9
VOCABULARIO
1. bytecode: Es un código intermedio más abstracto que el código máquina.
2. lexicográfico: persona que recopila o selecciona los vocablos que han entrar en un
léxico.
3. tokens: un token o también llamado componente léxico es una cadena de caracteres
que tiene un significado coherente en cierto lenguaje de programación.
4. while: El bucle while o bucle mientras es una estructura de la mayoría de los
lenguajes de programación estructurados cuyo propósito es repetir un bloque de
código mientras una condición se mantenga verdadera.
5. subrutina: E n computación una subrutina o subprograma (también llamado
procedimientos, función o rutina), como idea general se presenta como un su algoritmo
que forma parte del algoritmo principal.
6. corrutina: Una corrutina es un componente que poseen los programas que son
capaces de crear subrutinas.
COMPILADORES
10
COMPILADORES
11
UN COMPILADOR Y SUS FASES
Compilador
Es un programa que permite traducir el código fuente de un programa en lenguaje de
alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina).
De esta manera un programador puede diseñar un programa
en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego
compilarlo a un programa más manejable por un computador.
Imagen1.esta imagen nos muestra como traduce los textos del compilador.
Un compilador es un programa informático que traduce un
programa escrito en un lenguaje de programación a otro lenguaje de programación,
generando un programa equivalente que la máquina será capaz de interpretar.
Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un
código intermedio (bytecode), o simplemente texto. Este proceso de traducción se
conoce como compilación.
COMPILADORES
12
El compilador es el que permite traducir el código fuente de
un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente
lenguaje de máquina). De esta manera un programador puede diseñar un programa en
un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo
a un programa más manejable por una computadora.
Imagen2. Diagrama a bloques de la operación de un buen compilador.
COMPILADORES
13
Básicamente, El programa compilador traduce las
instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede
interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador
separado dos grandes formas de ejecutar programas: programas compilados
(previamente pasados por un compilador) y programas interpretados (necesitan pasar
por un intérprete para ejecutarse en tiempo real).
Un compilador es un programa informático, que se encarga
de traducir el código fuente de una aplicación que este en desarrollo, es decir convierte
un programa hecho en lenguaje de programación de alto nivel a un lenguaje de
máquina, el cual es conocido como de bajo nivel, de tal forma que sea más entendible
y mucho más fácil de procesar en el equipo en el que se está ejecutando.
COMPILADORES
14
Imagen3. Estructura de proceso de compilación.
De igual manera un traductor es el que toma como entrada
un texto escrito y da como salida otro texto en un lenguaje llamado objeto.
Un compilador es un programa que crea una lista de
instrucciones de código máquina basándose en un código fuente resultando en un
programa listo y rápido para usarse. Por otro lado el intérprete es más lento puesto
que, no produce ningún código sino que lo reconoce. Ambos son lenguajes de
programación.
Conceptualmente un compilador opera en fases. Cada una
de las cuales transforma el programa fuente de una representación en otra. En la
imagen 4 se muestra una descomposición típica de un compilador. En la práctica se
pueden agrupar fases y las representaciones intermedias entres las fases agrupadas
no necesitan ser construidas explícitamente.
Programa fuente.
COMPILADORES
15
Imagen4. Nos muestra una descomposición típica de un compilador.
El programa compilador traduce las instrucciones en un
lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar.
COMPILADORES
16
Fases De Un Compilador
1. El análisis es la fase en la cual se trata de la escritura correcta del código fuente.
Esta a su vez comprende varias fases:
Análisis léxico: esta fase es la encargada de leer el código
fuente y separarlo en lotes para poder ser leído por el análisis sintáctico. Esta fase se
encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza
un análisis símbolo por símbolo indicando el toquen por cada uno de los elementos
reconocidos o el error en caso de no reconocer.
Este análisis no logra detectar muchos errores por su
característica.
1.1 Análisis sintáctico: esta fase evalúa los lotes de código con el fin de que este
cumpla con los requerimientos definidos por el compilador. En esta fase se analiza la
estructura de las expresiones en base a gramáticas. Aquí ya se puede determinar si
una estructura por ejemplo una expresión matemática mal formada. El análisis que se
realiza es jerárquico es decir en base a árboles de derivación que se obtienen de las
mismas gramáticas.
En teoría, se supone que la salida del analizador sintáctico
es alguna representación del árbol sintáctico que reconoce la secuencia de tokens
suministrada por el analizador léxico.
COMPILADORES
17
Manejo De Errores Sintácticos
Si un compilador tuviera que procesar sólo programas correctos, su diseño e
implantación se simplificarían mucho. Pero los programadores a menudo escriben
programa incorrectos, y un buen compilador debería ayudar al programador a
identificar y localizar errores. Es más, considerar desde el principio el manejo de
errores puede simplificar la estructura de un compilador y mejorar su respuesta a los
errores.
Los errores en la programación pueden ser de los siguientes
tipos:
• Léxicos, producidos al escribir mal un identificador, una palabra clave o un operador.
• Sintácticos, por una expresión aritmética o paréntesis no equilibrados.
• Semánticos, como un operador aplicado a un operando incompatible.
• Lógicos, puede ser una llamada infinitamente recursiva.
El manejo de errores de sintaxis es el más complicado desde
el punto de vista de la Creación de compiladores. Nos interesa que cuando el
compilador encuentre un error, se recupere y siga buscando errores.
1.2 Análisis semántico: en esta fase se busca establecer que el código fuente cumpla
con la semántica solicitada por el compilador, es decir que el código este
correctamente escrito para poder ser interpretado. Este análisis es más difícil de
COMPILADORES
18
formalizar, determina el tipo de los resultados intermedios, comprobar que los
argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si
son compatibles entre sí.
Ejemplo: Suponiendo que tenemos esta línea de código en
C: res=valor1+valor2; El análisis semántico se va a encargar que tanto el valor1 como
el valor2 tengan datos que son compatibles en común y que además se les pueda
aplicar dicho operador. En C el símbolo (+) implica una suma de valores o una unión de
las cadenas.
El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis
sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y
preparar la generación de código.
En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan
directamente desde el analizador sintáctico y son dichas rutinas las que llaman al
generador de código. El instrumento más utilizado para conseguirlo es la gramática de
atributos.
En compiladores de dos o más pasos, el análisis semántico se realiza
independientemente de la generación de código, pasándose información a través de un
archivo intermedio, que normalmente contiene información sobre el árbol sintáctico en
forma lineal izada (para facilitar su manejo y hacer posible su almacenamiento en
memoria auxiliar).
COMPILADORES
19
ANALIZADOR LEXICO
El analizador léxico, también conocido como scanner, lee los caracteres uno a uno
desde la entrada y va formando grupos de caracteres con alguna relación entre sí
(tokens), que constituirán la entrada para la siguiente etapa del compilador. Cada
tokens representa una secuencia de caracteres que son tratados como una única
entidad. Por ejemplo, en Pascal un tokens es la palabra reservada BEGIN, en C:
WHILE, etc. Las tiras específicas sólo tienen tipo (lo que representan), mientras que las
tiras no específicas tienen tipo y valor. Por ejemplo, si “Contador” es un identificador, el
tipo de tokens será identificador y su valor será la cadena “Contador”. El Analizador
Léxico es la etapa del compilador que va a permitir saber si es un lenguaje de formato
libre o no. Frecuentemente va unido al analizador sintáctico en la misma pasada,
funcionando entonces como una subrutina de este último. Ya que es el que va leyendo
los caracteres del programa, ignorará aquellos elementos innecesarios para la
siguiente fase, como los tabuladores, comentarios, espacios en blanco, etc.
Se encarga de buscar los componentes léxicos (tokens En inglés) o palabras que
componen el programa fuente, según unas reglas o patrones. La entrada del analizador
léxico podemos definirla como una secuencia de caracteres.
COMPILADORES
20
Imagen5.analizador léxico.
El analizador léxico tiene que dividir la secuencia de
caracteres en palabras con significado propio y después convertirlo a una secuencia de
terminales desde el punto de vista del analizador sintáctico, que es la entrada del
analizador sintáctico.
El analizador léxico reconoce las palabras en función de una gramática regular de
manera que sus NO TERMINALES se convierten en los elementos de entrada de fases
posteriores. En LEX, por ejemplo, esta gramática se expresa mediante expresiones
regulares.
Función Del Analizador Léxico.
El analizador léxico es la primera fase de un compilador. Su principal función consiste
en leer los caracteres de entrada y elaborar como salida una secuencia de
componentes léxicos que utiliza el analizador sintáctico para hacer el análisis. Esta
interacción, suele aplicarse convirtiendo al analizador léxico en una subrutina o
corrutina del analizador sintáctico.
Imagen6.interaccion de un analizador léxico con el analizador sintáctico.
COMPILADORES
21
AUTOMATA FINITO
Un autómata finito es un modelo matemático de una
máquina que acepta cadenas de un lenguaje definido sobre un alfabeto A. Consiste en
un conjunto finito de estados y un conjunto de transiciones entre esos estados, que
dependen de los símbolos de la cadena de entrada. El autómata finito acepta una
cadena x si la secuencia de transiciones correspondientes a los símbolos de x conduce
desde el estado inicial a un estado final.
Si para todo estado del autómata existe como máximo una
transición definida para cada símbolo del alfabeto, se dice que el autómata es
determinístico (AFD). Si a partir de algún estado y para el mismo símbolo de entrada,
se definen dos o más transiciones se dice que el autómata es no determinístico
(AFND).
Formalmente un autómata finito se define como una 5-upla M =
<E, A, δ, e0, F> donde E: conjunto finito de estados A: alfabeto o conjunto finito de
símbolos de entrada δ: función de transición de estados, que se define como - δ: E x A
→ E si el autómata es determinístico - δ: E x A → P(E) si el autómata es no
determinístico (P(E) es el conjunto potencia de E, es decir el conjunto de todos los
subconjuntos de E) e0: estado inicial; e0 ∈ E F: conjunto de estados finales o estados
de aceptación; F ⊆ E.
Generalmente se asocia con cada autómata un grafo dirigido, llamado diagrama de
transición de estados. Cada nodo del grafo corresponde a un estado. El estado inicial
COMPILADORES
22
se indica mediante una flecha que no tiene nodo origen. Los estados finales se
representan con un círculo doble.
Imagen7.automata y lenguajes formales.
Un autómata finito o máquina de estado finito es un modelo computacional que realiza
cómputos en forma automática sobre una entrada para producir una salida.
COMPILADORES
23
AUTOMATA DE PILA
Los autómatas de pila, en forma similar a como se usan los autómatas finitos, también
se pueden utilizar para aceptar cadenas de un lenguaje definido sobre un alfabeto A.
Los autómatas de pila pueden aceptar lenguajes que no
pueden aceptar los autómatas finitos. Un autómata de pila cuenta con una cinta de
entrada y un mecanismo de control que puede encontrarse en uno de entre un número
finito de estados. Uno de estos estados se designa como estado inicial, y además
algunos estados se llaman de aceptación o finales. A diferencia de los autómatas
finitos, los autómatas de pila cuentan con una memoria auxiliar llamada pila. Los
símbolos (llamados símbolos de pila) pueden ser insertados o extraídos de la pila, de
acuerdo con el manejo lats-in-first-out (LIFO).
Las transiciones entre los estados que ejecutan los autómatas
de pila dependen de los símbolos de entrada y de los símbolos de la pila. El autómata
acepta una cadena x si la secuencia de transiciones, comenzando en estado inicial y
con pila vacía, conduce a un estado final, después de leer toda la cadena x.
COMPILADORES
24
Imagen8. Esta imagen nos muestra cómo se usa un autómata de pila.

Contenu connexe

Tendances

Ventajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftVentajas y desventajas de moprosoft
Ventajas y desventajas de moprosoft
Chuyito Alvarado
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
perlallamas
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
Giancarlo Aguilar
 

Tendances (20)

Tutorial de JFLAP
Tutorial de JFLAPTutorial de JFLAP
Tutorial de JFLAP
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 
Ciclo de instrucción
Ciclo de instrucciónCiclo de instrucción
Ciclo de instrucción
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensamblador
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Algoritmo congruencial aditivo
Algoritmo congruencial aditivoAlgoritmo congruencial aditivo
Algoritmo congruencial aditivo
 
Transacciones
TransaccionesTransacciones
Transacciones
 
Ventajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftVentajas y desventajas de moprosoft
Ventajas y desventajas de moprosoft
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Etapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del SoftwareEtapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del Software
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
Tipos de Autómatas 
Tipos de Autómatas Tipos de Autómatas 
Tipos de Autómatas 
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
macros Lenguaje ensamblador
macros Lenguaje ensambladormacros Lenguaje ensamblador
macros Lenguaje ensamblador
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Ciclo de instrucciones CPU
Ciclo de instrucciones CPUCiclo de instrucciones CPU
Ciclo de instrucciones CPU
 
Clase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensamblador
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Factores de calidad del software
Factores de calidad del softwareFactores de calidad del software
Factores de calidad del software
 

Similaire à Trabajo de compiladores completo alexandra

Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicos
diana8320
 
Introduccion a los lenguajes de programacion
Introduccion a los lenguajes de programacionIntroduccion a los lenguajes de programacion
Introduccion a los lenguajes de programacion
lupitagarcia07
 

Similaire à Trabajo de compiladores completo alexandra (20)

Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicos
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
Proyecto fernando compiladores 1
Proyecto fernando compiladores 1Proyecto fernando compiladores 1
Proyecto fernando compiladores 1
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
Presentación1
Presentación1Presentación1
Presentación1
 
Introducción a la Programación :: Unidad 01 :: Parte 01
Introducción a la Programación :: Unidad 01 :: Parte 01Introducción a la Programación :: Unidad 01 :: Parte 01
Introducción a la Programación :: Unidad 01 :: Parte 01
 
Resumen1
Resumen1Resumen1
Resumen1
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Ensayo
EnsayoEnsayo
Ensayo
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Presentación computación 1_compiladores_e_interpretes
Presentación computación 1_compiladores_e_interpretesPresentación computación 1_compiladores_e_interpretes
Presentación computación 1_compiladores_e_interpretes
 
Programacion
ProgramacionProgramacion
Programacion
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Lenguajes de desarrollo (programación)
Lenguajes de desarrollo (programación)Lenguajes de desarrollo (programación)
Lenguajes de desarrollo (programación)
 
Tema 1.3.- Programación
Tema 1.3.- ProgramaciónTema 1.3.- Programación
Tema 1.3.- Programación
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
Compiladores (1) pedro vasques
Compiladores (1) pedro vasquesCompiladores (1) pedro vasques
Compiladores (1) pedro vasques
 
LENGUAJE DE PROGRAMACION. INVESTIGACION
LENGUAJE DE PROGRAMACION. INVESTIGACIONLENGUAJE DE PROGRAMACION. INVESTIGACION
LENGUAJE DE PROGRAMACION. INVESTIGACION
 
Universidad de panam1.lenguaje de programación
Universidad de panam1.lenguaje de programaciónUniversidad de panam1.lenguaje de programación
Universidad de panam1.lenguaje de programación
 
Introduccion a los lenguajes de programacion
Introduccion a los lenguajes de programacionIntroduccion a los lenguajes de programacion
Introduccion a los lenguajes de programacion
 

Trabajo de compiladores completo alexandra

  • 1. CORPORACION UNIVERSITARIA REMINGTON COMPILADORES COMPILADORES Y SUS FASES ALEXANDRA MOLINA SANCHEZ 18/04/2014
  • 2. COMPILADORES 1 TABLA DE CONTENIDO INTRODUCCION…………………………………………………………………….1 JUSTIFICACION……………………………………………………………………..4 OBJETIVO GENERAL……………………………………………………………….5 OBJETIVO ESPECIFICO……………………………………………………………6 CONCLUSION………………………………………………………………………...7 BIBLIOGRAFIA………………………………………………………………………..8 VOCABULARIO……………………………………………………………………….9 COMPILADOR Y SUS FASES………………………………………………………11 FASES DE UN COMPILADOR………………………………………………………16 MANEJO DE ERRORES SINTATICOS…………………………………………….17 ANALIZADOR LEXICO……………………………………………………………….19 FUNCION DEL ANALIZADOR LEXICO…………………………………………….20 AUTOMATA FINITO……………………………………………………………………21 AUTOMATA DE PILA………………………………………………………………….23
  • 3. COMPILADORES 2 INTRODUCCION "¿Cómo funciona un compilador? ", es la pregunta de todo aquel que se hace llamar programador, a grandes rasgos un compilador toma un programa escrito en un lenguaje de programación con una gramática, sintaxis y semántica definida, revisa que este dentro de las pautas de definición del lenguaje, y lo traduce en programa de salida escrito en lenguaje binario, el cual es entendido por el ordenador y por lo tanto puede ser ejecutado por el mismo (recordar que un intérprete a diferencia de un compilador no traduce todo el programa sino que va realizando la traducción e interpretación de la misma paso a paso, sin crear ningún programa de salida ejecutable). Las partes del proceso de compilación se dividen en dos: una llamada fase de Análisis y otra llamada fase de Sintaxis, las cuales interactúan entre sí para la creación de la tabla de símbolos y el control del manejador de errores, dentro del análisis hay tres etapas llamadas análisis léxico, análisis sintáctico, análisis semántico. Dentro de la fase de Síntesis existen las etapas de generación de código intermedio, optimización de código intermedio, y generación de código. Al tener que describir cómo funciona un compilador tenemos que tener en claro en no confundir los términos compilador y compilación, se debe entender que al decir compilador nos referimos al programa, y al decir compilación al proceso en sí. En esencia ambos términos cumplen con la definición más simple de un compilador, es decir, sea el programa compilador o el proceso de compilación, ambos ES AQUEL QUE SE ENCARGA DE HACER EJECUTABLE NUESTRO PROGRAMA.
  • 4. COMPILADORES 3 reciben como entrada un código escrito en algún lenguaje y producen como salida otro código escrito en otro lenguaje.
  • 5. COMPILADORES 4 JUSTIFICASION La teoría de Compiladores es un área de conocimientos fundamental para la formación del estudiante de Ciencias de la Computación. Posee una relevancia práctica y teórica en la formación del futuro profesional tanto en el aspecto de la programación de computadoras Como en la construcción de la base teórica de conocimientos del mismo. . Es importante que un profesional de la informática tenga una sólida formación en este tema, ya que aunque durante su vida profesional no se dedique al diseño de compiladores, sus aplicaciones podrán ser mucho más eficientes si aplica los conocimientos adquiridos.
  • 6. COMPILADORES 5 OBJETIVO GENERAL Comprender el problema al que se enfrenta un compilador. Comprender los Algoritmos que se utilizan para resolver cada una de las fases del compilador. Dominar completamente el proceso para convertir un lenguaje de alto nivel a un Lenguaje de bajo nivel.
  • 7. COMPILADORES 6 OBJETIVO ESPECIFICO 1.1 Aplicar el concepto de compiladores como alternativa de solución de problemas. 1.2 Que nosotros los estudiantes realicemos una aplicación interactiva que trabaje conjuntamente con el analizador. 1.3Que el estudiante sea capaz de crear gramáticas y de recuperarse de errores léxicos, sintácticos. 1.4Iniciar el proceso de aprendizaje de herramientas generadoras de Analizadores Léxicos y Sintácticos.
  • 8. COMPILADORES 7 CONCLUSION Comprendí que un compilador, requiere de una sintaxis y lenguajes específicos, ya que, al igual que el lenguaje humano, si no lo escribimos correctamente el compilador no hará lo que deseamos. Y que en la compilación hay dos partes: Análisis y Síntesis. La parte del análisis divide al programa fuente en sus elementos componentes y crea una representación intermedia. Aprendí que las herramientas que muestran tipos de análisis de programas fuente, son muy útiles al momento de crear un programa al codificar un algoritmo, ya que estas herramientas nos ayudan formateando el texto, corrigiendo errores, dando tips; para que nosotros como programadores seamos más eficientes al momento de crear alguna aplicación.
  • 10. COMPILADORES 9 VOCABULARIO 1. bytecode: Es un código intermedio más abstracto que el código máquina. 2. lexicográfico: persona que recopila o selecciona los vocablos que han entrar en un léxico. 3. tokens: un token o también llamado componente léxico es una cadena de caracteres que tiene un significado coherente en cierto lenguaje de programación. 4. while: El bucle while o bucle mientras es una estructura de la mayoría de los lenguajes de programación estructurados cuyo propósito es repetir un bloque de código mientras una condición se mantenga verdadera. 5. subrutina: E n computación una subrutina o subprograma (también llamado procedimientos, función o rutina), como idea general se presenta como un su algoritmo que forma parte del algoritmo principal. 6. corrutina: Una corrutina es un componente que poseen los programas que son capaces de crear subrutinas.
  • 12. COMPILADORES 11 UN COMPILADOR Y SUS FASES Compilador Es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa más manejable por un computador. Imagen1.esta imagen nos muestra como traduce los textos del compilador. Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.
  • 13. COMPILADORES 12 El compilador es el que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora. Imagen2. Diagrama a bloques de la operación de un buen compilador.
  • 14. COMPILADORES 13 Básicamente, El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador separado dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real). Un compilador es un programa informático, que se encarga de traducir el código fuente de una aplicación que este en desarrollo, es decir convierte un programa hecho en lenguaje de programación de alto nivel a un lenguaje de máquina, el cual es conocido como de bajo nivel, de tal forma que sea más entendible y mucho más fácil de procesar en el equipo en el que se está ejecutando.
  • 15. COMPILADORES 14 Imagen3. Estructura de proceso de compilación. De igual manera un traductor es el que toma como entrada un texto escrito y da como salida otro texto en un lenguaje llamado objeto. Un compilador es un programa que crea una lista de instrucciones de código máquina basándose en un código fuente resultando en un programa listo y rápido para usarse. Por otro lado el intérprete es más lento puesto que, no produce ningún código sino que lo reconoce. Ambos son lenguajes de programación. Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representación en otra. En la imagen 4 se muestra una descomposición típica de un compilador. En la práctica se pueden agrupar fases y las representaciones intermedias entres las fases agrupadas no necesitan ser construidas explícitamente. Programa fuente.
  • 16. COMPILADORES 15 Imagen4. Nos muestra una descomposición típica de un compilador. El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar.
  • 17. COMPILADORES 16 Fases De Un Compilador 1. El análisis es la fase en la cual se trata de la escritura correcta del código fuente. Esta a su vez comprende varias fases: Análisis léxico: esta fase es la encargada de leer el código fuente y separarlo en lotes para poder ser leído por el análisis sintáctico. Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el toquen por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectar muchos errores por su característica. 1.1 Análisis sintáctico: esta fase evalúa los lotes de código con el fin de que este cumpla con los requerimientos definidos por el compilador. En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aquí ya se puede determinar si una estructura por ejemplo una expresión matemática mal formada. El análisis que se realiza es jerárquico es decir en base a árboles de derivación que se obtienen de las mismas gramáticas. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico.
  • 18. COMPILADORES 17 Manejo De Errores Sintácticos Si un compilador tuviera que procesar sólo programas correctos, su diseño e implantación se simplificarían mucho. Pero los programadores a menudo escriben programa incorrectos, y un buen compilador debería ayudar al programador a identificar y localizar errores. Es más, considerar desde el principio el manejo de errores puede simplificar la estructura de un compilador y mejorar su respuesta a los errores. Los errores en la programación pueden ser de los siguientes tipos: • Léxicos, producidos al escribir mal un identificador, una palabra clave o un operador. • Sintácticos, por una expresión aritmética o paréntesis no equilibrados. • Semánticos, como un operador aplicado a un operando incompatible. • Lógicos, puede ser una llamada infinitamente recursiva. El manejo de errores de sintaxis es el más complicado desde el punto de vista de la Creación de compiladores. Nos interesa que cuando el compilador encuentre un error, se recupere y siga buscando errores. 1.2 Análisis semántico: en esta fase se busca establecer que el código fuente cumpla con la semántica solicitada por el compilador, es decir que el código este correctamente escrito para poder ser interpretado. Este análisis es más difícil de
  • 19. COMPILADORES 18 formalizar, determina el tipo de los resultados intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre sí. Ejemplo: Suponiendo que tenemos esta línea de código en C: res=valor1+valor2; El análisis semántico se va a encargar que tanto el valor1 como el valor2 tengan datos que son compatibles en común y que además se les pueda aplicar dicho operador. En C el símbolo (+) implica una suma de valores o una unión de las cadenas. El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código. En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generador de código. El instrumento más utilizado para conseguirlo es la gramática de atributos. En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, que normalmente contiene información sobre el árbol sintáctico en forma lineal izada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar).
  • 20. COMPILADORES 19 ANALIZADOR LEXICO El analizador léxico, también conocido como scanner, lee los caracteres uno a uno desde la entrada y va formando grupos de caracteres con alguna relación entre sí (tokens), que constituirán la entrada para la siguiente etapa del compilador. Cada tokens representa una secuencia de caracteres que son tratados como una única entidad. Por ejemplo, en Pascal un tokens es la palabra reservada BEGIN, en C: WHILE, etc. Las tiras específicas sólo tienen tipo (lo que representan), mientras que las tiras no específicas tienen tipo y valor. Por ejemplo, si “Contador” es un identificador, el tipo de tokens será identificador y su valor será la cadena “Contador”. El Analizador Léxico es la etapa del compilador que va a permitir saber si es un lenguaje de formato libre o no. Frecuentemente va unido al analizador sintáctico en la misma pasada, funcionando entonces como una subrutina de este último. Ya que es el que va leyendo los caracteres del programa, ignorará aquellos elementos innecesarios para la siguiente fase, como los tabuladores, comentarios, espacios en blanco, etc. Se encarga de buscar los componentes léxicos (tokens En inglés) o palabras que componen el programa fuente, según unas reglas o patrones. La entrada del analizador léxico podemos definirla como una secuencia de caracteres.
  • 21. COMPILADORES 20 Imagen5.analizador léxico. El analizador léxico tiene que dividir la secuencia de caracteres en palabras con significado propio y después convertirlo a una secuencia de terminales desde el punto de vista del analizador sintáctico, que es la entrada del analizador sintáctico. El analizador léxico reconoce las palabras en función de una gramática regular de manera que sus NO TERMINALES se convierten en los elementos de entrada de fases posteriores. En LEX, por ejemplo, esta gramática se expresa mediante expresiones regulares. Función Del Analizador Léxico. El analizador léxico es la primera fase de un compilador. Su principal función consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis. Esta interacción, suele aplicarse convirtiendo al analizador léxico en una subrutina o corrutina del analizador sintáctico. Imagen6.interaccion de un analizador léxico con el analizador sintáctico.
  • 22. COMPILADORES 21 AUTOMATA FINITO Un autómata finito es un modelo matemático de una máquina que acepta cadenas de un lenguaje definido sobre un alfabeto A. Consiste en un conjunto finito de estados y un conjunto de transiciones entre esos estados, que dependen de los símbolos de la cadena de entrada. El autómata finito acepta una cadena x si la secuencia de transiciones correspondientes a los símbolos de x conduce desde el estado inicial a un estado final. Si para todo estado del autómata existe como máximo una transición definida para cada símbolo del alfabeto, se dice que el autómata es determinístico (AFD). Si a partir de algún estado y para el mismo símbolo de entrada, se definen dos o más transiciones se dice que el autómata es no determinístico (AFND). Formalmente un autómata finito se define como una 5-upla M = <E, A, δ, e0, F> donde E: conjunto finito de estados A: alfabeto o conjunto finito de símbolos de entrada δ: función de transición de estados, que se define como - δ: E x A → E si el autómata es determinístico - δ: E x A → P(E) si el autómata es no determinístico (P(E) es el conjunto potencia de E, es decir el conjunto de todos los subconjuntos de E) e0: estado inicial; e0 ∈ E F: conjunto de estados finales o estados de aceptación; F ⊆ E. Generalmente se asocia con cada autómata un grafo dirigido, llamado diagrama de transición de estados. Cada nodo del grafo corresponde a un estado. El estado inicial
  • 23. COMPILADORES 22 se indica mediante una flecha que no tiene nodo origen. Los estados finales se representan con un círculo doble. Imagen7.automata y lenguajes formales. Un autómata finito o máquina de estado finito es un modelo computacional que realiza cómputos en forma automática sobre una entrada para producir una salida.
  • 24. COMPILADORES 23 AUTOMATA DE PILA Los autómatas de pila, en forma similar a como se usan los autómatas finitos, también se pueden utilizar para aceptar cadenas de un lenguaje definido sobre un alfabeto A. Los autómatas de pila pueden aceptar lenguajes que no pueden aceptar los autómatas finitos. Un autómata de pila cuenta con una cinta de entrada y un mecanismo de control que puede encontrarse en uno de entre un número finito de estados. Uno de estos estados se designa como estado inicial, y además algunos estados se llaman de aceptación o finales. A diferencia de los autómatas finitos, los autómatas de pila cuentan con una memoria auxiliar llamada pila. Los símbolos (llamados símbolos de pila) pueden ser insertados o extraídos de la pila, de acuerdo con el manejo lats-in-first-out (LIFO). Las transiciones entre los estados que ejecutan los autómatas de pila dependen de los símbolos de entrada y de los símbolos de la pila. El autómata acepta una cadena x si la secuencia de transiciones, comenzando en estado inicial y con pila vacía, conduce a un estado final, después de leer toda la cadena x.
  • 25. COMPILADORES 24 Imagen8. Esta imagen nos muestra cómo se usa un autómata de pila.