1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# C++ skeleton for Bison
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Copyright (C) 2002-2012 Free Software Foundation, Inc.
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is free software: you can redistribute it and/or modify
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# it under the terms of the GNU General Public License as published by
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# the Free Software Foundation, either version 3 of the License, or
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# (at your option) any later version.
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is distributed in the hope that it will be useful,
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GNU General Public License for more details.
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# You should have received a copy of the GNU General Public License
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_include(b4_pkgdatadir/[c++.m4])
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_define([b4_parser_class_name],
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          [b4_percent_define_get([[parser_class_name]])])
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# The header is mandatory.
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_defines_if([],
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_define_ifdef([[api.location.type]], [],
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  [# Backward compatibility.
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  m4_define([b4_location_constructors])
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  m4_include(b4_pkgdatadir/[location.cc])])
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_include(b4_pkgdatadir/[stack.hh])
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_defines_if(
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_output_begin([b4_spec_defines_file])
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang             [2002-2012])
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/**
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** \file ]b4_spec_defines_file[
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** Define the ]b4_namespace_ref[::parser class.
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_cpp_guard_open([b4_spec_defines_file])[
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get([[requires]])[
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string>
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <iostream>
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "stack.hh"
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_define_ifdef([[api.location.type]], [],
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         [[#include "location.hh"]])[
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_YYDEBUG_define[
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_namespace_open[
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /// A Bison parser.
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  class ]b4_parser_class_name[
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  public:
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Symbol semantic values.
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef ]b4_api_PREFIX[STYPE
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_ifdef([b4_stype],
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[    union semantic_type
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_user_stype
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    };],
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang[m4_if(b4_tag_seen_flag, 0,
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang[[    typedef int semantic_type;]],
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang[[    typedef ]b4_api_PREFIX[STYPE semantic_type;]])])[
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    typedef ]b4_api_PREFIX[STYPE semantic_type;
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Symbol locations.
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    typedef ]b4_percent_define_get([[api.location.type]],
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   [[location]])[ location_type;
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Tokens.
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    struct token
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ]b4_token_enums(b4_tokens)[
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    };
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Token type.
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef token::yytokentype token_type;
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Build a parser object.
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_parser_class_name[ (]b4_parse_param_decl[);
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual ~]b4_parser_class_name[ ();
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Parse.
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \returns  0 iff parsing succeeded.
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual int parse ();
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The current debugging stream.
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    std::ostream& debug_stream () const;
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Set the current debugging stream.
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    void set_debug_stream (std::ostream &);
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Type for debugging levels.
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef int debug_level_type;
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The current debugging level.
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    debug_level_type debug_level () const;
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Set the current debugging level.
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    void set_debug_level (debug_level_type l);
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  private:
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Report a syntax error.
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param loc    where the syntax error is found.
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param msg    a description of the syntax error.
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void error (const location_type& loc, const std::string& msg);
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Generate an error message.
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param state   the state where the error occurred.
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// \param tok     the lookahead token.
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    virtual std::string yysyntax_error_ (int yystate, int tok);
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Report a symbol value on the debug stream.
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The token type.
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yy_symbol_value_print_ (int yytype,
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project					 const semantic_type* yyvaluep,
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project					 const location_type* yylocationp);
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Report a symbol on the debug stream.
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The token type.
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yy_symbol_print_ (int yytype,
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				   const semantic_type* yyvaluep,
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				   const location_type* yylocationp);
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// State numbers.
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef int state_type;
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// State stack type.
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef stack<state_type>    state_stack_type;
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Semantic value stack type.
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef stack<semantic_type> semantic_stack_type;
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// location stack type.
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef stack<location_type> location_stack_type;
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The state stack.
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    state_stack_type yystate_stack_;
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The semantic value stack.
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    semantic_stack_type yysemantic_stack_;
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The location stack.
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    location_stack_type yylocation_stack_;
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Whether the given \c yypact_ value indicates a defaulted state.
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// \param yyvalue   the value to check
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static bool yy_pact_value_is_default_ (int yyvalue);
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Whether the given \c yytable_ value indicates a syntax error.
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// \param yyvalue   the value to check
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static bool yy_table_value_is_error_ (int yyvalue);
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Internal symbol numbers.
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef ]b4_int_type_for([b4_translate])[ token_number_type;
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Tables.  */
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For a state, the index in \a yytable_ of its portion.
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_pact])[ yypact_[];
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// For a state, default reduction number.
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Unless\a  yytable_ specifies something else to do.
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Zero means the default is an error.
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_defact])[ yydefact_[];
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_pgoto])[ yypgoto_[];
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_defgoto])[ yydefgoto_[];
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// What to do in a state.
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \a yytable_[yypact_[s]]: what to do in state \a s.
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// - if positive, shift that token.
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// - if negative, reduce the rule which number is the opposite.
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// - if zero, do what YYDEFACT says.
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_table])[ yytable_[];
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_check])[ yycheck_[];
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For a state, its accessing symbol.
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_stos])[ yystos_[];
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For a rule, its LHS.
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_r1])[ yyr1_[];
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For a rule, its RHS length.
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static const ]b4_int_type_for([b4_r2])[ yyr2_[]; ]b4_error_verbose_if([
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Convert the symbol name \a n to a form suitable for a diagnostic.
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static std::string yytnamerr_ (const char *n);])[
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// For a symbol, its name in clear.
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static const char* const yytname_[];
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// A type to store symbol numbers and -1.
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// A `-1'-separated list of the rules' RHS.
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const rhs_number_type yyrhs_[];
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_prhs])[ yyprhs_[];
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For each rule, its source line number.
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_rline])[ yyrline_[];
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// For each scanner token number, its symbol number.
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const ]b4_int_type_for([b4_toknum])[ yytoken_number_[];
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Report on the debug stream that the rule \a r is going to be reduced.
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yy_reduce_print_ (int r);
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Print the state stack on the debug stream.
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yystack_print_ ();
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Debugging.  */
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    int yydebug_;
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    std::ostream* yycdebug_;
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Convert a scanner token number \a t to a symbol number.
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    token_number_type yytranslate_ (int t);
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Reclaim the memory associated to a symbol.
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yymsg        Why this token is reclaimed.
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    ///                     If null, do not display the symbol, just free it.
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The symbol type.
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    inline void yydestruct_ (const char* yymsg,
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     int yytype,
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     semantic_type* yyvaluep,
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     location_type* yylocationp);
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Pop \a n symbols the three stacks.
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    inline void yypop_ (unsigned int n = 1);
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Constants.  */
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyeof_;
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* LAST_ -- Last index in TABLE_.  */
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yylast_;
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yynnts_;
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyempty_;
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyfinal_;
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyterror_;
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyerrcode_;
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const int yyntokens_;
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const unsigned int yyuser_token_number_max_;
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static const token_number_type yyundef_token_;
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_vars[
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_namespace_close[
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_define_flag_if([[global_tokens_and_yystype]],
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_token_defines(b4_tokens)
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef ]b4_api_PREFIX[STYPE
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Redirection for backward compatibility.  */
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])[
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get([[provides]])[
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_cpp_guard_close([b4_spec_defines_file])
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_end()
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang])
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_begin([b4_parser_file_name])
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             [2002-2012])
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_code_get([[top]])[]dnl
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_if(b4_prefix, [yy], [],
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project// Take the name prefix into account.
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylex   b4_prefix[]lex])[
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* First part of user declarations.  */
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_user_pre_prologue[
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_defines_if([[
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "@basename(]b4_spec_defines_file[@)"]])[
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* User implementation prologue.  */
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_user_post_prologue[
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get[
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_null_define[
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YY_
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined YYENABLE_NLS && YYENABLE_NLS
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  if ENABLE_NLS
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   define YY_(msgid) dgettext ("bison-runtime", msgid)
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  endif
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ifndef YY_
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define YY_(msgid) msgid
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYRHSLOC(Rhs, K) ((Rhs)[K])
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_yylloc_default_define[
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Suppress unused-variable warnings by "using" E.  */
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYUSE(e) ((void) (e))
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Enable debugging if requested.  */
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A pseudo ostream that takes yydebug_ into account.  */
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYCDEBUG if (yydebug_) (*yycdebug_)
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YY_SYMBOL_PRINT(Title, Type, Value, Location)	\
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdo {							\
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yydebug_)						\
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {							\
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yycdebug_ << Title << ' ';			\
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yy_symbol_print_ ((Type), (Value), (Location));	\
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yycdebug_ << std::endl;				\
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }							\
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (false)
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YY_REDUCE_PRINT(Rule)		\
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdo {					\
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yydebug_)				\
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yy_reduce_print_ (Rule);		\
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (false)
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YY_STACK_PRINT()		\
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdo {					\
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yydebug_)				\
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystack_print_ ();			\
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (false)
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else /* !]b4_api_PREFIX[DEBUG */
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYCDEBUG if (false) std::cerr
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type)
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_REDUCE_PRINT(Rule)        static_cast<void>(0)
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_STACK_PRINT()             static_cast<void>(0)
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !]b4_api_PREFIX[DEBUG */
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyerrok		(yyerrstatus_ = 0)
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyclearin	(yychar = yyempty_)
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYACCEPT	goto yyacceptlab
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYABORT		goto yyabortlab
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYERROR		goto yyerrorlab
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYRECOVERING()  (!!yyerrstatus_)
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_namespace_open[]b4_error_verbose_if([[
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Return YYSTR after stripping away unnecessary quotes and
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     backslashes, so that it's suitable for yyerror.  The heuristic is
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     that double-quoting is unnecessary unless the string contains an
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     apostrophe, a comma, or backslash (other than backslash-backslash).
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     YYSTR is taken from yytname.  */
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  std::string
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (*yystr == '"')
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        std::string yyr = "";
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        char const *yyp = yystr;
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project        for (;;)
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project          switch (*++yyp)
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            {
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            case '\'':
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            case ',':
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              goto do_not_strip_quotes;
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            case '\\':
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              if (*++yyp != '\\')
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                goto do_not_strip_quotes;
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              /* Fall through.  */
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            default:
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              yyr += *yyp;
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              break;
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            case '"':
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              return yyr;
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            }
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      do_not_strip_quotes: ;
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yystr;
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]])[
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /// Build a parser object.
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    :])[
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    ]m4_ifset([b4_parse_param], [  ], [ :])[yydebug_ (false),
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif]b4_parse_param_cons[
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name::~b4_parser_class_name[ ()
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*--------------------------------.
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | Print this symbol on YYOUTPUT.  |
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `--------------------------------*/
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  inline void
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			   const semantic_type* yyvaluep, const location_type* yylocationp)
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yylocationp);
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yyvaluep);
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    std::ostream& yyo = debug_stream ();
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    std::ostream& yyoutput = yyo;
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYUSE (yyoutput);
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    switch (yytype)
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[       default:
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yy_symbol_print_ (int yytype,
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			   const semantic_type* yyvaluep, const location_type* yylocationp)
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	       << ' ' << yytname_[yytype] << " ("
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	       << *yylocationp << ": ";
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << ')';
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yydestruct_ (const char* yymsg,
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			   int yytype, semantic_type* yyvaluep, location_type* yylocationp)
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yylocationp);
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yymsg);
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yyvaluep);
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yymsg)
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    switch (yytype)
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	default:
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yypop_ (unsigned int n)
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate_stack_.pop (n);
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_.pop (n);
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_.pop (n);
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  std::ostream&
471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_stream () const
472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return *yycdebug_;
474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yycdebug_ = &o;
480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_level_type
484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_level () const
485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yydebug_;
487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::set_debug_level (debug_level_type l)
491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yydebug_ = l;
493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return yyvalue == yypact_ninf_;
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return yyvalue == yytable_ninf_;
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int
509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::parse ()
510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Lookahead and lookahead in internal form.
512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yychar = yyempty_;
513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yytoken = 0;
514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // State.
516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yyn;
517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yylen = 0;
518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yystate = 0;
519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Error handling.
521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yynerrs_ = 0;
522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yyerrstatus_ = 0;
523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Semantic value of the lookahead.
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    static semantic_type yyval_default;
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    semantic_type yylval = yyval_default;
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Location of the lookahead.
528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    location_type yylloc;
529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The locations where the error started and ended.
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    location_type yyerror_range[3];
531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// $$.
533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    semantic_type yyval;
534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// @@$.
535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    location_type yyloc;
536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yyresult;
538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // FIXME: This shoud be completely indented.  It is not yet to
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // avoid gratuitous conflicts when merging into the master branch.
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    try
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {
543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYCDEBUG << "Starting parse" << std::endl;
544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_ifdef([b4_initial_action], [
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_pushdef([yylval], [], [yylloc])dnl
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* User initialization code.  */
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_user_initial_action
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_popdef])[]dnl
550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [  /* Initialize the stacks.  The initial state will be pushed in
552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yynewstate, since the latter expects the semantical and the
553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       location values to have been already stored, initialize these
554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       stacks with a primary value.  */
555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate_stack_ = state_stack_type (0);
556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_ = semantic_stack_type (0);
557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_ = location_stack_type (0);
558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_.push (yylval);
559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_.push (yylloc);
560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* New state.  */
562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewstate:
563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate_stack_.push (yystate);
564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYCDEBUG << "Entering state " << yystate << std::endl;
56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Accept?  */
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yystate == yyfinal_)
56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      goto yyacceptlab;
56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yybackup;
571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Backup.  */
573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybackup:
574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Try to take a decision without lookahead.  */
576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyn = yypact_[yystate];
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yy_pact_value_is_default_ (yyn))
578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      goto yydefault;
579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Read a lookahead token.  */
581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yychar == yyempty_)
582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCDEBUG << "Reading a token: ";
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yychar = ]b4_c_function_call([yylex], [int],
58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     [b4_api_PREFIX[STYPE*], [&yylval]][]dnl
586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_locations_if([, [[location*], [&yylloc]]])dnl
587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Convert token to internal form.  */
591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yychar <= yyeof_)
592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yychar = yytoken = yyeof_;
594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	YYCDEBUG << "Now at end of input." << std::endl;
595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    else
597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yytoken = yytranslate_ (yychar);
599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* If the proper action on seeing token YYTOKEN is to reduce or to
603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       detect an error, take that action.  */
604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyn += yytoken;
605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      goto yydefault;
607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Reduce or error.  */
609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyn = yytable_[yyn];
610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yyn <= 0)
611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang	if (yy_table_value_is_error_ (yyn))
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang	  goto yyerrlab;
614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yyn = -yyn;
615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	goto yyreduce;
616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Shift the lookahead token.  */
619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Discard the token being shifted.  */
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yychar = yyempty_;
623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_.push (yylval);
625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_.push (yylloc);
626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Count tokens shifted since error; after three, turn off error
628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       status.  */
629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yyerrstatus_)
630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      --yyerrstatus_;
631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate = yyn;
633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yynewstate;
634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*-----------------------------------------------------------.
636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | yydefault -- do the default action for the current state.  |
637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `-----------------------------------------------------------*/
638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yydefault:
639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyn = yydefact_[yystate];
640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yyn == 0)
641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      goto yyerrlab;
642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyreduce;
643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*-----------------------------.
645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | yyreduce -- Do a reduction.  |
646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `-----------------------------*/
647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyreduce:
648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylen = yyr2_[yyn];
649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* If YYLEN is nonzero, implement the default value of the action:
650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       `$$ = $1'.  Otherwise, use the top of the stack.
651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       Otherwise, the following line sets YYVAL to garbage.
653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       This behavior is undocumented and Bison
654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       users should not rely upon it.  */
655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yylen)
656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyval = yysemantic_stack_[yylen - 1];
657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    else
658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyval = yysemantic_stack_[0];
659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Compute the default @@$.
661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYLLOC_DEFAULT (yyloc, slice, yylen);
664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Perform the reduction.
667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YY_REDUCE_PRINT (yyn);
668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    switch (yyn)
669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        ]b4_user_actions[
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      default:
67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        break;
673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* User semantic actions sometimes alter yychar, and that requires
67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       that yytoken be updated with the new translation.  We take the
67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       approach of translating immediately before every use of yytoken.
67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       One alternative is translating here after every semantic action,
67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       but that translation would be missed if the semantic action
68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       destructor might then be invoked immediately.  In the case of
68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       YYERROR, subsequent parser actions might lead to an incorrect
68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       destructor call or verbose syntax error message before the
68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       lookahead is translated.  */
686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yypop_ (yylen);
689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylen = 0;
690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YY_STACK_PRINT ();
691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_.push (yyval);
693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_.push (yyloc);
694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Shift the result of the reduction.  */
696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyn = yyr1_[yyn];
697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (0 <= yystate && yystate <= yylast_
699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	&& yycheck_[yystate] == yystate_stack_[0])
700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystate = yytable_[yystate];
701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    else
702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystate = yydefgoto_[yyn - yyntokens_];
703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yynewstate;
704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*------------------------------------.
706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | yyerrlab -- here on detecting error |
707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `------------------------------------*/
708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyerrlab:
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Make sure we have latest lookahead translation.  See comments at
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       user semantic actions for why this is necessary.  */
71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yytoken = yytranslate_ (yychar);
71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* If not already recovering from an error, report this error.  */
714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (!yyerrstatus_)
715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	++yynerrs_;
71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang	if (yychar == yyempty_)
71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang	  yytoken = yyempty_;
71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang	error (yylloc, yysyntax_error_ (yystate, yytoken));
720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyerror_range[1] = yylloc;
723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (yyerrstatus_ == 3)
724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        /* If just tried and failed to reuse lookahead token after an
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang           error, discard it.  */
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yychar <= yyeof_)
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* Return failure if at end of input.  */
73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yychar == yyeof_)
73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYABORT;
73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        else
73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yychar = yyempty_;
73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Else will try to reuse lookahead token after shifting the error
741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       token.  */
742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyerrlab1;
743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*---------------------------------------------------.
746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | yyerrorlab -- error raised explicitly by YYERROR.  |
747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `---------------------------------------------------*/
748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyerrorlab:
749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Pacify compilers like GCC when the user code never invokes
751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       YYERROR and the label yyerrorlab therefore never appears in user
752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       code.  */
753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if (false)
754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      goto yyerrorlab;
755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyerror_range[1] = yylocation_stack_[yylen - 1];
757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Do not reclaim the symbols of the rule which action triggered
758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       this YYERROR.  */
759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yypop_ (yylen);
760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylen = 0;
761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate = yystate_stack_[0];
762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyerrlab1;
763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*-------------------------------------------------------------.
765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `-------------------------------------------------------------*/
767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyerrlab1:
768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    for (;;)
771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yyn = yypact_[yystate];
77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang	if (!yy_pact_value_is_default_ (yyn))
774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	{
775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  yyn += yyterror_;
776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    {
778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      yyn = yytable_[yyn];
779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      if (0 < yyn)
780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		break;
781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    }
782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}
783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	/* Pop the current state because it cannot handle the error token.  */
785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	if (yystate_stack_.height () == 1)
78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang	  YYABORT;
787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang	yyerror_range[1] = yylocation_stack_[0];
789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yydestruct_ ("Error: popping",
790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		     yystos_[yystate],
791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		     &yysemantic_stack_[0], &yylocation_stack_[0]);
792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yypop_ ();
793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	yystate = yystate_stack_[0];
794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	YY_STACK_PRINT ();
795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyerror_range[2] = yylloc;
798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    // Using YYLLOC is tempting, but would change the location of
79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // the lookahead.  YYLOC is available though.
80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yysemantic_stack_.push (yylval);
802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yylocation_stack_.push (yyloc);
803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Shift the error token.  */
805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang		     &yysemantic_stack_[0], &yylocation_stack_[0]);
807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystate = yyn;
809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yynewstate;
810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Accept.  */
812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyacceptlab:
813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyresult = 0;
814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyreturn;
815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Abort.  */
817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyabortlab:
818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyresult = 1;
819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyreturn;
820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyreturn:
82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yychar != yyempty_)
82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {
82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        /* Make sure we have latest lookahead translation.  See comments
82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang           at user semantic actions for why this is necessary.  */
82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yytoken = yytranslate_ (yychar);
82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     &yylloc);
82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      }
830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Do not reclaim the symbols of the rule which action triggered
832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       this YYABORT or YYACCEPT.  */
833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yypop_ (yylen);
83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    while (1 < yystate_stack_.height ())
835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yydestruct_ ("Cleanup: popping",
83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     yystos_[yystate_stack_[0]],
83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     &yysemantic_stack_[0],
83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     &yylocation_stack_[0]);
84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yypop_ ();
841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yyresult;
84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    catch (...)
84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {
84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 << std::endl;
84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        // Do not try to display the values of the reclaimed symbols,
85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        // as their printer might throw an exception.
85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yychar != yyempty_)
85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* Make sure we have latest lookahead translation.  See
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang               comments at user semantic actions for why this is
85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang               necessary.  */
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yytoken = yytranslate_ (yychar);
85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc);
85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        while (1 < yystate_stack_.height ())
86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yydestruct_ (YY_NULL,
86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         yystos_[yystate_stack_[0]],
86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         &yysemantic_stack_[0],
86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         &yylocation_stack_[0]);
86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yypop_ ();
86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        throw;
86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      }
870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  // Generate an error message.
873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  std::string
87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_parser_class_name[::yysyntax_error_ (]dnl
87505436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_error_verbose_if([int yystate, int yytoken],
87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    [int, int])[)
87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {]b4_error_verbose_if([[
87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    std::string yyres;
87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Number of reported tokens (one for the "unexpected", one per
88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // "expected").
88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    size_t yycount = 0;
88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Its maximum.
88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Arguments of yyformat.
88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* There are many possibilities here to consider:
88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       - If this state is a consistent state with a default action, then
88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang         the only way this function was invoked is if the default action
89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang         is an error action.  In that case, don't check for expected
89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang         tokens because there are none.
89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       - The only way there can be no lookahead present (in yytoken) is
89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang         if this state is a consistent state with a default action.
89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang         Thus, detecting the absence of a lookahead is sufficient to
89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang         determine that there is no unexpected or expected token to
89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         report.  In that case, just report a simple "syntax error".
89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       - Don't assume there isn't a lookahead just because this state is
89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         a consistent state with a default action.  There might have
89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang         been a previous inconsistent state, consistent state with a
90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang         non-default action, or user semantic action that manipulated
90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang         yychar.
90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       - Of course, the expected token list depends on states to have
90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang         correct lookahead information, and it depends on the parser not
90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang         to perform extra reductions after fetching a lookahead from the
90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang         scanner and before detecting a syntax error.  Thus, state
90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         merging (from LALR or IELR) and default reductions corrupt the
90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         expected token list.  However, the list is correct for
90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         canonical LR with one exception: it will still contain any
90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang         token that will not be accepted due to an error action in a
91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang         later state.
91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    */
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yytoken != yyempty_)
913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyarg[yycount++] = yytname_[yytoken];
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        int yyn = yypact_[yystate];
91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (!yy_pact_value_is_default_ (yyn))
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* Start YYX at -YYN if negative to avoid negative indexes in
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang               YYCHECK.  In other words, skip the first -YYN actions for
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang               this state because they are default actions.  */
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            int yyxbegin = yyn < 0 ? -yyn : 0;
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* Stay within bounds of both yycheck and yytname.  */
92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            int yychecklim = yylast_ - yyn + 1;
92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    {
93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                      yycount = 1;
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                      break;
93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    }
93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  else
93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yyarg[yycount++] = yytname_[yyx];
93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    char const* yyformat = YY_NULL;
94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    switch (yycount)
94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      {
94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYCASE_(N, S)                         \
94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        case N:                               \
94505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyformat = S;                       \
94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        break
94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(0, YY_("syntax error"));
94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(1, YY_("syntax error, unexpected %s"));
94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef YYCASE_
95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      }
95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    // Argument number.
95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    size_t yyi = 0;
95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    for (char const* yyp = yyformat; *yyp; ++yyp)
95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyres += yytnamerr_ (yyarg[yyi++]);
96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          ++yyp;
96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      else
96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyres += *yyp;
96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return yyres;]], [[
96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return YY_("syntax error");]])[
968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     STATE-NUM.  */
973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_pact])[
975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yypact_[] =
976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_pact[
978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
979cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     YYTABLE doesn't specify something else to do.  Zero means the
98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     default is an error.  */
983cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_defact])[
984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yydefact_[] =
985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_defact[
987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
988cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYPGOTO[NTERM-NUM].  */
990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_pgoto])[
991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yypgoto_[] =
992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_pgoto[
994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYDEFGOTO[NTERM-NUM].  */
997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_defgoto])[
998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yydefgoto_[] =
999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_defgoto[
1001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
1004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     positive, shift that token.  If negative, reduce the rule which
100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
1006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_table])[
1008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yytable_[] =
1009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_table[
1011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYCHECK.  */
1014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_check])[
1015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yycheck_[] =
1016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_check[
1018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
1021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     symbol of state STATE-NUM.  */
1022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_stos])[
1023cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yystos_[] =
1024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_stos[
1026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
1029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
1030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     to YYLEX-NUM.  */
1031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_toknum])[
1032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yytoken_number_[] =
1033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_toknum[
1035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
1037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_r1])[
1040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yyr1_[] =
1041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_r1[
1043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1045cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
1046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_r2])[
1047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yyr2_[] =
1048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_r2[
1050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
105205436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
1053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1054cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
1055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char*
1056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_parser_class_name[::yytname_[] =
1057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_tname[
1059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
106105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
1062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
1063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_parser_class_name[::rhs_number_type
1064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yyrhs_[] =
1065cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_rhs[
1067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     YYRHS.  */
1071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_prhs])[
1072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yyprhs_[] =
1073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_prhs[
1075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1076cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
1078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_int_type_for([b4_rline])[
1079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yyrline_[] =
1080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_rline[
1082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
1083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  // Print the state stack on the debug stream.
1085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
1086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yystack_print_ ()
1087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << "Stack now";
1089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    for (state_stack_type::const_iterator i = yystate_stack_.begin ();
1090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	 i != yystate_stack_.end (); ++i)
1091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yycdebug_ << ' ' << *i;
1092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << std::endl;
1093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
1094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  // Report on the debug stream that the rule \a yyrule is going to be reduced.
1096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
1097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
1098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    unsigned int yylno = yyrline_[yyrule];
1100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    int yynrhs = yyr2_[yyrule];
1101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Print the symbols being reduced, and their result.  */
1102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
110305436638acc7c010349a69c3395f1a57c642dc62Ying Wang	       << " (line " << yylno << "):" << std::endl;
1104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* The symbols being reduced.  */
1105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    for (int yyi = 0; yyi < yynrhs; yyi++)
1106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
1107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		       yyrhs_[yyprhs_[yyrule] + yyi],
1108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		       &]b4_rhs_value(yynrhs, yyi + 1)[,
1109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		       &]b4_rhs_location(yynrhs, yyi + 1)[);
1110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
111105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif // ]b4_api_PREFIX[DEBUG
1112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
1114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::token_number_type
1115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yytranslate_ (int t)
1116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
1117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    static
1118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    const token_number_type
1119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    translate_table[] =
1120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ]b4_translate[
1122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    };
1123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    if ((unsigned int) t <= yyuser_token_number_max_)
1124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return translate_table[t];
1125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    else
1126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return yyundef_token_;
1127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
1128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyeof_ = 0;
1130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yylast_ = ]b4_last[;
1131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yynnts_ = ]b4_nterms_number[;
1132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyempty_ = -2;
1133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyfinal_ = ]b4_final_state_number[;
1134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyterror_ = 1;
1135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyerrcode_ = 256;
1136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const int ]b4_parser_class_name[::yyntokens_ = ]b4_tokens_number[;
1137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const unsigned int ]b4_parser_class_name[::yyuser_token_number_max_ = ]b4_user_token_number_max[;
1139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const ]b4_parser_class_name[::token_number_type ]b4_parser_class_name[::yyundef_token_ = ]b4_undef_token_number[;
1140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
114105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_namespace_close[
114205436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_epilogue[]dnl
114305436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_end()
1144