]> git.saurik.com Git - bison.git/blame_incremental - data/yacc.c
Port small part of master's 11707b2b so future ports are easier.
[bison.git] / data / yacc.c
... / ...
CommitLineData
1 -*- C -*-
2
3# Yacc compatible skeleton for Bison
4
5# Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
6# 2007, 2008, 2009 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 3 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, see <http://www.gnu.org/licenses/>.
20
21# Check the value of %define api.push-pull.
22b4_percent_define_default([[api.push-pull]], [[pull]])
23b4_percent_define_check_values([[[[api.push-pull]],
24 [[pull]], [[push]], [[both]]]])
25b4_define_flag_if([pull]) m4_define([b4_pull_flag], [[1]])
26b4_define_flag_if([push]) m4_define([b4_push_flag], [[1]])
27m4_case(b4_percent_define_get([[api.push-pull]]),
28 [pull], [m4_define([b4_push_flag], [[0]])],
29 [push], [m4_define([b4_pull_flag], [[0]])])
30
31# Handle BISON_USE_PUSH_FOR_PULL for the test suite. So that push parsing
32# tests function as written, don't let BISON_USE_PUSH_FOR_PULL modify Bison's
33# behavior at all when push parsing is already requested.
34b4_define_flag_if([use_push_for_pull])
35b4_use_push_for_pull_if([
36 b4_push_if([m4_define([b4_use_push_for_pull_flag], [[0]])],
37 [m4_define([b4_push_flag], [[1]])])])
38
39m4_include(b4_pkgdatadir/[c.m4])
40
41## ---------------- ##
42## Default values. ##
43## ---------------- ##
44
45# Stack parameters.
46m4_define_default([b4_stack_depth_max], [10000])
47m4_define_default([b4_stack_depth_init], [200])
48
49
50## ------------------------ ##
51## Pure/impure interfaces. ##
52## ------------------------ ##
53
54b4_percent_define_default([[api.pure]], [[false]])
55b4_define_flag_if([pure])
56m4_define([b4_pure_flag],
57 [b4_percent_define_flag_if([[api.pure]], [[1]], [[0]])])
58
59# b4_yacc_pure_if(IF-TRUE, IF-FALSE)
60# ----------------------------------
61# Expand IF-TRUE, if %pure-parser and %parse-param, IF-FALSE otherwise.
62m4_define([b4_yacc_pure_if],
63[b4_pure_if([m4_ifset([b4_parse_param],
64 [$1], [$2])],
65 [$2])])
66
67
68# b4_yyerror_args
69# ---------------
70# Arguments passed to yyerror: user args plus yylloc.
71m4_define([b4_yyerror_args],
72[b4_yacc_pure_if([b4_locations_if([&yylloc, ])])dnl
73m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
74
75
76# b4_lex_param
77# ------------
78# Accumulate in b4_lex_param all the yylex arguments.
79# b4_lex_param arrives quoted twice, but we want to keep only one level.
80m4_define([b4_lex_param],
81m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
82b4_locations_if([, [[YYLTYPE *], [&yylloc]]])m4_ifdef([b4_lex_param], [, ])])dnl
83m4_ifdef([b4_lex_param], b4_lex_param)))
84
85
86## ------------ ##
87## Data Types. ##
88## ------------ ##
89
90# b4_int_type(MIN, MAX)
91# ---------------------
92# Return the smallest int type able to handle numbers ranging from
93# MIN to MAX (included). Overwrite the version from c.m4, which
94# uses only C89 types, so that the user can override the shorter
95# types, and so that pre-C89 compilers are handled correctly.
96m4_define([b4_int_type],
97[m4_if(b4_ints_in($@, [0], [255]), [1], [yytype_uint8],
98 b4_ints_in($@, [-128], [127]), [1], [yytype_int8],
99
100 b4_ints_in($@, [0], [65535]), [1], [yytype_uint16],
101 b4_ints_in($@, [-32768], [32767]), [1], [yytype_int16],
102
103 m4_eval([0 <= $1]), [1], [unsigned int],
104
105 [int])])
106
107
108## ----------------- ##
109## Semantic Values. ##
110## ----------------- ##
111
112
113# b4_lhs_value([TYPE])
114# --------------------
115# Expansion of $<TYPE>$.
116m4_define([b4_lhs_value],
117[(yyval[]m4_ifval([$1], [.$1]))])
118
119
120# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
121# --------------------------------------
122# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
123# symbols on RHS.
124m4_define([b4_rhs_value],
125[(yyvsp@{($2) - ($1)@}m4_ifval([$3], [.$3]))])
126
127
128
129## ----------- ##
130## Locations. ##
131## ----------- ##
132
133# b4_lhs_location()
134# -----------------
135# Expansion of @$.
136m4_define([b4_lhs_location],
137[(yyloc)])
138
139
140# b4_rhs_location(RULE-LENGTH, NUM)
141# ---------------------------------
142# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
143# on RHS.
144m4_define([b4_rhs_location],
145[(yylsp@{($2) - ($1)@})])
146
147
148## ------------------ ##
149## Parser variables. ##
150## ------------------ ##
151
152# b4_declare_scanner_communication_variables
153# ------------------------------------------
154# Declare the variables that are global, or local to YYPARSE if
155# pure-parser.
156m4_define([b4_declare_scanner_communication_variables], [[
157/* The lookahead symbol. */
158int yychar;
159
160/* The semantic value of the lookahead symbol. */
161YYSTYPE yylval;]b4_locations_if([[
162
163/* Location data for the lookahead symbol. */
164YYLTYPE yylloc;]])b4_pure_if([], [[
165
166/* Number of syntax errors so far. */
167int yynerrs;]])])
168
169
170# b4_declare_parser_state_variables
171# ---------------------------------
172# Declare all the variables that are needed to maintain the parser state
173# between calls to yypush_parse.
174m4_define([b4_declare_parser_state_variables], [b4_pure_if([[
175 /* Number of syntax errors so far. */
176 int yynerrs;
177]])[
178 int yystate;
179 /* Number of tokens to shift before error messages enabled. */
180 int yyerrstatus;
181
182 /* The stacks and their tools:
183 `yyss': related to states.
184 `yyvs': related to semantic values.]b4_locations_if([[
185 `yyls': related to locations.]])[
186
187 Refer to the stacks thru separate pointers, to allow yyoverflow
188 to reallocate them elsewhere. */
189
190 /* The state stack. */
191 yytype_int16 yyssa[YYINITDEPTH];
192 yytype_int16 *yyss;
193 yytype_int16 *yyssp;
194
195 /* The semantic value stack. */
196 YYSTYPE yyvsa[YYINITDEPTH];
197 YYSTYPE *yyvs;
198 YYSTYPE *yyvsp;]b4_locations_if([[
199
200 /* The location stack. */
201 YYLTYPE yylsa[YYINITDEPTH];
202 YYLTYPE *yyls;
203 YYLTYPE *yylsp;
204
205 /* The locations where the error started and ended. */
206 YYLTYPE yyerror_range[2];]])[
207
208 YYSIZE_T yystacksize;]])
209
210
211## --------------------------------------------------------- ##
212## Defining symbol actions, e.g., printers and destructors. ##
213## --------------------------------------------------------- ##
214
215# We do want M4 expansion after # for CPP macros.
216m4_changecom()
217m4_divert_push(0)dnl
218@output(b4_parser_file_name@)@
219b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C],
220 [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005,
221 2006, 2007, 2008, 2009])[
222
223/* C LALR(1) parser skeleton written by Richard Stallman, by
224 simplifying the original so-called "semantic" parser. */
225
226/* All symbols defined below should begin with yy or YY, to avoid
227 infringing on user name space. This should be done even for local
228 variables, as they might otherwise be expanded by user macros.
229 There are some unavoidable exceptions within include files to
230 define necessary library symbols; they are noted "INFRINGES ON
231 USER NAME SPACE" below. */
232
233]b4_identification
234b4_percent_code_get([[top]])[]dnl
235m4_if(b4_prefix, [yy], [],
236[[/* Substitute the variable and function names. */]b4_pull_if([[
237#define yyparse ]b4_prefix[parse]])b4_push_if([[
238#define yypush_parse ]b4_prefix[push_parse]b4_pull_if([[
239#define yypull_parse ]b4_prefix[pull_parse]])[
240#define yypstate_new ]b4_prefix[pstate_new
241#define yypstate_delete ]b4_prefix[pstate_delete
242#define yypstate ]b4_prefix[pstate]])[
243#define yylex ]b4_prefix[lex
244#define yyerror ]b4_prefix[error
245#define yylval ]b4_prefix[lval
246#define yychar ]b4_prefix[char
247#define yydebug ]b4_prefix[debug
248#define yynerrs ]b4_prefix[nerrs
249]b4_locations_if([[#define yylloc ]b4_prefix[lloc]])])[
250
251/* Copy the first part of user declarations. */
252]b4_user_pre_prologue[
253
254/* Enabling traces. */
255#ifndef YYDEBUG
256# define YYDEBUG ]b4_debug_flag[
257#endif
258
259/* Enabling verbose error messages. */
260#ifdef YYERROR_VERBOSE
261# undef YYERROR_VERBOSE
262# define YYERROR_VERBOSE 1
263#else
264# define YYERROR_VERBOSE ]b4_error_verbose_flag[
265#endif
266
267/* Enabling the token table. */
268#ifndef YYTOKEN_TABLE
269# define YYTOKEN_TABLE ]b4_token_table[
270#endif
271
272]b4_percent_code_get([[requires]])[]dnl
273
274b4_token_enums_defines(b4_tokens)[
275
276#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
277]m4_ifdef([b4_stype],
278[[typedef union ]b4_union_name[
279{
280]b4_user_stype[
281} YYSTYPE;
282# define YYSTYPE_IS_TRIVIAL 1]],
283[m4_if(b4_tag_seen_flag, 0,
284[[typedef int YYSTYPE;
285# define YYSTYPE_IS_TRIVIAL 1]])])[
286# define yystype YYSTYPE /* obsolescent; will be withdrawn */
287# define YYSTYPE_IS_DECLARED 1
288#endif]b4_locations_if([[
289
290#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
291typedef struct YYLTYPE
292{
293 int first_line;
294 int first_column;
295 int last_line;
296 int last_column;
297} YYLTYPE;
298# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
299# define YYLTYPE_IS_DECLARED 1
300# define YYLTYPE_IS_TRIVIAL 1
301#endif]])b4_push_if([[
302
303#ifndef YYPUSH_DECLS
304# define YYPUSH_DECLS
305struct yypstate;
306typedef struct yypstate yypstate;
307enum { YYPUSH_MORE = 4 };
308
309]b4_pull_if([b4_c_function_decl([[yyparse]], [[int]], b4_parse_param)
310])b4_c_function_decl([[yypush_parse]], [[int]],
311 [[[yypstate *yyps]], [[yyps]]]b4_pure_if([,
312 [[[int yypushed_char]], [[yypushed_char]]],
313 [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
314 [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])])m4_ifset([b4_parse_param], [,
315 b4_parse_param]))
316b4_pull_if([b4_c_function_decl([[yypull_parse]], [[int]],
317 [[[yypstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [,
318 b4_parse_param]))])
319b4_c_function_decl([[yypstate_new]], [[yypstate *]], [[[void]], []])
320b4_c_function_decl([[yypstate_delete]], [[void]],
321 [[[yypstate *yyps]], [[yyps]]])[
322#endif]])
323
324b4_percent_code_get([[provides]])[]dnl
325
326[/* Copy the second part of user declarations. */
327]b4_user_post_prologue
328b4_percent_code_get[]dnl
329
330[#ifdef short
331# undef short
332#endif
333
334#ifdef YYTYPE_UINT8
335typedef YYTYPE_UINT8 yytype_uint8;
336#else
337typedef unsigned char yytype_uint8;
338#endif
339
340#ifdef YYTYPE_INT8
341typedef YYTYPE_INT8 yytype_int8;
342#elif ]b4_c_modern[
343typedef signed char yytype_int8;
344#else
345typedef short int yytype_int8;
346#endif
347
348#ifdef YYTYPE_UINT16
349typedef YYTYPE_UINT16 yytype_uint16;
350#else
351typedef unsigned short int yytype_uint16;
352#endif
353
354#ifdef YYTYPE_INT16
355typedef YYTYPE_INT16 yytype_int16;
356#else
357typedef short int yytype_int16;
358#endif
359
360#ifndef YYSIZE_T
361# ifdef __SIZE_TYPE__
362# define YYSIZE_T __SIZE_TYPE__
363# elif defined size_t
364# define YYSIZE_T size_t
365# elif ! defined YYSIZE_T && ]b4_c_modern[
366# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
367# define YYSIZE_T size_t
368# else
369# define YYSIZE_T unsigned int
370# endif
371#endif
372
373#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
374
375#ifndef YY_
376# if defined YYENABLE_NLS && YYENABLE_NLS
377# if ENABLE_NLS
378# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
379# define YY_(msgid) dgettext ("bison-runtime", msgid)
380# endif
381# endif
382# ifndef YY_
383# define YY_(msgid) msgid
384# endif
385#endif
386
387/* Suppress unused-variable warnings by "using" E. */
388#if ! defined lint || defined __GNUC__
389# define YYUSE(e) ((void) (e))
390#else
391# define YYUSE(e) /* empty */
392#endif
393
394/* Identity function, used to suppress warnings about constant conditions. */
395#ifndef lint
396# define YYID(n) (n)
397#else
398]b4_c_function_def([YYID], [static int], [[int yyi], [yyi]])[
399{
400 return yyi;
401}
402#endif
403
404#if ! defined yyoverflow || YYERROR_VERBOSE
405
406]b4_push_if([],
407[[/* The parser invokes alloca or malloc; define the necessary symbols. */
408
409# ifdef YYSTACK_USE_ALLOCA
410# if YYSTACK_USE_ALLOCA
411# ifdef __GNUC__
412# define YYSTACK_ALLOC __builtin_alloca
413# elif defined __BUILTIN_VA_ARG_INCR
414# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
415# elif defined _AIX
416# define YYSTACK_ALLOC __alloca
417# elif defined _MSC_VER
418# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
419# define alloca _alloca
420# else
421# define YYSTACK_ALLOC alloca
422# if ! defined _ALLOCA_H && ! defined _STDLIB_H && ]b4_c_modern[
423# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
424# ifndef _STDLIB_H
425# define _STDLIB_H 1
426# endif
427# endif
428# endif
429# endif
430# endif
431
432]])dnl
433[# ifdef YYSTACK_ALLOC
434 /* Pacify GCC's `empty if-body' warning. */
435# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
436# ifndef YYSTACK_ALLOC_MAXIMUM
437 /* The OS might guarantee only one guard page at the bottom of the stack,
438 and a page size can be as small as 4096 bytes. So we cannot safely
439 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
440 to allow for a few compiler-allocated temporary stack slots. */
441# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
442# endif
443# else
444# define YYSTACK_ALLOC YYMALLOC
445# define YYSTACK_FREE YYFREE
446# ifndef YYSTACK_ALLOC_MAXIMUM
447# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
448# endif
449# if (defined __cplusplus && ! defined _STDLIB_H \
450 && ! ((defined YYMALLOC || defined malloc) \
451 && (defined YYFREE || defined free)))
452# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
453# ifndef _STDLIB_H
454# define _STDLIB_H 1
455# endif
456# endif
457# ifndef YYMALLOC
458# define YYMALLOC malloc
459# if ! defined malloc && ! defined _STDLIB_H && ]b4_c_modern[
460void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
461# endif
462# endif
463# ifndef YYFREE
464# define YYFREE free
465# if ! defined free && ! defined _STDLIB_H && ]b4_c_modern[
466void free (void *); /* INFRINGES ON USER NAME SPACE */
467# endif
468# endif
469# endif
470#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
471
472
473#if (! defined yyoverflow \
474 && (! defined __cplusplus \
475 || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
476 && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
477
478/* A type that is properly aligned for any stack member. */
479union yyalloc
480{
481 yytype_int16 yyss_alloc;
482 YYSTYPE yyvs_alloc;]b4_locations_if([
483 YYLTYPE yyls_alloc;])[
484};
485
486/* The size of the maximum gap between one aligned stack and the next. */
487# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
488
489/* The size of an array large to enough to hold all stacks, each with
490 N elements. */
491]b4_locations_if(
492[# define YYSTACK_BYTES(N) \
493 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
494 + 2 * YYSTACK_GAP_MAXIMUM)],
495[# define YYSTACK_BYTES(N) \
496 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
497 + YYSTACK_GAP_MAXIMUM)])[
498
499/* Copy COUNT objects from FROM to TO. The source and destination do
500 not overlap. */
501# ifndef YYCOPY
502# if defined __GNUC__ && 1 < __GNUC__
503# define YYCOPY(To, From, Count) \
504 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
505# else
506# define YYCOPY(To, From, Count) \
507 do \
508 { \
509 YYSIZE_T yyi; \
510 for (yyi = 0; yyi < (Count); yyi++) \
511 (To)[yyi] = (From)[yyi]; \
512 } \
513 while (YYID (0))
514# endif
515# endif
516
517/* Relocate STACK from its old location to the new one. The
518 local variables YYSIZE and YYSTACKSIZE give the old and new number of
519 elements in the stack, and YYPTR gives the new location of the
520 stack. Advance YYPTR to a properly aligned location for the next
521 stack. */
522# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
523 do \
524 { \
525 YYSIZE_T yynewbytes; \
526 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
527 Stack = &yyptr->Stack_alloc; \
528 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
529 yyptr += yynewbytes / sizeof (*yyptr); \
530 } \
531 while (YYID (0))
532
533#endif
534
535/* YYFINAL -- State number of the termination state. */
536#define YYFINAL ]b4_final_state_number[
537/* YYLAST -- Last index in YYTABLE. */
538#define YYLAST ]b4_last[
539
540/* YYNTOKENS -- Number of terminals. */
541#define YYNTOKENS ]b4_tokens_number[
542/* YYNNTS -- Number of nonterminals. */
543#define YYNNTS ]b4_nterms_number[
544/* YYNRULES -- Number of rules. */
545#define YYNRULES ]b4_rules_number[
546/* YYNRULES -- Number of states. */
547#define YYNSTATES ]b4_states_number[
548
549/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
550#define YYUNDEFTOK ]b4_undef_token_number[
551#define YYMAXUTOK ]b4_user_token_number_max[
552
553#define YYTRANSLATE(YYX) \
554 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
555
556/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
557static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
558{
559 ]b4_translate[
560};
561
562#if YYDEBUG
563/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
564 YYRHS. */
565static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
566{
567 ]b4_prhs[
568};
569
570/* YYRHS -- A `-1'-separated list of the rules' RHS. */
571static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
572{
573 ]b4_rhs[
574};
575
576/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
577static const ]b4_int_type_for([b4_rline])[ yyrline[] =
578{
579 ]b4_rline[
580};
581#endif
582
583#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
584/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
585 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
586static const char *const yytname[] =
587{
588 ]b4_tname[
589};
590#endif
591
592# ifdef YYPRINT
593/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
594 token YYLEX-NUM. */
595static const ]b4_int_type_for([b4_toknum])[ yytoknum[] =
596{
597 ]b4_toknum[
598};
599# endif
600
601/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
602static const ]b4_int_type_for([b4_r1])[ yyr1[] =
603{
604 ]b4_r1[
605};
606
607/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
608static const ]b4_int_type_for([b4_r2])[ yyr2[] =
609{
610 ]b4_r2[
611};
612
613/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
614 Performed when YYTABLE doesn't specify something else to do. Zero
615 means the default is an error. */
616static const ]b4_int_type_for([b4_defact])[ yydefact[] =
617{
618 ]b4_defact[
619};
620
621/* YYDEFGOTO[NTERM-NUM]. */
622static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
623{
624 ]b4_defgoto[
625};
626
627/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
628 STATE-NUM. */
629#define YYPACT_NINF ]b4_pact_ninf[
630static const ]b4_int_type_for([b4_pact])[ yypact[] =
631{
632 ]b4_pact[
633};
634
635/* YYPGOTO[NTERM-NUM]. */
636static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
637{
638 ]b4_pgoto[
639};
640
641/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
642 positive, shift that token. If negative, reduce the rule which
643 number is the opposite. If YYTABLE_NINF, syntax error. */
644#define YYTABLE_NINF ]b4_table_ninf[
645static const ]b4_int_type_for([b4_table])[ yytable[] =
646{
647 ]b4_table[
648};
649
650#define yypact_value_is_default(yystate) \
651 ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[
652
653#define yytable_value_is_error(yytable_value) \
654 ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[
655
656static const ]b4_int_type_for([b4_check])[ yycheck[] =
657{
658 ]b4_check[
659};
660
661/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
662 symbol of state STATE-NUM. */
663static const ]b4_int_type_for([b4_stos])[ yystos[] =
664{
665 ]b4_stos[
666};
667
668#define yyerrok (yyerrstatus = 0)
669#define yyclearin (yychar = YYEMPTY)
670#define YYEMPTY (-2)
671#define YYEOF 0
672
673#define YYACCEPT goto yyacceptlab
674#define YYABORT goto yyabortlab
675#define YYERROR goto yyerrorlab
676
677
678/* Like YYERROR except do call yyerror. This remains here temporarily
679 to ease the transition to the new meaning of YYERROR, for GCC.
680 Once GCC version 2 has supplanted version 1, this can go. However,
681 YYFAIL appears to be in use. Nevertheless, it is formally deprecated
682 in Bison 2.4.2's NEWS entry, where a plan to phase it out is
683 discussed. */
684
685#define YYFAIL goto yyerrlab
686#if defined YYFAIL
687 /* This is here to suppress warnings from the GCC cpp's
688 -Wunused-macros. Normally we don't worry about that warning, but
689 some users do, and we want to make it easy for users to remove
690 YYFAIL uses, which will produce warnings from Bison 2.5. */
691#endif
692
693#define YYRECOVERING() (!!yyerrstatus)
694
695#define YYBACKUP(Token, Value) \
696do \
697 if (yychar == YYEMPTY && yylen == 1) \
698 { \
699 yychar = (Token); \
700 yylval = (Value); \
701 YYPOPSTACK (1); \
702 goto yybackup; \
703 } \
704 else \
705 { \
706 yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
707 YYERROR; \
708 } \
709while (YYID (0))
710
711
712#define YYTERROR 1
713#define YYERRCODE 256
714
715
716/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
717 If N is 0, then set CURRENT to the empty location which ends
718 the previous symbol: RHS[0] (always defined). */
719
720#define YYRHSLOC(Rhs, K) ((Rhs)[K])
721#ifndef YYLLOC_DEFAULT
722# define YYLLOC_DEFAULT(Current, Rhs, N) \
723 do \
724 if (YYID (N)) \
725 { \
726 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
727 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
728 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
729 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
730 } \
731 else \
732 { \
733 (Current).first_line = (Current).last_line = \
734 YYRHSLOC (Rhs, 0).last_line; \
735 (Current).first_column = (Current).last_column = \
736 YYRHSLOC (Rhs, 0).last_column; \
737 } \
738 while (YYID (0))
739#endif]b4_locations_if([[
740
741
742/* YY_LOCATION_PRINT -- Print the location on the stream.
743 This macro was not mandated originally: define only if we know
744 we won't break user code: when these are the locations we know. */
745
746#ifndef YY_LOCATION_PRINT
747# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
748# define YY_LOCATION_PRINT(File, Loc) \
749 fprintf (File, "%d.%d-%d.%d", \
750 (Loc).first_line, (Loc).first_column, \
751 (Loc).last_line, (Loc).last_column)
752# else
753# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
754# endif
755#endif]], [[
756
757
758/* This macro is provided for backward compatibility. */
759
760#ifndef YY_LOCATION_PRINT
761# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
762#endif]])[
763
764
765/* YYLEX -- calling `yylex' with the right arguments. */
766
767#ifdef YYLEX_PARAM
768# define YYLEX yylex (]b4_pure_if([&yylval[]b4_locations_if([, &yylloc]), ])[YYLEX_PARAM)
769#else
770# define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
771#endif
772
773/* Enable debugging if requested. */
774#if YYDEBUG
775
776# ifndef YYFPRINTF
777# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
778# define YYFPRINTF fprintf
779# endif
780
781# define YYDPRINTF(Args) \
782do { \
783 if (yydebug) \
784 YYFPRINTF Args; \
785} while (YYID (0))
786
787# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
788do { \
789 if (yydebug) \
790 { \
791 YYFPRINTF (stderr, "%s ", Title); \
792 yy_symbol_print (stderr, \
793 Type, Value]b4_locations_if([, Location])[]b4_user_args[); \
794 YYFPRINTF (stderr, "\n"); \
795 } \
796} while (YYID (0))
797
798]b4_yy_symbol_print_generate([b4_c_function_def])[
799
800/*------------------------------------------------------------------.
801| yy_stack_print -- Print the state stack from its BOTTOM up to its |
802| TOP (included). |
803`------------------------------------------------------------------*/
804
805]b4_c_function_def([yy_stack_print], [static void],
806 [[yytype_int16 *yybottom], [yybottom]],
807 [[yytype_int16 *yytop], [yytop]])[
808{
809 YYFPRINTF (stderr, "Stack now");
810 for (; yybottom <= yytop; yybottom++)
811 {
812 int yybot = *yybottom;
813 YYFPRINTF (stderr, " %d", yybot);
814 }
815 YYFPRINTF (stderr, "\n");
816}
817
818# define YY_STACK_PRINT(Bottom, Top) \
819do { \
820 if (yydebug) \
821 yy_stack_print ((Bottom), (Top)); \
822} while (YYID (0))
823
824
825/*------------------------------------------------.
826| Report that the YYRULE is going to be reduced. |
827`------------------------------------------------*/
828
829]b4_c_function_def([yy_reduce_print], [static void],
830 [[YYSTYPE *yyvsp], [yyvsp]],
831 b4_locations_if([[[YYLTYPE *yylsp], [yylsp]],
832 ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [,
833 b4_parse_param]))[
834{
835 int yynrhs = yyr2[yyrule];
836 int yyi;
837 unsigned long int yylno = yyrline[yyrule];
838 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
839 yyrule - 1, yylno);
840 /* The symbols being reduced. */
841 for (yyi = 0; yyi < yynrhs; yyi++)
842 {
843 YYFPRINTF (stderr, " $%d = ", yyi + 1);
844 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
845 &]b4_rhs_value(yynrhs, yyi + 1)[
846 ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
847 b4_user_args[);
848 YYFPRINTF (stderr, "\n");
849 }
850}
851
852# define YY_REDUCE_PRINT(Rule) \
853do { \
854 if (yydebug) \
855 yy_reduce_print (yyvsp, ]b4_locations_if([yylsp, ])[Rule]b4_user_args[); \
856} while (YYID (0))
857
858/* Nonzero means print parse trace. It is left uninitialized so that
859 multiple parsers can coexist. */
860int yydebug;
861#else /* !YYDEBUG */
862# define YYDPRINTF(Args)
863# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
864# define YY_STACK_PRINT(Bottom, Top)
865# define YY_REDUCE_PRINT(Rule)
866#endif /* !YYDEBUG */
867
868
869/* YYINITDEPTH -- initial size of the parser's stacks. */
870#ifndef YYINITDEPTH
871# define YYINITDEPTH ]b4_stack_depth_init[
872#endif
873
874/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
875 if the built-in stack extension method is used).
876
877 Do not make this value too large; the results are undefined if
878 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
879 evaluated with infinite-precision integer arithmetic. */
880
881#ifndef YYMAXDEPTH
882# define YYMAXDEPTH ]b4_stack_depth_max[
883#endif
884
885\f
886
887#if YYERROR_VERBOSE
888
889# ifndef yystrlen
890# if defined __GLIBC__ && defined _STRING_H
891# define yystrlen strlen
892# else
893/* Return the length of YYSTR. */
894]b4_c_function_def([yystrlen], [static YYSIZE_T],
895 [[const char *yystr], [yystr]])[
896{
897 YYSIZE_T yylen;
898 for (yylen = 0; yystr[yylen]; yylen++)
899 continue;
900 return yylen;
901}
902# endif
903# endif
904
905# ifndef yystpcpy
906# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
907# define yystpcpy stpcpy
908# else
909/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
910 YYDEST. */
911]b4_c_function_def([yystpcpy], [static char *],
912 [[char *yydest], [yydest]], [[const char *yysrc], [yysrc]])[
913{
914 char *yyd = yydest;
915 const char *yys = yysrc;
916
917 while ((*yyd++ = *yys++) != '\0')
918 continue;
919
920 return yyd - 1;
921}
922# endif
923# endif
924
925# ifndef yytnamerr
926/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
927 quotes and backslashes, so that it's suitable for yyerror. The
928 heuristic is that double-quoting is unnecessary unless the string
929 contains an apostrophe, a comma, or backslash (other than
930 backslash-backslash). YYSTR is taken from yytname. If YYRES is
931 null, do not copy; instead, return the length of what the result
932 would have been. */
933static YYSIZE_T
934yytnamerr (char *yyres, const char *yystr)
935{
936 if (*yystr == '"')
937 {
938 YYSIZE_T yyn = 0;
939 char const *yyp = yystr;
940
941 for (;;)
942 switch (*++yyp)
943 {
944 case '\'':
945 case ',':
946 goto do_not_strip_quotes;
947
948 case '\\':
949 if (*++yyp != '\\')
950 goto do_not_strip_quotes;
951 /* Fall through. */
952 default:
953 if (yyres)
954 yyres[yyn] = *yyp;
955 yyn++;
956 break;
957
958 case '"':
959 if (yyres)
960 yyres[yyn] = '\0';
961 return yyn;
962 }
963 do_not_strip_quotes: ;
964 }
965
966 if (! yyres)
967 return yystrlen (yystr);
968
969 return yystpcpy (yyres, yystr) - yyres;
970}
971# endif
972
973/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
974 about the unexpected token YYTOKEN while in state YYSTATE.
975
976 Return 0 if *YYMSG was successfully written. Return 1 if an ordinary
977 "syntax error" message will suffice instead. Return 2 if *YYMSG is
978 not large enough to hold the message. In the last case, also set
979 *YYMSG_ALLOC to either (a) the required number of bytes or (b) zero
980 if the required number of bytes is too large to store. */
981static int
982yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
983 int yystate, int yytoken)
984{
985 int yyn = yypact[yystate];
986
987 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
988 return 1;
989 else
990 {
991 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
992 YYSIZE_T yysize = yysize0;
993 YYSIZE_T yysize1;
994 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
995 /* Internationalized format string. */
996 const char *yyformat = 0;
997 /* Arguments of yyformat. */
998 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
999
1000 /* Start YYX at -YYN if negative to avoid negative indexes in
1001 YYCHECK. In other words, skip the first -YYN actions for this
1002 state because they are default actions. */
1003 int yyxbegin = yyn < 0 ? -yyn : 0;
1004
1005 /* Stay within bounds of both yycheck and yytname. */
1006 int yychecklim = YYLAST - yyn + 1;
1007 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1008 /* Number of reported tokens (one for the "unexpected", one per
1009 "expected"). */
1010 int yycount = 0;
1011 int yyx;
1012
1013 yyarg[yycount++] = yytname[yytoken];
1014
1015 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1016 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1017 && !yytable_value_is_error (yytable[yyx + yyn]))
1018 {
1019 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1020 {
1021 yycount = 1;
1022 yysize = yysize0;
1023 break;
1024 }
1025 yyarg[yycount++] = yytname[yyx];
1026 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1027 if (! (yysize <= yysize1
1028 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1029 {
1030 /* Overflow. */
1031 *yymsg_alloc = 0;
1032 return 2;
1033 }
1034 yysize = yysize1;
1035 }
1036
1037 switch (yycount)
1038 {
1039#define YYCASE_(N, S) \
1040 case N: \
1041 yyformat = S; \
1042 break
1043 YYCASE_(1, YY_("syntax error, unexpected %s"));
1044 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1045 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1046 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1047 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1048#undef YYCASE_
1049 }
1050
1051 yysize1 = yysize + yystrlen (yyformat);
1052 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1053 {
1054 /* Overflow. */
1055 *yymsg_alloc = 0;
1056 return 2;
1057 }
1058 yysize = yysize1;
1059
1060 if (*yymsg_alloc < yysize)
1061 {
1062 *yymsg_alloc = 2 * yysize;
1063 if (! (yysize <= *yymsg_alloc
1064 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1065 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1066 return 2;
1067 }
1068
1069 /* Avoid sprintf, as that infringes on the user's name space.
1070 Don't have undefined behavior even if the translation
1071 produced a string with the wrong number of "%s"s. */
1072 {
1073 char *yyp = *yymsg;
1074 int yyi = 0;
1075 while ((*yyp = *yyformat) != '\0')
1076 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1077 {
1078 yyp += yytnamerr (yyp, yyarg[yyi++]);
1079 yyformat += 2;
1080 }
1081 else
1082 {
1083 yyp++;
1084 yyformat++;
1085 }
1086 }
1087 return 0;
1088 }
1089}
1090#endif /* YYERROR_VERBOSE */
1091\f
1092
1093]b4_yydestruct_generate([b4_c_function_def])b4_push_if([], [[
1094
1095
1096/* Prevent warnings from -Wmissing-prototypes. */
1097#ifdef YYPARSE_PARAM
1098]b4_c_function_decl([yyparse], [int],
1099 [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
1100#else /* ! YYPARSE_PARAM */
1101]b4_c_function_decl([yyparse], [int], b4_parse_param)[
1102#endif /* ! YYPARSE_PARAM */]])b4_pure_if([], [
1103
1104b4_declare_scanner_communication_variables])[]b4_push_if([[
1105
1106
1107struct yypstate
1108 {]b4_declare_parser_state_variables[
1109 /* Used to determine if this is the first time this instance has
1110 been used. */
1111 int yynew;
1112 };]b4_pure_if([], [[
1113
1114static char yypstate_allocated = 0;]])b4_pull_if([
1115
1116b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[
1117{
1118 return yypull_parse (0]m4_ifset([b4_parse_param],
1119 [[, ]b4_c_args(b4_parse_param)])[);
1120}
1121
1122]b4_c_function_def([[yypull_parse]], [[int]],
1123 [[[yypstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [,
1124 b4_parse_param]))[
1125{
1126 int yystatus;
1127 yypstate *yyps_local;]b4_pure_if([[
1128 int yychar;
1129 YYSTYPE yylval;]b4_locations_if([[
1130 YYLTYPE yylloc;]])])[
1131 if (yyps == 0)
1132 {
1133 yyps_local = yypstate_new ();
1134 if (!yyps_local)
1135 {]b4_pure_if([[
1136 yyerror (]b4_yyerror_args[YY_("memory exhausted"));]], [[
1137 if (!yypstate_allocated)
1138 yyerror (]b4_yyerror_args[YY_("memory exhausted"));]])[
1139 return 2;
1140 }
1141 }
1142 else
1143 yyps_local = yyps;
1144 do {
1145 yychar = YYLEX;
1146 yystatus =
1147 yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])[);
1148 } while (yystatus == YYPUSH_MORE);
1149 if (yyps == 0)
1150 yypstate_delete (yyps_local);
1151 return yystatus;
1152}]])[
1153
1154/* Initialize the parser data structure. */
1155]b4_c_function_def([[yypstate_new]], [[yypstate *]])[
1156{
1157 yypstate *yyps;]b4_pure_if([], [[
1158 if (yypstate_allocated)
1159 return 0;]])[
1160 yyps = (yypstate *) malloc (sizeof *yyps);
1161 if (!yyps)
1162 return 0;
1163 yyps->yynew = 1;]b4_pure_if([], [[
1164 yypstate_allocated = 1;]])[
1165 return yyps;
1166}
1167
1168]b4_c_function_def([[yypstate_delete]], [[void]],
1169 [[[yypstate *yyps]], [[yyps]]])[
1170{
1171#ifndef yyoverflow
1172 /* If the stack was reallocated but the parse did not complete, then the
1173 stack still needs to be freed. */
1174 if (!yyps->yynew && yyps->yyss != yyps->yyssa)
1175 YYSTACK_FREE (yyps->yyss);
1176#endif
1177 free (yyps);]b4_pure_if([], [[
1178 yypstate_allocated = 0;]])[
1179}
1180]b4_pure_if([[
1181#define ]b4_prefix[nerrs yyps->]b4_prefix[nerrs]])[
1182#define yystate yyps->yystate
1183#define yyerrstatus yyps->yyerrstatus
1184#define yyssa yyps->yyssa
1185#define yyss yyps->yyss
1186#define yyssp yyps->yyssp
1187#define yyvsa yyps->yyvsa
1188#define yyvs yyps->yyvs
1189#define yyvsp yyps->yyvsp]b4_locations_if([[
1190#define yylsa yyps->yylsa
1191#define yyls yyps->yyls
1192#define yylsp yyps->yylsp
1193#define yyerror_range yyps->yyerror_range]])[
1194#define yystacksize yyps->yystacksize
1195
1196
1197/*---------------.
1198| yypush_parse. |
1199`---------------*/
1200
1201]b4_c_function_def([[yypush_parse]], [[int]],
1202 [[[yypstate *yyps]], [[yyps]]]b4_pure_if([,
1203 [[[int yypushed_char]], [[yypushed_char]]],
1204 [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
1205 [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])])m4_ifset([b4_parse_param], [,
1206 b4_parse_param]))], [[
1207
1208
1209/*----------.
1210| yyparse. |
1211`----------*/
1212
1213#ifdef YYPARSE_PARAM
1214]b4_c_function_def([yyparse], [int],
1215 [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
1216#else /* ! YYPARSE_PARAM */
1217]b4_c_function_def([yyparse], [int], b4_parse_param)[
1218#endif]])[
1219{]b4_pure_if([b4_declare_scanner_communication_variables
1220])b4_push_if([b4_pure_if([], [[
1221 int yypushed_char = yychar;
1222 YYSTYPE yypushed_val = yylval;]b4_locations_if([[
1223 YYLTYPE yypushed_loc = yylloc;]])
1224])],
1225 [b4_declare_parser_state_variables
1226])[
1227 int yyn;
1228 int yyresult;
1229 /* Lookahead token as an internal (translated) token number. */
1230 int yytoken;
1231 /* The variables used to return semantic value and location from the
1232 action routines. */
1233 YYSTYPE yyval;]b4_locations_if([[
1234 YYLTYPE yyloc;]])[
1235
1236#if YYERROR_VERBOSE
1237 /* Buffer for error messages, and its allocated size. */
1238 char yymsgbuf[128];
1239 char *yymsg = yymsgbuf;
1240 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1241#endif
1242
1243#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp -= (N)])[)
1244
1245 /* The number of symbols on the RHS of the reduced rule.
1246 Keep to zero when no symbol should be popped. */
1247 int yylen = 0;]b4_push_if([[
1248
1249 if (!yyps->yynew)
1250 {
1251 yyn = yypact[yystate];
1252 goto yyread_pushed_token;
1253 }]])[
1254
1255 yytoken = 0;
1256 yyss = yyssa;
1257 yyvs = yyvsa;]b4_locations_if([[
1258 yyls = yylsa;]])[
1259 yystacksize = YYINITDEPTH;
1260
1261 YYDPRINTF ((stderr, "Starting parse\n"));
1262
1263 yystate = 0;
1264 yyerrstatus = 0;
1265 yynerrs = 0;
1266 yychar = YYEMPTY; /* Cause a token to be read. */
1267
1268 /* Initialize stack pointers.
1269 Waste one element of value and location stack
1270 so that they stay on the same level as the state stack.
1271 The wasted elements are never initialized. */
1272 yyssp = yyss;
1273 yyvsp = yyvs;]b4_locations_if([[
1274 yylsp = yyls;
1275
1276#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1277 /* Initialize the default location before parsing starts. */
1278 yylloc.first_line = yylloc.last_line = ]b4_location_initial_line[;
1279 yylloc.first_column = yylloc.last_column = ]b4_location_initial_column[;
1280#endif]])
1281m4_ifdef([b4_initial_action],[
1282m4_pushdef([b4_at_dollar], [m4_define([b4_at_dollar_used])yylloc])dnl
1283m4_pushdef([b4_dollar_dollar], [m4_define([b4_dollar_dollar_used])yylval])dnl
1284/* User initialization code. */
1285b4_user_initial_action
1286m4_popdef([b4_dollar_dollar])dnl
1287m4_popdef([b4_at_dollar])])dnl
1288m4_ifdef([b4_dollar_dollar_used],[[ yyvsp[0] = yylval;
1289]])dnl
1290m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc;
1291]])[
1292 goto yysetstate;
1293
1294/*------------------------------------------------------------.
1295| yynewstate -- Push a new state, which is found in yystate. |
1296`------------------------------------------------------------*/
1297 yynewstate:
1298 /* In all cases, when you get here, the value and location stacks
1299 have just been pushed. So pushing a state here evens the stacks. */
1300 yyssp++;
1301
1302 yysetstate:
1303 *yyssp = yystate;
1304
1305 if (yyss + yystacksize - 1 <= yyssp)
1306 {
1307 /* Get the current used size of the three stacks, in elements. */
1308 YYSIZE_T yysize = yyssp - yyss + 1;
1309
1310#ifdef yyoverflow
1311 {
1312 /* Give user a chance to reallocate the stack. Use copies of
1313 these so that the &'s don't force the real ones into
1314 memory. */
1315 YYSTYPE *yyvs1 = yyvs;
1316 yytype_int16 *yyss1 = yyss;]b4_locations_if([
1317 YYLTYPE *yyls1 = yyls;])[
1318
1319 /* Each stack pointer address is followed by the size of the
1320 data in use in that stack, in bytes. This used to be a
1321 conditional around just the two extra args, but that might
1322 be undefined if yyoverflow is a macro. */
1323 yyoverflow (YY_("memory exhausted"),
1324 &yyss1, yysize * sizeof (*yyssp),
1325 &yyvs1, yysize * sizeof (*yyvsp),]b4_locations_if([
1326 &yyls1, yysize * sizeof (*yylsp),])[
1327 &yystacksize);
1328]b4_locations_if([
1329 yyls = yyls1;])[
1330 yyss = yyss1;
1331 yyvs = yyvs1;
1332 }
1333#else /* no yyoverflow */
1334# ifndef YYSTACK_RELOCATE
1335 goto yyexhaustedlab;
1336# else
1337 /* Extend the stack our own way. */
1338 if (YYMAXDEPTH <= yystacksize)
1339 goto yyexhaustedlab;
1340 yystacksize *= 2;
1341 if (YYMAXDEPTH < yystacksize)
1342 yystacksize = YYMAXDEPTH;
1343
1344 {
1345 yytype_int16 *yyss1 = yyss;
1346 union yyalloc *yyptr =
1347 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1348 if (! yyptr)
1349 goto yyexhaustedlab;
1350 YYSTACK_RELOCATE (yyss_alloc, yyss);
1351 YYSTACK_RELOCATE (yyvs_alloc, yyvs);]b4_locations_if([
1352 YYSTACK_RELOCATE (yyls_alloc, yyls);])[
1353# undef YYSTACK_RELOCATE
1354 if (yyss1 != yyssa)
1355 YYSTACK_FREE (yyss1);
1356 }
1357# endif
1358#endif /* no yyoverflow */
1359
1360 yyssp = yyss + yysize - 1;
1361 yyvsp = yyvs + yysize - 1;]b4_locations_if([
1362 yylsp = yyls + yysize - 1;])[
1363
1364 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1365 (unsigned long int) yystacksize));
1366
1367 if (yyss + yystacksize - 1 <= yyssp)
1368 YYABORT;
1369 }
1370
1371 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1372
1373 if (yystate == YYFINAL)
1374 YYACCEPT;
1375
1376 goto yybackup;
1377
1378/*-----------.
1379| yybackup. |
1380`-----------*/
1381yybackup:
1382
1383 /* Do appropriate processing given the current state. Read a
1384 lookahead token if we need one and don't already have one. */
1385
1386 /* First try to decide what to do without reference to lookahead token. */
1387 yyn = yypact[yystate];
1388 if (yypact_value_is_default (yyn))
1389 goto yydefault;
1390
1391 /* Not known => get a lookahead token if don't already have one. */
1392
1393 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1394 if (yychar == YYEMPTY)
1395 {]b4_push_if([[
1396 if (!yyps->yynew)
1397 {]b4_use_push_for_pull_if([], [[
1398 YYDPRINTF ((stderr, "Return for a new token:\n"));]])[
1399 yyresult = YYPUSH_MORE;
1400 goto yypushreturn;
1401 }
1402 yyps->yynew = 0;]b4_pure_if([], [[
1403 /* Restoring the pushed token is only necessary for the first
1404 yypush_parse invocation since subsequent invocations don't overwrite
1405 it before jumping to yyread_pushed_token. */
1406 yychar = yypushed_char;
1407 yylval = yypushed_val;]b4_locations_if([[
1408 yylloc = yypushed_loc;]])])[
1409yyread_pushed_token:]])[
1410 YYDPRINTF ((stderr, "Reading a token: "));]b4_push_if([b4_pure_if([[
1411 yychar = yypushed_char;
1412 if (yypushed_val)
1413 yylval = *yypushed_val;]b4_locations_if([[
1414 if (yypushed_loc)
1415 yylloc = *yypushed_loc;]])])], [[
1416 yychar = YYLEX;]])[
1417 }
1418
1419 if (yychar <= YYEOF)
1420 {
1421 yychar = yytoken = YYEOF;
1422 YYDPRINTF ((stderr, "Now at end of input.\n"));
1423 }
1424 else
1425 {
1426 yytoken = YYTRANSLATE (yychar);
1427 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1428 }
1429
1430 /* If the proper action on seeing token YYTOKEN is to reduce or to
1431 detect an error, take that action. */
1432 yyn += yytoken;
1433 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1434 goto yydefault;
1435 yyn = yytable[yyn];
1436 if (yyn <= 0)
1437 {
1438 if (yytable_value_is_error (yyn))
1439 goto yyerrlab;
1440 yyn = -yyn;
1441 goto yyreduce;
1442 }
1443
1444 /* Count tokens shifted since error; after three, turn off error
1445 status. */
1446 if (yyerrstatus)
1447 yyerrstatus--;
1448
1449 /* Shift the lookahead token. */
1450 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1451
1452 /* Discard the shifted token. */
1453 yychar = YYEMPTY;
1454
1455 yystate = yyn;
1456 *++yyvsp = yylval;
1457]b4_locations_if([ *++yylsp = yylloc;])[
1458 goto yynewstate;
1459
1460
1461/*-----------------------------------------------------------.
1462| yydefault -- do the default action for the current state. |
1463`-----------------------------------------------------------*/
1464yydefault:
1465 yyn = yydefact[yystate];
1466 if (yyn == 0)
1467 goto yyerrlab;
1468 goto yyreduce;
1469
1470
1471/*-----------------------------.
1472| yyreduce -- Do a reduction. |
1473`-----------------------------*/
1474yyreduce:
1475 /* yyn is the number of a rule to reduce with. */
1476 yylen = yyr2[yyn];
1477
1478 /* If YYLEN is nonzero, implement the default value of the action:
1479 `$$ = $1'.
1480
1481 Otherwise, the following line sets YYVAL to garbage.
1482 This behavior is undocumented and Bison
1483 users should not rely upon it. Assigning to YYVAL
1484 unconditionally makes the parser a bit smaller, and it avoids a
1485 GCC warning that YYVAL may be used uninitialized. */
1486 yyval = yyvsp[1-yylen];
1487
1488]b4_locations_if(
1489[[ /* Default location. */
1490 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);]])[
1491 YY_REDUCE_PRINT (yyn);
1492 switch (yyn)
1493 {
1494 ]b4_user_actions[
1495 default: break;
1496 }
1497 /* User semantic actions sometimes alter yychar, and that requires
1498 that yytoken be updated with the new translation. We take the
1499 approach of translating immediately before every use of yytoken.
1500 One alternative is translating here after every semantic action,
1501 but that translation would be missed if the semantic action invokes
1502 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
1503 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
1504 incorrect destructor might then be invoked immediately. In the
1505 case of YYERROR or YYBACKUP, subsequent parser actions might lead
1506 to an incorrect destructor call or verbose syntax error message
1507 before the lookahead is translated. */
1508 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
1509
1510 YYPOPSTACK (yylen);
1511 yylen = 0;
1512 YY_STACK_PRINT (yyss, yyssp);
1513
1514 *++yyvsp = yyval;]b4_locations_if([
1515 *++yylsp = yyloc;])[
1516
1517 /* Now `shift' the result of the reduction. Determine what state
1518 that goes to, based on the state we popped back to and the rule
1519 number reduced by. */
1520
1521 yyn = yyr1[yyn];
1522
1523 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1524 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1525 yystate = yytable[yystate];
1526 else
1527 yystate = yydefgoto[yyn - YYNTOKENS];
1528
1529 goto yynewstate;
1530
1531
1532/*------------------------------------.
1533| yyerrlab -- here on detecting error |
1534`------------------------------------*/
1535yyerrlab:
1536 /* Make sure we have latest lookahead translation. See comments at
1537 user semantic actions for why this is necessary. */
1538 yytoken = YYTRANSLATE (yychar);
1539
1540 /* If not already recovering from an error, report this error. */
1541 if (!yyerrstatus)
1542 {
1543 ++yynerrs;
1544#if ! YYERROR_VERBOSE
1545 yyerror (]b4_yyerror_args[YY_("syntax error"));
1546#else
1547 while (1)
1548 {
1549 int yysyntax_error_status =
1550 yysyntax_error (&yymsg_alloc, &yymsg, yystate, yytoken);
1551 if (yysyntax_error_status == 2 && 0 < yymsg_alloc)
1552 {
1553 if (yymsg != yymsgbuf)
1554 YYSTACK_FREE (yymsg);
1555 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
1556 if (yymsg)
1557 continue;
1558 yymsg = yymsgbuf;
1559 yymsg_alloc = sizeof yymsgbuf;
1560 }
1561 if (yysyntax_error_status == 0)
1562 yyerror (]b4_yyerror_args[yymsg);
1563 else
1564 yyerror (]b4_yyerror_args[YY_("syntax error"));
1565 if (yysyntax_error_status == 2)
1566 goto yyexhaustedlab;
1567 break;
1568 }
1569#endif
1570 }
1571
1572]b4_locations_if([[ yyerror_range[0] = yylloc;]])[
1573
1574 if (yyerrstatus == 3)
1575 {
1576 /* If just tried and failed to reuse lookahead token after an
1577 error, discard it. */
1578
1579 if (yychar <= YYEOF)
1580 {
1581 /* Return failure if at end of input. */
1582 if (yychar == YYEOF)
1583 YYABORT;
1584 }
1585 else
1586 {
1587 yydestruct ("Error: discarding",
1588 yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
1589 yychar = YYEMPTY;
1590 }
1591 }
1592
1593 /* Else will try to reuse lookahead token after shifting the error
1594 token. */
1595 goto yyerrlab1;
1596
1597
1598/*---------------------------------------------------.
1599| yyerrorlab -- error raised explicitly by YYERROR. |
1600`---------------------------------------------------*/
1601yyerrorlab:
1602
1603 /* Pacify compilers like GCC when the user code never invokes
1604 YYERROR and the label yyerrorlab therefore never appears in user
1605 code. */
1606 if (/*CONSTCOND*/ 0)
1607 goto yyerrorlab;
1608
1609]b4_locations_if([[ yyerror_range[0] = yylsp[1-yylen];
1610]])[ /* Do not reclaim the symbols of the rule which action triggered
1611 this YYERROR. */
1612 YYPOPSTACK (yylen);
1613 yylen = 0;
1614 YY_STACK_PRINT (yyss, yyssp);
1615 yystate = *yyssp;
1616 goto yyerrlab1;
1617
1618
1619/*-------------------------------------------------------------.
1620| yyerrlab1 -- common code for both syntax error and YYERROR. |
1621`-------------------------------------------------------------*/
1622yyerrlab1:
1623 yyerrstatus = 3; /* Each real token shifted decrements this. */
1624
1625 for (;;)
1626 {
1627 yyn = yypact[yystate];
1628 if (!yypact_value_is_default (yyn))
1629 {
1630 yyn += YYTERROR;
1631 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1632 {
1633 yyn = yytable[yyn];
1634 if (0 < yyn)
1635 break;
1636 }
1637 }
1638
1639 /* Pop the current state because it cannot handle the error token. */
1640 if (yyssp == yyss)
1641 YYABORT;
1642
1643]b4_locations_if([[ yyerror_range[0] = *yylsp;]])[
1644 yydestruct ("Error: popping",
1645 yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
1646 YYPOPSTACK (1);
1647 yystate = *yyssp;
1648 YY_STACK_PRINT (yyss, yyssp);
1649 }
1650
1651 *++yyvsp = yylval;
1652]b4_locations_if([[
1653 yyerror_range[1] = yylloc;
1654 /* Using YYLLOC is tempting, but would change the location of
1655 the lookahead. YYLOC is available though. */
1656 YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
1657 *++yylsp = yyloc;]])[
1658
1659 /* Shift the error token. */
1660 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
1661
1662 yystate = yyn;
1663 goto yynewstate;
1664
1665
1666/*-------------------------------------.
1667| yyacceptlab -- YYACCEPT comes here. |
1668`-------------------------------------*/
1669yyacceptlab:
1670 yyresult = 0;
1671 goto yyreturn;
1672
1673/*-----------------------------------.
1674| yyabortlab -- YYABORT comes here. |
1675`-----------------------------------*/
1676yyabortlab:
1677 yyresult = 1;
1678 goto yyreturn;
1679
1680#if !defined(yyoverflow) || YYERROR_VERBOSE
1681/*-------------------------------------------------.
1682| yyexhaustedlab -- memory exhaustion comes here. |
1683`-------------------------------------------------*/
1684yyexhaustedlab:
1685 yyerror (]b4_yyerror_args[YY_("memory exhausted"));
1686 yyresult = 2;
1687 /* Fall through. */
1688#endif
1689
1690yyreturn:
1691 if (yychar != YYEMPTY)
1692 {
1693 /* Make sure we have latest lookahead translation. See comments at
1694 user semantic actions for why this is necessary. */
1695 yytoken = YYTRANSLATE (yychar);
1696 yydestruct ("Cleanup: discarding lookahead",
1697 yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
1698 }
1699 /* Do not reclaim the symbols of the rule which action triggered
1700 this YYABORT or YYACCEPT. */
1701 YYPOPSTACK (yylen);
1702 YY_STACK_PRINT (yyss, yyssp);
1703 while (yyssp != yyss)
1704 {
1705 yydestruct ("Cleanup: popping",
1706 yystos[*yyssp], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
1707 YYPOPSTACK (1);
1708 }
1709#ifndef yyoverflow
1710 if (yyss != yyssa)
1711 YYSTACK_FREE (yyss);
1712#endif]b4_push_if([[
1713 yyps->yynew = 1;
1714
1715yypushreturn:]])[
1716#if YYERROR_VERBOSE
1717 if (yymsg != yymsgbuf)
1718 YYSTACK_FREE (yymsg);
1719#endif
1720 /* Make sure YYID is used. */
1721 return YYID (yyresult);
1722}
1723
1724
1725]b4_epilogue
1726b4_defines_if(
1727[@output(b4_spec_defines_file@)@
1728b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C],
1729 [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005,
1730 2006, 2007, 2008, 2009])
1731
1732b4_percent_code_get([[requires]])[]dnl
1733
1734b4_token_enums_defines(b4_tokens)
1735
1736[#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1737]m4_ifdef([b4_stype],
1738[[typedef union ]b4_union_name[
1739{
1740]b4_user_stype[
1741} YYSTYPE;
1742# define YYSTYPE_IS_TRIVIAL 1]],
1743[m4_if(b4_tag_seen_flag, 0,
1744[[typedef int YYSTYPE;
1745# define YYSTYPE_IS_TRIVIAL 1]])])[
1746# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1747# define YYSTYPE_IS_DECLARED 1
1748#endif
1749
1750]b4_pure_if([], [[extern YYSTYPE ]b4_prefix[lval;]])
1751
1752b4_locations_if(
1753[#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
1754typedef struct YYLTYPE
1755{
1756 int first_line;
1757 int first_column;
1758 int last_line;
1759 int last_column;
1760} YYLTYPE;
1761# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
1762# define YYLTYPE_IS_DECLARED 1
1763# define YYLTYPE_IS_TRIVIAL 1
1764#endif
1765
1766]b4_pure_if([], [[extern YYLTYPE ]b4_prefix[lloc;]])
1767)dnl b4_locations_if
1768b4_push_if([[
1769#ifndef YYPUSH_DECLS
1770# define YYPUSH_DECLS
1771struct ]b4_prefix[pstate;
1772typedef struct ]b4_prefix[pstate ]b4_prefix[pstate;
1773enum { YYPUSH_MORE = 4 };
1774]b4_pull_if([b4_c_function_decl([b4_prefix[parse]], [[int]], b4_parse_param)
1775])b4_c_function_decl([b4_prefix[push_parse]], [[int]],
1776 [[b4_prefix[pstate *yyps]], [[yyps]]]b4_pure_if([,
1777 [[[int yypushed_char]], [[yypushed_char]]],
1778 [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
1779 [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])])m4_ifset([b4_parse_param], [,
1780 b4_parse_param]))
1781b4_pull_if([b4_c_function_decl([b4_prefix[pull_parse]], [[int]],
1782 [[b4_prefix[pstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [,
1783 b4_parse_param]))])
1784b4_c_function_decl([b4_prefix[pstate_new]], [b4_prefix[pstate *]],
1785 [[[void]], []])
1786b4_c_function_decl([b4_prefix[pstate_delete]], [[void]],
1787 [[b4_prefix[pstate *yyps]], [[yyps]]])[
1788#endif
1789]])
1790b4_percent_code_get([[provides]])[]dnl
1791])dnl b4_defines_if
1792m4_divert_pop(0)