1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_divert(-1)                                                       -*- C -*-
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# C++ GLR skeleton for Bison
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is free software; you can redistribute it and/or modify
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# it under the terms of the GNU General Public License as published by
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# the Free Software Foundation; either version 2 of the License, or
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# (at your option) any later version.
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is distributed in the hope that it will be useful,
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GNU General Public License for more details.
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# You should have received a copy of the GNU General Public License
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# along with this program; if not, write to the Free Software
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# 02110-1301  USA
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This skeleton produces a C++ class that encapsulates a C glr parser.
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This is in order to reduce the maintenance burden.  The glr.c
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# skeleton is clean and pure enough so that there are no real
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# problems.  The C++ interface is the same as that of lalr1.cc.  In
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# fact, glr.c can replace yacc.c without the user noticing any
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# difference, and similarly for glr.cc replacing lalr1.cc.
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# The passing of parse-params
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   The additional arguments are stored as members of the parser
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   object, yyparser.  The C routines need to carry yyparser
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   throughout the C parser; that easy: just let yyparser become an
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   additional parse-param.  But because the C++ skeleton needs to
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   know the "real" original parse-param, we save them
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   (b4_parse_param_orig).  Note that b4_parse_param is overquoted
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   (and c.m4 strips one level of quotes).  This is a PITA, and
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   explains why there are so many levels of quotes.
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# The locations
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   We use location.cc just like lalr1.cc, but because glr.c stores
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   the locations in a (C++) union, the position and location classes
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   must not have a constructor.  Therefore, contrary to lalr1.cc, we
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   must not define "b4_location_constructors".  As a consequence the
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   user must initialize the first positions (in particular the
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   filename member).
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# We require a pure interface using locations.
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_locations_flag], [1])
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_pure_flag],      [1])
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# The header is mandatory.
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_defines_if([],
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              [m4_fatal(b4_skeleton[: using %defines is mandatory])])
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_include(b4_pkgdatadir/[c++.m4])
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_include(b4_pkgdatadir/[location.cc])
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Save the parse parameters.
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_parse_param_orig], m4_defn([b4_parse_param]))
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_yy_symbol_print_generate
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------------------
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Bypass the default implementation to generate the "yy_symbol_print"
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# and "yy_symbol_value_print" functions.
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_yy_symbol_print_generate],
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*--------------------.
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Print this symbol.  |
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`--------------------*/
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_c_ansi_function_def([yy_symbol_print],
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [static void],
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[FILE *],               []],
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[int yytype],           [yytype]],
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[const b4_namespace::b4_parser_class_name::semantic_type *yyvaluep],
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     [yyvaluep]],
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[const b4_namespace::b4_parser_class_name::location_type *yylocationp],
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     [yylocationp]],
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    b4_parse_param)[
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_use[]dnl
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[  yyparser.yy_symbol_print_ (yytype, yyvaluep]b4_locations_if([, yylocationp])[);
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Declare yyerror.
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_append([b4_post_prologue],
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[/* Line __line__ of glr.cc.  */
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_syncline([@oline@], [@ofile@])
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_c_ansi_function_decl([yyerror],
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [static void],
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[b4_namespace::b4_parser_class_name::location_type *yylocationp], [yylocationp]],
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    b4_parse_param,
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[const char* msg], [msg]])])
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Define yyerror.
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_append([b4_epilogue],
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[/* Line __line__ of glr.cc.  */
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_syncline([@oline@], [@ofile@])[
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*------------------.
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Report an error.  |
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`------------------*/
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_c_ansi_function_def([yyerror],
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [static void],
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[b4_namespace::b4_parser_class_name::location_type *yylocationp], [yylocationp]],
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    b4_parse_param,
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    [[const char* msg], [msg]])[
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_use[]dnl
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[  yyparser.error (*yylocationp, msg);
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnamespace ]b4_namespace[
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]dnl In this section, the parse param are the original parse_params.
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[  /// Build a parser object.
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    : yycdebug_ (&std::cerr)]b4_parse_param_cons[
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name::~b4_parser_class_name[ ()
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::parse ()
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return ::yyparse (*this]b4_user_args[);
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYDEBUG
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*--------------------.
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  | Print this symbol.  |
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  `--------------------*/
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  inline void
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			   const semantic_type* yyvaluep, const location_type* yylocationp)
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Pacify ``unused variable'' warnings.  */
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yyvaluep);
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYUSE (yylocationp);
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    switch (yytype)
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[        default:
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::yy_symbol_print_ (int yytype,
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			   const semantic_type* yyvaluep, const location_type* yylocationp)
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << (yytype < YYNTOKENS ? "token" : "nterm")
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	       << ' ' << yytname[yytype] << " ("
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	       << *yylocationp << ": ";
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yycdebug_ << ')';
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  std::ostream&
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_stream () const
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return *yycdebug_;
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yycdebug_ = &o;
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_level_type
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::debug_level () const
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return ::yydebug;
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_parser_class_name[::set_debug_level (debug_level_type l)
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ::yydebug = l;
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* ! YYDEBUG */
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_popdef([b4_parse_param])dnl
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[} // namespace ]b4_namespace[
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Let glr.c believe that the user arguments include the parser itself.
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifset([b4_parse_param],
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[m4_pushdef([b4_parse_param],
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    m4_dquote([[[b4_namespace::b4_parser_class_name& yyparser], [[yyparser]]],]
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_defn([b4_parse_param])))],
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[m4_pushdef([b4_parse_param],
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    [[[[b4_namespace::b4_parser_class_name& yyparser], [[yyparser]]]]])
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_include(b4_pkgdatadir/[glr.c])
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_popdef([b4_parse_param])
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@output @output_header_name@
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_copyright([Skeleton interface for Bison GLR parsers in C++],
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [2002, 2003, 2004, 2005, 2006])[
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* C++ GLR parser skeleton written by Akim Demaille.  */
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef PARSER_HEADER_H
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define PARSER_HEADER_H
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string>
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <iostream>
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Using locations.  */
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYLSP_NEEDED ]b4_locations_flag[
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnamespace ]b4_namespace[
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  class position;
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  class location;
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Copy the first part of user declarations.  */
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_pre_prologue[
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]/* Line __line__ of glr.cc.  */
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_syncline([@oline@], [@ofile@])[
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "location.hh"
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Enabling traces.  */
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYDEBUG
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYDEBUG ]b4_debug_flag[
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Enabling verbose error messages.  */
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef YYERROR_VERBOSE
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYERROR_VERBOSE
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYERROR_VERBOSE 1
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYERROR_VERBOSE ]b4_error_verbose_flag[
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Enabling the token table.  */
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYTOKEN_TABLE
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYTOKEN_TABLE ]b4_token_table[
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   If N is 0, then set CURRENT to the empty location which ends
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the previous symbol: RHS[0] (always defined).  */
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYLLOC_DEFAULT
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYLLOC_DEFAULT(Current, Rhs, N)				\
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    do									\
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (N)								\
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	{								\
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  (Current).begin  = YYRHSLOC (Rhs, 1).begin;			\
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  (Current).end    = YYRHSLOC (Rhs, N).end;			\
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}								\
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else								\
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	{								\
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;	\
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}								\
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    while (/*CONSTCOND*/ 0)
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnamespace ]b4_namespace[
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /// A Bison parser.
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  class ]b4_parser_class_name[
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  public:
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Symbol semantic values.
291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYSTYPE
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_ifdef([b4_stype],
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[    union semantic_type
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_stype
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Line __line__ of lalr1.cc.  */
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_syncline([@oline@], [@ofile@])
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	;],
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[    typedef int semantic_type;])[
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef YYSTYPE semantic_type;
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Symbol locations.
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef ]b4_location_type[ location_type;
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Tokens.
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    struct token
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ]b4_token_enums(b4_tokens)[
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    };
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Token type.
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef token::yytokentype token_type;
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Build a parser object.
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]b4_parser_class_name[ (]b4_parse_param_decl[);
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual ~]b4_parser_class_name[ ();
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Parse.
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \returns  0 iff parsing succeeded.
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual int parse ();
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The current debugging stream.
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    std::ostream& debug_stream () const;
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Set the current debugging stream.
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    void set_debug_stream (std::ostream &);
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Type for debugging levels.
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    typedef int debug_level_type;
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// The current debugging level.
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    debug_level_type debug_level () const;
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Set the current debugging level.
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    void set_debug_level (debug_level_type l);
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  private:
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  public:
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// Report a syntax error.
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param loc    where the syntax error is found.
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param msg    a description of the syntax error.
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void error (const location_type& loc, const std::string& msg);
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  private:
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYDEBUG
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  public:
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Report a symbol value on the debug stream.
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The token type.
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yy_symbol_value_print_ (int yytype,
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project					 const semantic_type* yyvaluep,
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project					 const location_type* yylocationp);
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Report a symbol on the debug stream.
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The token type.
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    virtual void yy_symbol_print_ (int yytype,
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				   const semantic_type* yyvaluep,
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				   const location_type* yylocationp);
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  private:
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* ! YYDEBUG */
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \brief Reclaim the memory associated to a symbol.
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yymsg        Why this token is reclaimed.
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yytype       The symbol type.
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yyvaluep     Its semantic value.
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /// \param yylocationp  Its location.
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    inline void yydestruct_ (const char* yymsg,
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     int yytype,
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     semantic_type* yyvaluep,
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     location_type* yylocationp);
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Debugging.  */
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    std::ostream* yycdebug_;
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_vars[
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]dnl Redirections for glr.c.
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifset([b4_global_tokens_and_yystype],
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_token_defines(b4_tokens)])
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYSTYPE
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYSTYPE ]b4_namespace[::]b4_parser_class_name[::semantic_type
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYLTYPE
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYLTYPE ]b4_namespace[::]b4_parser_class_name[::location_type
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* ! defined PARSER_HEADER_H */]
390