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,42 +94,45 @@ item:
; ;
%% %%
namespace yy
{
// The yylex function providing subsequent tokens: // The yylex function providing subsequent tokens:
// TEXT "I have three numbers for you:" // TEXT "I have three numbers for you."
// NUMBER 1 // NUMBER 1
// NUMBER 2 // NUMBER 2
// NUMBER 3 // NUMBER 3
// TEXT " and that's all!" // TEXT "And that's all!"
// END_OF_FILE // END_OF_FILE
static static
yy::parser::symbol_type parser::symbol_type
yylex () yylex ()
{ {
static int stage = -1; static int stage = -1;
++stage; ++stage;
yy::parser::location_type loc(0, stage + 1, stage + 1); parser::location_type loc(0, stage + 1, stage + 1);
switch (stage) switch (stage)
{ {
case 0: case 0:
return yy::parser::make_TEXT ("I have three numbers for you.", loc); return parser::make_TEXT ("I have three numbers for you.", loc);
case 1: case 1:
case 2: case 2:
case 3: case 3:
return yy::parser::make_NUMBER (stage, loc); return parser::make_NUMBER (stage, loc);
case 4: case 4:
return yy::parser::make_TEXT ("And that's all!", loc); return parser::make_TEXT ("And that's all!", loc);
default: default:
return yy::parser::make_END_OF_FILE (loc); 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
main () main ()