| Index: bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.cc
 | 
| ===================================================================
 | 
| --- bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.cc	(revision 0)
 | 
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.cc	(revision 0)
 | 
| @@ -0,0 +1,972 @@
 | 
| +
 | 
| +/* A Bison parser, made by GNU Bison 2.4.1.  */
 | 
| +
 | 
| +/* Skeleton implementation for Bison LALR(1) parsers in C++
 | 
| +   
 | 
| +      Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
 | 
| +   Foundation, Inc.
 | 
| +   
 | 
| +   This program is free software: you can redistribute it and/or modify
 | 
| +   it under the terms of the GNU General Public License as published by
 | 
| +   the Free Software Foundation, either version 3 of the License, or
 | 
| +   (at your option) any later version.
 | 
| +   
 | 
| +   This program is distributed in the hope that it will be useful,
 | 
| +   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
| +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
| +   GNU General Public License for more details.
 | 
| +   
 | 
| +   You should have received a copy of the GNU General Public License
 | 
| +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | 
| +
 | 
| +/* As a special exception, you may create a larger work that contains
 | 
| +   part or all of the Bison parser skeleton and distribute that work
 | 
| +   under terms of your choice, so long as that work isn't itself a
 | 
| +   parser generator using the skeleton or a modified version thereof
 | 
| +   as a parser skeleton.  Alternatively, if you modify or redistribute
 | 
| +   the parser skeleton itself, you may (at your option) remove this
 | 
| +   special exception, which will cause the skeleton and the resulting
 | 
| +   Bison output files to be licensed under the GNU General Public
 | 
| +   License without this special exception.
 | 
| +   
 | 
| +   This special exception was added by the Free Software Foundation in
 | 
| +   version 2.2 of Bison.  */
 | 
| +
 | 
| +
 | 
| +/* First part of user declarations.  */
 | 
| +
 | 
| +
 | 
| +/* Line 311 of lalr1.cc  */
 | 
| +#line 41 "./calc++-parser.cc"
 | 
| +
 | 
| +
 | 
| +#include "calc++-parser.hh"
 | 
| +
 | 
| +/* User implementation prologue.  */
 | 
| +
 | 
| +
 | 
| +/* Line 317 of lalr1.cc  */
 | 
| +#line 50 "./calc++-parser.cc"
 | 
| +/* Unqualified %code blocks.  */
 | 
| +
 | 
| +/* Line 318 of lalr1.cc  */
 | 
| +#line 8503 "../../doc/bison.texinfo"
 | 
| +
 | 
| +# include "calc++-driver.hh"
 | 
| +
 | 
| +
 | 
| +
 | 
| +/* Line 318 of lalr1.cc  */
 | 
| +#line 61 "./calc++-parser.cc"
 | 
| +
 | 
| +#ifndef YY_
 | 
| +# if YYENABLE_NLS
 | 
| +#  if ENABLE_NLS
 | 
| +#   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
 | 
| +#   define YY_(msgid) dgettext ("bison-runtime", msgid)
 | 
| +#  endif
 | 
| +# endif
 | 
| +# ifndef YY_
 | 
| +#  define YY_(msgid) msgid
 | 
| +# endif
 | 
| +#endif
 | 
| +
 | 
| +/* Suppress unused-variable warnings by "using" E.  */
 | 
| +#define YYUSE(e) ((void) (e))
 | 
| +
 | 
| +/* Enable debugging if requested.  */
 | 
| +#if YYDEBUG
 | 
| +
 | 
| +/* A pseudo ostream that takes yydebug_ into account.  */
 | 
| +# define YYCDEBUG if (yydebug_) (*yycdebug_)
 | 
| +
 | 
| +# 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 /* !YYDEBUG */
 | 
| +
 | 
| +# define YYCDEBUG if (false) std::cerr
 | 
| +# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 | 
| +# define YY_REDUCE_PRINT(Rule)
 | 
