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