This bit was really missing from the C++ skeletons.
Index: ChangeLog
from Akim Demaille <[EMAIL PROTECTED]>
* 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.
Index: data/c++.m4
===================================================================
RCS file: /cvsroot/bison/bison/data/c++.m4,v
retrieving revision 1.4
diff -u -r1.4 c++.m4
--- data/c++.m4 2 Jan 2006 16:06:11 -0000 1.4
+++ data/c++.m4 10 Mar 2006 13:29:34 -0000
@@ -34,16 +34,15 @@
# 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([EMAIL PROTECTED], [[]], [],
[/* Tokens. */
enum yytokentype {
m4_map_sep([ b4_token_enum], [,
],
[EMAIL PROTECTED])
};
-])])
+])
## ----------------- ##
Index: data/glr.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/glr.cc,v
retrieving revision 1.12
diff -u -r1.12 glr.cc
--- data/glr.cc 22 Jan 2006 07:38:49 -0000 1.12
+++ data/glr.cc 10 Mar 2006 13:29:34 -0000
@@ -312,6 +312,8 @@
{
]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: data/lalr1.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/lalr1.cc,v
retrieving revision 1.123
diff -u -r1.123 lalr1.cc
--- data/lalr1.cc 2 Feb 2006 05:27:35 -0000 1.123
+++ data/lalr1.cc 10 Mar 2006 13:29:34 -0000
@@ -120,6 +120,8 @@
{
]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: doc/bison.texinfo
===================================================================
RCS file: /cvsroot/bison/bison/doc/bison.texinfo,v
retrieving revision 1.179
diff -u -r1.179 bison.texinfo
--- doc/bison.texinfo 8 Mar 2006 19:34:56 -0000 1.179
+++ doc/bison.texinfo 10 Mar 2006 13:29:35 -0000
@@ -7326,10 +7326,11 @@
@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 @@
<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
[EMAIL PROTECTED]
@end example
@@ -7678,8 +7683,8 @@
[EMAIL PROTECTED]
typedef yy::calcxx_parser::token token;
[EMAIL PROTECTED]
-
-[-+*/] return yytext[0];
+ /* Convert ints to the actual type of tokens. */
+[-+*/] return yy::calcxx_parser::token_type (yytext[0]);
":=" return token::ASSIGN;
@[EMAIL PROTECTED] @{
errno = 0;