Este documento discute las herramientas Flex y Bison, que se usan para crear analizadores léxicos y sintácticos. Flex permite generar analizadores léxicos a partir de expresiones regulares, mientras que Bison permite especificar analizadores sintácticos mediante gramáticas independientes del contexto. El documento también proporciona instrucciones sobre cómo instalar estas herramientas y compilar un programa utilizando Flex y Bison.
CICLO DE DEMING que se encarga en como mejorar una empresa
Construcción procesadores lenguajes Flex Bison
1. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR
SEDE IBARRA
Nombre: José Ibadango
Fecha: 2016-06-21
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.
2. 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 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:
3. 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
4. dos calculadores. Pues bastará con tomar asiento, echar mano de pluma y ábaco
y decirse el uno al otro: ¡calculemos!”
4.- Diseño y construcción de un compilador.
5. 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.
6. 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
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" %}
7. %%
[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 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”
8. • 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
9. 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:
10. 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:
11. 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++