El documento habla sobre Flex y Bison, herramientas para construir analizadores léxicos y sintácticos. Flex genera analizadores léxicos a partir de expresiones regulares y acciones asociadas, mientras que Bison genera analizadores sintácticos a partir de una gramática. El documento explica cómo funcionan estas herramientas, cómo se instalan y cómo se compilan archivos creados con Flex y Bison.
1. NOMBRE: Andrés Dávila M.
FECHA: 15/07/20
MATERIA: Compiladores
FLEX Y BISON
• HERRAMIENTAS PARA CONSTRUCCIÓN DE PROCESADORES DE LENGUAJE
• RESEÑA HISTÓRICA
En informática, un compilador es un programa informático que transforma código fuente
escrito en un lenguaje de programación o lenguaje informático (el lenguaje fuente), en
otro lenguaje informático (el lenguaje objetivo, estando a menudo en formato binario
conocido como código objeto). La razón más común para querer transformar código
fuente es crear un programa ejecutable.
Cualquier programa escrito en un lenguaje de programación de alto nivel debe ser
traducido a código objeto antes de que pueda ser ejecutado, para que todos los
programadores que usen tal lenguaje usen un compilador o un intérprete. Por esto, los
compiladores son muy importantes para los programadores. Cualquier mejora hecha a un
compilador lleva a un gran número de programas mejorados.
2. • DISEÑO Y CONSTRUCCIÓN DE UN COMPILADOR
• HERRAMIENTAS FLEX Y BISON
Flex y Bison es 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.
• ¿QUÉ ES FLEX Y BISON?
Flex es 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 al100% 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.
GNU bison es un programa generador de analizadores sintácticos de propósito general
perteneciente al proyecto GNU disponible para prácticamente todos los sistemas
3. operativos, se usa normalmente acompañado de flex aunque los analizadores léxicos se
pueden también obtener de otras formas.
• PATRONES DE FLEX
Cada patrón es una expresión regular. Algunos de los patrones que se pueden utilizar son
(la lista completa está en el manual de FLEX):
• EMPAREJAMIENTO DE LA ENTRADA
Cuando el escáner generado está funcionando, este analiza su entrada buscando
cadenas que concuerden con cualquiera de sus patrones. Si encuentra más de un
emparejamiento, toma el que empareje el texto más largo. Si encuentra dos o más
emparejamientos de la misma longitud, se escoge la regla listada en primer lugar en el
fichero de entrada de Flex.
Una vez que se determina el emparejamiento, el texto correspondiente al
emparejamiento (denominado el token) está disponible en el puntero de carácter
global yytext, y su longitud en la variable global entera yyleng. Entonces la acción
correspondiente al patrón emparejado se ejecuta y luego la entrada restante se
analiza para otro emparejamiento.
Si no se encuentra un emparejamiento, entonces se ejecuta la regla por defecto: el
siguiente carácter en la entrada se considera reconocido y se copia a la salida
estándar.
• CONDICIONES DE ARRANQUE
4. • VARIABLES DISPONIBLES PARA EL USUARIO
• INTRODUCCIÓN A BISON
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 las 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.
• SIMBOLOS TERMINALES Y NO TERMINALES
Los símbolos terminales de la gramática se denominan en Bison tokens y deben
declararse en la sección de definiciones. Por convención se suelen escribir los tokens en
mayúsculas y los símbolos no terminales en minúsculas.
Hay tres maneras de escribir símbolos terminales en la gramática. Aquí se describen las
dos más usuales:
• Un token declarado se escribe con un identificador, de la misma manera que un
identificador en C. Por convención, debería estar todo en mayúsculas. Cada uno de estos
nombres debe definirse con una declaración de %token.
• Un token de carácter se escribe en la gramática utilizando la misma sintaxis usada en
C para las constantes de un carácter; por ejemplo, ‘+’ es un tipo de token de carácter.
Un tipo de token de carácter no necesita ser declarado a menos que necesite especificar
el tipo de datos de su valor semántico, asociatividad, o precedencia. Por convención, un
token de carácter se utiliza únicamente para representar un token consistente en ese
carácter en particular.
• SINTAXIS DE LAS REGLAS GRAMATICALES (PRODUCCIONES)
5. • DECLARACIONES EN BISON
Declaraciones en Bison La sección de declaraciones de Bison de una gramática de
Bison define los símbolos utilizados en la formulación de la gramática y los tipos de
datos de los valores semánticos. Todos los nombres de tokens (pero no los tokens de
carácter literal simple tal como ‘+’ y ‘*’) se deben declarar. Los símbolos no terminales
deben ser declarados si necesita especificar el tipo de dato a utilizar para los valores
semánticos.
La primera regla en el fichero también especifica el símbolo inicial, por defecto. Si
desea que otro símbolo sea el símbolo de arranque, lo debe declarar explícitamente.
• PRESEDENCIA DE OPERADORES
• FUNCIONAMIENTO DEL ANALIZADOR
La fuente de Bison se convierte en una función en C llamada yyparse. Aquí describimos
las convenciones de interfaz de yyparse y las otras funciones que éste necesita usar.
Tenga en cuenta que el analizador utiliza muchos identificadores en C comenzando con
‘yy’ e ‘YY’ para propósito interno.
Si utiliza tales identificadores (a parte de aquellos descritos en el manual) en una acción
o en código C adicional en el archivo de la gramática, es probable que se encuentre con
problemas.
• INSTALACIÓN DE 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:GnuWin32donde 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”.
6. • 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
flex/bison. Si existe otro valor, separarlos con comas.
7. Aceptar los cambios y luego reiniciar el sistema operativo.
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:
• CÓMO SE COMPILA EN FLEX Y BISON
Para compilar en Flex y Bison seguimos los siguientes pasos. 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. Luego de escribir las especificaciones de
flex y bison realizar lo siguiente. Si se desea invocar a flex: