105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Java skeleton for Bison -*- autoconf -*- 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Copyright (C) 2007-2012 Free Software Foundation, Inc. 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is free software: you can redistribute it and/or modify 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# it under the terms of the GNU General Public License as published by 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# the Free Software Foundation, either version 3 of the License, or 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# (at your option) any later version. 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is distributed in the hope that it will be useful, 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# but WITHOUT ANY WARRANTY; without even the implied warranty of 1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# GNU General Public License for more details. 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# You should have received a copy of the GNU General Public License 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# along with this program. If not, see <http://www.gnu.org/licenses/>. 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_include(b4_pkgdatadir/[java.m4]) 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_defines_if([b4_fatal([%s: %%defines does not make sense in Java], [b4_skeleton])]) 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_ifval(m4_defn([b4_symbol_destructors]), 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang [b4_fatal([%s: %%destructor does not make sense in Java], [b4_skeleton])], 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang []) 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_begin([b4_parser_file_name]) 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java], 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang [2007-2012]) 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_define_ifdef([package], [package b4_percent_define_get([package]); 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang])[/* First part of user declarations. */ 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_pre_prologue 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_code_get([[imports]]) 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang[/** 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>. 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@author LALR (1) parser skeleton written by Paolo Bonzini. 3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_public_if([public ])dnl 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_abstract_if([abstract ])dnl 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_final_if([final ])dnl 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_strictfp_if([strictfp ])dnl 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang[class ]b4_parser_class_name[]dnl 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_define_get3([extends], [ extends ])dnl 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_define_get3([implements], [ implements ])[ 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_identification[ 4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** True if verbose error messages are enabled. */ 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public boolean errorVerbose = ]b4_flag_value([error_verbose]); 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_locations_if([[ 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * A class defining a pair of positions. Positions, defined by the 5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * <code>]b4_position_type[</code> class, denote a point in the input. 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Locations represent a part of the input through the beginning 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * and ending positions. */ 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang public class ]b4_location_type[ { 5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** The first, inclusive, position in the range. */ 5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public ]b4_position_type[ begin; 6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** The first position beyond the range. */ 6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang public ]b4_position_type[ end; 6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Create a <code>]b4_location_type[</code> denoting an empty range located at 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * a given point. 6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param loc The position at which the range is anchored. */ 6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang public ]b4_location_type[ (]b4_position_type[ loc) { 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang this.begin = this.end = loc; 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Create a <code>]b4_location_type[</code> from the endpoints of the range. 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param begin The first position included in the range. 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param end The first position beyond the range. */ 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang public ]b4_location_type[ (]b4_position_type[ begin, ]b4_position_type[ end) { 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang this.begin = begin; 7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang this.end = end; 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Print a representation of the location. For this to be correct, 8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * <code>]b4_position_type[</code> should override the <code>equals</code> 8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * method. */ 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang public String toString () { 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (begin.equals (end)) 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return begin.toString (); 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return begin.toString () + "-" + end.toString (); 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]]) 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang[ /** Token returned by the scanner to signal the end of its input. */ 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang public static final int EOF = 0;] 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_token_enums(b4_tokens) 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_locations_if([[ 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private ]b4_location_type[ yylloc (YYStack rhs, int n) 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (n > 0) 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return new ]b4_location_type[ (rhs.locationAt (n-1).begin, rhs.locationAt (0).end); 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return new ]b4_location_type[ (rhs.locationAt (0).end); 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang }]])[ 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Communication interface between the scanner and the Bison-generated 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * parser <tt>]b4_parser_class_name[</tt>. 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang public interface Lexer { 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[/** 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Method to retrieve the beginning position of the last scanned token. 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@return the position at which the last scanned token starts. */ 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_position_type[ getStartPos (); 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Method to retrieve the ending position of the last scanned token. 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@return the first position beyond the last scanned token. */ 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_position_type[ getEndPos ();]])[ 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Method to retrieve the semantic value of the last scanned token. 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@return the semantic value of the last scanned token. */ 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_yystype[ getLVal (); 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Entry point for the scanner. Returns the token identifier corresponding 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * to the next token and prepares to return the semantic value 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * ]b4_locations_if([and beginning/ending positions ])[of the token. 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@return the token identifier corresponding to the next token. */ 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yylex () ]b4_maybe_throws([b4_lex_throws])[; 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Entry point for error reporting. Emits an error 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * ]b4_locations_if([referring to the given location ])[in a user-defined way. 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang * ]b4_locations_if([[@@param loc The location of the element to which the 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * error message is related]])[ 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param s The string for the error message. */ 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String s);] 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_lexer_if([[private class YYLexer implements Lexer { 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get([[lexer]])[ 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]])[/** The object doing lexical analysis for us. */ 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private Lexer yylexer; 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ] 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_parse_param_vars 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_lexer_if([[ 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Instantiates the Bison-generated parser. 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public ]b4_parser_class_name (b4_parse_param_decl([b4_lex_param_decl])[) { 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang this.yylexer = new YYLexer(]b4_lex_param_call[); 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_parse_param_cons[ 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]]) 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Instantiates the Bison-generated parser. 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param yylexer The scanner that will supply tokens to the parser. 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_lexer_if([[protected]], [[public]]) b4_parser_class_name[ (]b4_parse_param_decl([[Lexer yylexer]])[) { 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang this.yylexer = yylexer; 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_parse_param_cons[ 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private java.io.PrintStream yyDebugStream = System.err; 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Return the <tt>PrintStream</tt> on which the debugging output is 17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * printed. 17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final java.io.PrintStream getDebugStream () { return yyDebugStream; } 18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Set the <tt>PrintStream</tt> on which the debug output is printed. 18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param s The stream that is used for debugging output. 18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final void setDebugStream(java.io.PrintStream s) { yyDebugStream = s; } 18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang private int yydebug = 0; 18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Answer the verbosity of the debugging output; 0 means that all kinds of 19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * output from the parser are suppressed. 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final int getDebugLevel() { return yydebug; } 19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Set the verbosity of the debugging output; 0 means that all kinds of 19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * output from the parser are suppressed. 19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param level The verbosity level for debugging output. 20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final void setDebugLevel(int level) { yydebug = level; } 20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang private final int yylex () ]b4_maybe_throws([b4_lex_throws]) [{ 20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yylexer.yylex (); 20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang protected final void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String s) { 20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylexer.yyerror (]b4_locations_if([loc, ])[s); 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([ 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang protected final void yyerror (String s) { 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylexer.yyerror ((]b4_location_type[)null, s); 21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang protected final void yyerror (]b4_position_type[ loc, String s) { 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylexer.yyerror (new ]b4_location_type[ (loc), s); 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang }]) 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang [protected final void yycdebug (String s) { 21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yydebug > 0) 22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyDebugStream.println (s); 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang private final class YYStack { 22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private int[] stateStack = new int[16]; 22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[private ]b4_location_type[[] locStack = new ]b4_location_type[[16];]])[ 22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang private ]b4_yystype[[] valueStack = new ]b4_yystype[[16]; 22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang public int size = 16; 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public int height = -1; 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final void push (int state, ]b4_yystype[ value]dnl 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_locations_if([, ]b4_location_type[ loc])[) { 23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang height++; 23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (size == height) 23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int[] newStateStack = new int[size * 2]; 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang System.arraycopy (stateStack, 0, newStateStack, 0, height); 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang stateStack = newStateStack; 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[ 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_location_type[[] newLocStack = new ]b4_location_type[[size * 2]; 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang System.arraycopy (locStack, 0, newLocStack, 0, height); 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang locStack = newLocStack;]]) 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_yystype[[] newValueStack = new ]b4_yystype[[size * 2]; 24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang System.arraycopy (valueStack, 0, newValueStack, 0, height); 24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang valueStack = newValueStack; 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang size *= 2; 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang stateStack[height] = state; 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[locStack[height] = loc;]])[ 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang valueStack[height] = value; 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final void pop () { 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang pop (1); 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final void pop (int num) { 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang // Avoid memory leaks... garbage collection is a white lie! 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (num > 0) { 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null); 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[java.util.Arrays.fill (locStack, height - num + 1, height + 1, null);]])[ 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang height -= num; 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final int stateAt (int i) { 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return stateStack[height - i]; 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([[public final ]b4_location_type[ locationAt (int i) { 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return locStack[height - i]; 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]])[public final ]b4_yystype[ valueAt (int i) { 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return valueStack[height - i]; 27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang // Print the state stack on the debug stream. 28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang public void print (java.io.PrintStream out) 28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang out.print ("Stack now"); 28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (int i = 0; i <= height; i++) 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang out.print (' '); 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang out.print (stateStack[i]); 29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang out.println (); 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Returned by a Bison action in order to stop the parsing process and 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * return success (<tt>true</tt>). */ 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang public static final int YYACCEPT = 0; 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Returned by a Bison action in order to stop the parsing process and 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * return failure (<tt>false</tt>). */ 30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang public static final int YYABORT = 1; 30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Returned by a Bison action in order to start error recovery without 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * printing an error message. */ 30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang public static final int YYERROR = 2; 30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang // Internal return codes that are not supported for user semantic 31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang // actions. 31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYERRLAB = 3; 31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYNEWSTATE = 4; 31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYDEFAULT = 5; 31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYREDUCE = 6; 31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYERRLAB1 = 7; 31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int YYRETURN = 8; 31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang private int yyerrstatus_ = 0; 32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Return whether error recovery is being done. In this state, the parser 32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * reads token until it reaches a known state, and then restarts normal 32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * operation. */ 32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang public final boolean recovering () 32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyerrstatus_ == 0; 32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang private int yyaction (int yyn, YYStack yystack, int yylen) ]b4_maybe_throws([b4_throws])[ 33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_yystype[ yyval; 33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([b4_location_type[ yyloc = yylloc (yystack, yylen);]])[ 33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* If YYLEN is nonzero, implement the default value of the action: 33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang `$$ = $1'. Otherwise, use the top of the stack. 33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Otherwise, the following line sets YYVAL to garbage. 33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang This behavior is undocumented and Bison 34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang users should not rely upon it. */ 34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yylen > 0) 34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyval = yystack.valueAt (yylen - 1); 34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyval = yystack.valueAt (0); 34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_reduce_print (yyn, yystack); 34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (yyn) 34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_user_actions[ 35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: break; 35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_symbol_print ("-> $$ =", yyr1_[yyn], yyval]b4_locations_if([, yyloc])[); 35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.pop (yylen); 35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylen = 0; 35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Shift the result of the reduction. */ 36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = yyr1_[yyn]; 36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yystate = yypgoto_[yyn - yyntokens_] + yystack.stateAt (0); 36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (0 <= yystate && yystate <= yylast_ 36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang && yycheck_[yystate] == yystack.stateAt (0)) 36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yytable_[yystate]; 36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yydefgoto_[yyn - yyntokens_]; 36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (yystate, yyval]b4_locations_if([, yyloc])[); 36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return YYNEWSTATE; 37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Return YYSTR after stripping away unnecessary quotes and 37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang backslashes, so that it's suitable for yyerror. The heuristic is 37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang that double-quoting is unnecessary unless the string contains an 37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang apostrophe, a comma, or backslash (other than backslash-backslash). 37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang YYSTR is taken from yytname. */ 37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private final String yytnamerr_ (String yystr) 37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yystr.charAt (0) == '"') 38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang StringBuffer yyr = new StringBuffer (); 38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang strip_quotes: for (int i = 1; i < yystr.length (); i++) 38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (yystr.charAt (i)) 38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case '\'': 38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case ',': 38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang break strip_quotes; 38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case '\\': 39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yystr.charAt(++i) != '\\') 39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang break strip_quotes; 39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Fall through. */ 39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang default: 39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyr.append (yystr.charAt (i)); 39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang case '"': 39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyr.toString (); 39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if (yystr.equals ("$end")) 40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return "end of input"; 40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yystr; 40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*--------------------------------. 40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang | Print this symbol on YYOUTPUT. | 40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang `--------------------------------*/ 41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private void yy_symbol_print (String s, int yytype, 41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_yystype[ yyvaluep]dnl 41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_locations_if([, Object yylocationp])[) 41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yydebug > 0) 41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug (s + (yytype < yyntokens_ ? " token " : " nterm ") 41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang + yytname_[yytype] + " ("]b4_locations_if([ 41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang + yylocationp + ": "])[ 41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang + (yyvaluep == null ? "(null)" : yyvaluep.toString ()) + ")"); 42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Parse input from the scanner that was specified at object construction 42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * time. Return whether the end of the input was reached successfully. 42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * 42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@return <tt>true</tt> if the parsing succeeds. Note that this does not 42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * imply that there were no syntax errors. 42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang public boolean parse () ]b4_maybe_throws([b4_list2([b4_lex_throws], [b4_throws])])[ 43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /// Lookahead and lookahead in internal form. 43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yychar = yyempty_; 43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yytoken = 0; 43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* State. */ 43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyn = 0; 43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yylen = 0; 43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yystate = 0; 43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang YYStack yystack = new YYStack (); 44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Error handling. */ 44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yynerrs_ = 0; 44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([/// The location where the error started. 44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_location_type[ yyerrloc = null; 44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /// ]b4_location_type[ of the lookahead. 44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_location_type[ yylloc = new ]b4_location_type[ (null, null); 44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /// @@$. 45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_location_type[ yyloc;]) 45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /// Semantic value of the lookahead. 45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_yystype[ yylval = null; 45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug ("Starting parse\n"); 45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyerrstatus_ = 0; 45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang]m4_ifdef([b4_initial_action], [ 46005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_pushdef([yylval], [], [yylloc])dnl 46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* User initialization code. */ 46205436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_user_initial_action 46305436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_popdef])[]dnl 46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang [ /* Initialize the stack. */ 46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (yystate, yylval]b4_locations_if([, yylloc])[); 46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int label = YYNEWSTATE; 46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (;;) 47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang switch (label) 47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* New state. Unlike in the C/C++ skeletons, the state is already 47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang pushed when we come here. */ 47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYNEWSTATE: 47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug ("Entering state " + yystate + "\n"); 47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yydebug > 0) 47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.print (yyDebugStream); 47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Accept? */ 48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yystate == yyfinal_) 48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return true; 48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Take a decision. First try without lookahead. */ 48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = yypact_[yystate]; 48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yy_pact_value_is_default_ (yyn)) 48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYDEFAULT; 48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Read a lookahead token. */ 49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yychar == yyempty_) 49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug ("Reading a token: "); 49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yychar = yylex ();] 49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_locations_if([[ 49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylloc = new ]b4_location_type[(yylexer.getStartPos (), 49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylexer.getEndPos ());]]) 49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylval = yylexer.getLVal ();[ 50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Convert token to internal form. */ 50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yychar <= EOF) 50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yychar = yytoken = EOF; 50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug ("Now at end of input.\n"); 50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yytoken = yytranslate_ (yychar); 51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_symbol_print ("Next token is", yytoken, 51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylval]b4_locations_if([, yylloc])[); 51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* If the proper action on seeing token YYTOKEN is to reduce or to 51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang detect an error, take that action. */ 51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn += yytoken; 51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken) 51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYDEFAULT; 52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* <= 0 means reduce or error. */ 52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang else if ((yyn = yytable_[yyn]) <= 0) 52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yy_table_value_is_error_ (yyn)) 52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYERRLAB; 52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = -yyn; 52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYREDUCE; 53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Shift the lookahead token. */ 53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_symbol_print ("Shifting", yytoken, 53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylval]b4_locations_if([, yylloc])[); 53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Discard the token being shifted. */ 54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yychar = yyempty_; 54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Count tokens shifted since error; after three, turn off error 54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang status. */ 54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yyerrstatus_ > 0) 54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang --yyerrstatus_; 54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yyn; 54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (yystate, yylval]b4_locations_if([, yylloc])[); 54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYNEWSTATE; 55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*-----------------------------------------------------------. 55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang | yydefault -- do the default action for the current state. | 55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang `-----------------------------------------------------------*/ 55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYDEFAULT: 55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = yydefact_[yystate]; 55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yyn == 0) 55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYERRLAB; 56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYREDUCE; 56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*-----------------------------. 56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang | yyreduce -- Do a reduction. | 56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang `-----------------------------*/ 56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYREDUCE: 56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylen = yyr2_[yyn]; 56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = yyaction (yyn, yystack, yylen); 57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yystack.stateAt (0); 57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*------------------------------------. 57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang | yyerrlab -- here on detecting error | 57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang `------------------------------------*/ 57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYERRLAB: 57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* If not already recovering from an error, report this error. */ 57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yyerrstatus_ == 0) 57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++yynerrs_; 58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yychar == yyempty_) 58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yytoken = yyempty_; 58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyerror (]b4_locations_if([yylloc, ])[yysyntax_error (yystate, yytoken)); 58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([yyerrloc = yylloc;])[ 58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yyerrstatus_ == 3) 58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* If just tried and failed to reuse lookahead token after an 59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang error, discard it. */ 59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yychar <= EOF) 59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Return failure if at end of input. */ 59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yychar == EOF) 59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang return false; 59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yychar = yyempty_; 60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Else will try to reuse lookahead token after shifting the error 60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang token. */ 60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYERRLAB1; 60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*---------------------------------------------------. 60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang | errorlab -- error raised explicitly by YYERROR. | 60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang `---------------------------------------------------*/ 61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYERROR: 61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([yyerrloc = yystack.locationAt (yylen - 1);])[ 61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Do not reclaim the symbols of the rule which action triggered 61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang this YYERROR. */ 61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.pop (yylen); 61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylen = 0; 61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yystack.stateAt (0); 61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYERRLAB1; 61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /*-------------------------------------------------------------. 62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang | yyerrlab1 -- common code for both syntax error and YYERROR. | 62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang `-------------------------------------------------------------*/ 62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYERRLAB1: 62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyerrstatus_ = 3; /* Each real token shifted decrements this. */ 62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (;;) 62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = yypact_[yystate]; 63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!yy_pact_value_is_default_ (yyn)) 63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn += yyterror_; 63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) 63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyn = yytable_[yyn]; 63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (0 < yyn) 63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Pop the current state because it cannot handle the error token. */ 64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yystack.height == 0) 64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return false; 64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([yyerrloc = yystack.locationAt (0);])[ 64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.pop (); 64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yystack.stateAt (0); 64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yydebug > 0) 64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.print (yyDebugStream); 65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_locations_if([ 65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Muck with the stack to setup for yylloc. */ 65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (0, null, yylloc); 65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (0, null, yyerrloc); 65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyloc = yylloc (yystack, 2); 65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.pop (2);])[ 65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Shift the error token. */ 66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_symbol_print ("Shifting", yystos_[yyn], 66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yylval]b4_locations_if([, yyloc])[); 66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystate = yyn; 66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystack.push (yyn, yylval]b4_locations_if([, yyloc])[); 66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang label = YYNEWSTATE; 66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang break; 66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Accept. */ 66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYACCEPT: 67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return true; 67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Abort. */ 67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case YYABORT: 67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return false; 67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang // Generate an error message. 67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang private String yysyntax_error (int yystate, int tok) 68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (errorVerbose) 68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* There are many possibilities here to consider: 68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang - Assume YYFAIL is not used. It's too flawed to consider. 68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang See 68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang for details. YYERROR is fine as it does not invoke this 68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang function. 68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang - If this state is a consistent state with a default action, 69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang then the only way this function was invoked is if the 69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang default action is an error action. In that case, don't 69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang check for expected tokens because there are none. 69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang - The only way there can be no lookahead present (in tok) is 69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if this state is a consistent state with a default action. 69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Thus, detecting the absence of a lookahead is sufficient to 69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang determine that there is no unexpected or expected token to 69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang report. In that case, just report a simple "syntax error". 69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang - Don't assume there isn't a lookahead just because this 69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang state is a consistent state with a default action. There 70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang might have been a previous inconsistent state, consistent 70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang state with a non-default action, or user semantic action 70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang that manipulated yychar. (However, yychar is currently out 70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang of scope during semantic actions.) 70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang - Of course, the expected token list depends on states to 70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang have correct lookahead information, and it depends on the 70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang parser not to perform extra reductions after fetching a 70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang lookahead from the scanner and before detecting a syntax 70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang error. Thus, state merging (from LALR or IELR) and default 70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang reductions corrupt the expected token list. However, the 71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang list is correct for canonical LR with one exception: it 71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang will still contain any token that will not be accepted due 71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang to an error action in a later state. 71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (tok != yyempty_) 71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang // FIXME: This method of building the message is not compatible 71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang // with internationalization. 71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang StringBuffer res = 71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang new StringBuffer ("syntax error, unexpected "); 72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang res.append (yytnamerr_ (yytname_[tok])); 72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyn = yypact_[yystate]; 72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (!yy_pact_value_is_default_ (yyn)) 72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Start YYX at -YYN if negative to avoid negative 72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang indexes in YYCHECK. In other words, skip the first 72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang -YYN actions for this state because they are default 72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang actions. */ 72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyxbegin = yyn < 0 ? -yyn : 0; 72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Stay within bounds of both yycheck and yytname. */ 73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yychecklim = yylast_ - yyn + 1; 73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; 73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int count = 0; 73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (int x = yyxbegin; x < yyxend; ++x) 73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yycheck_[x + yyn] == x && x != yyterror_ 73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang && !yy_table_value_is_error_ (yytable_[x + yyn])) 73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ++count; 73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (count < 5) 73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang count = 0; 74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (int x = yyxbegin; x < yyxend; ++x) 74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yycheck_[x + yyn] == x && x != yyterror_ 74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang && !yy_table_value_is_error_ (yytable_[x + yyn])) 74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang res.append (count++ == 0 ? ", expecting " : " or "); 74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang res.append (yytnamerr_ (yytname_[x])); 74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang return res.toString (); 75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang return "syntax error"; 75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Whether the given <code>yypact_</code> value indicates a defaulted state. 75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param yyvalue the value to check 75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static boolean yy_pact_value_is_default_ (int yyvalue) 76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyvalue == yypact_ninf_; 76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /** 76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Whether the given <code>yytable_</code> value indicates a syntax error. 76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang * @@param yyvalue the value to check 76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang */ 76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static boolean yy_table_value_is_error_ (int yyvalue) 77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyvalue == yytable_ninf_; 77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang STATE-NUM. */ 77605436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_pact])[ yypact_ninf_ = ]b4_pact_ninf[; 77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_pact])[ yypact_[] = 77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_pact[ 78005436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 78205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYDEFACT[S] -- default reduction number in state S. Performed when 78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang YYTABLE doesn't specify something else to do. Zero means the 78405436638acc7c010349a69c3395f1a57c642dc62Ying Wang default is an error. */ 78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_defact])[ yydefact_[] = 78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_defact[ 78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYPGOTO[NTERM-NUM]. */ 79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_pgoto])[ yypgoto_[] = 79205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_pgoto[ 79405436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYDEFGOTO[NTERM-NUM]. */ 79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_defgoto])[ 79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yydefgoto_[] = 79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_defgoto[ 80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang positive, shift that token. If negative, reduce the rule which 80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang number is the opposite. If YYTABLE_NINF_, syntax error. */ 80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_table])[ yytable_ninf_ = ]b4_table_ninf[; 80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_table])[ 80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yytable_[] = 80905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_table[ 81105436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 81205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYCHECK. */ 81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_check])[ 81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycheck_[] = 81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_check[ 81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* STOS_[STATE-NUM] -- The (internal number of the) accessing 82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang symbol of state STATE-NUM. */ 82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_stos])[ 82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang yystos_[] = 82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_stos[ 82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding 82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang to YYLEX-NUM. */ 83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_toknum])[ 83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yytoken_number_[] = 83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_toknum[ 83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_r1])[ 83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyr1_[] = 83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_r1[ 84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_r2])[ 84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyr2_[] = 84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_r2[ 84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang First, the terminals, then, starting at \a yyntokens_, nonterminals. */ 85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final String yytname_[] = 85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_tname[ 85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_rhs])[ yyrhs_[] = 85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_rhs[ 86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang YYRHS. */ 86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_prhs])[ yyprhs_[] = 86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_prhs[ 86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ 87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_rline])[ yyrline_[] = 87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_rline[ 87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang // Report on the debug stream that the rule yyrule is going to be reduced. 87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private void yy_reduce_print (int yyrule, YYStack yystack) 87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (yydebug == 0) 88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang return; 88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yylno = yyrline_[yyrule]; 88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int yynrhs = yyr2_[yyrule]; 88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Print the symbols being reduced, and their result. */ 88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang yycdebug ("Reducing stack by rule " + (yyrule - 1) 88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang + " (line " + yylno + "), "); 88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* The symbols being reduced. */ 88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang for (int yyi = 0; yyi < yynrhs; yyi++) 89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang yy_symbol_print (" $" + (yyi + 1) + " =", 89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang yyrhs_[yyprhs_[yyrule] + yyi], 89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_rhs_value(yynrhs, yyi + 1)b4_locations_if([, 89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang b4_rhs_location(yynrhs, yyi + 1)])[); 89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_translate])[ yytranslate_table_[] = 89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ]b4_translate[ 90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang }; 90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final ]b4_int_type_for([b4_translate])[ yytranslate_ (int t) 90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (t >= 0 && t <= yyuser_token_number_max_) 90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yytranslate_table_[t]; 90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang return yyundef_token_; 90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yylast_ = ]b4_last[; 91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yynnts_ = ]b4_nterms_number[; 91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyempty_ = -2; 91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyfinal_ = ]b4_final_state_number[; 91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyterror_ = 1; 91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyerrcode_ = 256; 91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyntokens_ = ]b4_tokens_number[; 91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyuser_token_number_max_ = ]b4_user_token_number_max[; 91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang private static final int yyundef_token_ = ]b4_undef_token_number[; 92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]/* User implementation code. */ 92205436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_code_get[]dnl 92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92605436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_epilogue 92705436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_end() 928