Está en la página 1de 21

Bison y Flex

Universidad de San Carlos de Guatemala


Facultad de Ingeniería
Escuela de ciencias y sistemas.
Organización de lenguajes y compiladores 1
Sección B
Flex

▪ Fast lexical analyzer generator


▪ Flex es un generador de analizadores léxicos (scanner) de código
abierto basado en Yacc.

▪ Flex fue escrito en C por Vern Paxson al rededor de 1987.


Estructura de un archivo Flex

▪ Directivas :
– Las directivas son instrucciones que indican cuestiones especificas para la
creación de nuestro scanner. Como por ejemplo :
▪ %option yylineno para la captura de la línea.
▪ %option case-insensitive
▪ %option header-file =“nombreCabecera.h”
▪ %option outfile = “scanner.cpp”
▪ %option noyywrap

▪ http://dinosaur.compilertools.net/flex/flex_17.html
Estructura de un archivo Flex

▪ Área de código de usuario :


▪ Delimitado por las palabras %{ para su inicio y %} para su final.
Estructura de un archivo Flex:
Expresiones regulares

▪ Es el área donde se escriben las diferentes expresiones regulares que


utiliza nuestro scanner.

▪ Al igual que Yacc , Flex nos permite utilizar estados con la siguiente sintaxis:

▪ %x LISTAESTADOS
▪ Salto entre estados:
begin NOMbrestado;
Estructura de un archivo Flex: Área de
acciones.

▪ Esta área indicará cada una de las acciones a tomar en cuanto se


reconozca una expresión regular.

En caso de Flex , el valor del token actual se almacena en la variable


global yytext.
GNU / Bison

▪ Es un generador de analizadores sintácticos que surgió como parte


del proyecto GNU.

Nos permite generar analizadores para Java, C++ y C .


▪ Bison por defecto genera parser del tipo LALR(1) pero también puede
generar parser del tipo LR canónico.

▪ Escrito por Robert Corbett y luego porteado por Richard Stallman


para ser compatible con Yacc.
Estructura de un archivo de
especificación Bison

▪ Área de directivas:
▪ Las directivas son instrucciones que indican cuestiones especificas
para la creación de nuestro parser. Como por ejemplo:

%defines “parser.h”
%output “parser.cpp”
%error-verbose
%locations
Estructura de un archivo de
especificación Bison

▪ Área de código de usuario :


▪ Delimitado por las palabras %{ para su inicio y %} para su final.
Estructura de un archivo de
especificación Bison

▪ Área de especificación de terminales y no terminales


▪ %union{
▪ //se especifican los tipo de valores para los no terminales y lo
terminales
▪ char TEXT [256];
▪ class nodo *nodito;
▪ }
Estructura de un archivo de
especificación Bison

▪ Área de especificación de terminales


Estructura de un archivo de
especificación Bison

▪ Área de especificación de no terminales


Estructura de un archivo de
especificación Bison

▪ Indicar precedencia
Estructura de un archivo de
especificación Bison

▪ Área de acciones sintácticas


Estructura de un archivo de
especificación Bison

▪ Área de acciones sintácticas


Instalación de Flex y Bison
Descargar flex : http://gnuwin32.sourceforge.net/packages/flex.htm
Descargar bison: http://gnuwin32.sourceforge.net/packages/bison.htm

Pagina para descargar winflexbison: https://sourceforge.net/projects/winflexbison/?source=directory


Descarga directa versión 3: https://sourceforge.net/projects/winflexbison/files/win_flex_bison3-
latest.zip/download
Agregar flex.exe a las variables de entorno.
Instalación de Flex y Bison
Explicación: https://stackoverflow.com/questions/5456011/how-to-compile-lex-yacc-files-on-windows
Agregar bison.exe a las variables de entorno.
Verificar instalación de Flex y Bison
Compilación de Flex y Bison

Comandos Windows:
win_bison --no-lines --defines=parser.h --verbose --output=parser.cpp sintactico.y

win_flex --header-file=scanner.h -o scanner.cpp -v lexico.l

Comandos Linux:
bison -o parser.cpp --defines=parser.h sintactico.y

flex --header-file=scanner.h -o scanner.cpp lexico.l


Compilación de Flex y Bison
Repositorio

https://github.com/ErickTejaxun/Interprete

También podría gustarte