]> git.saurik.com Git - bison.git/blob - data/yacc.c
(struniq_assert): Now returns void, and aborts if the assertion is false.
[bison.git] / data / yacc.c
1 m4_divert(-1) -*- C -*-
2 m4_include([c.m4])
3
4 # Yacc compatible skeleton for Bison
5 # Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002
6 # Free Software Foundation, Inc.
7
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 # 02111-1307 USA
22
23
24
25 ## ---------------- ##
26 ## Default values. ##
27 ## ---------------- ##
28
29 # Stack parameters.
30 m4_define_default([b4_stack_depth_max], [10000])
31 m4_define_default([b4_stack_depth_init], [200])
32
33 # Location type.
34 m4_define_default([b4_location_type], [yyltype])
35
36
37 ## ------------------------ ##
38 ## Pure/impure interfaces. ##
39 ## ------------------------ ##
40
41
42 # b4_pure_if(IF-TRUE, IF-FALSE)
43 # -----------------------------
44 # Expand IF-TRUE, if %pure-parser and %parse-param, IF-FALSE otherwise.
45 m4_define([b4_Pure_if],
46 [b4_pure_if([m4_ifset([b4_parse_param],
47 [$1], [$2])],
48 [$2])])
49
50
51 # b4_yyerror_args
52 # ---------------
53 # Arguments passed to yyerror: user args plus yylloc.
54 m4_define([b4_yyerror_args],
55 [b4_Pure_if([b4_location_if([&yylloc, ])])dnl
56 m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
57
58
59 # b4_lex_param
60 # ------------
61 # Accumule in b4_lex_param all the yylex arguments.
62 # b4_lex_param arrives quoted twice, but we want to keep only one level.
63 m4_define([b4_lex_param],
64 m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
65 b4_location_if([, [[YYLTYPE *], [&yylloc]]])])dnl
66 m4_ifdef([b4_lex_param], [, ]b4_lex_param)))
67
68
69
70 ## ------------ ##
71 ## Data Types. ##
72 ## ------------ ##
73
74 # b4_int_type(MIN, MAX)
75 # ---------------------
76 # Return the smallest int type able to handle numbers ranging from
77 # MIN to MAX (included). We overwrite the version from c.m4 which relies
78 # on "signed char" which is not portable to old K&R compilers.
79 m4_define([b4_int_type],
80 [m4_if(b4_ints_in($@, [0], [255]), [1], [unsigned char],
81 b4_ints_in($@, [-128], [127]), [1], [yysigned_char],
82
83 b4_ints_in($@, [0], [65535]), [1], [unsigned short],
84 b4_ints_in($@, [-32768], [32767]), [1], [short],
85
86 m4_eval([0 <= $1]), [1], [unsigned int],
87
88 [int])])
89
90
91 ## ----------------- ##
92 ## Semantic Values. ##
93 ## ----------------- ##
94
95
96 # b4_lhs_value([TYPE])
97 # --------------------
98 # Expansion of $<TYPE>$.
99 m4_define([b4_lhs_value],
100 [yyval[]m4_ifval([$1], [.$1])])
101
102
103 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
104 # --------------------------------------
105 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
106 # symbols on RHS.
107 m4_define([b4_rhs_value],
108 [yyvsp@{m4_eval([$2 - $1])@}m4_ifval([$3], [.$3])])
109
110
111
112 ## ----------- ##
113 ## Locations. ##
114 ## ----------- ##
115
116 # b4_lhs_location()
117 # -----------------
118 # Expansion of @$.
119 m4_define([b4_lhs_location],
120 [yyloc])
121
122
123 # b4_rhs_location(RULE-LENGTH, NUM)
124 # ---------------------------------
125 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
126 # on RHS.
127 m4_define([b4_rhs_location],
128 [yylsp@{m4_eval([$2 - $1])@}])
129
130
131
132 ## --------------------------------------------------------- ##
133 ## Defining symbol actions, e.g., printers and destructors. ##
134 ## --------------------------------------------------------- ##
135
136 # We do want M4 expansion after # for CPP macros.
137 m4_changecom()
138 m4_divert(0)dnl
139 @output @output_parser_name@
140 b4_copyright([Skeleton parser for Yacc-like parsing with Bison],
141 [1984, 1989, 1990, 2000, 2001, 2002])[
142
143 /* As a special exception, when this file is copied by Bison into a
144 Bison output file, you may use that output file without restriction.
145 This special exception was added by the Free Software Foundation
146 in version 1.24 of Bison. */
147
148 /* Written by Richard Stallman by simplifying the original so called
149 ``semantic'' parser. */
150
151 /* All symbols defined below should begin with yy or YY, to avoid
152 infringing on user name space. This should be done even for local
153 variables, as they might otherwise be expanded by user macros.
154 There are some unavoidable exceptions within include files to
155 define necessary library symbols; they are noted "INFRINGES ON
156 USER NAME SPACE" below. */
157
158 ]b4_identification
159 m4_if(b4_prefix[], [yy], [],
160 [/* If NAME_PREFIX is specified substitute the variables and functions
161 names. */
162 #define yyparse b4_prefix[]parse
163 #define yylex b4_prefix[]lex
164 #define yyerror b4_prefix[]error
165 #define yylval b4_prefix[]lval
166 #define yychar b4_prefix[]char
167 #define yydebug b4_prefix[]debug
168 #define yynerrs b4_prefix[]nerrs
169 b4_location_if([#define yylloc b4_prefix[]lloc])])[
170
171 ]b4_token_defines(b4_tokens)[
172
173 /* Copy the first part of user declarations. */
174 ]b4_pre_prologue[
175
176 /* Enabling traces. */
177 #ifndef YYDEBUG
178 # define YYDEBUG ]b4_debug[
179 #endif
180
181 /* Enabling verbose error messages. */
182 #ifdef YYERROR_VERBOSE
183 # undef YYERROR_VERBOSE
184 # define YYERROR_VERBOSE 1
185 #else
186 # define YYERROR_VERBOSE ]b4_error_verbose[
187 #endif
188
189 #ifndef YYSTYPE
190 ]m4_ifdef([b4_stype],
191 [b4_syncline([b4_stype_line], [b4_filename])
192 typedef union b4_stype yystype;
193 /* Line __line__ of __file__. */
194 b4_syncline([@oline@], [@ofile@])],
195 [typedef int yystype;])[
196 # define YYSTYPE yystype
197 # define YYSTYPE_IS_TRIVIAL 1
198 #endif
199
200 #ifndef YYLTYPE
201 typedef struct yyltype
202 {
203 int first_line;
204 int first_column;
205 int last_line;
206 int last_column;
207 } yyltype;
208 # define YYLTYPE ]b4_location_type[
209 # define YYLTYPE_IS_TRIVIAL 1
210 #endif
211
212 /* Copy the second part of user declarations. */
213 ]b4_post_prologue
214
215 /* Line __line__ of __file__. */
216 b4_syncline([@oline@], [@ofile@])[
217
218 #if ! defined (yyoverflow) || YYERROR_VERBOSE
219
220 /* The parser invokes alloca or malloc; define the necessary symbols. */
221
222 # if YYSTACK_USE_ALLOCA
223 # define YYSTACK_ALLOC alloca
224 # else
225 # ifndef YYSTACK_USE_ALLOCA
226 # if defined (alloca) || defined (_ALLOCA_H)
227 # define YYSTACK_ALLOC alloca
228 # else
229 # ifdef __GNUC__
230 # define YYSTACK_ALLOC __builtin_alloca
231 # endif
232 # endif
233 # endif
234 # endif
235
236 # ifdef YYSTACK_ALLOC
237 /* Pacify GCC's `empty if-body' warning. */
238 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
239 # else
240 # if defined (__STDC__) || defined (__cplusplus)
241 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
242 # define YYSIZE_T size_t
243 # endif
244 # define YYSTACK_ALLOC malloc
245 # define YYSTACK_FREE free
246 # endif
247 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
248
249
250 #if (! defined (yyoverflow) \
251 && (! defined (__cplusplus) \
252 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
253
254 /* A type that is properly aligned for any stack member. */
255 union yyalloc
256 {
257 short yyss;
258 YYSTYPE yyvs;
259 ]b4_location_if([ YYLTYPE yyls;
260 ])dnl
261 [};
262
263 /* The size of the maximum gap between one aligned stack and the next. */
264 # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
265
266 /* The size of an array large to enough to hold all stacks, each with
267 N elements. */
268 ]b4_location_if(
269 [# define YYSTACK_BYTES(N) \
270 ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
271 + 2 * YYSTACK_GAP_MAX)],
272 [# define YYSTACK_BYTES(N) \
273 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
274 + YYSTACK_GAP_MAX)])[
275
276 /* Copy COUNT objects from FROM to TO. The source and destination do
277 not overlap. */
278 # ifndef YYCOPY
279 # if 1 < __GNUC__
280 # define YYCOPY(To, From, Count) \
281 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
282 # else
283 # define YYCOPY(To, From, Count) \
284 do \
285 { \
286 register YYSIZE_T yyi; \
287 for (yyi = 0; yyi < (Count); yyi++) \
288 (To)[yyi] = (From)[yyi]; \
289 } \
290 while (0)
291 # endif
292 # endif
293
294 /* Relocate STACK from its old location to the new one. The
295 local variables YYSIZE and YYSTACKSIZE give the old and new number of
296 elements in the stack, and YYPTR gives the new location of the
297 stack. Advance YYPTR to a properly aligned location for the next
298 stack. */
299 # define YYSTACK_RELOCATE(Stack) \
300 do \
301 { \
302 YYSIZE_T yynewbytes; \
303 YYCOPY (&yyptr->Stack, Stack, yysize); \
304 Stack = &yyptr->Stack; \
305 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
306 yyptr += yynewbytes / sizeof (*yyptr); \
307 } \
308 while (0)
309
310 #endif
311
312 #if defined (__STDC__) || defined (__cplusplus)
313 typedef signed char yysigned_char;
314 #else
315 typedef short yysigned_char;
316 #endif
317
318 /* YYFINAL -- State number of the termination state. */
319 #define YYFINAL ]b4_final_state_number[
320 /* YYLAST -- Last index in YYTABLE. */
321 #define YYLAST ]b4_last[
322
323 /* YYNTOKENS -- Number of terminals. */
324 #define YYNTOKENS ]b4_tokens_number[
325 /* YYNNTS -- Number of nonterminals. */
326 #define YYNNTS ]b4_nterms_number[
327 /* YYNRULES -- Number of rules. */
328 #define YYNRULES ]b4_rules_number[
329 /* YYNRULES -- Number of states. */
330 #define YYNSTATES ]b4_states_number[
331
332 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
333 #define YYUNDEFTOK ]b4_undef_token_number[
334 #define YYMAXUTOK ]b4_user_token_number_max[
335
336 #define YYTRANSLATE(YYX) \
337 ((YYX <= 0) ? YYEOF : \
338 (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
339
340 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
341 static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
342 {
343 ]b4_translate[
344 };
345
346 #if YYDEBUG
347 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
348 YYRHS. */
349 static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
350 {
351 ]b4_prhs[
352 };
353
354 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
355 static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
356 {
357 ]b4_rhs[
358 };
359
360 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
361 static const ]b4_int_type_for([b4_rline])[ yyrline[] =
362 {
363 ]b4_rline[
364 };
365 #endif
366
367 #if YYDEBUG || YYERROR_VERBOSE
368 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
369 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
370 static const char *const yytname[] =
371 {
372 ]b4_tname[
373 };
374 #endif
375
376 # ifdef YYPRINT
377 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
378 token YYLEX-NUM. */
379 static const ]b4_int_type_for([b4_toknum])[ yytoknum[] =
380 {
381 ]b4_toknum[
382 };
383 # endif
384
385 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
386 static const ]b4_int_type_for([b4_r1])[ yyr1[] =
387 {
388 ]b4_r1[
389 };
390
391 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
392 static const ]b4_int_type_for([b4_r2])[ yyr2[] =
393 {
394 ]b4_r2[
395 };
396
397 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
398 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
399 means the default is an error. */
400 static const ]b4_int_type_for([b4_defact])[ yydefact[] =
401 {
402 ]b4_defact[
403 };
404
405 /* YYDEFGOTO[NTERM-NUM]. */
406 static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
407 {
408 ]b4_defgoto[
409 };
410
411 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
412 STATE-NUM. */
413 #define YYPACT_NINF ]b4_pact_ninf[
414 static const ]b4_int_type_for([b4_pact])[ yypact[] =
415 {
416 ]b4_pact[
417 };
418
419 /* YYPGOTO[NTERM-NUM]. */
420 static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
421 {
422 ]b4_pgoto[
423 };
424
425 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
426 positive, shift that token. If negative, reduce the rule which
427 number is the opposite. If zero, do what YYDEFACT says.
428 If YYTABLE_NINF, syntax error. */
429 #define YYTABLE_NINF ]b4_table_ninf[
430 static const ]b4_int_type_for([b4_table])[ yytable[] =
431 {
432 ]b4_table[
433 };
434
435 static const ]b4_int_type_for([b4_check])[ yycheck[] =
436 {
437 ]b4_check[
438 };
439
440 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
441 symbol of state STATE-NUM. */
442 static const ]b4_int_type_for([b4_stos])[ yystos[] =
443 {
444 ]b4_stos[
445 };
446
447 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
448 # define YYSIZE_T __SIZE_TYPE__
449 #endif
450 #if ! defined (YYSIZE_T) && defined (size_t)
451 # define YYSIZE_T size_t
452 #endif
453 #if ! defined (YYSIZE_T)
454 # if defined (__STDC__) || defined (__cplusplus)
455 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
456 # define YYSIZE_T size_t
457 # endif
458 #endif
459 #if ! defined (YYSIZE_T)
460 # define YYSIZE_T unsigned int
461 #endif
462
463 #define yyerrok (yyerrstatus = 0)
464 #define yyclearin (yytoken = YYEMPTY)
465 #define YYEMPTY -2
466 #define YYEOF 0
467
468 #define YYACCEPT goto yyacceptlab
469 #define YYABORT goto yyabortlab
470 #define YYERROR goto yyerrlab1
471
472 /* Like YYERROR except do call yyerror. This remains here temporarily
473 to ease the transition to the new meaning of YYERROR, for GCC.
474 Once GCC version 2 has supplanted version 1, this can go. */
475
476 #define YYFAIL goto yyerrlab
477
478 #define YYRECOVERING() (!!yyerrstatus)
479
480 #define YYBACKUP(Token, Value) \
481 do \
482 if (yytoken == YYEMPTY && yylen == 1) \
483 { \
484 yychar = (Token); \
485 yylval = (Value); \
486 yytoken = YYTRANSLATE (yychar); \
487 YYPOPSTACK; \
488 goto yybackup; \
489 } \
490 else \
491 { \
492 yyerror (]b4_yyerror_args["syntax error: cannot back up");\
493 YYERROR; \
494 } \
495 while (0)
496
497 #define YYTERROR 1
498 #define YYERRCODE 256
499
500 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
501 are run). */
502
503 #ifndef YYLLOC_DEFAULT
504 # define YYLLOC_DEFAULT(Current, Rhs, N) \
505 Current.first_line = Rhs[1].first_line; \
506 Current.first_column = Rhs[1].first_column; \
507 Current.last_line = Rhs[N].last_line; \
508 Current.last_column = Rhs[N].last_column;
509 #endif
510
511 /* YYLEX -- calling `yylex' with the right arguments. */
512
513 #ifdef YYLEX_PARAM
514 # define YYLEX yylex (]b4_pure_if([&yylval[]b4_location_if([, &yylloc]), ])[YYLEX_PARAM)
515 #else
516 # define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
517 #endif
518
519 /* Enable debugging if requested. */
520 #if YYDEBUG
521
522 # ifndef YYFPRINTF
523 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
524 # define YYFPRINTF fprintf
525 # endif
526
527 # define YYDPRINTF(Args) \
528 do { \
529 if (yydebug) \
530 YYFPRINTF Args; \
531 } while (0)
532
533 # define YYDSYMPRINT(Args) \
534 do { \
535 if (yydebug) \
536 yysymprint Args; \
537 } while (0)
538
539 # define YYDSYMPRINTF(Title, Token, Value, Location) \
540 do { \
541 if (yydebug) \
542 { \
543 YYFPRINTF (stderr, "%s ", Title); \
544 yysymprint (stderr, \
545 Token, Value]b4_location_if([, Location])[); \
546 YYFPRINTF (stderr, "\n"); \
547 } \
548 } while (0)
549
550 /*------------------------------------------------------------------.
551 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
552 | TOP (cinluded). |
553 `------------------------------------------------------------------*/
554
555 ]b4_c_function_def([yy_stack_print], [static void],
556 [[short *bottom], [bottom]],
557 [[short *top], [top]])[
558 {
559 YYFPRINTF (stderr, "Stack now");
560 for (/* Nothing. */; bottom <= top; ++bottom)
561 YYFPRINTF (stderr, " %d", *bottom);
562 YYFPRINTF (stderr, "\n");
563 }
564
565 # define YY_STACK_PRINT(Bottom, Top) \
566 do { \
567 if (yydebug) \
568 yy_stack_print ((Bottom), (Top)); \
569 } while (0)
570
571
572 /*------------------------------------------------.
573 | Report that the YYRULE is going to be reduced. |
574 `------------------------------------------------*/
575
576 ]b4_c_function_def([yy_reduce_print], [static void],
577 [[int yyrule], [yyrule]])[
578 {
579 int yyi;
580 YYFPRINTF (stderr, "Reducing stack by rule %d (line %d), ",
581 yyrule - 1, yyrline[yyrule]);
582 /* Print the symbols being reduced, and their result. */
583 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
584 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
585 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
586 }
587
588 # define YY_REDUCE_PRINT(Rule) \
589 do { \
590 if (yydebug) \
591 yy_reduce_print (Rule); \
592 } while (0)
593
594 /* Nonzero means print parse trace. It is left uninitialized so that
595 multiple parsers can coexist. */
596 int yydebug;
597 #else /* !YYDEBUG */
598 # define YYDPRINTF(Args)
599 # define YYDSYMPRINT(Args)
600 # define YYDSYMPRINTF(Title, Token, Value, Location)
601 # define YY_STACK_PRINT(Bottom, Top)
602 # define YY_REDUCE_PRINT(Rule)
603 #endif /* !YYDEBUG */
604
605
606 /* YYINITDEPTH -- initial size of the parser's stacks. */
607 #ifndef YYINITDEPTH
608 # define YYINITDEPTH ]b4_stack_depth_init[
609 #endif
610
611 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
612 if the built-in stack extension method is used).
613
614 Do not make this value too large; the results are undefined if
615 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
616 evaluated with infinite-precision integer arithmetic. */
617
618 #if YYMAXDEPTH == 0
619 # undef YYMAXDEPTH
620 #endif
621
622 #ifndef YYMAXDEPTH
623 # define YYMAXDEPTH ]b4_stack_depth_max[
624 #endif
625
626 \f
627
628 #if YYERROR_VERBOSE
629
630 # ifndef yystrlen
631 # if defined (__GLIBC__) && defined (_STRING_H)
632 # define yystrlen strlen
633 # else
634 /* Return the length of YYSTR. */
635 static YYSIZE_T
636 # if defined (__STDC__) || defined (__cplusplus)
637 yystrlen (const char *yystr)
638 # else
639 yystrlen (yystr)
640 const char *yystr;
641 # endif
642 {
643 register const char *yys = yystr;
644
645 while (*yys++ != '\0')
646 continue;
647
648 return yys - yystr - 1;
649 }
650 # endif
651 # endif
652
653 # ifndef yystpcpy
654 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
655 # define yystpcpy stpcpy
656 # else
657 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
658 YYDEST. */
659 static char *
660 # if defined (__STDC__) || defined (__cplusplus)
661 yystpcpy (char *yydest, const char *yysrc)
662 # else
663 yystpcpy (yydest, yysrc)
664 char *yydest;
665 const char *yysrc;
666 # endif
667 {
668 register char *yyd = yydest;
669 register const char *yys = yysrc;
670
671 while ((*yyd++ = *yys++) != '\0')
672 continue;
673
674 return yyd - 1;
675 }
676 # endif
677 # endif
678
679 #endif /* !YYERROR_VERBOSE */
680
681 \f
682
683 #if YYDEBUG
684 ]b4_yysymprint_generate([b4_c_function_def])[
685 #endif /* ! YYDEBUG */
686 ]b4_yydestruct_generate([b4_c_function_def])
687 \f
688
689 /* Prevent warnings from -Wmissing-prototypes. */
690
691 #ifdef YYPARSE_PARAM
692 # if defined (__STDC__) || defined (__cplusplus)
693 int yyparse (void *YYPARSE_PARAM);
694 # else
695 int yyparse ();
696 # endif
697 #else /* ! YYPARSE_PARAM */
698 b4_c_function_decl([yyparse], [int], b4_parse_param)
699 #endif /* ! YYPARSE_PARAM */
700
701
702 m4_divert_push([KILL])# ======================== M4 code.
703 # b4_declare_parser_variables
704 # ---------------------------
705 # Declare the variables that are global, or local to YYPARSE if
706 # pure-parser.
707 m4_define([b4_declare_parser_variables],
708 [/* The lookahead symbol. */
709 int yychar;
710
711 /* The semantic value of the lookahead symbol. */
712 YYSTYPE yylval;
713
714 /* Number of syntax errors so far. */
715 int yynerrs;b4_location_if([
716 /* Location data for the lookahead symbol. */
717 YYLTYPE yylloc;])
718 ])
719 m4_divert_pop([KILL])dnl# ====================== End of M4 code.
720
721 b4_pure_if([],
722 [b4_declare_parser_variables])
723
724
725 /*----------.
726 | yyparse. |
727 `----------*/
728
729 #ifdef YYPARSE_PARAM
730 # if defined (__STDC__) || defined (__cplusplus)
731 int yyparse (void *YYPARSE_PARAM)
732 # else
733 int yyparse (YYPARSE_PARAM)
734 void *YYPARSE_PARAM;
735 # endif
736 #else /* ! YYPARSE_PARAM */
737 b4_c_function_def([yyparse], [int], b4_parse_param)
738 #endif
739 {[
740 ]b4_pure_if([b4_declare_parser_variables])[
741 register int yystate;
742 register int yyn;
743 int yyresult;
744 /* Number of tokens to shift before error messages enabled. */
745 int yyerrstatus;
746 /* Lookahead token as an internal (translated) token number. */
747 int yytoken = 0;
748
749 /* Three stacks and their tools:
750 `yyss': related to states,
751 `yyvs': related to semantic values,
752 `yyls': related to locations.
753
754 Refer to the stacks thru separate pointers, to allow yyoverflow
755 to reallocate them elsewhere. */
756
757 /* The state stack. */
758 short yyssa[YYINITDEPTH];
759 short *yyss = yyssa;
760 register short *yyssp;
761
762 /* The semantic value stack. */
763 YYSTYPE yyvsa[YYINITDEPTH];
764 YYSTYPE *yyvs = yyvsa;
765 register YYSTYPE *yyvsp;
766
767 ]b4_location_if(
768 [[ /* The location stack. */
769 YYLTYPE yylsa[YYINITDEPTH];
770 YYLTYPE *yyls = yylsa;
771 YYLTYPE *yylsp;]])[
772
773 #define YYPOPSTACK (yyvsp--, yyssp--]b4_location_if([, yylsp--])[)
774
775 YYSIZE_T yystacksize = YYINITDEPTH;
776
777 /* The variables used to return semantic value and location from the
778 action routines. */
779 YYSTYPE yyval;
780 ]b4_location_if([ YYLTYPE yyloc;])[
781
782 /* When reducing, the number of symbols on the RHS of the reduced
783 rule. */
784 int yylen;
785
786 YYDPRINTF ((stderr, "Starting parse\n"));
787
788 yystate = 0;
789 yyerrstatus = 0;
790 yynerrs = 0;
791 yychar = yytoken = YYEMPTY; /* Cause a token to be read. */
792
793 /* Initialize stack pointers.
794 Waste one element of value and location stack
795 so that they stay on the same level as the state stack.
796 The wasted elements are never initialized. */
797
798 yyssp = yyss;
799 yyvsp = yyvs;
800 ]b4_location_if([ yylsp = yyls;])[
801 goto yysetstate;
802
803 /*------------------------------------------------------------.
804 | yynewstate -- Push a new state, which is found in yystate. |
805 `------------------------------------------------------------*/
806 yynewstate:
807 /* In all cases, when you get here, the value and location stacks
808 have just been pushed. so pushing a state here evens the stacks.
809 */
810 yyssp++;
811
812 yysetstate:
813 *yyssp = yystate;
814
815 if (yyss + yystacksize - 1 <= yyssp)
816 {
817 /* Get the current used size of the three stacks, in elements. */
818 YYSIZE_T yysize = yyssp - yyss + 1;
819
820 #ifdef yyoverflow
821 {
822 /* Give user a chance to reallocate the stack. Use copies of
823 these so that the &'s don't force the real ones into
824 memory. */
825 YYSTYPE *yyvs1 = yyvs;
826 short *yyss1 = yyss;
827 ]b4_location_if([ YYLTYPE *yyls1 = yyls;])[
828
829 /* Each stack pointer address is followed by the size of the
830 data in use in that stack, in bytes. This used to be a
831 conditional around just the two extra args, but that might
832 be undefined if yyoverflow is a macro. */
833 yyoverflow ("parser stack overflow",
834 &yyss1, yysize * sizeof (*yyssp),
835 &yyvs1, yysize * sizeof (*yyvsp),
836 ]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[
837 &yystacksize);
838 ]b4_location_if([ yyls = yyls1;])[
839 yyss = yyss1;
840 yyvs = yyvs1;
841 }
842 #else /* no yyoverflow */
843 # ifndef YYSTACK_RELOCATE
844 goto yyoverflowlab;
845 # else
846 /* Extend the stack our own way. */
847 if (YYMAXDEPTH <= yystacksize)
848 goto yyoverflowlab;
849 yystacksize *= 2;
850 if (YYMAXDEPTH < yystacksize)
851 yystacksize = YYMAXDEPTH;
852
853 {
854 short *yyss1 = yyss;
855 union yyalloc *yyptr =
856 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
857 if (! yyptr)
858 goto yyoverflowlab;
859 YYSTACK_RELOCATE (yyss);
860 YYSTACK_RELOCATE (yyvs);
861 ]b4_location_if([ YYSTACK_RELOCATE (yyls);])[
862 # undef YYSTACK_RELOCATE
863 if (yyss1 != yyssa)
864 YYSTACK_FREE (yyss1);
865 }
866 # endif
867 #endif /* no yyoverflow */
868
869 yyssp = yyss + yysize - 1;
870 yyvsp = yyvs + yysize - 1;
871 ]b4_location_if([ yylsp = yyls + yysize - 1;])[
872
873 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
874 (unsigned long int) yystacksize));
875
876 if (yyss + yystacksize - 1 <= yyssp)
877 YYABORT;
878 }
879
880 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
881
882 goto yybackup;
883
884 /*-----------.
885 | yybackup. |
886 `-----------*/
887 yybackup:
888
889 /* Do appropriate processing given the current state. */
890 /* Read a lookahead token if we need one and don't already have one. */
891 /* yyresume: */
892
893 /* First try to decide what to do without reference to lookahead token. */
894
895 yyn = yypact[yystate];
896 if (yyn == YYPACT_NINF)
897 goto yydefault;
898
899 /* Not known => get a lookahead token if don't already have one. */
900
901 /* YYTOKEN is either YYEMPTY or YYEOF or a valid token. */
902 if (yytoken == YYEMPTY)
903 {
904 YYDPRINTF ((stderr, "Reading a token: "));
905 yychar = YYLEX;
906 yytoken = YYTRANSLATE (yychar);
907 }
908
909 if (yytoken == YYEOF)
910 {
911 YYDPRINTF ((stderr, "Now at end of input.\n"));
912 }
913 else
914 {
915 /* We have to keep this `#if YYDEBUG', since we use variables
916 which are defined only if `YYDEBUG' is set. */
917 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
918 }
919
920 /* If the proper action on seeing token YYTOKEN is to reduce or to
921 detect an error, take that action. */
922 yyn += yytoken;
923 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
924 goto yydefault;
925 yyn = yytable[yyn];
926 if (yyn <= 0)
927 {
928 if (yyn == 0 || yyn == YYTABLE_NINF)
929 goto yyerrlab;
930 yyn = -yyn;
931 goto yyreduce;
932 }
933
934 if (yyn == YYFINAL)
935 YYACCEPT;
936
937 /* Shift the lookahead token. */
938 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
939
940 /* Discard the token being shifted unless it is eof. */
941 if (yytoken != YYEOF)
942 yytoken = YYEMPTY;
943
944 *++yyvsp = yylval;
945 ]b4_location_if([ *++yylsp = yylloc;])[
946
947 /* Count tokens shifted since error; after three, turn off error
948 status. */
949 if (yyerrstatus)
950 yyerrstatus--;
951
952 yystate = yyn;
953 goto yynewstate;
954
955
956 /*-----------------------------------------------------------.
957 | yydefault -- do the default action for the current state. |
958 `-----------------------------------------------------------*/
959 yydefault:
960 yyn = yydefact[yystate];
961 if (yyn == 0)
962 goto yyerrlab;
963 goto yyreduce;
964
965
966 /*-----------------------------.
967 | yyreduce -- Do a reduction. |
968 `-----------------------------*/
969 yyreduce:
970 /* yyn is the number of a rule to reduce with. */
971 yylen = yyr2[yyn];
972
973 /* If YYLEN is nonzero, implement the default value of the action:
974 `$$ = $1'.
975
976 Otherwise, the following line sets YYVAL to garbage.
977 This behavior is undocumented and Bison
978 users should not rely upon it. Assigning to YYVAL
979 unconditionally makes the parser a bit smaller, and it avoids a
980 GCC warning that YYVAL may be used uninitialized. */
981 yyval = yyvsp[1-yylen];
982
983 ]b4_location_if(
984 [ /* Default location. */
985 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[
986 YY_REDUCE_PRINT (yyn);
987 switch (yyn)
988 ]{
989 b4_actions
990 }
991
992 /* Line __line__ of __file__. */
993 b4_syncline([@oline@], [@ofile@])
994 \f
995 [ yyvsp -= yylen;
996 yyssp -= yylen;
997 ]b4_location_if([ yylsp -= yylen;])[
998
999 YY_STACK_PRINT (yyss, yyssp);
1000
1001 *++yyvsp = yyval;
1002 ]b4_location_if([ *++yylsp = yyloc;])[
1003
1004 /* Now `shift' the result of the reduction. Determine what state
1005 that goes to, based on the state we popped back to and the rule
1006 number reduced by. */
1007
1008 yyn = yyr1[yyn];
1009
1010 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1011 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1012 yystate = yytable[yystate];
1013 else
1014 yystate = yydefgoto[yyn - YYNTOKENS];
1015
1016 goto yynewstate;
1017
1018
1019 /*------------------------------------.
1020 | yyerrlab -- here on detecting error |
1021 `------------------------------------*/
1022 yyerrlab:
1023 /* If not already recovering from an error, report this error. */
1024 if (!yyerrstatus)
1025 {
1026 ++yynerrs;
1027 #if YYERROR_VERBOSE
1028 yyn = yypact[yystate];
1029
1030 if (YYPACT_NINF < yyn && yyn < YYLAST)
1031 {
1032 YYSIZE_T yysize = 0;
1033 int yytype = YYTRANSLATE (yychar);
1034 char *yymsg;
1035 int yyx, yycount;
1036
1037 yycount = 0;
1038 /* Start YYX at -YYN if negative to avoid negative indexes in
1039 YYCHECK. */
1040 for (yyx = yyn < 0 ? -yyn : 0;
1041 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
1042 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1043 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
1044 yysize += yystrlen ("syntax error, unexpected ") + 1;
1045 yysize += yystrlen (yytname[yytype]);
1046 yymsg = (char *) YYSTACK_ALLOC (yysize);
1047 if (yymsg != 0)
1048 {
1049 char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
1050 yyp = yystpcpy (yyp, yytname[yytype]);
1051
1052 if (yycount < 5)
1053 {
1054 yycount = 0;
1055 for (yyx = yyn < 0 ? -yyn : 0;
1056 yyx < (int) (sizeof (yytname) / sizeof (char *));
1057 yyx++)
1058 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1059 {
1060 const char *yyq = ! yycount ? ", expecting " : " or ";
1061 yyp = yystpcpy (yyp, yyq);
1062 yyp = yystpcpy (yyp, yytname[yyx]);
1063 yycount++;
1064 }
1065 }
1066 yyerror (]b4_yyerror_args[yymsg);
1067 YYSTACK_FREE (yymsg);
1068 }
1069 else
1070 yyerror (]b4_yyerror_args["syntax error; also virtual memory exhausted");
1071 }
1072 else
1073 #endif /* YYERROR_VERBOSE */
1074 yyerror (]b4_yyerror_args["syntax error");
1075 }
1076 goto yyerrlab1;
1077
1078
1079 /*----------------------------------------------------.
1080 | yyerrlab1 -- error raised explicitly by an action. |
1081 `----------------------------------------------------*/
1082 yyerrlab1:
1083 if (yyerrstatus == 3)
1084 {
1085 /* If just tried and failed to reuse lookahead token after an
1086 error, discard it. */
1087
1088 /* Return failure if at end of input. */
1089 if (yytoken == YYEOF)
1090 {
1091 /* Pop the error token. */
1092 YYPOPSTACK;
1093 /* Pop the rest of the stack. */
1094 while (yyss < yyssp)
1095 {
1096 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1097 yydestruct (yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[);
1098 YYPOPSTACK;
1099 }
1100 YYABORT;
1101 }
1102
1103 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1104 yydestruct (yytoken, &yylval]b4_location_if([, &yylloc])[);
1105 yytoken = YYEMPTY;
1106 }
1107
1108 /* Else will try to reuse lookahead token after shifting the error
1109 token. */
1110
1111 yyerrstatus = 3; /* Each real token shifted decrements this. */
1112
1113 for (;;)
1114 {
1115 yyn = yypact[yystate];
1116 if (yyn != YYPACT_NINF)
1117 {
1118 yyn += YYTERROR;
1119 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1120 {
1121 yyn = yytable[yyn];
1122 if (0 < yyn)
1123 break;
1124 }
1125 }
1126
1127 /* Pop the current state because it cannot handle the error token. */
1128 if (yyssp == yyss)
1129 YYABORT;
1130
1131 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1132 yydestruct (yystos[yystate], yyvsp]b4_location_if([, yylsp])[);
1133 yyvsp--;
1134 yystate = *--yyssp;
1135 ]b4_location_if([ yylsp--;])[
1136 YY_STACK_PRINT (yyss, yyssp);
1137 }
1138
1139 if (yyn == YYFINAL)
1140 YYACCEPT;
1141
1142 YYDPRINTF ((stderr, "Shifting error token, "));
1143
1144 *++yyvsp = yylval;
1145 ]b4_location_if([ *++yylsp = yylloc;])[
1146
1147 yystate = yyn;
1148 goto yynewstate;
1149
1150
1151 /*-------------------------------------.
1152 | yyacceptlab -- YYACCEPT comes here. |
1153 `-------------------------------------*/
1154 yyacceptlab:
1155 yyresult = 0;
1156 goto yyreturn;
1157
1158 /*-----------------------------------.
1159 | yyabortlab -- YYABORT comes here. |
1160 `-----------------------------------*/
1161 yyabortlab:
1162 yyresult = 1;
1163 goto yyreturn;
1164
1165 #ifndef yyoverflow
1166 /*----------------------------------------------.
1167 | yyoverflowlab -- parser overflow comes here. |
1168 `----------------------------------------------*/
1169 yyoverflowlab:
1170 yyerror (]b4_yyerror_args["parser stack overflow");
1171 yyresult = 2;
1172 /* Fall through. */
1173 #endif
1174
1175 yyreturn:
1176 #ifndef yyoverflow
1177 if (yyss != yyssa)
1178 YYSTACK_FREE (yyss);
1179 #endif
1180 return yyresult;
1181 ]}
1182
1183
1184 b4_epilogue
1185 m4_if(b4_defines_flag, 0, [],
1186 [@output @output_header_name@
1187 b4_copyright([Skeleton parser for Yacc-like parsing with Bison],
1188 [1984, 1989, 1990, 2000, 2001, 2002])
1189
1190 /* As a special exception, when this file is copied by Bison into a
1191 Bison output file, you may use that output file without restriction.
1192 This special exception was added by the Free Software Foundation
1193 in version 1.24 of Bison. */
1194
1195 b4_token_defines(b4_tokens)
1196
1197 #ifndef YYSTYPE
1198 m4_ifdef([b4_stype],
1199 [b4_syncline([b4_stype_line], [b4_filename])
1200 typedef union b4_stype yystype;
1201 /* Line __line__ of __file__. */
1202 b4_syncline([@oline@], [@ofile@])],
1203 [typedef int yystype;])
1204 # define YYSTYPE yystype
1205 # define YYSTYPE_IS_TRIVIAL 1
1206 #endif
1207
1208 b4_pure_if([],
1209 [extern YYSTYPE b4_prefix[]lval;])
1210
1211 b4_location_if(
1212 [#ifndef YYLTYPE
1213 typedef struct yyltype
1214 {
1215 int first_line;
1216 int first_column;
1217 int last_line;
1218 int last_column;
1219 } yyltype;
1220 # define YYLTYPE yyltype
1221 #endif
1222
1223 m4_if(b4_pure, [0],
1224 [extern YYLTYPE b4_prefix[]lloc;])
1225 ])
1226 ])