BISON
# 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.

## Características

Entre 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

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

## Ejemplos

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

yyerror (char *s)

int yywrap

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.

