From 0078681b6bc2d90f74654f85f076fe224a990f07 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 22 Oct 2008 06:27:42 -0500 Subject: [PATCH] Update variant.yy to newest interface. * examples/variant.yy: Define lex_symbol. Adjust. --- ChangeLog | 6 ++++++ examples/variant.yy | 47 ++++++++++++++++----------------------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c0343d6..bd530d5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-11-15 Akim Demaille + + Update variant.yy to newest interface. + * examples/variant.yy: Define lex_symbol. + Adjust. + 2008-11-15 Akim Demaille Don't use locations in variant.yy. diff --git a/examples/variant.yy b/examples/variant.yy index b1987cd2..016c4b2a 100644 --- a/examples/variant.yy +++ b/examples/variant.yy @@ -1,9 +1,8 @@ -/* Test file for C++ parsers using variants. - Based on an example by Michiel De Wilde . */ %debug %skeleton "lalr1.cc" %defines %define variant +%define lex_symbol %code requires // *.hh { @@ -20,17 +19,17 @@ typedef std::list strings_type; #include // Prototype of the yylex function providing subsequent tokens. - static yy::parser::token_type yylex(yy::parser::semantic_type* yylval); + static yy::parser::symbol_type yylex (); // Printing a list of strings. // Koening look up will look into std, since that's an std::list. namespace std { std::ostream& - operator<<(std::ostream& o, const strings_type& s) + operator<< (std::ostream& o, const strings_type& s) { - std::copy(s.begin(), s.end(), - std::ostream_iterator(o, "\n")); + std::copy (s.begin (), s.end (), + std::ostream_iterator (o, "\n")); return o; } } @@ -43,7 +42,7 @@ typedef std::list strings_type; { std::ostringstream o; o << t; - return o.str(); + return o.str (); } } @@ -58,7 +57,7 @@ typedef std::list strings_type; %% result: - list { std::cout << $1 << std::endl; } + list { std::cout << $1 << std::endl; } ; list: @@ -81,35 +80,23 @@ item: // END_OF_FILE static -yy::parser::token_type -yylex (yy::parser::semantic_type* yylval) +yy::parser::symbol_type +yylex () { - static int stage = 0; - yy::parser::token_type result; - - switch (stage) + static int stage = -1; + switch (++stage) { case 0: - yylval->build (std::string ("I have three numbers for you.")); - result = yy::parser::token::TEXT; - break; + return yy::parser::make_TEXT ("I have three numbers for you."); case 1: case 2: case 3: - yylval->build (stage); - result = yy::parser::token::NUMBER; - break; + return yy::parser::make_NUMBER (stage); case 4: - yylval->build (std::string ("And that's all!")); - result = yy::parser::token::TEXT; - break; + return yy::parser::make_TEXT ("And that's all!"); default: - result = yy::parser::token::END_OF_FILE; - break; + return yy::parser::make_END_OF_FILE (); } - - stage++; - return result; } // Mandatory error function @@ -120,11 +107,11 @@ yy::parser::error (const std::string& message) } int -main (int argc, char *argv[]) +main () { yy::parser p; p.set_debug_level (!!getenv ("YYDEBUG")); - return p.parse(); + return p.parse (); } // Local Variables: -- 2.45.2