📄 lalr1.cc
字号:
m4_divert(-1)# C++ skeleton for Bison# Copyright (C) 2002, 2003, 2004, 2005 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 2 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, write to the Free Software# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA# 02110-1301 USAm4_include(b4_pkgdatadir/[c++.m4])# We do want M4 expansion after # for CPP macros.m4_changecom()m4_divert(0)dnlm4_if(b4_defines_flag, 0, [],[@output @output_header_name@b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], [2002, 2003, 2004, 2005])[/* FIXME: This is wrong, we want computed header guards. I don't know why the macros are missing now. :( */#ifndef PARSER_HEADER_H# define PARSER_HEADER_H#include <string>#include <iostream>/* Using locations. */#define YYLSP_NEEDED ]b4_locations_flag[namespace yy{ class position; class location;}]b4_token_enums(b4_tokens)[/* Copy the first part of user declarations. */]b4_pre_prologue[]/* Line __line__ of lalr1.cc. */b4_syncline([@oline@], [@ofile@])[#include "stack.hh"#include "location.hh"/* Enabling traces. */#ifndef YYDEBUG# define YYDEBUG ]b4_debug[#endif/* Enabling verbose error messages. */#ifdef YYERROR_VERBOSE# undef YYERROR_VERBOSE# define YYERROR_VERBOSE 1#else# define YYERROR_VERBOSE ]b4_error_verbose[#endif#if YYERROR_VERBOSE# define YYERROR_VERBOSE_IF(x) x#else# define YYERROR_VERBOSE_IF(x) /* empty */#endif/* Enabling the token table. */#ifndef YYTOKEN_TABLE# define YYTOKEN_TABLE ]b4_token_table[#endif#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)]m4_ifdef([b4_stype],[b4_syncline([b4_stype_line], [b4_file_name])union YYSTYPE b4_stype;/* Line __line__ of lalr1.cc. */b4_syncline([@oline@], [@ofile@])],[typedef int YYSTYPE;])[# define yystype YYSTYPE /* obsolescent; will be withdrawn */# define YYSTYPE_IS_DECLARED 1# define YYSTYPE_IS_TRIVIAL 1#endif/* Copy the second part of user declarations. */]b4_post_prologue[]/* Line __line__ of lalr1.cc. */b4_syncline([@oline@], [@ofile@])[/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */#ifndef YYLLOC_DEFAULT# define YYLLOC_DEFAULT(Current, Rhs, N) \do { \ if (N) \ { \ (Current).begin = (Rhs)[1].begin; \ (Current).end = (Rhs)[N].end; \ } \ else \ { \ (Current).begin = (Current).end = (Rhs)[0].end; \ } \} while (0)#endifnamespace yy{ class ]b4_parser_class_name[; template <typename P> struct traits { }; template <> struct traits<]b4_parser_class_name[> { typedef ]b4_int_type_for([b4_translate])[ token_number_type; typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type; typedef int state_type; typedef YYSTYPE semantic_type; typedef ]b4_location_type[ location_type; };}namespace yy{ /// A Bison parser. class ]b4_parser_class_name[ { /// Symbol semantic values. typedef traits<]b4_parser_class_name[>::semantic_type semantic_type; /// Symbol locations. typedef traits<]b4_parser_class_name[>::location_type location_type; public: /// Build a parser object. ]b4_parser_class_name[ (]b4_parse_param_decl[) : yydebug_ (false), yycdebug_ (&std::cerr)]b4_parse_param_cons[ { } virtual ~]b4_parser_class_name[ () { } /// Parse. /// \returns 0 iff parsing succeeded. virtual int parse (); /// The current debugging stream. std::ostream& debug_stream () const; /// Set the current debugging stream. void set_debug_stream (std::ostream &); /// Type for debugging levels. typedef int debug_level_type; /// The current debugging level. debug_level_type debug_level () const; /// Set the current debugging level. void set_debug_level (debug_level_type l); private: /// Report a syntax error. /// \param loc where the syntax error is found. /// \param msg a description of the syntax error. virtual void error (const location_type& loc, const std::string& msg); /// Generate an error message. /// \param tok the look-ahead token. virtual std::string yysyntax_error_ (YYERROR_VERBOSE_IF (int tok));#if YYDEBUG /// \brief Report a symbol on the debug stream. /// \param yytype The token type. /// \param yyvaluep Its semantic value. /// \param yylocationp Its location. virtual void yysymprint_ (int yytype, const semantic_type* yyvaluep, const location_type* yylocationp);#endif /* ! YYDEBUG */ /// State numbers. typedef traits<]b4_parser_class_name[>::state_type state_type; /// State stack type. typedef stack<state_type> state_stack_type; /// Semantic value stack type. typedef stack<semantic_type> semantic_stack_type; /// location stack type. typedef stack<location_type> location_stack_type; /// The state stack. state_stack_type yystate_stack_; /// The semantic value stack. semantic_stack_type yysemantic_stack_; /// The location stack. location_stack_type yylocation_stack_; /// Internal symbol numbers. typedef traits<]b4_parser_class_name[>::token_number_type token_number_type; /* Tables. */ /// For a state, the index in \a yytable_ of its portion. static const ]b4_int_type_for([b4_pact])[ yypact_[]; static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_; /// For a state, default rule to reduce. /// Unless\a yytable_ specifies something else to do. /// Zero means the default is an error. static const ]b4_int_type_for([b4_defact])[ yydefact_[]; static const ]b4_int_type_for([b4_pgoto])[ yypgoto_[]; static const ]b4_int_type_for([b4_defgoto])[ yydefgoto_[]; /// What to do in a state. /// \a yytable_[yypact_[s]]: what to do in state \a s. /// - if positive, shift that token. /// - if negative, reduce the rule which number is the opposite. /// - if zero, do what YYDEFACT says. static const ]b4_int_type_for([b4_table])[ yytable_[]; static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_; static const ]b4_int_type_for([b4_check])[ yycheck_[]; /// For a state, its accessing symbol. static const ]b4_int_type_for([b4_stos])[ yystos_[]; /// For a rule, its LHS. static const ]b4_int_type_for([b4_r1])[ yyr1_[]; /// For a rule, its RHS length. static const ]b4_int_type_for([b4_r2])[ yyr2_[];#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /// For a symbol, its name in clear. static const char* const yytname_[];#endif#if YYERROR_VERBOSE /// Convert the symbol name \a n to a form suitable for a diagnostic. virtual std::string yytnamerr_ (const char *n);#endif#if YYDEBUG /// A type to store symbol numbers and -1. typedef traits<]b4_parser_class_name[>::rhs_number_type rhs_number_type; /// A `-1'-separated list of the rules' RHS. static const rhs_number_type yyrhs_[]; /// For each rule, the index of the first RHS symbol in \a yyrhs_. static const ]b4_int_type_for([b4_prhs])[ yyprhs_[]; /// For each rule, its source line number. static const ]b4_int_type_for([b4_rline])[ yyrline_[]; /// For each scanner token number, its symbol number. static const ]b4_int_type_for([b4_toknum])[ yytoken_number_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yyreduce_print_ (int r); /// Print the state stack on the debug stream. virtual void yystack_print_ ();#endif /// Convert a scanner token number to a symbol number. inline token_number_type yytranslate_ (int token); /// \brief Reclaim the memory associated to a symbol. /// \param yymsg Why this token is reclaimed. /// \param yytype The symbol type. /// \param yyvaluep Its semantic value. /// \param yylocationp Its location. inline void yydestruct_ (const char* yymsg, int yytype, semantic_type* yyvaluep, location_type* yylocationp); /// Pop \a n symbols the three stacks. inline void yypop_ (unsigned int n = 1); /* Constants. */ static const int yyeof_; /* LAST_ -- Last index in TABLE_. */ static const int yylast_; static const int yynnts_; static const int yyempty_; static const int yyfinal_; static const int yyterror_; static const int yyerrcode_; static const int yyntokens_; static const unsigned int yyuser_token_number_max_; static const token_number_type yyundef_token_; /* State. */ int yyn_; int yylen_; int yystate_; /* Error handling. */ int yynerrs_; int yyerrstatus_; /* Debugging. */ int yydebug_; std::ostream* yycdebug_;]b4_parse_param_vars[ };}#endif /* ! defined PARSER_HEADER_H */]])dnl@output @output_parser_name@b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], [2002, 2003, 2004, 2005])m4_if(b4_prefix[], [yy], [],[// Take the name prefix into account.#define yylex b4_prefix[]lex])m4_if(b4_defines_flag, 0, [],[#include @output_header_name@])[#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/* A pseudo ostream that takes yydebug_ into account. */# define YYCDEBUG \ for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false) \ (*yycdebug_)/* Enable debugging if requested. */#if YYDEBUG# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \do { \ if (yydebug_) \ { \ *yycdebug_ << (Title) << ' '; \ yysymprint_ ((Type), (Value), (Location)); \ *yycdebug_ << std::endl; \ } \} while (0)# define YY_REDUCE_PRINT(Rule) \do { \ if (yydebug_) \ yyreduce_print_ (Rule); \} while (0)# define YY_STACK_PRINT() \do { \ if (yydebug_) \ yystack_print_ (); \} while (0)#else /* !YYDEBUG */# define YY_SYMBOL_PRINT(Title, Type, Value, Location)# define YY_REDUCE_PRINT(Rule)# define YY_STACK_PRINT()#endif /* !YYDEBUG */#define YYACCEPT goto yyacceptlab#define YYABORT goto yyabortlab#define YYERROR goto yyerrorlab#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::stringyy::]b4_parser_class_name[::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#if YYDEBUG/*--------------------------------.| Print this symbol on YYOUTPUT. |`--------------------------------*/voidyy::]b4_parser_class_name[::yysymprint_ (int yytype, const semantic_type* yyvaluep, const location_type* yylocationp){ /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; (void) yylocationp; /* Backward compatibility, but should be removed eventually. */ std::ostream& cdebug_ = *yycdebug_; (void) cdebug_; *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm") << ' ' << yytname_[yytype] << " (" << *yylocationp << ": "; switch (yytype) {]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl[ default: break; } *yycdebug_ << ')';}#endif /* ! YYDEBUG */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -