xref: /dragonfly/lib/libevtr/ktrfmt.tab.c (revision 10cbe914)
1 
2 /* A Bison parser, made by GNU Bison 2.4.1.  */
3 
4 /* Skeleton implementation for Bison's Yacc-like parsers in C
5 
6       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7    Free Software Foundation, Inc.
8 
9    This program is free software: you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation, either version 3 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21 
22 /* As a special exception, you may create a larger work that contains
23    part or all of the Bison parser skeleton and distribute that work
24    under terms of your choice, so long as that work isn't itself a
25    parser generator using the skeleton or a modified version thereof
26    as a parser skeleton.  Alternatively, if you modify or redistribute
27    the parser skeleton itself, you may (at your option) remove this
28    special exception, which will cause the skeleton and the resulting
29    Bison output files to be licensed under the GNU General Public
30    License without this special exception.
31 
32    This special exception was added by the Free Software Foundation in
33    version 2.2 of Bison.  */
34 
35 /* C LALR(1) parser skeleton written by Richard Stallman, by
36    simplifying the original so-called "semantic" parser.  */
37 
38 /* All symbols defined below should begin with yy or YY, to avoid
39    infringing on user name space.  This should be done even for local
40    variables, as they might otherwise be expanded by user macros.
41    There are some unavoidable exceptions within include files to
42    define necessary library symbols; they are noted "INFRINGES ON
43    USER NAME SPACE" below.  */
44 
45 /* Identify Bison output.  */
46 #define YYBISON 1
47 
48 /* Bison version.  */
49 #define YYBISON_VERSION "2.4.1"
50 
51 /* Skeleton name.  */
52 #define YYSKELETON_NAME "yacc.c"
53 
54 /* Pure parsers.  */
55 #define YYPURE 1
56 
57 /* Push parsers.  */
58 #define YYPUSH 0
59 
60 /* Pull parsers.  */
61 #define YYPULL 1
62 
63 /* Using locations.  */
64 #define YYLSP_NEEDED 0
65 
66 /* Substitute the variable and function names.  */
67 #define yyparse         __ktrfmt_parse
68 #define yylex           __ktrfmt_lex
69 #define yyerror         __ktrfmt_error
70 #define yylval          __ktrfmt_lval
71 #define yychar          __ktrfmt_char
72 #define yydebug         __ktrfmt_debug
73 #define yynerrs         __ktrfmt_nerrs
74 
75 
76 /* Copy the first part of user declarations.  */
77 
78 /* Line 189 of yacc.c  */
79 #line 1 "ktrfmt.y"
80 
81 
82 #include <assert.h>
83 #include <errno.h>
84 #include <stdarg.h>
85 #include <stdlib.h>
86 #include <string.h>
87 #include <sys/queue.h>
88 
89 #include "evtr.h"
90 #include "tok.h"
91 #include "ktrfmt.tab.h"
92 #include "internal.h"
93 
94 struct ktrfmt_parse_ctx {
95 	struct symtab *symtab;
96 	struct evtr_variable *var;
97 	struct evtr_variable_value *val;
98 	evtr_event_t ev;
99 	char *errbuf;
100 	size_t errbufsz;
101 	int err;
102 };
103 
104 int __ktrfmtlex(YYSTYPE *);
105 #define __ktrfmt_lex __ktrfmtlex
106 
107 void __ktrfmt_error (struct ktrfmt_parse_ctx *, const char *);
108 
109 static
110 void
111 do_parse_err(struct ktrfmt_parse_ctx *ctx, const char *fmt, ...)
112 {
113 	va_list ap;
114 
115 	va_start(ap, fmt);
116 	vsnprintf(ctx->errbuf, ctx->errbufsz, fmt, ap);
117 	va_end(ap);
118 	ctx->err = !0;
119 }
120 
121 #define parse_err(fmt, ...)			\
122 	do {					\
123 		do_parse_err(ctx, fmt, ##__VA_ARGS__);	\
124 		YYABORT;				\
125  	} while (0)
126 
127 static
128 struct evtr_variable *
129 evtr_var_new(const char *name)
130 {
131 	struct evtr_variable *var;
132 
133 	var = calloc(1, sizeof(*var));
134 	if (var) {
135 		if (!(var->name = strdup(name))) {
136 			free(var);
137 			return NULL;
138 		}
139 		var->val.type = EVTR_VAL_NIL;
140 	}
141 	return var;
142 }
143 
144 /*
145  * XXX: should be reentrant
146  */
147 static
148 char *
149 uniq_varname(void)
150 {
151 	static long serno;
152 	static char buf[100];
153 
154 	serno++;
155 	snprintf(buf, sizeof(buf), "@%ld", serno);
156 	return &buf[0];
157 }
158 
159 static
160 int
161 index_hash(struct ktrfmt_parse_ctx *ctx, const char *hashname,
162 	   evtr_variable_value_t val, evtr_var_t *_var)
163 {
164 	evtr_var_t hsh, var;
165 	uintptr_t ret, key;
166 	hsh = symtab_find(ctx->symtab, hashname);
167 	if (hsh->val.type == EVTR_VAL_NIL) {
168 		/* it's probably the first time we see this "variable" */
169 		printd(PARSE, "creating hash for %s\n", hsh->name);
170 		hsh->val.type = EVTR_VAL_HASH;
171 		hsh->val.hashtab = hash_new();
172 	} else if (hsh->val.type != EVTR_VAL_HASH) {
173 		printd(PARSE, "trying to use type %d as hash\n", hsh->val.type);
174 		return !0;
175 	}
176 	if (val->type == EVTR_VAL_INT) {
177 		key = val->num;
178 		printd(PARSE, "looking up %s[%jd] in %p\n", hsh->name,
179 		       val->num, hsh->val.hashtab);
180 	} else if (val->type == EVTR_VAL_STR) {
181 		key = (uintptr_t)val->str;
182 		printd(PARSE, "looking up %s[\"%s\"] in %p\n", hsh->name,
183 		       val->str, hsh->val.hashtab);
184 	} else {
185 		do_parse_err(ctx, "trying to index hash '%s' with "
186 			     "non-supported value", hashname);
187 		return !0;
188 	}
189 
190       	if (hash_find(hsh->val.hashtab, key, &ret)) {
191 		printd(PARSE, "didn't find it\n");
192 		var = evtr_var_new(uniq_varname());
193 		if (var) {
194 			printd(PARSE, "inserting it as %s\n", var->name);
195 			if (!hash_insert(hsh->val.hashtab, key,
196 					 (uintptr_t)var)) {
197 				do_parse_err(ctx, "can't insert temporary "
198 					"variable into hash\n");
199 				return !0;
200 			}
201 			symtab_insert(ctx->symtab, var->name, var);
202 		} else {
203 			do_parse_err(ctx, "out of memory");
204 		}
205 	} else {
206 		var = (struct evtr_variable *)ret;
207 	}
208 	if (!var) {
209 		fprintf(stderr, "no var!\n");
210 		return !0;
211 		/* XXX */
212 	}
213 	*_var = var;
214 	return 0;
215 }
216 
217 
218 
219 /* Line 189 of yacc.c  */
220 #line 221 "ktrfmt.tab.c"
221 
222 /* Enabling traces.  */
223 #ifndef YYDEBUG
224 # define YYDEBUG 1
225 #endif
226 
227 /* Enabling verbose error messages.  */
228 #ifdef YYERROR_VERBOSE
229 # undef YYERROR_VERBOSE
230 # define YYERROR_VERBOSE 1
231 #else
232 # define YYERROR_VERBOSE 1
233 #endif
234 
235 /* Enabling the token table.  */
236 #ifndef YYTOKEN_TABLE
237 # define YYTOKEN_TABLE 0
238 #endif
239 
240 
241 /* Tokens.  */
242 #ifndef YYTOKENTYPE
243 # define YYTOKENTYPE
244    /* Put the tokens into the symbol table, so that GDB and other debuggers
245       know about them.  */
246    enum yytokentype {
247      TOK_ID = 258,
248      TOK_CTOR = 259,
249      TOK_INT = 260,
250      TOK_STR = 261,
251      TOK_EQ = 262,
252      TOK_LEFT_BRACK = 263,
253      TOK_RIGHT_BRACK = 264,
254      TOK_DOT = 265
255    };
256 #endif
257 
258 
259 
260 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
261 typedef union YYSTYPE
262 {
263 
264 /* Line 214 of yacc.c  */
265 #line 147 "ktrfmt.y"
266 
267 	struct token *tok;
268 	struct evtr_variable *var;
269 	struct evtr_variable_value *val;
270 	void *na;
271 
272 
273 
274 /* Line 214 of yacc.c  */
275 #line 276 "ktrfmt.tab.c"
276 } YYSTYPE;
277 # define YYSTYPE_IS_TRIVIAL 1
278 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
279 # define YYSTYPE_IS_DECLARED 1
280 #endif
281 
282 
283 /* Copy the second part of user declarations.  */
284 
285 
286 /* Line 264 of yacc.c  */
287 #line 288 "ktrfmt.tab.c"
288 
289 #ifdef short
290 # undef short
291 #endif
292 
293 #ifdef YYTYPE_UINT8
294 typedef YYTYPE_UINT8 yytype_uint8;
295 #else
296 typedef unsigned char yytype_uint8;
297 #endif
298 
299 #ifdef YYTYPE_INT8
300 typedef YYTYPE_INT8 yytype_int8;
301 #elif (defined __STDC__ || defined __C99__FUNC__ \
302      || defined __cplusplus || defined _MSC_VER)
303 typedef signed char yytype_int8;
304 #else
305 typedef short int yytype_int8;
306 #endif
307 
308 #ifdef YYTYPE_UINT16
309 typedef YYTYPE_UINT16 yytype_uint16;
310 #else
311 typedef unsigned short int yytype_uint16;
312 #endif
313 
314 #ifdef YYTYPE_INT16
315 typedef YYTYPE_INT16 yytype_int16;
316 #else
317 typedef short int yytype_int16;
318 #endif
319 
320 #ifndef YYSIZE_T
321 # ifdef __SIZE_TYPE__
322 #  define YYSIZE_T __SIZE_TYPE__
323 # elif defined size_t
324 #  define YYSIZE_T size_t
325 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
326      || defined __cplusplus || defined _MSC_VER)
327 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
328 #  define YYSIZE_T size_t
329 # else
330 #  define YYSIZE_T unsigned int
331 # endif
332 #endif
333 
334 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
335 
336 #ifndef YY_
337 # if YYENABLE_NLS
338 #  if ENABLE_NLS
339 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
340 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
341 #  endif
342 # endif
343 # ifndef YY_
344 #  define YY_(msgid) msgid
345 # endif
346 #endif
347 
348 /* Suppress unused-variable warnings by "using" E.  */
349 #if ! defined lint || defined __GNUC__
350 # define YYUSE(e) ((void) (e))
351 #else
352 # define YYUSE(e) /* empty */
353 #endif
354 
355 /* Identity function, used to suppress warnings about constant conditions.  */
356 #ifndef lint
357 # define YYID(n) (n)
358 #else
359 #if (defined __STDC__ || defined __C99__FUNC__ \
360      || defined __cplusplus || defined _MSC_VER)
361 static int
362 YYID (int yyi)
363 #else
364 static int
365 YYID (yyi)
366     int yyi;
367 #endif
368 {
369   return yyi;
370 }
371 #endif
372 
373 #if ! defined yyoverflow || YYERROR_VERBOSE
374 
375 /* The parser invokes alloca or malloc; define the necessary symbols.  */
376 
377 # ifdef YYSTACK_USE_ALLOCA
378 #  if YYSTACK_USE_ALLOCA
379 #   ifdef __GNUC__
380 #    define YYSTACK_ALLOC __builtin_alloca
381 #   elif defined __BUILTIN_VA_ARG_INCR
382 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
383 #   elif defined _AIX
384 #    define YYSTACK_ALLOC __alloca
385 #   elif defined _MSC_VER
386 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
387 #    define alloca _alloca
388 #   else
389 #    define YYSTACK_ALLOC alloca
390 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
391      || defined __cplusplus || defined _MSC_VER)
392 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
393 #     ifndef _STDLIB_H
394 #      define _STDLIB_H 1
395 #     endif
396 #    endif
397 #   endif
398 #  endif
399 # endif
400 
401 # ifdef YYSTACK_ALLOC
402    /* Pacify GCC's `empty if-body' warning.  */
403 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
404 #  ifndef YYSTACK_ALLOC_MAXIMUM
405     /* The OS might guarantee only one guard page at the bottom of the stack,
406        and a page size can be as small as 4096 bytes.  So we cannot safely
407        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
408        to allow for a few compiler-allocated temporary stack slots.  */
409 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
410 #  endif
411 # else
412 #  define YYSTACK_ALLOC YYMALLOC
413 #  define YYSTACK_FREE YYFREE
414 #  ifndef YYSTACK_ALLOC_MAXIMUM
415 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
416 #  endif
417 #  if (defined __cplusplus && ! defined _STDLIB_H \
418        && ! ((defined YYMALLOC || defined malloc) \
419 	     && (defined YYFREE || defined free)))
420 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
421 #   ifndef _STDLIB_H
422 #    define _STDLIB_H 1
423 #   endif
424 #  endif
425 #  ifndef YYMALLOC
426 #   define YYMALLOC malloc
427 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
428      || defined __cplusplus || defined _MSC_VER)
429 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
430 #   endif
431 #  endif
432 #  ifndef YYFREE
433 #   define YYFREE free
434 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
435      || defined __cplusplus || defined _MSC_VER)
436 void free (void *); /* INFRINGES ON USER NAME SPACE */
437 #   endif
438 #  endif
439 # endif
440 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
441 
442 
443 #if (! defined yyoverflow \
444      && (! defined __cplusplus \
445 	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
446 
447 /* A type that is properly aligned for any stack member.  */
448 union yyalloc
449 {
450   yytype_int16 yyss_alloc;
451   YYSTYPE yyvs_alloc;
452 };
453 
454 /* The size of the maximum gap between one aligned stack and the next.  */
455 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
456 
457 /* The size of an array large to enough to hold all stacks, each with
458    N elements.  */
459 # define YYSTACK_BYTES(N) \
460      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
461       + YYSTACK_GAP_MAXIMUM)
462 
463 /* Copy COUNT objects from FROM to TO.  The source and destination do
464    not overlap.  */
465 # ifndef YYCOPY
466 #  if defined __GNUC__ && 1 < __GNUC__
467 #   define YYCOPY(To, From, Count) \
468       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
469 #  else
470 #   define YYCOPY(To, From, Count)		\
471       do					\
472 	{					\
473 	  YYSIZE_T yyi;				\
474 	  for (yyi = 0; yyi < (Count); yyi++)	\
475 	    (To)[yyi] = (From)[yyi];		\
476 	}					\
477       while (YYID (0))
478 #  endif
479 # endif
480 
481 /* Relocate STACK from its old location to the new one.  The
482    local variables YYSIZE and YYSTACKSIZE give the old and new number of
483    elements in the stack, and YYPTR gives the new location of the
484    stack.  Advance YYPTR to a properly aligned location for the next
485    stack.  */
486 # define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
487     do									\
488       {									\
489 	YYSIZE_T yynewbytes;						\
490 	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
491 	Stack = &yyptr->Stack_alloc;					\
492 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
493 	yyptr += yynewbytes / sizeof (*yyptr);				\
494       }									\
495     while (YYID (0))
496 
497 #endif
498 
499 /* YYFINAL -- State number of the termination state.  */
500 #define YYFINAL  12
501 /* YYLAST -- Last index in YYTABLE.  */
502 #define YYLAST   20
503 
504 /* YYNTOKENS -- Number of terminals.  */
505 #define YYNTOKENS  11
506 /* YYNNTS -- Number of nonterminals.  */
507 #define YYNNTS  11
508 /* YYNRULES -- Number of rules.  */
509 #define YYNRULES  19
510 /* YYNRULES -- Number of states.  */
511 #define YYNSTATES  25
512 
513 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
514 #define YYUNDEFTOK  2
515 #define YYMAXUTOK   265
516 
517 #define YYTRANSLATE(YYX)						\
518   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
519 
520 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
521 static const yytype_uint8 yytranslate[] =
522 {
523        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
524        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
525        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
526        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
527        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
528        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
529        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
530        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
531        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
532        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
533        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
534        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
535        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
536        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
537        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
538        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
539        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
540        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
541        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
542        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
543        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
544        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
545        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
546        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
547        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
548        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
549        5,     6,     7,     8,     9,    10
550 };
551 
552 #if YYDEBUG
553 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
554    YYRHS.  */
555 static const yytype_uint8 yyprhs[] =
556 {
557        0,     0,     3,     5,     7,     9,    11,    13,    15,    18,
558       20,    23,    25,    27,    32,    36,    38,    40,    44,    48
559 };
560 
561 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
562 static const yytype_int8 yyrhs[] =
563 {
564       12,     0,    -1,    13,    -1,    19,    -1,    21,    -1,     5,
565       -1,     6,    -1,    14,    -1,    14,    15,    -1,     4,    -1,
566        4,    15,    -1,     3,    -1,    14,    -1,    18,     8,    18,
567        9,    -1,    18,    10,     3,    -1,    17,    -1,    18,    -1,
568       19,     7,    14,    -1,    19,     7,    16,    -1,    20,    -1
569 };
570 
571 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
572 static const yytype_uint16 yyrline[] =
573 {
574        0,   175,   175,   177,   180,   182,   196,   210,   219,   224,
575      237,   262,   280,   284,   291,   304,   308,   312,   319,   327
576 };
577 #endif
578 
579 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
580 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
581    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
582 static const char *const yytname[] =
583 {
584   "$end", "error", "$undefined", "TOK_ID", "TOK_CTOR", "TOK_INT",
585   "TOK_STR", "TOK_EQ", "TOK_LEFT_BRACK", "TOK_RIGHT_BRACK", "TOK_DOT",
586   "$accept", "input", "stmt", "constant", "ctor_args", "construct_expr",
587   "primary_expr", "postfix_expr", "unary_expr", "assign_expr", "expr", 0
588 };
589 #endif
590 
591 # ifdef YYPRINT
592 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
593    token YYLEX-NUM.  */
594 static const yytype_uint16 yytoknum[] =
595 {
596        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
597      265
598 };
599 # endif
600 
601 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
602 static const yytype_uint8 yyr1[] =
603 {
604        0,    11,    12,    13,    13,    14,    14,    15,    15,    16,
605       16,    17,    17,    18,    18,    18,    19,    20,    20,    21
606 };
607 
608 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
609 static const yytype_uint8 yyr2[] =
610 {
611        0,     2,     1,     1,     1,     1,     1,     1,     2,     1,
612        2,     1,     1,     4,     3,     1,     1,     3,     3,     1
613 };
614 
615 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
616    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
617    means the default is an error.  */
618 static const yytype_uint8 yydefact[] =
619 {
620        0,    11,     5,     6,     0,     2,    12,    15,    16,     3,
621       19,     4,     1,     0,     0,     0,     0,    14,     9,    17,
622       18,    13,     7,    10,     8
623 };
624 
625 /* YYDEFGOTO[NTERM-NUM].  */
626 static const yytype_int8 yydefgoto[] =
627 {
628       -1,     4,     5,     6,    23,    20,     7,     8,     9,    10,
629       11
630 };
631 
632 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
633    STATE-NUM.  */
634 #define YYPACT_NINF -17
635 static const yytype_int8 yypact[] =
636 {
637       -1,   -17,   -17,   -17,     1,   -17,   -17,   -17,     6,     8,
638      -17,   -17,   -17,    -1,    16,     4,     3,   -17,    12,   -17,
639      -17,   -17,    12,   -17,   -17
640 };
641 
642 /* YYPGOTO[NTERM-NUM].  */
643 static const yytype_int8 yypgoto[] =
644 {
645      -17,   -17,   -17,   -15,   -16,   -17,   -17,     7,   -17,   -17,
646      -17
647 };
648 
649 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
650    positive, shift that token.  If negative, reduce the rule which
651    number is the opposite.  If zero, do what YYDEFACT says.
652    If YYTABLE_NINF, syntax error.  */
653 #define YYTABLE_NINF -1
654 static const yytype_uint8 yytable[] =
655 {
656       19,    12,     1,    22,     2,     3,    24,    22,    18,     2,
657        3,    13,    21,    14,    13,    15,    14,     2,     3,    17,
658       16
659 };
660 
661 static const yytype_uint8 yycheck[] =
662 {
663       15,     0,     3,    18,     5,     6,    22,    22,     4,     5,
664        6,     8,     9,    10,     8,     7,    10,     5,     6,     3,
665       13
666 };
667 
668 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
669    symbol of state STATE-NUM.  */
670 static const yytype_uint8 yystos[] =
671 {
672        0,     3,     5,     6,    12,    13,    14,    17,    18,    19,
673       20,    21,     0,     8,    10,     7,    18,     3,     4,    14,
674       16,     9,    14,    15,    15
675 };
676 
677 #define yyerrok		(yyerrstatus = 0)
678 #define yyclearin	(yychar = YYEMPTY)
679 #define YYEMPTY		(-2)
680 #define YYEOF		0
681 
682 #define YYACCEPT	goto yyacceptlab
683 #define YYABORT		goto yyabortlab
684 #define YYERROR		goto yyerrorlab
685 
686 
687 /* Like YYERROR except do call yyerror.  This remains here temporarily
688    to ease the transition to the new meaning of YYERROR, for GCC.
689    Once GCC version 2 has supplanted version 1, this can go.  */
690 
691 #define YYFAIL		goto yyerrlab
692 
693 #define YYRECOVERING()  (!!yyerrstatus)
694 
695 #define YYBACKUP(Token, Value)					\
696 do								\
697   if (yychar == YYEMPTY && yylen == 1)				\
698     {								\
699       yychar = (Token);						\
700       yylval = (Value);						\
701       yytoken = YYTRANSLATE (yychar);				\
702       YYPOPSTACK (1);						\
703       goto yybackup;						\
704     }								\
705   else								\
706     {								\
707       yyerror (ctx, YY_("syntax error: cannot back up")); \
708       YYERROR;							\
709     }								\
710 while (YYID (0))
711 
712 
713 #define YYTERROR	1
714 #define YYERRCODE	256
715 
716 
717 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
718    If N is 0, then set CURRENT to the empty location which ends
719    the previous symbol: RHS[0] (always defined).  */
720 
721 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
722 #ifndef YYLLOC_DEFAULT
723 # define YYLLOC_DEFAULT(Current, Rhs, N)				\
724     do									\
725       if (YYID (N))                                                    \
726 	{								\
727 	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
728 	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
729 	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
730 	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
731 	}								\
732       else								\
733 	{								\
734 	  (Current).first_line   = (Current).last_line   =		\
735 	    YYRHSLOC (Rhs, 0).last_line;				\
736 	  (Current).first_column = (Current).last_column =		\
737 	    YYRHSLOC (Rhs, 0).last_column;				\
738 	}								\
739     while (YYID (0))
740 #endif
741 
742 
743 /* YY_LOCATION_PRINT -- Print the location on the stream.
744    This macro was not mandated originally: define only if we know
745    we won't break user code: when these are the locations we know.  */
746 
747 #ifndef YY_LOCATION_PRINT
748 # if YYLTYPE_IS_TRIVIAL
749 #  define YY_LOCATION_PRINT(File, Loc)			\
750      fprintf (File, "%d.%d-%d.%d",			\
751 	      (Loc).first_line, (Loc).first_column,	\
752 	      (Loc).last_line,  (Loc).last_column)
753 # else
754 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
755 # endif
756 #endif
757 
758 
759 /* YYLEX -- calling `yylex' with the right arguments.  */
760 
761 #ifdef YYLEX_PARAM
762 # define YYLEX yylex (&yylval, YYLEX_PARAM)
763 #else
764 # define YYLEX yylex (&yylval)
765 #endif
766 
767 /* Enable debugging if requested.  */
768 #if YYDEBUG
769 
770 # ifndef YYFPRINTF
771 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
772 #  define YYFPRINTF fprintf
773 # endif
774 
775 # define YYDPRINTF(Args)			\
776 do {						\
777   if (yydebug)					\
778     YYFPRINTF Args;				\
779 } while (YYID (0))
780 
781 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
782 do {									  \
783   if (yydebug)								  \
784     {									  \
785       YYFPRINTF (stderr, "%s ", Title);					  \
786       yy_symbol_print (stderr,						  \
787 		  Type, Value, ctx); \
788       YYFPRINTF (stderr, "\n");						  \
789     }									  \
790 } while (YYID (0))
791 
792 
793 /*--------------------------------.
794 | Print this symbol on YYOUTPUT.  |
795 `--------------------------------*/
796 
797 /*ARGSUSED*/
798 #if (defined __STDC__ || defined __C99__FUNC__ \
799      || defined __cplusplus || defined _MSC_VER)
800 static void
801 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct ktrfmt_parse_ctx *ctx)
802 #else
803 static void
804 yy_symbol_value_print (yyoutput, yytype, yyvaluep, ctx)
805     FILE *yyoutput;
806     int yytype;
807     YYSTYPE const * const yyvaluep;
808     struct ktrfmt_parse_ctx *ctx;
809 #endif
810 {
811   if (!yyvaluep)
812     return;
813   YYUSE (ctx);
814 # ifdef YYPRINT
815   if (yytype < YYNTOKENS)
816     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
817 # else
818   YYUSE (yyoutput);
819 # endif
820   switch (yytype)
821     {
822       default:
823 	break;
824     }
825 }
826 
827 
828 /*--------------------------------.
829 | Print this symbol on YYOUTPUT.  |
830 `--------------------------------*/
831 
832 #if (defined __STDC__ || defined __C99__FUNC__ \
833      || defined __cplusplus || defined _MSC_VER)
834 static void
835 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct ktrfmt_parse_ctx *ctx)
836 #else
837 static void
838 yy_symbol_print (yyoutput, yytype, yyvaluep, ctx)
839     FILE *yyoutput;
840     int yytype;
841     YYSTYPE const * const yyvaluep;
842     struct ktrfmt_parse_ctx *ctx;
843 #endif
844 {
845   if (yytype < YYNTOKENS)
846     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
847   else
848     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
849 
850   yy_symbol_value_print (yyoutput, yytype, yyvaluep, ctx);
851   YYFPRINTF (yyoutput, ")");
852 }
853 
854 /*------------------------------------------------------------------.
855 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
856 | TOP (included).                                                   |
857 `------------------------------------------------------------------*/
858 
859 #if (defined __STDC__ || defined __C99__FUNC__ \
860      || defined __cplusplus || defined _MSC_VER)
861 static void
862 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
863 #else
864 static void
865 yy_stack_print (yybottom, yytop)
866     yytype_int16 *yybottom;
867     yytype_int16 *yytop;
868 #endif
869 {
870   YYFPRINTF (stderr, "Stack now");
871   for (; yybottom <= yytop; yybottom++)
872     {
873       int yybot = *yybottom;
874       YYFPRINTF (stderr, " %d", yybot);
875     }
876   YYFPRINTF (stderr, "\n");
877 }
878 
879 # define YY_STACK_PRINT(Bottom, Top)				\
880 do {								\
881   if (yydebug)							\
882     yy_stack_print ((Bottom), (Top));				\
883 } while (YYID (0))
884 
885 
886 /*------------------------------------------------.
887 | Report that the YYRULE is going to be reduced.  |
888 `------------------------------------------------*/
889 
890 #if (defined __STDC__ || defined __C99__FUNC__ \
891      || defined __cplusplus || defined _MSC_VER)
892 static void
893 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct ktrfmt_parse_ctx *ctx)
894 #else
895 static void
896 yy_reduce_print (yyvsp, yyrule, ctx)
897     YYSTYPE *yyvsp;
898     int yyrule;
899     struct ktrfmt_parse_ctx *ctx;
900 #endif
901 {
902   int yynrhs = yyr2[yyrule];
903   int yyi;
904   unsigned long int yylno = yyrline[yyrule];
905   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
906 	     yyrule - 1, yylno);
907   /* The symbols being reduced.  */
908   for (yyi = 0; yyi < yynrhs; yyi++)
909     {
910       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
911       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
912 		       &(yyvsp[(yyi + 1) - (yynrhs)])
913 		       		       , ctx);
914       YYFPRINTF (stderr, "\n");
915     }
916 }
917 
918 # define YY_REDUCE_PRINT(Rule)		\
919 do {					\
920   if (yydebug)				\
921     yy_reduce_print (yyvsp, Rule, ctx); \
922 } while (YYID (0))
923 
924 /* Nonzero means print parse trace.  It is left uninitialized so that
925    multiple parsers can coexist.  */
926 int yydebug;
927 #else /* !YYDEBUG */
928 # define YYDPRINTF(Args)
929 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
930 # define YY_STACK_PRINT(Bottom, Top)
931 # define YY_REDUCE_PRINT(Rule)
932 #endif /* !YYDEBUG */
933 
934 
935 /* YYINITDEPTH -- initial size of the parser's stacks.  */
936 #ifndef	YYINITDEPTH
937 # define YYINITDEPTH 200
938 #endif
939 
940 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
941    if the built-in stack extension method is used).
942 
943    Do not make this value too large; the results are undefined if
944    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
945    evaluated with infinite-precision integer arithmetic.  */
946 
947 #ifndef YYMAXDEPTH
948 # define YYMAXDEPTH 10000
949 #endif
950 
951 
952 
953 #if YYERROR_VERBOSE
954 
955 # ifndef yystrlen
956 #  if defined __GLIBC__ && defined _STRING_H
957 #   define yystrlen strlen
958 #  else
959 /* Return the length of YYSTR.  */
960 #if (defined __STDC__ || defined __C99__FUNC__ \
961      || defined __cplusplus || defined _MSC_VER)
962 static YYSIZE_T
963 yystrlen (const char *yystr)
964 #else
965 static YYSIZE_T
966 yystrlen (yystr)
967     const char *yystr;
968 #endif
969 {
970   YYSIZE_T yylen;
971   for (yylen = 0; yystr[yylen]; yylen++)
972     continue;
973   return yylen;
974 }
975 #  endif
976 # endif
977 
978 # ifndef yystpcpy
979 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
980 #   define yystpcpy stpcpy
981 #  else
982 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
983    YYDEST.  */
984 #if (defined __STDC__ || defined __C99__FUNC__ \
985      || defined __cplusplus || defined _MSC_VER)
986 static char *
987 yystpcpy (char *yydest, const char *yysrc)
988 #else
989 static char *
990 yystpcpy (yydest, yysrc)
991     char *yydest;
992     const char *yysrc;
993 #endif
994 {
995   char *yyd = yydest;
996   const char *yys = yysrc;
997 
998   while ((*yyd++ = *yys++) != '\0')
999     continue;
1000 
1001   return yyd - 1;
1002 }
1003 #  endif
1004 # endif
1005 
1006 # ifndef yytnamerr
1007 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1008    quotes and backslashes, so that it's suitable for yyerror.  The
1009    heuristic is that double-quoting is unnecessary unless the string
1010    contains an apostrophe, a comma, or backslash (other than
1011    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1012    null, do not copy; instead, return the length of what the result
1013    would have been.  */
1014 static YYSIZE_T
1015 yytnamerr (char *yyres, const char *yystr)
1016 {
1017   if (*yystr == '"')
1018     {
1019       YYSIZE_T yyn = 0;
1020       char const *yyp = yystr;
1021 
1022       for (;;)
1023 	switch (*++yyp)
1024 	  {
1025 	  case '\'':
1026 	  case ',':
1027 	    goto do_not_strip_quotes;
1028 
1029 	  case '\\':
1030 	    if (*++yyp != '\\')
1031 	      goto do_not_strip_quotes;
1032 	    /* Fall through.  */
1033 	  default:
1034 	    if (yyres)
1035 	      yyres[yyn] = *yyp;
1036 	    yyn++;
1037 	    break;
1038 
1039 	  case '"':
1040 	    if (yyres)
1041 	      yyres[yyn] = '\0';
1042 	    return yyn;
1043 	  }
1044     do_not_strip_quotes: ;
1045     }
1046 
1047   if (! yyres)
1048     return yystrlen (yystr);
1049 
1050   return yystpcpy (yyres, yystr) - yyres;
1051 }
1052 # endif
1053 
1054 /* Copy into YYRESULT an error message about the unexpected token
1055    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
1056    including the terminating null byte.  If YYRESULT is null, do not
1057    copy anything; just return the number of bytes that would be
1058    copied.  As a special case, return 0 if an ordinary "syntax error"
1059    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
1060    size calculation.  */
1061 static YYSIZE_T
1062 yysyntax_error (char *yyresult, int yystate, int yychar)
1063 {
1064   int yyn = yypact[yystate];
1065 
1066   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
1067     return 0;
1068   else
1069     {
1070       int yytype = YYTRANSLATE (yychar);
1071       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1072       YYSIZE_T yysize = yysize0;
1073       YYSIZE_T yysize1;
1074       int yysize_overflow = 0;
1075       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1076       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1077       int yyx;
1078 
1079 # if 0
1080       /* This is so xgettext sees the translatable formats that are
1081 	 constructed on the fly.  */
1082       YY_("syntax error, unexpected %s");
1083       YY_("syntax error, unexpected %s, expecting %s");
1084       YY_("syntax error, unexpected %s, expecting %s or %s");
1085       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1086       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1087 # endif
1088       char *yyfmt;
1089       char const *yyf;
1090       static char const yyunexpected[] = "syntax error, unexpected %s";
1091       static char const yyexpecting[] = ", expecting %s";
1092       static char const yyor[] = " or %s";
1093       char yyformat[sizeof yyunexpected
1094 		    + sizeof yyexpecting - 1
1095 		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1096 		       * (sizeof yyor - 1))];
1097       char const *yyprefix = yyexpecting;
1098 
1099       /* Start YYX at -YYN if negative to avoid negative indexes in
1100 	 YYCHECK.  */
1101       int yyxbegin = yyn < 0 ? -yyn : 0;
1102 
1103       /* Stay within bounds of both yycheck and yytname.  */
1104       int yychecklim = YYLAST - yyn + 1;
1105       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1106       int yycount = 1;
1107 
1108       yyarg[0] = yytname[yytype];
1109       yyfmt = yystpcpy (yyformat, yyunexpected);
1110 
1111       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1112 	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1113 	  {
1114 	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1115 	      {
1116 		yycount = 1;
1117 		yysize = yysize0;
1118 		yyformat[sizeof yyunexpected - 1] = '\0';
1119 		break;
1120 	      }
1121 	    yyarg[yycount++] = yytname[yyx];
1122 	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1123 	    yysize_overflow |= (yysize1 < yysize);
1124 	    yysize = yysize1;
1125 	    yyfmt = yystpcpy (yyfmt, yyprefix);
1126 	    yyprefix = yyor;
1127 	  }
1128 
1129       yyf = YY_(yyformat);
1130       yysize1 = yysize + yystrlen (yyf);
1131       yysize_overflow |= (yysize1 < yysize);
1132       yysize = yysize1;
1133 
1134       if (yysize_overflow)
1135 	return YYSIZE_MAXIMUM;
1136 
1137       if (yyresult)
1138 	{
1139 	  /* Avoid sprintf, as that infringes on the user's name space.
1140 	     Don't have undefined behavior even if the translation
1141 	     produced a string with the wrong number of "%s"s.  */
1142 	  char *yyp = yyresult;
1143 	  int yyi = 0;
1144 	  while ((*yyp = *yyf) != '\0')
1145 	    {
1146 	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1147 		{
1148 		  yyp += yytnamerr (yyp, yyarg[yyi++]);
1149 		  yyf += 2;
1150 		}
1151 	      else
1152 		{
1153 		  yyp++;
1154 		  yyf++;
1155 		}
1156 	    }
1157 	}
1158       return yysize;
1159     }
1160 }
1161 #endif /* YYERROR_VERBOSE */
1162 
1163 
1164 /*-----------------------------------------------.
1165 | Release the memory associated to this symbol.  |
1166 `-----------------------------------------------*/
1167 
1168 /*ARGSUSED*/
1169 #if (defined __STDC__ || defined __C99__FUNC__ \
1170      || defined __cplusplus || defined _MSC_VER)
1171 static void
1172 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct ktrfmt_parse_ctx *ctx)
1173 #else
1174 static void
1175 yydestruct (yymsg, yytype, yyvaluep, ctx)
1176     const char *yymsg;
1177     int yytype;
1178     YYSTYPE *yyvaluep;
1179     struct ktrfmt_parse_ctx *ctx;
1180 #endif
1181 {
1182   YYUSE (yyvaluep);
1183   YYUSE (ctx);
1184 
1185   if (!yymsg)
1186     yymsg = "Deleting";
1187   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1188 
1189   switch (yytype)
1190     {
1191 
1192       default:
1193 	break;
1194     }
1195 }
1196 
1197 /* Prevent warnings from -Wmissing-prototypes.  */
1198 #ifdef YYPARSE_PARAM
1199 #if defined __STDC__ || defined __cplusplus
1200 int yyparse (void *YYPARSE_PARAM);
1201 #else
1202 int yyparse ();
1203 #endif
1204 #else /* ! YYPARSE_PARAM */
1205 #if defined __STDC__ || defined __cplusplus
1206 int yyparse (struct ktrfmt_parse_ctx *ctx);
1207 #else
1208 int yyparse ();
1209 #endif
1210 #endif /* ! YYPARSE_PARAM */
1211 
1212 
1213 
1214 
1215 
1216 /*-------------------------.
1217 | yyparse or yypush_parse.  |
1218 `-------------------------*/
1219 
1220 #ifdef YYPARSE_PARAM
1221 #if (defined __STDC__ || defined __C99__FUNC__ \
1222      || defined __cplusplus || defined _MSC_VER)
1223 int
1224 yyparse (void *YYPARSE_PARAM)
1225 #else
1226 int
1227 yyparse (YYPARSE_PARAM)
1228     void *YYPARSE_PARAM;
1229 #endif
1230 #else /* ! YYPARSE_PARAM */
1231 #if (defined __STDC__ || defined __C99__FUNC__ \
1232      || defined __cplusplus || defined _MSC_VER)
1233 int
1234 yyparse (struct ktrfmt_parse_ctx *ctx)
1235 #else
1236 int
1237 yyparse (ctx)
1238     struct ktrfmt_parse_ctx *ctx;
1239 #endif
1240 #endif
1241 {
1242 /* The lookahead symbol.  */
1243 int yychar;
1244 
1245 /* The semantic value of the lookahead symbol.  */
1246 YYSTYPE yylval;
1247 
1248     /* Number of syntax errors so far.  */
1249     int yynerrs;
1250 
1251     int yystate;
1252     /* Number of tokens to shift before error messages enabled.  */
1253     int yyerrstatus;
1254 
1255     /* The stacks and their tools:
1256        `yyss': related to states.
1257        `yyvs': related to semantic values.
1258 
1259        Refer to the stacks thru separate pointers, to allow yyoverflow
1260        to reallocate them elsewhere.  */
1261 
1262     /* The state stack.  */
1263     yytype_int16 yyssa[YYINITDEPTH];
1264     yytype_int16 *yyss;
1265     yytype_int16 *yyssp;
1266 
1267     /* The semantic value stack.  */
1268     YYSTYPE yyvsa[YYINITDEPTH];
1269     YYSTYPE *yyvs;
1270     YYSTYPE *yyvsp;
1271 
1272     YYSIZE_T yystacksize;
1273 
1274   int yyn;
1275   int yyresult;
1276   /* Lookahead token as an internal (translated) token number.  */
1277   int yytoken;
1278   /* The variables used to return semantic value and location from the
1279      action routines.  */
1280   YYSTYPE yyval;
1281 
1282 #if YYERROR_VERBOSE
1283   /* Buffer for error messages, and its allocated size.  */
1284   char yymsgbuf[128];
1285   char *yymsg = yymsgbuf;
1286   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1287 #endif
1288 
1289 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1290 
1291   /* The number of symbols on the RHS of the reduced rule.
1292      Keep to zero when no symbol should be popped.  */
1293   int yylen = 0;
1294 
1295   yytoken = 0;
1296   yyss = yyssa;
1297   yyvs = yyvsa;
1298   yystacksize = YYINITDEPTH;
1299 
1300   YYDPRINTF ((stderr, "Starting parse\n"));
1301 
1302   yystate = 0;
1303   yyerrstatus = 0;
1304   yynerrs = 0;
1305   yychar = YYEMPTY; /* Cause a token to be read.  */
1306 
1307   /* Initialize stack pointers.
1308      Waste one element of value and location stack
1309      so that they stay on the same level as the state stack.
1310      The wasted elements are never initialized.  */
1311   yyssp = yyss;
1312   yyvsp = yyvs;
1313 
1314   goto yysetstate;
1315 
1316 /*------------------------------------------------------------.
1317 | yynewstate -- Push a new state, which is found in yystate.  |
1318 `------------------------------------------------------------*/
1319  yynewstate:
1320   /* In all cases, when you get here, the value and location stacks
1321      have just been pushed.  So pushing a state here evens the stacks.  */
1322   yyssp++;
1323 
1324  yysetstate:
1325   *yyssp = yystate;
1326 
1327   if (yyss + yystacksize - 1 <= yyssp)
1328     {
1329       /* Get the current used size of the three stacks, in elements.  */
1330       YYSIZE_T yysize = yyssp - yyss + 1;
1331 
1332 #ifdef yyoverflow
1333       {
1334 	/* Give user a chance to reallocate the stack.  Use copies of
1335 	   these so that the &'s don't force the real ones into
1336 	   memory.  */
1337 	YYSTYPE *yyvs1 = yyvs;
1338 	yytype_int16 *yyss1 = yyss;
1339 
1340 	/* Each stack pointer address is followed by the size of the
1341 	   data in use in that stack, in bytes.  This used to be a
1342 	   conditional around just the two extra args, but that might
1343 	   be undefined if yyoverflow is a macro.  */
1344 	yyoverflow (YY_("memory exhausted"),
1345 		    &yyss1, yysize * sizeof (*yyssp),
1346 		    &yyvs1, yysize * sizeof (*yyvsp),
1347 		    &yystacksize);
1348 
1349 	yyss = yyss1;
1350 	yyvs = yyvs1;
1351       }
1352 #else /* no yyoverflow */
1353 # ifndef YYSTACK_RELOCATE
1354       goto yyexhaustedlab;
1355 # else
1356       /* Extend the stack our own way.  */
1357       if (YYMAXDEPTH <= yystacksize)
1358 	goto yyexhaustedlab;
1359       yystacksize *= 2;
1360       if (YYMAXDEPTH < yystacksize)
1361 	yystacksize = YYMAXDEPTH;
1362 
1363       {
1364 	yytype_int16 *yyss1 = yyss;
1365 	union yyalloc *yyptr =
1366 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1367 	if (! yyptr)
1368 	  goto yyexhaustedlab;
1369 	YYSTACK_RELOCATE (yyss_alloc, yyss);
1370 	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1371 #  undef YYSTACK_RELOCATE
1372 	if (yyss1 != yyssa)
1373 	  YYSTACK_FREE (yyss1);
1374       }
1375 # endif
1376 #endif /* no yyoverflow */
1377 
1378       yyssp = yyss + yysize - 1;
1379       yyvsp = yyvs + yysize - 1;
1380 
1381       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1382 		  (unsigned long int) yystacksize));
1383 
1384       if (yyss + yystacksize - 1 <= yyssp)
1385 	YYABORT;
1386     }
1387 
1388   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1389 
1390   if (yystate == YYFINAL)
1391     YYACCEPT;
1392 
1393   goto yybackup;
1394 
1395 /*-----------.
1396 | yybackup.  |
1397 `-----------*/
1398 yybackup:
1399 
1400   /* Do appropriate processing given the current state.  Read a
1401      lookahead token if we need one and don't already have one.  */
1402 
1403   /* First try to decide what to do without reference to lookahead token.  */
1404   yyn = yypact[yystate];
1405   if (yyn == YYPACT_NINF)
1406     goto yydefault;
1407 
1408   /* Not known => get a lookahead token if don't already have one.  */
1409 
1410   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1411   if (yychar == YYEMPTY)
1412     {
1413       YYDPRINTF ((stderr, "Reading a token: "));
1414       yychar = YYLEX;
1415     }
1416 
1417   if (yychar <= YYEOF)
1418     {
1419       yychar = yytoken = YYEOF;
1420       YYDPRINTF ((stderr, "Now at end of input.\n"));
1421     }
1422   else
1423     {
1424       yytoken = YYTRANSLATE (yychar);
1425       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1426     }
1427 
1428   /* If the proper action on seeing token YYTOKEN is to reduce or to
1429      detect an error, take that action.  */
1430   yyn += yytoken;
1431   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1432     goto yydefault;
1433   yyn = yytable[yyn];
1434   if (yyn <= 0)
1435     {
1436       if (yyn == 0 || yyn == YYTABLE_NINF)
1437 	goto yyerrlab;
1438       yyn = -yyn;
1439       goto yyreduce;
1440     }
1441 
1442   /* Count tokens shifted since error; after three, turn off error
1443      status.  */
1444   if (yyerrstatus)
1445     yyerrstatus--;
1446 
1447   /* Shift the lookahead token.  */
1448   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1449 
1450   /* Discard the shifted token.  */
1451   yychar = YYEMPTY;
1452 
1453   yystate = yyn;
1454   *++yyvsp = yylval;
1455 
1456   goto yynewstate;
1457 
1458 
1459 /*-----------------------------------------------------------.
1460 | yydefault -- do the default action for the current state.  |
1461 `-----------------------------------------------------------*/
1462 yydefault:
1463   yyn = yydefact[yystate];
1464   if (yyn == 0)
1465     goto yyerrlab;
1466   goto yyreduce;
1467 
1468 
1469 /*-----------------------------.
1470 | yyreduce -- Do a reduction.  |
1471 `-----------------------------*/
1472 yyreduce:
1473   /* yyn is the number of a rule to reduce with.  */
1474   yylen = yyr2[yyn];
1475 
1476   /* If YYLEN is nonzero, implement the default value of the action:
1477      `$$ = $1'.
1478 
1479      Otherwise, the following line sets YYVAL to garbage.
1480      This behavior is undocumented and Bison
1481      users should not rely upon it.  Assigning to YYVAL
1482      unconditionally makes the parser a bit smaller, and it avoids a
1483      GCC warning that YYVAL may be used uninitialized.  */
1484   yyval = yyvsp[1-yylen];
1485 
1486 
1487   YY_REDUCE_PRINT (yyn);
1488   switch (yyn)
1489     {
1490         case 3:
1491 
1492 /* Line 1455 of yacc.c  */
1493 #line 177 "ktrfmt.y"
1494     {
1495 	ctx->var = (yyvsp[(1) - (1)].var);
1496  ;}
1497     break;
1498 
1499   case 5:
1500 
1501 /* Line 1455 of yacc.c  */
1502 #line 182 "ktrfmt.y"
1503     {
1504 	evtr_var_t var;
1505 	if (!(yyvsp[(1) - (1)].tok)->str)
1506 		parse_err("out of memory");
1507 	var = evtr_var_new(uniq_varname());
1508 	var->val.type = EVTR_VAL_INT;
1509 	errno = 0;
1510 	var->val.num = strtoll((yyvsp[(1) - (1)].tok)->str, NULL, 0);
1511 	if (errno) {
1512 		parse_err("Can't parse numeric constant '%s'", (yyvsp[(1) - (1)].tok)->str);
1513 	}
1514 	(yyval.var) = var;
1515 	tok_free((yyvsp[(1) - (1)].tok));
1516 	;}
1517     break;
1518 
1519   case 6:
1520 
1521 /* Line 1455 of yacc.c  */
1522 #line 196 "ktrfmt.y"
1523     {
1524 	evtr_var_t var;
1525 	if (!(yyvsp[(1) - (1)].tok)->str)
1526 		parse_err("out of memory");
1527 	var = evtr_var_new(uniq_varname());
1528 	var->val.type = EVTR_VAL_STR;
1529 	var->val.str = (yyvsp[(1) - (1)].tok)->str;
1530 	if (!var->val.str) {
1531 		parse_err("out of memory");
1532 	}
1533 	(yyval.var) = var;
1534 	tok_free((yyvsp[(1) - (1)].tok));
1535 	;}
1536     break;
1537 
1538   case 7:
1539 
1540 /* Line 1455 of yacc.c  */
1541 #line 210 "ktrfmt.y"
1542     {
1543 	evtr_var_t ctor;
1544 	ctor = evtr_var_new(uniq_varname());
1545 	ctor->val.type = EVTR_VAL_CTOR;
1546 	ctor->val.ctor.name = NULL;
1547 	TAILQ_INIT(&ctor->val.ctor.args);
1548 	TAILQ_INSERT_HEAD(&ctor->val.ctor.args, &(yyvsp[(1) - (1)].var)->val, link);
1549 	(yyval.var) = ctor;
1550  ;}
1551     break;
1552 
1553   case 8:
1554 
1555 /* Line 1455 of yacc.c  */
1556 #line 219 "ktrfmt.y"
1557     {
1558 	TAILQ_INSERT_HEAD(&(yyvsp[(2) - (2)].var)->val.ctor.args, &(yyvsp[(1) - (2)].var)->val, link);
1559 	(yyval.var) = (yyvsp[(2) - (2)].var);
1560  ;}
1561     break;
1562 
1563   case 9:
1564 
1565 /* Line 1455 of yacc.c  */
1566 #line 224 "ktrfmt.y"
1567     {
1568 	evtr_var_t var;
1569 	if (!(yyvsp[(1) - (1)].tok)->str)
1570 		parse_err("out of memory");
1571 	printd(PARSE, "TOK_CTOR\n");
1572 	printd(PARSE, "tok: %p, str = %p\n", (yyvsp[(1) - (1)].tok), (yyvsp[(1) - (1)].tok)->str);
1573 	var = evtr_var_new(uniq_varname());
1574 	var->val.type = EVTR_VAL_CTOR;
1575 	var->val.ctor.name = (yyvsp[(1) - (1)].tok)->str;
1576 	TAILQ_INIT(&var->val.ctor.args);
1577 	tok_free((yyvsp[(1) - (1)].tok));
1578 	(yyval.var) = var;
1579  ;}
1580     break;
1581 
1582   case 10:
1583 
1584 /* Line 1455 of yacc.c  */
1585 #line 237 "ktrfmt.y"
1586     {
1587 	evtr_variable_value_t val;
1588 	if (!(yyvsp[(1) - (2)].tok)->str)
1589 		parse_err("out of memory");
1590 	printd(PARSE, "TOK_CTOR\n");
1591 	printd(PARSE, "tok: %p, str = %p\n", (yyvsp[(1) - (2)].tok), (yyvsp[(1) - (2)].tok)->str);
1592 	(yyvsp[(2) - (2)].var)->val.ctor.name = (yyvsp[(1) - (2)].tok)->str;
1593 	(yyval.var) = (yyvsp[(2) - (2)].var);
1594 	printd(PARSE, "CTOR: %s\n", (yyvsp[(1) - (2)].tok)->str);
1595 	TAILQ_FOREACH(val, &(yyvsp[(2) - (2)].var)->val.ctor.args, link) {
1596 		switch (val->type) {
1597 		case EVTR_VAL_INT:
1598 			printd(PARSE, "\t%jd\n", val->num);
1599 			break;
1600 		case EVTR_VAL_STR:
1601 			printd(PARSE, "\t\"%s\"\n", val->str);
1602 			break;
1603 		case EVTR_VAL_NIL:
1604 			assert(!"can't get here");
1605 		default:
1606 			;
1607 		}
1608 	}
1609  ;}
1610     break;
1611 
1612   case 11:
1613 
1614 /* Line 1455 of yacc.c  */
1615 #line 262 "ktrfmt.y"
1616     {
1617 	evtr_var_t var;
1618 	if (!(yyvsp[(1) - (1)].tok)->str)
1619 		parse_err("out of memory");
1620 	printd(PARSE, "TOK_ID\n");
1621 	printd(PARSE, "tok: %p, str = %p\n", (yyvsp[(1) - (1)].tok), (yyvsp[(1) - (1)].tok)->str);
1622 	var = symtab_find(ctx->symtab, (yyvsp[(1) - (1)].tok)->str);
1623 	if (!var) {
1624 		if (!(var = evtr_var_new((yyvsp[(1) - (1)].tok)->str))) {
1625 			tok_free((yyvsp[(1) - (1)].tok));
1626 			parse_err("out of memory");
1627 		}
1628 		printd(PARSE, "creating var %s\n", (yyvsp[(1) - (1)].tok)->str);
1629 		symtab_insert(ctx->symtab, (yyvsp[(1) - (1)].tok)->str, var);
1630 	}
1631 	(yyval.var) = var;
1632 	tok_free((yyvsp[(1) - (1)].tok));
1633  ;}
1634     break;
1635 
1636   case 12:
1637 
1638 /* Line 1455 of yacc.c  */
1639 #line 280 "ktrfmt.y"
1640     {
1641 	(yyval.var) = (yyvsp[(1) - (1)].var);
1642   ;}
1643     break;
1644 
1645   case 13:
1646 
1647 /* Line 1455 of yacc.c  */
1648 #line 284 "ktrfmt.y"
1649     {
1650 	evtr_var_t var;
1651 
1652 	if (index_hash(ctx, (yyvsp[(1) - (4)].var)->name, &(yyvsp[(3) - (4)].var)->val, &var))
1653 		YYABORT;
1654 	(yyval.var) = var;
1655  ;}
1656     break;
1657 
1658   case 14:
1659 
1660 /* Line 1455 of yacc.c  */
1661 #line 291 "ktrfmt.y"
1662     {
1663 	evtr_var_t var, tmp;
1664 	if (!(yyvsp[(3) - (3)].tok)->str)
1665 		parse_err("out of memory");
1666 	tmp = evtr_var_new(uniq_varname());
1667 	tmp->val.type = EVTR_VAL_STR;
1668 	tmp->val.str = (yyvsp[(3) - (3)].tok)->str;
1669 
1670 	if (index_hash(ctx, (yyvsp[(1) - (3)].var)->name, &tmp->val, &var))
1671 		YYABORT;
1672 	tok_free((yyvsp[(3) - (3)].tok));
1673 	(yyval.var) = var;
1674  ;}
1675     break;
1676 
1677   case 15:
1678 
1679 /* Line 1455 of yacc.c  */
1680 #line 304 "ktrfmt.y"
1681     {
1682 	(yyval.var) = (yyvsp[(1) - (1)].var);
1683  ;}
1684     break;
1685 
1686   case 16:
1687 
1688 /* Line 1455 of yacc.c  */
1689 #line 308 "ktrfmt.y"
1690     {
1691 	(yyval.var) = (yyvsp[(1) - (1)].var);
1692  ;}
1693     break;
1694 
1695   case 17:
1696 
1697 /* Line 1455 of yacc.c  */
1698 #line 312 "ktrfmt.y"
1699     {
1700 	(yyvsp[(1) - (3)].var)->val = (yyvsp[(3) - (3)].var)->val;
1701 	ctx->ev->type = EVTR_TYPE_STMT;
1702 	ctx->ev->stmt.var = (yyvsp[(1) - (3)].var);
1703 	ctx->ev->stmt.val = &(yyvsp[(3) - (3)].var)->val;
1704 	ctx->ev->stmt.op = EVTR_OP_SET;
1705  ;}
1706     break;
1707 
1708   case 18:
1709 
1710 /* Line 1455 of yacc.c  */
1711 #line 319 "ktrfmt.y"
1712     {
1713 	(yyvsp[(1) - (3)].var)->val = (yyvsp[(3) - (3)].var)->val;
1714 	ctx->ev->type = EVTR_TYPE_STMT;
1715 	ctx->ev->stmt.var = (yyvsp[(1) - (3)].var);
1716 	ctx->ev->stmt.val = &(yyvsp[(3) - (3)].var)->val;
1717 	ctx->ev->stmt.op = EVTR_OP_SET;
1718  ;}
1719     break;
1720 
1721   case 19:
1722 
1723 /* Line 1455 of yacc.c  */
1724 #line 327 "ktrfmt.y"
1725     {
1726 	(yyval.na) = (yyvsp[(1) - (1)].na);
1727  ;}
1728     break;
1729 
1730 
1731 
1732 /* Line 1455 of yacc.c  */
1733 #line 1734 "ktrfmt.tab.c"
1734       default: break;
1735     }
1736   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
1737 
1738   YYPOPSTACK (yylen);
1739   yylen = 0;
1740   YY_STACK_PRINT (yyss, yyssp);
1741 
1742   *++yyvsp = yyval;
1743 
1744   /* Now `shift' the result of the reduction.  Determine what state
1745      that goes to, based on the state we popped back to and the rule
1746      number reduced by.  */
1747 
1748   yyn = yyr1[yyn];
1749 
1750   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1751   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1752     yystate = yytable[yystate];
1753   else
1754     yystate = yydefgoto[yyn - YYNTOKENS];
1755 
1756   goto yynewstate;
1757 
1758 
1759 /*------------------------------------.
1760 | yyerrlab -- here on detecting error |
1761 `------------------------------------*/
1762 yyerrlab:
1763   /* If not already recovering from an error, report this error.  */
1764   if (!yyerrstatus)
1765     {
1766       ++yynerrs;
1767 #if ! YYERROR_VERBOSE
1768       yyerror (ctx, YY_("syntax error"));
1769 #else
1770       {
1771 	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
1772 	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
1773 	  {
1774 	    YYSIZE_T yyalloc = 2 * yysize;
1775 	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
1776 	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
1777 	    if (yymsg != yymsgbuf)
1778 	      YYSTACK_FREE (yymsg);
1779 	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
1780 	    if (yymsg)
1781 	      yymsg_alloc = yyalloc;
1782 	    else
1783 	      {
1784 		yymsg = yymsgbuf;
1785 		yymsg_alloc = sizeof yymsgbuf;
1786 	      }
1787 	  }
1788 
1789 	if (0 < yysize && yysize <= yymsg_alloc)
1790 	  {
1791 	    (void) yysyntax_error (yymsg, yystate, yychar);
1792 	    yyerror (ctx, yymsg);
1793 	  }
1794 	else
1795 	  {
1796 	    yyerror (ctx, YY_("syntax error"));
1797 	    if (yysize != 0)
1798 	      goto yyexhaustedlab;
1799 	  }
1800       }
1801 #endif
1802     }
1803 
1804 
1805 
1806   if (yyerrstatus == 3)
1807     {
1808       /* If just tried and failed to reuse lookahead token after an
1809 	 error, discard it.  */
1810 
1811       if (yychar <= YYEOF)
1812 	{
1813 	  /* Return failure if at end of input.  */
1814 	  if (yychar == YYEOF)
1815 	    YYABORT;
1816 	}
1817       else
1818 	{
1819 	  yydestruct ("Error: discarding",
1820 		      yytoken, &yylval, ctx);
1821 	  yychar = YYEMPTY;
1822 	}
1823     }
1824 
1825   /* Else will try to reuse lookahead token after shifting the error
1826      token.  */
1827   goto yyerrlab1;
1828 
1829 
1830 /*---------------------------------------------------.
1831 | yyerrorlab -- error raised explicitly by YYERROR.  |
1832 `---------------------------------------------------*/
1833 yyerrorlab:
1834 
1835   /* Pacify compilers like GCC when the user code never invokes
1836      YYERROR and the label yyerrorlab therefore never appears in user
1837      code.  */
1838   if (/*CONSTCOND*/ 0)
1839      goto yyerrorlab;
1840 
1841   /* Do not reclaim the symbols of the rule which action triggered
1842      this YYERROR.  */
1843   YYPOPSTACK (yylen);
1844   yylen = 0;
1845   YY_STACK_PRINT (yyss, yyssp);
1846   yystate = *yyssp;
1847   goto yyerrlab1;
1848 
1849 
1850 /*-------------------------------------------------------------.
1851 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
1852 `-------------------------------------------------------------*/
1853 yyerrlab1:
1854   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
1855 
1856   for (;;)
1857     {
1858       yyn = yypact[yystate];
1859       if (yyn != YYPACT_NINF)
1860 	{
1861 	  yyn += YYTERROR;
1862 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1863 	    {
1864 	      yyn = yytable[yyn];
1865 	      if (0 < yyn)
1866 		break;
1867 	    }
1868 	}
1869 
1870       /* Pop the current state because it cannot handle the error token.  */
1871       if (yyssp == yyss)
1872 	YYABORT;
1873 
1874 
1875       yydestruct ("Error: popping",
1876 		  yystos[yystate], yyvsp, ctx);
1877       YYPOPSTACK (1);
1878       yystate = *yyssp;
1879       YY_STACK_PRINT (yyss, yyssp);
1880     }
1881 
1882   *++yyvsp = yylval;
1883 
1884 
1885   /* Shift the error token.  */
1886   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
1887 
1888   yystate = yyn;
1889   goto yynewstate;
1890 
1891 
1892 /*-------------------------------------.
1893 | yyacceptlab -- YYACCEPT comes here.  |
1894 `-------------------------------------*/
1895 yyacceptlab:
1896   yyresult = 0;
1897   goto yyreturn;
1898 
1899 /*-----------------------------------.
1900 | yyabortlab -- YYABORT comes here.  |
1901 `-----------------------------------*/
1902 yyabortlab:
1903   yyresult = 1;
1904   goto yyreturn;
1905 
1906 #if !defined(yyoverflow) || YYERROR_VERBOSE
1907 /*-------------------------------------------------.
1908 | yyexhaustedlab -- memory exhaustion comes here.  |
1909 `-------------------------------------------------*/
1910 yyexhaustedlab:
1911   yyerror (ctx, YY_("memory exhausted"));
1912   yyresult = 2;
1913   /* Fall through.  */
1914 #endif
1915 
1916 yyreturn:
1917   if (yychar != YYEMPTY)
1918      yydestruct ("Cleanup: discarding lookahead",
1919 		 yytoken, &yylval, ctx);
1920   /* Do not reclaim the symbols of the rule which action triggered
1921      this YYABORT or YYACCEPT.  */
1922   YYPOPSTACK (yylen);
1923   YY_STACK_PRINT (yyss, yyssp);
1924   while (yyssp != yyss)
1925     {
1926       yydestruct ("Cleanup: popping",
1927 		  yystos[*yyssp], yyvsp, ctx);
1928       YYPOPSTACK (1);
1929     }
1930 #ifndef yyoverflow
1931   if (yyss != yyssa)
1932     YYSTACK_FREE (yyss);
1933 #endif
1934 #if YYERROR_VERBOSE
1935   if (yymsg != yymsgbuf)
1936     YYSTACK_FREE (yymsg);
1937 #endif
1938   /* Make sure YYID is used.  */
1939   return YYID (yyresult);
1940 }
1941 
1942 
1943 
1944 /* Line 1675 of yacc.c  */
1945 #line 332 "ktrfmt.y"
1946 
1947 
1948 void * __ktrfmt_scan_string(const char *);
1949 void __ktrfmt_delete_buffer(void *);
1950 
1951 void
1952 __ktrfmt_error (struct ktrfmt_parse_ctx *ctx, const char *s)
1953 {
1954 	do_parse_err(ctx, s);
1955 }
1956 
1957 int
1958 parse_string(evtr_event_t ev, struct symtab *symtab, const char *str,
1959 	     char *errbuf, size_t errbufsz)
1960 {
1961 	void *bufstate;
1962 	int ret;
1963 	struct ktrfmt_parse_ctx ctx;
1964 
1965 	printd(PARSE, "parsing \"%s\"\n", str);
1966 	ctx.ev = ev;
1967 	ctx.symtab = symtab;
1968 	ctx.errbuf = errbuf;
1969 	ctx.errbuf[0] = '\0';
1970 	ctx.errbufsz = errbufsz;
1971 	ctx.err = 0;
1972 	bufstate = __ktrfmt_scan_string(str);
1973 	ret = __ktrfmt_parse(&ctx);
1974 	__ktrfmt_delete_buffer(bufstate);
1975 
1976 	return ret;
1977 }
1978 
1979 int
1980 parse_var(const char *str, struct symtab *symtab, struct evtr_variable **var,
1981 	  char *errbuf, size_t errbufsz)
1982 {
1983 	void *bufstate;
1984 	int ret;
1985 	struct ktrfmt_parse_ctx ctx;
1986 
1987 	printd(PARSE, "parsing \"%s\"\n", str);
1988 	ctx.ev = NULL;
1989 	ctx.symtab = symtab;
1990 	ctx.var = NULL;
1991 	ctx.errbuf = errbuf;
1992 	ctx.errbuf[0] = '\0';
1993 	ctx.errbufsz = errbufsz;
1994 	ctx.err = 0;
1995 	bufstate = __ktrfmt_scan_string(str);
1996 	ret = __ktrfmt_parse(&ctx);
1997 	__ktrfmt_delete_buffer(bufstate);
1998 
1999 	*var = ctx.var;
2000 	return ret;
2001 }
2002 
2003