]> 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.
 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?
 
 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:
 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;
     {
       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);
 
 
       /* 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);
 }
     }
   fputs ("])\n\n", out);
 }