* src/parse-gram.y (char_name): New function.

(CHAR, STRING, string_content): For %printer, properly escape.
(ID): Prefer fputs to fprintf.
(id): Reindent to be consistent with other rules.
Properly quote char.
This commit is contained in:
Paul Eggert
2006-06-19 21:32:41 +00:00
parent 5a2baae7b3
commit 33ad1a9c2d
2 changed files with 35 additions and 12 deletions

View File

@@ -1,5 +1,11 @@
2006-06-19 Paul Eggert <eggert@cs.ucla.edu>
* src/parse-gram.y (char_name): New function.
(CHAR, STRING, string_content): For %printer, properly escape.
(ID): Prefer fputs to fprintf.
(id): Reindent to be consistent with other rules.
Properly quote char.
The Translation Project changed its way of publishing translations
to maintainers. I haven't received any responses to my request
for supporting the old way, or for documenting the new way. I

View File

@@ -51,6 +51,8 @@ static void version_check (location const *loc, char const *version);
gram_error (&yylloc, Msg)
static void gram_error (location const *, char const *);
static char const *char_name (char);
static void add_param (char const *, char *, location);
static symbol_class current_class = unknown_sym;
@@ -169,15 +171,16 @@ static int current_prec = 0;
%token TYPE "type"
%type <character> CHAR
%printer { fprintf (stderr, "'%c' (%d)", $$, $$); } CHAR
%printer { fputs (char_name ($$), stderr); } CHAR
%type <chars> STRING string_content "{...}" PROLOGUE EPILOGUE
%printer { fprintf (stderr, "\"%s\"", $$); } STRING string_content
%printer { fputs (quotearg_style (c_quoting_style, $$), stderr); }
STRING string_content
%printer { fprintf (stderr, "{\n%s\n}", $$); } "{...}" PROLOGUE EPILOGUE
%type <uniqstr> TYPE ID ID_COLON
%printer { fprintf (stderr, "<%s>", $$); } TYPE
%printer { fprintf (stderr, "%s", $$); } ID
%printer { fputs ($$, stderr); } ID
%printer { fprintf (stderr, "%s:", $$); } ID_COLON
%type <integer> INT
@@ -455,17 +458,18 @@ rhs:
| Identifiers. |
*---------------*/
/* Identifiers are return as uniqstr by the scanner. Depending on
their use, we may need to make them genuine symbols. */
/* Identifiers are returned as uniqstr values by the scanner.
Depending on their use, we may need to make them genuine symbols. */
id:
ID { $$ = symbol_get ($1, @1); }
| CHAR { char cp[4] = { '\'', $1, '\'', 0 };
$$ = symbol_get (quotearg_style (escape_quoting_style, cp),
@1);
symbol_class_set ($$, token_sym, @1, false);
symbol_user_token_number_set ($$, $1, @1);
}
ID
{ $$ = symbol_get ($1, @1); }
| CHAR
{
$$ = symbol_get (char_name ($1), @1);
symbol_class_set ($$, token_sym, @1, false);
symbol_user_token_number_set ($$, $1, @1);
}
;
id_colon:
@@ -609,3 +613,16 @@ token_name (int type)
{
return yytname[YYTRANSLATE (type)];
}
static char const *
char_name (char c)
{
if (c == '\'')
return "'\\''";
else
{
char buf[4];
buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
return quotearg_style (escape_quoting_style, buf);
}
}