Flex y Bison

Bison y Flex Universidad de San Carlos de Guatemala Facultad de Ingeniería Escuela de ciencias y sistemas. Organización

Views 132 Downloads 0 File size 807KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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