X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6b7e85b9940d4313ab2f1663a449fdcb8b61df4b..a9b8959efaa9aae4e2daf959d371765ac057e7f0:/tests/calc.at diff --git a/tests/calc.at b/tests/calc.at index a366cd85..90241b35 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -53,7 +53,6 @@ AT_DATA([calc.y], char *strcat(char *dest, const char *src); #endif #include -]$4[ static int power (int base, int exponent); static void yyerror (const char *s); @@ -64,9 +63,16 @@ static void yyungetc (int c); extern void perror (const char *s); %} +/* Also exercise %union. */ +%union +{ + int ival; /* A comment to exercise an old bug. */ +}; + /* Bison Declarations */ -%token CALC_EOF 0 -%token NUM +%token CALC_EOF 0 "end of file" +%token NUM "number" +%type exp %nonassoc '=' /* comparison */ %left '-' '+' @@ -74,16 +80,18 @@ extern void perror (const char *s); %left NEG /* negation--unary minus */ %right '^' /* exponentiation */ +]$4[ + /* Grammar follows */ %% input: - /* empty string */ + line | input line ; line: '\n' -| exp '\n' +| exp '\n' {} ; exp: @@ -117,11 +125,16 @@ yyerror (const char *s) fprintf (stderr, "%s\n", s); } + +#if YYLSP_NEEDED +static YYLTYPE last_yylloc; +#endif static int yygetc (void) { int res = getc (yyin); #if YYLSP_NEEDED + last_yylloc = yylloc; if (res == '\n') { yylloc.last_line++; @@ -139,7 +152,7 @@ yyungetc (int c) { #if YYLSP_NEEDED /* Wrong when C == `\n'. */ - yylloc.last_column--; + yylloc = last_yylloc; #endif ungetc (c, yyin); } @@ -199,7 +212,7 @@ yylex (void) if (c == '.' || isdigit (c)) { yyungetc (c); - yylval = read_signed_integer (); + yylval.ival = read_signed_integer (); return NUM; } @@ -258,7 +271,7 @@ main (int argc, const char **argv) m4_define([AT_DATA_CALC_Y], [_AT_DATA_CALC_Y($[1], $[2], $[3], [m4_bmatch([$1], [--yyerror-verbose], - [[#define YYERROR_VERBOSE]])])]) + [[%error-verbose]])])]) @@ -285,6 +298,9 @@ AT_CHECK([wc -l