examples: simplify/improve

* examples/variant.yy: Put yylex in yy::, and simplify accordingly.
Minor formatting changes.
This commit is contained in:
Akim Demaille
2012-11-01 17:52:41 +01:00
parent 62cb570a8d
commit 0b3287025d

View File

@@ -38,7 +38,10 @@ 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::symbol_type yylex (); namespace yy
{
static 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.
@@ -91,41 +94,44 @@ item:
; ;
%% %%
// The yylex function providing subsequent tokens: namespace yy
// TEXT "I have three numbers for you:"
// NUMBER 1
// NUMBER 2
// NUMBER 3
// TEXT " and that's all!"
// END_OF_FILE
static
yy::parser::symbol_type
yylex ()
{ {
static int stage = -1; // The yylex function providing subsequent tokens:
++stage; // TEXT "I have three numbers for you."
yy::parser::location_type loc(0, stage + 1, stage + 1); // NUMBER 1
switch (stage) // NUMBER 2
// NUMBER 3
// TEXT "And that's all!"
// END_OF_FILE
static
parser::symbol_type
yylex ()
{ {
case 0: static int stage = -1;
return yy::parser::make_TEXT ("I have three numbers for you.", loc); ++stage;
case 1: parser::location_type loc(0, stage + 1, stage + 1);
case 2: switch (stage)
case 3: {
return yy::parser::make_NUMBER (stage, loc); case 0:
case 4: return parser::make_TEXT ("I have three numbers for you.", loc);
return yy::parser::make_TEXT ("And that's all!", loc); case 1:
default: case 2:
return yy::parser::make_END_OF_FILE (loc); case 3:
return parser::make_NUMBER (stage, loc);
case 4:
return parser::make_TEXT ("And that's all!", loc);
default:
return parser::make_END_OF_FILE (loc);
}
} }
}
// Mandatory error function // Mandatory error function
void void
yy::parser::error (const yy::parser::location_type& loc, const std::string& msg) parser::error (const parser::location_type& loc, const std::string& msg)
{ {
std::cerr << loc << ": " << msg << std::endl; std::cerr << loc << ": " << msg << std::endl;
}
} }
int int