| +# define YY_STACK_PRINT()
 | 
| +
 | 
| +#endif /* !YYDEBUG */
 | 
| +
 | 
| +#define yyerrok		(yyerrstatus_ = 0)
 | 
| +#define yyclearin	(yychar = yyempty_)
 | 
| +
 | 
| +#define YYACCEPT	goto yyacceptlab
 | 
| +#define YYABORT		goto yyabortlab
 | 
| +#define YYERROR		goto yyerrorlab
 | 
| +#define YYRECOVERING()  (!!yyerrstatus_)
 | 
| +
 | 
| +
 | 
| +/* Line 380 of lalr1.cc  */
 | 
| +#line 1 "[Bison:b4_percent_define_default]"
 | 
| +
 | 
| +namespace yy {
 | 
| +
 | 
| +/* Line 380 of lalr1.cc  */
 | 
| +#line 130 "./calc++-parser.cc"
 | 
| +#if YYERROR_VERBOSE
 | 
| +
 | 
| +  /* Return YYSTR after stripping away unnecessary quotes and
 | 
| +     backslashes, so that it's suitable for yyerror.  The heuristic is
 | 
| +     that double-quoting is unnecessary unless the string contains an
 | 
| +     apostrophe, a comma, or backslash (other than backslash-backslash).
 | 
| +     YYSTR is taken from yytname.  */
 | 
| +  std::string
 | 
| +  calcxx_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;
 | 
| +              /* Fall through.  */
 | 
| +            default:
 | 
| +              yyr += *yyp;
 | 
| +              break;
 | 
| +
 | 
| +            case '"':
 | 
| +              return yyr;
 | 
| +            }
 | 
| +      do_not_strip_quotes: ;
 | 
| +      }
 | 
| +
 | 
| +    return yystr;
 | 
| +  }
 | 
| +
 | 
| +#endif
 | 
| +
 | 
| +  /// Build a parser object.
 | 
| +  calcxx_parser::calcxx_parser (calcxx_driver& driver_yyarg)
 | 
| +    :
 | 
| +#if YYDEBUG
 | 
| +      yydebug_ (false),
 | 
| +      yycdebug_ (&std::cerr),
 | 
| +#endif
 | 
| +      driver (driver_yyarg)
 | 
| +  {
 | 
| +  }
 | 
| +
 | 
| +  calcxx_parser::~calcxx_parser ()
 | 
| +  {
 | 
| +  }
 | 
| +
 | 
| +#if YYDEBUG
 | 
| +  /*--------------------------------.
 | 
| +  | Print this symbol on YYOUTPUT.  |
 | 
| +  `--------------------------------*/
 | 
| +
 | 
| +  inline void
 | 
| +  calcxx_parser::yy_symbol_value_print_ (int yytype,
 | 
| +			   const semantic_type* yyvaluep, const location_type* yylocationp)
 | 
| +  {
 | 
| +    YYUSE (yylocationp);
 | 
| +    YYUSE (yyvaluep);
 | 
| +    switch (yytype)
 | 
| +      {
 | 
| +        case 4: /* "\"identifier\"" */
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 8532 "../../doc/bison.texinfo"
 | 
| +	{ debug_stream () << *(yyvaluep->sval); };
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 207 "./calc++-parser.cc"
 | 
| +	break;
 | 
| +      case 5: /* "\"number\"" */
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 8535 "../../doc/bison.texinfo"
 | 
| +	{ debug_stream () << (yyvaluep->ival); };
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 216 "./calc++-parser.cc"
 | 
| +	break;
 | 
| +      case 14: /* "exp" */
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 8535 "../../doc/bison.texinfo"
 | 
| +	{ debug_stream () << (yyvaluep->ival); };
 | 
| +
 | 
| +/* Line 449 of lalr1.cc  */
 | 
| +#line 225 "./calc++-parser.cc"
 | 
| +	break;
 | 
| +       default:
 | 
| +	  break;
 | 
| +      }
 | 
| +  }
 | 
