Update variant.yy to newest interface.

* examples/variant.yy: Define lex_symbol.
	Adjust.
This commit is contained in:
Akim Demaille
2008-10-22 06:27:42 -05:00
parent ff084799a3
commit 0078681b6b
2 changed files with 23 additions and 30 deletions

View File

@@ -1,3 +1,9 @@
2008-11-15 Akim Demaille <demaille@gostai.com>
Update variant.yy to newest interface.
* examples/variant.yy: Define lex_symbol.
Adjust.
2008-11-15 Akim Demaille <demaille@gostai.com> 2008-11-15 Akim Demaille <demaille@gostai.com>
Don't use locations in variant.yy. Don't use locations in variant.yy.

View File

@@ -1,9 +1,8 @@
/* Test file for C++ parsers using variants.
Based on an example by Michiel De Wilde <mdewilde.agilent@gmail.com>. */
%debug %debug
%skeleton "lalr1.cc" %skeleton "lalr1.cc"
%defines %defines
%define variant %define variant
%define lex_symbol
%code requires // *.hh %code requires // *.hh
{ {
@@ -20,7 +19,7 @@ typedef std::list<std::string> strings_type;
#include <sstream> #include <sstream>
// Prototype of the yylex function providing subsequent tokens. // 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. // Printing a list of strings.
// Koening look up will look into std, since that's an std::list. // Koening look up will look into std, since that's an std::list.
@@ -81,35 +80,23 @@ item:
// END_OF_FILE // END_OF_FILE
static static
yy::parser::token_type yy::parser::symbol_type
yylex (yy::parser::semantic_type* yylval) yylex ()
{ {
static int stage = 0; static int stage = -1;
yy::parser::token_type result; switch (++stage)
switch (stage)
{ {
case 0: case 0:
yylval->build (std::string ("I have three numbers for you.")); return yy::parser::make_TEXT ("I have three numbers for you.");
result = yy::parser::token::TEXT;
break;
case 1: case 1:
case 2: case 2:
case 3: case 3:
yylval->build (stage); return yy::parser::make_NUMBER (stage);
result = yy::parser::token::NUMBER;
break;
case 4: case 4:
yylval->build (std::string ("And that's all!")); return yy::parser::make_TEXT ("And that's all!");
result = yy::parser::token::TEXT;
break;
default: default:
result = yy::parser::token::END_OF_FILE; return yy::parser::make_END_OF_FILE ();
break;
} }
stage++;
return result;
} }
// Mandatory error function // Mandatory error function
@@ -120,7 +107,7 @@ yy::parser::error (const std::string& message)
} }
int int
main (int argc, char *argv[]) main ()
{ {
yy::parser p; yy::parser p;
p.set_debug_level (!!getenv ("YYDEBUG")); p.set_debug_level (!!getenv ("YYDEBUG"));