xref: /aosp_15_r20/prebuilts/build-tools/common/bison/skeletons/lalr1.cc (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker # C++ skeleton for Bison
2*cda5da8dSAndroid Build Coastguard Worker 
3*cda5da8dSAndroid Build Coastguard Worker # Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
4*cda5da8dSAndroid Build Coastguard Worker 
5*cda5da8dSAndroid Build Coastguard Worker # This program is free software: you can redistribute it and/or modify
6*cda5da8dSAndroid Build Coastguard Worker # it under the terms of the GNU General Public License as published by
7*cda5da8dSAndroid Build Coastguard Worker # the Free Software Foundation, either version 3 of the License, or
8*cda5da8dSAndroid Build Coastguard Worker # (at your option) any later version.
9*cda5da8dSAndroid Build Coastguard Worker #
10*cda5da8dSAndroid Build Coastguard Worker # This program is distributed in the hope that it will be useful,
11*cda5da8dSAndroid Build Coastguard Worker # but WITHOUT ANY WARRANTY; without even the implied warranty of
12*cda5da8dSAndroid Build Coastguard Worker # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*cda5da8dSAndroid Build Coastguard Worker # GNU General Public License for more details.
14*cda5da8dSAndroid Build Coastguard Worker #
15*cda5da8dSAndroid Build Coastguard Worker # You should have received a copy of the GNU General Public License
16*cda5da8dSAndroid Build Coastguard Worker # along with this program.  If not, see <https://www.gnu.org/licenses/>.
17*cda5da8dSAndroid Build Coastguard Worker 
18*cda5da8dSAndroid Build Coastguard Worker m4_include(b4_skeletonsdir/[c++.m4])
19*cda5da8dSAndroid Build Coastguard Worker 
20*cda5da8dSAndroid Build Coastguard Worker # api.value.type=variant is valid.
21*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_value_type_setup_variant])
22*cda5da8dSAndroid Build Coastguard Worker 
23*cda5da8dSAndroid Build Coastguard Worker # parse.lac
24*cda5da8dSAndroid Build Coastguard Worker b4_percent_define_default([[parse.lac]], [[none]])
25*cda5da8dSAndroid Build Coastguard Worker b4_percent_define_check_values([[[[parse.lac]], [[full]], [[none]]]])
26*cda5da8dSAndroid Build Coastguard Worker b4_define_flag_if([lac])
27*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_lac_flag],
28*cda5da8dSAndroid Build Coastguard Worker           [m4_if(b4_percent_define_get([[parse.lac]]),
29*cda5da8dSAndroid Build Coastguard Worker                  [none], [[0]], [[1]])])
30*cda5da8dSAndroid Build Coastguard Worker 
31*cda5da8dSAndroid Build Coastguard Worker 
32*cda5da8dSAndroid Build Coastguard Worker # b4_tname_if(TNAME-NEEDED, TNAME-NOT-NEEDED)
33*cda5da8dSAndroid Build Coastguard Worker # -------------------------------------------
34*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_tname_if],
35*cda5da8dSAndroid Build Coastguard Worker [m4_case(b4_percent_define_get([[parse.error]]),
36*cda5da8dSAndroid Build Coastguard Worker          [verbose],         [$1],
37*cda5da8dSAndroid Build Coastguard Worker          [b4_token_table_if([$1],
38*cda5da8dSAndroid Build Coastguard Worker                             [$2])])])
39*cda5da8dSAndroid Build Coastguard Worker 
40*cda5da8dSAndroid Build Coastguard Worker 
41*cda5da8dSAndroid Build Coastguard Worker # b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
42*cda5da8dSAndroid Build Coastguard Worker # --------------------------------------------------------------
43*cda5da8dSAndroid Build Coastguard Worker # Declare "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
44*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_integral_parser_table_declare],
45*cda5da8dSAndroid Build Coastguard Worker [m4_ifval([$3], [b4_comment([$3], [    ])
46*cda5da8dSAndroid Build Coastguard Worker ])dnl
47*cda5da8dSAndroid Build Coastguard Worker     static const b4_int_type_for([$2]) yy$1_[[]];dnl
48*cda5da8dSAndroid Build Coastguard Worker ])
49*cda5da8dSAndroid Build Coastguard Worker 
50*cda5da8dSAndroid Build Coastguard Worker # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
51*cda5da8dSAndroid Build Coastguard Worker # -------------------------------------------------------------
52*cda5da8dSAndroid Build Coastguard Worker # Define "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
53*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_integral_parser_table_define],
54*cda5da8dSAndroid Build Coastguard Worker [  const b4_int_type_for([$2])
55*cda5da8dSAndroid Build Coastguard Worker   b4_parser_class::yy$1_[[]] =
56*cda5da8dSAndroid Build Coastguard Worker   {
57*cda5da8dSAndroid Build Coastguard Worker   $2
58*cda5da8dSAndroid Build Coastguard Worker   };dnl
59*cda5da8dSAndroid Build Coastguard Worker ])
60*cda5da8dSAndroid Build Coastguard Worker 
61*cda5da8dSAndroid Build Coastguard Worker 
62*cda5da8dSAndroid Build Coastguard Worker # b4_symbol_kind(NUM)
63*cda5da8dSAndroid Build Coastguard Worker # -------------------
64*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_symbol_kind],
65*cda5da8dSAndroid Build Coastguard Worker [symbol_kind::b4_symbol_kind_base($@)])
66*cda5da8dSAndroid Build Coastguard Worker 
67*cda5da8dSAndroid Build Coastguard Worker 
68*cda5da8dSAndroid Build Coastguard Worker # b4_symbol_value_template(VAL, SYMBOL-NUM, [TYPE])
69*cda5da8dSAndroid Build Coastguard Worker # -------------------------------------------------
70*cda5da8dSAndroid Build Coastguard Worker # Same as b4_symbol_value, but used in a template method.  It makes
71*cda5da8dSAndroid Build Coastguard Worker # a difference when using variants.  Note that b4_value_type_setup_union
72*cda5da8dSAndroid Build Coastguard Worker # overrides b4_symbol_value, so we must override it again.
73*cda5da8dSAndroid Build Coastguard Worker m4_copy([b4_symbol_value], [b4_symbol_value_template])
74*cda5da8dSAndroid Build Coastguard Worker m4_append([b4_value_type_setup_union],
75*cda5da8dSAndroid Build Coastguard Worker [m4_copy_force([b4_symbol_value_union], [b4_symbol_value_template])])
76*cda5da8dSAndroid Build Coastguard Worker 
77*cda5da8dSAndroid Build Coastguard Worker # b4_lhs_value(SYMBOL-NUM, [TYPE])
78*cda5da8dSAndroid Build Coastguard Worker # --------------------------------
79*cda5da8dSAndroid Build Coastguard Worker # See README.
80*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_lhs_value],
81*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_value([yylhs.value], [$1], [$2])])
82*cda5da8dSAndroid Build Coastguard Worker 
83*cda5da8dSAndroid Build Coastguard Worker 
84*cda5da8dSAndroid Build Coastguard Worker # b4_lhs_location()
85*cda5da8dSAndroid Build Coastguard Worker # -----------------
86*cda5da8dSAndroid Build Coastguard Worker # Expansion of @$.
87*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_lhs_location],
88*cda5da8dSAndroid Build Coastguard Worker [yylhs.location])
89*cda5da8dSAndroid Build Coastguard Worker 
90*cda5da8dSAndroid Build Coastguard Worker 
91*cda5da8dSAndroid Build Coastguard Worker # b4_rhs_data(RULE-LENGTH, POS)
92*cda5da8dSAndroid Build Coastguard Worker # -----------------------------
93*cda5da8dSAndroid Build Coastguard Worker # See README.
94*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_rhs_data],
95*cda5da8dSAndroid Build Coastguard Worker [yystack_@{b4_subtract($@)@}])
96*cda5da8dSAndroid Build Coastguard Worker 
97*cda5da8dSAndroid Build Coastguard Worker 
98*cda5da8dSAndroid Build Coastguard Worker # b4_rhs_state(RULE-LENGTH, POS)
99*cda5da8dSAndroid Build Coastguard Worker # ------------------------------
100*cda5da8dSAndroid Build Coastguard Worker # The state corresponding to the symbol #POS, where the current
101*cda5da8dSAndroid Build Coastguard Worker # rule has RULE-LENGTH symbols on RHS.
102*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_rhs_state],
103*cda5da8dSAndroid Build Coastguard Worker [b4_rhs_data([$1], [$2]).state])
104*cda5da8dSAndroid Build Coastguard Worker 
105*cda5da8dSAndroid Build Coastguard Worker 
106*cda5da8dSAndroid Build Coastguard Worker # b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
107*cda5da8dSAndroid Build Coastguard Worker # --------------------------------------------------
108*cda5da8dSAndroid Build Coastguard Worker # See README.
109*cda5da8dSAndroid Build Coastguard Worker m4_define([_b4_rhs_value],
110*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3], [$4])])
111*cda5da8dSAndroid Build Coastguard Worker 
112*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_rhs_value],
113*cda5da8dSAndroid Build Coastguard Worker [b4_percent_define_ifdef([api.value.automove],
114*cda5da8dSAndroid Build Coastguard Worker                          [YY_MOVE (_b4_rhs_value($@))],
115*cda5da8dSAndroid Build Coastguard Worker                          [_b4_rhs_value($@)])])
116*cda5da8dSAndroid Build Coastguard Worker 
117*cda5da8dSAndroid Build Coastguard Worker 
118*cda5da8dSAndroid Build Coastguard Worker # b4_rhs_location(RULE-LENGTH, POS)
119*cda5da8dSAndroid Build Coastguard Worker # ---------------------------------
120*cda5da8dSAndroid Build Coastguard Worker # Expansion of @POS, where the current rule has RULE-LENGTH symbols
121*cda5da8dSAndroid Build Coastguard Worker # on RHS.
122*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_rhs_location],
123*cda5da8dSAndroid Build Coastguard Worker [b4_rhs_data([$1], [$2]).location])
124*cda5da8dSAndroid Build Coastguard Worker 
125*cda5da8dSAndroid Build Coastguard Worker 
126*cda5da8dSAndroid Build Coastguard Worker # b4_symbol_action(SYMBOL-NUM, KIND)
127*cda5da8dSAndroid Build Coastguard Worker # ----------------------------------
128*cda5da8dSAndroid Build Coastguard Worker # Run the action KIND (destructor or printer) for SYMBOL-NUM.
129*cda5da8dSAndroid Build Coastguard Worker # Same as in C, but using references instead of pointers.
130*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_symbol_action],
131*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_if([$1], [has_$2],
132*cda5da8dSAndroid Build Coastguard Worker [m4_pushdef([b4_symbol_value], m4_defn([b4_symbol_value_template]))[]dnl
133*cda5da8dSAndroid Build Coastguard Worker b4_dollar_pushdef([yysym.value],
134*cda5da8dSAndroid Build Coastguard Worker                   [$1],
135*cda5da8dSAndroid Build Coastguard Worker                   [],
136*cda5da8dSAndroid Build Coastguard Worker                   [yysym.location])dnl
137*cda5da8dSAndroid Build Coastguard Worker       _b4_symbol_case([$1])[]dnl
138*cda5da8dSAndroid Build Coastguard Worker b4_syncline([b4_symbol([$1], [$2_line])], [b4_symbol([$1], [$2_file])])dnl
139*cda5da8dSAndroid Build Coastguard Worker         b4_symbol([$1], [$2])
140*cda5da8dSAndroid Build Coastguard Worker b4_syncline([@oline@], [@ofile@])dnl
141*cda5da8dSAndroid Build Coastguard Worker         break;
142*cda5da8dSAndroid Build Coastguard Worker 
143*cda5da8dSAndroid Build Coastguard Worker m4_popdef([b4_symbol_value])[]dnl
144*cda5da8dSAndroid Build Coastguard Worker b4_dollar_popdef[]dnl
145*cda5da8dSAndroid Build Coastguard Worker ])])
146*cda5da8dSAndroid Build Coastguard Worker 
147*cda5da8dSAndroid Build Coastguard Worker 
148*cda5da8dSAndroid Build Coastguard Worker # b4_yylex
149*cda5da8dSAndroid Build Coastguard Worker # --------
150*cda5da8dSAndroid Build Coastguard Worker # Call yylex.
151*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_yylex],
152*cda5da8dSAndroid Build Coastguard Worker [b4_token_ctor_if(
153*cda5da8dSAndroid Build Coastguard Worker [b4_function_call([yylex],
154*cda5da8dSAndroid Build Coastguard Worker                   [symbol_type], m4_ifdef([b4_lex_param], b4_lex_param))],
155*cda5da8dSAndroid Build Coastguard Worker [b4_function_call([yylex], [int],
156*cda5da8dSAndroid Build Coastguard Worker                   [[value_type *], [&yyla.value]][]dnl
157*cda5da8dSAndroid Build Coastguard Worker b4_locations_if([, [[location_type *], [&yyla.location]]])dnl
158*cda5da8dSAndroid Build Coastguard Worker m4_ifdef([b4_lex_param], [, ]b4_lex_param))])])
159*cda5da8dSAndroid Build Coastguard Worker 
160*cda5da8dSAndroid Build Coastguard Worker 
161*cda5da8dSAndroid Build Coastguard Worker m4_pushdef([b4_copyright_years],
162*cda5da8dSAndroid Build Coastguard Worker            [2002-2015, 2018-2021])
163*cda5da8dSAndroid Build Coastguard Worker 
164*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_parser_class],
165*cda5da8dSAndroid Build Coastguard Worker           [b4_percent_define_get([[api.parser.class]])])
166*cda5da8dSAndroid Build Coastguard Worker 
167*cda5da8dSAndroid Build Coastguard Worker b4_bison_locations_if([# Backward compatibility.
168*cda5da8dSAndroid Build Coastguard Worker    m4_define([b4_location_constructors])
169*cda5da8dSAndroid Build Coastguard Worker    m4_include(b4_skeletonsdir/[location.cc])])
170*cda5da8dSAndroid Build Coastguard Worker m4_include(b4_skeletonsdir/[stack.hh])
171*cda5da8dSAndroid Build Coastguard Worker b4_variant_if([m4_include(b4_skeletonsdir/[variant.hh])])
172*cda5da8dSAndroid Build Coastguard Worker 
173*cda5da8dSAndroid Build Coastguard Worker 
174*cda5da8dSAndroid Build Coastguard Worker # b4_shared_declarations(hh|cc)
175*cda5da8dSAndroid Build Coastguard Worker # -----------------------------
176*cda5da8dSAndroid Build Coastguard Worker # Declaration that might either go into the header (if --header, $1 = hh)
177*cda5da8dSAndroid Build Coastguard Worker # or in the implementation file.
178*cda5da8dSAndroid Build Coastguard Worker m4_define([b4_shared_declarations],
179*cda5da8dSAndroid Build Coastguard Worker [b4_percent_code_get([[requires]])[
180*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_assert_if([# include <cassert>])[
181*cda5da8dSAndroid Build Coastguard Worker # include <cstdlib> // std::abort
182*cda5da8dSAndroid Build Coastguard Worker # include <iostream>
183*cda5da8dSAndroid Build Coastguard Worker # include <stdexcept>
184*cda5da8dSAndroid Build Coastguard Worker # include <string>
185*cda5da8dSAndroid Build Coastguard Worker # include <vector>
186*cda5da8dSAndroid Build Coastguard Worker 
187*cda5da8dSAndroid Build Coastguard Worker ]b4_cxx_portability[
188*cda5da8dSAndroid Build Coastguard Worker ]m4_ifdef([b4_location_include],
189*cda5da8dSAndroid Build Coastguard Worker           [[# include ]b4_location_include])[
190*cda5da8dSAndroid Build Coastguard Worker ]b4_variant_if([b4_variant_includes])[
191*cda5da8dSAndroid Build Coastguard Worker 
192*cda5da8dSAndroid Build Coastguard Worker ]b4_attribute_define[
193*cda5da8dSAndroid Build Coastguard Worker ]b4_cast_define[
194*cda5da8dSAndroid Build Coastguard Worker ]b4_null_define[
195*cda5da8dSAndroid Build Coastguard Worker 
196*cda5da8dSAndroid Build Coastguard Worker ]b4_YYDEBUG_define[
197*cda5da8dSAndroid Build Coastguard Worker 
198*cda5da8dSAndroid Build Coastguard Worker ]b4_namespace_open[
199*cda5da8dSAndroid Build Coastguard Worker 
200*cda5da8dSAndroid Build Coastguard Worker ]b4_bison_locations_if([m4_ifndef([b4_location_file],
201*cda5da8dSAndroid Build Coastguard Worker                                   [b4_location_define])])[
202*cda5da8dSAndroid Build Coastguard Worker 
203*cda5da8dSAndroid Build Coastguard Worker   /// A Bison parser.
204*cda5da8dSAndroid Build Coastguard Worker   class ]b4_parser_class[
205*cda5da8dSAndroid Build Coastguard Worker   {
206*cda5da8dSAndroid Build Coastguard Worker   public:
207*cda5da8dSAndroid Build Coastguard Worker ]b4_public_types_declare[
208*cda5da8dSAndroid Build Coastguard Worker ]b4_symbol_type_define[
209*cda5da8dSAndroid Build Coastguard Worker     /// Build a parser object.
210*cda5da8dSAndroid Build Coastguard Worker     ]b4_parser_class[ (]b4_parse_param_decl[);
211*cda5da8dSAndroid Build Coastguard Worker     virtual ~]b4_parser_class[ ();
212*cda5da8dSAndroid Build Coastguard Worker 
213*cda5da8dSAndroid Build Coastguard Worker #if 201103L <= YY_CPLUSPLUS
214*cda5da8dSAndroid Build Coastguard Worker     /// Non copyable.
215*cda5da8dSAndroid Build Coastguard Worker     ]b4_parser_class[ (const ]b4_parser_class[&) = delete;
216*cda5da8dSAndroid Build Coastguard Worker     /// Non copyable.
217*cda5da8dSAndroid Build Coastguard Worker     ]b4_parser_class[& operator= (const ]b4_parser_class[&) = delete;
218*cda5da8dSAndroid Build Coastguard Worker #endif
219*cda5da8dSAndroid Build Coastguard Worker 
220*cda5da8dSAndroid Build Coastguard Worker     /// Parse.  An alias for parse ().
221*cda5da8dSAndroid Build Coastguard Worker     /// \returns  0 iff parsing succeeded.
222*cda5da8dSAndroid Build Coastguard Worker     int operator() ();
223*cda5da8dSAndroid Build Coastguard Worker 
224*cda5da8dSAndroid Build Coastguard Worker     /// Parse.
225*cda5da8dSAndroid Build Coastguard Worker     /// \returns  0 iff parsing succeeded.
226*cda5da8dSAndroid Build Coastguard Worker     virtual int parse ();
227*cda5da8dSAndroid Build Coastguard Worker 
228*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
229*cda5da8dSAndroid Build Coastguard Worker     /// The current debugging stream.
230*cda5da8dSAndroid Build Coastguard Worker     std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
231*cda5da8dSAndroid Build Coastguard Worker     /// Set the current debugging stream.
232*cda5da8dSAndroid Build Coastguard Worker     void set_debug_stream (std::ostream &);
233*cda5da8dSAndroid Build Coastguard Worker 
234*cda5da8dSAndroid Build Coastguard Worker     /// Type for debugging levels.
235*cda5da8dSAndroid Build Coastguard Worker     typedef int debug_level_type;
236*cda5da8dSAndroid Build Coastguard Worker     /// The current debugging level.
237*cda5da8dSAndroid Build Coastguard Worker     debug_level_type debug_level () const YY_ATTRIBUTE_PURE;
238*cda5da8dSAndroid Build Coastguard Worker     /// Set the current debugging level.
239*cda5da8dSAndroid Build Coastguard Worker     void set_debug_level (debug_level_type l);
240*cda5da8dSAndroid Build Coastguard Worker #endif
241*cda5da8dSAndroid Build Coastguard Worker 
242*cda5da8dSAndroid Build Coastguard Worker     /// Report a syntax error.]b4_locations_if([[
243*cda5da8dSAndroid Build Coastguard Worker     /// \param loc    where the syntax error is found.]])[
244*cda5da8dSAndroid Build Coastguard Worker     /// \param msg    a description of the syntax error.
245*cda5da8dSAndroid Build Coastguard Worker     virtual void error (]b4_locations_if([[const location_type& loc, ]])[const std::string& msg);
246*cda5da8dSAndroid Build Coastguard Worker 
247*cda5da8dSAndroid Build Coastguard Worker     /// Report a syntax error.
248*cda5da8dSAndroid Build Coastguard Worker     void error (const syntax_error& err);
249*cda5da8dSAndroid Build Coastguard Worker 
250*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch(
251*cda5da8dSAndroid Build Coastguard Worker [custom\|detailed],
252*cda5da8dSAndroid Build Coastguard Worker [[    /// The user-facing name of the symbol whose (internal) number is
253*cda5da8dSAndroid Build Coastguard Worker     /// YYSYMBOL.  No bounds checking.
254*cda5da8dSAndroid Build Coastguard Worker     static const char *symbol_name (symbol_kind_type yysymbol);]],
255*cda5da8dSAndroid Build Coastguard Worker [simple],
256*cda5da8dSAndroid Build Coastguard Worker [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
257*cda5da8dSAndroid Build Coastguard Worker     /// The user-facing name of the symbol whose (internal) number is
258*cda5da8dSAndroid Build Coastguard Worker     /// YYSYMBOL.  No bounds checking.
259*cda5da8dSAndroid Build Coastguard Worker     static const char *symbol_name (symbol_kind_type yysymbol);
260*cda5da8dSAndroid Build Coastguard Worker #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
261*cda5da8dSAndroid Build Coastguard Worker ]],
262*cda5da8dSAndroid Build Coastguard Worker [verbose],
263*cda5da8dSAndroid Build Coastguard Worker [[    /// The user-facing name of the symbol whose (internal) number is
264*cda5da8dSAndroid Build Coastguard Worker     /// YYSYMBOL.  No bounds checking.
265*cda5da8dSAndroid Build Coastguard Worker     static std::string symbol_name (symbol_kind_type yysymbol);]])[
266*cda5da8dSAndroid Build Coastguard Worker 
267*cda5da8dSAndroid Build Coastguard Worker ]b4_token_constructor_define[
268*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch([custom\|detailed\|verbose], [[
269*cda5da8dSAndroid Build Coastguard Worker     class context
270*cda5da8dSAndroid Build Coastguard Worker     {
271*cda5da8dSAndroid Build Coastguard Worker     public:
272*cda5da8dSAndroid Build Coastguard Worker       context (const ]b4_parser_class[& yyparser, const symbol_type& yyla);
273*cda5da8dSAndroid Build Coastguard Worker       const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; }
274*cda5da8dSAndroid Build Coastguard Worker       symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); }]b4_locations_if([[
275*cda5da8dSAndroid Build Coastguard Worker       const location_type& location () const YY_NOEXCEPT { return yyla_.location; }
276*cda5da8dSAndroid Build Coastguard Worker ]])[
277*cda5da8dSAndroid Build Coastguard Worker       /// Put in YYARG at most YYARGN of the expected tokens, and return the
278*cda5da8dSAndroid Build Coastguard Worker       /// number of tokens stored in YYARG.  If YYARG is null, return the
279*cda5da8dSAndroid Build Coastguard Worker       /// number of expected tokens (guaranteed to be less than YYNTOKENS).
280*cda5da8dSAndroid Build Coastguard Worker       int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
281*cda5da8dSAndroid Build Coastguard Worker 
282*cda5da8dSAndroid Build Coastguard Worker     private:
283*cda5da8dSAndroid Build Coastguard Worker       const ]b4_parser_class[& yyparser_;
284*cda5da8dSAndroid Build Coastguard Worker       const symbol_type& yyla_;
285*cda5da8dSAndroid Build Coastguard Worker     };
286*cda5da8dSAndroid Build Coastguard Worker ]])[
287*cda5da8dSAndroid Build Coastguard Worker   private:
288*cda5da8dSAndroid Build Coastguard Worker #if YY_CPLUSPLUS < 201103L
289*cda5da8dSAndroid Build Coastguard Worker     /// Non copyable.
290*cda5da8dSAndroid Build Coastguard Worker     ]b4_parser_class[ (const ]b4_parser_class[&);
291*cda5da8dSAndroid Build Coastguard Worker     /// Non copyable.
292*cda5da8dSAndroid Build Coastguard Worker     ]b4_parser_class[& operator= (const ]b4_parser_class[&);
293*cda5da8dSAndroid Build Coastguard Worker #endif
294*cda5da8dSAndroid Build Coastguard Worker ]b4_lac_if([[
295*cda5da8dSAndroid Build Coastguard Worker     /// Check the lookahead yytoken.
296*cda5da8dSAndroid Build Coastguard Worker     /// \returns  true iff the token will be eventually shifted.
297*cda5da8dSAndroid Build Coastguard Worker     bool yy_lac_check_ (symbol_kind_type yytoken) const;
298*cda5da8dSAndroid Build Coastguard Worker     /// Establish the initial context if no initial context currently exists.
299*cda5da8dSAndroid Build Coastguard Worker     /// \returns  true iff the token will be eventually shifted.
300*cda5da8dSAndroid Build Coastguard Worker     bool yy_lac_establish_ (symbol_kind_type yytoken);
301*cda5da8dSAndroid Build Coastguard Worker     /// Discard any previous initial lookahead context because of event.
302*cda5da8dSAndroid Build Coastguard Worker     /// \param event  the event which caused the lookahead to be discarded.
303*cda5da8dSAndroid Build Coastguard Worker     ///               Only used for debbuging output.
304*cda5da8dSAndroid Build Coastguard Worker     void yy_lac_discard_ (const char* event);]])[
305*cda5da8dSAndroid Build Coastguard Worker 
306*cda5da8dSAndroid Build Coastguard Worker     /// Stored state numbers (used for stacks).
307*cda5da8dSAndroid Build Coastguard Worker     typedef ]b4_int_type(0, m4_eval(b4_states_number - 1))[ state_type;
308*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch(
309*cda5da8dSAndroid Build Coastguard Worker [custom], [[
310*cda5da8dSAndroid Build Coastguard Worker     /// Report a syntax error
311*cda5da8dSAndroid Build Coastguard Worker     /// \param yyctx     the context in which the error occurred.
312*cda5da8dSAndroid Build Coastguard Worker     void report_syntax_error (const context& yyctx) const;]],
313*cda5da8dSAndroid Build Coastguard Worker [detailed\|verbose], [[
314*cda5da8dSAndroid Build Coastguard Worker     /// The arguments of the error message.
315*cda5da8dSAndroid Build Coastguard Worker     int yy_syntax_error_arguments_ (const context& yyctx,
316*cda5da8dSAndroid Build Coastguard Worker                                     symbol_kind_type yyarg[], int yyargn) const;
317*cda5da8dSAndroid Build Coastguard Worker 
318*cda5da8dSAndroid Build Coastguard Worker     /// Generate an error message.
319*cda5da8dSAndroid Build Coastguard Worker     /// \param yyctx     the context in which the error occurred.
320*cda5da8dSAndroid Build Coastguard Worker     virtual std::string yysyntax_error_ (const context& yyctx) const;]])[
321*cda5da8dSAndroid Build Coastguard Worker     /// Compute post-reduction state.
322*cda5da8dSAndroid Build Coastguard Worker     /// \param yystate   the current state
323*cda5da8dSAndroid Build Coastguard Worker     /// \param yysym     the nonterminal to push on the stack
324*cda5da8dSAndroid Build Coastguard Worker     static state_type yy_lr_goto_state_ (state_type yystate, int yysym);
325*cda5da8dSAndroid Build Coastguard Worker 
326*cda5da8dSAndroid Build Coastguard Worker     /// Whether the given \c yypact_ value indicates a defaulted state.
327*cda5da8dSAndroid Build Coastguard Worker     /// \param yyvalue   the value to check
328*cda5da8dSAndroid Build Coastguard Worker     static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
329*cda5da8dSAndroid Build Coastguard Worker 
330*cda5da8dSAndroid Build Coastguard Worker     /// Whether the given \c yytable_ value indicates a syntax error.
331*cda5da8dSAndroid Build Coastguard Worker     /// \param yyvalue   the value to check
332*cda5da8dSAndroid Build Coastguard Worker     static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
333*cda5da8dSAndroid Build Coastguard Worker 
334*cda5da8dSAndroid Build Coastguard Worker     static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
335*cda5da8dSAndroid Build Coastguard Worker     static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
336*cda5da8dSAndroid Build Coastguard Worker 
337*cda5da8dSAndroid Build Coastguard Worker     /// Convert a scanner token kind \a t to a symbol kind.
338*cda5da8dSAndroid Build Coastguard Worker     /// In theory \a t should be a token_kind_type, but character literals
339*cda5da8dSAndroid Build Coastguard Worker     /// are valid, yet not members of the token_kind_type enum.
340*cda5da8dSAndroid Build Coastguard Worker     static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
341*cda5da8dSAndroid Build Coastguard Worker 
342*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch(
343*cda5da8dSAndroid Build Coastguard Worker [simple],
344*cda5da8dSAndroid Build Coastguard Worker [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
345*cda5da8dSAndroid Build Coastguard Worker     /// For a symbol, its name in clear.
346*cda5da8dSAndroid Build Coastguard Worker     static const char* const yytname_[];
347*cda5da8dSAndroid Build Coastguard Worker #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
348*cda5da8dSAndroid Build Coastguard Worker ]],
349*cda5da8dSAndroid Build Coastguard Worker [verbose],
350*cda5da8dSAndroid Build Coastguard Worker [[    /// Convert the symbol name \a n to a form suitable for a diagnostic.
351*cda5da8dSAndroid Build Coastguard Worker     static std::string yytnamerr_ (const char *yystr);
352*cda5da8dSAndroid Build Coastguard Worker 
353*cda5da8dSAndroid Build Coastguard Worker     /// For a symbol, its name in clear.
354*cda5da8dSAndroid Build Coastguard Worker     static const char* const yytname_[];
355*cda5da8dSAndroid Build Coastguard Worker ]])[
356*cda5da8dSAndroid Build Coastguard Worker 
357*cda5da8dSAndroid Build Coastguard Worker     // Tables.
358*cda5da8dSAndroid Build Coastguard Worker ]b4_parser_tables_declare[
359*cda5da8dSAndroid Build Coastguard Worker 
360*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
361*cda5da8dSAndroid Build Coastguard Worker ]b4_integral_parser_table_declare([rline], [b4_rline],
362*cda5da8dSAndroid Build Coastguard Worker      [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
363*cda5da8dSAndroid Build Coastguard Worker     /// Report on the debug stream that the rule \a r is going to be reduced.
364*cda5da8dSAndroid Build Coastguard Worker     virtual void yy_reduce_print_ (int r) const;
365*cda5da8dSAndroid Build Coastguard Worker     /// Print the state stack on the debug stream.
366*cda5da8dSAndroid Build Coastguard Worker     virtual void yy_stack_print_ () const;
367*cda5da8dSAndroid Build Coastguard Worker 
368*cda5da8dSAndroid Build Coastguard Worker     /// Debugging level.
369*cda5da8dSAndroid Build Coastguard Worker     int yydebug_;
370*cda5da8dSAndroid Build Coastguard Worker     /// Debug stream.
371*cda5da8dSAndroid Build Coastguard Worker     std::ostream* yycdebug_;
372*cda5da8dSAndroid Build Coastguard Worker 
373*cda5da8dSAndroid Build Coastguard Worker     /// \brief Display a symbol kind, value and location.
374*cda5da8dSAndroid Build Coastguard Worker     /// \param yyo    The output stream.
375*cda5da8dSAndroid Build Coastguard Worker     /// \param yysym  The symbol.
376*cda5da8dSAndroid Build Coastguard Worker     template <typename Base>
377*cda5da8dSAndroid Build Coastguard Worker     void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
378*cda5da8dSAndroid Build Coastguard Worker #endif
379*cda5da8dSAndroid Build Coastguard Worker 
380*cda5da8dSAndroid Build Coastguard Worker     /// \brief Reclaim the memory associated to a symbol.
381*cda5da8dSAndroid Build Coastguard Worker     /// \param yymsg     Why this token is reclaimed.
382*cda5da8dSAndroid Build Coastguard Worker     ///                  If null, print nothing.
383*cda5da8dSAndroid Build Coastguard Worker     /// \param yysym     The symbol.
384*cda5da8dSAndroid Build Coastguard Worker     template <typename Base>
385*cda5da8dSAndroid Build Coastguard Worker     void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
386*cda5da8dSAndroid Build Coastguard Worker 
387*cda5da8dSAndroid Build Coastguard Worker   private:
388*cda5da8dSAndroid Build Coastguard Worker     /// Type access provider for state based symbols.
389*cda5da8dSAndroid Build Coastguard Worker     struct by_state
390*cda5da8dSAndroid Build Coastguard Worker     {
391*cda5da8dSAndroid Build Coastguard Worker       /// Default constructor.
392*cda5da8dSAndroid Build Coastguard Worker       by_state () YY_NOEXCEPT;
393*cda5da8dSAndroid Build Coastguard Worker 
394*cda5da8dSAndroid Build Coastguard Worker       /// The symbol kind as needed by the constructor.
395*cda5da8dSAndroid Build Coastguard Worker       typedef state_type kind_type;
396*cda5da8dSAndroid Build Coastguard Worker 
397*cda5da8dSAndroid Build Coastguard Worker       /// Constructor.
398*cda5da8dSAndroid Build Coastguard Worker       by_state (kind_type s) YY_NOEXCEPT;
399*cda5da8dSAndroid Build Coastguard Worker 
400*cda5da8dSAndroid Build Coastguard Worker       /// Copy constructor.
401*cda5da8dSAndroid Build Coastguard Worker       by_state (const by_state& that) YY_NOEXCEPT;
402*cda5da8dSAndroid Build Coastguard Worker 
403*cda5da8dSAndroid Build Coastguard Worker       /// Record that this symbol is empty.
404*cda5da8dSAndroid Build Coastguard Worker       void clear () YY_NOEXCEPT;
405*cda5da8dSAndroid Build Coastguard Worker 
406*cda5da8dSAndroid Build Coastguard Worker       /// Steal the symbol kind from \a that.
407*cda5da8dSAndroid Build Coastguard Worker       void move (by_state& that);
408*cda5da8dSAndroid Build Coastguard Worker 
409*cda5da8dSAndroid Build Coastguard Worker       /// The symbol kind (corresponding to \a state).
410*cda5da8dSAndroid Build Coastguard Worker       /// \a ]b4_symbol(empty, kind)[ when empty.
411*cda5da8dSAndroid Build Coastguard Worker       symbol_kind_type kind () const YY_NOEXCEPT;
412*cda5da8dSAndroid Build Coastguard Worker 
413*cda5da8dSAndroid Build Coastguard Worker       /// The state number used to denote an empty symbol.
414*cda5da8dSAndroid Build Coastguard Worker       /// We use the initial state, as it does not have a value.
415*cda5da8dSAndroid Build Coastguard Worker       enum { empty_state = 0 };
416*cda5da8dSAndroid Build Coastguard Worker 
417*cda5da8dSAndroid Build Coastguard Worker       /// The state.
418*cda5da8dSAndroid Build Coastguard Worker       /// \a empty when empty.
419*cda5da8dSAndroid Build Coastguard Worker       state_type state;
420*cda5da8dSAndroid Build Coastguard Worker     };
421*cda5da8dSAndroid Build Coastguard Worker 
422*cda5da8dSAndroid Build Coastguard Worker     /// "Internal" symbol: element of the stack.
423*cda5da8dSAndroid Build Coastguard Worker     struct stack_symbol_type : basic_symbol<by_state>
424*cda5da8dSAndroid Build Coastguard Worker     {
425*cda5da8dSAndroid Build Coastguard Worker       /// Superclass.
426*cda5da8dSAndroid Build Coastguard Worker       typedef basic_symbol<by_state> super_type;
427*cda5da8dSAndroid Build Coastguard Worker       /// Construct an empty symbol.
428*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type ();
429*cda5da8dSAndroid Build Coastguard Worker       /// Move or copy construction.
430*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type (YY_RVREF (stack_symbol_type) that);
431*cda5da8dSAndroid Build Coastguard Worker       /// Steal the contents from \a sym to build this.
432*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
433*cda5da8dSAndroid Build Coastguard Worker #if YY_CPLUSPLUS < 201103L
434*cda5da8dSAndroid Build Coastguard Worker       /// Assignment, needed by push_back by some old implementations.
435*cda5da8dSAndroid Build Coastguard Worker       /// Moves the contents of that.
436*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type& operator= (stack_symbol_type& that);
437*cda5da8dSAndroid Build Coastguard Worker 
438*cda5da8dSAndroid Build Coastguard Worker       /// Assignment, needed by push_back by other implementations.
439*cda5da8dSAndroid Build Coastguard Worker       /// Needed by some other old implementations.
440*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type& operator= (const stack_symbol_type& that);
441*cda5da8dSAndroid Build Coastguard Worker #endif
442*cda5da8dSAndroid Build Coastguard Worker     };
443*cda5da8dSAndroid Build Coastguard Worker 
444*cda5da8dSAndroid Build Coastguard Worker ]b4_stack_define[
445*cda5da8dSAndroid Build Coastguard Worker 
446*cda5da8dSAndroid Build Coastguard Worker     /// Stack type.
447*cda5da8dSAndroid Build Coastguard Worker     typedef stack<stack_symbol_type> stack_type;
448*cda5da8dSAndroid Build Coastguard Worker 
449*cda5da8dSAndroid Build Coastguard Worker     /// The stack.
450*cda5da8dSAndroid Build Coastguard Worker     stack_type yystack_;]b4_lac_if([[
451*cda5da8dSAndroid Build Coastguard Worker     /// The stack for LAC.
452*cda5da8dSAndroid Build Coastguard Worker     /// Logically, the yy_lac_stack's lifetime is confined to the function
453*cda5da8dSAndroid Build Coastguard Worker     /// yy_lac_check_. We just store it as a member of this class to hold
454*cda5da8dSAndroid Build Coastguard Worker     /// on to the memory and to avoid frequent reallocations.
455*cda5da8dSAndroid Build Coastguard Worker     /// Since yy_lac_check_ is const, this member must be mutable.
456*cda5da8dSAndroid Build Coastguard Worker     mutable std::vector<state_type> yylac_stack_;
457*cda5da8dSAndroid Build Coastguard Worker     /// Whether an initial LAC context was established.
458*cda5da8dSAndroid Build Coastguard Worker     bool yy_lac_established_;
459*cda5da8dSAndroid Build Coastguard Worker ]])[
460*cda5da8dSAndroid Build Coastguard Worker 
461*cda5da8dSAndroid Build Coastguard Worker     /// Push a new state on the stack.
462*cda5da8dSAndroid Build Coastguard Worker     /// \param m    a debug message to display
463*cda5da8dSAndroid Build Coastguard Worker     ///             if null, no trace is output.
464*cda5da8dSAndroid Build Coastguard Worker     /// \param sym  the symbol
465*cda5da8dSAndroid Build Coastguard Worker     /// \warning the contents of \a s.value is stolen.
466*cda5da8dSAndroid Build Coastguard Worker     void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
467*cda5da8dSAndroid Build Coastguard Worker 
468*cda5da8dSAndroid Build Coastguard Worker     /// Push a new look ahead token on the state on the stack.
469*cda5da8dSAndroid Build Coastguard Worker     /// \param m    a debug message to display
470*cda5da8dSAndroid Build Coastguard Worker     ///             if null, no trace is output.
471*cda5da8dSAndroid Build Coastguard Worker     /// \param s    the state
472*cda5da8dSAndroid Build Coastguard Worker     /// \param sym  the symbol (for its value and location).
473*cda5da8dSAndroid Build Coastguard Worker     /// \warning the contents of \a sym.value is stolen.
474*cda5da8dSAndroid Build Coastguard Worker     void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
475*cda5da8dSAndroid Build Coastguard Worker 
476*cda5da8dSAndroid Build Coastguard Worker     /// Pop \a n symbols from the stack.
477*cda5da8dSAndroid Build Coastguard Worker     void yypop_ (int n = 1) YY_NOEXCEPT;
478*cda5da8dSAndroid Build Coastguard Worker 
479*cda5da8dSAndroid Build Coastguard Worker     /// Constants.
480*cda5da8dSAndroid Build Coastguard Worker     enum
481*cda5da8dSAndroid Build Coastguard Worker     {
482*cda5da8dSAndroid Build Coastguard Worker       yylast_ = ]b4_last[,     ///< Last index in yytable_.
483*cda5da8dSAndroid Build Coastguard Worker       yynnts_ = ]b4_nterms_number[,  ///< Number of nonterminal symbols.
484*cda5da8dSAndroid Build Coastguard Worker       yyfinal_ = ]b4_final_state_number[ ///< Termination state number.
485*cda5da8dSAndroid Build Coastguard Worker     };
486*cda5da8dSAndroid Build Coastguard Worker 
487*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_param_vars[
488*cda5da8dSAndroid Build Coastguard Worker ]b4_percent_code_get([[yy_bison_internal_hook]])[
489*cda5da8dSAndroid Build Coastguard Worker   };
490*cda5da8dSAndroid Build Coastguard Worker 
491*cda5da8dSAndroid Build Coastguard Worker ]b4_token_ctor_if([b4_yytranslate_define([$1])[
492*cda5da8dSAndroid Build Coastguard Worker ]b4_public_types_define([$1])])[
493*cda5da8dSAndroid Build Coastguard Worker ]b4_namespace_close[
494*cda5da8dSAndroid Build Coastguard Worker 
495*cda5da8dSAndroid Build Coastguard Worker ]b4_percent_code_get([[provides]])[
496*cda5da8dSAndroid Build Coastguard Worker ]])[
497*cda5da8dSAndroid Build Coastguard Worker 
498*cda5da8dSAndroid Build Coastguard Worker 
499*cda5da8dSAndroid Build Coastguard Worker ## -------------- ##
500*cda5da8dSAndroid Build Coastguard Worker ## Output files.  ##
501*cda5da8dSAndroid Build Coastguard Worker ## -------------- ##
502*cda5da8dSAndroid Build Coastguard Worker 
503*cda5da8dSAndroid Build Coastguard Worker # ------------- #
504*cda5da8dSAndroid Build Coastguard Worker # Header file.  #
505*cda5da8dSAndroid Build Coastguard Worker # ------------- #
506*cda5da8dSAndroid Build Coastguard Worker 
507*cda5da8dSAndroid Build Coastguard Worker ]b4_header_if([[
508*cda5da8dSAndroid Build Coastguard Worker ]b4_output_begin([b4_spec_header_file])[
509*cda5da8dSAndroid Build Coastguard Worker ]b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])[
510*cda5da8dSAndroid Build Coastguard Worker 
511*cda5da8dSAndroid Build Coastguard Worker /**
512*cda5da8dSAndroid Build Coastguard Worker  ** \file ]b4_spec_mapped_header_file[
513*cda5da8dSAndroid Build Coastguard Worker  ** Define the ]b4_namespace_ref[::parser class.
514*cda5da8dSAndroid Build Coastguard Worker  */
515*cda5da8dSAndroid Build Coastguard Worker 
516*cda5da8dSAndroid Build Coastguard Worker // C++ LALR(1) parser skeleton written by Akim Demaille.
517*cda5da8dSAndroid Build Coastguard Worker 
518*cda5da8dSAndroid Build Coastguard Worker ]b4_disclaimer[
519*cda5da8dSAndroid Build Coastguard Worker ]b4_cpp_guard_open([b4_spec_mapped_header_file])[
520*cda5da8dSAndroid Build Coastguard Worker ]b4_shared_declarations(hh)[
521*cda5da8dSAndroid Build Coastguard Worker ]b4_cpp_guard_close([b4_spec_mapped_header_file])[
522*cda5da8dSAndroid Build Coastguard Worker ]b4_output_end[
523*cda5da8dSAndroid Build Coastguard Worker ]])[
524*cda5da8dSAndroid Build Coastguard Worker 
525*cda5da8dSAndroid Build Coastguard Worker 
526*cda5da8dSAndroid Build Coastguard Worker # --------------------- #
527*cda5da8dSAndroid Build Coastguard Worker # Implementation file.  #
528*cda5da8dSAndroid Build Coastguard Worker # --------------------- #
529*cda5da8dSAndroid Build Coastguard Worker 
530*cda5da8dSAndroid Build Coastguard Worker ]b4_output_begin([b4_parser_file_name])[
531*cda5da8dSAndroid Build Coastguard Worker ]b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])[
532*cda5da8dSAndroid Build Coastguard Worker ]b4_disclaimer[
533*cda5da8dSAndroid Build Coastguard Worker ]b4_percent_code_get([[top]])[]dnl
534*cda5da8dSAndroid Build Coastguard Worker m4_if(b4_prefix, [yy], [],
535*cda5da8dSAndroid Build Coastguard Worker [
536*cda5da8dSAndroid Build Coastguard Worker // Take the name prefix into account.
537*cda5da8dSAndroid Build Coastguard Worker [#]define yylex   b4_prefix[]lex])[
538*cda5da8dSAndroid Build Coastguard Worker 
539*cda5da8dSAndroid Build Coastguard Worker ]b4_user_pre_prologue[
540*cda5da8dSAndroid Build Coastguard Worker 
541*cda5da8dSAndroid Build Coastguard Worker ]b4_header_if([[#include "@basename(]b4_spec_header_file[@)"]],
542*cda5da8dSAndroid Build Coastguard Worker                [b4_shared_declarations([cc])])[
543*cda5da8dSAndroid Build Coastguard Worker 
544*cda5da8dSAndroid Build Coastguard Worker ]b4_user_post_prologue[
545*cda5da8dSAndroid Build Coastguard Worker ]b4_percent_code_get[
546*cda5da8dSAndroid Build Coastguard Worker 
547*cda5da8dSAndroid Build Coastguard Worker #ifndef YY_
548*cda5da8dSAndroid Build Coastguard Worker # if defined YYENABLE_NLS && YYENABLE_NLS
549*cda5da8dSAndroid Build Coastguard Worker #  if ENABLE_NLS
550*cda5da8dSAndroid Build Coastguard Worker #   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
551*cda5da8dSAndroid Build Coastguard Worker #   define YY_(msgid) dgettext ("bison-runtime", msgid)
552*cda5da8dSAndroid Build Coastguard Worker #  endif
553*cda5da8dSAndroid Build Coastguard Worker # endif
554*cda5da8dSAndroid Build Coastguard Worker # ifndef YY_
555*cda5da8dSAndroid Build Coastguard Worker #  define YY_(msgid) msgid
556*cda5da8dSAndroid Build Coastguard Worker # endif
557*cda5da8dSAndroid Build Coastguard Worker #endif
558*cda5da8dSAndroid Build Coastguard Worker ]b4_has_translations_if([
559*cda5da8dSAndroid Build Coastguard Worker #ifndef N_
560*cda5da8dSAndroid Build Coastguard Worker # define N_(Msgid) Msgid
561*cda5da8dSAndroid Build Coastguard Worker #endif
562*cda5da8dSAndroid Build Coastguard Worker ])[
563*cda5da8dSAndroid Build Coastguard Worker 
564*cda5da8dSAndroid Build Coastguard Worker // Whether we are compiled with exception support.
565*cda5da8dSAndroid Build Coastguard Worker #ifndef YY_EXCEPTIONS
566*cda5da8dSAndroid Build Coastguard Worker # if defined __GNUC__ && !defined __EXCEPTIONS
567*cda5da8dSAndroid Build Coastguard Worker #  define YY_EXCEPTIONS 0
568*cda5da8dSAndroid Build Coastguard Worker # else
569*cda5da8dSAndroid Build Coastguard Worker #  define YY_EXCEPTIONS 1
570*cda5da8dSAndroid Build Coastguard Worker # endif
571*cda5da8dSAndroid Build Coastguard Worker #endif
572*cda5da8dSAndroid Build Coastguard Worker 
573*cda5da8dSAndroid Build Coastguard Worker ]b4_locations_if([dnl
574*cda5da8dSAndroid Build Coastguard Worker [#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
575*cda5da8dSAndroid Build Coastguard Worker ]b4_yylloc_default_define])[
576*cda5da8dSAndroid Build Coastguard Worker 
577*cda5da8dSAndroid Build Coastguard Worker // Enable debugging if requested.
578*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
579*cda5da8dSAndroid Build Coastguard Worker 
580*cda5da8dSAndroid Build Coastguard Worker // A pseudo ostream that takes yydebug_ into account.
581*cda5da8dSAndroid Build Coastguard Worker # define YYCDEBUG if (yydebug_) (*yycdebug_)
582*cda5da8dSAndroid Build Coastguard Worker 
583*cda5da8dSAndroid Build Coastguard Worker # define YY_SYMBOL_PRINT(Title, Symbol)         \
584*cda5da8dSAndroid Build Coastguard Worker   do {                                          \
585*cda5da8dSAndroid Build Coastguard Worker     if (yydebug_)                               \
586*cda5da8dSAndroid Build Coastguard Worker     {                                           \
587*cda5da8dSAndroid Build Coastguard Worker       *yycdebug_ << Title << ' ';               \
588*cda5da8dSAndroid Build Coastguard Worker       yy_print_ (*yycdebug_, Symbol);           \
589*cda5da8dSAndroid Build Coastguard Worker       *yycdebug_ << '\n';                       \
590*cda5da8dSAndroid Build Coastguard Worker     }                                           \
591*cda5da8dSAndroid Build Coastguard Worker   } while (false)
592*cda5da8dSAndroid Build Coastguard Worker 
593*cda5da8dSAndroid Build Coastguard Worker # define YY_REDUCE_PRINT(Rule)          \
594*cda5da8dSAndroid Build Coastguard Worker   do {                                  \
595*cda5da8dSAndroid Build Coastguard Worker     if (yydebug_)                       \
596*cda5da8dSAndroid Build Coastguard Worker       yy_reduce_print_ (Rule);          \
597*cda5da8dSAndroid Build Coastguard Worker   } while (false)
598*cda5da8dSAndroid Build Coastguard Worker 
599*cda5da8dSAndroid Build Coastguard Worker # define YY_STACK_PRINT()               \
600*cda5da8dSAndroid Build Coastguard Worker   do {                                  \
601*cda5da8dSAndroid Build Coastguard Worker     if (yydebug_)                       \
602*cda5da8dSAndroid Build Coastguard Worker       yy_stack_print_ ();                \
603*cda5da8dSAndroid Build Coastguard Worker   } while (false)
604*cda5da8dSAndroid Build Coastguard Worker 
605*cda5da8dSAndroid Build Coastguard Worker #else // !]b4_api_PREFIX[DEBUG
606*cda5da8dSAndroid Build Coastguard Worker 
607*cda5da8dSAndroid Build Coastguard Worker # define YYCDEBUG if (false) std::cerr
608*cda5da8dSAndroid Build Coastguard Worker # define YY_SYMBOL_PRINT(Title, Symbol)  YY_USE (Symbol)
609*cda5da8dSAndroid Build Coastguard Worker # define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
610*cda5da8dSAndroid Build Coastguard Worker # define YY_STACK_PRINT()                static_cast<void> (0)
611*cda5da8dSAndroid Build Coastguard Worker 
612*cda5da8dSAndroid Build Coastguard Worker #endif // !]b4_api_PREFIX[DEBUG
613*cda5da8dSAndroid Build Coastguard Worker 
614*cda5da8dSAndroid Build Coastguard Worker #define yyerrok         (yyerrstatus_ = 0)
615*cda5da8dSAndroid Build Coastguard Worker #define yyclearin       (yyla.clear ())
616*cda5da8dSAndroid Build Coastguard Worker 
617*cda5da8dSAndroid Build Coastguard Worker #define YYACCEPT        goto yyacceptlab
618*cda5da8dSAndroid Build Coastguard Worker #define YYABORT         goto yyabortlab
619*cda5da8dSAndroid Build Coastguard Worker #define YYERROR         goto yyerrorlab
620*cda5da8dSAndroid Build Coastguard Worker #define YYRECOVERING()  (!!yyerrstatus_)
621*cda5da8dSAndroid Build Coastguard Worker 
622*cda5da8dSAndroid Build Coastguard Worker ]b4_namespace_open[
623*cda5da8dSAndroid Build Coastguard Worker   /// Build a parser object.
624*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class::b4_parser_class[ (]b4_parse_param_decl[)
625*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
626*cda5da8dSAndroid Build Coastguard Worker     : yydebug_ (false),
627*cda5da8dSAndroid Build Coastguard Worker       yycdebug_ (&std::cerr)]b4_lac_if([,], [m4_ifset([b4_parse_param], [,])])[
628*cda5da8dSAndroid Build Coastguard Worker #else
629*cda5da8dSAndroid Build Coastguard Worker ]b4_lac_if([    :], [m4_ifset([b4_parse_param], [    :])])[
630*cda5da8dSAndroid Build Coastguard Worker #endif]b4_lac_if([[
631*cda5da8dSAndroid Build Coastguard Worker       yy_lac_established_ (false)]m4_ifset([b4_parse_param], [,])])[]b4_parse_param_cons[
632*cda5da8dSAndroid Build Coastguard Worker   {}
633*cda5da8dSAndroid Build Coastguard Worker 
634*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class::~b4_parser_class[ ()
635*cda5da8dSAndroid Build Coastguard Worker   {}
636*cda5da8dSAndroid Build Coastguard Worker 
637*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
638*cda5da8dSAndroid Build Coastguard Worker   {}
639*cda5da8dSAndroid Build Coastguard Worker 
640*cda5da8dSAndroid Build Coastguard Worker   /*---------.
641*cda5da8dSAndroid Build Coastguard Worker   | symbol.  |
642*cda5da8dSAndroid Build Coastguard Worker   `---------*/
643*cda5da8dSAndroid Build Coastguard Worker 
644*cda5da8dSAndroid Build Coastguard Worker ]b4_token_ctor_if([], [b4_public_types_define([cc])])[
645*cda5da8dSAndroid Build Coastguard Worker 
646*cda5da8dSAndroid Build Coastguard Worker   // by_state.
647*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::by_state () YY_NOEXCEPT
648*cda5da8dSAndroid Build Coastguard Worker     : state (empty_state)
649*cda5da8dSAndroid Build Coastguard Worker   {}
650*cda5da8dSAndroid Build Coastguard Worker 
651*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::by_state (const by_state& that) YY_NOEXCEPT
652*cda5da8dSAndroid Build Coastguard Worker     : state (that.state)
653*cda5da8dSAndroid Build Coastguard Worker   {}
654*cda5da8dSAndroid Build Coastguard Worker 
655*cda5da8dSAndroid Build Coastguard Worker   void
656*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::clear () YY_NOEXCEPT
657*cda5da8dSAndroid Build Coastguard Worker   {
658*cda5da8dSAndroid Build Coastguard Worker     state = empty_state;
659*cda5da8dSAndroid Build Coastguard Worker   }
660*cda5da8dSAndroid Build Coastguard Worker 
661*cda5da8dSAndroid Build Coastguard Worker   void
662*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::move (by_state& that)
663*cda5da8dSAndroid Build Coastguard Worker   {
664*cda5da8dSAndroid Build Coastguard Worker     state = that.state;
665*cda5da8dSAndroid Build Coastguard Worker     that.clear ();
666*cda5da8dSAndroid Build Coastguard Worker   }
667*cda5da8dSAndroid Build Coastguard Worker 
668*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::by_state (state_type s) YY_NOEXCEPT
669*cda5da8dSAndroid Build Coastguard Worker     : state (s)
670*cda5da8dSAndroid Build Coastguard Worker   {}
671*cda5da8dSAndroid Build Coastguard Worker 
672*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::symbol_kind_type
673*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::by_state::kind () const YY_NOEXCEPT
674*cda5da8dSAndroid Build Coastguard Worker   {
675*cda5da8dSAndroid Build Coastguard Worker     if (state == empty_state)
676*cda5da8dSAndroid Build Coastguard Worker       return ]b4_symbol(empty, kind)[;
677*cda5da8dSAndroid Build Coastguard Worker     else
678*cda5da8dSAndroid Build Coastguard Worker       return YY_CAST (symbol_kind_type, yystos_[+state]);
679*cda5da8dSAndroid Build Coastguard Worker   }
680*cda5da8dSAndroid Build Coastguard Worker 
681*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type::stack_symbol_type ()
682*cda5da8dSAndroid Build Coastguard Worker   {}
683*cda5da8dSAndroid Build Coastguard Worker 
684*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
685*cda5da8dSAndroid Build Coastguard Worker     : super_type (YY_MOVE (that.state)]b4_variant_if([], [, YY_MOVE (that.value)])b4_locations_if([, YY_MOVE (that.location)])[)
686*cda5da8dSAndroid Build Coastguard Worker   {]b4_variant_if([
687*cda5da8dSAndroid Build Coastguard Worker     b4_symbol_variant([that.kind ()],
688*cda5da8dSAndroid Build Coastguard Worker                       [value], [YY_MOVE_OR_COPY], [YY_MOVE (that.value)])])[
689*cda5da8dSAndroid Build Coastguard Worker #if 201103L <= YY_CPLUSPLUS
690*cda5da8dSAndroid Build Coastguard Worker     // that is emptied.
691*cda5da8dSAndroid Build Coastguard Worker     that.state = empty_state;
692*cda5da8dSAndroid Build Coastguard Worker #endif
693*cda5da8dSAndroid Build Coastguard Worker   }
694*cda5da8dSAndroid Build Coastguard Worker 
695*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
696*cda5da8dSAndroid Build Coastguard Worker     : super_type (s]b4_variant_if([], [, YY_MOVE (that.value)])[]b4_locations_if([, YY_MOVE (that.location)])[)
697*cda5da8dSAndroid Build Coastguard Worker   {]b4_variant_if([
698*cda5da8dSAndroid Build Coastguard Worker     b4_symbol_variant([that.kind ()],
699*cda5da8dSAndroid Build Coastguard Worker                       [value], [move], [YY_MOVE (that.value)])])[
700*cda5da8dSAndroid Build Coastguard Worker     // that is emptied.
701*cda5da8dSAndroid Build Coastguard Worker     that.kind_ = ]b4_symbol(empty, kind)[;
702*cda5da8dSAndroid Build Coastguard Worker   }
703*cda5da8dSAndroid Build Coastguard Worker 
704*cda5da8dSAndroid Build Coastguard Worker #if YY_CPLUSPLUS < 201103L
705*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type&
706*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type::operator= (const stack_symbol_type& that)
707*cda5da8dSAndroid Build Coastguard Worker   {
708*cda5da8dSAndroid Build Coastguard Worker     state = that.state;
709*cda5da8dSAndroid Build Coastguard Worker     ]b4_variant_if([b4_symbol_variant([that.kind ()],
710*cda5da8dSAndroid Build Coastguard Worker                                       [value], [copy], [that.value])],
711*cda5da8dSAndroid Build Coastguard Worker                    [[value = that.value;]])[]b4_locations_if([
712*cda5da8dSAndroid Build Coastguard Worker     location = that.location;])[
713*cda5da8dSAndroid Build Coastguard Worker     return *this;
714*cda5da8dSAndroid Build Coastguard Worker   }
715*cda5da8dSAndroid Build Coastguard Worker 
716*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type&
717*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::stack_symbol_type::operator= (stack_symbol_type& that)
718*cda5da8dSAndroid Build Coastguard Worker   {
719*cda5da8dSAndroid Build Coastguard Worker     state = that.state;
720*cda5da8dSAndroid Build Coastguard Worker     ]b4_variant_if([b4_symbol_variant([that.kind ()],
721*cda5da8dSAndroid Build Coastguard Worker                                       [value], [move], [that.value])],
722*cda5da8dSAndroid Build Coastguard Worker                    [[value = that.value;]])[]b4_locations_if([
723*cda5da8dSAndroid Build Coastguard Worker     location = that.location;])[
724*cda5da8dSAndroid Build Coastguard Worker     // that is emptied.
725*cda5da8dSAndroid Build Coastguard Worker     that.state = empty_state;
726*cda5da8dSAndroid Build Coastguard Worker     return *this;
727*cda5da8dSAndroid Build Coastguard Worker   }
728*cda5da8dSAndroid Build Coastguard Worker #endif
729*cda5da8dSAndroid Build Coastguard Worker 
730*cda5da8dSAndroid Build Coastguard Worker   template <typename Base>
731*cda5da8dSAndroid Build Coastguard Worker   void
732*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
733*cda5da8dSAndroid Build Coastguard Worker   {
734*cda5da8dSAndroid Build Coastguard Worker     if (yymsg)
735*cda5da8dSAndroid Build Coastguard Worker       YY_SYMBOL_PRINT (yymsg, yysym);]b4_variant_if([], [
736*cda5da8dSAndroid Build Coastguard Worker 
737*cda5da8dSAndroid Build Coastguard Worker     // User destructor.
738*cda5da8dSAndroid Build Coastguard Worker     b4_symbol_actions([destructor], [yysym.kind ()])])[
739*cda5da8dSAndroid Build Coastguard Worker   }
740*cda5da8dSAndroid Build Coastguard Worker 
741*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
742*cda5da8dSAndroid Build Coastguard Worker   template <typename Base>
743*cda5da8dSAndroid Build Coastguard Worker   void
744*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
745*cda5da8dSAndroid Build Coastguard Worker   {
746*cda5da8dSAndroid Build Coastguard Worker     std::ostream& yyoutput = yyo;
747*cda5da8dSAndroid Build Coastguard Worker     YY_USE (yyoutput);
748*cda5da8dSAndroid Build Coastguard Worker     if (yysym.empty ())
749*cda5da8dSAndroid Build Coastguard Worker       yyo << "empty symbol";
750*cda5da8dSAndroid Build Coastguard Worker     else
751*cda5da8dSAndroid Build Coastguard Worker       {
752*cda5da8dSAndroid Build Coastguard Worker         symbol_kind_type yykind = yysym.kind ();
753*cda5da8dSAndroid Build Coastguard Worker         yyo << (yykind < YYNTOKENS ? "token" : "nterm")
754*cda5da8dSAndroid Build Coastguard Worker             << ' ' << yysym.name () << " ("]b4_locations_if([
755*cda5da8dSAndroid Build Coastguard Worker             << yysym.location << ": "])[;
756*cda5da8dSAndroid Build Coastguard Worker         ]b4_symbol_actions([printer])[
757*cda5da8dSAndroid Build Coastguard Worker         yyo << ')';
758*cda5da8dSAndroid Build Coastguard Worker       }
759*cda5da8dSAndroid Build Coastguard Worker   }
760*cda5da8dSAndroid Build Coastguard Worker #endif
761*cda5da8dSAndroid Build Coastguard Worker 
762*cda5da8dSAndroid Build Coastguard Worker   void
763*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
764*cda5da8dSAndroid Build Coastguard Worker   {
765*cda5da8dSAndroid Build Coastguard Worker     if (m)
766*cda5da8dSAndroid Build Coastguard Worker       YY_SYMBOL_PRINT (m, sym);
767*cda5da8dSAndroid Build Coastguard Worker     yystack_.push (YY_MOVE (sym));
768*cda5da8dSAndroid Build Coastguard Worker   }
769*cda5da8dSAndroid Build Coastguard Worker 
770*cda5da8dSAndroid Build Coastguard Worker   void
771*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
772*cda5da8dSAndroid Build Coastguard Worker   {
773*cda5da8dSAndroid Build Coastguard Worker #if 201103L <= YY_CPLUSPLUS
774*cda5da8dSAndroid Build Coastguard Worker     yypush_ (m, stack_symbol_type (s, std::move (sym)));
775*cda5da8dSAndroid Build Coastguard Worker #else
776*cda5da8dSAndroid Build Coastguard Worker     stack_symbol_type ss (s, sym);
777*cda5da8dSAndroid Build Coastguard Worker     yypush_ (m, ss);
778*cda5da8dSAndroid Build Coastguard Worker #endif
779*cda5da8dSAndroid Build Coastguard Worker   }
780*cda5da8dSAndroid Build Coastguard Worker 
781*cda5da8dSAndroid Build Coastguard Worker   void
782*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yypop_ (int n) YY_NOEXCEPT
783*cda5da8dSAndroid Build Coastguard Worker   {
784*cda5da8dSAndroid Build Coastguard Worker     yystack_.pop (n);
785*cda5da8dSAndroid Build Coastguard Worker   }
786*cda5da8dSAndroid Build Coastguard Worker 
787*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
788*cda5da8dSAndroid Build Coastguard Worker   std::ostream&
789*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::debug_stream () const
790*cda5da8dSAndroid Build Coastguard Worker   {
791*cda5da8dSAndroid Build Coastguard Worker     return *yycdebug_;
792*cda5da8dSAndroid Build Coastguard Worker   }
793*cda5da8dSAndroid Build Coastguard Worker 
794*cda5da8dSAndroid Build Coastguard Worker   void
795*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::set_debug_stream (std::ostream& o)
796*cda5da8dSAndroid Build Coastguard Worker   {
797*cda5da8dSAndroid Build Coastguard Worker     yycdebug_ = &o;
798*cda5da8dSAndroid Build Coastguard Worker   }
799*cda5da8dSAndroid Build Coastguard Worker 
800*cda5da8dSAndroid Build Coastguard Worker 
801*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::debug_level_type
802*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::debug_level () const
803*cda5da8dSAndroid Build Coastguard Worker   {
804*cda5da8dSAndroid Build Coastguard Worker     return yydebug_;
805*cda5da8dSAndroid Build Coastguard Worker   }
806*cda5da8dSAndroid Build Coastguard Worker 
807*cda5da8dSAndroid Build Coastguard Worker   void
808*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::set_debug_level (debug_level_type l)
809*cda5da8dSAndroid Build Coastguard Worker   {
810*cda5da8dSAndroid Build Coastguard Worker     yydebug_ = l;
811*cda5da8dSAndroid Build Coastguard Worker   }
812*cda5da8dSAndroid Build Coastguard Worker #endif // ]b4_api_PREFIX[DEBUG
813*cda5da8dSAndroid Build Coastguard Worker 
814*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::state_type
815*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_lr_goto_state_ (state_type yystate, int yysym)
816*cda5da8dSAndroid Build Coastguard Worker   {
817*cda5da8dSAndroid Build Coastguard Worker     int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
818*cda5da8dSAndroid Build Coastguard Worker     if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
819*cda5da8dSAndroid Build Coastguard Worker       return yytable_[yyr];
820*cda5da8dSAndroid Build Coastguard Worker     else
821*cda5da8dSAndroid Build Coastguard Worker       return yydefgoto_[yysym - YYNTOKENS];
822*cda5da8dSAndroid Build Coastguard Worker   }
823*cda5da8dSAndroid Build Coastguard Worker 
824*cda5da8dSAndroid Build Coastguard Worker   bool
825*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
826*cda5da8dSAndroid Build Coastguard Worker   {
827*cda5da8dSAndroid Build Coastguard Worker     return yyvalue == yypact_ninf_;
828*cda5da8dSAndroid Build Coastguard Worker   }
829*cda5da8dSAndroid Build Coastguard Worker 
830*cda5da8dSAndroid Build Coastguard Worker   bool
831*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
832*cda5da8dSAndroid Build Coastguard Worker   {
833*cda5da8dSAndroid Build Coastguard Worker     return yyvalue == yytable_ninf_;
834*cda5da8dSAndroid Build Coastguard Worker   }
835*cda5da8dSAndroid Build Coastguard Worker 
836*cda5da8dSAndroid Build Coastguard Worker   int
837*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::operator() ()
838*cda5da8dSAndroid Build Coastguard Worker   {
839*cda5da8dSAndroid Build Coastguard Worker     return parse ();
840*cda5da8dSAndroid Build Coastguard Worker   }
841*cda5da8dSAndroid Build Coastguard Worker 
842*cda5da8dSAndroid Build Coastguard Worker   int
843*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::parse ()
844*cda5da8dSAndroid Build Coastguard Worker   {
845*cda5da8dSAndroid Build Coastguard Worker     int yyn;
846*cda5da8dSAndroid Build Coastguard Worker     /// Length of the RHS of the rule being reduced.
847*cda5da8dSAndroid Build Coastguard Worker     int yylen = 0;
848*cda5da8dSAndroid Build Coastguard Worker 
849*cda5da8dSAndroid Build Coastguard Worker     // Error handling.
850*cda5da8dSAndroid Build Coastguard Worker     int yynerrs_ = 0;
851*cda5da8dSAndroid Build Coastguard Worker     int yyerrstatus_ = 0;
852*cda5da8dSAndroid Build Coastguard Worker 
853*cda5da8dSAndroid Build Coastguard Worker     /// The lookahead symbol.
854*cda5da8dSAndroid Build Coastguard Worker     symbol_type yyla;]b4_locations_if([[
855*cda5da8dSAndroid Build Coastguard Worker 
856*cda5da8dSAndroid Build Coastguard Worker     /// The locations where the error started and ended.
857*cda5da8dSAndroid Build Coastguard Worker     stack_symbol_type yyerror_range[3];]])[
858*cda5da8dSAndroid Build Coastguard Worker 
859*cda5da8dSAndroid Build Coastguard Worker     /// The return value of parse ().
860*cda5da8dSAndroid Build Coastguard Worker     int yyresult;]b4_lac_if([[
861*cda5da8dSAndroid Build Coastguard Worker 
862*cda5da8dSAndroid Build Coastguard Worker     // Discard the LAC context in case there still is one left from a
863*cda5da8dSAndroid Build Coastguard Worker     // previous invocation.
864*cda5da8dSAndroid Build Coastguard Worker     yy_lac_discard_ ("init");]])[
865*cda5da8dSAndroid Build Coastguard Worker 
866*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
867*cda5da8dSAndroid Build Coastguard Worker     try
868*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
869*cda5da8dSAndroid Build Coastguard Worker       {
870*cda5da8dSAndroid Build Coastguard Worker     YYCDEBUG << "Starting parse\n";
871*cda5da8dSAndroid Build Coastguard Worker 
872*cda5da8dSAndroid Build Coastguard Worker ]m4_ifdef([b4_initial_action], [
873*cda5da8dSAndroid Build Coastguard Worker b4_dollar_pushdef([yyla.value], [], [], [yyla.location])dnl
874*cda5da8dSAndroid Build Coastguard Worker     b4_user_initial_action
875*cda5da8dSAndroid Build Coastguard Worker b4_dollar_popdef])[]dnl
876*cda5da8dSAndroid Build Coastguard Worker 
877*cda5da8dSAndroid Build Coastguard Worker   [  /* Initialize the stack.  The initial state will be set in
878*cda5da8dSAndroid Build Coastguard Worker        yynewstate, since the latter expects the semantical and the
879*cda5da8dSAndroid Build Coastguard Worker        location values to have been already stored, initialize these
880*cda5da8dSAndroid Build Coastguard Worker        stacks with a primary value.  */
881*cda5da8dSAndroid Build Coastguard Worker     yystack_.clear ();
882*cda5da8dSAndroid Build Coastguard Worker     yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
883*cda5da8dSAndroid Build Coastguard Worker 
884*cda5da8dSAndroid Build Coastguard Worker   /*-----------------------------------------------.
885*cda5da8dSAndroid Build Coastguard Worker   | yynewstate -- push a new symbol on the stack.  |
886*cda5da8dSAndroid Build Coastguard Worker   `-----------------------------------------------*/
887*cda5da8dSAndroid Build Coastguard Worker   yynewstate:
888*cda5da8dSAndroid Build Coastguard Worker     YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
889*cda5da8dSAndroid Build Coastguard Worker     YY_STACK_PRINT ();
890*cda5da8dSAndroid Build Coastguard Worker 
891*cda5da8dSAndroid Build Coastguard Worker     // Accept?
892*cda5da8dSAndroid Build Coastguard Worker     if (yystack_[0].state == yyfinal_)
893*cda5da8dSAndroid Build Coastguard Worker       YYACCEPT;
894*cda5da8dSAndroid Build Coastguard Worker 
895*cda5da8dSAndroid Build Coastguard Worker     goto yybackup;
896*cda5da8dSAndroid Build Coastguard Worker 
897*cda5da8dSAndroid Build Coastguard Worker 
898*cda5da8dSAndroid Build Coastguard Worker   /*-----------.
899*cda5da8dSAndroid Build Coastguard Worker   | yybackup.  |
900*cda5da8dSAndroid Build Coastguard Worker   `-----------*/
901*cda5da8dSAndroid Build Coastguard Worker   yybackup:
902*cda5da8dSAndroid Build Coastguard Worker     // Try to take a decision without lookahead.
903*cda5da8dSAndroid Build Coastguard Worker     yyn = yypact_[+yystack_[0].state];
904*cda5da8dSAndroid Build Coastguard Worker     if (yy_pact_value_is_default_ (yyn))
905*cda5da8dSAndroid Build Coastguard Worker       goto yydefault;
906*cda5da8dSAndroid Build Coastguard Worker 
907*cda5da8dSAndroid Build Coastguard Worker     // Read a lookahead token.
908*cda5da8dSAndroid Build Coastguard Worker     if (yyla.empty ())
909*cda5da8dSAndroid Build Coastguard Worker       {
910*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << "Reading a token\n";
911*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
912*cda5da8dSAndroid Build Coastguard Worker         try
913*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
914*cda5da8dSAndroid Build Coastguard Worker           {]b4_token_ctor_if([[
915*cda5da8dSAndroid Build Coastguard Worker             symbol_type yylookahead (]b4_yylex[);
916*cda5da8dSAndroid Build Coastguard Worker             yyla.move (yylookahead);]], [[
917*cda5da8dSAndroid Build Coastguard Worker             yyla.kind_ = yytranslate_ (]b4_yylex[);]])[
918*cda5da8dSAndroid Build Coastguard Worker           }
919*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
920*cda5da8dSAndroid Build Coastguard Worker         catch (const syntax_error& yyexc)
921*cda5da8dSAndroid Build Coastguard Worker           {
922*cda5da8dSAndroid Build Coastguard Worker             YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
923*cda5da8dSAndroid Build Coastguard Worker             error (yyexc);
924*cda5da8dSAndroid Build Coastguard Worker             goto yyerrlab1;
925*cda5da8dSAndroid Build Coastguard Worker           }
926*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
927*cda5da8dSAndroid Build Coastguard Worker       }
928*cda5da8dSAndroid Build Coastguard Worker     YY_SYMBOL_PRINT ("Next token is", yyla);
929*cda5da8dSAndroid Build Coastguard Worker 
930*cda5da8dSAndroid Build Coastguard Worker     if (yyla.kind () == ]b4_symbol(error, kind)[)
931*cda5da8dSAndroid Build Coastguard Worker     {
932*cda5da8dSAndroid Build Coastguard Worker       // The scanner already issued an error message, process directly
933*cda5da8dSAndroid Build Coastguard Worker       // to error recovery.  But do not keep the error token as
934*cda5da8dSAndroid Build Coastguard Worker       // lookahead, it is too special and may lead us to an endless
935*cda5da8dSAndroid Build Coastguard Worker       // loop in error recovery. */
936*cda5da8dSAndroid Build Coastguard Worker       yyla.kind_ = ]b4_symbol(undef, kind)[;
937*cda5da8dSAndroid Build Coastguard Worker       goto yyerrlab1;
938*cda5da8dSAndroid Build Coastguard Worker     }
939*cda5da8dSAndroid Build Coastguard Worker 
940*cda5da8dSAndroid Build Coastguard Worker     /* If the proper action on seeing token YYLA.TYPE is to reduce or
941*cda5da8dSAndroid Build Coastguard Worker        to detect an error, take that action.  */
942*cda5da8dSAndroid Build Coastguard Worker     yyn += yyla.kind ();
943*cda5da8dSAndroid Build Coastguard Worker     if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
944*cda5da8dSAndroid Build Coastguard Worker       {]b4_lac_if([[
945*cda5da8dSAndroid Build Coastguard Worker         if (!yy_lac_establish_ (yyla.kind ()))
946*cda5da8dSAndroid Build Coastguard Worker           goto yyerrlab;]])[
947*cda5da8dSAndroid Build Coastguard Worker         goto yydefault;
948*cda5da8dSAndroid Build Coastguard Worker       }
949*cda5da8dSAndroid Build Coastguard Worker 
950*cda5da8dSAndroid Build Coastguard Worker     // Reduce or error.
951*cda5da8dSAndroid Build Coastguard Worker     yyn = yytable_[yyn];
952*cda5da8dSAndroid Build Coastguard Worker     if (yyn <= 0)
953*cda5da8dSAndroid Build Coastguard Worker       {
954*cda5da8dSAndroid Build Coastguard Worker         if (yy_table_value_is_error_ (yyn))
955*cda5da8dSAndroid Build Coastguard Worker           goto yyerrlab;]b4_lac_if([[
956*cda5da8dSAndroid Build Coastguard Worker         if (!yy_lac_establish_ (yyla.kind ()))
957*cda5da8dSAndroid Build Coastguard Worker           goto yyerrlab;
958*cda5da8dSAndroid Build Coastguard Worker ]])[
959*cda5da8dSAndroid Build Coastguard Worker         yyn = -yyn;
960*cda5da8dSAndroid Build Coastguard Worker         goto yyreduce;
961*cda5da8dSAndroid Build Coastguard Worker       }
962*cda5da8dSAndroid Build Coastguard Worker 
963*cda5da8dSAndroid Build Coastguard Worker     // Count tokens shifted since error; after three, turn off error status.
964*cda5da8dSAndroid Build Coastguard Worker     if (yyerrstatus_)
965*cda5da8dSAndroid Build Coastguard Worker       --yyerrstatus_;
966*cda5da8dSAndroid Build Coastguard Worker 
967*cda5da8dSAndroid Build Coastguard Worker     // Shift the lookahead token.
968*cda5da8dSAndroid Build Coastguard Worker     yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));]b4_lac_if([[
969*cda5da8dSAndroid Build Coastguard Worker     yy_lac_discard_ ("shift");]])[
970*cda5da8dSAndroid Build Coastguard Worker     goto yynewstate;
971*cda5da8dSAndroid Build Coastguard Worker 
972*cda5da8dSAndroid Build Coastguard Worker 
973*cda5da8dSAndroid Build Coastguard Worker   /*-----------------------------------------------------------.
974*cda5da8dSAndroid Build Coastguard Worker   | yydefault -- do the default action for the current state.  |
975*cda5da8dSAndroid Build Coastguard Worker   `-----------------------------------------------------------*/
976*cda5da8dSAndroid Build Coastguard Worker   yydefault:
977*cda5da8dSAndroid Build Coastguard Worker     yyn = yydefact_[+yystack_[0].state];
978*cda5da8dSAndroid Build Coastguard Worker     if (yyn == 0)
979*cda5da8dSAndroid Build Coastguard Worker       goto yyerrlab;
980*cda5da8dSAndroid Build Coastguard Worker     goto yyreduce;
981*cda5da8dSAndroid Build Coastguard Worker 
982*cda5da8dSAndroid Build Coastguard Worker 
983*cda5da8dSAndroid Build Coastguard Worker   /*-----------------------------.
984*cda5da8dSAndroid Build Coastguard Worker   | yyreduce -- do a reduction.  |
985*cda5da8dSAndroid Build Coastguard Worker   `-----------------------------*/
986*cda5da8dSAndroid Build Coastguard Worker   yyreduce:
987*cda5da8dSAndroid Build Coastguard Worker     yylen = yyr2_[yyn];
988*cda5da8dSAndroid Build Coastguard Worker     {
989*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type yylhs;
990*cda5da8dSAndroid Build Coastguard Worker       yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([[
991*cda5da8dSAndroid Build Coastguard Worker       /* Variants are always initialized to an empty instance of the
992*cda5da8dSAndroid Build Coastguard Worker          correct type. The default '$$ = $1' action is NOT applied
993*cda5da8dSAndroid Build Coastguard Worker          when using variants.  */
994*cda5da8dSAndroid Build Coastguard Worker       ]b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [emplace])], [[
995*cda5da8dSAndroid Build Coastguard Worker       /* If YYLEN is nonzero, implement the default value of the
996*cda5da8dSAndroid Build Coastguard Worker          action: '$$ = $1'.  Otherwise, use the top of the stack.
997*cda5da8dSAndroid Build Coastguard Worker 
998*cda5da8dSAndroid Build Coastguard Worker          Otherwise, the following line sets YYLHS.VALUE to garbage.
999*cda5da8dSAndroid Build Coastguard Worker          This behavior is undocumented and Bison users should not rely
1000*cda5da8dSAndroid Build Coastguard Worker          upon it.  */
1001*cda5da8dSAndroid Build Coastguard Worker       if (yylen)
1002*cda5da8dSAndroid Build Coastguard Worker         yylhs.value = yystack_@{yylen - 1@}.value;
1003*cda5da8dSAndroid Build Coastguard Worker       else
1004*cda5da8dSAndroid Build Coastguard Worker         yylhs.value = yystack_@{0@}.value;]])[
1005*cda5da8dSAndroid Build Coastguard Worker ]b4_locations_if([dnl
1006*cda5da8dSAndroid Build Coastguard Worker [
1007*cda5da8dSAndroid Build Coastguard Worker       // Default location.
1008*cda5da8dSAndroid Build Coastguard Worker       {
1009*cda5da8dSAndroid Build Coastguard Worker         stack_type::slice range (yystack_, yylen);
1010*cda5da8dSAndroid Build Coastguard Worker         YYLLOC_DEFAULT (yylhs.location, range, yylen);
1011*cda5da8dSAndroid Build Coastguard Worker         yyerror_range[1].location = yylhs.location;
1012*cda5da8dSAndroid Build Coastguard Worker       }]])[
1013*cda5da8dSAndroid Build Coastguard Worker 
1014*cda5da8dSAndroid Build Coastguard Worker       // Perform the reduction.
1015*cda5da8dSAndroid Build Coastguard Worker       YY_REDUCE_PRINT (yyn);
1016*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
1017*cda5da8dSAndroid Build Coastguard Worker       try
1018*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
1019*cda5da8dSAndroid Build Coastguard Worker         {
1020*cda5da8dSAndroid Build Coastguard Worker           switch (yyn)
1021*cda5da8dSAndroid Build Coastguard Worker             {
1022*cda5da8dSAndroid Build Coastguard Worker ]b4_user_actions[
1023*cda5da8dSAndroid Build Coastguard Worker             default:
1024*cda5da8dSAndroid Build Coastguard Worker               break;
1025*cda5da8dSAndroid Build Coastguard Worker             }
1026*cda5da8dSAndroid Build Coastguard Worker         }
1027*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
1028*cda5da8dSAndroid Build Coastguard Worker       catch (const syntax_error& yyexc)
1029*cda5da8dSAndroid Build Coastguard Worker         {
1030*cda5da8dSAndroid Build Coastguard Worker           YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
1031*cda5da8dSAndroid Build Coastguard Worker           error (yyexc);
1032*cda5da8dSAndroid Build Coastguard Worker           YYERROR;
1033*cda5da8dSAndroid Build Coastguard Worker         }
1034*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
1035*cda5da8dSAndroid Build Coastguard Worker       YY_SYMBOL_PRINT ("-> $$ =", yylhs);
1036*cda5da8dSAndroid Build Coastguard Worker       yypop_ (yylen);
1037*cda5da8dSAndroid Build Coastguard Worker       yylen = 0;
1038*cda5da8dSAndroid Build Coastguard Worker 
1039*cda5da8dSAndroid Build Coastguard Worker       // Shift the result of the reduction.
1040*cda5da8dSAndroid Build Coastguard Worker       yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
1041*cda5da8dSAndroid Build Coastguard Worker     }
1042*cda5da8dSAndroid Build Coastguard Worker     goto yynewstate;
1043*cda5da8dSAndroid Build Coastguard Worker 
1044*cda5da8dSAndroid Build Coastguard Worker 
1045*cda5da8dSAndroid Build Coastguard Worker   /*--------------------------------------.
1046*cda5da8dSAndroid Build Coastguard Worker   | yyerrlab -- here on detecting error.  |
1047*cda5da8dSAndroid Build Coastguard Worker   `--------------------------------------*/
1048*cda5da8dSAndroid Build Coastguard Worker   yyerrlab:
1049*cda5da8dSAndroid Build Coastguard Worker     // If not already recovering from an error, report this error.
1050*cda5da8dSAndroid Build Coastguard Worker     if (!yyerrstatus_)
1051*cda5da8dSAndroid Build Coastguard Worker       {
1052*cda5da8dSAndroid Build Coastguard Worker         ++yynerrs_;]b4_parse_error_case(
1053*cda5da8dSAndroid Build Coastguard Worker                   [simple], [[
1054*cda5da8dSAndroid Build Coastguard Worker         std::string msg = YY_("syntax error");
1055*cda5da8dSAndroid Build Coastguard Worker         error (]b4_join(b4_locations_if([yyla.location]), [[YY_MOVE (msg)]])[);]],
1056*cda5da8dSAndroid Build Coastguard Worker                   [custom], [[
1057*cda5da8dSAndroid Build Coastguard Worker         context yyctx (*this, yyla);
1058*cda5da8dSAndroid Build Coastguard Worker         report_syntax_error (yyctx);]],
1059*cda5da8dSAndroid Build Coastguard Worker                   [[
1060*cda5da8dSAndroid Build Coastguard Worker         context yyctx (*this, yyla);
1061*cda5da8dSAndroid Build Coastguard Worker         std::string msg = yysyntax_error_ (yyctx);
1062*cda5da8dSAndroid Build Coastguard Worker         error (]b4_join(b4_locations_if([yyla.location]), [[YY_MOVE (msg)]])[);]])[
1063*cda5da8dSAndroid Build Coastguard Worker       }
1064*cda5da8dSAndroid Build Coastguard Worker 
1065*cda5da8dSAndroid Build Coastguard Worker ]b4_locations_if([[
1066*cda5da8dSAndroid Build Coastguard Worker     yyerror_range[1].location = yyla.location;]])[
1067*cda5da8dSAndroid Build Coastguard Worker     if (yyerrstatus_ == 3)
1068*cda5da8dSAndroid Build Coastguard Worker       {
1069*cda5da8dSAndroid Build Coastguard Worker         /* If just tried and failed to reuse lookahead token after an
1070*cda5da8dSAndroid Build Coastguard Worker            error, discard it.  */
1071*cda5da8dSAndroid Build Coastguard Worker 
1072*cda5da8dSAndroid Build Coastguard Worker         // Return failure if at end of input.
1073*cda5da8dSAndroid Build Coastguard Worker         if (yyla.kind () == ]b4_symbol(eof, kind)[)
1074*cda5da8dSAndroid Build Coastguard Worker           YYABORT;
1075*cda5da8dSAndroid Build Coastguard Worker         else if (!yyla.empty ())
1076*cda5da8dSAndroid Build Coastguard Worker           {
1077*cda5da8dSAndroid Build Coastguard Worker             yy_destroy_ ("Error: discarding", yyla);
1078*cda5da8dSAndroid Build Coastguard Worker             yyla.clear ();
1079*cda5da8dSAndroid Build Coastguard Worker           }
1080*cda5da8dSAndroid Build Coastguard Worker       }
1081*cda5da8dSAndroid Build Coastguard Worker 
1082*cda5da8dSAndroid Build Coastguard Worker     // Else will try to reuse lookahead token after shifting the error token.
1083*cda5da8dSAndroid Build Coastguard Worker     goto yyerrlab1;
1084*cda5da8dSAndroid Build Coastguard Worker 
1085*cda5da8dSAndroid Build Coastguard Worker 
1086*cda5da8dSAndroid Build Coastguard Worker   /*---------------------------------------------------.
1087*cda5da8dSAndroid Build Coastguard Worker   | yyerrorlab -- error raised explicitly by YYERROR.  |
1088*cda5da8dSAndroid Build Coastguard Worker   `---------------------------------------------------*/
1089*cda5da8dSAndroid Build Coastguard Worker   yyerrorlab:
1090*cda5da8dSAndroid Build Coastguard Worker     /* Pacify compilers when the user code never invokes YYERROR and
1091*cda5da8dSAndroid Build Coastguard Worker        the label yyerrorlab therefore never appears in user code.  */
1092*cda5da8dSAndroid Build Coastguard Worker     if (false)
1093*cda5da8dSAndroid Build Coastguard Worker       YYERROR;
1094*cda5da8dSAndroid Build Coastguard Worker 
1095*cda5da8dSAndroid Build Coastguard Worker     /* Do not reclaim the symbols of the rule whose action triggered
1096*cda5da8dSAndroid Build Coastguard Worker        this YYERROR.  */
1097*cda5da8dSAndroid Build Coastguard Worker     yypop_ (yylen);
1098*cda5da8dSAndroid Build Coastguard Worker     yylen = 0;
1099*cda5da8dSAndroid Build Coastguard Worker     YY_STACK_PRINT ();
1100*cda5da8dSAndroid Build Coastguard Worker     goto yyerrlab1;
1101*cda5da8dSAndroid Build Coastguard Worker 
1102*cda5da8dSAndroid Build Coastguard Worker 
1103*cda5da8dSAndroid Build Coastguard Worker   /*-------------------------------------------------------------.
1104*cda5da8dSAndroid Build Coastguard Worker   | yyerrlab1 -- common code for both syntax error and YYERROR.  |
1105*cda5da8dSAndroid Build Coastguard Worker   `-------------------------------------------------------------*/
1106*cda5da8dSAndroid Build Coastguard Worker   yyerrlab1:
1107*cda5da8dSAndroid Build Coastguard Worker     yyerrstatus_ = 3;   // Each real token shifted decrements this.
1108*cda5da8dSAndroid Build Coastguard Worker     // Pop stack until we find a state that shifts the error token.
1109*cda5da8dSAndroid Build Coastguard Worker     for (;;)
1110*cda5da8dSAndroid Build Coastguard Worker       {
1111*cda5da8dSAndroid Build Coastguard Worker         yyn = yypact_[+yystack_[0].state];
1112*cda5da8dSAndroid Build Coastguard Worker         if (!yy_pact_value_is_default_ (yyn))
1113*cda5da8dSAndroid Build Coastguard Worker           {
1114*cda5da8dSAndroid Build Coastguard Worker             yyn += ]b4_symbol(error, kind)[;
1115*cda5da8dSAndroid Build Coastguard Worker             if (0 <= yyn && yyn <= yylast_
1116*cda5da8dSAndroid Build Coastguard Worker                 && yycheck_[yyn] == ]b4_symbol(error, kind)[)
1117*cda5da8dSAndroid Build Coastguard Worker               {
1118*cda5da8dSAndroid Build Coastguard Worker                 yyn = yytable_[yyn];
1119*cda5da8dSAndroid Build Coastguard Worker                 if (0 < yyn)
1120*cda5da8dSAndroid Build Coastguard Worker                   break;
1121*cda5da8dSAndroid Build Coastguard Worker               }
1122*cda5da8dSAndroid Build Coastguard Worker           }
1123*cda5da8dSAndroid Build Coastguard Worker 
1124*cda5da8dSAndroid Build Coastguard Worker         // Pop the current state because it cannot handle the error token.
1125*cda5da8dSAndroid Build Coastguard Worker         if (yystack_.size () == 1)
1126*cda5da8dSAndroid Build Coastguard Worker           YYABORT;
1127*cda5da8dSAndroid Build Coastguard Worker ]b4_locations_if([[
1128*cda5da8dSAndroid Build Coastguard Worker         yyerror_range[1].location = yystack_[0].location;]])[
1129*cda5da8dSAndroid Build Coastguard Worker         yy_destroy_ ("Error: popping", yystack_[0]);
1130*cda5da8dSAndroid Build Coastguard Worker         yypop_ ();
1131*cda5da8dSAndroid Build Coastguard Worker         YY_STACK_PRINT ();
1132*cda5da8dSAndroid Build Coastguard Worker       }
1133*cda5da8dSAndroid Build Coastguard Worker     {
1134*cda5da8dSAndroid Build Coastguard Worker       stack_symbol_type error_token;
1135*cda5da8dSAndroid Build Coastguard Worker ]b4_locations_if([[
1136*cda5da8dSAndroid Build Coastguard Worker       yyerror_range[2].location = yyla.location;
1137*cda5da8dSAndroid Build Coastguard Worker       YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
1138*cda5da8dSAndroid Build Coastguard Worker 
1139*cda5da8dSAndroid Build Coastguard Worker       // Shift the error token.]b4_lac_if([[
1140*cda5da8dSAndroid Build Coastguard Worker       yy_lac_discard_ ("error recovery");]])[
1141*cda5da8dSAndroid Build Coastguard Worker       error_token.state = state_type (yyn);
1142*cda5da8dSAndroid Build Coastguard Worker       yypush_ ("Shifting", YY_MOVE (error_token));
1143*cda5da8dSAndroid Build Coastguard Worker     }
1144*cda5da8dSAndroid Build Coastguard Worker     goto yynewstate;
1145*cda5da8dSAndroid Build Coastguard Worker 
1146*cda5da8dSAndroid Build Coastguard Worker 
1147*cda5da8dSAndroid Build Coastguard Worker   /*-------------------------------------.
1148*cda5da8dSAndroid Build Coastguard Worker   | yyacceptlab -- YYACCEPT comes here.  |
1149*cda5da8dSAndroid Build Coastguard Worker   `-------------------------------------*/
1150*cda5da8dSAndroid Build Coastguard Worker   yyacceptlab:
1151*cda5da8dSAndroid Build Coastguard Worker     yyresult = 0;
1152*cda5da8dSAndroid Build Coastguard Worker     goto yyreturn;
1153*cda5da8dSAndroid Build Coastguard Worker 
1154*cda5da8dSAndroid Build Coastguard Worker 
1155*cda5da8dSAndroid Build Coastguard Worker   /*-----------------------------------.
1156*cda5da8dSAndroid Build Coastguard Worker   | yyabortlab -- YYABORT comes here.  |
1157*cda5da8dSAndroid Build Coastguard Worker   `-----------------------------------*/
1158*cda5da8dSAndroid Build Coastguard Worker   yyabortlab:
1159*cda5da8dSAndroid Build Coastguard Worker     yyresult = 1;
1160*cda5da8dSAndroid Build Coastguard Worker     goto yyreturn;
1161*cda5da8dSAndroid Build Coastguard Worker 
1162*cda5da8dSAndroid Build Coastguard Worker 
1163*cda5da8dSAndroid Build Coastguard Worker   /*-----------------------------------------------------.
1164*cda5da8dSAndroid Build Coastguard Worker   | yyreturn -- parsing is finished, return the result.  |
1165*cda5da8dSAndroid Build Coastguard Worker   `-----------------------------------------------------*/
1166*cda5da8dSAndroid Build Coastguard Worker   yyreturn:
1167*cda5da8dSAndroid Build Coastguard Worker     if (!yyla.empty ())
1168*cda5da8dSAndroid Build Coastguard Worker       yy_destroy_ ("Cleanup: discarding lookahead", yyla);
1169*cda5da8dSAndroid Build Coastguard Worker 
1170*cda5da8dSAndroid Build Coastguard Worker     /* Do not reclaim the symbols of the rule whose action triggered
1171*cda5da8dSAndroid Build Coastguard Worker        this YYABORT or YYACCEPT.  */
1172*cda5da8dSAndroid Build Coastguard Worker     yypop_ (yylen);
1173*cda5da8dSAndroid Build Coastguard Worker     YY_STACK_PRINT ();
1174*cda5da8dSAndroid Build Coastguard Worker     while (1 < yystack_.size ())
1175*cda5da8dSAndroid Build Coastguard Worker       {
1176*cda5da8dSAndroid Build Coastguard Worker         yy_destroy_ ("Cleanup: popping", yystack_[0]);
1177*cda5da8dSAndroid Build Coastguard Worker         yypop_ ();
1178*cda5da8dSAndroid Build Coastguard Worker       }
1179*cda5da8dSAndroid Build Coastguard Worker 
1180*cda5da8dSAndroid Build Coastguard Worker     return yyresult;
1181*cda5da8dSAndroid Build Coastguard Worker   }
1182*cda5da8dSAndroid Build Coastguard Worker #if YY_EXCEPTIONS
1183*cda5da8dSAndroid Build Coastguard Worker     catch (...)
1184*cda5da8dSAndroid Build Coastguard Worker       {
1185*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
1186*cda5da8dSAndroid Build Coastguard Worker         // Do not try to display the values of the reclaimed symbols,
1187*cda5da8dSAndroid Build Coastguard Worker         // as their printers might throw an exception.
1188*cda5da8dSAndroid Build Coastguard Worker         if (!yyla.empty ())
1189*cda5da8dSAndroid Build Coastguard Worker           yy_destroy_ (YY_NULLPTR, yyla);
1190*cda5da8dSAndroid Build Coastguard Worker 
1191*cda5da8dSAndroid Build Coastguard Worker         while (1 < yystack_.size ())
1192*cda5da8dSAndroid Build Coastguard Worker           {
1193*cda5da8dSAndroid Build Coastguard Worker             yy_destroy_ (YY_NULLPTR, yystack_[0]);
1194*cda5da8dSAndroid Build Coastguard Worker             yypop_ ();
1195*cda5da8dSAndroid Build Coastguard Worker           }
1196*cda5da8dSAndroid Build Coastguard Worker         throw;
1197*cda5da8dSAndroid Build Coastguard Worker       }
1198*cda5da8dSAndroid Build Coastguard Worker #endif // YY_EXCEPTIONS
1199*cda5da8dSAndroid Build Coastguard Worker   }
1200*cda5da8dSAndroid Build Coastguard Worker 
1201*cda5da8dSAndroid Build Coastguard Worker   void
1202*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::error (const syntax_error& yyexc)
1203*cda5da8dSAndroid Build Coastguard Worker   {
1204*cda5da8dSAndroid Build Coastguard Worker     error (]b4_join(b4_locations_if([yyexc.location]),
1205*cda5da8dSAndroid Build Coastguard Worker                     [[yyexc.what ()]])[);
1206*cda5da8dSAndroid Build Coastguard Worker   }
1207*cda5da8dSAndroid Build Coastguard Worker 
1208*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch([custom\|detailed],
1209*cda5da8dSAndroid Build Coastguard Worker [[  const char *
1210*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::symbol_name (symbol_kind_type yysymbol)
1211*cda5da8dSAndroid Build Coastguard Worker   {
1212*cda5da8dSAndroid Build Coastguard Worker     static const char *const yy_sname[] =
1213*cda5da8dSAndroid Build Coastguard Worker     {
1214*cda5da8dSAndroid Build Coastguard Worker     ]b4_symbol_names[
1215*cda5da8dSAndroid Build Coastguard Worker     };]b4_has_translations_if([[
1216*cda5da8dSAndroid Build Coastguard Worker     /* YYTRANSLATABLE[SYMBOL-NUM] -- Whether YY_SNAME[SYMBOL-NUM] is
1217*cda5da8dSAndroid Build Coastguard Worker        internationalizable.  */
1218*cda5da8dSAndroid Build Coastguard Worker     static ]b4_int_type_for([b4_translatable])[ yytranslatable[] =
1219*cda5da8dSAndroid Build Coastguard Worker     {
1220*cda5da8dSAndroid Build Coastguard Worker     ]b4_translatable[
1221*cda5da8dSAndroid Build Coastguard Worker     };
1222*cda5da8dSAndroid Build Coastguard Worker     return (yysymbol < YYNTOKENS && yytranslatable[yysymbol]
1223*cda5da8dSAndroid Build Coastguard Worker             ? _(yy_sname[yysymbol])
1224*cda5da8dSAndroid Build Coastguard Worker             : yy_sname[yysymbol]);]], [[
1225*cda5da8dSAndroid Build Coastguard Worker     return yy_sname[yysymbol];]])[
1226*cda5da8dSAndroid Build Coastguard Worker   }
1227*cda5da8dSAndroid Build Coastguard Worker ]],
1228*cda5da8dSAndroid Build Coastguard Worker [simple],
1229*cda5da8dSAndroid Build Coastguard Worker [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
1230*cda5da8dSAndroid Build Coastguard Worker   const char *
1231*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::symbol_name (symbol_kind_type yysymbol)
1232*cda5da8dSAndroid Build Coastguard Worker   {
1233*cda5da8dSAndroid Build Coastguard Worker     return yytname_[yysymbol];
1234*cda5da8dSAndroid Build Coastguard Worker   }
1235*cda5da8dSAndroid Build Coastguard Worker #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
1236*cda5da8dSAndroid Build Coastguard Worker ]],
1237*cda5da8dSAndroid Build Coastguard Worker [verbose],
1238*cda5da8dSAndroid Build Coastguard Worker [[  /* Return YYSTR after stripping away unnecessary quotes and
1239*cda5da8dSAndroid Build Coastguard Worker      backslashes, so that it's suitable for yyerror.  The heuristic is
1240*cda5da8dSAndroid Build Coastguard Worker      that double-quoting is unnecessary unless the string contains an
1241*cda5da8dSAndroid Build Coastguard Worker      apostrophe, a comma, or backslash (other than backslash-backslash).
1242*cda5da8dSAndroid Build Coastguard Worker      YYSTR is taken from yytname.  */
1243*cda5da8dSAndroid Build Coastguard Worker   std::string
1244*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yytnamerr_ (const char *yystr)
1245*cda5da8dSAndroid Build Coastguard Worker   {
1246*cda5da8dSAndroid Build Coastguard Worker     if (*yystr == '"')
1247*cda5da8dSAndroid Build Coastguard Worker       {
1248*cda5da8dSAndroid Build Coastguard Worker         std::string yyr;
1249*cda5da8dSAndroid Build Coastguard Worker         char const *yyp = yystr;
1250*cda5da8dSAndroid Build Coastguard Worker 
1251*cda5da8dSAndroid Build Coastguard Worker         for (;;)
1252*cda5da8dSAndroid Build Coastguard Worker           switch (*++yyp)
1253*cda5da8dSAndroid Build Coastguard Worker             {
1254*cda5da8dSAndroid Build Coastguard Worker             case '\'':
1255*cda5da8dSAndroid Build Coastguard Worker             case ',':
1256*cda5da8dSAndroid Build Coastguard Worker               goto do_not_strip_quotes;
1257*cda5da8dSAndroid Build Coastguard Worker 
1258*cda5da8dSAndroid Build Coastguard Worker             case '\\':
1259*cda5da8dSAndroid Build Coastguard Worker               if (*++yyp != '\\')
1260*cda5da8dSAndroid Build Coastguard Worker                 goto do_not_strip_quotes;
1261*cda5da8dSAndroid Build Coastguard Worker               else
1262*cda5da8dSAndroid Build Coastguard Worker                 goto append;
1263*cda5da8dSAndroid Build Coastguard Worker 
1264*cda5da8dSAndroid Build Coastguard Worker             append:
1265*cda5da8dSAndroid Build Coastguard Worker             default:
1266*cda5da8dSAndroid Build Coastguard Worker               yyr += *yyp;
1267*cda5da8dSAndroid Build Coastguard Worker               break;
1268*cda5da8dSAndroid Build Coastguard Worker 
1269*cda5da8dSAndroid Build Coastguard Worker             case '"':
1270*cda5da8dSAndroid Build Coastguard Worker               return yyr;
1271*cda5da8dSAndroid Build Coastguard Worker             }
1272*cda5da8dSAndroid Build Coastguard Worker       do_not_strip_quotes: ;
1273*cda5da8dSAndroid Build Coastguard Worker       }
1274*cda5da8dSAndroid Build Coastguard Worker 
1275*cda5da8dSAndroid Build Coastguard Worker     return yystr;
1276*cda5da8dSAndroid Build Coastguard Worker   }
1277*cda5da8dSAndroid Build Coastguard Worker 
1278*cda5da8dSAndroid Build Coastguard Worker   std::string
1279*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::symbol_name (symbol_kind_type yysymbol)
1280*cda5da8dSAndroid Build Coastguard Worker   {
1281*cda5da8dSAndroid Build Coastguard Worker     return yytnamerr_ (yytname_[yysymbol]);
1282*cda5da8dSAndroid Build Coastguard Worker   }
1283*cda5da8dSAndroid Build Coastguard Worker ]])[
1284*cda5da8dSAndroid Build Coastguard Worker 
1285*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch([custom\|detailed\|verbose], [[
1286*cda5da8dSAndroid Build Coastguard Worker   // ]b4_parser_class[::context.
1287*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::context::context (const ]b4_parser_class[& yyparser, const symbol_type& yyla)
1288*cda5da8dSAndroid Build Coastguard Worker     : yyparser_ (yyparser)
1289*cda5da8dSAndroid Build Coastguard Worker     , yyla_ (yyla)
1290*cda5da8dSAndroid Build Coastguard Worker   {}
1291*cda5da8dSAndroid Build Coastguard Worker 
1292*cda5da8dSAndroid Build Coastguard Worker   int
1293*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
1294*cda5da8dSAndroid Build Coastguard Worker   {
1295*cda5da8dSAndroid Build Coastguard Worker     // Actual number of expected tokens
1296*cda5da8dSAndroid Build Coastguard Worker     int yycount = 0;
1297*cda5da8dSAndroid Build Coastguard Worker ]b4_lac_if([[
1298*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
1299*cda5da8dSAndroid Build Coastguard Worker     // Execute LAC once. We don't care if it is successful, we
1300*cda5da8dSAndroid Build Coastguard Worker     // only do it for the sake of debugging output.
1301*cda5da8dSAndroid Build Coastguard Worker     if (!yyparser_.yy_lac_established_)
1302*cda5da8dSAndroid Build Coastguard Worker       yyparser_.yy_lac_check_ (yyla_.kind ());
1303*cda5da8dSAndroid Build Coastguard Worker #endif
1304*cda5da8dSAndroid Build Coastguard Worker 
1305*cda5da8dSAndroid Build Coastguard Worker     for (int yyx = 0; yyx < YYNTOKENS; ++yyx)
1306*cda5da8dSAndroid Build Coastguard Worker       {
1307*cda5da8dSAndroid Build Coastguard Worker         symbol_kind_type yysym = YY_CAST (symbol_kind_type, yyx);
1308*cda5da8dSAndroid Build Coastguard Worker         if (yysym != ]b4_symbol(error, kind)[
1309*cda5da8dSAndroid Build Coastguard Worker             && yysym != ]b4_symbol(undef, kind)[
1310*cda5da8dSAndroid Build Coastguard Worker             && yyparser_.yy_lac_check_ (yysym))
1311*cda5da8dSAndroid Build Coastguard Worker           {
1312*cda5da8dSAndroid Build Coastguard Worker             if (!yyarg)
1313*cda5da8dSAndroid Build Coastguard Worker               ++yycount;
1314*cda5da8dSAndroid Build Coastguard Worker             else if (yycount == yyargn)
1315*cda5da8dSAndroid Build Coastguard Worker               return 0;
1316*cda5da8dSAndroid Build Coastguard Worker             else
1317*cda5da8dSAndroid Build Coastguard Worker               yyarg[yycount++] = yysym;
1318*cda5da8dSAndroid Build Coastguard Worker           }
1319*cda5da8dSAndroid Build Coastguard Worker       }]], [[
1320*cda5da8dSAndroid Build Coastguard Worker     const int yyn = yypact_[+yyparser_.yystack_[0].state];
1321*cda5da8dSAndroid Build Coastguard Worker     if (!yy_pact_value_is_default_ (yyn))
1322*cda5da8dSAndroid Build Coastguard Worker       {
1323*cda5da8dSAndroid Build Coastguard Worker         /* Start YYX at -YYN if negative to avoid negative indexes in
1324*cda5da8dSAndroid Build Coastguard Worker            YYCHECK.  In other words, skip the first -YYN actions for
1325*cda5da8dSAndroid Build Coastguard Worker            this state because they are default actions.  */
1326*cda5da8dSAndroid Build Coastguard Worker         const int yyxbegin = yyn < 0 ? -yyn : 0;
1327*cda5da8dSAndroid Build Coastguard Worker         // Stay within bounds of both yycheck and yytname.
1328*cda5da8dSAndroid Build Coastguard Worker         const int yychecklim = yylast_ - yyn + 1;
1329*cda5da8dSAndroid Build Coastguard Worker         const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1330*cda5da8dSAndroid Build Coastguard Worker         for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1331*cda5da8dSAndroid Build Coastguard Worker           if (yycheck_[yyx + yyn] == yyx && yyx != ]b4_symbol(error, kind)[
1332*cda5da8dSAndroid Build Coastguard Worker               && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1333*cda5da8dSAndroid Build Coastguard Worker             {
1334*cda5da8dSAndroid Build Coastguard Worker               if (!yyarg)
1335*cda5da8dSAndroid Build Coastguard Worker                 ++yycount;
1336*cda5da8dSAndroid Build Coastguard Worker               else if (yycount == yyargn)
1337*cda5da8dSAndroid Build Coastguard Worker                 return 0;
1338*cda5da8dSAndroid Build Coastguard Worker               else
1339*cda5da8dSAndroid Build Coastguard Worker                 yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
1340*cda5da8dSAndroid Build Coastguard Worker             }
1341*cda5da8dSAndroid Build Coastguard Worker       }
1342*cda5da8dSAndroid Build Coastguard Worker ]])[
1343*cda5da8dSAndroid Build Coastguard Worker     if (yyarg && yycount == 0 && 0 < yyargn)
1344*cda5da8dSAndroid Build Coastguard Worker       yyarg[0] = ]b4_symbol(empty, kind)[;
1345*cda5da8dSAndroid Build Coastguard Worker     return yycount;
1346*cda5da8dSAndroid Build Coastguard Worker   }
1347*cda5da8dSAndroid Build Coastguard Worker 
1348*cda5da8dSAndroid Build Coastguard Worker ]])[
1349*cda5da8dSAndroid Build Coastguard Worker 
1350*cda5da8dSAndroid Build Coastguard Worker ]b4_lac_if([[
1351*cda5da8dSAndroid Build Coastguard Worker   bool
1352*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_lac_check_ (symbol_kind_type yytoken) const
1353*cda5da8dSAndroid Build Coastguard Worker   {
1354*cda5da8dSAndroid Build Coastguard Worker     // Logically, the yylac_stack's lifetime is confined to this function.
1355*cda5da8dSAndroid Build Coastguard Worker     // Clear it, to get rid of potential left-overs from previous call.
1356*cda5da8dSAndroid Build Coastguard Worker     yylac_stack_.clear ();
1357*cda5da8dSAndroid Build Coastguard Worker     // Reduce until we encounter a shift and thereby accept the token.
1358*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
1359*cda5da8dSAndroid Build Coastguard Worker     YYCDEBUG << "LAC: checking lookahead " << symbol_name (yytoken) << ':';
1360*cda5da8dSAndroid Build Coastguard Worker #endif
1361*cda5da8dSAndroid Build Coastguard Worker     std::ptrdiff_t lac_top = 0;
1362*cda5da8dSAndroid Build Coastguard Worker     while (true)
1363*cda5da8dSAndroid Build Coastguard Worker       {
1364*cda5da8dSAndroid Build Coastguard Worker         state_type top_state = (yylac_stack_.empty ()
1365*cda5da8dSAndroid Build Coastguard Worker                                 ? yystack_[lac_top].state
1366*cda5da8dSAndroid Build Coastguard Worker                                 : yylac_stack_.back ());
1367*cda5da8dSAndroid Build Coastguard Worker         int yyrule = yypact_[+top_state];
1368*cda5da8dSAndroid Build Coastguard Worker         if (yy_pact_value_is_default_ (yyrule)
1369*cda5da8dSAndroid Build Coastguard Worker             || (yyrule += yytoken) < 0 || yylast_ < yyrule
1370*cda5da8dSAndroid Build Coastguard Worker             || yycheck_[yyrule] != yytoken)
1371*cda5da8dSAndroid Build Coastguard Worker           {
1372*cda5da8dSAndroid Build Coastguard Worker             // Use the default action.
1373*cda5da8dSAndroid Build Coastguard Worker             yyrule = yydefact_[+top_state];
1374*cda5da8dSAndroid Build Coastguard Worker             if (yyrule == 0)
1375*cda5da8dSAndroid Build Coastguard Worker               {
1376*cda5da8dSAndroid Build Coastguard Worker                 YYCDEBUG << " Err\n";
1377*cda5da8dSAndroid Build Coastguard Worker                 return false;
1378*cda5da8dSAndroid Build Coastguard Worker               }
1379*cda5da8dSAndroid Build Coastguard Worker           }
1380*cda5da8dSAndroid Build Coastguard Worker         else
1381*cda5da8dSAndroid Build Coastguard Worker           {
1382*cda5da8dSAndroid Build Coastguard Worker             // Use the action from yytable.
1383*cda5da8dSAndroid Build Coastguard Worker             yyrule = yytable_[yyrule];
1384*cda5da8dSAndroid Build Coastguard Worker             if (yy_table_value_is_error_ (yyrule))
1385*cda5da8dSAndroid Build Coastguard Worker               {
1386*cda5da8dSAndroid Build Coastguard Worker                 YYCDEBUG << " Err\n";
1387*cda5da8dSAndroid Build Coastguard Worker                 return false;
1388*cda5da8dSAndroid Build Coastguard Worker               }
1389*cda5da8dSAndroid Build Coastguard Worker             if (0 < yyrule)
1390*cda5da8dSAndroid Build Coastguard Worker               {
1391*cda5da8dSAndroid Build Coastguard Worker                 YYCDEBUG << " S" << yyrule << '\n';
1392*cda5da8dSAndroid Build Coastguard Worker                 return true;
1393*cda5da8dSAndroid Build Coastguard Worker               }
1394*cda5da8dSAndroid Build Coastguard Worker             yyrule = -yyrule;
1395*cda5da8dSAndroid Build Coastguard Worker           }
1396*cda5da8dSAndroid Build Coastguard Worker         // By now we know we have to simulate a reduce.
1397*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << " R" << yyrule - 1;
1398*cda5da8dSAndroid Build Coastguard Worker         // Pop the corresponding number of values from the stack.
1399*cda5da8dSAndroid Build Coastguard Worker         {
1400*cda5da8dSAndroid Build Coastguard Worker           std::ptrdiff_t yylen = yyr2_[yyrule];
1401*cda5da8dSAndroid Build Coastguard Worker           // First pop from the LAC stack as many tokens as possible.
1402*cda5da8dSAndroid Build Coastguard Worker           std::ptrdiff_t lac_size = std::ptrdiff_t (yylac_stack_.size ());
1403*cda5da8dSAndroid Build Coastguard Worker           if (yylen < lac_size)
1404*cda5da8dSAndroid Build Coastguard Worker             {
1405*cda5da8dSAndroid Build Coastguard Worker               yylac_stack_.resize (std::size_t (lac_size - yylen));
1406*cda5da8dSAndroid Build Coastguard Worker               yylen = 0;
1407*cda5da8dSAndroid Build Coastguard Worker             }
1408*cda5da8dSAndroid Build Coastguard Worker           else if (lac_size)
1409*cda5da8dSAndroid Build Coastguard Worker             {
1410*cda5da8dSAndroid Build Coastguard Worker               yylac_stack_.clear ();
1411*cda5da8dSAndroid Build Coastguard Worker               yylen -= lac_size;
1412*cda5da8dSAndroid Build Coastguard Worker             }
1413*cda5da8dSAndroid Build Coastguard Worker           // Only afterwards look at the main stack.
1414*cda5da8dSAndroid Build Coastguard Worker           // We simulate popping elements by incrementing lac_top.
1415*cda5da8dSAndroid Build Coastguard Worker           lac_top += yylen;
1416*cda5da8dSAndroid Build Coastguard Worker         }
1417*cda5da8dSAndroid Build Coastguard Worker         // Keep top_state in sync with the updated stack.
1418*cda5da8dSAndroid Build Coastguard Worker         top_state = (yylac_stack_.empty ()
1419*cda5da8dSAndroid Build Coastguard Worker                      ? yystack_[lac_top].state
1420*cda5da8dSAndroid Build Coastguard Worker                      : yylac_stack_.back ());
1421*cda5da8dSAndroid Build Coastguard Worker         // Push the resulting state of the reduction.
1422*cda5da8dSAndroid Build Coastguard Worker         state_type state = yy_lr_goto_state_ (top_state, yyr1_[yyrule]);
1423*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << " G" << int (state);
1424*cda5da8dSAndroid Build Coastguard Worker         yylac_stack_.push_back (state);
1425*cda5da8dSAndroid Build Coastguard Worker       }
1426*cda5da8dSAndroid Build Coastguard Worker   }
1427*cda5da8dSAndroid Build Coastguard Worker 
1428*cda5da8dSAndroid Build Coastguard Worker   // Establish the initial context if no initial context currently exists.
1429*cda5da8dSAndroid Build Coastguard Worker   bool
1430*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_lac_establish_ (symbol_kind_type yytoken)
1431*cda5da8dSAndroid Build Coastguard Worker   {
1432*cda5da8dSAndroid Build Coastguard Worker     /* Establish the initial context for the current lookahead if no initial
1433*cda5da8dSAndroid Build Coastguard Worker        context is currently established.
1434*cda5da8dSAndroid Build Coastguard Worker 
1435*cda5da8dSAndroid Build Coastguard Worker        We define a context as a snapshot of the parser stacks.  We define
1436*cda5da8dSAndroid Build Coastguard Worker        the initial context for a lookahead as the context in which the
1437*cda5da8dSAndroid Build Coastguard Worker        parser initially examines that lookahead in order to select a
1438*cda5da8dSAndroid Build Coastguard Worker        syntactic action.  Thus, if the lookahead eventually proves
1439*cda5da8dSAndroid Build Coastguard Worker        syntactically unacceptable (possibly in a later context reached via a
1440*cda5da8dSAndroid Build Coastguard Worker        series of reductions), the initial context can be used to determine
1441*cda5da8dSAndroid Build Coastguard Worker        the exact set of tokens that would be syntactically acceptable in the
1442*cda5da8dSAndroid Build Coastguard Worker        lookahead's place.  Moreover, it is the context after which any
1443*cda5da8dSAndroid Build Coastguard Worker        further semantic actions would be erroneous because they would be
1444*cda5da8dSAndroid Build Coastguard Worker        determined by a syntactically unacceptable token.
1445*cda5da8dSAndroid Build Coastguard Worker 
1446*cda5da8dSAndroid Build Coastguard Worker        yy_lac_establish_ should be invoked when a reduction is about to be
1447*cda5da8dSAndroid Build Coastguard Worker        performed in an inconsistent state (which, for the purposes of LAC,
1448*cda5da8dSAndroid Build Coastguard Worker        includes consistent states that don't know they're consistent because
1449*cda5da8dSAndroid Build Coastguard Worker        their default reductions have been disabled).
1450*cda5da8dSAndroid Build Coastguard Worker 
1451*cda5da8dSAndroid Build Coastguard Worker        For parse.lac=full, the implementation of yy_lac_establish_ is as
1452*cda5da8dSAndroid Build Coastguard Worker        follows.  If no initial context is currently established for the
1453*cda5da8dSAndroid Build Coastguard Worker        current lookahead, then check if that lookahead can eventually be
1454*cda5da8dSAndroid Build Coastguard Worker        shifted if syntactic actions continue from the current context.  */
1455*cda5da8dSAndroid Build Coastguard Worker     if (yy_lac_established_)
1456*cda5da8dSAndroid Build Coastguard Worker       return true;
1457*cda5da8dSAndroid Build Coastguard Worker     else
1458*cda5da8dSAndroid Build Coastguard Worker       {
1459*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG
1460*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << "LAC: initial context established for "
1461*cda5da8dSAndroid Build Coastguard Worker                  << symbol_name (yytoken) << '\n';
1462*cda5da8dSAndroid Build Coastguard Worker #endif
1463*cda5da8dSAndroid Build Coastguard Worker         yy_lac_established_ = true;
1464*cda5da8dSAndroid Build Coastguard Worker         return yy_lac_check_ (yytoken);
1465*cda5da8dSAndroid Build Coastguard Worker       }
1466*cda5da8dSAndroid Build Coastguard Worker   }
1467*cda5da8dSAndroid Build Coastguard Worker 
1468*cda5da8dSAndroid Build Coastguard Worker   // Discard any previous initial lookahead context.
1469*cda5da8dSAndroid Build Coastguard Worker   void
1470*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_lac_discard_ (const char* event)
1471*cda5da8dSAndroid Build Coastguard Worker   {
1472*cda5da8dSAndroid Build Coastguard Worker    /* Discard any previous initial lookahead context because of Event,
1473*cda5da8dSAndroid Build Coastguard Worker       which may be a lookahead change or an invalidation of the currently
1474*cda5da8dSAndroid Build Coastguard Worker       established initial context for the current lookahead.
1475*cda5da8dSAndroid Build Coastguard Worker 
1476*cda5da8dSAndroid Build Coastguard Worker       The most common example of a lookahead change is a shift.  An example
1477*cda5da8dSAndroid Build Coastguard Worker       of both cases is syntax error recovery.  That is, a syntax error
1478*cda5da8dSAndroid Build Coastguard Worker       occurs when the lookahead is syntactically erroneous for the
1479*cda5da8dSAndroid Build Coastguard Worker       currently established initial context, so error recovery manipulates
1480*cda5da8dSAndroid Build Coastguard Worker       the parser stacks to try to find a new initial context in which the
1481*cda5da8dSAndroid Build Coastguard Worker       current lookahead is syntactically acceptable.  If it fails to find
1482*cda5da8dSAndroid Build Coastguard Worker       such a context, it discards the lookahead.  */
1483*cda5da8dSAndroid Build Coastguard Worker     if (yy_lac_established_)
1484*cda5da8dSAndroid Build Coastguard Worker       {
1485*cda5da8dSAndroid Build Coastguard Worker         YYCDEBUG << "LAC: initial context discarded due to "
1486*cda5da8dSAndroid Build Coastguard Worker                  << event << '\n';
1487*cda5da8dSAndroid Build Coastguard Worker         yy_lac_established_ = false;
1488*cda5da8dSAndroid Build Coastguard Worker       }
1489*cda5da8dSAndroid Build Coastguard Worker   }]])[
1490*cda5da8dSAndroid Build Coastguard Worker 
1491*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch([detailed\|verbose], [[
1492*cda5da8dSAndroid Build Coastguard Worker   int
1493*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_syntax_error_arguments_ (const context& yyctx,
1494*cda5da8dSAndroid Build Coastguard Worker                                                  symbol_kind_type yyarg[], int yyargn) const
1495*cda5da8dSAndroid Build Coastguard Worker   {
1496*cda5da8dSAndroid Build Coastguard Worker     /* There are many possibilities here to consider:
1497*cda5da8dSAndroid Build Coastguard Worker        - If this state is a consistent state with a default action, then
1498*cda5da8dSAndroid Build Coastguard Worker          the only way this function was invoked is if the default action
1499*cda5da8dSAndroid Build Coastguard Worker          is an error action.  In that case, don't check for expected
1500*cda5da8dSAndroid Build Coastguard Worker          tokens because there are none.
1501*cda5da8dSAndroid Build Coastguard Worker        - The only way there can be no lookahead present (in yyla) is
1502*cda5da8dSAndroid Build Coastguard Worker          if this state is a consistent state with a default action.
1503*cda5da8dSAndroid Build Coastguard Worker          Thus, detecting the absence of a lookahead is sufficient to
1504*cda5da8dSAndroid Build Coastguard Worker          determine that there is no unexpected or expected token to
1505*cda5da8dSAndroid Build Coastguard Worker          report.  In that case, just report a simple "syntax error".
1506*cda5da8dSAndroid Build Coastguard Worker        - Don't assume there isn't a lookahead just because this state is
1507*cda5da8dSAndroid Build Coastguard Worker          a consistent state with a default action.  There might have
1508*cda5da8dSAndroid Build Coastguard Worker          been a previous inconsistent state, consistent state with a
1509*cda5da8dSAndroid Build Coastguard Worker          non-default action, or user semantic action that manipulated
1510*cda5da8dSAndroid Build Coastguard Worker          yyla.  (However, yyla is currently not documented for users.)]b4_lac_if([[
1511*cda5da8dSAndroid Build Coastguard Worker          In the first two cases, it might appear that the current syntax
1512*cda5da8dSAndroid Build Coastguard Worker          error should have been detected in the previous state when
1513*cda5da8dSAndroid Build Coastguard Worker          yy_lac_check was invoked.  However, at that time, there might
1514*cda5da8dSAndroid Build Coastguard Worker          have been a different syntax error that discarded a different
1515*cda5da8dSAndroid Build Coastguard Worker          initial context during error recovery, leaving behind the
1516*cda5da8dSAndroid Build Coastguard Worker          current lookahead.]], [[
1517*cda5da8dSAndroid Build Coastguard Worker        - Of course, the expected token list depends on states to have
1518*cda5da8dSAndroid Build Coastguard Worker          correct lookahead information, and it depends on the parser not
1519*cda5da8dSAndroid Build Coastguard Worker          to perform extra reductions after fetching a lookahead from the
1520*cda5da8dSAndroid Build Coastguard Worker          scanner and before detecting a syntax error.  Thus, state merging
1521*cda5da8dSAndroid Build Coastguard Worker          (from LALR or IELR) and default reductions corrupt the expected
1522*cda5da8dSAndroid Build Coastguard Worker          token list.  However, the list is correct for canonical LR with
1523*cda5da8dSAndroid Build Coastguard Worker          one exception: it will still contain any token that will not be
1524*cda5da8dSAndroid Build Coastguard Worker          accepted due to an error action in a later state.]])[
1525*cda5da8dSAndroid Build Coastguard Worker     */
1526*cda5da8dSAndroid Build Coastguard Worker 
1527*cda5da8dSAndroid Build Coastguard Worker     if (!yyctx.lookahead ().empty ())
1528*cda5da8dSAndroid Build Coastguard Worker       {
1529*cda5da8dSAndroid Build Coastguard Worker         if (yyarg)
1530*cda5da8dSAndroid Build Coastguard Worker           yyarg[0] = yyctx.token ();
1531*cda5da8dSAndroid Build Coastguard Worker         int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1532*cda5da8dSAndroid Build Coastguard Worker         return yyn + 1;
1533*cda5da8dSAndroid Build Coastguard Worker       }
1534*cda5da8dSAndroid Build Coastguard Worker     return 0;
1535*cda5da8dSAndroid Build Coastguard Worker   }
1536*cda5da8dSAndroid Build Coastguard Worker 
1537*cda5da8dSAndroid Build Coastguard Worker   // Generate an error message.
1538*cda5da8dSAndroid Build Coastguard Worker   std::string
1539*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yysyntax_error_ (const context& yyctx) const
1540*cda5da8dSAndroid Build Coastguard Worker   {
1541*cda5da8dSAndroid Build Coastguard Worker     // Its maximum.
1542*cda5da8dSAndroid Build Coastguard Worker     enum { YYARGS_MAX = 5 };
1543*cda5da8dSAndroid Build Coastguard Worker     // Arguments of yyformat.
1544*cda5da8dSAndroid Build Coastguard Worker     symbol_kind_type yyarg[YYARGS_MAX];
1545*cda5da8dSAndroid Build Coastguard Worker     int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
1546*cda5da8dSAndroid Build Coastguard Worker 
1547*cda5da8dSAndroid Build Coastguard Worker     char const* yyformat = YY_NULLPTR;
1548*cda5da8dSAndroid Build Coastguard Worker     switch (yycount)
1549*cda5da8dSAndroid Build Coastguard Worker       {
1550*cda5da8dSAndroid Build Coastguard Worker #define YYCASE_(N, S)                         \
1551*cda5da8dSAndroid Build Coastguard Worker         case N:                               \
1552*cda5da8dSAndroid Build Coastguard Worker           yyformat = S;                       \
1553*cda5da8dSAndroid Build Coastguard Worker         break
1554*cda5da8dSAndroid Build Coastguard Worker       default: // Avoid compiler warnings.
1555*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (0, YY_("syntax error"));
1556*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (1, YY_("syntax error, unexpected %s"));
1557*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
1558*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1559*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1560*cda5da8dSAndroid Build Coastguard Worker         YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1561*cda5da8dSAndroid Build Coastguard Worker #undef YYCASE_
1562*cda5da8dSAndroid Build Coastguard Worker       }
1563*cda5da8dSAndroid Build Coastguard Worker 
1564*cda5da8dSAndroid Build Coastguard Worker     std::string yyres;
1565*cda5da8dSAndroid Build Coastguard Worker     // Argument number.
1566*cda5da8dSAndroid Build Coastguard Worker     std::ptrdiff_t yyi = 0;
1567*cda5da8dSAndroid Build Coastguard Worker     for (char const* yyp = yyformat; *yyp; ++yyp)
1568*cda5da8dSAndroid Build Coastguard Worker       if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1569*cda5da8dSAndroid Build Coastguard Worker         {
1570*cda5da8dSAndroid Build Coastguard Worker           yyres += symbol_name (yyarg[yyi++]);
1571*cda5da8dSAndroid Build Coastguard Worker           ++yyp;
1572*cda5da8dSAndroid Build Coastguard Worker         }
1573*cda5da8dSAndroid Build Coastguard Worker       else
1574*cda5da8dSAndroid Build Coastguard Worker         yyres += *yyp;
1575*cda5da8dSAndroid Build Coastguard Worker     return yyres;
1576*cda5da8dSAndroid Build Coastguard Worker   }]])[
1577*cda5da8dSAndroid Build Coastguard Worker 
1578*cda5da8dSAndroid Build Coastguard Worker 
1579*cda5da8dSAndroid Build Coastguard Worker   const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class::yypact_ninf_ = b4_pact_ninf[;
1580*cda5da8dSAndroid Build Coastguard Worker 
1581*cda5da8dSAndroid Build Coastguard Worker   const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class::yytable_ninf_ = b4_table_ninf[;
1582*cda5da8dSAndroid Build Coastguard Worker 
1583*cda5da8dSAndroid Build Coastguard Worker ]b4_parser_tables_define[
1584*cda5da8dSAndroid Build Coastguard Worker 
1585*cda5da8dSAndroid Build Coastguard Worker ]b4_parse_error_bmatch([simple\|verbose],
1586*cda5da8dSAndroid Build Coastguard Worker [[#if ]b4_api_PREFIX[DEBUG]b4_tname_if([[ || 1]])[
1587*cda5da8dSAndroid Build Coastguard Worker   // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1588*cda5da8dSAndroid Build Coastguard Worker   // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
1589*cda5da8dSAndroid Build Coastguard Worker   const char*
1590*cda5da8dSAndroid Build Coastguard Worker   const ]b4_parser_class[::yytname_[] =
1591*cda5da8dSAndroid Build Coastguard Worker   {
1592*cda5da8dSAndroid Build Coastguard Worker   ]b4_tname[
1593*cda5da8dSAndroid Build Coastguard Worker   };
1594*cda5da8dSAndroid Build Coastguard Worker #endif
1595*cda5da8dSAndroid Build Coastguard Worker ]])[
1596*cda5da8dSAndroid Build Coastguard Worker 
1597*cda5da8dSAndroid Build Coastguard Worker #if ]b4_api_PREFIX[DEBUG][
1598*cda5da8dSAndroid Build Coastguard Worker ]b4_integral_parser_table_define([rline], [b4_rline])[
1599*cda5da8dSAndroid Build Coastguard Worker 
1600*cda5da8dSAndroid Build Coastguard Worker   void
1601*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_stack_print_ () const
1602*cda5da8dSAndroid Build Coastguard Worker   {
1603*cda5da8dSAndroid Build Coastguard Worker     *yycdebug_ << "Stack now";
1604*cda5da8dSAndroid Build Coastguard Worker     for (stack_type::const_iterator
1605*cda5da8dSAndroid Build Coastguard Worker            i = yystack_.begin (),
1606*cda5da8dSAndroid Build Coastguard Worker            i_end = yystack_.end ();
1607*cda5da8dSAndroid Build Coastguard Worker          i != i_end; ++i)
1608*cda5da8dSAndroid Build Coastguard Worker       *yycdebug_ << ' ' << int (i->state);
1609*cda5da8dSAndroid Build Coastguard Worker     *yycdebug_ << '\n';
1610*cda5da8dSAndroid Build Coastguard Worker   }
1611*cda5da8dSAndroid Build Coastguard Worker 
1612*cda5da8dSAndroid Build Coastguard Worker   void
1613*cda5da8dSAndroid Build Coastguard Worker   ]b4_parser_class[::yy_reduce_print_ (int yyrule) const
1614*cda5da8dSAndroid Build Coastguard Worker   {
1615*cda5da8dSAndroid Build Coastguard Worker     int yylno = yyrline_[yyrule];
1616*cda5da8dSAndroid Build Coastguard Worker     int yynrhs = yyr2_[yyrule];
1617*cda5da8dSAndroid Build Coastguard Worker     // Print the symbols being reduced, and their result.
1618*cda5da8dSAndroid Build Coastguard Worker     *yycdebug_ << "Reducing stack by rule " << yyrule - 1
1619*cda5da8dSAndroid Build Coastguard Worker                << " (line " << yylno << "):\n";
1620*cda5da8dSAndroid Build Coastguard Worker     // The symbols being reduced.
1621*cda5da8dSAndroid Build Coastguard Worker     for (int yyi = 0; yyi < yynrhs; yyi++)
1622*cda5da8dSAndroid Build Coastguard Worker       YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
1623*cda5da8dSAndroid Build Coastguard Worker                        ]b4_rhs_data(yynrhs, yyi + 1)[);
1624*cda5da8dSAndroid Build Coastguard Worker   }
1625*cda5da8dSAndroid Build Coastguard Worker #endif // ]b4_api_PREFIX[DEBUG
1626*cda5da8dSAndroid Build Coastguard Worker 
1627*cda5da8dSAndroid Build Coastguard Worker ]b4_token_ctor_if([], [b4_yytranslate_define([cc])])[
1628*cda5da8dSAndroid Build Coastguard Worker ]b4_namespace_close[
1629*cda5da8dSAndroid Build Coastguard Worker ]b4_epilogue[]dnl
1630*cda5da8dSAndroid Build Coastguard Worker b4_output_end
1631*cda5da8dSAndroid Build Coastguard Worker 
1632*cda5da8dSAndroid Build Coastguard Worker 
1633*cda5da8dSAndroid Build Coastguard Worker m4_popdef([b4_copyright_years])dnl
1634