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 |