| +
 | 
| +
 | 
| +  void
 | 
| +  calcxx_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
 | 
| +
 | 
| +  void
 | 
| +  calcxx_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 4: /* "\"identifier\"" */
 | 
| +
 | 
| +/* Line 480 of lalr1.cc  */
 | 
| +#line 8533 "../../doc/bison.texinfo"
 | 
| +	{ delete (yyvaluep->sval); };
 | 
| +
 | 
| +/* Line 480 of lalr1.cc  */
 | 
| +#line 264 "./calc++-parser.cc"
 | 
| +	break;
 | 
| +
 | 
| +	default:
 | 
| +	  break;
 | 
| +      }
 | 
| +  }
 | 
| +
 | 
| +  void
 | 
| +  calcxx_parser::yypop_ (unsigned int n)
 | 
| +  {
 | 
| +    yystate_stack_.pop (n);
 | 
| +    yysemantic_stack_.pop (n);
 | 
| +    yylocation_stack_.pop (n);
 | 
| +  }
 | 
| +
 | 
| +#if YYDEBUG
 | 
| +  std::ostream&
 | 
| +  calcxx_parser::debug_stream () const
 | 
| +  {
 | 
| +    return *yycdebug_;
 | 
| +  }
 | 
| +
 | 
| +  void
 | 
| +  calcxx_parser::set_debug_stream (std::ostream& o)
 | 
| +  {
 | 
| +    yycdebug_ = &o;
 | 
| +  }
 | 
| +
 | 
| +
 | 
| +  calcxx_parser::debug_level_type
 | 
| +  calcxx_parser::debug_level () const
 | 
| +  {
 | 
| +    return yydebug_;
 | 
| +  }
 | 
| +
 | 
| +  void
 | 
| +  calcxx_parser::set_debug_level (debug_level_type l)
 | 
| +  {
 | 
| +    yydebug_ = l;
 | 
| +  }
 | 
| +#endif
 | 
| +
 | 
| +  int
 | 
| +  calcxx_parser::parse ()
 | 
| +  {
 | 
| +    /// Lookahead and lookahead in internal form.
 | 
| +    int yychar = yyempty_;
 | 
| +    int yytoken = 0;
 | 
| +
 | 
| +    /* State.  */
 | 
| +    int yyn;
 | 
| +    int yylen = 0;
 | 
| +    int yystate = 0;
 | 
| +
 | 
| +    /* Error handling.  */
 | 
| +    int yynerrs_ = 0;
 | 
| +    int yyerrstatus_ = 0;
 | 
| +
 | 
| +    /// Semantic value of the lookahead.
 | 
| +    semantic_type yylval;
 | 
| +    /// Location of the lookahead.
 | 
| +    location_type yylloc;
 | 
| +    /// The locations where the error started and ended.
 | 
| +    location_type yyerror_range[2];
 | 
| +
 | 
| +    /// $$.
 | 
| +    semantic_type yyval;
 | 
| +    /// @$.
 | 
| +    location_type yyloc;
 | 
| +
 | 
| +    int yyresult;
 | 
| +
 | 
| +    YYCDEBUG << "Starting parse" << std::endl;
 | 
| +
 | 
| +
 | 
| +    /* User initialization code.  */
 | 
| +    
 | 
| +/* Line 559 of lalr1.cc  */
 | 
| +#line 8466 "../../doc/bison.texinfo"
 | 
| +{
 | 
| +  // Initialize the initial location.
 | 
| +  yylloc.begin.filename = yylloc.end.filename = &driver.file;
 | 
| +}
 | 
| +
 | 
| +/* Line 559 of lalr1.cc  */
 | 
| +#line 350 "./calc++-parser.cc"
 | 
| +
 | 
| +    /* Initialize the stacks.  The initial state will be pushed in
 | 
| +       yynewstate, since the latter expects the semantical and the
 | 
| +       location values to have been already stored, initialize these
 | 
| +       stacks with a primary value.  */
 | 
| +    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);
 | 
