]> git.saurik.com Git - bison.git/commitdiff
* src/reader.c (token_translations_init): 256 is now the default
authorAkim Demaille <akim@epita.fr>
Mon, 22 Apr 2002 08:22:11 +0000 (08:22 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 22 Apr 2002 08:22:11 +0000 (08:22 +0000)
value for the error token, i.e., it will be assigned another
number if the user assigned 256 to one of her tokens.
(reader): Don't force 256 to error.
* doc/bison.texinfo (Symbols): Adjust.
* tests/torture.at (AT_DATA_HORIZONTAL_GRAMMAR)
(AT_DATA_TRIANGULAR_GRAMMAR): Number the tokens as 1, 2, 3
etc. instead of 10, 20, 30 (which was used to `jump' over error
(256) and undefined (2)).

ChangeLog
NEWS
doc/bison.texinfo
src/reader.c
tests/torture.at

index 1570a9e03a6fed689e1846dbbde8985c52378047..fe43e4cbff49424db185dd3a36f364cdbd6d726a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+       * src/reader.c (token_translations_init): 256 is now the default
+       value for the error token, i.e., it will be assigned another
+       number if the user assigned 256 to one of her tokens.
+       (reader): Don't force 256 to error.
+       * doc/bison.texinfo (Symbols): Adjust.
+       * tests/torture.at (AT_DATA_HORIZONTAL_GRAMMAR)
+       (AT_DATA_TRIANGULAR_GRAMMAR): Number the tokens as 1, 2, 3
+       etc. instead of 10, 20, 30 (which was used to `jump' over error
+       (256) and undefined (2)).
+
 2002-04-22  Akim Demaille  <akim@epita.fr>
 
        Propagate more token_number_t.
 2002-04-22  Akim Demaille  <akim@epita.fr>
 
        Propagate more token_number_t.
diff --git a/NEWS b/NEWS
index f339c6591ae89594ff936804f83bb849d3288ca8..23d628ea525f5d5aa21ac953d186ed9b8c9af297 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,12 @@ Changes in version 1.49a:
   If yylex returned a code out of range, yyparse could die.  This is
   no longer the case.
 
   If yylex returned a code out of range, yyparse could die.  This is
   no longer the case.
 
+* Error token
+  According to POSIX, the error token should be numbered as 256.
+  Bison extends this requirement by making it a preference: *if* the
+  user specified that one of her tokens is numbered 256, then error
+  will be mapped onto another number.
+
 * Large grammars
   Are now supported (large token numbers, large grammar size (= sum of
   the LHS and RHS lengths).
 * Large grammars
   Are now supported (large token numbers, large grammar size (= sum of
   the LHS and RHS lengths).
@@ -19,11 +25,11 @@ Changes in version 1.49a:
   Bison used to play hacks with the initial rule, which the user does
   not write.  It is now explicit, and visible in the reports and
   graphs as rule 0.
   Bison used to play hacks with the initial rule, which the user does
   not write.  It is now explicit, and visible in the reports and
   graphs as rule 0.
-      
+
 * Useless rules are actually removed.
   Before, Bison reported the useless rules, but, although not used,
   included them in the parsers.
 * Useless rules are actually removed.
   Before, Bison reported the useless rules, but, although not used,
   included them in the parsers.
-        
+
 * False `Token not used' report fixed.
   On a grammar such as
 
 * False `Token not used' report fixed.
   On a grammar such as
 
index 58186349d5f5c7264e0909309fc429c0f5047b2d..84a4ae8ebdb9fcdf58a7c7dff84e1380d2665d86 100644 (file)
@@ -2218,11 +2218,9 @@ files before compiling them.
 
 The symbol @code{error} is a terminal symbol reserved for error recovery
 (@pxref{Error Recovery}); you shouldn't use it for any other purpose.
 
 The symbol @code{error} is a terminal symbol reserved for error recovery
 (@pxref{Error Recovery}); you shouldn't use it for any other purpose.
-In particular, @code{yylex} should never return this value.
-The default value of the error token is 256, so in the
-unlikely event that you need to use a character token with numeric
-value 256 you must reassign the error token's value with a
-@code{%token} declaration.
+In particular, @code{yylex} should never return this value.  The default
+value of the error token is 256, unless you explicitly assigned 256 to
+one of your tokens with a @code{%token} declaration.
 
 @node Rules
 @section Syntax of Grammar Rules
 
 @node Rules
 @section Syntax of Grammar Rules
index da0744e535526a0d48145fc0e082a7e829e7a42b..6a99cfffa79e0b57ceaeb46c3562a6c28710b639 100644 (file)
@@ -1678,15 +1678,37 @@ read_additionnal_code (void)
 static void
 token_translations_init (void)
 {
 static void
 token_translations_init (void)
 {
-  int last_user_token_number = 256;
+  int num_256_available_p = TRUE;
   int i;
 
   int i;
 
-  /* Set the user numbers. */
+  /* Find the highest user token number, and whether 256, the POSIX
+     preferred user token number for the error token, is used.  */
+  max_user_token_number = 0;
+  for (i = 0; i < ntokens; ++i)
+    {
+      symbol_t *this = symbols[i];
+      if (this->user_token_number != SUNDEF)
+       {
+         if (this->user_token_number > max_user_token_number)
+           max_user_token_number = this->user_token_number;
+         if (this->user_token_number == 256)
+           num_256_available_p = FALSE;
+       }
+    }
+
+  /* If 256 is not used, assign it to error, to follow POSIX.  */
+  if (num_256_available_p && errtoken->user_token_number == SUNDEF)
+    errtoken->user_token_number = 256;
+
+  /* Set the missing user numbers. */
+  if (max_user_token_number < 256)
+    max_user_token_number = 256;
+
   for (i = 0; i < ntokens; ++i)
     {
       symbol_t *this = symbols[i];
       if (this->user_token_number == SUNDEF)
   for (i = 0; i < ntokens; ++i)
     {
       symbol_t *this = symbols[i];
       if (this->user_token_number == SUNDEF)
-       this->user_token_number = ++last_user_token_number;
+       this->user_token_number = ++max_user_token_number;
       if (this->user_token_number > max_user_token_number)
        max_user_token_number = this->user_token_number;
     }
       if (this->user_token_number > max_user_token_number)
        max_user_token_number = this->user_token_number;
     }
@@ -1698,7 +1720,6 @@ token_translations_init (void)
      inputs.  */
   for (i = 0; i < max_user_token_number + 1; i++)
     token_translations[i] = undeftoken->number;
      inputs.  */
   for (i = 0; i < max_user_token_number + 1; i++)
     token_translations[i] = undeftoken->number;
-
   symbols_do (symbol_translation, NULL);
 }
 
   symbols_do (symbol_translation, NULL);
 }
 
@@ -1824,7 +1845,6 @@ reader (void)
   errtoken = getsym ("error");
   errtoken->class = token_sym;
   errtoken->number = ntokens++;
   errtoken = getsym ("error");
   errtoken->class = token_sym;
   errtoken->number = ntokens++;
-  errtoken->user_token_number = 256;   /* Value specified by POSIX.  */
 
   /* Construct a token that represents all undefined literal tokens.
      It is always token number 2.  */
 
   /* Construct a token that represents all undefined literal tokens.
      It is always token number 2.  */
index 24f1cada7812db98ad1df1ecfde30f3824702642..deb5ab1d178726fe37115c472b776e25e9d6e9ff 100644 (file)
@@ -60,7 +60,7 @@ EOF
 
 for my $size (1 .. $max)
   {
 
 for my $size (1 .. $max)
   {
-    print "%token \"$size\" ", $size * 10, "\n";
+    print "%token \"$size\" ", $size, "\n";
   };
 
 print <<EOF;
   };
 
 print <<EOF;
@@ -100,7 +100,7 @@ yylex (void)
       ++outer;
       return END;
     }
       ++outer;
       return END;
     }
-  return inner++ * 10;
+  return inner++;
 }
 
 static void
 }
 
 static void
@@ -170,7 +170,7 @@ EOF
 
 for my $size (1 .. $max)
   {
 
 for my $size (1 .. $max)
   {
-    print "%token \"$size\" ", $size * 10, "\n";
+    print "%token \"$size\" ", $size, "\n";
   };
 
 print <<EOF;
   };
 
 print <<EOF;
@@ -192,7 +192,7 @@ yylex (void)
   if (counter > $max)
     return 0;
   else
   if (counter > $max)
     return 0;
   else
-  return counter++ * 10;
+  return counter++;
 }
 
 static void
 }
 
 static void