X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9280d3ef893b90b36c89fa7737512f2d640e41d9..f7737e2e16cb9a49c258ac4b82b2b5f4fa9d0f18:/tests/calc.at diff --git a/tests/calc.at b/tests/calc.at index 3b2e1378..34cac69d 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -16,8 +16,6 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. -AT_BANNER([[Simple Calculator.]]) - ## ---------------------------------------------------- ## ## Compile the grammar described in the documentation. ## ## ---------------------------------------------------- ## @@ -67,30 +65,17 @@ typedef int value_t; %} -/* Exercise M4 quoting: '@:>@@:>@', 0. */ - -/* Also exercise %union. */ +/* Exercise %union. */ %union { - value_t ival; /* A comment to exercise an old bug. */ + value_t ival; }; -/* Exercise post-prologue dependency to %union. */ -%{ -static void id (YYSTYPE *lval); - -/* Exercise quotes in declarations. */ -char quote[] = "@:>@@:>@,"; -%} - /* Bison Declarations */ %token CALC_EOF 0 "end of file" %token NUM "number" %type exp -/* Exercise quotes in strings. */ -%token FAKE "fake @>:@@>:@," - %nonassoc '=' /* comparison */ %left '-' '+' %left '*' '/' @@ -107,15 +92,10 @@ input: ; line: - '\n' -| exp '\n' - { - /* Exercise quotes in braces. */ - char tmp[] = "@>:@@:>@,"; - } + '\n' {} +| exp '\n' {} ; -/* Exercise M4 quoting: '@:>@@:>@', 1. */ exp: NUM { $$ = $1; } | exp '=' exp @@ -137,7 +117,6 @@ exp: /* The input. */ FILE *yyin; -/* Exercise M4 quoting: '@:>@@:>@', 2. */ static void yyerror (const char *s) { @@ -259,11 +238,6 @@ power (int base, int exponent) return res; } -void -id (YYSTYPE* lval) -{ -} - int main (int argc, const char **argv) { @@ -299,8 +273,8 @@ main (int argc, const char **argv) # Produce `calc.y'. m4_define([AT_DATA_CALC_Y], [_AT_DATA_CALC_Y($[1], $[2], $[3], - [m4_bmatch([$1], [--yyerror-verbose], - [[%error-verbose]])])]) + [m4_bpatsubst([$1], [--[^ ]*])]) +]) @@ -308,17 +282,22 @@ m4_define([AT_DATA_CALC_Y], # ------------------------------------------------------------ # Run `calc' on INPUT and expect no STDOUT nor STDERR. # -# If BISON-OPTIONS contains `--debug', then NUM-STDERR-LINES is the number -# of expected lines on stderr. +# If BISON-OPTIONS contains `%debug' but not `%glr-parser', then +# NUM-STDERR-LINES is the number of expected lines on stderr. +# +# We don't count GLR's traces yet, since its traces are somewhat +# different from LALR's. m4_define([_AT_CHECK_CALC], [AT_DATA([[input]], [[$2 ]]) -AT_CHECK([./calc input], 0, [], [stderr])dnl -AT_CHECK([wc -l at-expout mv at-expout expout]]) # 4. If error-verbose is not used, strip the`, unexpected....' part. -m4_bmatch([$1], [--yyerror-verbose], [], +m4_bmatch([$1], [%error-verbose], [], [[sed 's/parse error, .*$/parse error/' expout >at-expout mv at-expout expout]]) # 5. Check @@ -382,8 +364,8 @@ AT_CHECK([cat stderr], 0, [expout]) ]) -# AT_CHECK_CALC([BISON-OPTIONS], [PARSER-EXPECTED-STDERR]) -# -------------------------------------------------------- +# AT_CHECK_CALC([BISON-OPTIONS]) +# ------------------------------ # Start a testing chunk which compiles `calc' grammar with # BISON-OPTIONS, and performs several tests over the parser. m4_define([AT_CHECK_CALC], @@ -393,10 +375,10 @@ AT_SETUP([Calculator $1]) AT_DATA_CALC_Y([$1]) # Specify the output files to avoid problems on different file systems. -AT_CHECK([bison calc.y -o calc.c m4_bpatsubst([$1], [--yyerror-verbose])], +AT_CHECK([bison -o calc.c m4_bpatsubst([$1], [%[^ ]*]) calc.y], [0], [], []) -AT_CHECK([$CC $CFLAGS $CPPFLAGS calc.c -o calc], 0, [], [ignore]) +AT_COMPILE([calc]) # Test the priorities. _AT_CHECK_CALC([$1], @@ -415,41 +397,35 @@ _AT_CHECK_CALC([$1], (2^2)^3 = 64], [486]) # Some parse errors. -_AT_CHECK_CALC_ERROR([$1], [0 0], [12], +_AT_CHECK_CALC_ERROR([$1], [0 0], [11], [1.3-1.4: parse error, unexpected "number"]) -_AT_CHECK_CALC_ERROR([$1], [1//2], [17], +_AT_CHECK_CALC_ERROR([$1], [1//2], [15], [1.3-1.4: parse error, unexpected '/', expecting "number" or '-' or '(']) _AT_CHECK_CALC_ERROR([$1], [error], [4], - [1.1-1.2: parse error, unexpected $undefined., expecting "number" or '-' or '\n' or '(']) -_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [25], + [1.1-1.2: parse error, unexpected $undefined, expecting "number" or '-' or '\n' or '(']) +_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [22], [1.7-1.8: parse error, unexpected '=']) _AT_CHECK_CALC_ERROR([$1], [ +1], - [15], + [14], [2.1-2.2: parse error, unexpected '+']) # Exercise error messages with EOF: work on an empty file. -_AT_CHECK_CALC_ERROR([$1], - [/dev/null], - [4], +_AT_CHECK_CALC_ERROR([$1], [/dev/null], [4], [1.1-1.2: parse error, unexpected "end of file", expecting "number" or '-' or '\n' or '(']) # Exercise the error token: without it, we die at the first error, # hence be sure i. to have several errors, ii. to test the action # associated to `error'. -_AT_CHECK_CALC_ERROR([$1], - [(1 ++ 2) + (0 0) = 1], - [91], +_AT_CHECK_CALC_ERROR([$1], [(1 ++ 2) + (0 0) = 1], [82], [1.5-1.6: parse error, unexpected '+', expecting "number" or '-' or '(' 1.15-1.16: parse error, unexpected "number" calc: error: 0 != 1]) # Add a studid example demonstrating that Bison can further improve the # error message. FIXME: Fix this ridiculous message. -_AT_CHECK_CALC_ERROR([$1], - [()], - [21], -[1.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or '(']) +_AT_CHECK_CALC_ERROR([$1], [()], [21], +[1.2-1.3: parse error, unexpected ')', expecting "number" or '-' or '(']) AT_CLEANUP ])# AT_CHECK_CALC @@ -457,22 +433,62 @@ AT_CLEANUP -# ------------------ # -# Test the parsers. # -# ------------------ # +# ------------------------ # +# Simple LALR Calculator. # +# ------------------------ # + +AT_BANNER([[Simple LALR Calculator.]]) + +# AT_CHECK_CALC_LALR([BISON-OPTIONS]) +# ----------------------------------- +# Start a testing chunk which compiles `calc' grammar with +# BISON-OPTIONS, and performs several tests over the parser. +m4_define([AT_CHECK_CALC_LALR], +[AT_CHECK_CALC($@)]) + +AT_CHECK_CALC_LALR() + +AT_CHECK_CALC_LALR([--defines]) +AT_CHECK_CALC_LALR([--locations]) +AT_CHECK_CALC_LALR([--name-prefix=calc]) +AT_CHECK_CALC_LALR([--verbose]) +AT_CHECK_CALC_LALR([--yacc]) +AT_CHECK_CALC_LALR([%error-verbose]) + +AT_CHECK_CALC_LALR([%error-verbose --locations]) + +AT_CHECK_CALC_LALR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc]) + +AT_CHECK_CALC_LALR([%debug]) +AT_CHECK_CALC_LALR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc]) + + +# ----------------------- # +# Simple GLR Calculator. # +# ----------------------- # + +AT_BANNER([[Simple GLR Calculator.]]) + +# AT_CHECK_CALC_GLR([BISON-OPTIONS]) +# ---------------------------------- +# Start a testing chunk which compiles `calc' grammar with +# BISON-OPTIONS and %glr-parser, and performs several tests over the parser. +m4_define([AT_CHECK_CALC_GLR], +[AT_CHECK_CALC([%glr_parser] $@)]) + -AT_CHECK_CALC() +AT_CHECK_CALC_GLR() -AT_CHECK_CALC([--defines]) -AT_CHECK_CALC([--locations]) -AT_CHECK_CALC([--name-prefix=calc]) -AT_CHECK_CALC([--verbose]) -AT_CHECK_CALC([--yacc]) -AT_CHECK_CALC([--yyerror-verbose]) +AT_CHECK_CALC_GLR([--defines]) +AT_CHECK_CALC_GLR([--locations]) +AT_CHECK_CALC_GLR([--name-prefix=calc]) +AT_CHECK_CALC_GLR([--verbose]) +AT_CHECK_CALC_GLR([--yacc]) +AT_CHECK_CALC_GLR([%error-verbose]) -AT_CHECK_CALC([--locations --yyerror-verbose]) +AT_CHECK_CALC_GLR([%error-verbose --locations]) -AT_CHECK_CALC([--defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose]) +AT_CHECK_CALC_GLR([%error-verbose --defines --locations --name-prefix=calc --verbose --yacc]) -AT_CHECK_CALC([--debug]) -AT_CHECK_CALC([--debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose]) +AT_CHECK_CALC_GLR([%debug]) +AT_CHECK_CALC_GLR([%error-verbose %debug --defines --locations --name-prefix=calc --verbose --yacc])