]> git.saurik.com Git - bison.git/commitdiff
bison: factoring.
authorAkim Demaille <demaille@gostai.com>
Mon, 20 Apr 2009 21:38:07 +0000 (23:38 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 20 Apr 2009 21:52:15 +0000 (23:52 +0200)
* src/output.c (token_definitions_output): Use symbol_id_get
instead of duplicating its logic.
* TODO (YYERRCODE): Extend.

ChangeLog
TODO
src/output.c

index a90249b493830facecaf9986cfdde545a4f724d4..04cff9e7af8225ec04e8bcf369b66c0f5553cca3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-04-20  Akim Demaille  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
 
        variables: prefer error-verbose to error_verbose.
diff --git a/TODO b/TODO
index 4bcb3a65900ca2c392d389b300c54f9fb57c8816..376ec1d7b97284197a00e0474855640c36c9a309 100644 (file)
--- 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:
index 0a08fc4584883f4fed301074abf559feb355189f..c5e9aab99948c21c21ed294de50fdec7f3c75353 100644 (file)
@@ -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);
 }