From 09903f303ac0547ff6b6bf3068fd4dc9c2acb0f4 Mon Sep 17 00:00:00 2001 From: Paul Hilfinger Date: Wed, 30 Oct 2002 02:03:14 +0000 Subject: [PATCH] Add test glr-regr1.at to check for incorrect collapsing of states during table compression in GLR parser. --- tests/Makefile.am | 2 +- tests/glr-regr1.at | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 5 ++- 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 tests/glr-regr1.at diff --git a/tests/Makefile.am b/tests/Makefile.am index 85c6e91..ff58ad1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -48,7 +48,7 @@ TESTSUITE_AT = \ synclines.at headers.at actions.at conflicts.at \ calc.at \ torture.at existing.at regression.at \ - cxx-type.at + cxx-type.at glr-regr1.at TESTSUITE = $(srcdir)/testsuite diff --git a/tests/glr-regr1.at b/tests/glr-regr1.at new file mode 100644 index 0000000..8c19640 --- /dev/null +++ b/tests/glr-regr1.at @@ -0,0 +1,101 @@ +# Checking GLR Parsing: Regression Test -*- Autotest -*- +# Copyright (C) 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AT_BANNER([[GLR Regression Test #1.]]) + +AT_SETUP([Badly Collapsed GLR States]) + +AT_DATA([glr-regr1.y], +[[/* Regression Test: Improper state compression */ +/* Reported by Scott McPeak */ + +%{ +#include // fgetc, printf + +#define YYSTYPE int +static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1); +%} + + +%glr-parser + + +/* -------- productions ------ */ +%% + +StartSymbol: E { $$=0; } %merge + ; + +E: E 'P' E { $$=1; printf("E -> E 'P' E\n"); } %merge + | 'B' { $$=2; printf("E -> 'B'\n"); } %merge + ; + + + +/* ---------- C code ----------- */ +%% + +static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1) +{ + printf ("\n"); + return 0; +} + +int main() +{ + yyparse(); + return 0; +} + +int yyerror(char const *msg) +{ + printf("%s\n", msg); + exit(4); +} + + +int yylex() +{ + while (1) { + int ch = fgetc(stdin); + if (ch == EOF) { + return 0; // bison's EOF + } else if (ch == 'B' || ch == 'P') { + return ch; + } + } +} +]]) + +AT_CHECK([[bison -o glr-regr1.c glr-regr1.y]], 0, [], +[glr-regr1.y: warning: 1 shift/reduce conflict +]) +AT_COMPILE([glr-regr1]) +AT_CHECK([[echo BPBPB | ./glr-regr1]], 0, +[[E -> 'B' +E -> 'B' +E -> E 'P' E +E -> 'B' +E -> E 'P' E +E -> 'B' +E -> E 'P' E +E -> E 'P' E + +]], []) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 5cc586e..9991296 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -77,5 +77,8 @@ m4_include([existing.at]) # Some old bugs. m4_include([regression.at]) -# GLR tests: C++ types, simplified +# GLR tests: +# C++ types, simplified m4_include([cxx-type.at]) +# Regression test for state-folding optimization +m4_include([glr-regr1.at]) -- 2.7.4