| +
 | 
| +    /* New state.  */
 | 
| +  yynewstate:
 | 
| +    yystate_stack_.push (yystate);
 | 
| +    YYCDEBUG << "Entering state " << yystate << std::endl;
 | 
| +
 | 
| +    /* Accept?  */
 | 
| +    if (yystate == yyfinal_)
 | 
| +      goto yyacceptlab;
 | 
| +
 | 
| +    goto yybackup;
 | 
| +
 | 
| +    /* Backup.  */
 | 
| +  yybackup:
 | 
| +
 | 
| +    /* Try to take a decision without lookahead.  */
 | 
| +    yyn = yypact_[yystate];
 | 
| +    if (yyn == yypact_ninf_)
 | 
| +      goto yydefault;
 | 
| +
 | 
| +    /* Read a lookahead token.  */
 | 
| +    if (yychar == yyempty_)
 | 
| +      {
 | 
| +	YYCDEBUG << "Reading a token: ";
 | 
| +	yychar = yylex (&yylval, &yylloc, driver);
 | 
| +      }
 | 
| +
 | 
| +
 | 
| +    /* Convert token to internal form.  */
 | 
| +    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);
 | 
| +      }
 | 
| +
 | 
| +    /* If the proper action on seeing token YYTOKEN is to reduce or to
 | 
| +       detect an error, take that action.  */
 | 
| +    yyn += yytoken;
 | 
| +    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
 | 
| +      goto yydefault;
 | 
| +
 | 
| +    /* Reduce or error.  */
 | 
| +    yyn = yytable_[yyn];
 | 
| +    if (yyn <= 0)
 | 
| +      {
 | 
| +	if (yyn == 0 || yyn == yytable_ninf_)
 | 
| +	goto yyerrlab;
 | 
| +	yyn = -yyn;
 | 
| +	goto yyreduce;
 | 
| +      }
 | 
| +
 | 
| +    /* Shift the lookahead token.  */
 | 
| +    YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 | 
| +
 | 
| +    /* Discard the token being shifted.  */
 | 
| +    yychar = yyempty_;
 | 
| +
 | 
| +    yysemantic_stack_.push (yylval);
 | 
| +    yylocation_stack_.push (yylloc);
 | 
| +
 | 
| +    /* Count tokens shifted since error; after three, turn off error
 | 
| +       status.  */
 | 
| +    if (yyerrstatus_)
 | 
| +      --yyerrstatus_;
 | 
| +
 | 
| +    yystate = yyn;
 | 
| +    goto yynewstate;
 | 
| +
 | 
| +  /*-----------------------------------------------------------.
 | 
| +  | yydefault -- do the default action for the current state.  |
 | 
| +  `-----------------------------------------------------------*/
 | 
| +  yydefault:
 | 
| +    yyn = yydefact_[yystate];
 | 
| +    if (yyn == 0)
 | 
| +      goto yyerrlab;
 | 
| +    goto yyreduce;
 | 
| +
 | 
| +  /*-----------------------------.
 | 
| +  | yyreduce -- Do a reduction.  |
 | 
| +  `-----------------------------*/
 | 
| +  yyreduce:
 | 
| +    yylen = yyr2_[yyn];
 | 
| +    /* If YYLEN is nonzero, implement the default value of the action:
 | 
| +       `$$ = $1'.  Otherwise, use the top of the stack.
 | 
| +
 | 
| +       Otherwise, the following line sets YYVAL to garbage.
 | 
| +       This behavior is undocumented and Bison
 | 
| +       users should not rely upon it.  */
 | 
| +    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 678 of lalr1.cc  */
 | 
| +#line 8545 "../../doc/bison.texinfo"
 | 
