Herramientas flex y bison

10

Click here to load reader

Transcript of Herramientas flex y bison

Page 1: Herramientas flex y bison

PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR

SEDE IBARRA Nombre: Alexis Vilañez

Fecha: 28/05/13

Materia: Compiladores

TALLER DE COPILADORES

1.- Herramientas para la construcción de procesadores de lenguaje.

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

para la realización de la Práctica de Procesadores de Lenguajes. Todas estas herramientas

funcionan bajo Windows, aunque se puede utilizar, si se desea, cualquier otra herramienta.

Herramientas para la construcción de Procesadores de Lenguajes

Herramienta Lenguaje Descripción

Bison C Generador de Analizadores Sintácticos Ascendentes tipo YACC

COCO/R C/C++ Generador de Analizadores Léxicos y Sintácticos Descendentes

Recursivos

Flex C Generador de Analizadores Léxicos tipo Lex

Lex C Generador de Analizadores Léxicos

SDGLL1 exe Sistema Detector de Gramáticas LL(1) y generador de la tabla

TS 2006 C/C++ Tipo abstracto de datos Tabla de Símbolos de uso sencillo

TS C Tipo abstracto de datos Tabla de Símbolos

TS-OO C++ Tipo abstracto de datos orientado a objetos Tabla de Símbolos

VASt exe Visualizador de árboles sintácticos partiendo de los ficheros con la

gramática y el parse pedidos en la Práctica [versión 2.0, Windows]

VASt C++ Visualizador de árboles sintácticos partiendo de los ficheros con la

gramática y el parse pedidos en la Práctica [versión 1.0, Linux]

YACC C Generador de Analizadores Sintácticos Ascendentes LR(1)

2.- Aplicación de los lenguajes:

Los lenguajes de programación hoy en día tienen una infinidad de aplicaciones, basicamente

cualquier objeto electrónico tiene cierto grado de programación. Algunos de los más comunes

son C++ y JAVA, tambien existe HTML, HTTP, XML, XAML y C#, este ultimo actualmente es el

Page 2: Herramientas flex y bison

más utilizado en todos los dispositivos y redes basados en MICROSOFT (Xbox 350, Windows

Mobile, Windows Phone, Windows Cloud, Zune, etc.). Ya que los lenguajes de programación

son informaticamente un puente entre el Hardware y el Software estos permiten que las

computadoras puedan establecer conexion con un celular, una camara o una consola portatil

de videojuego. Otra de las aplicaciones de los lenguajes de programación son las matemáticas

como las calculadoras, cajas registradoras, cajeros automáticos, por solo mencionar algunos

ejemplos sencillos. Existen tambien niveles de programación mucho mas complejos como los

videojuegos o los pilotos automáticos de los aviones comerciales o las máquinas de juego de

los casinos que siguen un patrón de probabilidad a partir de un arreglo de números al azar

establecido por una programación numérica. La robótica es la combinación de mecánica,

electrónica y programación, la cual en base a sensores y mecanismos sigue una serie de

instrucciones algoritmicas las cuales le permiten por ejemplo a un brazo robótico montar una

rueda, ajustar un tornillo o cortar un rectángulo de 3 cm cuadrados en una placa de acero. Con

el avance de la tecnología los límites de la programación se vuelven cada vez más distantes.

3.- Reseña Histórica

El alumno recordará que la sistematización de la construcción de Procesadores de

Lenguaje ha sido posible gracias a los siguientes hechos históricos (mencionamos

los más relevantes) que relacionan la evolución de materias muy dispares:

Matemáticas (formalización de la lógica)

Lingüística

Teoría de máquinas (electrónica digital)

Abu Ja’far Mohammed ibn Musa al-Jowârizmî, matemático persa, publicó hacia el

año 825 un tratado de aritmética y su nombre se utiliza para llamar algoritmo a todo

conjunto de reglas que permiten obtener un resultado determinado a partir de

ciertos datos de partida

Edad Media, surge la leyenda de la cabeza parlante de Alberto Magno, tal cabeza

fue supuestamente destruida por su discípulo Tomás de Aquino.

La zairja árabe consistía en algo similar, una máquina pensante que discurría

mecánicamente combinando las letras del alfabeto arábigo a cada una de las cuales

se asociaba una idea filosófica

Raimundo Lullio “Ars Magna” (1235-1315), intenta superar, en versión cristiana, la

zairja con una máquina basada en círculos concéntricos giratorios en el que coloca

