#define yylex examplelex
#include "y.tab.h"
#line 78 "parser.yy"
#include "driver.h"
#include "scanner.h"
#undef yylex
#define yylex driver.lexer->lex
#line 57 "parser.cc"
#ifndef YY_
# if YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> FIXME:
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif
#define YYUSE(e) ((void) (e))
# define YYCDEBUG \
for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false) \
(*yycdebug_)
#if YYDEBUG
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug_) \
{ \
*yycdebug_ << Title << ' '; \
yy_symbol_print_ ((Type), (Value), (Location)); \
*yycdebug_ << std::endl; \
} \
} while (false)
# define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug_) \
yy_reduce_print_ (Rule); \
} while (false)
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
yystack_print_ (); \
} while (false)
#else BUG
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_REDUCE_PRINT(Rule)
# define YY_STACK_PRINT()
#endif BUG
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
namespace example
{
#if YYERROR_VERBOSE
std::string
Parser::yytnamerr_ (const char *yystr)
{
if (*yystr == '"')
{
std::string yyr = "";
char const *yyp = yystr;
for (;;)
switch (*++yyp)
{
case '\'':
case ',':
goto do_not_strip_quotes;
case '\\':
if (*++yyp != '\\')
goto do_not_strip_quotes;
default:
yyr += *yyp;
break;
case '"':
return yyr;
}
do_not_strip_quotes: ;
}
return yystr;
}
#endif
Parser::Parser (class Driver& driver_yyarg)
: yydebug_ (false),
yycdebug_ (&std::cerr),
driver (driver_yyarg)
{
}
Parser::~Parser ()
{
}
#if YYDEBUG
inline void
Parser::yy_symbol_value_print_ (int yytype,
const semantic_type* yyvaluep, const location_type* yylocationp)
{
YYUSE (yylocationp);
YYUSE (yyvaluep);
switch (yytype)
{
default:
break;
}
}
void
Parser::yy_symbol_print_ (int yytype,
const semantic_type* yyvaluep, const location_type* yylocationp)
{
*yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
<< ' ' << yytname_[yytype] << " ("
<< *yylocationp << ": ";
yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
*yycdebug_ << ')';
}
#endif BUG
void
Parser::yydestruct_ (const char* yymsg,
int yytype, semantic_type* yyvaluep, location_type* yylocationp)
{
YYUSE (yylocationp);
YYUSE (yymsg);
YYUSE (yyvaluep);
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
switch (yytype)
{
case 6:
#line 72 "parser.yy"
{ delete (yyvaluep->stringVal); };
#line 217 "parser.cc"
break;
case 18:
#line 73 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 222 "parser.cc"
break;
case 19:
#line 73 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 227 "parser.cc"
break;
case 20:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 232 "parser.cc"
break;
case 21:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 237 "parser.cc"
break;
case 22:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 242 "parser.cc"
break;
case 23:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 247 "parser.cc"
break;
case 24:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 252 "parser.cc"
break;
case 25:
#line 74 "parser.yy"
{ delete (yyvaluep->calcnode); };
#line 257 "parser.cc"
break;
default:
break;
}
}
void
Parser::yypop_ (unsigned int n)
{
yystate_stack_.pop (n);
yysemantic_stack_.pop (n);
yylocation_stack_.pop (n);
}
std::ostream&
Parser::debug_stream () const
{
return *yycdebug_;
}
void
Parser::set_debug_stream (std::ostream& o)
{
yycdebug_ = &o;
}
Parser::debug_level_type
Parser::debug_level () const
{
return yydebug_;
}
void
Parser::set_debug_level (debug_level_type l)
{
yydebug_ = l;
}
int
Parser::parse ()
{
int yychar = yyempty_;
int yytoken = 0;
int yyn;
int yylen = 0;
int yystate = 0;
int yynerrs_ = 0;
int yyerrstatus_ = 0;
semantic_type yylval;
location_type yylloc;
location yyerror_range[2];
semantic_type yyval;
location_type yyloc;
int yyresult;
YYCDEBUG << "Starting parse" << std::endl;
#line 41 "/tdata/home/Desktop/flex-bison-cpp-example/trunk/src/parser.yy"
{
yylloc.begin.filename = yylloc.end.filename = &driver.streamname;
}
#line 339 "parser.cc"
yystate_stack_ = state_stack_type (0);
yysemantic_stack_ = semantic_stack_type (0);
yylocation_stack_ = location_stack_type (0);
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yylloc);
yynewstate:
yystate_stack_.push (yystate);
YYCDEBUG << "Entering state " << yystate << std::endl;
goto yybackup;
yybackup:
yyn = yypact_[yystate];
if (yyn == yypact_ninf_)
goto yydefault;
if (yychar == yyempty_)
{
YYCDEBUG << "Reading a token: ";
yychar = yylex (&yylval, &yylloc);
}
if (yychar <= yyeof_)
{
yychar = yytoken = yyeof_;
YYCDEBUG << "Now at end of input." << std::endl;
}
else
{
yytoken = yytranslate_ (yychar);
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
yyn += yytoken;
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
goto yydefault;
yyn = yytable_[yyn];
if (yyn <= 0)
{
if (yyn == 0 || yyn == yytable_ninf_)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
if (yyn == yyfinal_)
goto yyacceptlab;
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
if (yychar != yyeof_)
yychar = yyempty_;
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yylloc);
if (yyerrstatus_)
--yyerrstatus_;
yystate = yyn;
goto yynewstate;
yydefault:
yyn = yydefact_[yystate];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
yyreduce:
yylen = yyr2_[yyn];
if (yylen)
yyval = yysemantic_stack_[yylen - 1];
else
yyval = yysemantic_stack_[0];
{
slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
YYLLOC_DEFAULT (yyloc, slice, yylen);
}
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
case 2:
#line 96 "parser.yy"
{
(yyval.calcnode) = new CNConstant((yysemantic_stack_[(1) - (1)].integerVal));
}
break;
case 3:
#line 100 "parser.yy"
{
(yyval.calcnode) = new CNConstant((yysemantic_stack_[(1) - (1)].doubleVal));
}
break;
case 4:
#line 105 "parser.yy"
{
if (!driver.calc.existsVariable(*(yysemantic_stack_[(1) - (1)].stringVal))) {
error(yyloc, std::string("Unknown variable \"") + *(yysemantic_stack_[(1) - (1)].stringVal) + "\"");
delete (yysemantic_stack_[(1) - (1)].stringVal);
YYERROR;
}
else {
(yyval.calcnode) = new CNConstant( driver.calc.getVariable(*(yysemantic_stack_[(1) - (1)].stringVal)) );
delete (yysemantic_stack_[(1) - (1)].stringVal);
}
}
break;
case 5:
#line 118 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 6:
#line 122 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 7:
#line 126 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(3) - (2)].calcnode);
}
break;
case 8:
#line 131 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 9:
#line 135 "parser.yy"
{
(yyval.calcnode) = new CNPower((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 10:
#line 140 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 11:
#line 144 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(2) - (2)].calcnode);
}
break;
case 12:
#line 148 "parser.yy"
{
(yyval.calcnode) = new CNNegate((yysemantic_stack_[(2) - (2)].calcnode));
}
break;
case 13:
#line 153 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 14:
#line 157 "parser.yy"
{
(yyval.calcnode) = new CNMultiply((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 15:
#line 161 "parser.yy"
{
(yyval.calcnode) = new CNDivide((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 16:
#line 165 "parser.yy"
{
(yyval.calcnode) = new CNModulo((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 17:
#line 170 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 18:
#line 174 "parser.yy"
{
(yyval.calcnode) = new CNAdd((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 19:
#line 178 "parser.yy"
{
(yyval.calcnode) = new CNSubtract((yysemantic_stack_[(3) - (1)].calcnode), (yysemantic_stack_[(3) - (3)].calcnode));
}
break;
case 20:
#line 183 "parser.yy"
{
(yyval.calcnode) = (yysemantic_stack_[(1) - (1)].calcnode);
}
break;
case 21:
#line 188 "parser.yy"
{
driver.calc.variables[*(yysemantic_stack_[(3) - (1)].stringVal)] = (yysemantic_stack_[(3) - (3)].calcnode)->evaluate();
std::cout << "Setting variable " << *(yysemantic_stack_[(3) - (1)].stringVal)
<< " = " << driver.calc.variables[*(yysemantic_stack_[(3) - (1)].stringVal)] << "\n";
delete (yysemantic_stack_[(3) - (1)].stringVal);
delete (yysemantic_stack_[(3) - (3)].calcnode);
}
break;
case 28:
#line 203 "parser.yy"
{
driver.calc.expressions.push_back((yysemantic_stack_[(3) - (2)].calcnode));
}
break;
case 29:
#line 207 "parser.yy"
{
driver.calc.expressions.push_back((yysemantic_stack_[(3) - (2)].calcnode));
}
break;
case 30:
#line 211 "parser.yy"
{
driver.calc.expressions.push_back((yysemantic_stack_[(3) - (2)].calcnode));
}
break;
#line 629 "parser.cc"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
yypop_ (yylen);
yylen = 0;
YY_STACK_PRINT ();
yysemantic_stack_.push (yyval);
yylocation_stack_.push (yyloc);
yyn = yyr1_[yyn];
yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
if (0 <= yystate && yystate <= yylast_
&& yycheck_[yystate] == yystate_stack_[0])
yystate = yytable_[yystate];
else
yystate = yydefgoto_[yyn - yyntokens_];
goto yynewstate;
yyerrlab:
if (!yyerrstatus_)
{
++yynerrs_;
error (yylloc, yysyntax_error_ (yystate, yytoken));
}
yyerror_range[0] = yylloc;
if (yyerrstatus_ == 3)
{
if (yychar <= yyeof_)
{
if (yychar == yyeof_)
YYABORT;
}
else
{
yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
yychar = yyempty_;
}
}
goto yyerrlab1;
yyerrorlab:
if (false)
goto yyerrorlab;
yyerror_range[0] = yylocation_stack_[yylen - 1];
yypop_ (yylen);
yylen = 0;
yystate = yystate_stack_[0];
goto yyerrlab1;
yyerrlab1:
yyerrstatus_ = 3;
for (;;)
{
yyn = yypact_[yystate];
if (yyn != yypact_ninf_)
{
yyn += yyterror_;
if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
{
yyn = yytable_[yyn];
if (0 < yyn)
break;
}
}
if (yystate_stack_.height () == 1)
YYABORT;
yyerror_range[0] = yylocation_stack_[0];
yydestruct_ ("Error: popping",
yystos_[yystate],
&yysemantic_stack_[0], &yylocation_stack_[0]);
yypop_ ();
yystate = yystate_stack_[0];
YY_STACK_PRINT ();
}
if (yyn == yyfinal_)
goto yyacceptlab;
yyerror_range[1] = yylloc;
YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yyloc);
YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
&yysemantic_stack_[0], &yylocation_stack_[0]);
yystate = yyn;
goto yynewstate;
yyacceptlab:
yyresult = 0;
goto yyreturn;
yyabortlab:
yyresult = 1;
goto yyreturn;
yyreturn:
if (yychar != yyeof_ && yychar != yyempty_)
yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
yypop_ (yylen);
while (yystate_stack_.height () != 1)
{
yydestruct_ ("Cleanup: popping",
yystos_[yystate_stack_[0]],
&yysemantic_stack_[0],
&yylocation_stack_[0]);
yypop_ ();
}
return yyresult;
}
std::string
Parser::yysyntax_error_ (int yystate, int tok)
{
std::string res;
YYUSE (yystate);
#if YYERROR_VERBOSE
int yyn = yypact_[yystate];
if (yypact_ninf_ < yyn && yyn <= yylast_)
{
int yyxbegin = yyn < 0 ? -yyn : 0;
int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
int count = 0;
for (int x = yyxbegin; x < yyxend; ++x)
if (yycheck_[x + yyn] == x && x != yyterror_)
++count;
res = "syntax error, unexpected ";
res += yytnamerr_ (yytname_[tok]);
if (count < 5)
{
count = 0;
for (int x = yyxbegin; x < yyxend; ++x)
if (yycheck_[x + yyn] == x && x != yyterror_)
{
res += (!count++) ? ", expecting " : " or ";
res += yytnamerr_ (yytname_[x]);
}
}
}
else
#endif
res = YY_("syntax error");
return res;
}
const signed char Parser::yypact_ninf_ = -15;
const signed char
Parser::yypact_[] =
{
-15, 0, -15, -15, -15, -15, -14, 16, 27, 27,
-15, -15, -15, -15, -1, -15, 23, 8, 9, 14,
16, -15, 5, -1, -1, 27, 16, 16, 16, 16,
16, -15, -15, -15, -15, -15, -15, -15, -15, -15,
-15, -15, -15, 23, 23
};
const unsigned char
Parser::yydefact_[] =
{
22, 0, 1, 24, 2, 3, 4, 0, 0, 0,
23, 5, 6, 8, 10, 13, 17, 20, 0, 0,
0, 4, 0, 11, 12, 0, 0, 0, 0, 0,
0, 30, 29, 28, 27, 26, 25, 21, 7, 9,
14, 15, 16, 18, 19
};
const signed char
Parser::yypgoto_[] =
{
-15, -15, -15, 19, 20, 12, 13, -15, -5, -15,
-15
};
const signed char
Parser::yydefgoto_[] =
{
-1, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1
};
const signed char Parser::yytable_ninf_ = -1;
const unsigned char
Parser::yytable_[] =
{
2, 20, 22, 3, 4, 5, 6, 7, 25, 31,
8, 9, 32, 38, 34, 37, 10, 35, 29, 30,
4, 5, 21, 7, 0, 33, 8, 9, 23, 24,
36, 4, 5, 21, 7, 26, 27, 28, 40, 41,
42, 0, 43, 44, 39
};
const signed char
Parser::yycheck_[] =
{
0, 15, 7, 3, 4, 5, 6, 7, 9, 0,
10, 11, 3, 8, 0, 20, 16, 3, 10, 11,
4, 5, 6, 7, -1, 16, 10, 11, 8, 9,
16, 4, 5, 6, 7, 12, 13, 14, 26, 27,
28, -1, 29, 30, 25
};
const unsigned char
Parser::yystos_[] =
{
0, 27, 0, 3, 4, 5, 6, 7, 10, 11,
16, 18, 19, 20, 21, 22, 23, 24, 25, 26,
15, 6, 25, 21, 21, 9, 12, 13, 14, 10,
11, 0, 3, 16, 0, 3, 16, 25, 8, 20,
22, 22, 22, 23, 23
};
#if YYDEBUG
const unsigned short int
Parser::yytoken_number_[] =
{
0, 256, 257, 258, 259, 260, 261, 40, 41, 94,
43, 45, 42, 47, 37, 61, 59
};
#endif
const unsigned char
Parser::yyr1_[] =
{
0, 17, 18, 18, 19, 20, 20, 20, 21, 21,
22, 22, 22, 23, 23, 23, 23, 24, 24, 24,
25, 26, 27, 27, 27, 27, 27, 27, 27, 27,
27
};
const unsigned char
Parser::yyr2_[] =
{
0, 2, 1, 1, 1, 1, 1, 3, 1, 3,
1, 2, 2, 1, 3, 3, 3, 1, 3, 3,
1, 3, 0, 2, 2, 3, 3, 3, 3, 3,
3
};
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
const char*
const Parser::yytname_[] =
{
"\"end of file\"", "error", "$undefined", "\"end of line\"",
"\"integer\"", "\"double\"", "\"string\"", "'('", "')'", "'^'", "'+'",
"'-'", "'*'", "'/'", "'%'", "'='", "';'", "$accept", "constant",
"variable", "atomexpr", "powexpr", "unaryexpr", "mulexpr", "addexpr",
"expr", "assignment", "start", 0
};
#endif
#if YYDEBUG
const Parser::rhs_number_type
Parser::yyrhs_[] =
{
27, 0, -1, 4, -1, 5, -1, 6, -1, 18,
-1, 19, -1, 7, 25, 8, -1, 20, -1, 21,
9, 20, -1, 21, -1, 10, 21, -1, 11, 21,
-1, 22, -1, 23, 12, 22, -1, 23, 13, 22,
-1, 23, 14, 22, -1, 23, -1, 24, 10, 23,
-1, 24, 11, 23, -1, 24, -1, 6, 15, 25,
-1, -1, 27, 16, -1, 27, 3, -1, 27, 26,
16, -1, 27, 26, 3, -1, 27, 26, 0, -1,
27, 25, 16, -1, 27, 25, 3, -1, 27, 25,
0, -1
};
const unsigned char
Parser::yyprhs_[] =
{
0, 0, 3, 5, 7, 9, 11, 13, 17, 19,
23, 25, 28, 31, 33, 37, 41, 45, 47, 51,
55, 57, 61, 62, 65, 68, 72, 76, 80, 84,
88
};
const unsigned char
Parser::yyrline_[] =
{
0, 95, 95, 99, 104, 117, 121, 125, 130, 134,
139, 143, 147, 152, 156, 160, 164, 169, 173, 177,
182, 187, 196, 197, 198, 199, 200, 201, 202, 206,
210
};
void
Parser::yystack_print_ ()
{
*yycdebug_ << "Stack now";
for (state_stack_type::const_iterator i = yystate_stack_.begin ();
i != yystate_stack_.end (); ++i)
*yycdebug_ << ' ' << *i;
*yycdebug_ << std::endl;
}
void
Parser::yy_reduce_print_ (int yyrule)
{
unsigned int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
*yycdebug_ << "Reducing stack by rule " << yyrule - 1
<< " (line " << yylno << "), ";
for (int yyi = 0; yyi < yynrhs; yyi++)
YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
yyrhs_[yyprhs_[yyrule] + yyi],
&(yysemantic_stack_[(yynrhs) - (yyi + 1)]),
&(yylocation_stack_[(yynrhs) - (yyi + 1)]));
}
#endif
Parser::token_number_type
Parser::yytranslate_ (int t)
{
static
const token_number_type
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 14, 2, 2,
7, 8, 12, 10, 2, 11, 2, 13, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 16,
2, 15, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 9, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6
};
if ((unsigned int) t <= yyuser_token_number_max_)
return translate_table[t];
else
return yyundef_token_;
}
const int Parser::yyeof_ = 0;
const int Parser::yylast_ = 44;
const int Parser::yynnts_ = 11;
const int Parser::yyempty_ = -2;
const int Parser::yyfinal_ = 2;
const int Parser::yyterror_ = 1;
const int Parser::yyerrcode_ = 256;
const int Parser::yyntokens_ = 17;
const unsigned int Parser::yyuser_token_number_max_ = 261;
const Parser::token_number_type Parser::yyundef_token_ = 2;
}
#line 217 "parser.yy"
void example::Parser::error(const Parser::location_type& l,
const std::string& m)
{
driver.error(l, m);
}