Creación de un parser con flex y bison en C++
La siguiente receta explica como construir un analizador léxico con Flex y un analizador sintáctico con Bison, utilizando C++. Además, incluye un pequeño Makefile para el enlazado de todos los archivos y un ejemplo mínimo de uso.
Requisitos
- bison++
El paquete bison++ instalará también lo necesario de flex.
Construcción
scanner.l
Este archivo es el que va contener la especificación Flex del analizador léxico. Si estudias el código siguiente verás
que el analizador es muy simple: sólo reconoce números enteros.
Es importante ver que el analizador sintáctico (“Parser”) ya conoce los tokens, por lo que el analizador léxico no tiene más que devolver el token encontrado.
parser.y
A continuación el analizador sintáctico, también sencillo, que sólo consta de una construcción válida para el lenguaje.
test.cc
Finalmente, el archivo de prueba que crea el objeto parser que lanzará el comienzo de análisis (léxico y sintáctico).
Makefile
Para compilar y enlazar todo es necesario seguir un orden específico. Como muestra el siguiente Makefile, es necesario mantener la consistencia de nombres y crear primero el parser, después el scanner y finalmente el programa de prueba.