Line data Source code
1 : /* A Bison parser, made by GNU Bison 3.0.4. */
2 :
3 : /* Bison implementation for Yacc-like parsers in C
4 :
5 : Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6 :
7 : This program is free software: you can redistribute it and/or modify
8 : it under the terms of the GNU General Public License as published by
9 : the Free Software Foundation, either version 3 of the License, or
10 : (at your option) any later version.
11 :
12 : This program is distributed in the hope that it will be useful,
13 : but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : GNU General Public License for more details.
16 :
17 : You should have received a copy of the GNU General Public License
18 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 :
20 : /* As a special exception, you may create a larger work that contains
21 : part or all of the Bison parser skeleton and distribute that work
22 : under terms of your choice, so long as that work isn't itself a
23 : parser generator using the skeleton or a modified version thereof
24 : as a parser skeleton. Alternatively, if you modify or redistribute
25 : the parser skeleton itself, you may (at your option) remove this
26 : special exception, which will cause the skeleton and the resulting
27 : Bison output files to be licensed under the GNU General Public
28 : License without this special exception.
29 :
30 : This special exception was added by the Free Software Foundation in
31 : version 2.2 of Bison. */
32 :
33 : /* C LALR(1) parser skeleton written by Richard Stallman, by
34 : simplifying the original so-called "semantic" parser. */
35 :
36 : /* All symbols defined below should begin with yy or YY, to avoid
37 : infringing on user name space. This should be done even for local
38 : variables, as they might otherwise be expanded by user macros.
39 : There are some unavoidable exceptions within include files to
40 : define necessary library symbols; they are noted "INFRINGES ON
41 : USER NAME SPACE" below. */
42 :
43 : /* Identify Bison output. */
44 : #define YYBISON 1
45 :
46 : /* Bison version. */
47 : #define YYBISON_VERSION "3.0.4"
48 :
49 : /* Skeleton name. */
50 : #define YYSKELETON_NAME "yacc.c"
51 :
52 : /* Pure parsers. */
53 : #define YYPURE 0
54 :
55 : /* Push parsers. */
56 : #define YYPUSH 0
57 :
58 : /* Pull parsers. */
59 : #define YYPULL 1
60 :
61 :
62 :
63 :
64 : /* Copy the first part of user declarations. */
65 :
66 :
67 : #ifdef HAVE_CONFIG_H
68 : #include <config.h>
69 : #endif
70 : #include <stdio.h>
71 : #include <stdlib.h>
72 : #include <hx_locl.h>
73 :
74 :
75 :
76 :
77 :
78 : # ifndef YY_NULLPTR
79 : # if defined __cplusplus && 201103L <= __cplusplus
80 : # define YY_NULLPTR nullptr
81 : # else
82 : # define YY_NULLPTR 0
83 : # endif
84 : # endif
85 :
86 : /* Enabling verbose error messages. */
87 : #ifdef YYERROR_VERBOSE
88 : # undef YYERROR_VERBOSE
89 : # define YYERROR_VERBOSE 1
90 : #else
91 : # define YYERROR_VERBOSE 0
92 : #endif
93 :
94 : /* In a future release of Bison, this section will be replaced
95 : by #include "sel-gram.tab.h". */
96 : #ifndef YY_YY_SEL_GRAM_TAB_H_INCLUDED
97 : # define YY_YY_SEL_GRAM_TAB_H_INCLUDED
98 : /* Debug traces. */
99 : #ifndef YYDEBUG
100 : # define YYDEBUG 0
101 : #endif
102 : #if YYDEBUG
103 : extern int yydebug;
104 : #endif
105 :
106 : /* Token type. */
107 : #ifndef YYTOKENTYPE
108 : # define YYTOKENTYPE
109 : enum yytokentype
110 : {
111 : kw_TRUE = 258,
112 : kw_FALSE = 259,
113 : kw_AND = 260,
114 : kw_OR = 261,
115 : kw_IN = 262,
116 : kw_TAILMATCH = 263,
117 : NUMBER = 264,
118 : STRING = 265,
119 : IDENTIFIER = 266
120 : };
121 : #endif
122 :
123 : /* Value type. */
124 : #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
125 :
126 : union YYSTYPE
127 : {
128 :
129 :
130 : char *string;
131 : struct hx_expr *expr;
132 :
133 :
134 : };
135 :
136 : typedef union YYSTYPE YYSTYPE;
137 : # define YYSTYPE_IS_TRIVIAL 1
138 : # define YYSTYPE_IS_DECLARED 1
139 : #endif
140 :
141 :
142 : extern YYSTYPE yylval;
143 :
144 : int yyparse (void);
145 :
146 : #endif /* !YY_YY_SEL_GRAM_TAB_H_INCLUDED */
147 :
148 : /* Copy the second part of user declarations. */
149 :
150 :
151 :
152 : #ifdef short
153 : # undef short
154 : #endif
155 :
156 : #ifdef YYTYPE_UINT8
157 : typedef YYTYPE_UINT8 yytype_uint8;
158 : #else
159 : typedef unsigned char yytype_uint8;
160 : #endif
161 :
162 : #ifdef YYTYPE_INT8
163 : typedef YYTYPE_INT8 yytype_int8;
164 : #else
165 : typedef signed char yytype_int8;
166 : #endif
167 :
168 : #ifdef YYTYPE_UINT16
169 : typedef YYTYPE_UINT16 yytype_uint16;
170 : #else
171 : typedef unsigned short int yytype_uint16;
172 : #endif
173 :
174 : #ifdef YYTYPE_INT16
175 : typedef YYTYPE_INT16 yytype_int16;
176 : #else
177 : typedef short int yytype_int16;
178 : #endif
179 :
180 : #ifndef YYSIZE_T
181 : # ifdef __SIZE_TYPE__
182 : # define YYSIZE_T __SIZE_TYPE__
183 : # elif defined size_t
184 : # define YYSIZE_T size_t
185 : # elif ! defined YYSIZE_T
186 : # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
187 : # define YYSIZE_T size_t
188 : # else
189 : # define YYSIZE_T unsigned int
190 : # endif
191 : #endif
192 :
193 : #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
194 :
195 : #ifndef YY_
196 : # if defined YYENABLE_NLS && YYENABLE_NLS
197 : # if ENABLE_NLS
198 : # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
199 : # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
200 : # endif
201 : # endif
202 : # ifndef YY_
203 : # define YY_(Msgid) Msgid
204 : # endif
205 : #endif
206 :
207 : #ifndef YY_ATTRIBUTE
208 : # if (defined __GNUC__ \
209 : && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
210 : || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
211 : # define YY_ATTRIBUTE(Spec) __attribute__(Spec)
212 : # else
213 : # define YY_ATTRIBUTE(Spec) /* empty */
214 : # endif
215 : #endif
216 :
217 : #ifndef YY_ATTRIBUTE_PURE
218 : # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
219 : #endif
220 :
221 : #ifndef YY_ATTRIBUTE_UNUSED
222 : # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
223 : #endif
224 :
225 : #if !defined _Noreturn \
226 : && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
227 : # if defined _MSC_VER && 1200 <= _MSC_VER
228 : # define _Noreturn __declspec (noreturn)
229 : # else
230 : # define _Noreturn YY_ATTRIBUTE ((__noreturn__))
231 : # endif
232 : #endif
233 :
234 : /* Suppress unused-variable warnings by "using" E. */
235 : #if ! defined lint || defined __GNUC__
236 : # define YYUSE(E) ((void) (E))
237 : #else
238 : # define YYUSE(E) /* empty */
239 : #endif
240 :
241 : #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
242 : /* Suppress an incorrect diagnostic about yylval being uninitialized. */
243 : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
244 : _Pragma ("GCC diagnostic push") \
245 : _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
246 : _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
247 : # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
248 : _Pragma ("GCC diagnostic pop")
249 : #else
250 : # define YY_INITIAL_VALUE(Value) Value
251 : #endif
252 : #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
253 : # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
254 : # define YY_IGNORE_MAYBE_UNINITIALIZED_END
255 : #endif
256 : #ifndef YY_INITIAL_VALUE
257 : # define YY_INITIAL_VALUE(Value) /* Nothing. */
258 : #endif
259 :
260 :
261 : #if ! defined yyoverflow || YYERROR_VERBOSE
262 :
263 : /* The parser invokes alloca or malloc; define the necessary symbols. */
264 :
265 : # ifdef YYSTACK_USE_ALLOCA
266 : # if YYSTACK_USE_ALLOCA
267 : # ifdef __GNUC__
268 : # define YYSTACK_ALLOC __builtin_alloca
269 : # elif defined __BUILTIN_VA_ARG_INCR
270 : # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
271 : # elif defined _AIX
272 : # define YYSTACK_ALLOC __alloca
273 : # elif defined _MSC_VER
274 : # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
275 : # define alloca _alloca
276 : # else
277 : # define YYSTACK_ALLOC alloca
278 : # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
279 : # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
280 : /* Use EXIT_SUCCESS as a witness for stdlib.h. */
281 : # ifndef EXIT_SUCCESS
282 : # define EXIT_SUCCESS 0
283 : # endif
284 : # endif
285 : # endif
286 : # endif
287 : # endif
288 :
289 : # ifdef YYSTACK_ALLOC
290 : /* Pacify GCC's 'empty if-body' warning. */
291 : # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
292 : # ifndef YYSTACK_ALLOC_MAXIMUM
293 : /* The OS might guarantee only one guard page at the bottom of the stack,
294 : and a page size can be as small as 4096 bytes. So we cannot safely
295 : invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
296 : to allow for a few compiler-allocated temporary stack slots. */
297 : # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
298 : # endif
299 : # else
300 : # define YYSTACK_ALLOC YYMALLOC
301 : # define YYSTACK_FREE YYFREE
302 : # ifndef YYSTACK_ALLOC_MAXIMUM
303 : # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
304 : # endif
305 : # if (defined __cplusplus && ! defined EXIT_SUCCESS \
306 : && ! ((defined YYMALLOC || defined malloc) \
307 : && (defined YYFREE || defined free)))
308 : # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
309 : # ifndef EXIT_SUCCESS
310 : # define EXIT_SUCCESS 0
311 : # endif
312 : # endif
313 : # ifndef YYMALLOC
314 : # define YYMALLOC malloc
315 : # if ! defined malloc && ! defined EXIT_SUCCESS
316 : void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
317 : # endif
318 : # endif
319 : # ifndef YYFREE
320 : # define YYFREE free
321 : # if ! defined free && ! defined EXIT_SUCCESS
322 : void free (void *); /* INFRINGES ON USER NAME SPACE */
323 : # endif
324 : # endif
325 : # endif
326 : #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
327 :
328 :
329 : #if (! defined yyoverflow \
330 : && (! defined __cplusplus \
331 : || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
332 :
333 : /* A type that is properly aligned for any stack member. */
334 : union yyalloc
335 : {
336 : yytype_int16 yyss_alloc;
337 : YYSTYPE yyvs_alloc;
338 : };
339 :
340 : /* The size of the maximum gap between one aligned stack and the next. */
341 : # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
342 :
343 : /* The size of an array large to enough to hold all stacks, each with
344 : N elements. */
345 : # define YYSTACK_BYTES(N) \
346 : ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
347 : + YYSTACK_GAP_MAXIMUM)
348 :
349 : # define YYCOPY_NEEDED 1
350 :
351 : /* Relocate STACK from its old location to the new one. The
352 : local variables YYSIZE and YYSTACKSIZE give the old and new number of
353 : elements in the stack, and YYPTR gives the new location of the
354 : stack. Advance YYPTR to a properly aligned location for the next
355 : stack. */
356 : # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
357 : do \
358 : { \
359 : YYSIZE_T yynewbytes; \
360 : YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
361 : Stack = &yyptr->Stack_alloc; \
362 : yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
363 : yyptr += yynewbytes / sizeof (*yyptr); \
364 : } \
365 : while (0)
366 :
367 : #endif
368 :
369 : #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
370 : /* Copy COUNT objects from SRC to DST. The source and destination do
371 : not overlap. */
372 : # ifndef YYCOPY
373 : # if defined __GNUC__ && 1 < __GNUC__
374 : # define YYCOPY(Dst, Src, Count) \
375 : __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
376 : # else
377 : # define YYCOPY(Dst, Src, Count) \
378 : do \
379 : { \
380 : YYSIZE_T yyi; \
381 : for (yyi = 0; yyi < (Count); yyi++) \
382 : (Dst)[yyi] = (Src)[yyi]; \
383 : } \
384 : while (0)
385 : # endif
386 : # endif
387 : #endif /* !YYCOPY_NEEDED */
388 :
389 : /* YYFINAL -- State number of the termination state. */
390 : #define YYFINAL 21
391 : /* YYLAST -- Last index in YYTABLE. */
392 : #define YYLAST 50
393 :
394 : /* YYNTOKENS -- Number of terminals. */
395 : #define YYNTOKENS 21
396 : /* YYNNTS -- Number of nonterminals. */
397 : #define YYNNTS 11
398 : /* YYNRULES -- Number of rules. */
399 : #define YYNRULES 26
400 : /* YYNSTATES -- Number of states. */
401 : #define YYNSTATES 50
402 :
403 : /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
404 : by yylex, with out-of-bounds checking. */
405 : #define YYUNDEFTOK 2
406 : #define YYMAXUTOK 266
407 :
408 : #define YYTRANSLATE(YYX) \
409 : ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
410 :
411 : /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
412 : as returned by yylex, without out-of-bounds checking. */
413 : static const yytype_uint8 yytranslate[] =
414 : {
415 : 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
416 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
417 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
418 : 2, 2, 2, 12, 2, 2, 2, 17, 2, 2,
419 : 13, 14, 2, 2, 15, 2, 20, 2, 2, 2,
420 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
421 : 2, 16, 2, 2, 2, 2, 2, 2, 2, 2,
422 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
423 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
424 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
425 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
426 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
427 : 2, 2, 2, 18, 2, 19, 2, 2, 2, 2,
428 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
429 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
430 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
431 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
432 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
433 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
434 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
435 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
436 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
437 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
438 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
439 : 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
440 : 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
441 : 5, 6, 7, 8, 9, 10, 11
442 : };
443 :
444 : #if YYDEBUG
445 : /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
446 : static const yytype_uint8 yyrline[] =
447 : {
448 : 0, 73, 73, 75, 76, 77, 78, 79, 80, 81,
449 : 84, 85, 88, 89, 90, 91, 92, 95, 96, 97,
450 : 98, 101, 102, 104, 107, 110, 112
451 : };
452 : #endif
453 :
454 : #if YYDEBUG || YYERROR_VERBOSE || 0
455 : /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
456 : First, the terminals, then, starting at YYNTOKENS, nonterminals. */
457 : static const char *const yytname[] =
458 : {
459 : "$end", "error", "$undefined", "kw_TRUE", "kw_FALSE", "kw_AND", "kw_OR",
460 : "kw_IN", "kw_TAILMATCH", "NUMBER", "STRING", "IDENTIFIER", "'!'", "'('",
461 : "')'", "','", "'='", "'%'", "'{'", "'}'", "'.'", "$accept", "start",
462 : "expr", "words", "comp", "word", "number", "string", "function",
463 : "variable", "variables", YY_NULLPTR
464 : };
465 : #endif
466 :
467 : # ifdef YYPRINT
468 : /* YYTOKNUM[NUM] -- (External) token number corresponding to the
469 : (internal) symbol number NUM (which must be that of a token). */
470 : static const yytype_uint16 yytoknum[] =
471 : {
472 : 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
473 : 265, 266, 33, 40, 41, 44, 61, 37, 123, 125,
474 : 46
475 : };
476 : # endif
477 :
478 : #define YYPACT_NINF -31
479 :
480 : #define yypact_value_is_default(Yystate) \
481 : (!!((Yystate) == (-31)))
482 :
483 : #define YYTABLE_NINF -1
484 :
485 : #define yytable_value_is_error(Yytable_value) \
486 : 0
487 :
488 : /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
489 : STATE-NUM. */
490 : static const yytype_int8 yypact[] =
491 : {
492 : 22, -31, -31, -31, -31, -1, 22, 22, -11, 27,
493 : 11, -31, -6, -31, -31, -31, -31, 19, 11, 9,
494 : 26, -31, 22, 22, -4, 19, 24, 25, 28, 23,
495 : -31, 29, 31, 11, 11, 19, -31, -31, 19, 19,
496 : -31, 19, 26, -31, 30, -31, -31, -31, -31, -31
497 : };
498 :
499 : /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
500 : Performed when YYTABLE does not specify something else to do. Zero
501 : means the default is an error. */
502 : static const yytype_uint8 yydefact[] =
503 : {
504 : 0, 3, 4, 21, 22, 0, 0, 0, 0, 0,
505 : 2, 9, 0, 17, 18, 19, 20, 0, 5, 0,
506 : 0, 1, 0, 0, 0, 0, 0, 0, 0, 10,
507 : 8, 26, 0, 6, 7, 0, 16, 14, 0, 0,
508 : 23, 0, 0, 24, 0, 13, 12, 11, 25, 15
509 : };
510 :
511 : /* YYPGOTO[NTERM-NUM]. */
512 : static const yytype_int8 yypgoto[] =
513 : {
514 : -31, -31, -3, -30, -31, -17, -31, -31, -31, 21,
515 : 1
516 : };
517 :
518 : /* YYDEFGOTO[NTERM-NUM]. */
519 : static const yytype_int8 yydefgoto[] =
520 : {
521 : -1, 9, 10, 28, 11, 12, 13, 14, 15, 16,
522 : 32
523 : };
524 :
525 : /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
526 : positive, shift that token. If negative, reduce the rule whose
527 : number is the opposite. If YYTABLE_NINF, syntax error. */
528 : static const yytype_uint8 yytable[] =
529 : {
530 : 29, 24, 25, 18, 19, 44, 26, 20, 37, 35,
531 : 27, 47, 17, 8, 22, 23, 22, 23, 29, 33,
532 : 34, 45, 46, 30, 29, 1, 2, 21, 3, 4,
533 : 5, 3, 4, 5, 6, 7, 8, 31, 41, 8,
534 : 38, 39, 40, 48, 49, 36, 0, 0, 0, 42,
535 : 43
536 : };
537 :
538 : static const yytype_int8 yycheck[] =
539 : {
540 : 17, 7, 8, 6, 7, 35, 12, 18, 25, 13,
541 : 16, 41, 13, 17, 5, 6, 5, 6, 35, 22,
542 : 23, 38, 39, 14, 41, 3, 4, 0, 9, 10,
543 : 11, 9, 10, 11, 12, 13, 17, 11, 15, 17,
544 : 16, 16, 14, 42, 14, 24, -1, -1, -1, 20,
545 : 19
546 : };
547 :
548 : /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
549 : symbol of state STATE-NUM. */
550 : static const yytype_uint8 yystos[] =
551 : {
552 : 0, 3, 4, 9, 10, 11, 12, 13, 17, 22,
553 : 23, 25, 26, 27, 28, 29, 30, 13, 23, 23,
554 : 18, 0, 5, 6, 7, 8, 12, 16, 24, 26,
555 : 14, 11, 31, 23, 23, 13, 30, 26, 16, 16,
556 : 14, 15, 20, 19, 24, 26, 26, 24, 31, 14
557 : };
558 :
559 : /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
560 : static const yytype_uint8 yyr1[] =
561 : {
562 : 0, 21, 22, 23, 23, 23, 23, 23, 23, 23,
563 : 24, 24, 25, 25, 25, 25, 25, 26, 26, 26,
564 : 26, 27, 28, 29, 30, 31, 31
565 : };
566 :
567 : /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
568 : static const yytype_uint8 yyr2[] =
569 : {
570 : 0, 2, 1, 1, 1, 2, 3, 3, 3, 1,
571 : 1, 3, 4, 4, 3, 5, 3, 1, 1, 1,
572 : 1, 1, 1, 4, 4, 3, 1
573 : };
574 :
575 :
576 : #define yyerrok (yyerrstatus = 0)
577 : #define yyclearin (yychar = YYEMPTY)
578 : #define YYEMPTY (-2)
579 : #define YYEOF 0
580 :
581 : #define YYACCEPT goto yyacceptlab
582 : #define YYABORT goto yyabortlab
583 : #define YYERROR goto yyerrorlab
584 :
585 :
586 : #define YYRECOVERING() (!!yyerrstatus)
587 :
588 : #define YYBACKUP(Token, Value) \
589 : do \
590 : if (yychar == YYEMPTY) \
591 : { \
592 : yychar = (Token); \
593 : yylval = (Value); \
594 : YYPOPSTACK (yylen); \
595 : yystate = *yyssp; \
596 : goto yybackup; \
597 : } \
598 : else \
599 : { \
600 : yyerror (YY_("syntax error: cannot back up")); \
601 : YYERROR; \
602 : } \
603 : while (0)
604 :
605 : /* Error token number */
606 : #define YYTERROR 1
607 : #define YYERRCODE 256
608 :
609 :
610 :
611 : /* Enable debugging if requested. */
612 : #if YYDEBUG
613 :
614 : # ifndef YYFPRINTF
615 : # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
616 : # define YYFPRINTF fprintf
617 : # endif
618 :
619 : # define YYDPRINTF(Args) \
620 : do { \
621 : if (yydebug) \
622 : YYFPRINTF Args; \
623 : } while (0)
624 :
625 : /* This macro is provided for backward compatibility. */
626 : #ifndef YY_LOCATION_PRINT
627 : # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
628 : #endif
629 :
630 :
631 : # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
632 : do { \
633 : if (yydebug) \
634 : { \
635 : YYFPRINTF (stderr, "%s ", Title); \
636 : yy_symbol_print (stderr, \
637 : Type, Value); \
638 : YYFPRINTF (stderr, "\n"); \
639 : } \
640 : } while (0)
641 :
642 :
643 : /*----------------------------------------.
644 : | Print this symbol's value on YYOUTPUT. |
645 : `----------------------------------------*/
646 :
647 : static void
648 : yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
649 : {
650 : FILE *yyo = yyoutput;
651 : YYUSE (yyo);
652 : if (!yyvaluep)
653 : return;
654 : # ifdef YYPRINT
655 : if (yytype < YYNTOKENS)
656 : YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
657 : # endif
658 : YYUSE (yytype);
659 : }
660 :
661 :
662 : /*--------------------------------.
663 : | Print this symbol on YYOUTPUT. |
664 : `--------------------------------*/
665 :
666 : static void
667 : yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
668 : {
669 : YYFPRINTF (yyoutput, "%s %s (",
670 : yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
671 :
672 : yy_symbol_value_print (yyoutput, yytype, yyvaluep);
673 : YYFPRINTF (yyoutput, ")");
674 : }
675 :
676 : /*------------------------------------------------------------------.
677 : | yy_stack_print -- Print the state stack from its BOTTOM up to its |
678 : | TOP (included). |
679 : `------------------------------------------------------------------*/
680 :
681 : static void
682 : yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
683 : {
684 : YYFPRINTF (stderr, "Stack now");
685 : for (; yybottom <= yytop; yybottom++)
686 : {
687 : int yybot = *yybottom;
688 : YYFPRINTF (stderr, " %d", yybot);
689 : }
690 : YYFPRINTF (stderr, "\n");
691 : }
692 :
693 : # define YY_STACK_PRINT(Bottom, Top) \
694 : do { \
695 : if (yydebug) \
696 : yy_stack_print ((Bottom), (Top)); \
697 : } while (0)
698 :
699 :
700 : /*------------------------------------------------.
701 : | Report that the YYRULE is going to be reduced. |
702 : `------------------------------------------------*/
703 :
704 : static void
705 : yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
706 : {
707 : unsigned long int yylno = yyrline[yyrule];
708 : int yynrhs = yyr2[yyrule];
709 : int yyi;
710 : YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
711 : yyrule - 1, yylno);
712 : /* The symbols being reduced. */
713 : for (yyi = 0; yyi < yynrhs; yyi++)
714 : {
715 : YYFPRINTF (stderr, " $%d = ", yyi + 1);
716 : yy_symbol_print (stderr,
717 : yystos[yyssp[yyi + 1 - yynrhs]],
718 : &(yyvsp[(yyi + 1) - (yynrhs)])
719 : );
720 : YYFPRINTF (stderr, "\n");
721 : }
722 : }
723 :
724 : # define YY_REDUCE_PRINT(Rule) \
725 : do { \
726 : if (yydebug) \
727 : yy_reduce_print (yyssp, yyvsp, Rule); \
728 : } while (0)
729 :
730 : /* Nonzero means print parse trace. It is left uninitialized so that
731 : multiple parsers can coexist. */
732 : int yydebug;
733 : #else /* !YYDEBUG */
734 : # define YYDPRINTF(Args)
735 : # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
736 : # define YY_STACK_PRINT(Bottom, Top)
737 : # define YY_REDUCE_PRINT(Rule)
738 : #endif /* !YYDEBUG */
739 :
740 :
741 : /* YYINITDEPTH -- initial size of the parser's stacks. */
742 : #ifndef YYINITDEPTH
743 : # define YYINITDEPTH 200
744 : #endif
745 :
746 : /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
747 : if the built-in stack extension method is used).
748 :
749 : Do not make this value too large; the results are undefined if
750 : YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
751 : evaluated with infinite-precision integer arithmetic. */
752 :
753 : #ifndef YYMAXDEPTH
754 : # define YYMAXDEPTH 10000
755 : #endif
756 :
757 :
758 : #if YYERROR_VERBOSE
759 :
760 : # ifndef yystrlen
761 : # if defined __GLIBC__ && defined _STRING_H
762 : # define yystrlen strlen
763 : # else
764 : /* Return the length of YYSTR. */
765 : static YYSIZE_T
766 : yystrlen (const char *yystr)
767 : {
768 : YYSIZE_T yylen;
769 : for (yylen = 0; yystr[yylen]; yylen++)
770 : continue;
771 : return yylen;
772 : }
773 : # endif
774 : # endif
775 :
776 : # ifndef yystpcpy
777 : # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
778 : # define yystpcpy stpcpy
779 : # else
780 : /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
781 : YYDEST. */
782 : static char *
783 : yystpcpy (char *yydest, const char *yysrc)
784 : {
785 : char *yyd = yydest;
786 : const char *yys = yysrc;
787 :
788 : while ((*yyd++ = *yys++) != '\0')
789 : continue;
790 :
791 : return yyd - 1;
792 : }
793 : # endif
794 : # endif
795 :
796 : # ifndef yytnamerr
797 : /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
798 : quotes and backslashes, so that it's suitable for yyerror. The
799 : heuristic is that double-quoting is unnecessary unless the string
800 : contains an apostrophe, a comma, or backslash (other than
801 : backslash-backslash). YYSTR is taken from yytname. If YYRES is
802 : null, do not copy; instead, return the length of what the result
803 : would have been. */
804 : static YYSIZE_T
805 : yytnamerr (char *yyres, const char *yystr)
806 : {
807 : if (*yystr == '"')
808 : {
809 : YYSIZE_T yyn = 0;
810 : char const *yyp = yystr;
811 :
812 : for (;;)
813 : switch (*++yyp)
814 : {
815 : case '\'':
816 : case ',':
817 : goto do_not_strip_quotes;
818 :
819 : case '\\':
820 : if (*++yyp != '\\')
821 : goto do_not_strip_quotes;
822 : /* Fall through. */
823 : default:
824 : if (yyres)
825 : yyres[yyn] = *yyp;
826 : yyn++;
827 : break;
828 :
829 : case '"':
830 : if (yyres)
831 : yyres[yyn] = '\0';
832 : return yyn;
833 : }
834 : do_not_strip_quotes: ;
835 : }
836 :
837 : if (! yyres)
838 : return yystrlen (yystr);
839 :
840 : return yystpcpy (yyres, yystr) - yyres;
841 : }
842 : # endif
843 :
844 : /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
845 : about the unexpected token YYTOKEN for the state stack whose top is
846 : YYSSP.
847 :
848 : Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
849 : not large enough to hold the message. In that case, also set
850 : *YYMSG_ALLOC to the required number of bytes. Return 2 if the
851 : required number of bytes is too large to store. */
852 : static int
853 : yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
854 : yytype_int16 *yyssp, int yytoken)
855 : {
856 : YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
857 : YYSIZE_T yysize = yysize0;
858 : enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
859 : /* Internationalized format string. */
860 : const char *yyformat = YY_NULLPTR;
861 : /* Arguments of yyformat. */
862 : char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
863 : /* Number of reported tokens (one for the "unexpected", one per
864 : "expected"). */
865 : int yycount = 0;
866 :
867 : /* There are many possibilities here to consider:
868 : - If this state is a consistent state with a default action, then
869 : the only way this function was invoked is if the default action
870 : is an error action. In that case, don't check for expected
871 : tokens because there are none.
872 : - The only way there can be no lookahead present (in yychar) is if
873 : this state is a consistent state with a default action. Thus,
874 : detecting the absence of a lookahead is sufficient to determine
875 : that there is no unexpected or expected token to report. In that
876 : case, just report a simple "syntax error".
877 : - Don't assume there isn't a lookahead just because this state is a
878 : consistent state with a default action. There might have been a
879 : previous inconsistent state, consistent state with a non-default
880 : action, or user semantic action that manipulated yychar.
881 : - Of course, the expected token list depends on states to have
882 : correct lookahead information, and it depends on the parser not
883 : to perform extra reductions after fetching a lookahead from the
884 : scanner and before detecting a syntax error. Thus, state merging
885 : (from LALR or IELR) and default reductions corrupt the expected
886 : token list. However, the list is correct for canonical LR with
887 : one exception: it will still contain any token that will not be
888 : accepted due to an error action in a later state.
889 : */
890 : if (yytoken != YYEMPTY)
891 : {
892 : int yyn = yypact[*yyssp];
893 : yyarg[yycount++] = yytname[yytoken];
894 : if (!yypact_value_is_default (yyn))
895 : {
896 : /* Start YYX at -YYN if negative to avoid negative indexes in
897 : YYCHECK. In other words, skip the first -YYN actions for
898 : this state because they are default actions. */
899 : int yyxbegin = yyn < 0 ? -yyn : 0;
900 : /* Stay within bounds of both yycheck and yytname. */
901 : int yychecklim = YYLAST - yyn + 1;
902 : int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
903 : int yyx;
904 :
905 : for (yyx = yyxbegin; yyx < yyxend; ++yyx)
906 : if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
907 : && !yytable_value_is_error (yytable[yyx + yyn]))
908 : {
909 : if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
910 : {
911 : yycount = 1;
912 : yysize = yysize0;
913 : break;
914 : }
915 : yyarg[yycount++] = yytname[yyx];
916 : {
917 : YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
918 : if (! (yysize <= yysize1
919 : && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
920 : return 2;
921 : yysize = yysize1;
922 : }
923 : }
924 : }
925 : }
926 :
927 : switch (yycount)
928 : {
929 : # define YYCASE_(N, S) \
930 : case N: \
931 : yyformat = S; \
932 : break
933 : YYCASE_(0, YY_("syntax error"));
934 : YYCASE_(1, YY_("syntax error, unexpected %s"));
935 : YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
936 : YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
937 : YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
938 : YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
939 : # undef YYCASE_
940 : }
941 :
942 : {
943 : YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
944 : if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
945 : return 2;
946 : yysize = yysize1;
947 : }
948 :
949 : if (*yymsg_alloc < yysize)
950 : {
951 : *yymsg_alloc = 2 * yysize;
952 : if (! (yysize <= *yymsg_alloc
953 : && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
954 : *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
955 : return 1;
956 : }
957 :
958 : /* Avoid sprintf, as that infringes on the user's name space.
959 : Don't have undefined behavior even if the translation
960 : produced a string with the wrong number of "%s"s. */
961 : {
962 : char *yyp = *yymsg;
963 : int yyi = 0;
964 : while ((*yyp = *yyformat) != '\0')
965 : if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
966 : {
967 : yyp += yytnamerr (yyp, yyarg[yyi++]);
968 : yyformat += 2;
969 : }
970 : else
971 : {
972 : yyp++;
973 : yyformat++;
974 : }
975 : }
976 : return 0;
977 : }
978 : #endif /* YYERROR_VERBOSE */
979 :
980 : /*-----------------------------------------------.
981 : | Release the memory associated to this symbol. |
982 : `-----------------------------------------------*/
983 :
984 : static void
985 0 : yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
986 : {
987 : YYUSE (yyvaluep);
988 0 : if (!yymsg)
989 0 : yymsg = "Deleting";
990 : YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
991 :
992 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
993 : YYUSE (yytype);
994 : YY_IGNORE_MAYBE_UNINITIALIZED_END
995 0 : }
996 :
997 :
998 :
999 :
1000 : /* The lookahead symbol. */
1001 : int yychar;
1002 :
1003 : /* The semantic value of the lookahead symbol. */
1004 : YYSTYPE yylval;
1005 : /* Number of syntax errors so far. */
1006 : int yynerrs;
1007 :
1008 :
1009 : /*----------.
1010 : | yyparse. |
1011 : `----------*/
1012 :
1013 : int
1014 0 : yyparse (void)
1015 : {
1016 : int yystate;
1017 : /* Number of tokens to shift before error messages enabled. */
1018 : int yyerrstatus;
1019 :
1020 : /* The stacks and their tools:
1021 : 'yyss': related to states.
1022 : 'yyvs': related to semantic values.
1023 :
1024 : Refer to the stacks through separate pointers, to allow yyoverflow
1025 : to reallocate them elsewhere. */
1026 :
1027 : /* The state stack. */
1028 : yytype_int16 yyssa[YYINITDEPTH];
1029 : yytype_int16 *yyss;
1030 : yytype_int16 *yyssp;
1031 :
1032 : /* The semantic value stack. */
1033 : YYSTYPE yyvsa[YYINITDEPTH];
1034 : YYSTYPE *yyvs;
1035 : YYSTYPE *yyvsp;
1036 :
1037 : YYSIZE_T yystacksize;
1038 :
1039 : int yyn;
1040 : int yyresult;
1041 : /* Lookahead token as an internal (translated) token number. */
1042 0 : int yytoken = 0;
1043 : /* The variables used to return semantic value and location from the
1044 : action routines. */
1045 : YYSTYPE yyval;
1046 :
1047 : #if YYERROR_VERBOSE
1048 : /* Buffer for error messages, and its allocated size. */
1049 : char yymsgbuf[128];
1050 : char *yymsg = yymsgbuf;
1051 : YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1052 : #endif
1053 :
1054 : #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1055 :
1056 : /* The number of symbols on the RHS of the reduced rule.
1057 : Keep to zero when no symbol should be popped. */
1058 0 : int yylen = 0;
1059 :
1060 0 : yyssp = yyss = yyssa;
1061 0 : yyvsp = yyvs = yyvsa;
1062 0 : yystacksize = YYINITDEPTH;
1063 :
1064 : YYDPRINTF ((stderr, "Starting parse\n"));
1065 :
1066 0 : yystate = 0;
1067 0 : yyerrstatus = 0;
1068 0 : yynerrs = 0;
1069 0 : yychar = YYEMPTY; /* Cause a token to be read. */
1070 0 : goto yysetstate;
1071 :
1072 : /*------------------------------------------------------------.
1073 : | yynewstate -- Push a new state, which is found in yystate. |
1074 : `------------------------------------------------------------*/
1075 0 : yynewstate:
1076 : /* In all cases, when you get here, the value and location stacks
1077 : have just been pushed. So pushing a state here evens the stacks. */
1078 0 : yyssp++;
1079 :
1080 0 : yysetstate:
1081 0 : *yyssp = yystate;
1082 :
1083 0 : if (yyss + yystacksize - 1 <= yyssp)
1084 : {
1085 : /* Get the current used size of the three stacks, in elements. */
1086 0 : YYSIZE_T yysize = yyssp - yyss + 1;
1087 :
1088 : #ifdef yyoverflow
1089 : {
1090 : /* Give user a chance to reallocate the stack. Use copies of
1091 : these so that the &'s don't force the real ones into
1092 : memory. */
1093 : YYSTYPE *yyvs1 = yyvs;
1094 : yytype_int16 *yyss1 = yyss;
1095 :
1096 : /* Each stack pointer address is followed by the size of the
1097 : data in use in that stack, in bytes. This used to be a
1098 : conditional around just the two extra args, but that might
1099 : be undefined if yyoverflow is a macro. */
1100 : yyoverflow (YY_("memory exhausted"),
1101 : &yyss1, yysize * sizeof (*yyssp),
1102 : &yyvs1, yysize * sizeof (*yyvsp),
1103 : &yystacksize);
1104 :
1105 : yyss = yyss1;
1106 : yyvs = yyvs1;
1107 : }
1108 : #else /* no yyoverflow */
1109 : # ifndef YYSTACK_RELOCATE
1110 : goto yyexhaustedlab;
1111 : # else
1112 : /* Extend the stack our own way. */
1113 0 : if (YYMAXDEPTH <= yystacksize)
1114 0 : goto yyexhaustedlab;
1115 0 : yystacksize *= 2;
1116 0 : if (YYMAXDEPTH < yystacksize)
1117 0 : yystacksize = YYMAXDEPTH;
1118 :
1119 : {
1120 0 : yytype_int16 *yyss1 = yyss;
1121 0 : union yyalloc *yyptr =
1122 0 : (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1123 0 : if (! yyptr)
1124 0 : goto yyexhaustedlab;
1125 0 : YYSTACK_RELOCATE (yyss_alloc, yyss);
1126 0 : YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1127 : # undef YYSTACK_RELOCATE
1128 0 : if (yyss1 != yyssa)
1129 0 : YYSTACK_FREE (yyss1);
1130 : }
1131 : # endif
1132 : #endif /* no yyoverflow */
1133 :
1134 0 : yyssp = yyss + yysize - 1;
1135 0 : yyvsp = yyvs + yysize - 1;
1136 :
1137 : YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1138 : (unsigned long int) yystacksize));
1139 :
1140 0 : if (yyss + yystacksize - 1 <= yyssp)
1141 0 : YYABORT;
1142 : }
1143 :
1144 : YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1145 :
1146 0 : if (yystate == YYFINAL)
1147 0 : YYACCEPT;
1148 :
1149 0 : goto yybackup;
1150 :
1151 : /*-----------.
1152 : | yybackup. |
1153 : `-----------*/
1154 0 : yybackup:
1155 :
1156 : /* Do appropriate processing given the current state. Read a
1157 : lookahead token if we need one and don't already have one. */
1158 :
1159 : /* First try to decide what to do without reference to lookahead token. */
1160 0 : yyn = yypact[yystate];
1161 0 : if (yypact_value_is_default (yyn))
1162 0 : goto yydefault;
1163 :
1164 : /* Not known => get a lookahead token if don't already have one. */
1165 :
1166 : /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1167 0 : if (yychar == YYEMPTY)
1168 : {
1169 : YYDPRINTF ((stderr, "Reading a token: "));
1170 0 : yychar = yylex ();
1171 : }
1172 :
1173 0 : if (yychar <= YYEOF)
1174 : {
1175 0 : yychar = yytoken = YYEOF;
1176 : YYDPRINTF ((stderr, "Now at end of input.\n"));
1177 : }
1178 : else
1179 : {
1180 0 : yytoken = YYTRANSLATE (yychar);
1181 : YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1182 : }
1183 :
1184 : /* If the proper action on seeing token YYTOKEN is to reduce or to
1185 : detect an error, take that action. */
1186 0 : yyn += yytoken;
1187 0 : if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1188 : goto yydefault;
1189 0 : yyn = yytable[yyn];
1190 0 : if (yyn <= 0)
1191 : {
1192 : if (yytable_value_is_error (yyn))
1193 : goto yyerrlab;
1194 0 : yyn = -yyn;
1195 0 : goto yyreduce;
1196 : }
1197 :
1198 : /* Count tokens shifted since error; after three, turn off error
1199 : status. */
1200 0 : if (yyerrstatus)
1201 0 : yyerrstatus--;
1202 :
1203 : /* Shift the lookahead token. */
1204 : YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1205 :
1206 : /* Discard the shifted token. */
1207 0 : yychar = YYEMPTY;
1208 :
1209 0 : yystate = yyn;
1210 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1211 0 : *++yyvsp = yylval;
1212 : YY_IGNORE_MAYBE_UNINITIALIZED_END
1213 :
1214 0 : goto yynewstate;
1215 :
1216 :
1217 : /*-----------------------------------------------------------.
1218 : | yydefault -- do the default action for the current state. |
1219 : `-----------------------------------------------------------*/
1220 0 : yydefault:
1221 0 : yyn = yydefact[yystate];
1222 0 : if (yyn == 0)
1223 0 : goto yyerrlab;
1224 0 : goto yyreduce;
1225 :
1226 :
1227 : /*-----------------------------.
1228 : | yyreduce -- Do a reduction. |
1229 : `-----------------------------*/
1230 0 : yyreduce:
1231 : /* yyn is the number of a rule to reduce with. */
1232 0 : yylen = yyr2[yyn];
1233 :
1234 : /* If YYLEN is nonzero, implement the default value of the action:
1235 : '$$ = $1'.
1236 :
1237 : Otherwise, the following line sets YYVAL to garbage.
1238 : This behavior is undocumented and Bison
1239 : users should not rely upon it. Assigning to YYVAL
1240 : unconditionally makes the parser a bit smaller, and it avoids a
1241 : GCC warning that YYVAL may be used uninitialized. */
1242 0 : yyval = yyvsp[1-yylen];
1243 :
1244 :
1245 : YY_REDUCE_PRINT (yyn);
1246 0 : switch (yyn)
1247 : {
1248 0 : case 2:
1249 :
1250 0 : { _hx509_expr_input.expr = (yyvsp[0].expr); }
1251 :
1252 0 : break;
1253 :
1254 0 : case 3:
1255 :
1256 0 : { (yyval.expr) = _hx509_make_expr(op_TRUE, NULL, NULL); }
1257 :
1258 0 : break;
1259 :
1260 0 : case 4:
1261 :
1262 0 : { (yyval.expr) = _hx509_make_expr(op_FALSE, NULL, NULL); }
1263 :
1264 0 : break;
1265 :
1266 0 : case 5:
1267 :
1268 0 : { (yyval.expr) = _hx509_make_expr(op_NOT, (yyvsp[0].expr), NULL); }
1269 :
1270 0 : break;
1271 :
1272 0 : case 6:
1273 :
1274 0 : { (yyval.expr) = _hx509_make_expr(op_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
1275 :
1276 0 : break;
1277 :
1278 0 : case 7:
1279 :
1280 0 : { (yyval.expr) = _hx509_make_expr(op_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
1281 :
1282 0 : break;
1283 :
1284 0 : case 8:
1285 :
1286 0 : { (yyval.expr) = (yyvsp[-1].expr); }
1287 :
1288 0 : break;
1289 :
1290 0 : case 9:
1291 :
1292 0 : { (yyval.expr) = _hx509_make_expr(op_COMP, (yyvsp[0].expr), NULL); }
1293 :
1294 0 : break;
1295 :
1296 0 : case 10:
1297 :
1298 0 : { (yyval.expr) = _hx509_make_expr(expr_WORDS, (yyvsp[0].expr), NULL); }
1299 :
1300 0 : break;
1301 :
1302 0 : case 11:
1303 :
1304 0 : { (yyval.expr) = _hx509_make_expr(expr_WORDS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
1305 :
1306 0 : break;
1307 :
1308 0 : case 12:
1309 :
1310 0 : { (yyval.expr) = _hx509_make_expr(comp_EQ, (yyvsp[-3].expr), (yyvsp[0].expr)); }
1311 :
1312 0 : break;
1313 :
1314 0 : case 13:
1315 :
1316 0 : { (yyval.expr) = _hx509_make_expr(comp_NE, (yyvsp[-3].expr), (yyvsp[0].expr)); }
1317 :
1318 0 : break;
1319 :
1320 0 : case 14:
1321 :
1322 0 : { (yyval.expr) = _hx509_make_expr(comp_TAILEQ, (yyvsp[-2].expr), (yyvsp[0].expr)); }
1323 :
1324 0 : break;
1325 :
1326 0 : case 15:
1327 :
1328 0 : { (yyval.expr) = _hx509_make_expr(comp_IN, (yyvsp[-4].expr), (yyvsp[-1].expr)); }
1329 :
1330 0 : break;
1331 :
1332 0 : case 16:
1333 :
1334 0 : { (yyval.expr) = _hx509_make_expr(comp_IN, (yyvsp[-2].expr), (yyvsp[0].expr)); }
1335 :
1336 0 : break;
1337 :
1338 0 : case 17:
1339 :
1340 0 : { (yyval.expr) = (yyvsp[0].expr); }
1341 :
1342 0 : break;
1343 :
1344 0 : case 18:
1345 :
1346 0 : { (yyval.expr) = (yyvsp[0].expr); }
1347 :
1348 0 : break;
1349 :
1350 0 : case 19:
1351 :
1352 0 : { (yyval.expr) = (yyvsp[0].expr); }
1353 :
1354 0 : break;
1355 :
1356 0 : case 20:
1357 :
1358 0 : { (yyval.expr) = (yyvsp[0].expr); }
1359 :
1360 0 : break;
1361 :
1362 0 : case 21:
1363 :
1364 0 : { (yyval.expr) = _hx509_make_expr(expr_NUMBER, (yyvsp[0].string), NULL); }
1365 :
1366 0 : break;
1367 :
1368 0 : case 22:
1369 :
1370 0 : { (yyval.expr) = _hx509_make_expr(expr_STRING, (yyvsp[0].string), NULL); }
1371 :
1372 0 : break;
1373 :
1374 0 : case 23:
1375 :
1376 : {
1377 0 : (yyval.expr) = _hx509_make_expr(expr_FUNCTION, (yyvsp[-3].string), (yyvsp[-1].expr)); }
1378 :
1379 0 : break;
1380 :
1381 0 : case 24:
1382 :
1383 0 : { (yyval.expr) = (yyvsp[-1].expr); }
1384 :
1385 0 : break;
1386 :
1387 0 : case 25:
1388 :
1389 : {
1390 0 : (yyval.expr) = _hx509_make_expr(expr_VAR, (yyvsp[-2].string), (yyvsp[0].expr)); }
1391 :
1392 0 : break;
1393 :
1394 0 : case 26:
1395 :
1396 : {
1397 0 : (yyval.expr) = _hx509_make_expr(expr_VAR, (yyvsp[0].string), NULL); }
1398 :
1399 0 : break;
1400 :
1401 :
1402 :
1403 0 : default: break;
1404 : }
1405 : /* User semantic actions sometimes alter yychar, and that requires
1406 : that yytoken be updated with the new translation. We take the
1407 : approach of translating immediately before every use of yytoken.
1408 : One alternative is translating here after every semantic action,
1409 : but that translation would be missed if the semantic action invokes
1410 : YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
1411 : if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
1412 : incorrect destructor might then be invoked immediately. In the
1413 : case of YYERROR or YYBACKUP, subsequent parser actions might lead
1414 : to an incorrect destructor call or verbose syntax error message
1415 : before the lookahead is translated. */
1416 : YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
1417 :
1418 0 : YYPOPSTACK (yylen);
1419 0 : yylen = 0;
1420 : YY_STACK_PRINT (yyss, yyssp);
1421 :
1422 0 : *++yyvsp = yyval;
1423 :
1424 : /* Now 'shift' the result of the reduction. Determine what state
1425 : that goes to, based on the state we popped back to and the rule
1426 : number reduced by. */
1427 :
1428 0 : yyn = yyr1[yyn];
1429 :
1430 0 : yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1431 0 : if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1432 0 : yystate = yytable[yystate];
1433 : else
1434 0 : yystate = yydefgoto[yyn - YYNTOKENS];
1435 :
1436 0 : goto yynewstate;
1437 :
1438 :
1439 : /*--------------------------------------.
1440 : | yyerrlab -- here on detecting error. |
1441 : `--------------------------------------*/
1442 0 : yyerrlab:
1443 : /* Make sure we have latest lookahead translation. See comments at
1444 : user semantic actions for why this is necessary. */
1445 0 : yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
1446 :
1447 : /* If not already recovering from an error, report this error. */
1448 0 : if (!yyerrstatus)
1449 : {
1450 0 : ++yynerrs;
1451 : #if ! YYERROR_VERBOSE
1452 0 : yyerror (YY_("syntax error"));
1453 : #else
1454 : # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
1455 : yyssp, yytoken)
1456 : {
1457 : char const *yymsgp = YY_("syntax error");
1458 : int yysyntax_error_status;
1459 : yysyntax_error_status = YYSYNTAX_ERROR;
1460 : if (yysyntax_error_status == 0)
1461 : yymsgp = yymsg;
1462 : else if (yysyntax_error_status == 1)
1463 : {
1464 : if (yymsg != yymsgbuf)
1465 : YYSTACK_FREE (yymsg);
1466 : yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
1467 : if (!yymsg)
1468 : {
1469 : yymsg = yymsgbuf;
1470 : yymsg_alloc = sizeof yymsgbuf;
1471 : yysyntax_error_status = 2;
1472 : }
1473 : else
1474 : {
1475 : yysyntax_error_status = YYSYNTAX_ERROR;
1476 : yymsgp = yymsg;
1477 : }
1478 : }
1479 : yyerror (yymsgp);
1480 : if (yysyntax_error_status == 2)
1481 : goto yyexhaustedlab;
1482 : }
1483 : # undef YYSYNTAX_ERROR
1484 : #endif
1485 : }
1486 :
1487 :
1488 :
1489 0 : if (yyerrstatus == 3)
1490 : {
1491 : /* If just tried and failed to reuse lookahead token after an
1492 : error, discard it. */
1493 :
1494 0 : if (yychar <= YYEOF)
1495 : {
1496 : /* Return failure if at end of input. */
1497 0 : if (yychar == YYEOF)
1498 0 : YYABORT;
1499 : }
1500 : else
1501 : {
1502 0 : yydestruct ("Error: discarding",
1503 : yytoken, &yylval);
1504 0 : yychar = YYEMPTY;
1505 : }
1506 : }
1507 :
1508 : /* Else will try to reuse lookahead token after shifting the error
1509 : token. */
1510 0 : goto yyerrlab1;
1511 :
1512 :
1513 : /*---------------------------------------------------.
1514 : | yyerrorlab -- error raised explicitly by YYERROR. |
1515 : `---------------------------------------------------*/
1516 : yyerrorlab:
1517 :
1518 : /* Pacify compilers like GCC when the user code never invokes
1519 : YYERROR and the label yyerrorlab therefore never appears in user
1520 : code. */
1521 : if (/*CONSTCOND*/ 0)
1522 : goto yyerrorlab;
1523 :
1524 : /* Do not reclaim the symbols of the rule whose action triggered
1525 : this YYERROR. */
1526 : YYPOPSTACK (yylen);
1527 : yylen = 0;
1528 : YY_STACK_PRINT (yyss, yyssp);
1529 : yystate = *yyssp;
1530 : goto yyerrlab1;
1531 :
1532 :
1533 : /*-------------------------------------------------------------.
1534 : | yyerrlab1 -- common code for both syntax error and YYERROR. |
1535 : `-------------------------------------------------------------*/
1536 0 : yyerrlab1:
1537 0 : yyerrstatus = 3; /* Each real token shifted decrements this. */
1538 :
1539 : for (;;)
1540 : {
1541 0 : yyn = yypact[yystate];
1542 0 : if (!yypact_value_is_default (yyn))
1543 : {
1544 0 : yyn += YYTERROR;
1545 0 : if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1546 : {
1547 0 : yyn = yytable[yyn];
1548 0 : if (0 < yyn)
1549 0 : break;
1550 : }
1551 : }
1552 :
1553 : /* Pop the current state because it cannot handle the error token. */
1554 0 : if (yyssp == yyss)
1555 0 : YYABORT;
1556 :
1557 :
1558 0 : yydestruct ("Error: popping",
1559 0 : yystos[yystate], yyvsp);
1560 0 : YYPOPSTACK (1);
1561 0 : yystate = *yyssp;
1562 : YY_STACK_PRINT (yyss, yyssp);
1563 : }
1564 :
1565 : YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1566 0 : *++yyvsp = yylval;
1567 : YY_IGNORE_MAYBE_UNINITIALIZED_END
1568 :
1569 :
1570 : /* Shift the error token. */
1571 : YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
1572 :
1573 0 : yystate = yyn;
1574 0 : goto yynewstate;
1575 :
1576 :
1577 : /*-------------------------------------.
1578 : | yyacceptlab -- YYACCEPT comes here. |
1579 : `-------------------------------------*/
1580 0 : yyacceptlab:
1581 0 : yyresult = 0;
1582 0 : goto yyreturn;
1583 :
1584 : /*-----------------------------------.
1585 : | yyabortlab -- YYABORT comes here. |
1586 : `-----------------------------------*/
1587 0 : yyabortlab:
1588 0 : yyresult = 1;
1589 0 : goto yyreturn;
1590 :
1591 : #if !defined yyoverflow || YYERROR_VERBOSE
1592 : /*-------------------------------------------------.
1593 : | yyexhaustedlab -- memory exhaustion comes here. |
1594 : `-------------------------------------------------*/
1595 0 : yyexhaustedlab:
1596 0 : yyerror (YY_("memory exhausted"));
1597 0 : yyresult = 2;
1598 : /* Fall through. */
1599 : #endif
1600 :
1601 0 : yyreturn:
1602 0 : if (yychar != YYEMPTY)
1603 : {
1604 : /* Make sure we have latest lookahead translation. See comments at
1605 : user semantic actions for why this is necessary. */
1606 0 : yytoken = YYTRANSLATE (yychar);
1607 0 : yydestruct ("Cleanup: discarding lookahead",
1608 : yytoken, &yylval);
1609 : }
1610 : /* Do not reclaim the symbols of the rule whose action triggered
1611 : this YYABORT or YYACCEPT. */
1612 0 : YYPOPSTACK (yylen);
1613 : YY_STACK_PRINT (yyss, yyssp);
1614 0 : while (yyssp != yyss)
1615 : {
1616 0 : yydestruct ("Cleanup: popping",
1617 0 : yystos[*yyssp], yyvsp);
1618 0 : YYPOPSTACK (1);
1619 : }
1620 : #ifndef yyoverflow
1621 0 : if (yyss != yyssa)
1622 0 : YYSTACK_FREE (yyss);
1623 : #endif
1624 : #if YYERROR_VERBOSE
1625 : if (yymsg != yymsgbuf)
1626 : YYSTACK_FREE (yymsg);
1627 : #endif
1628 0 : return yyresult;
1629 : }
|