From: Akim Demaille Date: Fri, 10 Mar 2006 13:30:19 +0000 (+0000) Subject: * data/c.m4 (b4_token_enum): Always define the enum of tokens, X-Git-Tag: v2.3b~433 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/c095d689c3f0189dedd012c1d0e16f2402c26f54 * 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. --- diff --git a/ChangeLog b/ChangeLog index 543c2140..5c5a4c60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-03-10 Akim Demaille + + * 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 Fix two nits reported by twlevo, plus one more that I discovered. diff --git a/data/c++.m4 b/data/c++.m4 index 3f38a8ed..a2834f02 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -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], [, ], [$@]) }; -])]) +]) ## ----------------- ## diff --git a/data/glr.cc b/data/glr.cc index 55e024c8..521b36b6 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -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[); diff --git a/data/lalr1.cc b/data/lalr1.cc index d8782fae..8f0ebe8f 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -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[); diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 3aac11e4..69034042 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -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. . */ # 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;