#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);
}