Upload
diana8320
View
141
Download
2
Embed Size (px)
Citation preview
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 , a lgunos a rgumen taran q
ue es e l s is temaoperativo, 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