un abecedario de ideas sobre Dios y el universo y que, con esta disposición,

permitían ser combinadas (en razonamientos) de forma mecánica.

Siglos XVII y XVIII Gottfried Wilhelm Leibniz (1646-1716): álgebra universal

En su producción filosófica un joven (apenas 20 años) Leibniz concibe en De

arte combinatoria la idea de diseñar una notación y reglas similares a la

matemática para los pensamientos y revisa el Ars Magna.

En Mathesis universalis da el nombre de Logica Mathjematica sive Mathesis

universalis sive Logistica sive Logica Mathematicorum

El objetivo final es que, como dice literalmente, “cuando surja una controversia

entre dos filósofos no será preciso que gasten en discutir más tiempo del que

gastarían dos calculadores. Pues bastará con tomar asiento, echar mano de

pluma y ábaco y decirse el uno al otro: ¡calculemos!”

Page 3: Herramientas flex y bison

4.- Diseño y construcción de un compilador.

Page 4: Herramientas flex y bison

5.- Las herramientas Flex y Bison.

Esta herramienta se usa en consonancia con la herramienta flex y sirve para especificar

analizadores sintácticos. De la misma forma que flex tiene como base las expresiones

regulares, la herramienta bison también se basa en otro formalismo para describir lenguajes,

en este caso serán las gramáticas independientes del contexto las que constituirán el núcleo

de las especificaciones que procesará bison.

6.- 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.

Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguiente esquema:

%%

patrón1 {acción1}

patrón2 {acción2}

...

donde:

patrón: expresión regular

Page 5: Herramientas flex y bison

acción: código C con las acciones a ejecutar cuando se encuentre concordancia del patrón con

el texto de entrada-

Interacción con Bison

Uno de los usos principales de Flex es como acompañante del analizador de gramáticas

Bison (o de Yacc). Los analizadores Bison necesitan una función llamda ‘yylex()’ para

devolverles el siguiente token de la entrada. Esa función devuelve el tipo del próximo

token y además puede poner cualquier valor asociado en la variable global yylval. Para

usar Flex con Bison, normalmente se especifica la opción –d de Bison para que genera

el fichero ‘y.tab.h’ que contiene las definiciones de todos los ‘%tokens’ que aparecen el

fuente Bison. Este fichero de cabecera se incluye después en el fuente de Flex. Por

ejemplo, si uno de los tokens es “TOK_NUMBER”, parte del fichero Flex podría ser:

%{

#include "y.tab.h"

%}

%%

[0-9]+ yylval = atoi( yytext ); return TOK_NUMBER;

7.- Como se instala Flex y Bison

1. Descarga el software disponible en el sitio de la cátedra.

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

hipótesis

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

subcarpeta llamada bin donde se encuentran los programas respectivos)

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. Una alternativa es crear un archivo de proceso

por

lotes (*.bat) que contenga las líneas de comando para la ejecución de Flex y Bison y/o la

compilación del archivo generado.

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

permitir

Page 6: Herramientas flex y bison

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

siguiente:

• Clic derecho en “Mi PC”.

• Selecciona “Propiedades”

• Clic en la pestaña “Opciones Avanzadas”

• Presiona el botón “Variables de entorno”

• En la ventana de variables de entorno, ubicarse en la sección “Variables del sistema”

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

“Nueva” y agregar PATH) • En la nueva ventana, escribir la ruta completa al directorio “bin” de

la aplicación

Page 7: Herramientas flex y bison

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

• Aceptar los cambios y luego reiniciar el sistema operativo.

5. Si deseas instalar un compilador de C como MinGwin, deberás integrar la ruta de acceso al

compilador a las variables de entorno para facilitar la llamada al programa.

Por ejemplo si se instaló MingWin en “C:\Mingw” y dentro de la carpeta “bin” se encuentra

“gcc.exe” que es el ejecutable, entonces de deberá agregar (análogo a los pasos anteriores) lo

siguiente:

6. Cuando tengas listo podrás llamar a flex/bison desde el símbolo del sistema sin necesidad de

ubicarte en la carpeta donde ha sido instalado flex/bison. Invocando a flex y bison

8.- Como se compila con Flex y Bison

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

Si se desea invocar a flex:

Page 8: Herramientas flex y bison
Page 9: Herramientas flex y bison

9.- 2 Ejemplos de la creación de un compilador utilizando Flex y Bison.

Creación de un parser con flex y bison en C++

Page 10: Herramientas flex y bison