bison-patches
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]