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