]> git.saurik.com Git - bison.git/commitdiff
* data/c.m4 (b4_token_enum): Always define the enum of tokens,
authorAkim Demaille <akim@epita.fr>
Fri, 10 Mar 2006 13:30:19 +0000 (13:30 +0000)
committerAkim Demaille <akim@epita.fr>
Fri, 10 Mar 2006 13:30:19 +0000 (13:30 +0000)
even if empty.
* data/lalrl1.cc, data/glr.cc (parser::token_type): New.
* doc/bison.texinfo (Calc++ Scanner): Use it.

ChangeLog
data/c++.m4
data/glr.cc
data/lalr1.cc
doc/bison.texinfo

index 543c214001f7b7e06b19efdb099a9ace1b51cf80..5c5a4c6053a5e554d97f451a88a3067aea4bacea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
+
+       * data/c.m4 (b4_token_enum): Always define the enum of tokens,
+       even if empty.
+       * data/lalrl1.cc, data/glr.cc (parser::token_type): New.
+       * doc/bison.texinfo (Calc++ Scanner): Use it.
+
 2006-03-09  Paul Eggert  <eggert@cs.ucla.edu>
 
        Fix two nits reported by twlevo, plus one more that I discovered.
index 3f38a8edf8156566b8157c76184bc6761a7048d5..a2834f02f37ae639c51f7c0ee3d266da78659dd1 100644 (file)
@@ -34,16 +34,15 @@ m4_define_default([b4_filename_type], [std::string])
 
 # b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
 # -----------------------------------------------------
-# Output the definition of the tokens (if there are) as enums.
+# Output the definition of the tokens as enums.
 m4_define([b4_token_enums],
-[m4_if([$@], [[]], [],
 [/* Tokens.  */
    enum yytokentype {
 m4_map_sep([     b4_token_enum], [,
 ],
            [$@])
    };
-])])
+])
 
 
 ## ----------------- ##
index 55e024c8c4d29058b55d5d0b081a632dbfc3f940..521b36b6029772d6b15dfd73ca04ca56431595be 100644 (file)
@@ -312,6 +312,8 @@ b4_syncline([@oline@], [@ofile@])
     {
       ]b4_token_enums(b4_tokens)[
     };
+    /// Token type.
+    typedef token::yytokentype token_type;
 
     /// Build a parser object.
     ]b4_parser_class_name[ (]b4_parse_param_decl[);
index d8782fae88dd458e17a9482c6920cd432dc32db0..8f0ebe8f52de10e5df0f68b15a2a742ccd6df79c 100644 (file)
@@ -120,6 +120,8 @@ b4_syncline([@oline@], [@ofile@])
     {
       ]b4_token_enums(b4_tokens)[
     };
+    /// Token type.
+    typedef token::yytokentype token_type;
 
     /// Build a parser object.
     ]b4_parser_class_name[ (]b4_parse_param_decl[);
index 3aac11e436fce244f03c087432bb43b34dcd224e..690340424e92d9f17c6b4714888760f5b55c4d95 100644 (file)
@@ -7326,10 +7326,11 @@ factor both as follows.
 @comment file: calc++-driver.hh
 @example
 // Announce to Flex the prototype we want for lexing function, ...
-# define YY_DECL                                                \
-  int yylex (yy::calcxx_parser::semantic_type* yylval,           \
-             yy::calcxx_parser::location_type* yylloc,           \
-             calcxx_driver& driver)
+# define YY_DECL                                       \
+  yy::calcxx_parser::token_type                         \
+  yylex (yy::calcxx_parser::semantic_type* yylval,      \
+         yy::calcxx_parser::location_type* yylloc,      \
+         calcxx_driver& driver)
 // ... and declare it for the parser's sake.
 YY_DECL;
 @end example
@@ -7621,6 +7622,10 @@ parser's to get the set of defined tokens.
   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
 # undef yywrap
 # define yywrap() 1
+/* By default yylex returns int, we use token_type.
+   Unfortunately yyterminate by default returns 0, which is
+   not of token_type.  */
+#define yyterminate() return token::END 
 %@}
 @end example
 
@@ -7678,8 +7683,8 @@ It is convenient to use a typedef to shorten
 %@{
   typedef yy::calcxx_parser::token token;
 %@}
-
-[-+*/]     return yytext[0];
+           /* Convert ints to the actual type of tokens. */
+[-+*/]     return yy::calcxx_parser::token_type (yytext[0]);
 ":="       return token::ASSIGN;
 @{int@}      @{
   errno = 0;