%define api.pure full %define api.prefix {dp} %parse-param {void *scanner} {dice_t dice} %lex-param {void *scanner} %{ #include "dice.h" extern int dplex(void *lval, void *scanner); void dperror(void *scanner, dice_t dice, char const *err) { dice_set(dice, DICEOPTION_ERROR, err); } int dpwrap(void) { return 1; } %} %union { char *str; int integer; double number; } %token TOK_DICESEP TOK_FUDGE %token TOK_INTEGER %% dice: TOK_INTEGER TOK_DICESEP TOK_INTEGER { dice_set(dice, DICEOPTION_AMOUNT, $1); dice_set(dice, DICEOPTION_SIDES, $3); YYACCEPT; } | TOK_DICESEP TOK_INTEGER { dice_set(dice, DICEOPTION_AMOUNT, 1); dice_set(dice, DICEOPTION_SIDES, $2); YYACCEPT; } | TOK_DICESEP TOK_FUDGE { dice_set(dice, DICEOPTION_AMOUNT, 1L); dice_set(dice, DICEOPTION_FUDGE, 1L); YYACCEPT; } | TOK_INTEGER TOK_DICESEP TOK_FUDGE { dice_set(dice, DICEOPTION_AMOUNT, $1); dice_set(dice, DICEOPTION_FUDGE, 1L); YYACCEPT; } ;