diff --git a/Makefile.am b/Makefile.am index c8343a3..cf73e11 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,5 @@ AM_YFLAGS = -d +AM_LFLAGS = -P dp BUILT_SOURCES = lib/dice_parse.h lib_LTLIBRARIES = libdice.la @@ -6,13 +7,14 @@ libdice_la_SOURCES = lib/dice_lexer.l \ lib/dice_parse.y \ lib/dice.h \ lib/dice.c \ - lib/diceexpr.c + lib/diceexpr.c \ + lex.dp.c include_HEADERS = lib/dice.h AM_CFLAGS = -Ilib -libdice_la_LIBADD = ${BSD_LIBS} +libdice_la_LIBADD = ${BSD_LIBS} -lm pkgconfig_DATA = libdice.pc diff --git a/configure.ac b/configure.ac index 2cfa48e..a61f06b 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([libdice], [0.1], [florian@n0la.org]) +AC_INIT([libdice], [0.2], [florian@n0la.org]) AM_INIT_AUTOMAKE([subdir-objects]) LT_INIT() AC_CONFIG_HEADERS([config.h]) @@ -18,9 +18,8 @@ AC_CHECK_FUNCS([arc4random_uniform],, AC_CONFIG_FILES([Makefile tests/Makefile]) -AC_SEARCH_LIBS([cos], [m], [], [ - AC_MSG_ERROR([unable to find the cos() function]) -]) +AC_SEARCH_LIBS([sqrt], [m]) +AC_SEARCH_LIBS([cos], [m]) PKG_INSTALLDIR AC_CONFIG_FILES([libdice.pc]) diff --git a/lib/dice.c b/lib/dice.c index b2f66a9..ee99dc4 100644 --- a/lib/dice.c +++ b/lib/dice.c @@ -30,12 +30,12 @@ #include #endif -extern int yylex_init_extra(void *extra, void **state); -extern int yylex_destroy(void *state); -extern void yylex(void *state); -extern void yy_switch_to_buffer(void *buffer, void *scanner); -extern void *yy_scan_string(char const *s, void *scanner); -extern void yy_delete_buffer(void *b, void *scanner); +extern int dplex_init_extra(void *extra, void **state); +extern int dplex_destroy(void *state); +extern void dplex(void *state); +extern void dp_switch_to_buffer(void *buffer, void *scanner); +extern void *dp_scan_string(char const *s, void *scanner); +extern void dp_delete_buffer(void *b, void *scanner); struct dice_ { @@ -115,14 +115,14 @@ bool dice_parse(dice_t d, char const *s) return false; } - yylex_init_extra(d, &scanner); - buffer = yy_scan_string(s, scanner); - yy_switch_to_buffer(buffer, scanner); + dplex_init_extra(d, &scanner); + buffer = dp_scan_string(s, scanner); + dp_switch_to_buffer(buffer, scanner); - ret = yyparse(scanner, d); + ret = dpparse(scanner, d); - yy_delete_buffer(buffer, scanner); - yylex_destroy(scanner); + dp_delete_buffer(buffer, scanner); + dplex_destroy(scanner); if (ret) { return false; diff --git a/lib/dice_lexer.c b/lib/dice_lexer.c new file mode 100644 index 0000000..0a53ca5 --- /dev/null +++ b/lib/dice_lexer.c @@ -0,0 +1,2 @@ +/* empty file, so that autotools has something to compile + */ diff --git a/lib/dice_lexer.l b/lib/dice_lexer.l index a90a239..981030c 100644 --- a/lib/dice_lexer.l +++ b/lib/dice_lexer.l @@ -1,7 +1,9 @@ +%option prefix="dp" %option bison-bridge %option reentrant %{ +#define YYSTYPE DPSTYPE #include "dice.h" #include "dice_parse.h" diff --git a/lib/dice_parse.y b/lib/dice_parse.y index 1c09530..9d1a1ae 100644 --- a/lib/dice_parse.y +++ b/lib/dice_parse.y @@ -1,4 +1,5 @@ %define api.pure full +%define api.prefix {dp} %parse-param {void *scanner} {dice_t dice} %lex-param {void *scanner} @@ -6,14 +7,14 @@ %{ #include "dice.h" -extern int yylex(void *lval, void *scanner); +extern int dplex(void *lval, void *scanner); -void yyerror(void *scanner, dice_t dice, char const *err) +void dperror(void *scanner, dice_t dice, char const *err) { dice_set(dice, DICEOPTION_ERROR, err); } -int yywrap(void) +int dpwrap(void) { return 1; }