SlideShare una empresa de Scribd logo
1 de 21
1
COMPILADORES
COMPILADORES Y ANALIZADOR LEXICOS
DIANA MILENA BOTELLO MONCADA
CORPORACION UNIVERSITARIA REMINGTON
FACULTAD DE INGENIERIA
INGENIERIA DE SISTEMAS
SEMESTRE VI
2014
2
COMPILADORES
Tabla de contenido
INTRODUCCION…………………………………………………………….……………….3
JUSTIFICACION……………………………………………………………….……………..4
OBJETIVOS GENERALES Y ESPECIFICOS…………….……………………………….5
COMPILADRO………………………………………………………………………………..6
FASES DE
COMPILADOR…………………..……………………………………………………………8
ANALIZADOR LÉXICO……………………………………………………………………. 10
AUTÓMATA FINITO……………………………..………………………………….………11
AUTÓMATA DE PILA……………………………………………………………….………13
DIAGRAMA DE ESTADO…………………………………………………………-………14
MAQUINA DE PILA………………………………………………………………..…….….15
CONCLUSIONES……………………..……………………………………………….……16
BIBLIOGRAFÍA………………………………………………………………………………18
VOCABULARIO………………………….…………………………………………….……19
3
COMPILADORES
1. INTRODUCCION
En un mundo informatizado como en el que vivimos, en el que cada día que pasa
dependemos más y más de un sistema informático eficiente, el cual debe
estar preparado para brindarnos la más alta calidad de servicios y prestaciones.
Además de ser sencillo en su manejo y sobre todo confiable, siendo estas
características indispensables para el usuario final. Quien no se fija, ni pregunta cómo
se realiza determinada tarea, pero si es buen critico a la hora de ver
resultados, pero hay otros que contrarios a estos, se hace la pregunta del millón,
"¿Cómo se logra hacer tal y tal cosa? ,"¿Cómo es posible que un graficado trabaje tan
rápido?, ¿Cómo es posible que un procesador de palabra a la hora de usar un
diccionario sea tan eficiente?, ¿Cómo es posible llevar los resultados de una
aplicación a otra?, o ¿Cómo es posible que un programa que fue creado por una
empresa puede trabajar con los datos de obtenidos de otro programa, echo por otra
empresa?.Muchas pueden ser las respuestas, algunos argumentaran q
ue es el sistemaoperativo, otros dirán que son las normas y estándares
establecidos
4
COMPILADORES
2. JUSTIFICACIÓN
Vemos, por tanto, que los lenguajes humanos, son muy abstractos y poco precisos, no
son aptos para una buena comunicación con los computadores, altamente precisos y
estructurados. Por lo que se consigue establecer esta comunicación entre seres
humanos y computadores con un tipo de lenguaje a medio camino entre ambos
interlocutores, conocido como lenguaje de programación, el cual se puede definir como
un conjunto de notaciones usadas para describir procesos computacionales a las
personas y las maquinas (programas), y su importancia radica en que han ayudado a
construir el mundo actual que conocemos basado en el computador, esto debido a que
todo el software existente en un computador debe ser escrito en algún lenguaje de
programación, pero antes de que un programa pueda ser ejecutado realmente en un
computador, el mismo primero debe ser traducido a una forma especial que pueda ser
ejecutada y comprendida por un computador, siendo esta labor de traducción llevada a
cabo por un software muy especializado conocido con el nombre de compilador o
interprete.
5
COMPILADORES
3. OBJETIVOS GENERALES
Adquirir una visión general de las técnicas de implementación de traductores de
lenguaje de programación.
En esta asignatura se ponen en juego, desde un punto de vista aplicado, los
conocimientos adquiridos a lo largo de la carrera proporcionan un buen ejercicio de
síntesis sobre la teoría, los métodos y las técnicas aprendidas en programación tales
como los compiladores sus fases y dada uno de sus componentes que se
proporcionan a lo largo de este proceso.
3.1 OBJETIVOS ESPECIFICOS
Conocer el problema que debe resolver un compilador, su
Complejidad así como las fases que lo conforman
Conocer el funcionamiento del análisis léxico, el tipo de
Gramáticas que debe reconocer y la forma en la que se puede implementar
Aprender a implementar programas en código objeto, para
Después aprender a traducir código de un lenguaje de alto nivel a código objeto
6
COMPILADORES
4. 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.
Un 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 una computadora.
Como parte importante de este proceso de traducción, el
compilador informa a su usuario de la presencia de errores en el programa fuente.
La construcción de un compilador involucra la división del
proceso en una serie de fases que variará con su complejidad. Generalmente estas
fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del
programa objeto.
 ANÁLISIS: Se trata de la comprobación de la corrección del programa fuente, e
