[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/10] skeletons: clarify the tag of special tokens
From: |
Akim Demaille |
Subject: |
[PATCH 10/10] skeletons: clarify the tag of special tokens |
Date: |
Sun, 12 Apr 2020 14:22:37 +0200 |
From
GRAM_EOF = 0, /* $end */
GRAM_ERRCODE = 1, /* error */
GRAM_UNDEF = 2, /* $undefined */
to
GRAM_EOF = 0, /* "end of file" */
GRAM_ERRCODE = 1, /* error */
GRAM_UNDEF = 2, /* "invalid token" */
* src/output.c (symbol_tag): New.
Use it to pass the token names and the symbol tags to the skeletons.
* tests/input.at: Adjust.
---
src/output.c | 48 ++++++++++++++++++++++++++++--------------------
src/parse-gram.c | 4 ++--
src/parse-gram.h | 4 ++--
tests/input.at | 4 ++--
4 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/src/output.c b/src/output.c
index 1a7aa906..01669f5a 100644
--- a/src/output.c
+++ b/src/output.c
@@ -196,6 +196,23 @@ has_translations (void)
return false;
}
+/* The tag to show in the generated parsers. Use "end of file" rather
+ than "$end". But keep "$end" in the reports, it's shorter and more
+ consistent. Support i18n if the user already uses it. */
+static const char *
+symbol_tag (const symbol *sym)
+{
+ const bool eof_is_user_defined
+ = !endtoken->alias || STRNEQ (endtoken->alias->tag, "$end");
+
+ if (!eof_is_user_defined && sym->content == endtoken->content)
+ return "\"end of file\"";
+ else if (sym->content == undeftoken->content)
+ return "\"invalid token\"";
+ else
+ return sym->tag;
+}
+
/* Generate the b4_<MUSCLE_NAME> (e.g., b4_tname) table with the
symbol names (aka tags). */
@@ -209,27 +226,18 @@ prepare_symbol_names (char const *muscle_name)
const bool with_translations = !quote && has_translations ();
/* We assume that the table will be output starting at column 2. */
- int j = 2;
+ int col = 2;
struct quoting_options *qo = clone_quoting_options (0);
set_quoting_style (qo, c_quoting_style);
set_quoting_flags (qo, QA_SPLIT_TRIGRAPHS);
for (int i = 0; i < nsyms; i++)
{
- /* Use "end of file" rather than "$end". But keep "$end" in the
- reports, it's shorter and more consistent. Support i18n if
- the user already uses it. */
- const char *tag = symbols[i]->tag;
- bool translatable = with_translations && symbols[i]->translatable;
- if (!eof_is_user_defined && symbols[i]->content == endtoken->content)
- {
- tag = "\"end of file\"";
- translatable = with_translations;
- }
- else if (symbols[i]->content == undeftoken->content)
- {
- tag = "\"invalid token\"";
- translatable = with_translations;
- }
+ const char *tag = symbol_tag (symbols[i]);
+ bool translatable =
+ with_translations
+ && (symbols[i]->translatable
+ || (!eof_is_user_defined && symbols[i]->content ==
endtoken->content)
+ || symbols[i]->content == undeftoken->content);
char *cp
= tag[0] == '"' && !quote
@@ -241,10 +249,10 @@ prepare_symbol_names (char const *muscle_name)
= strlen (cp) + 2
+ (translatable ? strlen ("N_()") : 0);
- if (j + width > 75)
+ if (col + width > 75)
{
obstack_sgrow (&format_obstack, "\n ");
- j = 1;
+ col = 1;
}
if (i)
@@ -256,7 +264,7 @@ prepare_symbol_names (char const *muscle_name)
obstack_sgrow (&format_obstack, "])[");
free (cp);
obstack_1grow (&format_obstack, ',');
- j += width;
+ col += width;
}
free (qo);
obstack_sgrow (&format_obstack, " ]b4_null[");
@@ -570,7 +578,7 @@ prepare_symbol_definitions (void)
/* Its tag. Typically for documentation purpose. */
SET_KEY ("tag");
- MUSCLE_INSERT_STRING (key, sym->tag);
+ MUSCLE_INSERT_STRING (key, symbol_tag (sym));
SET_KEY ("user_number");
MUSCLE_INSERT_INT (key, sym->content->user_token_number);
diff --git a/src/parse-gram.c b/src/parse-gram.c
index be7e599d..fb74a582 100644
--- a/src/parse-gram.c
+++ b/src/parse-gram.c
@@ -104,9 +104,9 @@
enum yysymbol_kind_t
{
YYSYMBOL_YYEMPTY = -2,
- YYSYMBOL_YYEOF = 0, /* $end */
+ YYSYMBOL_YYEOF = 0, /* "end of file" */
YYSYMBOL_YYERROR = 1, /* error */
- YYSYMBOL_YYUNDEF = 2, /* $undefined */
+ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
YYSYMBOL_STRING = 3, /* "string" */
YYSYMBOL_TSTRING = 4, /* "translatable string" */
YYSYMBOL_PERCENT_TOKEN = 5, /* "%token" */
diff --git a/src/parse-gram.h b/src/parse-gram.h
index ac501c5f..b40347ba 100644
--- a/src/parse-gram.h
+++ b/src/parse-gram.h
@@ -77,9 +77,9 @@ extern int gram_debug;
# define GRAM_TOKENTYPE
enum gram_tokentype
{
- GRAM_EOF = 0, /* $end */
+ GRAM_EOF = 0, /* "end of file" */
GRAM_ERRCODE = 1, /* error */
- GRAM_UNDEF = 2, /* $undefined */
+ GRAM_UNDEF = 2, /* "invalid token" */
STRING = 3, /* "string" */
TSTRING = 4, /* "translatable string" */
PERCENT_TOKEN = 5, /* "%token" */
diff --git a/tests/input.at b/tests/input.at
index 7cf2eccb..f1cab823 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -431,9 +431,9 @@ exp:;
AT_BISON_CHECK([-Wno-other -S./dump-symbols.m4 input.y])
AT_CHECK([cat symbols.csv], [],
[[number, class, tag, id, user_number, type,
-0, Token, $end, YYEOF, 0, ,
+0, Token, "end of file", YYEOF, 0, ,
1, Token, error, YYERRCODE, 256, ,
-2, Token, $undefined, YYUNDEF, 257, ,
+2, Token, "invalid token", YYUNDEF, 257, ,
3, Token, 'a', , 97, ,
4, Token, "A1", A1, 1, ,
5, Token, A2, A2, 258, ,
--
2.26.0
- [PATCH 00/10] Clean up the handling of the tokens, Akim Demaille, 2020/04/12
- [PATCH 01/10] tokens: style: minor fixes, Akim Demaille, 2020/04/12
- [PATCH 02/10] tokens: properly define the "error" token kind, Akim Demaille, 2020/04/12
- [PATCH 03/10] tokens: define the "$undefined" token kind, Akim Demaille, 2020/04/12
- [PATCH 05/10] c++: remove the yy prefix from some functions, Akim Demaille, 2020/04/12
- [PATCH 08/10] skeletons: make the eof token translatable if i18n is enabled, Akim Demaille, 2020/04/12
- [PATCH 04/10] tokens: properly define the YYEOF token kind, Akim Demaille, 2020/04/12
- [PATCH 06/10] diagnostics: replace "user token number" by "token code", Akim Demaille, 2020/04/12
- [PATCH 09/10] skeletons: use "invalid token" instead of "$undefined", Akim Demaille, 2020/04/12
- [PATCH 10/10] skeletons: clarify the tag of special tokens,
Akim Demaille <=
- [PATCH 07/10] skeletons: use "end of file" instead of "$end", Akim Demaille, 2020/04/12