32
PONTIFICIA UIVERSIDAD CATÓLICA DEL ECUADOR SEDE IBARRA 1. DATOS INFORMATIVOS 1.1 Nombre: Luis Viteri, Andrés Brusil 1.2 Carrera: Sistemas 1.3 Nivel: 5to 1.4 Materia: Compiladores 1.5 Tema: Flex y Bison Ejercicio 1.6 Fecha: 24/07/16

Compiladores

Embed Size (px)

Citation preview

Page 1: Compiladores

PONTIFICIA UIVERSIDAD CATÓLICA DEL ECUADOR

SEDE IBARRA

1. DATOS INFORMATIVOS

1.1 Nombre: Luis Viteri, Andrés Brusil

1.2 Carrera: Sistemas

1.3 Nivel: 5to

1.4 Materia: Compiladores

1.5 Tema: Flex y Bison Ejercicio

1.6 Fecha: 24/07/16

Page 2: Compiladores

2. DESCRIPCION

Herramientas para la construcción de procesadores de lenguaje.

A continuación se muestran algunas de las herramientas disponibles que pueden utilizarse para la

construcción de Procesadores de Lenguaje.

Aplicación de los lenguajes:

1) Reseña Histórica

1940’s:

– Primeros ordenadores.

– Programación directa en código máquina.

– Nace el ensamblador (traducido manualmente)

– Se automatiza la etapa de ensamblado

1950’s

– (1950) John Backus dirige en IBM un proyecto de lenguaje algebraico

– (1954-1958) Nace el FORTRAN (FORmulae TRANslator)

Page 3: Compiladores

– Primer compilador de FORTRAN para IBM modelo 704

1950’s (finales):

– F.L. Bauer (Univ. Munich) dirige un proyecto de lenguaje formal

– Se crea un comité conjunto con la Association for Computing Machinery en el que participa

Backus

– Se define IAL (International Algebraic Language)

– Posteriormente se denomina ALGOL 58 (ALGOrithmic Language)

Características de ALGOL 58

– Definición de la notación BNF (Backus-Naur Form)

– Declaración de tipos de variables

– Estructura modular

– Funciones recursivas

– Paso de parámetros por valor o por nombre

– Precursor de Pascal, Ada o Modula

1970’s:

– Se estudian las gramáticas LR

– Se definen los métodos de análisis ascendente SLR y LALR

– Se crean numerosas herramientas de ayuda al diseño de compiladores

– A mediados de la década aparecen las herramientas lex y yacc que se convierten en

estándares de facto al distribuirse con UNIX.

– La Free Software Fundation distribuye estas herramientas bajo los nombres de flex y bison

Generación de código:

– Inicialmente la gestión de la memoria era estática

Page 4: Compiladores

– Cuando aparecen las funciones recursivas se desarrolla la pila como forma de gestionar

la memoria

– La gestión de memoria dinámica conduce a la definición del montículo (heap) como zona

de gestión de esta memoria

– Surgen nuevos problemas como las referencias pérdidas o la recogida de basura

Últimos avances:

– Optimización de código

– Máquinas virtuales y auge de los lenguajes interpretados

2) Diseño y construcción de un compilador

Análisis léxico

Objetivo:

– Leer caracteres e identificar componentes léxicos (tokens)

– Filtrar comentarios

– Detectar errores léxicos

Ejemplo:

Page 5: Compiladores

Análisis Sintáctico

Objetivo:

– Verificar estructuras gramaticales

– Detectar errores de sintaxis

Especificación:

– Gramáticas libres de contexto

Ejemplo:

Análisis Semántico

Objetivo:

– Verificar restricciones semánticas (predefinición de variables, consistencia de tipos,

llamadas a funciones)

– Generar un Árbol de Sintaxis Abstracta

Especificación:

– Gramáticas atribuidas

Ejemplo:

Page 6: Compiladores

Las herramientas Flex y Bison

3) Que es flex y Bison

Flex es un una herramienta que permite generar analizadores léxicos. A partir de un conjunto de

expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta acciones

asociadas a estas expresiones. Es compatible casi al 100% con Lex, una herramienta clásica de

Unix para la generación de analizadores léxicos, pero es un desarrollo diferente realizado por GNU

bajo licencia GPL.

Bison es un generador de analizadores sintácticos de propósito general que convierte una

descripción para una gramática independiente del contexto (en realidad de una subclase de éstas,

las LALR) en un programa en C que analiza esa gramática. Es compatible al 100% con Yacc, una

herramienta clásica de Unix para la generación de analizadores léxicos, pero es un desarrollo

diferente realizado por GNU bajo licencia GPL. Todas la gramáticas escritas apropiadamente para

Yacc deberían funcionar con Bison sin ningún cambio. Usándolo junto a Flex esta herramienta

permite construir compiladores de lenguajes.

4) Como se instala Flex y Bison

1) Es necesario obtener el software descargando la versión que necesitamos de las

páginas oficiales

http://gnuwin32.sourceforge.net/packages/flex.htm

2) Instalar el software en la unidad C: (para explicar a partir del punto 4 se tendrá como

hecho que flex y bison han sido instalados en la ruta: C:\GnuWin32\ donde contiene una

subcarpeta llamada bin donde se encuentran los programas respectivos)

Page 7: Compiladores

3) Flex y bison son aplicaciones de consola, por lo que se deberá entrar al Símbolo del

sistema y tipear líneas de comando para ejecutar Flex.

4) 4. Si deseas que flex y bison se integren al conjunto de variables del entorno (esto te va

a permitir llamar a flex/bison desde cualquier ubicación en la línea de comandos) debes