incluye las fases correspondientes al
 Análisis léxico (que consiste en la descomposición del programa fuente en
componentes léxicos)
7
COMPILADORES
 Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales)
y Análisis semántico (comprobación de la validez semántica de las sentencias
aceptadas en la fase de Análisis Sintáctico).
 Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y
suele estar formado por una o varias combinaciones de fases de Generación de
Código (normalmente se trata de código intermedio o de código objeto) y de
Optimización de Código (en las que se busca obtener un código lo más eficiente
posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden
agrupar en Front-end y Back-end:
 Front-end: es la parte que analiza el código fuente, comprueba su validez, genera
el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele
ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está
compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de
Código Intermedio.
 Back-end: es la parte que genera el código máquina, específico de una plataforma,
a partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para
generar el código máquina de varios lenguajes de programación distintos y que el
mismo Front End que sirve para analizar el código fuente de un lenguaje de
programación concreto sirva para generar código máquina en varias plataformas
8
COMPILADORES
distintas. Suele incluir la generación y optimización del código dependiente de la
máquina.
El código que genera el Back End normalmente no se puede
ejecutar directamente, sino que necesita ser enlazado por un
programa enlazador (linker)
1. FIGURA DE UN COMPILADOR
5. FASES DE UN COMPILADOR
Un compilador está formado por dos procesos análisis y síntesis.
9
COMPILADORES
1. ANALISIS: El 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ídos por el análisis sintáctico.
 Análisis sintáctico: esta fase evalúa los lotes de código con el fin de que
este cumpla con los requisitos definidos por el compilador.
 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.
 Síntesis: Después del proceso de análisis se procede a generar grupos
de los componentes que conforman el programa, para generar una salida.
 Generación de código intermedio: este código se genera con el fin de
mejorar el uso de la memoria con el fin de optimizar código fuente.
 Optimización de código: El objeto de esta fase es mejorar el código para
que sea más rápido ejecutarlo.
 Generación de código: Aquí se crea el código final de salida que va a ser
interpretado por la máquina.
10
COMPILADORES
2. IMAGEN DE FASES DE UN COMPILADOR
FUNCION.
La función principal que cumple es traducir a un lenguaje
mucho más sencillo y entendible por la maquina informa al usuario si existe errores en
el código fuente con el fin de ejecutar la aplicación sin problema, si existe algún error
simplemente se detiene.
También registra los identificadores utilizados en el
programa fuente y toma la información de los atributos de cada identificador.
SU FUNCION
11
COMPILADORES
3. IMAGEN DE LAS FASES DE UN COMPILADOR
6. ANALIZADOR LEXICO
¿Qué es?
Es una herramienta de un compilador que nos ayuda a leer los caracteres de entrada
para formar componentes y así poder identificarlos y pasar la información ha analizado
sintáctico. Los componentes léxicos representen: palabras reservadas: if, while, do etc.
Operadores.=+_*/==><!=..Constantes numéricas Constante de caracteres.
¿Cuál es su función?
Construye elementos léxicos llamados patrones que serán utilizados posteriormente
por un analizador sintáctico. Un patrón es una pareja ordenada compuesta por un
tokensy. Un lexema es la secuencia de caracteres que coinciden con un tokens.
Salida del analizador léxico: la salida del analizador léxico es un conjunto de tokens
¿Qué es un token? son elementos reservados en el lenguaje de programación
ejemplo: identificadores enteros, palabras reservadas, espacios en blanco, paréntesis.
12
COMPILADORES
4.FIGURA DE ANALIZADOR LEXICO
7. AUTOMATA FINITO
Un autómata finito o máquina de estado finito es un modelo matemático de un sistema
que recibe una cadena constituida por símbolos de un alfabeto y determina si esa
cadena pertenece al lenguaje que el autómata reconoce.
Estos se definen mediante una quíntupla (E, Q, F, q0, F) donde:
E: alfabeto de entrada
Q: conjunto de estados; es conjunto finito no vacío.
F: función de transición. f(p.a.)=q
q0:(pertenecientes a Q) estado inicial.
F:(perteneciente a Q) conjunto de estados finales o de aceptación.
CLASIFICACION
Los autómatas se pueden clasificar en:
Deterministas
 Cada combinación (estado, símbolo de entrada) produce un solo estado.
No Determinista
13
COMPILADORES
 Cada combinación (estado, símbolo de entrada) produce varios estados y
además son posibles las transiciones.
5.FIGURA DE AUTOMATA FINITO
14
COMPILADORES
8. AUTOMATA DE PILA
Un modelo matemático de un sistema que recibe una cadena constituida por símbolos
de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata
reconoce. El lenguaje que reconoce un autómata con pila pertenece al grupo de los
lenguajes libres de contexto en la clasificación de la jerarquía de Chomsky.
.
Un autómata de pila es una séptupla M= (Q,Σ,∆,q0,δ,F) donde:
Q= conjunto finito de estados
Σ= alfabeto de entrada
∆= alfabeto de pila
q0∈Q estado inicial
15
COMPILADORES
9. DIAGRAMA DE ESTADOS
Es una manera para caracterizar un cambio en un sistema, es decir que los objetos que
lo componen modificaron su estado como respuesta a los sucesos y al tiempo.
 Elementos de un diagrama de estado: Estado, evento, punto final, transiciones
 Función de los diagramas de estado: se indican que eventos hacen que se pase
de un estado a otro y cuáles son las respuestas y acciones que genera. También
ilustra que eventos pueden cambiar el estado de los objetos.
 Partes de un diagrama de estado: Identifica un periodo de tiempo del objeto (no
instantáneo) en el cual el objeto está esperando alguna operación, tiene cierto
estado característico o puede recibir cierto tipo de estímulos.
 EVENTOS: Es una ocurrencia que puede causar la transición de estados por
medio de eventos, puede representarse el momento en el cual se envían
mensajes a otros objetos.
Diagrama de Estados
16
COMPILADORES
Concepto: Muestra la secuencia de estados por los que pasa
bien un caso de uso, un objeto a lo largo de su vida, o
bien todo el sistema
6 IMAGEN DIAGRMA DE ESTADOS
10. MAQUINA DE PILA
Es un modelo computacional es en el cual la memoria de la computadora toma la forma
de una o más pilas. El término también se refiere a un computador real implementando
o simulando una máquina de pila idealizada.
Adicionalmente, una máquina de pila también puede
referirse a una maquina verdadera o simulada con un conjunto de instrucciones de “0
operando” En tal máquina, la mayoría de las instrucciones implícitamente operan en
valores en el tope de la pila y reemplazan esos valores por el resultado. Típicamente
tales maquinas también tienen una instrucción “load” y una instrucción “store” que leen
y escriben a posiciones arbitrarias de la RAM (como el resto de las instrucciones, las
17
COMPILADORES
instrucciones “load” y “store” no necesitan ningún operando en una máquina de pila
típica-ellas siempre toman la dirección de la RAM que se quiere leer o escribir desde el
tope de la pila.
La ventaja de las máquinas de pila (“conjunto de instrucciones de 0 operando”) sobre
las máquinas de acumulador (“conjunto de instrucciones de 1 operando”) y las
máquinas de registro (“conjunto de instrucciones de 2 operandos”) o un (“conjunto de
instrucciones de 3 operandos”) es que los programas escritos para un conjunto de
instrucciones de “0 operandos” generalmente tienen una densidad de código más alta
que los programas equivalentes escritos para otros conjuntos de instrucciones
18
COMPILADORES
11. CONCLUSIONES.
Este trabajo servirá mucho en el momento de la creación de un compilador, ya que en
él se detallan todas y cada una de las partes que involucran a este. Primeramente
investigue que existen distintos tipos de compiladores, me gustaría crear un compilador
de optimación, ya que pienso que es muy útil a la hora de crear un algoritmo o
programa. La función de un compiladores es leer un programa escrito es un lenguaje,
en este caso el lenguaje fuente, y lo traduce a un programa equivalente en otro
lenguaje, el lenguaje objeto. Me parece fascinante que nosotros podamos crear un
compilador en seis meses (en un curso), cuando en los años 50, ya que en aquellos
tiempos se tardaron hasta 18 años trabajando en un compilador.
Por otro lado, 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.
También he notado como todas nuestras materias se van complementando y
enlazando, por ejemplo, en matemáticas discretas vimos la representación de árboles,
los cuales usamos aquí. Igualmente en estructura de datos I, vimos métodos de
19
COMPILADORES
ordenamiento que las gramáticas de los compiladores usan. Por lo tanto, no parece tan
complicado crear un compilador, sólo se necesitan los conocimientos adecuados y
dedicarle su tiempo.
20
COMPILADORES
11. BIBLIOGRAFIA.
Principios, técnicas y herramientas, Alfred V. Aho, Ravi Sethi, Jeffrey
D. Ullman. Addison – Wesley iberoamericana.
http://www.dlsi.ua.es/docencia/asignaturas/comp1/comp1.html
http://www.cps.unizar.es/~ezpeleta/COMPI
http://www.ii.uam.es/~alfonsec
mentales. B. Teufel, S. Schmidt, T. Teufel. Addison
Wesley Iberoamericana.
21
COMPILADORES
12.VOCABULARIO.
 LOAD: alabar, encomiar, elogiar, aclamar, ensalzar, enaltecer
 STORE: (voz fr.) m. estor.
 RAM: Random Access Memory) RAM
 TOKENS: señal, muestra, prueba

Más contenido relacionado

La actualidad más candente

Compilador e interpretador
Compilador e interpretadorCompilador e interpretador
Compilador e interpretadorFrancisco Leal
 
Los compiladores erika y carolina
Los compiladores erika y carolinaLos compiladores erika y carolina
Los compiladores erika y carolinaErika Flores
 
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
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador FuncionamientoKriz Kozlov
 
Fundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónFundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónTensor
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazadorRickyZhengHu
 
Compiladores y analizador léxico
Compiladores y analizador léxicoCompiladores y analizador léxico
Compiladores y analizador léxicokatherine133
 
Cap2 compiladores
Cap2 compiladoresCap2 compiladores
Cap2 compiladoresCJAO
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladorespaulina8
 
Estructura de un interprete
Estructura de un interpreteEstructura de un interprete
Estructura de un interpreteperlallamas
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesIsrael Castillo Cruz
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosDIEGO BAROJA
 

La actualidad más candente (20)

Compilador e interpretador
Compilador e interpretadorCompilador e interpretador
Compilador e interpretador
 
Los compiladores erika y carolina
Los compiladores erika y carolinaLos compiladores erika y carolina
Los compiladores erika y carolina
 
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
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
Pasadas multiples
Pasadas       multiplesPasadas       multiples
Pasadas multiples
 
Traductores de lenguajes
Traductores   de    lenguajesTraductores   de    lenguajes
Traductores de lenguajes
 
Fundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónFundamentos y Lógica de Programación
Fundamentos y Lógica de Programación
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
 
Compiladores y analizador léxico
Compiladores y analizador léxicoCompiladores y analizador léxico
Compiladores y analizador léxico
 
Cap2 compiladores
Cap2 compiladoresCap2 compiladores
Cap2 compiladores
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladores
 
Estructura de un interprete
Estructura de un interpreteEstructura de un interprete
Estructura de un interprete
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Compiladores conceptos
Compiladores conceptosCompiladores conceptos
Compiladores conceptos
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
 
Compilador
CompiladorCompilador
Compilador
 

Similar a Compiladores y analizador lexicos

Similar a Compiladores y analizador lexicos (20)

Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Resumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamachoResumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamacho
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Compilador (by BSMM)
Compilador    (by  BSMM)Compilador    (by  BSMM)
Compilador (by BSMM)
 
H:\compiladores
H:\compiladoresH:\compiladores
H:\compiladores
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Programacion
ProgramacionProgramacion
Programacion
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Programacion
Programacion Programacion
Programacion
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 

Compiladores y analizador lexicos

  • 1. 1 COMPILADORES COMPILADORES Y ANALIZADOR LEXICOS DIANA MILENA BOTELLO MONCADA CORPORACION UNIVERSITARIA REMINGTON FACULTAD DE INGENIERIA INGENIERIA DE SISTEMAS SEMESTRE VI 2014
  • 2. 2 COMPILADORES Tabla de contenido INTRODUCCION…………………………………………………………….……………….3 JUSTIFICACION……………………………………………………………….……………..4 OBJETIVOS GENERALES Y ESPECIFICOS…………….……………………………….5 COMPILADRO………………………………………………………………………………..6 FASES DE COMPILADOR…………………..……………………………………………………………8 ANALIZADOR LÉXICO……………………………………………………………………. 10 AUTÓMATA FINITO……………………………..………………………………….………11 AUTÓMATA DE PILA……………………………………………………………….………13 DIAGRAMA DE ESTADO…………………………………………………………-………14 MAQUINA DE PILA………………………………………………………………..…….….15 CONCLUSIONES……………………..……………………………………………….……16 BIBLIOGRAFÍA………………………………………………………………………………18 VOCABULARIO………………………….…………………………………………….……19
  • 3. 3 COMPILADORES 1. INTRODUCCION En un mundo informatizado como en el que vivimos, en el que cada día que pasa dependemos más y más de un sistema informático eficiente, el cual debe estar preparado para brindarnos la más alta calidad de servicios y prestaciones. Además de ser sencillo en su manejo y sobre todo confiable, siendo estas características indispensables para el usuario final. Quien no se fija, ni pregunta cómo se realiza determinada tarea, pero si es buen critico a la hora de ver resultados, pero hay otros que contrarios a estos, se hace la pregunta del millón, "¿Cómo se logra hacer tal y tal cosa? ,"¿Cómo es posible que un graficado trabaje tan rápido?, ¿Cómo es posible que un procesador de palabra a la hora de usar un diccionario sea tan eficiente?, ¿Cómo es posible llevar los resultados de una aplicación a otra?, o ¿Cómo es posible que un programa que fue creado por una empresa puede trabajar con los datos de obtenidos de otro programa, echo por otra empresa?.Muchas pueden ser las respuestas, algunos argumentaran q ue es el sistemaoperativo, otros dirán que son las normas y estándares establecidos
  • 4. 4 COMPILADORES 2. JUSTIFICACIÓN Vemos, por tanto, que los lenguajes humanos, son muy abstractos y poco precisos, no son aptos para una buena comunicación con los computadores, altamente precisos y estructurados. Por lo que se consigue establecer esta comunicación entre seres humanos y computadores con un tipo de lenguaje a medio camino entre ambos interlocutores, conocido como lenguaje de programación, el cual se puede definir como un conjunto de notaciones usadas para describir procesos computacionales a las personas y las maquinas (programas), y su importancia radica en que han ayudado a construir el mundo actual que conocemos basado en el computador, esto debido a que todo el software existente en un computador debe ser escrito en algún lenguaje de programación, pero antes de que un programa pueda ser ejecutado realmente en un computador, el mismo primero debe ser traducido a una forma especial que pueda ser ejecutada y comprendida por un computador, siendo esta labor de traducción llevada a cabo por un software muy especializado conocido con el nombre de compilador o interprete.
  • 5. 5 COMPILADORES 3. OBJETIVOS GENERALES Adquirir una visión general de las técnicas de implementación de traductores de lenguaje de programación. En esta asignatura se ponen en juego, desde un punto de vista aplicado, los conocimientos adquiridos a lo largo de la carrera proporcionan un buen ejercicio de síntesis sobre la teoría, los métodos y las técnicas aprendidas en programación tales como los compiladores sus fases y dada uno de sus componentes que se proporcionan a lo largo de este proceso. 3.1 OBJETIVOS ESPECIFICOS Conocer el problema que debe resolver un compilador, su Complejidad así como las fases que lo conforman Conocer el funcionamiento del análisis léxico, el tipo de Gramáticas que debe reconocer y la forma en la que se puede implementar Aprender a implementar programas en código objeto, para Después aprender a traducir código de un lenguaje de alto nivel a código objeto
  • 6. 6 COMPILADORES 4. 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. Un 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 una computadora. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente. La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.  ANÁLISIS: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al  Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos)
  • 7. 7 COMPILADORES  Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).  Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible). Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end:  Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.  Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End. Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas
  • 8. 8 COMPILADORES distintas. Suele incluir la generación y optimización del código dependiente de la máquina. El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker) 1. FIGURA DE UN COMPILADOR 5. FASES DE UN COMPILADOR Un compilador está formado por dos procesos análisis y síntesis.
  • 9. 9 COMPILADORES 1. ANALISIS: El 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ídos por el análisis sintáctico.  Análisis sintáctico: esta fase evalúa los lotes de código con el fin de que este cumpla con los requisitos definidos por el compilador.  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.  Síntesis: Después del proceso de análisis se procede a generar grupos de los componentes que conforman el programa, para generar una salida.  Generación de código intermedio: este código se genera con el fin de mejorar el uso de la memoria con el fin de optimizar código fuente.  Optimización de código: El objeto de esta fase es mejorar el código para que sea más rápido ejecutarlo.  Generación de código: Aquí se crea el código final de salida que va a ser interpretado por la máquina.
  • 10. 10 COMPILADORES 2. IMAGEN DE FASES DE UN COMPILADOR FUNCION. La función principal que cumple es traducir a un lenguaje mucho más sencillo y entendible por la maquina informa al usuario si existe errores en el código fuente con el fin de ejecutar la aplicación sin problema, si existe algún error simplemente se detiene. También registra los identificadores utilizados en el programa fuente y toma la información de los atributos de cada identificador. SU FUNCION
  • 11. 11 COMPILADORES 3. IMAGEN DE LAS FASES DE UN COMPILADOR 6. ANALIZADOR LEXICO ¿Qué es? Es una herramienta de un compilador que nos ayuda a leer los caracteres de entrada para formar componentes y así poder identificarlos y pasar la información ha analizado sintáctico. Los componentes léxicos representen: palabras reservadas: if, while, do etc. Operadores.=+_*/==><!=..Constantes numéricas Constante de caracteres. ¿Cuál es su función? Construye elementos léxicos llamados patrones que serán utilizados posteriormente por un analizador sintáctico. Un patrón es una pareja ordenada compuesta por un tokensy. Un lexema es la secuencia de caracteres que coinciden con un tokens. Salida del analizador léxico: la salida del analizador léxico es un conjunto de tokens ¿Qué es un token? son elementos reservados en el lenguaje de programación ejemplo: identificadores enteros, palabras reservadas, espacios en blanco, paréntesis.
  • 12. 12 COMPILADORES 4.FIGURA DE ANALIZADOR LEXICO 7. AUTOMATA FINITO Un autómata finito o máquina de estado finito es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. Estos se definen mediante una quíntupla (E, Q, F, q0, F) donde: E: alfabeto de entrada Q: conjunto de estados; es conjunto finito no vacío. F: función de transición. f(p.a.)=q q0:(pertenecientes a Q) estado inicial. F:(perteneciente a Q) conjunto de estados finales o de aceptación. CLASIFICACION Los autómatas se pueden clasificar en: Deterministas  Cada combinación (estado, símbolo de entrada) produce un solo estado. No Determinista
  • 13. 13 COMPILADORES  Cada combinación (estado, símbolo de entrada) produce varios estados y además son posibles las transiciones. 5.FIGURA DE AUTOMATA FINITO
  • 14. 14 COMPILADORES 8. AUTOMATA DE PILA Un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. El lenguaje que reconoce un autómata con pila pertenece al grupo de los lenguajes libres de contexto en la clasificación de la jerarquía de Chomsky. . Un autómata de pila es una séptupla M= (Q,Σ,∆,q0,δ,F) donde: Q= conjunto finito de estados Σ= alfabeto de entrada ∆= alfabeto de pila q0∈Q estado inicial
  • 15. 15 COMPILADORES 9. DIAGRAMA DE ESTADOS Es una manera para caracterizar un cambio en un sistema, es decir que los objetos que lo componen modificaron su estado como respuesta a los sucesos y al tiempo.  Elementos de un diagrama de estado: Estado, evento, punto final, transiciones  Función de los diagramas de estado: se indican que eventos hacen que se pase de un estado a otro y cuáles son las respuestas y acciones que genera. También ilustra que eventos pueden cambiar el estado de los objetos.  Partes de un diagrama de estado: Identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto está esperando alguna operación, tiene cierto estado característico o puede recibir cierto tipo de estímulos.  EVENTOS: Es una ocurrencia que puede causar la transición de estados por medio de eventos, puede representarse el momento en el cual se envían mensajes a otros objetos. Diagrama de Estados
  • 16. 16 COMPILADORES Concepto: Muestra la secuencia de estados por los que pasa bien un caso de uso, un objeto a lo largo de su vida, o bien todo el sistema 6 IMAGEN DIAGRMA DE ESTADOS 10. MAQUINA DE PILA Es un modelo computacional es en el cual la memoria de la computadora toma la forma de una o más pilas. El término también se refiere a un computador real implementando o simulando una máquina de pila idealizada. Adicionalmente, una máquina de pila también puede referirse a una maquina verdadera o simulada con un conjunto de instrucciones de “0 operando” En tal máquina, la mayoría de las instrucciones implícitamente operan en valores en el tope de la pila y reemplazan esos valores por el resultado. Típicamente tales maquinas también tienen una instrucción “load” y una instrucción “store” que leen y escriben a posiciones arbitrarias de la RAM (como el resto de las instrucciones, las
  • 17. 17 COMPILADORES instrucciones “load” y “store” no necesitan ningún operando en una máquina de pila típica-ellas siempre toman la dirección de la RAM que se quiere leer o escribir desde el tope de la pila. La ventaja de las máquinas de pila (“conjunto de instrucciones de 0 operando”) sobre las máquinas de acumulador (“conjunto de instrucciones de 1 operando”) y las máquinas de registro (“conjunto de instrucciones de 2 operandos”) o un (“conjunto de instrucciones de 3 operandos”) es que los programas escritos para un conjunto de instrucciones de “0 operandos” generalmente tienen una densidad de código más alta que los programas equivalentes escritos para otros conjuntos de instrucciones
  • 18. 18 COMPILADORES 11. CONCLUSIONES. Este trabajo servirá mucho en el momento de la creación de un compilador, ya que en él se detallan todas y cada una de las partes que involucran a este. Primeramente investigue que existen distintos tipos de compiladores, me gustaría crear un compilador de optimación, ya que pienso que es muy útil a la hora de crear un algoritmo o programa. La función de un compiladores es leer un programa escrito es un lenguaje, en este caso el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Me parece fascinante que nosotros podamos crear un compilador en seis meses (en un curso), cuando en los años 50, ya que en aquellos tiempos se tardaron hasta 18 años trabajando en un compilador. Por otro lado, 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. También he notado como todas nuestras materias se van complementando y enlazando, por ejemplo, en matemáticas discretas vimos la representación de árboles, los cuales usamos aquí. Igualmente en estructura de datos I, vimos métodos de
  • 19. 19 COMPILADORES ordenamiento que las gramáticas de los compiladores usan. Por lo tanto, no parece tan complicado crear un compilador, sólo se necesitan los conocimientos adecuados y dedicarle su tiempo.
  • 20. 20 COMPILADORES 11. BIBLIOGRAFIA. Principios, técnicas y herramientas, Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Addison – Wesley iberoamericana. http://www.dlsi.ua.es/docencia/asignaturas/comp1/comp1.html http://www.cps.unizar.es/~ezpeleta/COMPI http://www.ii.uam.es/~alfonsec mentales. B. Teufel, S. Schmidt, T. Teufel. Addison Wesley Iberoamericana.
  • 21. 21 COMPILADORES 12.VOCABULARIO.  LOAD: alabar, encomiar, elogiar, aclamar, ensalzar, enaltecer  STORE: (voz fr.) m. estor.  RAM: Random Access Memory) RAM  TOKENS: señal, muestra, prueba