mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 09:13:04 +00:00
* src/parse-gram.y: Include quotearg.h.
(string_as_id): Quote $1 before using it as a key, since the
lexer no longer quotes it for us.
(string_content): Don't strip quotes, since lexer no longer
quotes it for us.
* src/scan-gram.l: Include quotearg.h.
("\""): Omit quote.
("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
a key, since the rest of the lexer doesn't quote it.
* src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
* tests/regression.at (Token definitions): Check for backslashes
in token strings.
This commit is contained in:
22
ChangeLog
22
ChangeLog
@@ -1,3 +1,25 @@
|
|||||||
|
2005-04-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
|
* src/parse-gram.y: Include quotearg.h.
|
||||||
|
(string_as_id): Quote $1 before using it as a key, since the
|
||||||
|
lexer no longer quotes it for us.
|
||||||
|
(string_content): Don't strip quotes, since lexer no longer
|
||||||
|
quotes it for us.
|
||||||
|
* src/scan-gram.l: Include quotearg.h.
|
||||||
|
("\""): Omit quote.
|
||||||
|
("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
|
||||||
|
a key, since the rest of the lexer doesn't quote it.
|
||||||
|
* src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
|
||||||
|
* tests/regression.at (Token definitions): Check for backslashes
|
||||||
|
in token strings.
|
||||||
|
|
||||||
|
* data/yacc.c (YYSTACK_ALLOC_MAXIMUM): New macro.
|
||||||
|
(YYSIZE_T): Define to unsigned long int when using an older compiler.
|
||||||
|
(yyparse): Revamp code to generate long syntax error message, to
|
||||||
|
make it easier to translate, and to avoid problems with arithmetic
|
||||||
|
overflow. Change "virtual memory" to "memory" in diagnostic, since
|
||||||
|
we don't know whether the memory is virtual.
|
||||||
|
|
||||||
2005-04-13 Paul Eggert <eggert@cs.ucla.edu>
|
2005-04-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
* NEWS: Bison-generated C parsers now use the _ macro to
|
* NEWS: Bison-generated C parsers now use the _ macro to
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
%{/* Bison Grammar Parser -*- C -*-
|
%{/* Bison Grammar Parser -*- C -*-
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of Bison, the GNU Compiler Compiler.
|
This file is part of Bison, the GNU Compiler Compiler.
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "muscle_tab.h"
|
#include "muscle_tab.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
|
#include "quotearg.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "symlist.h"
|
#include "symlist.h"
|
||||||
|
|
||||||
@@ -403,25 +404,23 @@ symbol:
|
|||||||
|
|
||||||
action:
|
action:
|
||||||
BRACED_CODE
|
BRACED_CODE
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
/* A string used as an ID: we have to keep the quotes. */
|
/* A string used as an ID: quote it. */
|
||||||
string_as_id:
|
string_as_id:
|
||||||
STRING
|
STRING
|
||||||
{
|
{
|
||||||
$$ = symbol_get ($1, @1);
|
$$ = symbol_get (quotearg_style (c_quoting_style, $1), @1);
|
||||||
symbol_class_set ($$, token_sym, @1);
|
symbol_class_set ($$, token_sym, @1);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
/* A string used for its contents. Strip the quotes. */
|
/* A string used for its contents. Don't quote it. */
|
||||||
string_content:
|
string_content:
|
||||||
STRING
|
STRING
|
||||||
{
|
{ $$ = $1; }
|
||||||
$$ = $1 + 1;
|
;
|
||||||
$$[strlen ($$) - 1] = '\0';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
epilogue.opt:
|
epilogue.opt:
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
|
#include "quotearg.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "uniqstr.h"
|
#include "uniqstr.h"
|
||||||
|
|
||||||
@@ -249,7 +250,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
"'" STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
|
"'" STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
|
||||||
|
|
||||||
/* Strings. */
|
/* Strings. */
|
||||||
"\"" STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_STRING;
|
"\"" token_start = loc->start; BEGIN SC_ESCAPED_STRING;
|
||||||
|
|
||||||
/* Prologue. */
|
/* Prologue. */
|
||||||
"%{" code_start = loc->start; BEGIN SC_PROLOGUE;
|
"%{" code_start = loc->start; BEGIN SC_PROLOGUE;
|
||||||
@@ -360,7 +361,6 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
<SC_ESCAPED_STRING>
|
<SC_ESCAPED_STRING>
|
||||||
{
|
{
|
||||||
"\"" {
|
"\"" {
|
||||||
STRING_GROW;
|
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = token_start;
|
loc->start = token_start;
|
||||||
val->chars = last_string;
|
val->chars = last_string;
|
||||||
@@ -384,7 +384,9 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
STRING_GROW;
|
STRING_GROW;
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = token_start;
|
loc->start = token_start;
|
||||||
val->symbol = symbol_get (last_string, *loc);
|
val->symbol = symbol_get (quotearg_style (escape_quoting_style,
|
||||||
|
last_string),
|
||||||
|
*loc);
|
||||||
symbol_class_set (val->symbol, token_sym, *loc);
|
symbol_class_set (val->symbol, token_sym, *loc);
|
||||||
last_string_1 = last_string[1];
|
last_string_1 = last_string[1];
|
||||||
symbol_user_token_number_set (val->symbol, last_string_1, *loc);
|
symbol_user_token_number_set (val->symbol, last_string_1, *loc);
|
||||||
|
|||||||
@@ -475,8 +475,7 @@ symbol_get (const char *key, location loc)
|
|||||||
symbol probe;
|
symbol probe;
|
||||||
symbol *entry;
|
symbol *entry;
|
||||||
|
|
||||||
/* Keep the symbol in a printable form. */
|
key = uniqstr_new (key);
|
||||||
key = uniqstr_new (quotearg_style (escape_quoting_style, key));
|
|
||||||
probe.tag = key;
|
probe.tag = key;
|
||||||
entry = hash_lookup (symbol_table, &probe);
|
entry = hash_lookup (symbol_table, &probe);
|
||||||
|
|
||||||
|
|||||||
@@ -314,20 +314,44 @@ AT_SETUP([Token definitions])
|
|||||||
# Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
|
# Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
|
||||||
AT_DATA_GRAMMAR([input.y],
|
AT_DATA_GRAMMAR([input.y],
|
||||||
[%{
|
[%{
|
||||||
|
#include <stdio.h>
|
||||||
void yyerror (const char *s);
|
void yyerror (const char *s);
|
||||||
int yylex (void);
|
int yylex (void);
|
||||||
%}
|
%}
|
||||||
[%token MYEOF 0 "end of file"
|
[%error-verbose
|
||||||
|
%token MYEOF 0 "end of file"
|
||||||
%token 'a' "a"
|
%token 'a' "a"
|
||||||
%token B_TOKEN "b"
|
%token B_TOKEN "b"
|
||||||
%token C_TOKEN 'c'
|
%token C_TOKEN 'c'
|
||||||
%token 'd' D_TOKEN
|
%token 'd' D_TOKEN
|
||||||
|
%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff"
|
||||||
%%
|
%%
|
||||||
exp: "a";
|
exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff";
|
||||||
|
%%
|
||||||
|
void
|
||||||
|
yyerror (char const *s)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s\n", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
yylex (void)
|
||||||
|
{
|
||||||
|
return SPECIAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
return yyparse ();
|
||||||
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CHECK([bison -o input.c input.y])
|
AT_CHECK([bison -o input.c input.y])
|
||||||
AT_COMPILE([input.o], [-c input.c])
|
AT_COMPILE([input])
|
||||||
|
AT_PARSER_CHECK([./input], 1, [],
|
||||||
|
[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\377\001\377", expecting "a"
|
||||||
|
])
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user