BISON
YACC/BISON es un proyecto creado por GNU y es un programa que genera analizadores sintácticos con propósitos generales. Este está disponible para cualquier sistema operativo y se usa acompañado de Flex.[1]
Características
editarEntre sus características convierte la descripción de un lenguaje, escrita con una gramática libre LALR, en un programa en C, C++ que sirve para la creación de un análizador sintáctico o parser. Para la utilización de Bison, es necesaria tener la gramática a analizar.
Características
Bison es la versión GNU de Yacc.
- Es totalmente compatible con Yacc.
- Mejora algunas de las prestaciones de Yacc.
- Habitualmente Yacc/Bison se utiliza conjuntamente con Lex/Flex.
- Lex/Flex genera un analizador léxico: yylex()
- Yacc/Bison genera un analizador sintáctico: yyparse()
Elementos del archivo
editarEl archivo de codificación de Yacc/Bison tiene cuatro secciones:
%{
Declaraciones C
%}
Declaraciones Yacc/Bison
%Declaración de Token
%%
Reglas de la gramática
%%
Código C
Las cadenas “%{“, “%}” sirve para delimita el encabezado que pudieran ser bibliotecas
“%%” sirven para indicar cuales son las reglas
Y por último va programación en C o llamadas a funciones en caso de ser necesario.
%Token Se utiliza para definir los símbolos no terminales (tokens) de la gramática.
%token NOMBRE_TOKEN
Por convenio, los nombres de los tokens se ponen en mayúsculas y se pueden agrupar varios token en una línea si tienen en mismo tipo.[2]
Ejemplos
editarEl siguiente contenido vendría en un archivo nombre.y
%{
#include <stdio.h>
%}
/* Declaraciones de BISON */
%token ARTICULO
%token SUJETO
%token VERBO
%%
cadena: ARTICULO SUJETO VERBO;
%%
int main() {
yyparse();
}
yyerror (char *s)
{
printf ("%s\n", s);
}
int yywrap()
{
return 1;
}
Al compilarse el archivo de Bison se generan dos archivos, un archivo .h y otro .c. El archivo .h (biblioteca) debe incluirse en el archivo de Lex.
Donde los token ARTICULO SUJETO VERBO están dentro del archivo de Lex que para este ejemplo corresponde al archivo extensión .l:
/* Archivo en lex */
%{
#include "reglas.tab.h"
%}
%%
El|lo|la|los|las {return ARTICULO;}
perro|perros|carro|carros|nino|ninos {return SUJETO;}
come|comen|corre|corren|juega|juegan {return VERBO;}
%
En linux se compilar ambos con GCC y como resultado da un ejecutable que es nuestro parser.
Referencias
editar- ↑ «Introducción a Bison». Archivado desde el original el 12 de agosto de 2015. Consultado el 24 de septiembre de 2015.
- ↑ «BISON». Consultado el 24 de septiembre de 2015.