⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lalr1.cc

📁 GNU的词法/语法分析器bison源码
💻 CC
📖 第 1 页 / 共 3 页
字号:
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 + -