1/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
2
3/* Skeleton interface for Bison LALR(1) parsers in C++
4
5      Copyright (C) 2002-2012 Free Software Foundation, Inc.
6
7   This program is free software: you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation, either version 3 of the License, or
10   (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20/* As a special exception, you may create a larger work that contains
21   part or all of the Bison parser skeleton and distribute that work
22   under terms of your choice, so long as that work isn't itself a
23   parser generator using the skeleton or a modified version thereof
24   as a parser skeleton.  Alternatively, if you modify or redistribute
25   the parser skeleton itself, you may (at your option) remove this
26   special exception, which will cause the skeleton and the resulting
27   Bison output files to be licensed under the GNU General Public
28   License without this special exception.
29
30   This special exception was added by the Free Software Foundation in
31   version 2.2 of Bison.  */
32
33/**
34 ** \file ../../../../examples/calc++/calc++-parser.hh
35 ** Define the yy::parser class.
36 */
37
38/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
39
40#ifndef YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED
41# define YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED
42
43/* "%code requires" blocks.  */
44/* Line 33 of lalr1.cc  */
45#line 10214 "../../doc/bison.texi"
46
47# include <string>
48class calcxx_driver;
49
50
51/* Line 33 of lalr1.cc  */
52#line 53 "../../../../examples/calc++/calc++-parser.hh"
53
54
55#include <string>
56#include <iostream>
57#include "stack.hh"
58#include "location.hh"
59
60/* Enabling traces.  */
61#ifndef YYDEBUG
62# define YYDEBUG 1
63#endif
64
65
66namespace yy {
67/* Line 33 of lalr1.cc  */
68#line 69 "../../../../examples/calc++/calc++-parser.hh"
69
70  /// A Bison parser.
71  class calcxx_parser
72  {
73  public:
74    /// Symbol semantic values.
75#ifndef YYSTYPE
76    union semantic_type
77    {
78/* Line 33 of lalr1.cc  */
79#line 10267 "../../doc/bison.texi"
80
81  int          ival;
82  std::string *sval;
83
84
85/* Line 33 of lalr1.cc  */
86#line 87 "../../../../examples/calc++/calc++-parser.hh"
87    };
88#else
89    typedef YYSTYPE semantic_type;
90#endif
91    /// Symbol locations.
92    typedef location location_type;
93    /// Tokens.
94    struct token
95    {
96      /* Tokens.  */
97   enum yytokentype {
98     END = 0,
99     ASSIGN = 258,
100     IDENTIFIER = 259,
101     NUMBER = 260
102   };
103
104    };
105    /// Token type.
106    typedef token::yytokentype token_type;
107
108    /// Build a parser object.
109    calcxx_parser (calcxx_driver& driver_yyarg);
110    virtual ~calcxx_parser ();
111
112    /// Parse.
113    /// \returns  0 iff parsing succeeded.
114    virtual int parse ();
115
116#if YYDEBUG
117    /// The current debugging stream.
118    std::ostream& debug_stream () const;
119    /// Set the current debugging stream.
120    void set_debug_stream (std::ostream &);
121
122    /// Type for debugging levels.
123    typedef int debug_level_type;
124    /// The current debugging level.
125    debug_level_type debug_level () const;
126    /// Set the current debugging level.
127    void set_debug_level (debug_level_type l);
128#endif
129
130  private:
131    /// Report a syntax error.
132    /// \param loc    where the syntax error is found.
133    /// \param msg    a description of the syntax error.
134    virtual void error (const location_type& loc, const std::string& msg);
135
136    /// Generate an error message.
137    /// \param state   the state where the error occurred.
138    /// \param tok     the lookahead token.
139    virtual std::string yysyntax_error_ (int yystate, int tok);
140
141#if YYDEBUG
142    /// \brief Report a symbol value on the debug stream.
143    /// \param yytype       The token type.
144    /// \param yyvaluep     Its semantic value.
145    /// \param yylocationp  Its location.
146    virtual void yy_symbol_value_print_ (int yytype,
147					 const semantic_type* yyvaluep,
148					 const location_type* yylocationp);
149    /// \brief Report a symbol on the debug stream.
150    /// \param yytype       The token type.
151    /// \param yyvaluep     Its semantic value.
152    /// \param yylocationp  Its location.
153    virtual void yy_symbol_print_ (int yytype,
154				   const semantic_type* yyvaluep,
155				   const location_type* yylocationp);
156#endif
157
158
159    /// State numbers.
160    typedef int state_type;
161    /// State stack type.
162    typedef stack<state_type>    state_stack_type;
163    /// Semantic value stack type.
164    typedef stack<semantic_type> semantic_stack_type;
165    /// location stack type.
166    typedef stack<location_type> location_stack_type;
167
168    /// The state stack.
169    state_stack_type yystate_stack_;
170    /// The semantic value stack.
171    semantic_stack_type yysemantic_stack_;
172    /// The location stack.
173    location_stack_type yylocation_stack_;
174
175    /// Whether the given \c yypact_ value indicates a defaulted state.
176    /// \param yyvalue   the value to check
177    static bool yy_pact_value_is_default_ (int yyvalue);
178
179    /// Whether the given \c yytable_ value indicates a syntax error.
180    /// \param yyvalue   the value to check
181    static bool yy_table_value_is_error_ (int yyvalue);
182
183    /// Internal symbol numbers.
184    typedef unsigned char token_number_type;
185    /* Tables.  */
186    /// For a state, the index in \a yytable_ of its portion.
187    static const signed char yypact_[];
188    static const signed char yypact_ninf_;
189
190    /// For a state, default reduction number.
191    /// Unless\a  yytable_ specifies something else to do.
192    /// Zero means the default is an error.
193    static const unsigned char yydefact_[];
194
195    static const signed char yypgoto_[];
196    static const signed char yydefgoto_[];
197
198    /// What to do in a state.
199    /// \a yytable_[yypact_[s]]: what to do in state \a s.
200    /// - if positive, shift that token.
201    /// - if negative, reduce the rule which number is the opposite.
202    /// - if zero, do what YYDEFACT says.
203    static const unsigned char yytable_[];
204    static const signed char yytable_ninf_;
205
206    static const signed char yycheck_[];
207
208    /// For a state, its accessing symbol.
209    static const unsigned char yystos_[];
210
211    /// For a rule, its LHS.
212    static const unsigned char yyr1_[];
213    /// For a rule, its RHS length.
214    static const unsigned char yyr2_[];
215
216    /// Convert the symbol name \a n to a form suitable for a diagnostic.
217    static std::string yytnamerr_ (const char *n);
218
219
220    /// For a symbol, its name in clear.
221    static const char* const yytname_[];
222#if YYDEBUG
223    /// A type to store symbol numbers and -1.
224    typedef signed char rhs_number_type;
225    /// A `-1'-separated list of the rules' RHS.
226    static const rhs_number_type yyrhs_[];
227    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
228    static const unsigned char yyprhs_[];
229    /// For each rule, its source line number.
230    static const unsigned short int yyrline_[];
231    /// For each scanner token number, its symbol number.
232    static const unsigned short int yytoken_number_[];
233    /// Report on the debug stream that the rule \a r is going to be reduced.
234    virtual void yy_reduce_print_ (int r);
235    /// Print the state stack on the debug stream.
236    virtual void yystack_print_ ();
237
238    /* Debugging.  */
239    int yydebug_;
240    std::ostream* yycdebug_;
241#endif
242
243    /// Convert a scanner token number \a t to a symbol number.
244    token_number_type yytranslate_ (int t);
245
246    /// \brief Reclaim the memory associated to a symbol.
247    /// \param yymsg        Why this token is reclaimed.
248    ///                     If null, do not display the symbol, just free it.
249    /// \param yytype       The symbol type.
250    /// \param yyvaluep     Its semantic value.
251    /// \param yylocationp  Its location.
252    inline void yydestruct_ (const char* yymsg,
253			     int yytype,
254			     semantic_type* yyvaluep,
255			     location_type* yylocationp);
256
257    /// Pop \a n symbols the three stacks.
258    inline void yypop_ (unsigned int n = 1);
259
260    /* Constants.  */
261    static const int yyeof_;
262    /* LAST_ -- Last index in TABLE_.  */
263    static const int yylast_;
264    static const int yynnts_;
265    static const int yyempty_;
266    static const int yyfinal_;
267    static const int yyterror_;
268    static const int yyerrcode_;
269    static const int yyntokens_;
270    static const unsigned int yyuser_token_number_max_;
271    static const token_number_type yyundef_token_;
272
273    /* User arguments.  */
274    calcxx_driver& driver;
275  };
276
277} // yy
278/* Line 33 of lalr1.cc  */
279#line 280 "../../../../examples/calc++/calc++-parser.hh"
280
281
282
283#endif /* !YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED  */
284