hacer lo siguiente:

a. Clic derecho en “Mi PC”.

b. Selecciona “Propiedades”

c. Clic en la pestaña “Opciones Avanzadas”

d. Presiona el botón “Variables de entorno”

e. En la ventana de variables de entorno, ubicarse en la sección “Variables del

sistema”

f. luego haz clic en PATH y luego en el botón “Modificar” (si no está hacer clic en

“Nueva” y agregar PATH)

g. En la nueva ventana, escribir la ruta completa al directorio “bin” de la aplicación

flex/bison. Si existe otro valor, separarlos con comas.

h. Aceptar los cambios y luego reiniciar el sistema operativo.

Capturas de pantalla de la instalación

Herramientas necesarias para la ejecución del proyecto

flex-2.5.4a-1

bison-2.4.1

mingw-get-inst-20120426

DESCARGAS DE LAS HERRAMIENTAS

Descargamos la herramienta Flex de la siguiente página

http://gnuwin32.sourceforge.net/packages/flex.htm

Page 8: Compiladores

Descargamos la herramienta Bison de la siguiente página:

http://gnuwin32.sourceforge.net/packages/bison.htm

Descargamos el MinGw de la siguiente página:

http://www.4shared.com/file/ypK4312i/mingw-get-inst-

20120426.htm?locale=es&sop=true

Page 9: Compiladores
Page 10: Compiladores

Como podemos observar aquí tenemos los tres archivos necesarios

INSTALACIÓN DE LAS HERRAMIENTAS

1.- Flex

Primero debemos instalar la herramienta flex

Page 11: Compiladores
Page 12: Compiladores
Page 13: Compiladores
Page 14: Compiladores

2.-Bison

Instalamos la herramienta Bison

Page 15: Compiladores
Page 16: Compiladores
Page 17: Compiladores

Comprobamos si está instalado

1.1 3.- Mingw

Instalamos la herramienta mingw

Page 18: Compiladores
Page 19: Compiladores
Page 20: Compiladores
Page 21: Compiladores
Page 22: Compiladores
Page 23: Compiladores

Configuración de variables de entorno

Page 24: Compiladores

Editamos la variable path

Al final colocamos un punto y coma (;) y pegamos esto: C:\GnuWin32\bin escribimos

otraves el punto y coma (;) y pegamos esto : C:\MinGW\bin de esta menera:

Page 25: Compiladores
Page 26: Compiladores

Aceptamos todo y salimos, para finalizar nos den quedar estas dos carpetas

5) Como se compila con Flex y Bison

Page 27: Compiladores

Luego de escribir las especificaciones de flex y bison realizar lo siguiente.

Si se desea invocar a flex:

o Por ejemplo, si se tiene un archivo de especificación de Flex llamado prueba.l dentro

de una carpeta “archivos” tipear lo siguiente C:\archivos>flex prueba.l

o Luego presionar ENTER

o Se habrá generado un archivo de nombre lex.yy.c dentro de la carpeta donde se

encuentra el archivo prueba.l

Para invocar a Bison en conjunción con flex realizar lo siguiente:

o Por ejemplo, si se tiene un archivo de especificación de Bison y Flex llamado

prueba.y y prueba.l respectivamente dentro de una carpeta “archivos” tipear lo

siguiente

o C:\archivos>bison –d prueba.y

o C:\archivos>flex prueba.l

o Luego al presionar ENTER se generarán tres archivos para su posteriorcompilación:

prueba.tab.h, prueba.tab.c y lex.yy.c.

Para compilar los archivos generados.

Luego de haber generado los archivos .c tipear lo siguiente:

C:\gcc –o pruebaej lex.yy.c

Con esto generará se un archivo llamado “pruebaej.exe”

El argumento –o permite crear el archivo ejecutable

6) Ejercicio: Suma de matriz de 2x2

1. Lo primero es crear los archivos correspondientes para flex y bison, en este caso matriz.l y

matriz.y

Page 28: Compiladores

2. Como siguiente mediante cmd y el comando cd nos ubicamos en la carpeta para ejecutar

con flex y bison,

3. Lo mismo ejecutamos con bison

Page 29: Compiladores

4. Mediante estos comandos se crearan los archivos

5. Ahora para crear el ejecutable mediante el comando cd nos ubicamos nuevamente en la

carpeta y ejecutamos el comando.

Page 30: Compiladores

6. Al finalizar ejecutamos el programa y escribimos la expresión

Page 31: Compiladores

7) Bibliografía Arciniegas, C. (10 de Enero de 2010). La Web del Programador. Obtenido de

http://www.lawebdelprogramador.com/cursos/Flex/7588-Introduccion-a-Flex-y-

Bison.html

Lema, A. (6 de Junio de 2007). CCIA. Obtenido de

http://ccia.ei.uvigo.es/docencia/PL/practicas01/practica-1.html

Marmol, D. (16 de Agosto de 2006). Monografias. Obtenido de

http://www.monografias.com/trabajos58/guia-bison-flex/guia-bison-flex.shtml

Palermo, R. (28 de Diciembre de 2011). RP. Obtenido de

http://blog.rolandopalermo.com/2010/10/lex-y-bison-en-un-solo-analizador.html

Paxson, V. (s.f.). tldp. Obtenido de http://es.tldp.org/Manuales-LuCAS/FLEX/flex-es-2.5.html

uvigo. (s.f.). Obtenido de http://ccia.ei.uvigo.es/docencia/PL/doc/BISON.html

wikipedia. (s.f.). Obtenido de https://es.wikipedia.org/wiki/MinGW

Page 32: Compiladores