| +    { driver.result = (yysemantic_stack_[(2) - (2)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +  case 3:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8547 "../../doc/bison.texinfo"
 | 
| +    {}
 | 
| +    break;
 | 
| +
 | 
| +  case 4:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8548 "../../doc/bison.texinfo"
 | 
| +    {}
 | 
| +    break;
 | 
| +
 | 
| +  case 5:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8552 "../../doc/bison.texinfo"
 | 
| +    { driver.variables[*(yysemantic_stack_[(3) - (1)].sval)] = (yysemantic_stack_[(3) - (3)].ival); delete (yysemantic_stack_[(3) - (1)].sval); }
 | 
| +    break;
 | 
| +
 | 
| +  case 6:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8556 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) + (yysemantic_stack_[(3) - (3)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +  case 7:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8557 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) - (yysemantic_stack_[(3) - (3)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +  case 8:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8558 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) * (yysemantic_stack_[(3) - (3)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +  case 9:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8559 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) / (yysemantic_stack_[(3) - (3)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +  case 10:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8560 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = driver.variables[*(yysemantic_stack_[(1) - (1)].sval)]; delete (yysemantic_stack_[(1) - (1)].sval); }
 | 
| +    break;
 | 
| +
 | 
| +  case 11:
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 8561 "../../doc/bison.texinfo"
 | 
| +    { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); }
 | 
| +    break;
 | 
| +
 | 
| +
 | 
| +
 | 
| +/* Line 678 of lalr1.cc  */
 | 
| +#line 539 "./calc++-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);
 | 
| +
 | 
| +    /* Shift the result of the reduction.  */
 | 
| +    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 -- here on detecting error |
 | 
| +  `------------------------------------*/
 | 
| +  yyerrlab:
 | 
| +    /* If not already recovering from an error, report this error.  */
 | 
| +    if (!yyerrstatus_)
 | 
| +      {
 | 
| +	++yynerrs_;
 | 
| +	error (yylloc, yysyntax_error_ (yystate, yytoken));
 | 
| +      }
 | 
| +
 | 
| +    yyerror_range[0] = yylloc;
 | 
| +    if (yyerrstatus_ == 3)
 | 
| +      {
 | 
| +	/* If just tried and failed to reuse lookahead token after an
 | 
| +	 error, discard it.  */
 | 
| +
 | 
| +	if (yychar <= yyeof_)
 | 
| +	  {
 | 
| +	  /* Return failure if at end of input.  */
 | 
| +	  if (yychar == yyeof_)
 | 
| +	    YYABORT;
 | 
| +	  }
 | 
| +	else
 | 
| +	  {
 | 
| +	    yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
 | 
| +	    yychar = yyempty_;
 | 
| +	  }
 | 
| +      }
 | 
| +
 | 
| +    /* Else will try to reuse lookahead token after shifting the error
 | 
| +       token.  */
 | 
| +    goto yyerrlab1;
 | 
| +
 | 
| +
 | 
| +  /*---------------------------------------------------.
 | 
| +  | yyerrorlab -- error raised explicitly by YYERROR.  |
 | 
| +  `---------------------------------------------------*/
 | 
| +  yyerrorlab:
 | 
| +
 | 
| +    /* Pacify compilers like GCC when the user code never invokes
 | 
| +       YYERROR and the label yyerrorlab therefore never appears in user
 | 
| +       code.  */
 | 
| +    if (false)
 | 
| +      goto yyerrorlab;
 | 
| +
 | 
| +    yyerror_range[0] = yylocation_stack_[yylen - 1];
 | 
| +    /* Do not reclaim the symbols of the rule which action triggered
 | 
| +       this YYERROR.  */
 | 
| +    yypop_ (yylen);
 | 
| +    yylen = 0;
 | 
| +    yystate = yystate_stack_[0];
 | 
| +    goto yyerrlab1;
 | 
| +
 | 
| +  /*-------------------------------------------------------------.
 | 
| +  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 | 
| +  `-------------------------------------------------------------*/
 | 
| +  yyerrlab1:
 | 
| +    yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
 | 
| +
 | 
| +    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;
 | 
| +	    }
 | 
| +	}
 | 
| +
 | 
| +	/* Pop the current state because it cannot handle the error token.  */
 | 
| +	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 ();
 | 
| +      }
 | 
| +
 | 
| +    yyerror_range[1] = yylloc;
 | 
| +    // Using YYLLOC is tempting, but would change the location of
 | 
| +    // the lookahead.  YYLOC is available though.
 | 
| +    YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
 | 
| +    yysemantic_stack_.push (yylval);
 | 
| +    yylocation_stack_.push (yyloc);
 | 
| +
 | 
| +    /* Shift the error token.  */
 | 
| +    YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
 | 
| +		     &yysemantic_stack_[0], &yylocation_stack_[0]);
 | 
| +
 | 
| +    yystate = yyn;
 | 
| +    goto yynewstate;
 | 
| +
 | 
| +    /* Accept.  */
 | 
| +  yyacceptlab:
 | 
| +    yyresult = 0;
 | 
| +    goto yyreturn;
 | 
| +
 | 
| +    /* Abort.  */
 | 
| +  yyabortlab:
 | 
| +    yyresult = 1;
 | 
| +    goto yyreturn;
 | 
| +
 | 
| +  yyreturn:
 | 
| +    if (yychar != yyempty_)
 | 
| +      yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
 | 
| +
 | 
| +    /* Do not reclaim the symbols of the rule which action triggered
 | 
| +       this YYABORT or YYACCEPT.  */
 | 
| +    yypop_ (yylen);
 | 
| +    while (yystate_stack_.height () != 1)
 | 
| +      {
 | 
| +	yydestruct_ ("Cleanup: popping",
 | 
| +		   yystos_[yystate_stack_[0]],
 | 
| +		   &yysemantic_stack_[0],
 | 
| +		   &yylocation_stack_[0]);
 | 
| +	yypop_ ();
 | 
| +      }
 | 
| +
 | 
| +    return yyresult;
 | 
| +  }
 | 
