X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/3c1a79b31401393d6b67c9373d0a8a4b3cb980fa..a9b8959efaa9aae4e2daf959d371765ac057e7f0:/tests/calc.at diff --git a/tests/calc.at b/tests/calc.at index ba5293f5..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,8 +63,16 @@ static void yyungetc (int c); extern void perror (const char *s); %} -/* BISON Declarations */ -%token NUM +/* Also exercise %union. */ +%union +{ + int ival; /* A comment to exercise an old bug. */ +}; + +/* Bison Declarations */ +%token CALC_EOF 0 "end of file" +%token NUM "number" +%type exp %nonassoc '=' /* comparison */ %left '-' '+' @@ -73,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: @@ -116,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++; @@ -138,7 +152,7 @@ yyungetc (int c) { #if YYLSP_NEEDED /* Wrong when C == `\n'. */ - yylloc.last_column--; + yylloc = last_yylloc; #endif ungetc (c, yyin); } @@ -198,13 +212,13 @@ yylex (void) if (c == '.' || isdigit (c)) { yyungetc (c); - yylval = read_signed_integer (); + yylval.ival = read_signed_integer (); return NUM; } /* Return end-of-file. */ if (c == EOF) - return 0; + return CALC_EOF; /* Return single chars. */ return c; @@ -256,8 +270,8 @@ main (int argc, const char **argv) # Produce `calc.y'. m4_define([AT_DATA_CALC_Y], [_AT_DATA_CALC_Y($[1], $[2], $[3], - [m4_match([$1], [--yyerror-verbose], - [[#define YYERROR_VERBOSE 1]])])]) + [m4_bmatch([$1], [--yyerror-verbose], + [[%error-verbose]])])]) @@ -284,6 +298,9 @@ AT_CHECK([wc -l