1 # Java skeleton
for Bison
-*- autoconf
-*-
3 #
Copyright (C
) 2007-2012 Free Software Foundation
, Inc
.
5 # This program is free software
: you can redistribute it and
/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation
, either version
3 of the License
, or
8 #
(at your option
) any later version
.
10 # This program is distributed in the hope that it will be useful
,
11 # but WITHOUT ANY WARRANTY
; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the
13 # GNU General Public License
for more details
.
15 # You should have received a copy of the GNU General Public License
16 # along with
this program
. If not
, see
<http
://www.gnu.org/licenses/>.
18 m4_include(b4_pkgdatadir
/[java
.m4
])
20 b4_defines_if([b4_fatal([%s
: %%defines does not make sense in Java
], [b4_skeleton
])])
21 m4_ifval(m4_defn([b4_symbol_destructors
]),
22 [b4_fatal([%s
: %%destructor does not make sense in Java
], [b4_skeleton
])],
25 b4_output_begin([b4_parser_file_name
])
26 b4_copyright([Skeleton implementation
for Bison
LALR(1) parsers in Java
],
29 b4_percent_define_ifdef([package], [package b4_percent_define_get([package]);
30 ])[/* First part of user declarations. */
32 b4_percent_code_get([[imports
]])
34 * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>.
36 * @@author LALR (1) parser skeleton written by Paolo Bonzini.
38 ]b4_public_if([public ])dnl
39 b4_abstract_if([abstract ])dnl
40 b4_final_if([final ])dnl
41 b4_strictfp_if([strictfp ])dnl
42 [class ]b4_parser_class_name
[]dnl
43 b4_percent_define_get3([extends], [ extends ])dnl
44 b4_percent_define_get3([implements], [ implements ])[
48 /** True if verbose error messages are enabled. */
49 public boolean errorVerbose
= ]b4_flag_value([error_verbose
]);
53 * A class defining a pair of positions. Positions, defined by the
54 * <code>]b4_position_type[</code> class, denote a point in the input.
55 * Locations represent a part of the input through the beginning
56 * and ending positions. */
57 public class ]b4_location_type
[ {
58 /** The first, inclusive, position in the range. */
59 public ]b4_position_type
[ begin
;
61 /** The first position beyond the range. */
62 public ]b4_position_type
[ end
;
65 * Create a <code>]b4_location_type[</code> denoting an empty range located at
67 * @@param loc The position at which the range is anchored. */
68 public ]b4_location_type
[ (]b4_position_type
[ loc
) {
69 this.begin
= this.end
= loc
;
73 * Create a <code>]b4_location_type[</code> from the endpoints of the range.
74 * @@param begin The first position included in the range.
75 * @@param end The first position beyond the range. */
76 public ]b4_location_type
[ (]b4_position_type
[ begin
, ]b4_position_type
[ end
) {
82 * Print a representation of the location. For this to be correct,
83 * <code>]b4_position_type[</code> should override the <code>equals</code>
85 public String
toString () {
86 if (begin
.equals (end
))
87 return begin
.toString ();
89 return begin
.toString () + "-" + end
.toString ();
95 [ /** Token returned by the scanner to signal the end of its input. */
96 public static final int EOF
= 0;]
98 b4_token_enums(b4_tokens
)
101 private ]b4_location_type
[ yylloc (YYStack rhs
, int n
)
104 return new ]b4_location_type
[ (rhs
.locationAt (n
-1).begin
, rhs
.locationAt (0).end
);
106 return new ]b4_location_type
[ (rhs
.locationAt (0).end
);
110 * Communication interface between the scanner and the Bison-generated
111 * parser <tt>]b4_parser_class_name[</tt>.
113 public interface Lexer
{
114 ]b4_locations_if([[/**
115 * Method to retrieve the beginning position of the last scanned token.
116 * @@return the position at which the last scanned token starts. */
117 ]b4_position_type
[ getStartPos ();
120 * Method to retrieve the ending position of the last scanned token.
121 * @@return the first position beyond the last scanned token. */
122 ]b4_position_type
[ getEndPos ();]])[
125 * Method to retrieve the semantic value of the last scanned token.
126 * @@return the semantic value of the last scanned token. */
127 ]b4_yystype
[ getLVal ();
130 * Entry point for the scanner. Returns the token identifier corresponding
131 * to the next token and prepares to return the semantic value
132 * ]b4_locations_if([and beginning/ending positions ])[of the token.
133 * @@return the token identifier corresponding to the next token. */
134 int yylex () ]b4_maybe_throws([b4_lex_throws
])[;
137 * Entry point for error reporting. Emits an error
138 * ]b4_locations_if([referring to the given location ])[in a user-defined way.
140 * ]b4_locations_if([[@@param loc The location of the element to which the
141 * error message is related]])[
142 * @@param s The string for the error message. */
143 void yyerror (]b4_locations_if([b4_location_type
[ loc
, ]])[String s
);]
146 b4_lexer_if([[private class YYLexer
implements Lexer
{
147 ]b4_percent_code_get([[lexer
]])[
150 ]])[/** The object doing lexical analysis for us. */
151 private Lexer yylexer
;
157 * Instantiates the Bison-generated parser.
159 public ]b4_parser_class_name (b4_parse_param_decl([b4_lex_param_decl
])[) {
160 this.yylexer
= new YYLexer(]b4_lex_param_call
[);
161 ]b4_parse_param_cons
[
166 * Instantiates the Bison-generated parser.
167 * @@param yylexer The scanner that will supply tokens to the parser.
169 b4_lexer_if([[protected]], [[public]]) b4_parser_class_name
[ (]b4_parse_param_decl([[Lexer yylexer
]])[) {
170 this.yylexer
= yylexer
;
171 ]b4_parse_param_cons
[
174 private java
.io
.PrintStream yyDebugStream
= System
.err
;
177 * Return the <tt>PrintStream</tt> on which the debugging output is
180 public final java
.io
.PrintStream
getDebugStream () { return yyDebugStream
; }
183 * Set the <tt>PrintStream</tt> on which the debug output is printed.
184 * @@param s The stream that is used for debugging output.
186 public final void setDebugStream(java
.io
.PrintStream s
) { yyDebugStream
= s
; }
188 private int yydebug
= 0;
191 * Answer the verbosity of the debugging output; 0 means that all kinds of
192 * output from the parser are suppressed.
194 public final int getDebugLevel() { return yydebug
; }
197 * Set the verbosity of the debugging output; 0 means that all kinds of
198 * output from the parser are suppressed.
199 * @@param level The verbosity level for debugging output.
201 public final void setDebugLevel(int level
) { yydebug
= level
; }
203 private final int yylex () ]b4_maybe_throws([b4_lex_throws
]) [{
204 return yylexer
.yylex ();
206 protected final void yyerror (]b4_locations_if([b4_location_type
[ loc
, ]])[String s
) {
207 yylexer
.yyerror (]b4_locations_if([loc
, ])[s
);
211 protected final void yyerror (String s
) {
212 yylexer
.yyerror ((]b4_location_type
[)null, s
);
214 protected final void yyerror (]b4_position_type
[ loc
, String s
) {
215 yylexer
.yyerror (new ]b4_location_type
[ (loc
), s
);
218 [protected final void yycdebug (String s
) {
220 yyDebugStream
.println (s
);
223 private final class YYStack
{
224 private int[] stateStack
= new int[16];
225 ]b4_locations_if([[private ]b4_location_type
[[] locStack
= new ]b4_location_type
[[16];]])[
226 private ]b4_yystype
[[] valueStack
= new ]b4_yystype
[[16];
228 public int size
= 16;
229 public int height
= -1;
231 public final void push (int state
, ]b4_yystype
[ value
]dnl
232 b4_locations_if([, ]b4_location_type
[ loc
])[) {
236 int[] newStateStack
= new int[size
* 2];
237 System
.arraycopy (stateStack
, 0, newStateStack
, 0, height
);
238 stateStack
= newStateStack
;
240 ]b4_location_type
[[] newLocStack
= new ]b4_location_type
[[size
* 2];
241 System
.arraycopy (locStack
, 0, newLocStack
, 0, height
);
242 locStack
= newLocStack
;]])
244 b4_yystype
[[] newValueStack
= new ]b4_yystype
[[size
* 2];
245 System
.arraycopy (valueStack
, 0, newValueStack
, 0, height
);
246 valueStack
= newValueStack
;
251 stateStack
[height
] = state
;
252 ]b4_locations_if([[locStack
[height
] = loc
;]])[
253 valueStack
[height
] = value
;
256 public final void pop () {
260 public final void pop (int num
) {
261 // Avoid memory leaks... garbage collection is a white lie!
263 java
.util
.Arrays
.fill (valueStack
, height
- num
+ 1, height
+ 1, null);
264 ]b4_locations_if([[java
.util
.Arrays
.fill (locStack
, height
- num
+ 1, height
+ 1, null);]])[
269 public final int stateAt (int i
) {
270 return stateStack
[height
- i
];
273 ]b4_locations_if([[public final ]b4_location_type
[ locationAt (int i
) {
274 return locStack
[height
- i
];
277 ]])[public final ]b4_yystype
[ valueAt (int i
) {
278 return valueStack
[height
- i
];
281 // Print the state stack on the debug stream.
282 public void print (java
.io
.PrintStream out
)
284 out
.print ("Stack now");
286 for (int i
= 0; i
<= height
; i
++)
289 out
.print (stateStack
[i
]);
296 * Returned by a Bison action in order to stop the parsing process and
297 * return success (<tt>true</tt>). */
298 public static final int YYACCEPT
= 0;
301 * Returned by a Bison action in order to stop the parsing process and
302 * return failure (<tt>false</tt>). */
303 public static final int YYABORT
= 1;
306 * Returned by a Bison action in order to start error recovery without
307 * printing an error message. */
308 public static final int YYERROR
= 2;
310 // Internal return codes that are not supported for user semantic
312 private static final int YYERRLAB
= 3;
313 private static final int YYNEWSTATE
= 4;
314 private static final int YYDEFAULT
= 5;
315 private static final int YYREDUCE
= 6;
316 private static final int YYERRLAB1
= 7;
317 private static final int YYRETURN
= 8;
319 private int yyerrstatus_
= 0;
322 * Return whether error recovery is being done. In this state, the parser
323 * reads token until it reaches a known state, and then restarts normal
325 public final boolean recovering ()
327 return yyerrstatus_
== 0;
330 private int yyaction (int yyn
, YYStack yystack
, int yylen
) ]b4_maybe_throws([b4_throws
])[
333 ]b4_locations_if([b4_location_type
[ yyloc
= yylloc (yystack
, yylen
);]])[
335 /* If YYLEN is nonzero, implement the default value of the action:
336 `$$ = $1'. Otherwise, use the top of the stack.
338 Otherwise, the following line sets YYVAL to garbage.
339 This behavior is undocumented and Bison
340 users should not rely upon it. */
342 yyval
= yystack
.valueAt (yylen
- 1);
344 yyval
= yystack
.valueAt (0);
346 yy_reduce_print (yyn
, yystack
);
354 yy_symbol_print ("-> $$ =", yyr1_
[yyn
], yyval
]b4_locations_if([, yyloc
])[);
359 /* Shift the result of the reduction. */
361 int yystate
= yypgoto_
[yyn
- yyntokens_
] + yystack
.stateAt (0);
362 if (0 <= yystate
&& yystate
<= yylast_
363 && yycheck_
[yystate
] == yystack
.stateAt (0))
364 yystate
= yytable_
[yystate
];
366 yystate
= yydefgoto_
[yyn
- yyntokens_
];
368 yystack
.push (yystate
, yyval
]b4_locations_if([, yyloc
])[);
372 /* Return YYSTR after stripping away unnecessary quotes and
373 backslashes, so that it's suitable for yyerror. The heuristic is
374 that double-quoting is unnecessary unless the string contains an
375 apostrophe, a comma, or backslash (other than backslash-backslash).
376 YYSTR is taken from yytname. */
377 private final String
yytnamerr_ (String yystr
)
379 if (yystr
.charAt (0) == '"')
381 StringBuffer yyr
= new StringBuffer ();
382 strip_quotes
: for (int i
= 1; i
< yystr
.length (); i
++)
383 switch (yystr
.charAt (i
))
390 if (yystr
.charAt(++i
) != '\\')
394 yyr
.append (yystr
.charAt (i
));
398 return yyr
.toString ();
401 else if (yystr
.equals ("$end"))
402 return "end of input";
407 /*--------------------------------.
408 | Print this symbol on YYOUTPUT. |
409 `--------------------------------*/
411 private void yy_symbol_print (String s
, int yytype
,
412 ]b4_yystype
[ yyvaluep
]dnl
413 b4_locations_if([, Object yylocationp
])[)
416 yycdebug (s
+ (yytype
< yyntokens_ ?
" token " : " nterm ")
417 + yytname_
[yytype
] + " ("]b4_locations_if([
418 + yylocationp
+ ": "])[
419 + (yyvaluep
== null ?
"(null)" : yyvaluep
.toString ()) + ")");
423 * Parse input from the scanner that was specified at object construction
424 * time. Return whether the end of the input was reached successfully.
426 * @@return <tt>true</tt> if the parsing succeeds. Note that this does not
427 * imply that there were no syntax errors.
429 public boolean parse () ]b4_maybe_throws([b4_list2([b4_lex_throws
], [b4_throws
])])[
431 /// Lookahead and lookahead in internal form.
432 int yychar
= yyempty_
;
440 YYStack yystack
= new YYStack ();
442 /* Error handling. */
444 ]b4_locations_if([/// The location where the error started.
445 ]b4_location_type
[ yyerrloc
= null;
447 /// ]b4_location_type[ of the lookahead.
448 ]b4_location_type
[ yylloc
= new ]b4_location_type
[ (null, null);
451 ]b4_location_type
[ yyloc
;])
453 /// Semantic value of the lookahead.
454 b4_yystype
[ yylval
= null;
456 yycdebug ("Starting parse\n");
459 ]m4_ifdef([b4_initial_action
], [
460 b4_dollar_pushdef([yylval
], [], [yylloc
])dnl
461 /* User initialization code. */
462 b4_user_initial_action
463 b4_dollar_popdef
])[]dnl
465 [ /* Initialize the stack. */
466 yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[);
468 int label
= YYNEWSTATE
;
472 /* New state. Unlike in the C/C++ skeletons, the state is already
473 pushed when we come here. */
475 yycdebug ("Entering state " + yystate
+ "\n");
477 yystack
.print (yyDebugStream
);
480 if (yystate
== yyfinal_
)
483 /* Take a decision. First try without lookahead. */
484 yyn
= yypact_
[yystate
];
485 if (yy_pact_value_is_default_ (yyn
))
491 /* Read a lookahead token. */
492 if (yychar
== yyempty_
)
494 yycdebug ("Reading a token: ");
497 yylloc
= new ]b4_location_type
[(yylexer
.getStartPos (),
498 yylexer
.getEndPos ());]])
499 yylval
= yylexer
.getLVal ();[
502 /* Convert token to internal form. */
505 yychar
= yytoken
= EOF
;
506 yycdebug ("Now at end of input.\n");
510 yytoken
= yytranslate_ (yychar
);
511 yy_symbol_print ("Next token is", yytoken
,
512 yylval
]b4_locations_if([, yylloc
])[);
515 /* If the proper action on seeing token YYTOKEN is to reduce or to
516 detect an error, take that action. */
518 if (yyn
< 0 || yylast_
< yyn
|| yycheck_
[yyn
] != yytoken
)
521 /* <= 0 means reduce or error. */
522 else if ((yyn
= yytable_
[yyn
]) <= 0)
524 if (yy_table_value_is_error_ (yyn
))
535 /* Shift the lookahead token. */
536 yy_symbol_print ("Shifting", yytoken
,
537 yylval
]b4_locations_if([, yylloc
])[);
539 /* Discard the token being shifted. */
542 /* Count tokens shifted since error; after three, turn off error
544 if (yyerrstatus_
> 0)
548 yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[);
553 /*-----------------------------------------------------------.
554 | yydefault -- do the default action for the current state. |
555 `-----------------------------------------------------------*/
557 yyn
= yydefact_
[yystate
];
564 /*-----------------------------.
565 | yyreduce -- Do a reduction. |
566 `-----------------------------*/
569 label
= yyaction (yyn
, yystack
, yylen
);
570 yystate
= yystack
.stateAt (0);
573 /*------------------------------------.
574 | yyerrlab -- here on detecting error |
575 `------------------------------------*/
577 /* If not already recovering from an error, report this error. */
578 if (yyerrstatus_
== 0)
581 if (yychar
== yyempty_
)
583 yyerror (]b4_locations_if([yylloc
, ])[yysyntax_error (yystate
, yytoken
));
586 ]b4_locations_if([yyerrloc
= yylloc
;])[
587 if (yyerrstatus_
== 3)
589 /* If just tried and failed to reuse lookahead token after an
590 error, discard it. */
594 /* Return failure if at end of input. */
602 /* Else will try to reuse lookahead token after shifting the error
607 /*---------------------------------------------------.
608 | errorlab -- error raised explicitly by YYERROR. |
609 `---------------------------------------------------*/
612 ]b4_locations_if([yyerrloc
= yystack
.locationAt (yylen
- 1);])[
613 /* Do not reclaim the symbols of the rule which action triggered
617 yystate
= yystack
.stateAt (0);
621 /*-------------------------------------------------------------.
622 | yyerrlab1 -- common code for both syntax error and YYERROR. |
623 `-------------------------------------------------------------*/
625 yyerrstatus_
= 3; /* Each real token shifted decrements this. */
629 yyn
= yypact_
[yystate
];
630 if (!yy_pact_value_is_default_ (yyn
))
633 if (0 <= yyn
&& yyn
<= yylast_
&& yycheck_
[yyn
] == yyterror_
)
641 /* Pop the current state because it cannot handle the error token. */
642 if (yystack
.height
== 0)
645 ]b4_locations_if([yyerrloc
= yystack
.locationAt (0);])[
647 yystate
= yystack
.stateAt (0);
649 yystack
.print (yyDebugStream
);
653 /* Muck with the stack to setup for yylloc. */
654 yystack
.push (0, null, yylloc
);
655 yystack
.push (0, null, yyerrloc
);
656 yyloc
= yylloc (yystack
, 2);
659 /* Shift the error token. */
660 yy_symbol_print ("Shifting", yystos_
[yyn
],
661 yylval
]b4_locations_if([, yyloc
])[);
664 yystack
.push (yyn
, yylval
]b4_locations_if([, yyloc
])[);
678 // Generate an error message.
679 private String
yysyntax_error (int yystate
, int tok
)
683 /* There are many possibilities here to consider:
684 - Assume YYFAIL is not used. It's too flawed to consider.
686 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
687 for details. YYERROR is fine as it does not invoke this
689 - If this state is a consistent state with a default action,
690 then the only way this function was invoked is if the
691 default action is an error action. In that case, don't
692 check for expected tokens because there are none.
693 - The only way there can be no lookahead present (in tok) is
694 if this state is a consistent state with a default action.
695 Thus, detecting the absence of a lookahead is sufficient to
696 determine that there is no unexpected or expected token to
697 report. In that case, just report a simple "syntax error".
698 - Don't assume there isn't a lookahead just because this
699 state is a consistent state with a default action. There
700 might have been a previous inconsistent state, consistent
701 state with a non-default action, or user semantic action
702 that manipulated yychar. (However, yychar is currently out
703 of scope during semantic actions.)
704 - Of course, the expected token list depends on states to
705 have correct lookahead information, and it depends on the
706 parser not to perform extra reductions after fetching a
707 lookahead from the scanner and before detecting a syntax
708 error. Thus, state merging (from LALR or IELR) and default
709 reductions corrupt the expected token list. However, the
710 list is correct for canonical LR with one exception: it
711 will still contain any token that will not be accepted due
712 to an error action in a later state.
716 // FIXME: This method of building the message is not compatible
717 // with internationalization.
719 new StringBuffer ("syntax error, unexpected ");
720 res
.append (yytnamerr_ (yytname_
[tok
]));
721 int yyn
= yypact_
[yystate
];
722 if (!yy_pact_value_is_default_ (yyn
))
724 /* Start YYX at -YYN if negative to avoid negative
725 indexes in YYCHECK. In other words, skip the first
726 -YYN actions for this state because they are default
728 int yyxbegin
= yyn
< 0 ?
-yyn
: 0;
729 /* Stay within bounds of both yycheck and yytname. */
730 int yychecklim
= yylast_
- yyn
+ 1;
731 int yyxend
= yychecklim
< yyntokens_ ? yychecklim
: yyntokens_
;
733 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
734 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
735 && !yy_table_value_is_error_ (yytable_
[x
+ yyn
]))
740 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
741 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
742 && !yy_table_value_is_error_ (yytable_
[x
+ yyn
]))
744 res
.append (count
++ == 0 ?
", expecting " : " or ");
745 res
.append (yytnamerr_ (yytname_
[x
]));
749 return res
.toString ();
753 return "syntax error";
757 * Whether the given <code>yypact_</code> value indicates a defaulted state.
758 * @@param yyvalue the value to check
760 private static boolean yy_pact_value_is_default_ (int yyvalue
)
762 return yyvalue
== yypact_ninf_
;
766 * Whether the given <code>yytable_</code> value indicates a syntax error.
767 * @@param yyvalue the value to check
769 private static boolean yy_table_value_is_error_ (int yyvalue
)
771 return yyvalue
== yytable_ninf_
;
774 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
776 private static final ]b4_int_type_for([b4_pact
])[ yypact_ninf_
= ]b4_pact_ninf
[;
777 private static final ]b4_int_type_for([b4_pact
])[ yypact_
[] =
782 /* YYDEFACT[S] -- default reduction number in state S. Performed when
783 YYTABLE doesn't specify something else to do. Zero means the
784 default is an error. */
785 private static final ]b4_int_type_for([b4_defact
])[ yydefact_
[] =
790 /* YYPGOTO[NTERM-NUM]. */
791 private static final ]b4_int_type_for([b4_pgoto
])[ yypgoto_
[] =
796 /* YYDEFGOTO[NTERM-NUM]. */
797 private static final ]b4_int_type_for([b4_defgoto
])[
803 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
804 positive, shift that token. If negative, reduce the rule which
805 number is the opposite. If YYTABLE_NINF_, syntax error. */
806 private static final ]b4_int_type_for([b4_table
])[ yytable_ninf_
= ]b4_table_ninf
[;
807 private static final ]b4_int_type_for([b4_table
])[
814 private static final ]b4_int_type_for([b4_check
])[
820 /* STOS_[STATE-NUM] -- The (internal number of the) accessing
821 symbol of state STATE-NUM. */
822 private static final ]b4_int_type_for([b4_stos
])[
828 /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
830 private static final ]b4_int_type_for([b4_toknum
])[
836 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
837 private static final ]b4_int_type_for([b4_r1
])[
843 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
844 private static final ]b4_int_type_for([b4_r2
])[
850 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
851 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
852 private static final String yytname_
[] =
857 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
858 private static final ]b4_int_type_for([b4_rhs
])[ yyrhs_
[] =
863 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
865 private static final ]b4_int_type_for([b4_prhs
])[ yyprhs_
[] =
870 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
871 private static final ]b4_int_type_for([b4_rline
])[ yyrline_
[] =
876 // Report on the debug stream that the rule yyrule is going to be reduced.
877 private void yy_reduce_print (int yyrule
, YYStack yystack
)
882 int yylno
= yyrline_
[yyrule
];
883 int yynrhs
= yyr2_
[yyrule
];
884 /* Print the symbols being reduced, and their result. */
885 yycdebug ("Reducing stack by rule " + (yyrule
- 1)
886 + " (line " + yylno
+ "), ");
888 /* The symbols being reduced. */
889 for (int yyi
= 0; yyi
< yynrhs
; yyi
++)
890 yy_symbol_print (" $" + (yyi
+ 1) + " =",
891 yyrhs_
[yyprhs_
[yyrule
] + yyi
],
892 ]b4_rhs_value(yynrhs
, yyi
+ 1)b4_locations_if([,
893 b4_rhs_location(yynrhs
, yyi
+ 1)])[);
896 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
897 private static final ]b4_int_type_for([b4_translate
])[ yytranslate_table_
[] =
902 private static final ]b4_int_type_for([b4_translate
])[ yytranslate_ (int t
)
904 if (t
>= 0 && t
<= yyuser_token_number_max_
)
905 return yytranslate_table_
[t
];
907 return yyundef_token_
;
910 private static final int yylast_
= ]b4_last
[;
911 private static final int yynnts_
= ]b4_nterms_number
[;
912 private static final int yyempty_
= -2;
913 private static final int yyfinal_
= ]b4_final_state_number
[;
914 private static final int yyterror_
= 1;
915 private static final int yyerrcode_
= 256;
916 private static final int yyntokens_
= ]b4_tokens_number
[;
918 private static final int yyuser_token_number_max_
= ]b4_user_token_number_max
[;
919 private static final int yyundef_token_
= ]b4_undef_token_number
[;
921 ]/* User implementation code. */
922 b4_percent_code_get
[]dnl