X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/3ef9fa8f83316f7955babee666546feb5d9bdefc..57597927ef1b9cc751df4314764a6edd575ffc8b:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index 398b9498..f101f218 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -130,7 +130,6 @@ AT_SETUP([Early token definitions without --yacc]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%{ -#include ]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[ void print_my_token (void); @@ -141,6 +140,7 @@ void print_my_token (void); int val; }; %{ +#include void print_my_token (void) { @@ -263,11 +263,11 @@ AT_CHECK([cat input.output], [], 0 $accept: expr $end - 1 $@1: /* empty */ + 1 $@1: %empty 2 expr: 'a' $@1 'b' - 3 $@2: /* empty */ + 3 $@2: %empty 4 expr: $@2 'c' @@ -373,11 +373,14 @@ AT_DATA([input.y], %token LE 134 "<=" %left OR "<=" %% -exp: ; +exp: %empty; %% ]]) -AT_BISON_CHECK([-v -o input.c input.y]) +AT_BISON_CHECK([-v -Wall -o input.c input.y], 0, [], +[[input.y:1.29-32: warning: useless precedence and associativity for "||" [-Wprecedence] +input.y:2.29-32: warning: useless precedence and associativity for "<=" [-Wprecedence] +]]) AT_CLEANUP @@ -446,8 +449,6 @@ AT_BISON_OPTION_PUSHDEFS # Bison managed, when fed with '%token 'f' "f"' to #define 'f'! AT_DATA_GRAMMAR([input.y], [%{ -#include -#include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} @@ -572,7 +573,7 @@ AT_CHECK([cat input.output], 0, 2 CONST_DEC_LIST: CONST_DEC 3 | CONST_DEC_LIST CONST_DEC - 4 $@1: /* empty */ + 4 $@1: %empty 5 CONST_DEC: $@1 undef_id_tok '=' const_id_tok ';' @@ -720,7 +721,7 @@ AT_KEYWORDS([report]) AT_DATA([input.y], [[%% statement: struct_stat; -struct_stat: /* empty. */ | if else; +struct_stat: %empty | if else; if: "if" "const" "then" statement; else: "else" statement; %% @@ -839,7 +840,6 @@ m4_define([_AT_DATA_DANCER_Y], } $1 %token ARROW INVALID NUMBER STRING DATA -%defines %verbose %error-verbose /* Grammar follows */ @@ -869,7 +869,7 @@ type: DATA | INVALID ; -body: /* empty */ +body: %empty | body member ; @@ -883,17 +883,6 @@ member: STRING %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE([":"])[ -]AT_LALR1_CC_IF( -[int -yyparse () -{ - yy::parser parser; -#if YYDEBUG - parser.set_debug_level (YYDEBUG); -#endif - return parser.parse (); -} -])[ ]AT_MAIN_DEFINE[ ]]) ])# _AT_DATA_DANCER_Y @@ -931,18 +920,16 @@ m4_define([_AT_DATA_EXPECT2_Y], [%{ static int yylex (AT_LALR1_CC_IF([int *], [void])); AT_LALR1_CC_IF([[#include ]], -[[#include -#include +[[ ]AT_YYERROR_DECLARE])[ %} $1 -%defines %error-verbose %token A 1000 %token B %% -program: /* empty */ +program: %empty | program e ';' | program error ';'; @@ -1007,16 +994,14 @@ AT_SETUP([Braced code in declaration in rules section]) # Bison once mistook braced code in a declaration in the rules section to be a # rule action. -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%{ -#include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} - +%debug %error-verbose - %% start: @@ -1032,19 +1017,13 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["a"])[ - -int -main (void) -{ - yydebug = 1; - return !yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 0, +AT_PARSER_CHECK([./input --debug], 1, [[Bison would once convert this action to a midrule because of the subsequent braced code. ]], [[Starting parse @@ -1083,7 +1062,7 @@ start: 'a' "A" 'b'; %token 'a' "A"; ]]) -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_CLEANUP @@ -1140,11 +1119,10 @@ AT_SETUP([[Token number in precedence declaration]]) # we lost this in Bison 1.50. AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], -[[%{ - #include +[[%code { ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ -%} +} %error-verbose %right END 0 @@ -1169,9 +1147,10 @@ sr_conflict: ]]) AT_BISON_OPTION_POPDEFS -AT_BISON_CHECK([[-o input.c input.y]], [[0]],, -[[input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start [-Wother] -input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias" [-Wother] +AT_BISON_CHECK([[-Wall -o input.c input.y]], [[0]],, +[[input.y:24.5-19: warning: rule useless in parser due to conflicts [-Wother] +input.y:28.5-19: warning: rule useless in parser due to conflicts [-Wother] +input.y:18.7-9: warning: useless precedence and associativity for TK1 [-Wprecedence] ]]) AT_COMPILE([[input]]) AT_PARSER_CHECK([[./input]]) @@ -1214,7 +1193,6 @@ AT_SETUP([[parse.error=verbose and YYSTACK_USE_ALLOCA]]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ #define YYSTACK_USE_ALLOCA 1 @@ -1289,7 +1267,6 @@ AT_SETUP([[parse.error=verbose overflow]]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ @@ -1399,15 +1376,14 @@ AT_SETUP([[LAC: Exploratory stack]]) m4_pushdef([AT_LAC_CHECK], [ -AT_BISON_OPTION_PUSHDEFS([$1]) +AT_BISON_OPTION_PUSHDEFS([%debug $1]) AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[); } - +%debug ]$1[ %define parse.error verbose %token 'c' @@ -1434,21 +1410,16 @@ yylex (]AT_PURE_IF([[YYSTYPE *v]], [[void]])[) return *input++; } -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ -Dparse.lac.memory-trace=full \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 21 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) -AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]]) +AT_PARSER_CHECK([[./input --debug > stdout.txt 2> stderr.txt]], [[1]]) # Make sure syntax error doesn't forget that 'a' is expected. It would # be forgotten without lookahead correction. @@ -1492,15 +1463,14 @@ AT_CLEANUP AT_SETUP([[LAC: Memory exhaustion]]) m4_pushdef([AT_LAC_CHECK], -[AT_BISON_OPTION_PUSHDEFS +[AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ #define YYMAXDEPTH 8 } - +%debug %error-verbose %% @@ -1511,16 +1481,11 @@ A: /*empty*/ | 'a' ; %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["$1"])[ -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 8 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) @@ -1529,7 +1494,7 @@ AT_BISON_OPTION_POPDEFS # Check for memory exhaustion during parsing. AT_LAC_CHECK([]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Now at end of input. @@ -1543,7 +1508,7 @@ Stack now 0 # Induce an immediate syntax error with an undefined token, and check # for memory exhaustion while building syntax error message. AT_LAC_CHECK([z], [[0]]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Next token is token $undefined () @@ -1574,27 +1539,22 @@ AT_CLEANUP m4_pushdef([AT_TEST], [AT_SETUP([[Lex and parse params: $1]]) +## FIXME: Improve parsing of parse-param. AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" %parse-param { int x } %parse-param { int y }]) -## FIXME: Improve parsing of parse-param and use the generated -## yyerror. AT_DATA_GRAMMAR([input.y], -[[%defines -%locations +[[%locations %skeleton "$1" %union { int ival; } %parse-param { int x } // Spaces, tabs, and new lines. %parse-param { @&t@ - int y @&t@ +@tb@ int y@tb@ @&t@ @&t@ @&t@ } %{ -#include -#include - ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} @@ -1617,7 +1577,7 @@ yyparse (int x, int y) int main (void) { - return !!yyparse(1, 2); + return yyparse(1, 2); } ]]) @@ -1636,3 +1596,33 @@ AT_TEST([lalr1.cc]) AT_TEST([glr.cc]) m4_popdef([AT_TEST]) + + +## ----------------------- ## +## stdio.h is not needed. ## +## ----------------------- ## + +# At some point, by accident, yy_location_print_ was using fprintf and +# FILE which are from stdio.h, which we do not require. +AT_SETUP([[stdio.h is not needed]]) + +AT_BISON_OPTION_PUSHDEFS + +AT_DATA_GRAMMAR([input.y], +[[%locations +%code +{ + static int yylex (void) { return 0; } + static void yyerror (const char* msg) { (void) msg; } +} +%% +exp: {} +%% +]AT_MAIN_DEFINE[ +]]) + +AT_FULL_COMPILE([input]) + +AT_BISON_OPTION_POPDEFS + +AT_CLEANUP