| +
 | 
| +  // Generate an error message.
 | 
| +  std::string
 | 
| +  calcxx_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_)
 | 
| +      {
 | 
| +	/* Start YYX at -YYN if negative to avoid negative indexes in
 | 
| +	   YYCHECK.  */
 | 
| +	int yyxbegin = yyn < 0 ? -yyn : 0;
 | 
| +
 | 
| +	/* Stay within bounds of both yycheck and yytname.  */
 | 
| +	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;
 | 
| +
 | 
| +	// FIXME: This method of building the message is not compatible
 | 
| +	// with internationalization.  It should work like yacc.c does it.
 | 
| +	// That is, first build a string that looks like this:
 | 
| +	// "syntax error, unexpected %s or %s or %s"
 | 
| +	// Then, invoke YY_ on this string.
 | 
| +	// Finally, use the string as a format to output
 | 
| +	// yytname_[tok], etc.
 | 
| +	// Until this gets fixed, this message appears in English only.
 | 
| +	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;
 | 
| +  }
 | 
| +
 | 
| +
 | 
| +  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
 | 
| +     STATE-NUM.  */
 | 
| +  const signed char calcxx_parser::yypact_ninf_ = -9;
 | 
| +  const signed char
 | 
| +  calcxx_parser::yypact_[] =
 | 
| +  {
 | 
| +        -9,    13,     5,    -9,    14,    -9,    -9,    -1,     7,     7,
 | 
| +       7,     7,     7,    -9,    -1,     6,     6,    -9,    -9
 | 
| +  };
 | 
| +
 | 
| +  /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
 | 
| +     doesn't specify something else to do.  Zero means the default is an
 | 
| +     error.  */
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yydefact_[] =
 | 
