| 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
|
|
|
|
|