Lex (flex) y Yacc (bison) con Microsoft Visual Studio Express 2012

Transcripción

Lex (flex) y Yacc (bison) con Microsoft Visual Studio Express 2012
Lex (flex) y Yacc (bison) con Microsoft Visual Studio Express 2012 para
escritorio de Windows
Requisitos:
Flex http://gnuwin32.sourceforge.net/packages/flex.htm
Bison http://gnuwin32.sourceforge.net/packages/bison.htm 1
MVS Express 2012
Archivo ejly1.l:
%{
#include <stdio.h>
#include <stdlib.h>
#include "ejeyac1.h"
%}
%%
[0-9]+
[a-zA-Z][a-zA-Z0-9]*
[ \t\n]
[\+\*\(\)\-]
.
%%
int yywrap()
{
return 1;
}
{return NUM;}
{return ID;}
{;}
{return yytext[0];}
{printf("Error lexico [%s]\n",yytext);}
Archivo ejeyac1.y:
%{
#include "ejly1.h"
%}
%token ID NUM
%start e
%%
e
: e '+' t
{printf("Esto es una suma\n");}
| t
{printf("Esto es un termino\n");}
;
t
: t '*' f
| f
;
{printf("Esto es un producto\n");}
{printf("Esto es un factor\n");}
f
: m '(' e ')'
| m ID
| m NUM
;
{printf("Esto es una expresion\n");}
{printf("Esto es un identificador\n");}
{printf("Esto es un numero\n");}
1
Algunas ocasiones la ejecución del Bison requiere de librerías, estas pueden encontrarse en el siguiente
enlace: http://gnuwin32.sourceforge.net/packages/bison.htm
m
: /*epsilon*/
| '-'
;
{printf("Esto es negativo\n");}
%%
int main()
{
yyparse();
return 1;
}
yyerror(char *s)
{
printf("%s\n",s);
}
Compilación:
Desde la consola de comandos, en la ubicación de los ejecutables de Flex y Bison
conjuntamente con los archivos .l y .y ejecutar:
flex.exe -oejly1.h ejly1.l
bison.exe -y -v -d -oejeyac1.c ejeyac1.y
Los archivos generados por Flex y Bison serán: ejly1.h, ejeyac1.c y ejeyac1.h.
Este último archivo generado contiene las constantes simbólicas asociadas a los símbolos
terminales (tokens) y es generado por el Bison.
Crear proyecto en MS VC Express 2012:
Crear un proyecto de consola en el MS VC Express 2012. En la configuración de la
aplicación debe seleccionarse la casilla de “Proyecto debe estar vacío” y deshabilitar la
casilla de “Comprobación del ciclo de vida de desarrollo de seguridad (SDL)”.
Una vez creado el proyecto, copiar los archivos generados en el paso anterior por Flex y
Bison a la carpeta del proyecto creada por el MS VC Express 2012. Hecho lo anterior
agregar al proyecto en “Archivos de código fuente” el archivo ejeyac1.c como
elemento existente, después agregar en “Archivos de encabezado” los archivos ejly1.h y
ejeyac1.h, también como archivos existentes.
Finalmente se deberá compilar y probar.
Nota: si se cambia la especificación léxica (archivo .l) o la especificación sintáctica
(archivo .y) será necesario volver a compilar con Flex o Bison, según sea el caso, y copiar
nuevamente los archivos generados a la ruta del proyecto creado en MS VC Express 2012
para generar nuevamente el analizador sintáctico considerando los cambios hechos en las
especificaciones.

Documentos relacionados

Bison

Bison Código C creado por necesidad del programador Se copian literalmente en *.tab.c main() está en el Bison (.y) y nunca en el Flex (.l) Bison necesita definir yyerror() (excepto –ly) Yyparse()

Más detalles