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