| +  {
 | 
| +         4,     0,     0,     1,    10,    11,     3,     2,     0,     0,
 | 
| +       0,     0,     0,    10,     5,     6,     7,     8,     9
 | 
| +  };
 | 
| +
 | 
| +  /* YYPGOTO[NTERM-NUM].  */
 | 
| +  const signed char
 | 
| +  calcxx_parser::yypgoto_[] =
 | 
| +  {
 | 
| +        -9,    -9,    -9,    -9,    -8
 | 
| +  };
 | 
| +
 | 
| +  /* YYDEFGOTO[NTERM-NUM].  */
 | 
| +  const signed char
 | 
| +  calcxx_parser::yydefgoto_[] =
 | 
| +  {
 | 
| +        -1,     1,     2,     6,     7
 | 
| +  };
 | 
| +
 | 
| +  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
 | 
| +     positive, shift that token.  If negative, reduce the rule which
 | 
| +     number is the opposite.  If zero, do what YYDEFACT says.  */
 | 
| +  const signed char calcxx_parser::yytable_ninf_ = -1;
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yytable_[] =
 | 
| +  {
 | 
| +        14,    15,    16,    17,    18,     9,    10,    11,    12,     4,
 | 
| +       5,    13,     5,     3,    11,    12,     0,     8
 | 
| +  };
 | 
| +
 | 
| +  /* YYCHECK.  */
 | 
| +  const signed char
 | 
| +  calcxx_parser::yycheck_[] =
 | 
| +  {
 | 
| +         8,     9,    10,    11,    12,     6,     7,     8,     9,     4,
 | 
| +       5,     4,     5,     0,     8,     9,    -1,     3
 | 
| +  };
 | 
| +
 | 
| +  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
 | 
| +     symbol of state STATE-NUM.  */
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yystos_[] =
 | 
| +  {
 | 
| +         0,    11,    12,     0,     4,     5,    13,    14,     3,     6,
 | 
| +       7,     8,     9,     4,    14,    14,    14,    14,    14
 | 
| +  };
 | 
| +
 | 
| +#if YYDEBUG
 | 
| +  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
 | 
| +     to YYLEX-NUM.  */
 | 
| +  const unsigned short int
 | 
| +  calcxx_parser::yytoken_number_[] =
 | 
| +  {
 | 
| +         0,   256,   257,   258,   259,   260,    43,    45,    42,    47
 | 
| +  };
 | 
| +#endif
 | 
| +
 | 
| +  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yyr1_[] =
 | 
| +  {
 | 
| +         0,    10,    11,    12,    12,    13,    14,    14,    14,    14,
 | 
| +      14,    14
 | 
| +  };
 | 
| +
 | 
| +  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yyr2_[] =
 | 
| +  {
 | 
| +         0,     2,     2,     2,     0,     3,     3,     3,     3,     3,
 | 
| +       1,     1
 | 
| +  };
 | 
| +
 | 
| +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
 | 
| +  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
 | 
| +     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
 | 
| +  const char*
 | 
| +  const calcxx_parser::yytname_[] =
 | 
| +  {
 | 
| +    "\"end of file\"", "error", "$undefined", "\":=\"", "\"identifier\"",
 | 
| +  "\"number\"", "'+'", "'-'", "'*'", "'/'", "$accept", "unit",
 | 
| +  "assignments", "assignment", "exp", 0
 | 
| +  };
 | 
| +#endif
 | 
| +
 | 
| +#if YYDEBUG
 | 
| +  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 | 
| +  const calcxx_parser::rhs_number_type
 | 
| +  calcxx_parser::yyrhs_[] =
 | 
| +  {
 | 
| +        11,     0,    -1,    12,    14,    -1,    12,    13,    -1,    -1,
 | 
| +       4,     3,    14,    -1,    14,     6,    14,    -1,    14,     7,
 | 
| +      14,    -1,    14,     8,    14,    -1,    14,     9,    14,    -1,
 | 
| +       4,    -1,     5,    -1
 | 
| +  };
 | 
