21
1 COMPILADORES COMPILADORES Y ANALIZADOR LEXICOS DIANA MILENA BOTELLO MONCADA CORPORACION UNIVERSITARIA REMINGTON FACULTAD DE INGENIERIA INGENIERIA DE SISTEMAS SEMESTRE VI 2014

Compiladores y analizador lexicos

Embed Size (px)

Citation preview

Page 1: Compiladores y analizador lexicos

1

COMPILADORES

COMPILADORES Y ANALIZADOR LEXICOS

DIANA MILENA BOTELLO MONCADA

CORPORACION UNIVERSITARIA REMINGTON

FACULTAD DE INGENIERIA

INGENIERIA DE SISTEMAS

SEMESTRE VI

2014

Page 2: Compiladores y analizador lexicos

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

Page 3: Compiladores y analizador lexicos

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

Page 4: Compiladores y analizador lexicos

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.

Page 5: Compiladores y analizador lexicos

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

Page 6: Compiladores y analizador lexicos

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)

Page 7: Compiladores y analizador lexicos

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

Page 8: Compiladores y analizador lexicos

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.

Page 9: Compiladores y analizador lexicos

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.

Page 10: Compiladores y analizador lexicos

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

Page 11: Compiladores y analizador lexicos

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.

Page 12: Compiladores y analizador lexicos

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

Page 13: Compiladores y analizador lexicos

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

Page 14: Compiladores y analizador lexicos

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

Page 15: Compiladores y analizador lexicos

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

Page 16: Compiladores y analizador lexicos

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

Page 17: Compiladores y analizador lexicos

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

Page 18: Compiladores y analizador lexicos

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

Page 19: Compiladores y analizador lexicos

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.

Page 20: Compiladores y analizador lexicos

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.

Page 21: Compiladores y analizador lexicos

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