From 72f000b088367bd18a20b3e063bc1ab6a3e0bc15 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 17 Apr 2005 08:07:15 +0000 Subject: [PATCH] * NEWS: Bison-generated C parsers no longer quote literal strings associated with tokens. * src/output.c (prepare_symbols): Don't escape strings, since users don't want to see C escapes. * tests/calc.at (AT_CHECK_CALC): Adjust to lack of quotes in diagnostics. * tests/regression.at (Token definitions, Web2c Actions): Likewise. --- ChangeLog | 10 ++++++++++ NEWS | 6 ++++++ src/output.c | 5 ++++- tests/calc.at | 20 ++++++++++---------- tests/regression.at | 11 ++++++----- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index a8b0758..77e4b7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-04-17 Paul Eggert + + * NEWS: Bison-generated C parsers no longer quote literal strings + associated with tokens. + * src/output.c (prepare_symbols): Don't escape strings, + since users don't want to see C escapes. + * tests/calc.at (AT_CHECK_CALC): Adjust to lack of quotes + in diagnostics. + * tests/regression.at (Token definitions, Web2c Actions): Likewise. + 2005-04-16 Paul Eggert * tests/torture.at (AT_INCREASE_DATA_SIZE): Skip the test if diff --git a/NEWS b/NEWS index e858ddf..fd5efa4 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,12 @@ Changes in version 2.0a, ????-??-??: English to the user's language, e.g., _("syntax error"). By default, _ is defined to be a no-op macro so the strings are not translated. +* When generating verbose diagnostics, Bison-generated C parsers no longer + quote the literal strings associated with tokens. For example, for + a syntax error associated with '%token NUM "number"' they might + print 'syntax error, unexpected number' instead of 'syntax error, + unexpected "number"'. + Changes in version 2.0, 2004-12-25: * Possibly-incompatible changes diff --git a/src/output.c b/src/output.c index 2278784..2b5e915 100644 --- a/src/output.c +++ b/src/output.c @@ -162,7 +162,10 @@ prepare_symbols (void) int j = 2; for (i = 0; i < nsyms; i++) { - const char *cp = quotearg_style (c_quoting_style, symbols[i]->tag); + char const *tag = symbols[i]->tag; + char const *cp = (*tag == '"' + ? tag + : quotearg_style (c_quoting_style, tag)); /* Width of the next token, including the two quotes, the comma and the space. */ int width = strlen (cp) + 2; diff --git a/tests/calc.at b/tests/calc.at index 15d9b77..69fda02 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -467,9 +467,9 @@ _AT_CHECK_CALC([$1], # Some syntax errors. _AT_CHECK_CALC_ERROR([$1], [1], [0 0], [13], - [1.2: syntax error, unexpected "number"]) + [1.2: syntax error, unexpected number]) _AT_CHECK_CALC_ERROR([$1], [1], [1//2], [18], - [1.2: syntax error, unexpected '/', expecting "number" or '-' or '(' or '!']) + [1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!']) _AT_CHECK_CALC_ERROR([$1], [1], [error], [5], [1.0: syntax error, unexpected $undefined]) _AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [26], @@ -481,7 +481,7 @@ _AT_CHECK_CALC_ERROR([$1], [1], [2.0: syntax error, unexpected '+']) # Exercise error messages with EOF: work on an empty file. _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5], - [1.0: syntax error, unexpected "end of input"]) + [1.0: syntax error, unexpected end of input]) # Exercise the error token: without it, we die at the first error, # hence be sure to @@ -502,20 +502,20 @@ _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [5], _AT_CHECK_CALC_ERROR([$1], [0], [() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1], [188], -[1.1: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!' -1.17: syntax error, unexpected ')', expecting "number" or '-' or '(' or '!' -1.22: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!' -1.40: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!' +[1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!' +1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!' +1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!' +1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!' calc: error: 4444 != 1]) # The same, but this time exercising explicitly triggered syntax errors. # POSIX says the look-ahead causing the error should not be discarded. _AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [75], -[1.9: syntax error, unexpected "number" +[1.9: syntax error, unexpected number calc: error: 2222 != 1]) _AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [85], -[1.3: syntax error, unexpected '*', expecting "number" or '-' or '(' or '!' -1.11: syntax error, unexpected "number" +[1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!' +1.11: syntax error, unexpected number calc: error: 2222 != 1]) AT_BISON_OPTION_POPDEFS diff --git a/tests/regression.at b/tests/regression.at index 3d67ee9..9796574 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -324,9 +324,9 @@ int yylex (void); %token B_TOKEN "b" %token C_TOKEN 'c' %token 'd' D_TOKEN -%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff" +%token SPECIAL "\\\'\?\"\n\t??!" %% -exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff"; +exp: "a" "\\\'\?\"\n\t??!"; %% void yyerror (char const *s) @@ -350,7 +350,8 @@ main (void) AT_CHECK([bison -o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 1, [], -[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\377\001\377", expecting "a" +[syntax error, unexpected \'?" + ??!, expecting a ]) AT_CLEANUP @@ -634,8 +635,8 @@ static const unsigned char yyrline[] = }; static const char *const yytname[] = { - "$end", "error", "$undefined", "\"if\"", "\"const\"", "\"then\"", - "\"else\"", "$accept", "statement", "struct_stat", "if", "else", 0 + "$end", "error", "$undefined", "if", "const", "then", "else", "$accept", + "statement", "struct_stat", "if", "else", 0 }; static const unsigned short int yytoknum[] = { -- 2.7.4