1 # Java skeleton
for Bison
-*- autoconf
-*-
3 #
Copyright (C
) 2007-2013 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 # We don
't depend on %debug in Java, but pacify warnings about non-used flags.
24 b4_parse_trace_if([0], [0])
26 m4_define([b4_symbol_no_destructor_assert],
27 [b4_symbol_if([$1], [has_destructor],
28 [b4_fatal([%s: %s: %%destructor does not make sense in Java],
30 [b4_symbol_action_location([$1], [destructor])])])])
31 b4_symbol_foreach([b4_symbol_no_destructor_assert])
33 b4_output_begin([b4_parser_file_name])
34 b4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java],
37 b4_percent_define_ifdef([package], [package b4_percent_define_get([package]);
38 ])[/* First part of user declarations. */
41 b4_percent_code_get([[imports]])
43 * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>.
45 * @@author LALR (1) parser skeleton written by Paolo Bonzini.
47 ]b4_percent_define_get3([annotations], [], [ ])dnl
48 b4_public_if([public ])dnl
49 b4_abstract_if([abstract ])dnl
50 b4_final_if([final ])dnl
51 b4_strictfp_if([strictfp ])dnl
52 [class ]b4_parser_class_name[]dnl
53 b4_percent_define_get3([extends], [ extends ])dnl
54 b4_percent_define_get3([implements], [ implements ])[
57 ]b4_error_verbose_if([[
59 * True if verbose error messages are enabled.
61 private boolean yyErrorVerbose = true;
64 * Return whether verbose error messages are enabled.
66 public final boolean getErrorVerbose() { return yyErrorVerbose; }
69 * Set the verbosity of error messages.
70 * @@param verbose True to request verbose error messages.
72 public final void setErrorVerbose(boolean verbose)
73 { yyErrorVerbose = verbose; }
78 * A class defining a pair of positions. Positions, defined by the
79 * <code>]b4_position_type[</code> class, denote a point in the input.
80 * Locations represent a part of the input through the beginning
81 * and ending positions.
83 public class ]b4_location_type[ {
85 * The first, inclusive, position in the range.
87 public ]b4_position_type[ begin;
90 * The first position beyond the range.
92 public ]b4_position_type[ end;
95 * Create a <code>]b4_location_type[</code> denoting an empty range located at
97 * @@param loc The position at which the range is anchored.
99 public ]b4_location_type[ (]b4_position_type[ loc) {
100 this.begin = this.end = loc;
104 * Create a <code>]b4_location_type[</code> from the endpoints of the range.
105 * @@param begin The first position included in the range.
106 * @@param end The first position beyond the range.
108 public ]b4_location_type[ (]b4_position_type[ begin, ]b4_position_type[ end) {
114 * Print a representation of the location. For this to be correct,
115 * <code>]b4_position_type[</code> should override the <code>equals</code>
118 public String toString () {
119 if (begin.equals (end))
120 return begin.toString ();
122 return begin.toString () + "-" + end.toString ();
129 private ]b4_location_type[ yylloc (YYStack rhs, int n)
132 return new ]b4_location_type[ (rhs.locationAt (n-1).begin, rhs.locationAt (0).end);
134 return new ]b4_location_type[ (rhs.locationAt (0).end);
138 * Communication interface between the scanner and the Bison-generated
139 * parser <tt>]b4_parser_class_name[</tt>.
141 public interface Lexer {
142 /** Token returned by the scanner to signal the end of its input. */
143 public static final int EOF = 0;
147 ]b4_locations_if([[/**
148 * Method to retrieve the beginning position of the last scanned token.
149 * @@return the position at which the last scanned token starts.
151 ]b4_position_type[ getStartPos ();
154 * Method to retrieve the ending position of the last scanned token.
155 * @@return the first position beyond the last scanned token.
157 ]b4_position_type[ getEndPos ();]])[
160 * Method to retrieve the semantic value of the last scanned token.
161 * @@return the semantic value of the last scanned token.
163 ]b4_yystype[ getLVal ();
166 * Entry point for the scanner. Returns the token identifier corresponding
167 * to the next token and prepares to return the semantic value
168 * ]b4_locations_if([and beginning/ending positions ])[of the token.
169 * @@return the token identifier corresponding to the next token.
171 int yylex () ]b4_maybe_throws([b4_lex_throws])[;
174 * Entry point for error reporting. Emits an error
175 * ]b4_locations_if([referring to the given location ])[in a user-defined way.
177 * ]b4_locations_if([[@@param loc The location of the element to which the
178 * error message is related]])[
179 * @@param msg The string for the error message.
181 void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String msg);]
184 b4_lexer_if([[private class YYLexer implements Lexer {
185 ]b4_percent_code_get([[lexer]])[
189 * The object doing lexical analysis for us.
191 private Lexer yylexer;
197 * Instantiates the Bison-generated parser.
199 public ]b4_parser_class_name (b4_parse_param_decl([b4_lex_param_decl])[) ]b4_maybe_throws([b4_init_throws])[
201 ]b4_percent_code_get([[init]])[
202 this.yylexer = new YYLexer(]b4_lex_param_call[);
203 ]b4_parse_param_cons[
208 * Instantiates the Bison-generated parser.
209 * @@param yylexer The scanner that will supply tokens to the parser.
211 b4_lexer_if([[protected]], [[public]]) b4_parser_class_name[ (]b4_parse_param_decl([[Lexer yylexer]])[) ]b4_maybe_throws([b4_init_throws])[
213 ]b4_percent_code_get([[init]])[
214 this.yylexer = yylexer;
215 ]b4_parse_param_cons[
218 private java.io.PrintStream yyDebugStream = System.err;
221 * Return the <tt>PrintStream</tt> on which the debugging output is
224 public final java.io.PrintStream getDebugStream () { return yyDebugStream; }
227 * Set the <tt>PrintStream</tt> on which the debug output is printed.
228 * @@param s The stream that is used for debugging output.
230 public final void setDebugStream(java.io.PrintStream s) { yyDebugStream = s; }
232 private int yydebug = 0;
235 * Answer the verbosity of the debugging output; 0 means that all kinds of
236 * output from the parser are suppressed.
238 public final int getDebugLevel() { return yydebug; }
241 * Set the verbosity of the debugging output; 0 means that all kinds of
242 * output from the parser are suppressed.
243 * @@param level The verbosity level for debugging output.
245 public final void setDebugLevel(int level) { yydebug = level; }
248 * Print an error message via the lexer.
249 *]b4_locations_if([[ Use a <code>null</code> location.]])[
250 * @@param msg The error message.
252 public final void yyerror (String msg)
254 yylexer.yyerror (]b4_locations_if([[(]b4_location_type[)null, ]])[msg);
258 * Print an error message via the lexer.
259 * @@param loc The location associated with the message.
260 * @@param msg The error message.
262 public final void yyerror (]b4_location_type[ loc, String msg)
264 yylexer.yyerror (loc, msg);
268 * Print an error message via the lexer.
269 * @@param pos The position associated with the message.
270 * @@param msg The error message.
272 public final void yyerror (]b4_position_type[ pos, String msg)
274 yylexer.yyerror (new ]b4_location_type[ (pos), msg);
277 [protected final void yycdebug (String s) {
279 yyDebugStream.println (s);
282 private final class YYStack {
283 private int[] stateStack = new int[16];
284 ]b4_locations_if([[private ]b4_location_type[[] locStack = new ]b4_location_type[[16];]])[
285 private ]b4_yystype[[] valueStack = new ]b4_yystype[[16];
287 public int size = 16;
288 public int height = -1;
290 public final void push (int state, ]b4_yystype[ value]dnl
291 b4_locations_if([, ]b4_location_type[ loc])[) {
295 int[] newStateStack = new int[size * 2];
296 System.arraycopy (stateStack, 0, newStateStack, 0, height);
297 stateStack = newStateStack;
299 ]b4_location_type[[] newLocStack = new ]b4_location_type[[size * 2];
300 System.arraycopy (locStack, 0, newLocStack, 0, height);
301 locStack = newLocStack;]])
303 b4_yystype[[] newValueStack = new ]b4_yystype[[size * 2];
304 System.arraycopy (valueStack, 0, newValueStack, 0, height);
305 valueStack = newValueStack;
310 stateStack[height] = state;
311 ]b4_locations_if([[locStack[height] = loc;]])[
312 valueStack[height] = value;
315 public final void pop () {
319 public final void pop (int num) {
320 // Avoid memory leaks... garbage collection is a white lie!
322 java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null);
323 ]b4_locations_if([[java.util.Arrays.fill (locStack, height - num + 1, height + 1, null);]])[
328 public final int stateAt (int i) {
329 return stateStack[height - i];
332 ]b4_locations_if([[public final ]b4_location_type[ locationAt (int i) {
333 return locStack[height - i];
336 ]])[public final ]b4_yystype[ valueAt (int i) {
337 return valueStack[height - i];
340 // Print the state stack on the debug stream.
341 public void print (java.io.PrintStream out)
343 out.print ("Stack now");
345 for (int i = 0; i <= height; i++)
348 out.print (stateStack[i]);
355 * Returned by a Bison action in order to stop the parsing process and
356 * return success (<tt>true</tt>).
358 public static final int YYACCEPT = 0;
361 * Returned by a Bison action in order to stop the parsing process and
362 * return failure (<tt>false</tt>).
364 public static final int YYABORT = 1;
367 * Returned by a Bison action in order to start error recovery without
368 * printing an error message.
370 public static final int YYERROR = 2;
373 * Internal return codes that are not supported for user semantic
376 private static final int YYERRLAB = 3;
377 private static final int YYNEWSTATE = 4;
378 private static final int YYDEFAULT = 5;
379 private static final int YYREDUCE = 6;
380 private static final int YYERRLAB1 = 7;
381 private static final int YYRETURN = 8;
383 private int yyerrstatus_ = 0;
386 * Return whether error recovery is being done. In this state, the parser
387 * reads token until it reaches a known state, and then restarts normal
390 public final boolean recovering ()
392 return yyerrstatus_ == 0;
395 private int yyaction (int yyn, YYStack yystack, int yylen) ]b4_maybe_throws([b4_throws])[
398 ]b4_locations_if([b4_location_type[ yyloc = yylloc (yystack, yylen);]])[
400 /* If YYLEN is nonzero, implement the default value of the action:
401 '$$
= $
1'. Otherwise, use the top of the stack.
403 Otherwise, the following line sets YYVAL to garbage.
404 This behavior is undocumented and Bison
405 users should not rely upon it. */
407 yyval = yystack.valueAt (yylen - 1);
409 yyval = yystack.valueAt (0);
411 yy_reduce_print (yyn, yystack);
419 yy_symbol_print ("-> $$ =", yyr1_[yyn], yyval]b4_locations_if([, yyloc])[);
424 /* Shift the result of the reduction. */
426 int yystate = yypgoto_[yyn - yyntokens_] + yystack.stateAt (0);
427 if (0 <= yystate && yystate <= yylast_
428 && yycheck_[yystate] == yystack.stateAt (0))
429 yystate = yytable_[yystate];
431 yystate = yydefgoto_[yyn - yyntokens_];
433 yystack.push (yystate, yyval]b4_locations_if([, yyloc])[);
437 ]b4_error_verbose_if([[
438 /* Return YYSTR after stripping away unnecessary quotes and
439 backslashes, so that it's suitable
for yyerror
. The heuristic is
440 that
double-quoting is unnecessary unless the string contains an
441 apostrophe
, a comma
, or
backslash (other than backslash
-backslash
).
442 YYSTR is taken from yytname
. */
443 private final String
yytnamerr_ (String yystr
)
445 if (yystr
.charAt (0) == '"')
447 StringBuffer yyr
= new StringBuffer ();
448 strip_quotes
: for (int i
= 1; i
< yystr
.length (); i
++)
449 switch (yystr
.charAt (i
))
456 if (yystr
.charAt(++i
) != '\\')
460 yyr
.append (yystr
.charAt (i
));
464 return yyr
.toString ();
467 else if (yystr
.equals ("$end"))
468 return "end of input";
474 /*--------------------------------.
475 | Print this symbol on YYOUTPUT. |
476 `--------------------------------*/
478 private void yy_symbol_print (String s
, int yytype
,
479 ]b4_yystype
[ yyvaluep
]dnl
480 b4_locations_if([, Object yylocationp
])[)
483 yycdebug (s
+ (yytype
< yyntokens_ ?
" token " : " nterm ")
484 + yytname_
[yytype
] + " ("]b4_locations_if([
485 + yylocationp
+ ": "])[
486 + (yyvaluep
== null ?
"(null)" : yyvaluep
.toString ()) + ")");
490 * Parse input from the scanner that was specified at object construction
491 * time. Return whether the end of the input was reached successfully.
493 * @@return <tt>true</tt> if the parsing succeeds. Note that this does not
494 * imply that there were no syntax errors.
496 public boolean parse () ]b4_maybe_throws([b4_list2([b4_lex_throws
], [b4_throws
])])[
498 /// Lookahead and lookahead in internal form.
499 int yychar
= yyempty_
;
507 YYStack yystack
= new YYStack ();
509 /* Error handling. */
511 ]b4_locations_if([/// The location where the error started.
512 ]b4_location_type
[ yyerrloc
= null;
514 /// ]b4_location_type[ of the lookahead.
515 ]b4_location_type
[ yylloc
= new ]b4_location_type
[ (null, null);
518 ]b4_location_type
[ yyloc
;])
520 /// Semantic value of the lookahead.
521 b4_yystype
[ yylval
= null;
523 yycdebug ("Starting parse\n");
526 ]m4_ifdef([b4_initial_action
], [
527 b4_dollar_pushdef([yylval
], [], [yylloc
])dnl
528 /* User initialization code. */
529 b4_user_initial_action
530 b4_dollar_popdef
])[]dnl
532 [ /* Initialize the stack. */
533 yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[);
535 int label
= YYNEWSTATE
;
539 /* New state. Unlike in the C/C++ skeletons, the state is already
540 pushed when we come here. */
542 yycdebug ("Entering state " + yystate
+ "\n");
544 yystack
.print (yyDebugStream
);
547 if (yystate
== yyfinal_
)
550 /* Take a decision. First try without lookahead. */
551 yyn
= yypact_
[yystate
];
552 if (yy_pact_value_is_default_ (yyn
))
558 /* Read a lookahead token. */
559 if (yychar
== yyempty_
)
561 yycdebug ("Reading a token: ");
562 yychar
= yylexer
.yylex ();]
564 yylloc
= new ]b4_location_type
[(yylexer
.getStartPos (),
565 yylexer
.getEndPos ());]])
566 yylval
= yylexer
.getLVal ();[
569 /* Convert token to internal form. */
570 if (yychar
<= Lexer
.EOF
)
572 yychar
= yytoken
= Lexer
.EOF
;
573 yycdebug ("Now at end of input.\n");
577 yytoken
= yytranslate_ (yychar
);
578 yy_symbol_print ("Next token is", yytoken
,
579 yylval
]b4_locations_if([, yylloc
])[);
582 /* If the proper action on seeing token YYTOKEN is to reduce or to
583 detect an error, take that action. */
585 if (yyn
< 0 || yylast_
< yyn
|| yycheck_
[yyn
] != yytoken
)
588 /* <= 0 means reduce or error. */
589 else if ((yyn
= yytable_
[yyn
]) <= 0)
591 if (yy_table_value_is_error_ (yyn
))
602 /* Shift the lookahead token. */
603 yy_symbol_print ("Shifting", yytoken
,
604 yylval
]b4_locations_if([, yylloc
])[);
606 /* Discard the token being shifted. */
609 /* Count tokens shifted since error; after three, turn off error
611 if (yyerrstatus_
> 0)
615 yystack
.push (yystate
, yylval
]b4_locations_if([, yylloc
])[);
620 /*-----------------------------------------------------------.
621 | yydefault -- do the default action for the current state. |
622 `-----------------------------------------------------------*/
624 yyn
= yydefact_
[yystate
];
631 /*-----------------------------.
632 | yyreduce -- Do a reduction. |
633 `-----------------------------*/
636 label
= yyaction (yyn
, yystack
, yylen
);
637 yystate
= yystack
.stateAt (0);
640 /*------------------------------------.
641 | yyerrlab -- here on detecting error |
642 `------------------------------------*/
644 /* If not already recovering from an error, report this error. */
645 if (yyerrstatus_
== 0)
648 if (yychar
== yyempty_
)
650 yyerror (]b4_locations_if([yylloc
, ])[yysyntax_error (yystate
, yytoken
));
653 ]b4_locations_if([yyerrloc
= yylloc
;])[
654 if (yyerrstatus_
== 3)
656 /* If just tried and failed to reuse lookahead token after an
657 error, discard it. */
659 if (yychar
<= Lexer
.EOF
)
661 /* Return failure if at end of input. */
662 if (yychar
== Lexer
.EOF
)
669 /* Else will try to reuse lookahead token after shifting the error
674 /*---------------------------------------------------.
675 | errorlab -- error raised explicitly by YYERROR. |
676 `---------------------------------------------------*/
679 ]b4_locations_if([yyerrloc
= yystack
.locationAt (yylen
- 1);])[
680 /* Do not reclaim the symbols of the rule which action triggered
684 yystate
= yystack
.stateAt (0);
688 /*-------------------------------------------------------------.
689 | yyerrlab1 -- common code for both syntax error and YYERROR. |
690 `-------------------------------------------------------------*/
692 yyerrstatus_
= 3; /* Each real token shifted decrements this. */
696 yyn
= yypact_
[yystate
];
697 if (!yy_pact_value_is_default_ (yyn
))
700 if (0 <= yyn
&& yyn
<= yylast_
&& yycheck_
[yyn
] == yyterror_
)
708 /* Pop the current state because it cannot handle the error token. */
709 if (yystack
.height
== 0)
712 ]b4_locations_if([yyerrloc
= yystack
.locationAt (0);])[
714 yystate
= yystack
.stateAt (0);
716 yystack
.print (yyDebugStream
);
720 /* Muck with the stack to setup for yylloc. */
721 yystack
.push (0, null, yylloc
);
722 yystack
.push (0, null, yyerrloc
);
723 yyloc
= yylloc (yystack
, 2);
726 /* Shift the error token. */
727 yy_symbol_print ("Shifting", yystos_
[yyn
],
728 yylval
]b4_locations_if([, yyloc
])[);
731 yystack
.push (yyn
, yylval
]b4_locations_if([, yyloc
])[);
745 // Generate an error message.
746 private String
yysyntax_error (int yystate
, int tok
)
747 {]b4_error_verbose_if([[
750 /* There are many possibilities here to consider:
751 - If this state is a consistent state with a default action,
752 then the only way this function was invoked is if the
753 default action is an error action. In that case, don't
754 check for expected tokens because there are none.
755 - The only way there can be no lookahead present (in tok) is
756 if this state is a consistent state with a default action.
757 Thus, detecting the absence of a lookahead is sufficient to
758 determine that there is no unexpected or expected token to
759 report. In that case, just report a simple "syntax error".
760 - Don't assume there isn't a lookahead just because this
761 state is a consistent state with a default action. There
762 might have been a previous inconsistent state, consistent
763 state with a non-default action, or user semantic action
764 that manipulated yychar. (However, yychar is currently out
765 of scope during semantic actions.)
766 - Of course, the expected token list depends on states to
767 have correct lookahead information, and it depends on the
768 parser not to perform extra reductions after fetching a
769 lookahead from the scanner and before detecting a syntax
770 error. Thus, state merging (from LALR or IELR) and default
771 reductions corrupt the expected token list. However, the
772 list is correct for canonical LR with one exception: it
773 will still contain any token that will not be accepted due
774 to an error action in a later state.
778 /* FIXME: This method of building the message is not compatible
779 with internationalization. */
781 new StringBuffer ("syntax error, unexpected ");
782 res
.append (yytnamerr_ (yytname_
[tok
]));
783 int yyn
= yypact_
[yystate
];
784 if (!yy_pact_value_is_default_ (yyn
))
786 /* Start YYX at -YYN if negative to avoid negative
787 indexes in YYCHECK. In other words, skip the first
788 -YYN actions for this state because they are default
790 int yyxbegin
= yyn
< 0 ?
-yyn
: 0;
791 /* Stay within bounds of both yycheck and yytname. */
792 int yychecklim
= yylast_
- yyn
+ 1;
793 int yyxend
= yychecklim
< yyntokens_ ? yychecklim
: yyntokens_
;
795 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
796 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
797 && !yy_table_value_is_error_ (yytable_
[x
+ yyn
]))
802 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
803 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
804 && !yy_table_value_is_error_ (yytable_
[x
+ yyn
]))
806 res
.append (count
++ == 0 ?
", expecting " : " or ");
807 res
.append (yytnamerr_ (yytname_
[x
]));
811 return res
.toString ();
815 return "syntax error";
819 * Whether the given <code>yypact_</code> value indicates a defaulted state.
820 * @@param yyvalue the value to check
822 private static boolean yy_pact_value_is_default_ (int yyvalue
)
824 return yyvalue
== yypact_ninf_
;
828 * Whether the given <code>yytable_</code>
829 * value indicates a syntax error.
830 * @@param yyvalue the value to check
832 private static boolean yy_table_value_is_error_ (int yyvalue
)
834 return yyvalue
== yytable_ninf_
;
837 private static final ]b4_int_type_for([b4_pact
])[ yypact_ninf_
= ]b4_pact_ninf
[;
838 private static final ]b4_int_type_for([b4_table
])[ yytable_ninf_
= ]b4_table_ninf
[;
840 ]b4_parser_tables_define
[
841 ]b4_integral_parser_table_define([token_number
], [b4_toknum
],
842 [[YYTOKEN_NUMBER
[YYLEX
-NUM
] -- Internal symbol number corresponding
845 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
846 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
847 ]b4_typed_parser_table_define([String
], [tname
], [b4_tname
])[
849 ]b4_integral_parser_table_define([rline
], [b4_rline
],
850 [[YYRLINE
[YYN
] -- Source line where rule number YYN was defined
.]])[
852 // Report on the debug stream that the rule yyrule is going to be reduced.
853 private void yy_reduce_print (int yyrule
, YYStack yystack
)
858 int yylno
= yyrline_
[yyrule
];
859 int yynrhs
= yyr2_
[yyrule
];
860 /* Print the symbols being reduced, and their result. */
861 yycdebug ("Reducing stack by rule " + (yyrule
- 1)
862 + " (line " + yylno
+ "), ");
864 /* The symbols being reduced. */
865 for (int yyi
= 0; yyi
< yynrhs
; yyi
++)
866 yy_symbol_print (" $" + (yyi
+ 1) + " =",
867 yystos_
[yystack
.stateAt(yynrhs
- (yyi
+ 1))],
868 ]b4_rhs_value(yynrhs
, yyi
+ 1)b4_locations_if([,
869 b4_rhs_location(yynrhs
, yyi
+ 1)])[);
872 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
873 ]b4_integral_parser_table_define([translate_table
], [b4_translate
])[
875 private static final ]b4_int_type_for([b4_translate
])[ yytranslate_ (int t
)
877 if (t
>= 0 && t
<= yyuser_token_number_max_
)
878 return yytranslate_table_
[t
];
880 return yyundef_token_
;
883 private static final int yylast_
= ]b4_last
[;
884 private static final int yynnts_
= ]b4_nterms_number
[;
885 private static final int yyempty_
= -2;
886 private static final int yyfinal_
= ]b4_final_state_number
[;
887 private static final int yyterror_
= 1;
888 private static final int yyerrcode_
= 256;
889 private static final int yyntokens_
= ]b4_tokens_number
[;
891 private static final int yyuser_token_number_max_
= ]b4_user_token_number_max
[;
892 private static final int yyundef_token_
= ]b4_undef_token_number
[;
894 ]/* User implementation code. */
895 b4_percent_code_get
[]dnl