[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] bison: factoring.
From: |
Akim Demaille |
Subject: |
[PATCH] bison: factoring. |
Date: |
Mon, 20 Apr 2009 23:38:07 +0200 |
* src/output.c (token_definitions_output): Use symbol_id_get
instead of duplicating its logic.
* TODO (YYERRCODE): Extend.
---
ChangeLog | 7 +++++++
TODO | 16 ++++++++++++++++
src/output.c | 33 ++++++++-------------------------
3 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a90249b..04cff9e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2009-04-20 Akim Demaille <address@hidden>
+ bison: factoring.
+ * src/output.c (token_definitions_output): Use symbol_id_get
+ instead of duplicating its logic.
+ * TODO (YYERRCODE): Extend.
+
+2009-04-20 Akim Demaille <address@hidden>
+
variables: prefer error-verbose to error_verbose.
* data/bison.m4 (b4_error_verbose_if): Based on error-verbose
instead of error_verbose.
diff --git a/TODO b/TODO
index 4bcb3a6..376ec1d 100644
--- a/TODO
+++ b/TODO
@@ -54,6 +54,22 @@ number for the error token, which POSIX wants to be 256, but
which
Bison might renumber if the user used number 256. Keep fix and doc?
Throw away?
+Also, why don't we output the token name of the error token in the
+output? It is explicitly skipped:
+
+ /* Skip error token and tokens without identifier. */
+ if (sym != errtoken && id)
+
+Of course there are issues with name spaces, but if we disable we have
+something which seems to be more simpler and more consistent instead
+of the special case YYERRCODE.
+
+ enum yytokentype {
+ error = 256,
+ // ...
+ };
+
+
We could (should?) also treat the case of the undef_token, which is
numbered 257 for yylex, and 2 internal. Both appear for instance in
toknum:
diff --git a/src/output.c b/src/output.c
index 0a08fc4..c5e9aab 100644
--- a/src/output.c
+++ b/src/output.c
@@ -469,37 +469,20 @@ token_definitions_output (FILE *out)
{
symbol *sym = symbols[i];
int number = sym->user_token_number;
+ uniqstr id = symbol_id_get (sym);
/* At this stage, if there are literal aliases, they are part of
SYMBOLS, so we should not find symbols which are the aliases
here. */
aver (number != USER_NUMBER_ALIAS);
- /* Skip error token. */
- if (sym == errtoken)
- continue;
-
- /* If this string has an alias, then it is necessarily the alias
- which is to be output. */
- if (sym->alias)
- sym = sym->alias;
-
- /* Don't output literal chars or strings (when defined only as a
- string). Note that must be done after the alias resolution:
- think about `%token 'f' "f"'. */
- if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
- continue;
-
- /* Don't #define nonliteral tokens whose names contain periods,
- dashes or '$' (as does the default value of the EOF token). */
- if (strchr (sym->tag, '.')
- || strchr (sym->tag, '-')
- || strchr (sym->tag, '$'))
- continue;
-
- fprintf (out, "%s[[[%s]], %d]",
- sep, sym->tag, number);
- sep = ",\n";
+ /* Skip error token and tokens without identifier. */
+ if (sym != errtoken && id)
+ {
+ fprintf (out, "%s[[[%s]], %d]",
+ sep, id, number);
+ sep = ",\n";
+ }
}
fputs ("])\n\n", out);
}
--
1.6.2.2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] bison: factoring.,
Akim Demaille <=