| +
 | 
| +  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
 | 
| +     YYRHS.  */
 | 
| +  const unsigned char
 | 
| +  calcxx_parser::yyprhs_[] =
 | 
| +  {
 | 
| +         0,     0,     3,     6,     9,    10,    14,    18,    22,    26,
 | 
| +      30,    32
 | 
| +  };
 | 
| +
 | 
| +  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 | 
| +  const unsigned short int
 | 
| +  calcxx_parser::yyrline_[] =
 | 
| +  {
 | 
| +         0,  8545,  8545,  8547,  8548,  8551,  8556,  8557,  8558,  8559,
 | 
| +    8560,  8561
 | 
| +  };
 | 
| +
 | 
| +  // Print the state stack on the debug stream.
 | 
| +  void
 | 
| +  calcxx_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;
 | 
| +  }
 | 
| +
 | 
| +  // Report on the debug stream that the rule \a yyrule is going to be reduced.
 | 
| +  void
 | 
| +  calcxx_parser::yy_reduce_print_ (int yyrule)
 | 
| +  {
 | 
| +    unsigned int yylno = yyrline_[yyrule];
 | 
| +    int yynrhs = yyr2_[yyrule];
 | 
| +    /* Print the symbols being reduced, and their result.  */
 | 
| +    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
 | 
| +	       << " (line " << yylno << "):" << std::endl;
 | 
| +    /* The symbols being reduced.  */
 | 
| +    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 // YYDEBUG
 | 
| +
 | 
| +  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 | 
| +  calcxx_parser::token_number_type
 | 
| +  calcxx_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,     2,     2,     2,
 | 
| +       2,     2,     8,     6,     2,     7,     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,     2,
 | 
| +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | 
| +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | 
| +       2,     2,     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
 | 
| +    };
 | 
| +    if ((unsigned int) t <= yyuser_token_number_max_)
 | 
| +      return translate_table[t];
 | 
| +    else
 | 
| +      return yyundef_token_;
 | 
| +  }
 | 
| +
 | 
| +  const int calcxx_parser::yyeof_ = 0;
 | 
| +  const int calcxx_parser::yylast_ = 17;
 | 
| +  const int calcxx_parser::yynnts_ = 5;
 | 
| +  const int calcxx_parser::yyempty_ = -2;
 | 
| +  const int calcxx_parser::yyfinal_ = 3;
 | 
| +  const int calcxx_parser::yyterror_ = 1;
 | 
| +  const int calcxx_parser::yyerrcode_ = 256;
 | 
| +  const int calcxx_parser::yyntokens_ = 10;
 | 
| +
 | 
| +  const unsigned int calcxx_parser::yyuser_token_number_max_ = 260;
 | 
| +  const calcxx_parser::token_number_type calcxx_parser::yyundef_token_ = 2;
 | 
| +
 | 
| +
 | 
| +/* Line 1054 of lalr1.cc  */
 | 
| +#line 1 "[Bison:b4_percent_define_default]"
 | 
| +
 | 
| +} // yy
 | 
| +
 | 
| +/* Line 1054 of lalr1.cc  */
 | 
| +#line 960 "./calc++-parser.cc"
 | 
| +
 | 
| +
 | 
| +/* Line 1056 of lalr1.cc  */
 | 
| +#line 8562 "../../doc/bison.texinfo"
 | 
| +
 | 
| +#line 8571 "../../doc/bison.texinfo"
 | 
| +void
 | 
| +yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
 | 
| +                          const std::string& m)
 | 
| +{
 | 
| +  driver.error (l, m);
 | 
| +}
 | 
| +
 | 
| 
 | 
| Property changes on: bison\src\bison\2.4.1\bison-2.4.1-src\examples\calc++\calc++-parser.cc
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |