1 # Java skeleton 
for Bison 
-*- autoconf 
-*- 
   3 # 
Copyright (C
) 2007, 2008 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
], 
  23 m4_define([b4_symbol_no_destructor_assert
], 
  24 [b4_symbol_if([$
1], [has_destructor
], 
  25               [b4_fatal([%s
: %s
: %%destructor does not make sense in Java
], 
  27                         [b4_symbol_action_location([$
1], [destructor
])])])]) 
  28 b4_symbol_foreach([b4_symbol_no_destructor_assert
]) 
  31 @output(b4_parser_file_name@
)@
 
  32 b4_copyright([Skeleton implementation 
for Bison 
LALR(1) parsers in Java
], 
  35 b4_percent_define_ifdef([package], [package b4_percent_define_get([package]); 
  36 ])[/* First part of user declarations.  */ 
  39 b4_percent_code_get([[imports
]]) 
  41  * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>. 
  43  * @@author LALR (1) parser skeleton written by Paolo Bonzini. 
  45 ]b4_percent_define_get3([annotations
], [], [ ])dnl
 
  46 b4_public_if([public ])dnl
 
  47 b4_abstract_if([abstract ])dnl
 
  48 b4_final_if([final ])dnl
 
  49 b4_strictfp_if([strictfp ])dnl
 
  50 [class ]b4_parser_class_name
[]dnl
 
  51 b4_percent_define_get3([extends], [ extends ])dnl
 
  52 b4_percent_define_get3([implements], [ implements ])[ 
  55 ]b4_error_verbose_if([[ 
  56   /** True if verbose error messages are enabled.  */ 
  57   private boolean yyErrorVerbose 
= true; 
  60    * Return whether verbose error messages are enabled. 
  62   public final boolean getErrorVerbose() { return yyErrorVerbose
; } 
  65    * Set the verbosity of error messages. 
  66    * @@param verbose True to request verbose error messages. 
  68   public final void setErrorVerbose(boolean verbose
) 
  69   { yyErrorVerbose 
= verbose
; } 
  74    * A class defining a pair of positions.  Positions, defined by the 
  75    * <code>]b4_position_type[</code> class, denote a point in the input. 
  76    * Locations represent a part of the input through the beginning 
  77    * and ending positions.  */ 
  78   public class ]b4_location_type
[ { 
  79     /** The first, inclusive, position in the range.  */ 
  80     public ]b4_position_type
[ begin
; 
  82     /** The first position beyond the range.  */ 
  83     public ]b4_position_type
[ end
; 
  86      * Create a <code>]b4_location_type[</code> denoting an empty range located at 
  88      * @@param loc The position at which the range is anchored.  */ 
  89     public ]b4_location_type
[ (]b4_position_type
[ loc
) { 
  90       this.begin 
= this.end 
= loc
; 
  94      * Create a <code>]b4_location_type[</code> from the endpoints of the range. 
  95      * @@param begin The first position included in the range. 
  96      * @@param end   The first position beyond the range.  */ 
  97     public ]b4_location_type
[ (]b4_position_type
[ begin
, ]b4_position_type
[ end
) { 
 103      * Print a representation of the location.  For this to be correct, 
 104      * <code>]b4_position_type[</code> should override the <code>equals</code> 
 106     public String 
toString () { 
 107       if (begin
.equals (end
)) 
 108         return begin
.toString (); 
 110         return begin
.toString () + "-" + end
.toString (); 
 117   private ]b4_location_type
[ yylloc (YYStack rhs
, int n
) 
 120       return new ]b4_location_type
[ (rhs
.locationAt (1).begin
, rhs
.locationAt (n
).end
); 
 122       return new ]b4_location_type
[ (rhs
.locationAt (0).end
); 
 126    * Communication interface between the scanner and the Bison-generated 
 127    * parser <tt>]b4_parser_class_name[</tt>. 
 129   public interface Lexer 
{ 
 130     /** Token returned by the scanner to signal the end of its input.  */ 
 131     public static final int EOF 
= 0; 
 133 ]b4_token_enums(b4_tokens
)[ 
 135     ]b4_locations_if([[/** 
 136      * Method to retrieve the beginning position of the last scanned token. 
 137      * @@return the position at which the last scanned token starts.  */ 
 138     ]b4_position_type
[ getStartPos (); 
 141      * Method to retrieve the ending position of the last scanned token. 
 142      * @@return the first position beyond the last scanned token.  */ 
 143     ]b4_position_type
[ getEndPos ();]])[ 
 146      * Method to retrieve the semantic value of the last scanned token. 
 147      * @@return the semantic value of the last scanned token.  */ 
 148     ]b4_yystype
[ getLVal (); 
 151      * Entry point for the scanner.  Returns the token identifier corresponding 
 152      * to the next token and prepares to return the semantic value 
 153      * ]b4_locations_if([and beginning/ending positions ])[of the token. 
 154      * @@return the token identifier corresponding to the next token. */ 
 155     int yylex () ]b4_maybe_throws([b4_lex_throws
])[; 
 158      * Entry point for error reporting.  Emits an error 
 159      * ]b4_locations_if([referring to the given location ])[in a user-defined way. 
 161      * ]b4_locations_if([[@@param loc The location of the element to which the 
 162      *                error message is related]])[ 
 163      * @@param msg The string for the error message.  */ 
 164      void yyerror (]b4_locations_if([b4_location_type
[ loc
, ]])[String msg
);] 
 167   b4_lexer_if([[private class YYLexer 
implements Lexer 
{ 
 168 ]b4_percent_code_get([[lexer
]])[ 
 171   ]])[/** The object doing lexical analysis for us.  */ 
 172   private Lexer yylexer
; 
 178    * Instantiates the Bison-generated parser. 
 180   public ]b4_parser_class_name (b4_parse_param_decl([b4_lex_param_decl
])[) ]b4_maybe_throws([b4_init_throws
])[ 
 182     ]b4_percent_code_get([[init
]])[ 
 183     this.yylexer 
= new YYLexer(]b4_lex_param_call
[); 
 184     ]b4_parse_param_cons
[ 
 189    * Instantiates the Bison-generated parser. 
 190    * @@param yylexer The scanner that will supply tokens to the parser. 
 192   b4_lexer_if([[protected]], [[public]]) b4_parser_class_name
[ (]b4_parse_param_decl([[Lexer yylexer
]])[) ]b4_maybe_throws([b4_init_throws
])[ 
 194     ]b4_percent_code_get([[init
]])[ 
 195     this.yylexer 
= yylexer
; 
 196     ]b4_parse_param_cons
[ 
 199   private java
.io
.PrintStream yyDebugStream 
= System
.err
; 
 202    * Return the <tt>PrintStream</tt> on which the debugging output is 
 205   public final java
.io
.PrintStream 
getDebugStream () { return yyDebugStream
; } 
 208    * Set the <tt>PrintStream</tt> on which the debug output is printed. 
 209    * @@param s The stream that is used for debugging output. 
 211   public final void setDebugStream(java
.io
.PrintStream s
) { yyDebugStream 
= s
; } 
 213   private int yydebug 
= 0; 
 216    * Answer the verbosity of the debugging output; 0 means that all kinds of 
 217    * output from the parser are suppressed. 
 219   public final int getDebugLevel() { return yydebug
; } 
 222    * Set the verbosity of the debugging output; 0 means that all kinds of 
 223    * output from the parser are suppressed. 
 224    * @@param level The verbosity level for debugging output. 
 226   public final void setDebugLevel(int level
) { yydebug 
= level
; } 
 229    * Print an error message via the lexer. 
 230    *]b4_locations_if([[ Use a <code>null</code> location.]])[ 
 231    * @@param msg The error message. 
 233   public final void yyerror (String msg
) 
 235     yylexer
.yyerror (]b4_locations_if([[(]b4_location_type
[)null, ]])[msg
); 
 239    * Print an error message via the lexer. 
 240    * @@param loc The location associated with the message. 
 241    * @@param msg The error message. 
 243   public final void yyerror (]b4_location_type
[ loc
, String msg
) 
 245     yylexer
.yyerror (loc
, msg
); 
 249    * Print an error message via the lexer. 
 250    * @@param pos The position associated with the message. 
 251    * @@param msg The error message. 
 253   public final void yyerror (]b4_position_type
[ pos
, String msg
) 
 255     yylexer
.yyerror (new ]b4_location_type
[ (pos
), msg
); 
 258   [protected final void yycdebug (String s
) { 
 260       yyDebugStream
.println (s
); 
 263   private final class YYStack 
{ 
 264     private int[] stateStack 
= new int[16]; 
 265     ]b4_locations_if([[private ]b4_location_type
[[] locStack 
= new ]b4_location_type
[[16];]])[ 
 266     private ]b4_yystype
[[] valueStack 
= new ]b4_yystype
[[16]; 
 268     public int size 
= 16; 
 269     public int height 
= -1; 
 271     public final void push (int state
, ]b4_yystype
[ value
]dnl
 
 272                             b4_locations_if([, ]b4_location_type
[ loc
])[) { 
 276           int[] newStateStack 
= new int[size 
* 2]; 
 277           System
.arraycopy (stateStack
, 0, newStateStack
, 0, height
); 
 278           stateStack 
= newStateStack
; 
 280           ]b4_location_type
[[] newLocStack 
= new ]b4_location_type
[[size 
* 2]; 
 281           System
.arraycopy (locStack
, 0, newLocStack
, 0, height
); 
 282           locStack 
= newLocStack
;]]) 
 284           b4_yystype
[[] newValueStack 
= new ]b4_yystype
[[size 
* 2]; 
 285           System
.arraycopy (valueStack
, 0, newValueStack
, 0, height
); 
 286           valueStack 
= newValueStack
; 
 291       stateStack
[height
] = state
; 
 292       ]b4_locations_if([[locStack
[height
] = loc
;]])[ 
 293       valueStack
[height
] = value
; 
 296     public final void pop () { 
 300     public final void pop (int num
) { 
 301       // Avoid memory leaks... garbage collection is a white lie! 
 303         java
.util
.Arrays
.fill (valueStack
, height 
- num 
+ 1, height
, null); 
 304         ]b4_locations_if([[java
.util
.Arrays
.fill (locStack
, height 
- num 
+ 1, height
, null);]])[ 
 309     public final int stateAt (int i
) { 
 310       return stateStack
[height 
- i
]; 
 313     ]b4_locations_if([[public final ]b4_location_type
[ locationAt (int i
) { 
 314       return locStack
[height 
- i
]; 
 317     ]])[public final ]b4_yystype
[ valueAt (int i
) { 
 318       return valueStack
[height 
- i
]; 
 321     // Print the state stack on the debug stream. 
 322     public void print (java
.io
.PrintStream out
) 
 324       out
.print ("Stack now"); 
 326       for (int i 
= 0; i 
< height
; i
++) 
 329           out
.print (stateStack
[i
]); 
 336    * Returned by a Bison action in order to stop the parsing process and 
 337    * return success (<tt>true</tt>).  */ 
 338   public static final int YYACCEPT 
= 0; 
 341    * Returned by a Bison action in order to stop the parsing process and 
 342    * return failure (<tt>false</tt>).  */ 
 343   public static final int YYABORT 
= 1; 
 346    * Returned by a Bison action in order to start error recovery without 
 347    * printing an error message.  */ 
 348   public static final int YYERROR 
= 2; 
 351    * Returned by a Bison action in order to print an error message and start 
 353   public static final int YYFAIL 
= 3; 
 355   private static final int YYNEWSTATE 
= 4; 
 356   private static final int YYDEFAULT 
= 5; 
 357   private static final int YYREDUCE 
= 6; 
 358   private static final int YYERRLAB1 
= 7; 
 359   private static final int YYRETURN 
= 8; 
 361   private int yyerrstatus_ 
= 0; 
 364    * Return whether error recovery is being done.  In this state, the parser 
 365    * reads token until it reaches a known state, and then restarts normal 
 367   public final boolean recovering () 
 369     return yyerrstatus_ 
== 0; 
 372   private int yyaction (int yyn
, YYStack yystack
, int yylen
) ]b4_maybe_throws([b4_throws
])[ 
 375     ]b4_locations_if([b4_location_type
[ yyloc 
= yylloc (yystack
, yylen
);]])[ 
 377     /* If YYLEN is nonzero, implement the default value of the action: 
 378        `$$ = $1'.  Otherwise, use the top of the stack. 
 380        Otherwise, the following line sets YYVAL to garbage. 
 381        This behavior is undocumented and Bison 
 382        users should not rely upon it.  */ 
 384       yyval 
= yystack
.valueAt (yylen 
- 1); 
 386       yyval 
= yystack
.valueAt (0); 
 388     yy_reduce_print (yyn
, yystack
); 
 396     yy_symbol_print ("-> $$ =", yyr1_
[yyn
], yyval
]b4_locations_if([, yyloc
])[); 
 401     /* Shift the result of the reduction.  */ 
 403     int yystate 
= yypgoto_
[yyn 
- yyntokens_
] + yystack
.stateAt (0); 
 404     if (0 <= yystate 
&& yystate 
<= yylast_
 
 405         && yycheck_
[yystate
] == yystack
.stateAt (0)) 
 406       yystate 
= yytable_
[yystate
]; 
 408       yystate 
= yydefgoto_
[yyn 
- yyntokens_
]; 
 410     yystack
.push (yystate
, yyval
]b4_locations_if([, yyloc
])[); 
 414 ]b4_error_verbose_if([[ 
 415   /* Return YYSTR after stripping away unnecessary quotes and 
 416      backslashes, so that it's suitable for yyerror.  The heuristic is 
 417      that double-quoting is unnecessary unless the string contains an 
 418      apostrophe, a comma, or backslash (other than backslash-backslash). 
 419      YYSTR is taken from yytname.  */ 
 420   private final String 
yytnamerr_ (String yystr
) 
 422     if (yystr
.charAt (0) == '"') 
 424         StringBuffer yyr 
= new StringBuffer (); 
 425         strip_quotes
: for (int i 
= 1; i 
< yystr
.length (); i
++) 
 426           switch (yystr
.charAt (i
)) 
 433               if (yystr
.charAt(++i
) != '\\') 
 437               yyr
.append (yystr
.charAt (i
)); 
 441               return yyr
.toString (); 
 444     else if (yystr
.equals ("$end")) 
 445       return "end of input"; 
 451   /*--------------------------------. 
 452   | Print this symbol on YYOUTPUT.  | 
 453   `--------------------------------*/ 
 455   private void yy_symbol_print (String s
, int yytype
, 
 456                                  ]b4_yystype
[ yyvaluep
]dnl
 
 457                                  b4_locations_if([, Object yylocationp
])[) 
 460     yycdebug (s 
+ (yytype 
< yyntokens_ ? 
" token " : " nterm ") 
 461               + yytname_
[yytype
] + " ("]b4_locations_if([ 
 462               + yylocationp 
+ ": "])[ 
 463               + (yyvaluep 
== null ? 
"(null)" : yyvaluep
.toString ()) + ")"); 
 467    * Parse input from the scanner that was specified at object construction 
 468    * time.  Return whether the end of the input was reached successfully. 
 470    * @@return <tt>true</tt> if the parsing succeeds.  Note that this does not 
 471    *          imply that there were no syntax errors. 
 473   public boolean parse () ]b4_maybe_throws([b4_list2([b4_lex_throws
], [b4_throws
])])[ 
 475     /// Lookahead and lookahead in internal form. 
 476     int yychar 
= yyempty_
; 
 484     YYStack yystack 
= new YYStack (); 
 486     /* Error handling.  */ 
 488     ]b4_locations_if([/// The location where the error started. 
 489     ]b4_location_type
[ yyerrloc 
= null; 
 491     /// ]b4_location_type[ of the lookahead. 
 492     ]b4_location_type
[ yylloc 
= new ]b4_location_type
[ (null, null); 
 495     ]b4_location_type
[ yyloc
;]) 
 497     /// Semantic value of the lookahead. 
 498     b4_yystype
[ yylval 
= null; 
 502     yycdebug ("Starting parse\n"); 
 505 ]m4_ifdef([b4_initial_action
], [ 
 506 m4_pushdef([b4_at_dollar
],     [yylloc
])dnl
 
 507 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
 
 508     /* User initialization code.  */ 
 509     b4_user_initial_action
 
 510 m4_popdef([b4_dollar_dollar
])dnl
 
 511 m4_popdef([b4_at_dollar
])])dnl
 
 513   [  /* Initialize the stack.  */ 
 514     yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[); 
 516     int label 
= YYNEWSTATE
; 
 520         /* New state.  Unlike in the C/C++ skeletons, the state is already 
 521            pushed when we come here.  */ 
 523         yycdebug ("Entering state " + yystate 
+ "\n"); 
 525           yystack
.print (yyDebugStream
); 
 528         if (yystate 
== yyfinal_
) 
 531         /* Take a decision.  First try without lookahead.  */ 
 532         yyn 
= yypact_
[yystate
]; 
 533         if (yyn 
== yypact_ninf_
) 
 539         /* Read a lookahead token.  */ 
 540         if (yychar 
== yyempty_
) 
 542             yycdebug ("Reading a token: "); 
 543             yychar 
= yylexer
.yylex ();] 
 545             yylloc 
= new ]b4_location_type
[(yylexer
.getStartPos (), 
 546                             yylexer
.getEndPos ());]]) 
 547             yylval 
= yylexer
.getLVal ();[ 
 550         /* Convert token to internal form.  */ 
 551         if (yychar 
<= Lexer
.EOF
) 
 553             yychar 
= yytoken 
= Lexer
.EOF
; 
 554             yycdebug ("Now at end of input.\n"); 
 558             yytoken 
= yytranslate_ (yychar
); 
 559             yy_symbol_print ("Next token is", yytoken
, 
 560                              yylval
]b4_locations_if([, yylloc
])[); 
 563         /* If the proper action on seeing token YYTOKEN is to reduce or to 
 564            detect an error, take that action.  */ 
 566         if (yyn 
< 0 || yylast_ 
< yyn 
|| yycheck_
[yyn
] != yytoken
) 
 569         /* <= 0 means reduce or error.  */ 
 570         else if ((yyn 
= yytable_
[yyn
]) <= 0) 
 572             if (yyn 
== 0 || yyn 
== yytable_ninf_
) 
 583             /* Shift the lookahead token.  */ 
 584             yy_symbol_print ("Shifting", yytoken
, 
 585                              yylval
]b4_locations_if([, yylloc
])[); 
 587             /* Discard the token being shifted.  */ 
 590             /* Count tokens shifted since error; after three, turn off error 
 592             if (yyerrstatus_ 
> 0) 
 596             yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[); 
 601       /*-----------------------------------------------------------. 
 602       | yydefault -- do the default action for the current state.  | 
 603       `-----------------------------------------------------------*/ 
 605         yyn 
= yydefact_
[yystate
]; 
 612       /*-----------------------------. 
 613       | yyreduce -- Do a reduction.  | 
 614       `-----------------------------*/ 
 617         label 
= yyaction (yyn
, yystack
, yylen
); 
 618         yystate 
= yystack
.stateAt (0); 
 621       /*------------------------------------. 
 622       | yyerrlab -- here on detecting error | 
 623       `------------------------------------*/ 
 625         /* If not already recovering from an error, report this error.  */ 
 626         if (yyerrstatus_ 
== 0) 
 629             yyerror (]b4_locations_if([yylloc
, ])[yysyntax_error (yystate
, yytoken
)); 
 632         ]b4_locations_if([yyerrloc 
= yylloc
;])[ 
 633         if (yyerrstatus_ 
== 3) 
 635         /* If just tried and failed to reuse lookahead token after an 
 636          error, discard it.  */ 
 638         if (yychar 
<= Lexer
.EOF
) 
 640           /* Return failure if at end of input.  */ 
 641           if (yychar 
== Lexer
.EOF
) 
 648         /* Else will try to reuse lookahead token after shifting the error 
 653       /*---------------------------------------------------. 
 654       | errorlab -- error raised explicitly by YYERROR.  | 
 655       `---------------------------------------------------*/ 
 658         ]b4_locations_if([yyerrloc 
= yystack
.locationAt (yylen 
- 1);])[ 
 659         /* Do not reclaim the symbols of the rule which action triggered 
 663         yystate 
= yystack
.stateAt (0); 
 667       /*-------------------------------------------------------------. 
 668       | yyerrlab1 -- common code for both syntax error and YYERROR.  | 
 669       `-------------------------------------------------------------*/ 
 671         yyerrstatus_ 
= 3;       /* Each real token shifted decrements this.  */ 
 675             yyn 
= yypact_
[yystate
]; 
 676             if (yyn 
!= yypact_ninf_
) 
 679                 if (0 <= yyn 
&& yyn 
<= yylast_ 
&& yycheck_
[yyn
] == yyterror_
) 
 687             /* Pop the current state because it cannot handle the error token.  */ 
 688             if (yystack
.height 
== 1) 
 691             ]b4_locations_if([yyerrloc 
= yystack
.locationAt (0);])[ 
 693             yystate 
= yystack
.stateAt (0); 
 695               yystack
.print (yyDebugStream
); 
 699         /* Muck with the stack to setup for yylloc.  */ 
 700         yystack
.push (0, null, yylloc
); 
 701         yystack
.push (0, null, yyerrloc
); 
 702         yyloc 
= yylloc (yystack
, 2); 
 705         /* Shift the error token.  */ 
 706         yy_symbol_print ("Shifting", yystos_
[yyn
], 
 707                          yylval
]b4_locations_if([, yyloc
])[); 
 710         yystack
.push (yyn
, yylval
]b4_locations_if([, yyloc
])[); 
 724   // Generate an error message. 
 725   private String 
yysyntax_error (int yystate
, int tok
) 
 726   {]b4_error_verbose_if([[ 
 729         int yyn 
= yypact_
[yystate
]; 
 730         if (yypact_ninf_ 
< yyn 
&& yyn 
<= yylast_
) 
 734             /* Start YYX at -YYN if negative to avoid negative indexes in 
 736             int yyxbegin 
= yyn 
< 0 ? 
-yyn 
: 0; 
 738             /* Stay within bounds of both yycheck and yytname.  */ 
 739             int yychecklim 
= yylast_ 
- yyn 
+ 1; 
 740             int yyxend 
= yychecklim 
< yyntokens_ ? yychecklim 
: yyntokens_
; 
 742             for (int x 
= yyxbegin
; x 
< yyxend
; ++x
) 
 743               if (yycheck_
[x 
+ yyn
] == x 
&& x 
!= yyterror_
) 
 746             // FIXME: This method of building the message is not compatible 
 747             // with internationalization. 
 748             res 
= new StringBuffer ("syntax error, unexpected "); 
 749             res
.append (yytnamerr_ (yytname_
[tok
])); 
 753                 for (int x 
= yyxbegin
; x 
< yyxend
; ++x
) 
 754                   if (yycheck_
[x 
+ yyn
] == x 
&& x 
!= yyterror_
) 
 756                       res
.append (count
++ == 0 ? 
", expecting " : " or "); 
 757                       res
.append (yytnamerr_ (yytname_
[x
])); 
 760             return res
.toString (); 
 764     return "syntax error"; 
 767   private static final ]b4_int_type_for([b4_pact
])[ yypact_ninf_ 
= ]b4_pact_ninf
[; 
 768   private static final ]b4_int_type_for([b4_table
])[ yytable_ninf_ 
= ]b4_table_ninf
[; 
 770   ]b4_parser_tables_define
[ 
 771   ]b4_integral_parser_table_define([token_number
], [b4_toknum
], 
 772      [TOKEN_NUMBER_
[YYLEX
-NUM
] -- Internal symbol number corresponding
 
 775   /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 
 776      First, the terminals, then, starting at \a yyntokens_, nonterminals.  */ 
 777   ]b4_typed_parser_table_define([String
], [tname
], [b4_tname
])[ 
 779   ]b4_integral_parser_table_define([rline
], [b4_rline
], 
 780   [YYRLINE
[YYN
] -- Source line where rule number YYN was defined
.])[ 
 782   // Report on the debug stream that the rule yyrule is going to be reduced. 
 783   private void yy_reduce_print (int yyrule
, YYStack yystack
) 
 788     int yylno 
= yyrline_
[yyrule
]; 
 789     int yynrhs 
= yyr2_
[yyrule
]; 
 790     /* Print the symbols being reduced, and their result.  */ 
 791     yycdebug ("Reducing stack by rule " + (yyrule 
- 1) 
 792               + " (line " + yylno 
+ "), "); 
 794     /* The symbols being reduced.  */ 
 795     for (int yyi 
= 0; yyi 
< yynrhs
; yyi
++) 
 796       yy_symbol_print ("   $" + (yyi 
+ 1) + " =", 
 797                        yystos_
[yystack
.stateAt(yyi 
+ 1 - yynrhs
)], 
 798                        ]b4_rhs_value(yynrhs
, yyi 
+ 1)b4_locations_if([, 
 799                        b4_rhs_location(yynrhs
, yyi 
+ 1)])[); 
 802   /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */ 
 803   ]b4_integral_parser_table_define([translate_table
], [b4_translate
])[ 
 805   private static final ]b4_int_type_for([b4_translate
])[ yytranslate_ (int t
) 
 807     if (t 
>= 0 && t 
<= yyuser_token_number_max_
) 
 808       return yytranslate_table_
[t
]; 
 810       return yyundef_token_
; 
 813   private static final int yylast_ 
= ]b4_last
[; 
 814   private static final int yynnts_ 
= ]b4_nterms_number
[; 
 815   private static final int yyempty_ 
= -2; 
 816   private static final int yyfinal_ 
= ]b4_final_state_number
[; 
 817   private static final int yyterror_ 
= 1; 
 818   private static final int yyerrcode_ 
= 256; 
 819   private static final int yyntokens_ 
= ]b4_tokens_number
[; 
 821   private static final int yyuser_token_number_max_ 
= ]b4_user_token_number_max
[; 
 822   private static final int yyundef_token_ 
= ]b4_undef_token_number
[; 
 824 ]/* User implementation code.  */ 
 825 b4_percent_code_get
[]dnl