1/* A Bison parser, made by GNU Bison 2.3.  */
2
3/* Skeleton implementation for Bison's Yacc-like parsers in C
4
5   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6   Free Software Foundation, Inc.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software
20   Foundation, Inc., 51 Franklin Street, Fifth Floor,
21   Boston, MA 02110-1301, USA.  */
22
23/* As a special exception, you may create a larger work that contains
24   part or all of the Bison parser skeleton and distribute that work
25   under terms of your choice, so long as that work isn't itself a
26   parser generator using the skeleton or a modified version thereof
27   as a parser skeleton.  Alternatively, if you modify or redistribute
28   the parser skeleton itself, you may (at your option) remove this
29   special exception, which will cause the skeleton and the resulting
30   Bison output files to be licensed under the GNU General Public
31   License without this special exception.
32
33   This special exception was added by the Free Software Foundation in
34   version 2.2 of Bison.  */
35
36/* C LALR(1) parser skeleton written by Richard Stallman, by
37   simplifying the original so-called "semantic" parser.  */
38
39/* All symbols defined below should begin with yy or YY, to avoid
40   infringing on user name space.  This should be done even for local
41   variables, as they might otherwise be expanded by user macros.
42   There are some unavoidable exceptions within include files to
43   define necessary library symbols; they are noted "INFRINGES ON
44   USER NAME SPACE" below.  */
45
46/* Identify Bison output.  */
47#define YYBISON 1
48
49/* Bison version.  */
50#define YYBISON_VERSION "2.3"
51
52/* Skeleton name.  */
53#define YYSKELETON_NAME "yacc.c"
54
55/* Pure parsers.  */
56#define YYPURE 0
57
58/* Using locations.  */
59#define YYLSP_NEEDED 0
60
61
62
63/* Tokens.  */
64#ifndef YYTOKENTYPE
65# define YYTOKENTYPE
66   /* Put the tokens into the symbol table, so that GDB and other debuggers
67      know about them.  */
68   enum yytokentype {
69     kw_ABSENT = 258,
70     kw_ABSTRACT_SYNTAX = 259,
71     kw_ALL = 260,
72     kw_APPLICATION = 261,
73     kw_AUTOMATIC = 262,
74     kw_BEGIN = 263,
75     kw_BIT = 264,
76     kw_BMPString = 265,
77     kw_BOOLEAN = 266,
78     kw_BY = 267,
79     kw_CHARACTER = 268,
80     kw_CHOICE = 269,
81     kw_CLASS = 270,
82     kw_COMPONENT = 271,
83     kw_COMPONENTS = 272,
84     kw_CONSTRAINED = 273,
85     kw_CONTAINING = 274,
86     kw_DEFAULT = 275,
87     kw_DEFINITIONS = 276,
88     kw_EMBEDDED = 277,
89     kw_ENCODED = 278,
90     kw_END = 279,
91     kw_ENUMERATED = 280,
92     kw_EXCEPT = 281,
93     kw_EXPLICIT = 282,
94     kw_EXPORTS = 283,
95     kw_EXTENSIBILITY = 284,
96     kw_EXTERNAL = 285,
97     kw_FALSE = 286,
98     kw_FROM = 287,
99     kw_GeneralString = 288,
100     kw_GeneralizedTime = 289,
101     kw_GraphicString = 290,
102     kw_IA5String = 291,
103     kw_IDENTIFIER = 292,
104     kw_IMPLICIT = 293,
105     kw_IMPLIED = 294,
106     kw_IMPORTS = 295,
107     kw_INCLUDES = 296,
108     kw_INSTANCE = 297,
109     kw_INTEGER = 298,
110     kw_INTERSECTION = 299,
111     kw_ISO646String = 300,
112     kw_MAX = 301,
113     kw_MIN = 302,
114     kw_MINUS_INFINITY = 303,
115     kw_NULL = 304,
116     kw_NumericString = 305,
117     kw_OBJECT = 306,
118     kw_OCTET = 307,
119     kw_OF = 308,
120     kw_OPTIONAL = 309,
121     kw_ObjectDescriptor = 310,
122     kw_PATTERN = 311,
123     kw_PDV = 312,
124     kw_PLUS_INFINITY = 313,
125     kw_PRESENT = 314,
126     kw_PRIVATE = 315,
127     kw_PrintableString = 316,
128     kw_REAL = 317,
129     kw_RELATIVE_OID = 318,
130     kw_SEQUENCE = 319,
131     kw_SET = 320,
132     kw_SIZE = 321,
133     kw_STRING = 322,
134     kw_SYNTAX = 323,
135     kw_T61String = 324,
136     kw_TAGS = 325,
137     kw_TRUE = 326,
138     kw_TYPE_IDENTIFIER = 327,
139     kw_TeletexString = 328,
140     kw_UNION = 329,
141     kw_UNIQUE = 330,
142     kw_UNIVERSAL = 331,
143     kw_UTCTime = 332,
144     kw_UTF8String = 333,
145     kw_UniversalString = 334,
146     kw_VideotexString = 335,
147     kw_VisibleString = 336,
148     kw_WITH = 337,
149     RANGE = 338,
150     EEQUAL = 339,
151     ELLIPSIS = 340,
152     IDENTIFIER = 341,
153     referencename = 342,
154     STRING = 343,
155     NUMBER = 344
156   };
157#endif
158/* Tokens.  */
159#define kw_ABSENT 258
160#define kw_ABSTRACT_SYNTAX 259
161#define kw_ALL 260
162#define kw_APPLICATION 261
163#define kw_AUTOMATIC 262
164#define kw_BEGIN 263
165#define kw_BIT 264
166#define kw_BMPString 265
167#define kw_BOOLEAN 266
168#define kw_BY 267
169#define kw_CHARACTER 268
170#define kw_CHOICE 269
171#define kw_CLASS 270
172#define kw_COMPONENT 271
173#define kw_COMPONENTS 272
174#define kw_CONSTRAINED 273
175#define kw_CONTAINING 274
176#define kw_DEFAULT 275
177#define kw_DEFINITIONS 276
178#define kw_EMBEDDED 277
179#define kw_ENCODED 278
180#define kw_END 279
181#define kw_ENUMERATED 280
182#define kw_EXCEPT 281
183#define kw_EXPLICIT 282
184#define kw_EXPORTS 283
185#define kw_EXTENSIBILITY 284
186#define kw_EXTERNAL 285
187#define kw_FALSE 286
188#define kw_FROM 287
189#define kw_GeneralString 288
190#define kw_GeneralizedTime 289
191#define kw_GraphicString 290
192#define kw_IA5String 291
193#define kw_IDENTIFIER 292
194#define kw_IMPLICIT 293
195#define kw_IMPLIED 294
196#define kw_IMPORTS 295
197#define kw_INCLUDES 296
198#define kw_INSTANCE 297
199#define kw_INTEGER 298
200#define kw_INTERSECTION 299
201#define kw_ISO646String 300
202#define kw_MAX 301
203#define kw_MIN 302
204#define kw_MINUS_INFINITY 303
205#define kw_NULL 304
206#define kw_NumericString 305
207#define kw_OBJECT 306
208#define kw_OCTET 307
209#define kw_OF 308
210#define kw_OPTIONAL 309
211#define kw_ObjectDescriptor 310
212#define kw_PATTERN 311
213#define kw_PDV 312
214#define kw_PLUS_INFINITY 313
215#define kw_PRESENT 314
216#define kw_PRIVATE 315
217#define kw_PrintableString 316
218#define kw_REAL 317
219#define kw_RELATIVE_OID 318
220#define kw_SEQUENCE 319
221#define kw_SET 320
222#define kw_SIZE 321
223#define kw_STRING 322
224#define kw_SYNTAX 323
225#define kw_T61String 324
226#define kw_TAGS 325
227#define kw_TRUE 326
228#define kw_TYPE_IDENTIFIER 327
229#define kw_TeletexString 328
230#define kw_UNION 329
231#define kw_UNIQUE 330
232#define kw_UNIVERSAL 331
233#define kw_UTCTime 332
234#define kw_UTF8String 333
235#define kw_UniversalString 334
236#define kw_VideotexString 335
237#define kw_VisibleString 336
238#define kw_WITH 337
239#define RANGE 338
240#define EEQUAL 339
241#define ELLIPSIS 340
242#define IDENTIFIER 341
243#define referencename 342
244#define STRING 343
245#define NUMBER 344
246
247
248
249
250/* Copy the first part of user declarations.  */
251#line 38 "asn1parse.y"
252
253
254#include <config.h>
255
256#include <stdio.h>
257#include <stdlib.h>
258#include <string.h>
259#include "symbol.h"
260#include "lex.h"
261#include "gen_locl.h"
262#include "der.h"
263
264RCSID("$Id$");
265
266static Type *new_type (Typetype t);
267static struct constraint_spec *new_constraint_spec(enum ctype);
268static Type *new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype);
269void yyerror (const char *);
270static struct objid *new_objid(const char *label, int value);
271static void add_oid_to_tail(struct objid *, struct objid *);
272static void fix_labels(Symbol *s);
273
274struct string_list {
275    char *string;
276    struct string_list *next;
277};
278
279/* Declarations for Bison */
280#define YYMALLOC malloc
281#define YYFREE   free
282
283
284
285/* Enabling traces.  */
286#ifndef YYDEBUG
287# define YYDEBUG 1
288#endif
289
290/* Enabling verbose error messages.  */
291#ifdef YYERROR_VERBOSE
292# undef YYERROR_VERBOSE
293# define YYERROR_VERBOSE 1
294#else
295# define YYERROR_VERBOSE 0
296#endif
297
298/* Enabling the token table.  */
299#ifndef YYTOKEN_TABLE
300# define YYTOKEN_TABLE 0
301#endif
302
303#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
304typedef union YYSTYPE
305#line 71 "asn1parse.y"
306{
307    int64_t constant;
308    struct value *value;
309    struct range *range;
310    char *name;
311    Type *type;
312    Member *member;
313    struct objid *objid;
314    char *defval;
315    struct string_list *sl;
316    struct tagtype tag;
317    struct memhead *members;
318    struct constraint_spec *constraint_spec;
319}
320/* Line 193 of yacc.c.  */
321#line 322 "asn1parse.c"
322	YYSTYPE;
323# define yystype YYSTYPE /* obsolescent; will be withdrawn */
324# define YYSTYPE_IS_DECLARED 1
325# define YYSTYPE_IS_TRIVIAL 1
326#endif
327
328
329
330/* Copy the second part of user declarations.  */
331
332
333/* Line 216 of yacc.c.  */
334#line 335 "asn1parse.c"
335
336#ifdef short
337# undef short
338#endif
339
340#ifdef YYTYPE_UINT8
341typedef YYTYPE_UINT8 yytype_uint8;
342#else
343typedef unsigned char yytype_uint8;
344#endif
345
346#ifdef YYTYPE_INT8
347typedef YYTYPE_INT8 yytype_int8;
348#elif (defined __STDC__ || defined __C99__FUNC__ \
349     || defined __cplusplus || defined _MSC_VER)
350typedef signed char yytype_int8;
351#else
352typedef short int yytype_int8;
353#endif
354
355#ifdef YYTYPE_UINT16
356typedef YYTYPE_UINT16 yytype_uint16;
357#else
358typedef unsigned short int yytype_uint16;
359#endif
360
361#ifdef YYTYPE_INT16
362typedef YYTYPE_INT16 yytype_int16;
363#else
364typedef short int yytype_int16;
365#endif
366
367#ifndef YYSIZE_T
368# ifdef __SIZE_TYPE__
369#  define YYSIZE_T __SIZE_TYPE__
370# elif defined size_t
371#  define YYSIZE_T size_t
372# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
373     || defined __cplusplus || defined _MSC_VER)
374#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
375#  define YYSIZE_T size_t
376# else
377#  define YYSIZE_T unsigned int
378# endif
379#endif
380
381#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
382
383#ifndef YY_
384# if defined YYENABLE_NLS && YYENABLE_NLS
385#  if ENABLE_NLS
386#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
387#   define YY_(msgid) dgettext ("bison-runtime", msgid)
388#  endif
389# endif
390# ifndef YY_
391#  define YY_(msgid) msgid
392# endif
393#endif
394
395/* Suppress unused-variable warnings by "using" E.  */
396#if ! defined lint || defined __GNUC__
397# define YYUSE(e) ((void) (e))
398#else
399# define YYUSE(e) /* empty */
400#endif
401
402/* Identity function, used to suppress warnings about constant conditions.  */
403#ifndef lint
404# define YYID(n) (n)
405#else
406#if (defined __STDC__ || defined __C99__FUNC__ \
407     || defined __cplusplus || defined _MSC_VER)
408static int
409YYID (int i)
410#else
411static int
412YYID (i)
413    int i;
414#endif
415{
416  return i;
417}
418#endif
419
420#if ! defined yyoverflow || YYERROR_VERBOSE
421
422/* The parser invokes alloca or malloc; define the necessary symbols.  */
423
424# ifdef YYSTACK_USE_ALLOCA
425#  if YYSTACK_USE_ALLOCA
426#   ifdef __GNUC__
427#    define YYSTACK_ALLOC __builtin_alloca
428#   elif defined __BUILTIN_VA_ARG_INCR
429#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
430#   elif defined _AIX
431#    define YYSTACK_ALLOC __alloca
432#   elif defined _MSC_VER
433#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
434#    define alloca _alloca
435#   else
436#    define YYSTACK_ALLOC alloca
437#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
438     || defined __cplusplus || defined _MSC_VER)
439#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
440#     ifndef _STDLIB_H
441#      define _STDLIB_H 1
442#     endif
443#    endif
444#   endif
445#  endif
446# endif
447
448# ifdef YYSTACK_ALLOC
449   /* Pacify GCC's `empty if-body' warning.  */
450#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
451#  ifndef YYSTACK_ALLOC_MAXIMUM
452    /* The OS might guarantee only one guard page at the bottom of the stack,
453       and a page size can be as small as 4096 bytes.  So we cannot safely
454       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
455       to allow for a few compiler-allocated temporary stack slots.  */
456#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
457#  endif
458# else
459#  define YYSTACK_ALLOC YYMALLOC
460#  define YYSTACK_FREE YYFREE
461#  ifndef YYSTACK_ALLOC_MAXIMUM
462#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
463#  endif
464#  if (defined __cplusplus && ! defined _STDLIB_H \
465       && ! ((defined YYMALLOC || defined malloc) \
466	     && (defined YYFREE || defined free)))
467#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
468#   ifndef _STDLIB_H
469#    define _STDLIB_H 1
470#   endif
471#  endif
472#  ifndef YYMALLOC
473#   define YYMALLOC malloc
474#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
475     || defined __cplusplus || defined _MSC_VER)
476void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
477#   endif
478#  endif
479#  ifndef YYFREE
480#   define YYFREE free
481#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
482     || defined __cplusplus || defined _MSC_VER)
483void free (void *); /* INFRINGES ON USER NAME SPACE */
484#   endif
485#  endif
486# endif
487#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
488
489
490#if (! defined yyoverflow \
491     && (! defined __cplusplus \
492	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
493
494/* A type that is properly aligned for any stack member.  */
495union yyalloc
496{
497  yytype_int16 yyss;
498  YYSTYPE yyvs;
499  };
500
501/* The size of the maximum gap between one aligned stack and the next.  */
502# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
503
504/* The size of an array large to enough to hold all stacks, each with
505   N elements.  */
506# define YYSTACK_BYTES(N) \
507     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
508      + YYSTACK_GAP_MAXIMUM)
509
510/* Copy COUNT objects from FROM to TO.  The source and destination do
511   not overlap.  */
512# ifndef YYCOPY
513#  if defined __GNUC__ && 1 < __GNUC__
514#   define YYCOPY(To, From, Count) \
515      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
516#  else
517#   define YYCOPY(To, From, Count)		\
518      do					\
519	{					\
520	  YYSIZE_T yyi;				\
521	  for (yyi = 0; yyi < (Count); yyi++)	\
522	    (To)[yyi] = (From)[yyi];		\
523	}					\
524      while (YYID (0))
525#  endif
526# endif
527
528/* Relocate STACK from its old location to the new one.  The
529   local variables YYSIZE and YYSTACKSIZE give the old and new number of
530   elements in the stack, and YYPTR gives the new location of the
531   stack.  Advance YYPTR to a properly aligned location for the next
532   stack.  */
533# define YYSTACK_RELOCATE(Stack)					\
534    do									\
535      {									\
536	YYSIZE_T yynewbytes;						\
537	YYCOPY (&yyptr->Stack, Stack, yysize);				\
538	Stack = &yyptr->Stack;						\
539	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
540	yyptr += yynewbytes / sizeof (*yyptr);				\
541      }									\
542    while (YYID (0))
543
544#endif
545
546/* YYFINAL -- State number of the termination state.  */
547#define YYFINAL  6
548/* YYLAST -- Last index in YYTABLE.  */
549#define YYLAST   203
550
551/* YYNTOKENS -- Number of terminals.  */
552#define YYNTOKENS  98
553/* YYNNTS -- Number of nonterminals.  */
554#define YYNNTS  69
555/* YYNRULES -- Number of rules.  */
556#define YYNRULES  140
557/* YYNRULES -- Number of states.  */
558#define YYNSTATES  220
559
560/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
561#define YYUNDEFTOK  2
562#define YYMAXUTOK   344
563
564#define YYTRANSLATE(YYX)						\
565  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
566
567/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
568static const yytype_uint8 yytranslate[] =
569{
570       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
571       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
572       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
573       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
574      92,    93,     2,     2,    91,     2,     2,     2,     2,     2,
575       2,     2,     2,     2,     2,     2,     2,     2,     2,    90,
576       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
577       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
578       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
579       2,    96,     2,    97,     2,     2,     2,     2,     2,     2,
580       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
581       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
582       2,     2,     2,    94,     2,    95,     2,     2,     2,     2,
583       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
584       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
585       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
586       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
587       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
588       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
589       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
590       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
591       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
592       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
593       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
594       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
595       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
596       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
597      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
598      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
599      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
600      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
601      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
602      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
603      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
604      85,    86,    87,    88,    89
605};
606
607#if YYDEBUG
608/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
609   YYRHS.  */
610static const yytype_uint16 yyprhs[] =
611{
612       0,     0,     3,    13,    16,    19,    22,    23,    26,    27,
613      31,    32,    36,    37,    39,    40,    42,    45,    50,    54,
614      57,    58,    60,    63,    65,    67,    71,    73,    77,    79,
615      81,    83,    85,    87,    89,    91,    93,    95,    97,    99,
616     101,   103,   105,   107,   109,   111,   113,   119,   125,   131,
617     135,   137,   140,   145,   147,   151,   155,   160,   165,   167,
618     170,   176,   179,   183,   185,   186,   189,   194,   198,   203,
619     208,   212,   216,   221,   223,   225,   227,   229,   231,   234,
620     238,   240,   242,   244,   247,   251,   257,   262,   266,   271,
621     272,   274,   276,   278,   279,   281,   283,   288,   290,   292,
622     294,   296,   298,   300,   302,   304,   306,   308,   312,   316,
623     319,   321,   324,   328,   330,   334,   339,   341,   342,   346,
624     347,   350,   355,   357,   359,   361,   363,   365,   367,   369,
625     371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
626     391
627};
628
629/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
630static const yytype_int16 yyrhs[] =
631{
632      99,     0,    -1,    86,   152,    21,   100,   101,    84,     8,
633     102,    24,    -1,    27,    70,    -1,    38,    70,    -1,     7,
634      70,    -1,    -1,    29,    39,    -1,    -1,   107,   103,   108,
635      -1,    -1,    40,   104,    90,    -1,    -1,   105,    -1,    -1,
636     106,    -1,   105,   106,    -1,   110,    32,    86,   152,    -1,
637      28,   110,    90,    -1,    28,     5,    -1,    -1,   109,    -1,
638     109,   108,    -1,   111,    -1,   144,    -1,    86,    91,   110,
639      -1,    86,    -1,    86,    84,   112,    -1,   113,    -1,   131,
640      -1,   134,    -1,   121,    -1,   114,    -1,   145,    -1,   130,
641      -1,   119,    -1,   116,    -1,   124,    -1,   122,    -1,   123,
642      -1,   126,    -1,   127,    -1,   128,    -1,   129,    -1,   140,
643      -1,    11,    -1,    92,   156,    83,   156,    93,    -1,    92,
644     156,    83,    46,    93,    -1,    92,    47,    83,   156,    93,
645      -1,    92,   156,    93,    -1,    43,    -1,    43,   115,    -1,
646      43,    94,   117,    95,    -1,   118,    -1,   117,    91,   118,
647      -1,   117,    91,    85,    -1,    86,    92,   164,    93,    -1,
648      25,    94,   120,    95,    -1,   117,    -1,     9,    67,    -1,
649       9,    67,    94,   150,    95,    -1,    51,    37,    -1,    52,
650      67,   125,    -1,    49,    -1,    -1,    66,   115,    -1,    64,
651      94,   147,    95,    -1,    64,    94,    95,    -1,    64,   125,
652      53,   112,    -1,    65,    94,   147,    95,    -1,    65,    94,
653      95,    -1,    65,    53,   112,    -1,    14,    94,   147,    95,
654      -1,   132,    -1,   133,    -1,    86,    -1,    34,    -1,    77,
655      -1,   112,   135,    -1,    92,   136,    93,    -1,   137,    -1,
656     138,    -1,   139,    -1,    19,   112,    -1,    23,    12,   156,
657      -1,    19,   112,    23,    12,   156,    -1,    18,    12,    94,
658      95,    -1,   141,   143,   112,    -1,    96,   142,    89,    97,
659      -1,    -1,    76,    -1,     6,    -1,    60,    -1,    -1,    27,
660      -1,    38,    -1,    86,   112,    84,   156,    -1,   146,    -1,
661      33,    -1,    73,    -1,    78,    -1,    61,    -1,    81,    -1,
662      36,    -1,    10,    -1,    79,    -1,   149,    -1,   147,    91,
663     149,    -1,   147,    91,    85,    -1,    86,   112,    -1,   148,
664      -1,   148,    54,    -1,   148,    20,   156,    -1,   151,    -1,
665     150,    91,   151,    -1,    86,    92,    89,    93,    -1,   153,
666      -1,    -1,    94,   154,    95,    -1,    -1,   155,   154,    -1,
667      86,    92,    89,    93,    -1,    86,    -1,    89,    -1,   157,
668      -1,   158,    -1,   162,    -1,   161,    -1,   163,    -1,   166,
669      -1,   165,    -1,   159,    -1,   160,    -1,    86,    -1,    88,
670      -1,    71,    -1,    31,    -1,   164,    -1,    89,    -1,    49,
671      -1,   153,    -1
672};
673
674/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
675static const yytype_uint16 yyrline[] =
676{
677       0,   239,   239,   246,   247,   249,   251,   254,   256,   259,
678     260,   263,   264,   267,   268,   271,   272,   275,   287,   293,
679     294,   297,   298,   301,   302,   305,   311,   319,   329,   330,
680     331,   334,   335,   336,   337,   338,   339,   340,   341,   342,
681     343,   344,   345,   346,   347,   350,   357,   367,   375,   383,
682     394,   399,   405,   413,   419,   424,   428,   441,   449,   452,
683     459,   467,   473,   482,   490,   491,   496,   502,   510,   519,
684     525,   533,   541,   548,   549,   552,   563,   568,   575,   591,
685     597,   600,   601,   604,   610,   618,   628,   634,   647,   656,
686     659,   663,   667,   674,   677,   681,   688,   699,   702,   707,
687     712,   717,   722,   727,   732,   737,   745,   751,   756,   767,
688     778,   784,   790,   798,   804,   811,   824,   825,   828,   835,
689     838,   849,   853,   864,   870,   871,   874,   875,   876,   877,
690     878,   881,   884,   887,   898,   906,   912,   920,   928,   931,
691     936
692};
693#endif
694
695#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
696/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
697   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
698static const char *const yytname[] =
699{
700  "$end", "error", "$undefined", "kw_ABSENT", "kw_ABSTRACT_SYNTAX",
701  "kw_ALL", "kw_APPLICATION", "kw_AUTOMATIC", "kw_BEGIN", "kw_BIT",
702  "kw_BMPString", "kw_BOOLEAN", "kw_BY", "kw_CHARACTER", "kw_CHOICE",
703  "kw_CLASS", "kw_COMPONENT", "kw_COMPONENTS", "kw_CONSTRAINED",
704  "kw_CONTAINING", "kw_DEFAULT", "kw_DEFINITIONS", "kw_EMBEDDED",
705  "kw_ENCODED", "kw_END", "kw_ENUMERATED", "kw_EXCEPT", "kw_EXPLICIT",
706  "kw_EXPORTS", "kw_EXTENSIBILITY", "kw_EXTERNAL", "kw_FALSE", "kw_FROM",
707  "kw_GeneralString", "kw_GeneralizedTime", "kw_GraphicString",
708  "kw_IA5String", "kw_IDENTIFIER", "kw_IMPLICIT", "kw_IMPLIED",
709  "kw_IMPORTS", "kw_INCLUDES", "kw_INSTANCE", "kw_INTEGER",
710  "kw_INTERSECTION", "kw_ISO646String", "kw_MAX", "kw_MIN",
711  "kw_MINUS_INFINITY", "kw_NULL", "kw_NumericString", "kw_OBJECT",
712  "kw_OCTET", "kw_OF", "kw_OPTIONAL", "kw_ObjectDescriptor", "kw_PATTERN",
713  "kw_PDV", "kw_PLUS_INFINITY", "kw_PRESENT", "kw_PRIVATE",
714  "kw_PrintableString", "kw_REAL", "kw_RELATIVE_OID", "kw_SEQUENCE",
715  "kw_SET", "kw_SIZE", "kw_STRING", "kw_SYNTAX", "kw_T61String", "kw_TAGS",
716  "kw_TRUE", "kw_TYPE_IDENTIFIER", "kw_TeletexString", "kw_UNION",
717  "kw_UNIQUE", "kw_UNIVERSAL", "kw_UTCTime", "kw_UTF8String",
718  "kw_UniversalString", "kw_VideotexString", "kw_VisibleString", "kw_WITH",
719  "RANGE", "EEQUAL", "ELLIPSIS", "IDENTIFIER", "referencename", "STRING",
720  "NUMBER", "';'", "','", "'('", "')'", "'{'", "'}'", "'['", "']'",
721  "$accept", "ModuleDefinition", "TagDefault", "ExtensionDefault",
722  "ModuleBody", "Imports", "SymbolsImported", "SymbolsFromModuleList",
723  "SymbolsFromModule", "Exports", "AssignmentList", "Assignment",
724  "referencenames", "TypeAssignment", "Type", "BuiltinType", "BooleanType",
725  "range", "IntegerType", "NamedNumberList", "NamedNumber",
726  "EnumeratedType", "Enumerations", "BitStringType",
727  "ObjectIdentifierType", "OctetStringType", "NullType", "size",
728  "SequenceType", "SequenceOfType", "SetType", "SetOfType", "ChoiceType",
729  "ReferencedType", "DefinedType", "UsefulType", "ConstrainedType",
730  "Constraint", "ConstraintSpec", "GeneralConstraint",
731  "ContentsConstraint", "UserDefinedConstraint", "TaggedType", "Tag",
732  "Class", "tagenv", "ValueAssignment", "CharacterStringType",
733  "RestrictedCharactedStringType", "ComponentTypeList", "NamedType",
734  "ComponentType", "NamedBitList", "NamedBit", "objid_opt", "objid",
735  "objid_list", "objid_element", "Value", "BuiltinValue",
736  "ReferencedValue", "DefinedValue", "Valuereference",
737  "CharacterStringValue", "BooleanValue", "IntegerValue", "SignedNumber",
738  "NullValue", "ObjectIdentifierValue", 0
739};
740#endif
741
742# ifdef YYPRINT
743/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
744   token YYLEX-NUM.  */
745static const yytype_uint16 yytoknum[] =
746{
747       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
748     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
749     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
750     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
751     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
752     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
753     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
754     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
755     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
756      59,    44,    40,    41,   123,   125,    91,    93
757};
758# endif
759
760/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
761static const yytype_uint8 yyr1[] =
762{
763       0,    98,    99,   100,   100,   100,   100,   101,   101,   102,
764     102,   103,   103,   104,   104,   105,   105,   106,   107,   107,
765     107,   108,   108,   109,   109,   110,   110,   111,   112,   112,
766     112,   113,   113,   113,   113,   113,   113,   113,   113,   113,
767     113,   113,   113,   113,   113,   114,   115,   115,   115,   115,
768     116,   116,   116,   117,   117,   117,   118,   119,   120,   121,
769     121,   122,   123,   124,   125,   125,   126,   126,   127,   128,
770     128,   129,   130,   131,   131,   132,   133,   133,   134,   135,
771     136,   137,   137,   138,   138,   138,   139,   140,   141,   142,
772     142,   142,   142,   143,   143,   143,   144,   145,   146,   146,
773     146,   146,   146,   146,   146,   146,   147,   147,   147,   148,
774     149,   149,   149,   150,   150,   151,   152,   152,   153,   154,
775     154,   155,   155,   155,   156,   156,   157,   157,   157,   157,
776     157,   158,   159,   160,   161,   162,   162,   163,   164,   165,
777     166
778};
779
780/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
781static const yytype_uint8 yyr2[] =
782{
783       0,     2,     9,     2,     2,     2,     0,     2,     0,     3,
784       0,     3,     0,     1,     0,     1,     2,     4,     3,     2,
785       0,     1,     2,     1,     1,     3,     1,     3,     1,     1,
786       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
787       1,     1,     1,     1,     1,     1,     5,     5,     5,     3,
788       1,     2,     4,     1,     3,     3,     4,     4,     1,     2,
789       5,     2,     3,     1,     0,     2,     4,     3,     4,     4,
790       3,     3,     4,     1,     1,     1,     1,     1,     2,     3,
791       1,     1,     1,     2,     3,     5,     4,     3,     4,     0,
792       1,     1,     1,     0,     1,     1,     4,     1,     1,     1,
793       1,     1,     1,     1,     1,     1,     1,     3,     3,     2,
794       1,     2,     3,     1,     3,     4,     1,     0,     3,     0,
795       2,     4,     1,     1,     1,     1,     1,     1,     1,     1,
796       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
797       1
798};
799
800/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
801   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
802   means the default is an error.  */
803static const yytype_uint8 yydefact[] =
804{
805       0,   117,     0,   119,     0,   116,     1,   122,   123,     0,
806     119,     6,     0,   118,   120,     0,     0,     0,     8,     0,
807       5,     3,     4,     0,     0,   121,     7,     0,    20,     0,
808       0,    12,    19,    26,     0,     2,    14,     0,     0,    18,
809       0,    13,    15,     0,     0,     9,    21,    23,    24,    25,
810      11,    16,     0,     0,   104,    45,     0,     0,    98,    76,
811     103,    50,    63,     0,     0,   101,    64,     0,    99,    77,
812     100,   105,   102,     0,    75,    89,     0,    28,    32,    36,
813      35,    31,    38,    39,    37,    40,    41,    42,    43,    34,
814      29,    73,    74,    30,    44,    93,    33,    97,    22,   117,
815      59,     0,     0,     0,     0,    51,    61,    64,     0,     0,
816       0,     0,     0,    27,    91,    92,    90,     0,     0,     0,
817      78,    94,    95,     0,    17,     0,     0,     0,   110,   106,
818       0,    58,    53,     0,   136,     0,   139,   135,   133,   134,
819     138,   140,     0,   124,   125,   131,   132,   127,   126,   128,
820     137,   130,   129,     0,    62,    65,    67,     0,     0,    71,
821      70,     0,     0,    96,     0,     0,     0,     0,    80,    81,
822      82,    87,     0,     0,   113,   109,     0,    72,     0,   111,
823       0,     0,    57,     0,     0,    49,    52,    66,    68,    69,
824      88,     0,    83,     0,    79,     0,     0,    60,   108,   107,
825     112,     0,    55,    54,     0,     0,     0,     0,     0,    84,
826       0,   114,    56,    48,    47,    46,    86,     0,   115,    85
827};
828
829/* YYDEFGOTO[NTERM-NUM].  */
830static const yytype_int16 yydefgoto[] =
831{
832      -1,     2,    18,    24,    30,    37,    40,    41,    42,    31,
833      45,    46,    43,    47,    76,    77,    78,   105,    79,   131,
834     132,    80,   133,    81,    82,    83,    84,   110,    85,    86,
835      87,    88,    89,    90,    91,    92,    93,   120,   167,   168,
836     169,   170,    94,    95,   117,   123,    48,    96,    97,   127,
837     128,   129,   173,   174,     4,   141,     9,    10,   142,   143,
838     144,   145,   146,   147,   148,   149,   150,   151,   152
839};
840
841/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
842   STATE-NUM.  */
843#define YYPACT_NINF -119
844static const yytype_int16 yypact[] =
845{
846     -43,   -56,    47,   -65,    29,  -119,  -119,   -31,  -119,   -25,
847     -65,     4,    -1,  -119,  -119,    17,    20,    26,    50,    13,
848    -119,  -119,  -119,    63,    24,  -119,  -119,   104,     8,    -2,
849      89,    74,  -119,    33,    25,  -119,    34,    39,    34,  -119,
850      37,    34,  -119,    98,    58,  -119,    39,  -119,  -119,  -119,
851    -119,  -119,    52,    66,  -119,  -119,    51,    53,  -119,  -119,
852    -119,   -79,  -119,   109,    81,  -119,   -60,   -48,  -119,  -119,
853    -119,  -119,  -119,   107,  -119,     2,   -74,  -119,  -119,  -119,
854    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
855    -119,  -119,  -119,  -119,  -119,   -18,  -119,  -119,  -119,   -56,
856      55,    65,    67,   -12,    67,  -119,  -119,    86,    68,   -70,
857     102,   107,   -69,    69,  -119,  -119,  -119,    73,    40,    10,
858    -119,  -119,  -119,   107,  -119,    71,   107,   -47,   -13,  -119,
859      72,    75,  -119,    70,  -119,    80,  -119,  -119,  -119,  -119,
860    -119,  -119,   -71,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
861    -119,  -119,  -119,   -46,  -119,  -119,  -119,   -39,   107,    69,
862    -119,   -38,    76,  -119,   155,   107,   157,    77,  -119,  -119,
863    -119,    69,    82,   -10,  -119,    69,   -22,  -119,    40,  -119,
864      87,    19,  -119,    40,     9,  -119,  -119,  -119,    69,  -119,
865    -119,    83,   -19,    40,  -119,    90,    71,  -119,  -119,  -119,
866    -119,    85,  -119,  -119,    88,    94,    96,    95,   163,  -119,
867      99,  -119,  -119,  -119,  -119,  -119,  -119,    40,  -119,  -119
868};
869
870/* YYPGOTO[NTERM-NUM].  */
871static const yytype_int16 yypgoto[] =
872{
873    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,   141,  -119,
874     137,  -119,   -15,  -119,   -72,  -119,  -119,    91,  -119,    92,
875      14,  -119,  -119,  -119,  -119,  -119,  -119,    84,  -119,  -119,
876    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
877    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,   -82,
878    -119,    18,  -119,     5,   101,     1,   187,  -119,  -118,  -119,
879    -119,  -119,  -119,  -119,  -119,  -119,    22,  -119,  -119
880};
881
882/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
883   positive, shift that token.  If negative, reduce the rule which
884   number is the opposite.  If zero, do what YYDEFACT says.
885   If YYTABLE_NINF, syntax error.  */
886#define YYTABLE_NINF -11
887static const yytype_int16 yytable[] =
888{
889     163,   113,     5,    32,   208,   111,   108,   178,   114,   121,
890     118,    15,   184,   103,    34,   104,   126,   126,   119,   134,
891     122,     7,   185,    49,     8,   156,   160,   157,   164,   165,
892     161,    16,   -10,   166,   109,   135,    29,   136,     3,   159,
893     134,   179,    17,     1,   176,   181,   112,     6,   177,   186,
894      11,   171,   176,   176,   175,   205,   187,   189,   136,   137,
895     200,    12,   115,   198,   126,   204,   206,    53,    54,    55,
896      13,   134,    56,   119,   138,   209,   139,   140,   116,    23,
897     137,   196,     3,    57,    33,   197,   188,    20,    19,   136,
898      21,    58,    59,   192,    60,   138,    22,   139,   140,   219,
899       5,    61,    26,     3,   202,   130,    25,    62,    27,    63,
900      64,   137,    28,    35,    36,    39,    53,    54,    55,    65,
901      33,    56,    66,    67,    38,    44,   138,    50,   139,   140,
902      52,    68,    57,   100,     3,    69,    70,    71,    99,    72,
903      58,    59,    73,    60,    74,   101,   106,   102,   107,   125,
904      61,   126,   108,   130,    75,   158,    62,   172,    63,    64,
905     103,   119,   162,   183,   180,   182,   181,   191,    65,   193,
906     194,    66,    67,   190,   195,   217,   140,   207,   212,   210,
907      68,   213,    51,    98,    69,    70,    71,   214,    72,   215,
908     216,   154,   218,    74,   199,   203,   153,    14,     0,   155,
909     124,   211,   201,    75
910};
911
912static const yytype_int16 yycheck[] =
913{
914     118,    73,     1,     5,    23,    53,    66,    20,     6,    27,
915      84,     7,    83,    92,    29,    94,    86,    86,    92,    31,
916      38,    86,    93,    38,    89,    95,    95,   109,    18,    19,
917     112,    27,    24,    23,    94,    47,    28,    49,    94,   111,
918      31,    54,    38,    86,    91,    91,    94,     0,    95,    95,
919      21,   123,    91,    91,   126,    46,    95,    95,    49,    71,
920     178,    92,    60,    85,    86,   183,   184,     9,    10,    11,
921      95,    31,    14,    92,    86,   193,    88,    89,    76,    29,
922      71,    91,    94,    25,    86,    95,   158,    70,    89,    49,
923      70,    33,    34,   165,    36,    86,    70,    88,    89,   217,
924      99,    43,    39,    94,    85,    86,    93,    49,    84,    51,
925      52,    71,     8,    24,    40,    90,     9,    10,    11,    61,
926      86,    14,    64,    65,    91,    86,    86,    90,    88,    89,
927      32,    73,    25,    67,    94,    77,    78,    79,    86,    81,
928      33,    34,    84,    36,    86,    94,    37,    94,    67,    94,
929      43,    86,    66,    86,    96,    53,    49,    86,    51,    52,
930      92,    92,    89,    83,    92,    95,    91,    12,    61,    12,
931      93,    64,    65,    97,    92,    12,    89,    94,    93,    89,
932      73,    93,    41,    46,    77,    78,    79,    93,    81,    93,
933      95,   107,    93,    86,   176,   181,   104,    10,    -1,   108,
934      99,   196,   180,    96
935};
936
937/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
938   symbol of state STATE-NUM.  */
939static const yytype_uint8 yystos[] =
940{
941       0,    86,    99,    94,   152,   153,     0,    86,    89,   154,
942     155,    21,    92,    95,   154,     7,    27,    38,   100,    89,
943      70,    70,    70,    29,   101,    93,    39,    84,     8,    28,
944     102,   107,     5,    86,   110,    24,    40,   103,    91,    90,
945     104,   105,   106,   110,    86,   108,   109,   111,   144,   110,
946      90,   106,    32,     9,    10,    11,    14,    25,    33,    34,
947      36,    43,    49,    51,    52,    61,    64,    65,    73,    77,
948      78,    79,    81,    84,    86,    96,   112,   113,   114,   116,
949     119,   121,   122,   123,   124,   126,   127,   128,   129,   130,
950     131,   132,   133,   134,   140,   141,   145,   146,   108,    86,
951      67,    94,    94,    92,    94,   115,    37,    67,    66,    94,
952     125,    53,    94,   112,     6,    60,    76,   142,    84,    92,
953     135,    27,    38,   143,   152,    94,    86,   147,   148,   149,
954      86,   117,   118,   120,    31,    47,    49,    71,    86,    88,
955      89,   153,   156,   157,   158,   159,   160,   161,   162,   163,
956     164,   165,   166,   117,   125,   115,    95,   147,    53,   112,
957      95,   147,    89,   156,    18,    19,    23,   136,   137,   138,
958     139,   112,    86,   150,   151,   112,    91,    95,    20,    54,
959      92,    91,    95,    83,    83,    93,    95,    95,   112,    95,
960      97,    12,   112,    12,    93,    92,    91,    95,    85,   149,
961     156,   164,    85,   118,   156,    46,   156,    94,    23,   156,
962      89,   151,    93,    93,    93,    93,    95,    12,    93,   156
963};
964
965#define yyerrok		(yyerrstatus = 0)
966#define yyclearin	(yychar = YYEMPTY)
967#define YYEMPTY		(-2)
968#define YYEOF		0
969
970#define YYACCEPT	goto yyacceptlab
971#define YYABORT		goto yyabortlab
972#define YYERROR		goto yyerrorlab
973
974
975/* Like YYERROR except do call yyerror.  This remains here temporarily
976   to ease the transition to the new meaning of YYERROR, for GCC.
977   Once GCC version 2 has supplanted version 1, this can go.  */
978
979#define YYFAIL		goto yyerrlab
980
981#define YYRECOVERING()  (!!yyerrstatus)
982
983#define YYBACKUP(Token, Value)					\
984do								\
985  if (yychar == YYEMPTY && yylen == 1)				\
986    {								\
987      yychar = (Token);						\
988      yylval = (Value);						\
989      yytoken = YYTRANSLATE (yychar);				\
990      YYPOPSTACK (1);						\
991      goto yybackup;						\
992    }								\
993  else								\
994    {								\
995      yyerror (YY_("syntax error: cannot back up")); \
996      YYERROR;							\
997    }								\
998while (YYID (0))
999
1000
1001#define YYTERROR	1
1002#define YYERRCODE	256
1003
1004
1005/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
1006   If N is 0, then set CURRENT to the empty location which ends
1007   the previous symbol: RHS[0] (always defined).  */
1008
1009#define YYRHSLOC(Rhs, K) ((Rhs)[K])
1010#ifndef YYLLOC_DEFAULT
1011# define YYLLOC_DEFAULT(Current, Rhs, N)				\
1012    do									\
1013      if (YYID (N))                                                    \
1014	{								\
1015	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
1016	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
1017	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
1018	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
1019	}								\
1020      else								\
1021	{								\
1022	  (Current).first_line   = (Current).last_line   =		\
1023	    YYRHSLOC (Rhs, 0).last_line;				\
1024	  (Current).first_column = (Current).last_column =		\
1025	    YYRHSLOC (Rhs, 0).last_column;				\
1026	}								\
1027    while (YYID (0))
1028#endif
1029
1030
1031/* YY_LOCATION_PRINT -- Print the location on the stream.
1032   This macro was not mandated originally: define only if we know
1033   we won't break user code: when these are the locations we know.  */
1034
1035#ifndef YY_LOCATION_PRINT
1036# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1037#  define YY_LOCATION_PRINT(File, Loc)			\
1038     fprintf (File, "%d.%d-%d.%d",			\
1039	      (Loc).first_line, (Loc).first_column,	\
1040	      (Loc).last_line,  (Loc).last_column)
1041# else
1042#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1043# endif
1044#endif
1045
1046
1047/* YYLEX -- calling `yylex' with the right arguments.  */
1048
1049#ifdef YYLEX_PARAM
1050# define YYLEX yylex (YYLEX_PARAM)
1051#else
1052# define YYLEX yylex ()
1053#endif
1054
1055/* Enable debugging if requested.  */
1056#if YYDEBUG
1057
1058# ifndef YYFPRINTF
1059#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1060#  define YYFPRINTF fprintf
1061# endif
1062
1063# define YYDPRINTF(Args)			\
1064do {						\
1065  if (yydebug)					\
1066    YYFPRINTF Args;				\
1067} while (YYID (0))
1068
1069# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
1070do {									  \
1071  if (yydebug)								  \
1072    {									  \
1073      YYFPRINTF (stderr, "%s ", Title);					  \
1074      yy_symbol_print (stderr,						  \
1075		  Type, Value); \
1076      YYFPRINTF (stderr, "\n");						  \
1077    }									  \
1078} while (YYID (0))
1079
1080
1081/*--------------------------------.
1082| Print this symbol on YYOUTPUT.  |
1083`--------------------------------*/
1084
1085/*ARGSUSED*/
1086#if (defined __STDC__ || defined __C99__FUNC__ \
1087     || defined __cplusplus || defined _MSC_VER)
1088static void
1089yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
1090#else
1091static void
1092yy_symbol_value_print (yyoutput, yytype, yyvaluep)
1093    FILE *yyoutput;
1094    int yytype;
1095    YYSTYPE const * const yyvaluep;
1096#endif
1097{
1098  if (!yyvaluep)
1099    return;
1100# ifdef YYPRINT
1101  if (yytype < YYNTOKENS)
1102    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1103# else
1104  YYUSE (yyoutput);
1105# endif
1106  switch (yytype)
1107    {
1108      default:
1109	break;
1110    }
1111}
1112
1113
1114/*--------------------------------.
1115| Print this symbol on YYOUTPUT.  |
1116`--------------------------------*/
1117
1118#if (defined __STDC__ || defined __C99__FUNC__ \
1119     || defined __cplusplus || defined _MSC_VER)
1120static void
1121yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
1122#else
1123static void
1124yy_symbol_print (yyoutput, yytype, yyvaluep)
1125    FILE *yyoutput;
1126    int yytype;
1127    YYSTYPE const * const yyvaluep;
1128#endif
1129{
1130  if (yytype < YYNTOKENS)
1131    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1132  else
1133    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1134
1135  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
1136  YYFPRINTF (yyoutput, ")");
1137}
1138
1139/*------------------------------------------------------------------.
1140| yy_stack_print -- Print the state stack from its BOTTOM up to its |
1141| TOP (included).                                                   |
1142`------------------------------------------------------------------*/
1143
1144#if (defined __STDC__ || defined __C99__FUNC__ \
1145     || defined __cplusplus || defined _MSC_VER)
1146static void
1147yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
1148#else
1149static void
1150yy_stack_print (bottom, top)
1151    yytype_int16 *bottom;
1152    yytype_int16 *top;
1153#endif
1154{
1155  YYFPRINTF (stderr, "Stack now");
1156  for (; bottom <= top; ++bottom)
1157    YYFPRINTF (stderr, " %d", *bottom);
1158  YYFPRINTF (stderr, "\n");
1159}
1160
1161# define YY_STACK_PRINT(Bottom, Top)				\
1162do {								\
1163  if (yydebug)							\
1164    yy_stack_print ((Bottom), (Top));				\
1165} while (YYID (0))
1166
1167
1168/*------------------------------------------------.
1169| Report that the YYRULE is going to be reduced.  |
1170`------------------------------------------------*/
1171
1172#if (defined __STDC__ || defined __C99__FUNC__ \
1173     || defined __cplusplus || defined _MSC_VER)
1174static void
1175yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
1176#else
1177static void
1178yy_reduce_print (yyvsp, yyrule)
1179    YYSTYPE *yyvsp;
1180    int yyrule;
1181#endif
1182{
1183  int yynrhs = yyr2[yyrule];
1184  int yyi;
1185  unsigned long int yylno = yyrline[yyrule];
1186  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1187	     yyrule - 1, yylno);
1188  /* The symbols being reduced.  */
1189  for (yyi = 0; yyi < yynrhs; yyi++)
1190    {
1191      fprintf (stderr, "   $%d = ", yyi + 1);
1192      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1193		       &(yyvsp[(yyi + 1) - (yynrhs)])
1194		       		       );
1195      fprintf (stderr, "\n");
1196    }
1197}
1198
1199# define YY_REDUCE_PRINT(Rule)		\
1200do {					\
1201  if (yydebug)				\
1202    yy_reduce_print (yyvsp, Rule); \
1203} while (YYID (0))
1204
1205/* Nonzero means print parse trace.  It is left uninitialized so that
1206   multiple parsers can coexist.  */
1207int yydebug;
1208#else /* !YYDEBUG */
1209# define YYDPRINTF(Args)
1210# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1211# define YY_STACK_PRINT(Bottom, Top)
1212# define YY_REDUCE_PRINT(Rule)
1213#endif /* !YYDEBUG */
1214
1215
1216/* YYINITDEPTH -- initial size of the parser's stacks.  */
1217#ifndef	YYINITDEPTH
1218# define YYINITDEPTH 200
1219#endif
1220
1221/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1222   if the built-in stack extension method is used).
1223
1224   Do not make this value too large; the results are undefined if
1225   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1226   evaluated with infinite-precision integer arithmetic.  */
1227
1228#ifndef YYMAXDEPTH
1229# define YYMAXDEPTH 10000
1230#endif
1231
1232
1233
1234#if YYERROR_VERBOSE
1235
1236# ifndef yystrlen
1237#  if defined __GLIBC__ && defined _STRING_H
1238#   define yystrlen strlen
1239#  else
1240/* Return the length of YYSTR.  */
1241#if (defined __STDC__ || defined __C99__FUNC__ \
1242     || defined __cplusplus || defined _MSC_VER)
1243static YYSIZE_T
1244yystrlen (const char *yystr)
1245#else
1246static YYSIZE_T
1247yystrlen (yystr)
1248    const char *yystr;
1249#endif
1250{
1251  YYSIZE_T yylen;
1252  for (yylen = 0; yystr[yylen]; yylen++)
1253    continue;
1254  return yylen;
1255}
1256#  endif
1257# endif
1258
1259# ifndef yystpcpy
1260#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1261#   define yystpcpy stpcpy
1262#  else
1263/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1264   YYDEST.  */
1265#if (defined __STDC__ || defined __C99__FUNC__ \
1266     || defined __cplusplus || defined _MSC_VER)
1267static char *
1268yystpcpy (char *yydest, const char *yysrc)
1269#else
1270static char *
1271yystpcpy (yydest, yysrc)
1272    char *yydest;
1273    const char *yysrc;
1274#endif
1275{
1276  char *yyd = yydest;
1277  const char *yys = yysrc;
1278
1279  while ((*yyd++ = *yys++) != '\0')
1280    continue;
1281
1282  return yyd - 1;
1283}
1284#  endif
1285# endif
1286
1287# ifndef yytnamerr
1288/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1289   quotes and backslashes, so that it's suitable for yyerror.  The
1290   heuristic is that double-quoting is unnecessary unless the string
1291   contains an apostrophe, a comma, or backslash (other than
1292   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1293   null, do not copy; instead, return the length of what the result
1294   would have been.  */
1295static YYSIZE_T
1296yytnamerr (char *yyres, const char *yystr)
1297{
1298  if (*yystr == '"')
1299    {
1300      YYSIZE_T yyn = 0;
1301      char const *yyp = yystr;
1302
1303      for (;;)
1304	switch (*++yyp)
1305	  {
1306	  case '\'':
1307	  case ',':
1308	    goto do_not_strip_quotes;
1309
1310	  case '\\':
1311	    if (*++yyp != '\\')
1312	      goto do_not_strip_quotes;
1313	    /* Fall through.  */
1314	  default:
1315	    if (yyres)
1316	      yyres[yyn] = *yyp;
1317	    yyn++;
1318	    break;
1319
1320	  case '"':
1321	    if (yyres)
1322	      yyres[yyn] = '\0';
1323	    return yyn;
1324	  }
1325    do_not_strip_quotes: ;
1326    }
1327
1328  if (! yyres)
1329    return yystrlen (yystr);
1330
1331  return yystpcpy (yyres, yystr) - yyres;
1332}
1333# endif
1334
1335/* Copy into YYRESULT an error message about the unexpected token
1336   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
1337   including the terminating null byte.  If YYRESULT is null, do not
1338   copy anything; just return the number of bytes that would be
1339   copied.  As a special case, return 0 if an ordinary "syntax error"
1340   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
1341   size calculation.  */
1342static YYSIZE_T
1343yysyntax_error (char *yyresult, int yystate, int yychar)
1344{
1345  int yyn = yypact[yystate];
1346
1347  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
1348    return 0;
1349  else
1350    {
1351      int yytype = YYTRANSLATE (yychar);
1352      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1353      YYSIZE_T yysize = yysize0;
1354      YYSIZE_T yysize1;
1355      int yysize_overflow = 0;
1356      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1357      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1358      int yyx;
1359
1360# if 0
1361      /* This is so xgettext sees the translatable formats that are
1362	 constructed on the fly.  */
1363      YY_("syntax error, unexpected %s");
1364      YY_("syntax error, unexpected %s, expecting %s");
1365      YY_("syntax error, unexpected %s, expecting %s or %s");
1366      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1367      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1368# endif
1369      char *yyfmt;
1370      char const *yyf;
1371      static char const yyunexpected[] = "syntax error, unexpected %s";
1372      static char const yyexpecting[] = ", expecting %s";
1373      static char const yyor[] = " or %s";
1374      char yyformat[sizeof yyunexpected
1375		    + sizeof yyexpecting - 1
1376		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1377		       * (sizeof yyor - 1))];
1378      char const *yyprefix = yyexpecting;
1379
1380      /* Start YYX at -YYN if negative to avoid negative indexes in
1381	 YYCHECK.  */
1382      int yyxbegin = yyn < 0 ? -yyn : 0;
1383
1384      /* Stay within bounds of both yycheck and yytname.  */
1385      int yychecklim = YYLAST - yyn + 1;
1386      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1387      int yycount = 1;
1388
1389      yyarg[0] = yytname[yytype];
1390      yyfmt = yystpcpy (yyformat, yyunexpected);
1391
1392      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1393	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1394	  {
1395	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1396	      {
1397		yycount = 1;
1398		yysize = yysize0;
1399		yyformat[sizeof yyunexpected - 1] = '\0';
1400		break;
1401	      }
1402	    yyarg[yycount++] = yytname[yyx];
1403	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1404	    yysize_overflow |= (yysize1 < yysize);
1405	    yysize = yysize1;
1406	    yyfmt = yystpcpy (yyfmt, yyprefix);
1407	    yyprefix = yyor;
1408	  }
1409
1410      yyf = YY_(yyformat);
1411      yysize1 = yysize + yystrlen (yyf);
1412      yysize_overflow |= (yysize1 < yysize);
1413      yysize = yysize1;
1414
1415      if (yysize_overflow)
1416	return YYSIZE_MAXIMUM;
1417
1418      if (yyresult)
1419	{
1420	  /* Avoid sprintf, as that infringes on the user's name space.
1421	     Don't have undefined behavior even if the translation
1422	     produced a string with the wrong number of "%s"s.  */
1423	  char *yyp = yyresult;
1424	  int yyi = 0;
1425	  while ((*yyp = *yyf) != '\0')
1426	    {
1427	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1428		{
1429		  yyp += yytnamerr (yyp, yyarg[yyi++]);
1430		  yyf += 2;
1431		}
1432	      else
1433		{
1434		  yyp++;
1435		  yyf++;
1436		}
1437	    }
1438	}
1439      return yysize;
1440    }
1441}
1442#endif /* YYERROR_VERBOSE */
1443
1444
1445/*-----------------------------------------------.
1446| Release the memory associated to this symbol.  |
1447`-----------------------------------------------*/
1448
1449/*ARGSUSED*/
1450#if (defined __STDC__ || defined __C99__FUNC__ \
1451     || defined __cplusplus || defined _MSC_VER)
1452static void
1453yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1454#else
1455static void
1456yydestruct (yymsg, yytype, yyvaluep)
1457    const char *yymsg;
1458    int yytype;
1459    YYSTYPE *yyvaluep;
1460#endif
1461{
1462  YYUSE (yyvaluep);
1463
1464  if (!yymsg)
1465    yymsg = "Deleting";
1466  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1467
1468  switch (yytype)
1469    {
1470
1471      default:
1472	break;
1473    }
1474}
1475
1476
1477/* Prevent warnings from -Wmissing-prototypes.  */
1478
1479#ifdef YYPARSE_PARAM
1480#if defined __STDC__ || defined __cplusplus
1481int yyparse (void *YYPARSE_PARAM);
1482#else
1483int yyparse ();
1484#endif
1485#else /* ! YYPARSE_PARAM */
1486#if defined __STDC__ || defined __cplusplus
1487int yyparse (void);
1488#else
1489int yyparse ();
1490#endif
1491#endif /* ! YYPARSE_PARAM */
1492
1493
1494
1495/* The look-ahead symbol.  */
1496int yychar;
1497
1498/* The semantic value of the look-ahead symbol.  */
1499YYSTYPE yylval;
1500
1501/* Number of syntax errors so far.  */
1502int yynerrs;
1503
1504
1505
1506/*----------.
1507| yyparse.  |
1508`----------*/
1509
1510#ifdef YYPARSE_PARAM
1511#if (defined __STDC__ || defined __C99__FUNC__ \
1512     || defined __cplusplus || defined _MSC_VER)
1513int
1514yyparse (void *YYPARSE_PARAM)
1515#else
1516int
1517yyparse (YYPARSE_PARAM)
1518    void *YYPARSE_PARAM;
1519#endif
1520#else /* ! YYPARSE_PARAM */
1521#if (defined __STDC__ || defined __C99__FUNC__ \
1522     || defined __cplusplus || defined _MSC_VER)
1523int
1524yyparse (void)
1525#else
1526int
1527yyparse ()
1528
1529#endif
1530#endif
1531{
1532
1533  int yystate;
1534  int yyn;
1535  int yyresult;
1536  /* Number of tokens to shift before error messages enabled.  */
1537  int yyerrstatus;
1538  /* Look-ahead token as an internal (translated) token number.  */
1539  int yytoken = 0;
1540#if YYERROR_VERBOSE
1541  /* Buffer for error messages, and its allocated size.  */
1542  char yymsgbuf[128];
1543  char *yymsg = yymsgbuf;
1544  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1545#endif
1546
1547  /* Three stacks and their tools:
1548     `yyss': related to states,
1549     `yyvs': related to semantic values,
1550     `yyls': related to locations.
1551
1552     Refer to the stacks thru separate pointers, to allow yyoverflow
1553     to reallocate them elsewhere.  */
1554
1555  /* The state stack.  */
1556  yytype_int16 yyssa[YYINITDEPTH];
1557  yytype_int16 *yyss = yyssa;
1558  yytype_int16 *yyssp;
1559
1560  /* The semantic value stack.  */
1561  YYSTYPE yyvsa[YYINITDEPTH];
1562  YYSTYPE *yyvs = yyvsa;
1563  YYSTYPE *yyvsp;
1564
1565
1566
1567#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1568
1569  YYSIZE_T yystacksize = YYINITDEPTH;
1570
1571  /* The variables used to return semantic value and location from the
1572     action routines.  */
1573  YYSTYPE yyval;
1574
1575
1576  /* The number of symbols on the RHS of the reduced rule.
1577     Keep to zero when no symbol should be popped.  */
1578  int yylen = 0;
1579
1580  YYDPRINTF ((stderr, "Starting parse\n"));
1581
1582  yystate = 0;
1583  yyerrstatus = 0;
1584  yynerrs = 0;
1585  yychar = YYEMPTY;		/* Cause a token to be read.  */
1586
1587  /* Initialize stack pointers.
1588     Waste one element of value and location stack
1589     so that they stay on the same level as the state stack.
1590     The wasted elements are never initialized.  */
1591
1592  yyssp = yyss;
1593  yyvsp = yyvs;
1594
1595  goto yysetstate;
1596
1597/*------------------------------------------------------------.
1598| yynewstate -- Push a new state, which is found in yystate.  |
1599`------------------------------------------------------------*/
1600 yynewstate:
1601  /* In all cases, when you get here, the value and location stacks
1602     have just been pushed.  So pushing a state here evens the stacks.  */
1603  yyssp++;
1604
1605 yysetstate:
1606  *yyssp = yystate;
1607
1608  if (yyss + yystacksize - 1 <= yyssp)
1609    {
1610      /* Get the current used size of the three stacks, in elements.  */
1611      YYSIZE_T yysize = yyssp - yyss + 1;
1612
1613#ifdef yyoverflow
1614      {
1615	/* Give user a chance to reallocate the stack.  Use copies of
1616	   these so that the &'s don't force the real ones into
1617	   memory.  */
1618	YYSTYPE *yyvs1 = yyvs;
1619	yytype_int16 *yyss1 = yyss;
1620
1621
1622	/* Each stack pointer address is followed by the size of the
1623	   data in use in that stack, in bytes.  This used to be a
1624	   conditional around just the two extra args, but that might
1625	   be undefined if yyoverflow is a macro.  */
1626	yyoverflow (YY_("memory exhausted"),
1627		    &yyss1, yysize * sizeof (*yyssp),
1628		    &yyvs1, yysize * sizeof (*yyvsp),
1629
1630		    &yystacksize);
1631
1632	yyss = yyss1;
1633	yyvs = yyvs1;
1634      }
1635#else /* no yyoverflow */
1636# ifndef YYSTACK_RELOCATE
1637      goto yyexhaustedlab;
1638# else
1639      /* Extend the stack our own way.  */
1640      if (YYMAXDEPTH <= yystacksize)
1641	goto yyexhaustedlab;
1642      yystacksize *= 2;
1643      if (YYMAXDEPTH < yystacksize)
1644	yystacksize = YYMAXDEPTH;
1645
1646      {
1647	yytype_int16 *yyss1 = yyss;
1648	union yyalloc *yyptr =
1649	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1650	if (! yyptr)
1651	  goto yyexhaustedlab;
1652	YYSTACK_RELOCATE (yyss);
1653	YYSTACK_RELOCATE (yyvs);
1654
1655#  undef YYSTACK_RELOCATE
1656	if (yyss1 != yyssa)
1657	  YYSTACK_FREE (yyss1);
1658      }
1659# endif
1660#endif /* no yyoverflow */
1661
1662      yyssp = yyss + yysize - 1;
1663      yyvsp = yyvs + yysize - 1;
1664
1665
1666      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1667		  (unsigned long int) yystacksize));
1668
1669      if (yyss + yystacksize - 1 <= yyssp)
1670	YYABORT;
1671    }
1672
1673  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1674
1675  goto yybackup;
1676
1677/*-----------.
1678| yybackup.  |
1679`-----------*/
1680yybackup:
1681
1682  /* Do appropriate processing given the current state.  Read a
1683     look-ahead token if we need one and don't already have one.  */
1684
1685  /* First try to decide what to do without reference to look-ahead token.  */
1686  yyn = yypact[yystate];
1687  if (yyn == YYPACT_NINF)
1688    goto yydefault;
1689
1690  /* Not known => get a look-ahead token if don't already have one.  */
1691
1692  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
1693  if (yychar == YYEMPTY)
1694    {
1695      YYDPRINTF ((stderr, "Reading a token: "));
1696      yychar = YYLEX;
1697    }
1698
1699  if (yychar <= YYEOF)
1700    {
1701      yychar = yytoken = YYEOF;
1702      YYDPRINTF ((stderr, "Now at end of input.\n"));
1703    }
1704  else
1705    {
1706      yytoken = YYTRANSLATE (yychar);
1707      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1708    }
1709
1710  /* If the proper action on seeing token YYTOKEN is to reduce or to
1711     detect an error, take that action.  */
1712  yyn += yytoken;
1713  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1714    goto yydefault;
1715  yyn = yytable[yyn];
1716  if (yyn <= 0)
1717    {
1718      if (yyn == 0 || yyn == YYTABLE_NINF)
1719	goto yyerrlab;
1720      yyn = -yyn;
1721      goto yyreduce;
1722    }
1723
1724  if (yyn == YYFINAL)
1725    YYACCEPT;
1726
1727  /* Count tokens shifted since error; after three, turn off error
1728     status.  */
1729  if (yyerrstatus)
1730    yyerrstatus--;
1731
1732  /* Shift the look-ahead token.  */
1733  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1734
1735  /* Discard the shifted token unless it is eof.  */
1736  if (yychar != YYEOF)
1737    yychar = YYEMPTY;
1738
1739  yystate = yyn;
1740  *++yyvsp = yylval;
1741
1742  goto yynewstate;
1743
1744
1745/*-----------------------------------------------------------.
1746| yydefault -- do the default action for the current state.  |
1747`-----------------------------------------------------------*/
1748yydefault:
1749  yyn = yydefact[yystate];
1750  if (yyn == 0)
1751    goto yyerrlab;
1752  goto yyreduce;
1753
1754
1755/*-----------------------------.
1756| yyreduce -- Do a reduction.  |
1757`-----------------------------*/
1758yyreduce:
1759  /* yyn is the number of a rule to reduce with.  */
1760  yylen = yyr2[yyn];
1761
1762  /* If YYLEN is nonzero, implement the default value of the action:
1763     `$$ = $1'.
1764
1765     Otherwise, the following line sets YYVAL to garbage.
1766     This behavior is undocumented and Bison
1767     users should not rely upon it.  Assigning to YYVAL
1768     unconditionally makes the parser a bit smaller, and it avoids a
1769     GCC warning that YYVAL may be used uninitialized.  */
1770  yyval = yyvsp[1-yylen];
1771
1772
1773  YY_REDUCE_PRINT (yyn);
1774  switch (yyn)
1775    {
1776        case 2:
1777#line 241 "asn1parse.y"
1778    {
1779			checkundefined();
1780		}
1781    break;
1782
1783  case 4:
1784#line 248 "asn1parse.y"
1785    { lex_error_message("implicit tagging is not supported"); }
1786    break;
1787
1788  case 5:
1789#line 250 "asn1parse.y"
1790    { lex_error_message("automatic tagging is not supported"); }
1791    break;
1792
1793  case 7:
1794#line 255 "asn1parse.y"
1795    { lex_error_message("no extensibility options supported"); }
1796    break;
1797
1798  case 17:
1799#line 276 "asn1parse.y"
1800    {
1801		    struct string_list *sl;
1802		    for(sl = (yyvsp[(1) - (4)].sl); sl != NULL; sl = sl->next) {
1803			Symbol *s = addsym(sl->string);
1804			s->stype = Stype;
1805			gen_template_import(s);
1806		    }
1807		    add_import((yyvsp[(3) - (4)].name));
1808		}
1809    break;
1810
1811  case 18:
1812#line 288 "asn1parse.y"
1813    {
1814		    struct string_list *sl;
1815		    for(sl = (yyvsp[(2) - (3)].sl); sl != NULL; sl = sl->next)
1816			add_export(sl->string);
1817		}
1818    break;
1819
1820  case 25:
1821#line 306 "asn1parse.y"
1822    {
1823		    (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
1824		    (yyval.sl)->string = (yyvsp[(1) - (3)].name);
1825		    (yyval.sl)->next = (yyvsp[(3) - (3)].sl);
1826		}
1827    break;
1828
1829  case 26:
1830#line 312 "asn1parse.y"
1831    {
1832		    (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
1833		    (yyval.sl)->string = (yyvsp[(1) - (1)].name);
1834		    (yyval.sl)->next = NULL;
1835		}
1836    break;
1837
1838  case 27:
1839#line 320 "asn1parse.y"
1840    {
1841		    Symbol *s = addsym ((yyvsp[(1) - (3)].name));
1842		    s->stype = Stype;
1843		    s->type = (yyvsp[(3) - (3)].type);
1844		    fix_labels(s);
1845		    generate_type (s);
1846		}
1847    break;
1848
1849  case 45:
1850#line 351 "asn1parse.y"
1851    {
1852			(yyval.type) = new_tag(ASN1_C_UNIV, UT_Boolean,
1853				     TE_EXPLICIT, new_type(TBoolean));
1854		}
1855    break;
1856
1857  case 46:
1858#line 358 "asn1parse.y"
1859    {
1860		    if((yyvsp[(2) - (5)].value)->type != integervalue)
1861			lex_error_message("Non-integer used in first part of range");
1862		    if((yyvsp[(2) - (5)].value)->type != integervalue)
1863			lex_error_message("Non-integer in second part of range");
1864		    (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
1865		    (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
1866		    (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
1867		}
1868    break;
1869
1870  case 47:
1871#line 368 "asn1parse.y"
1872    {
1873		    if((yyvsp[(2) - (5)].value)->type != integervalue)
1874			lex_error_message("Non-integer in first part of range");
1875		    (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
1876		    (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
1877		    (yyval.range)->max = INT_MAX;
1878		}
1879    break;
1880
1881  case 48:
1882#line 376 "asn1parse.y"
1883    {
1884		    if((yyvsp[(4) - (5)].value)->type != integervalue)
1885			lex_error_message("Non-integer in second part of range");
1886		    (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
1887		    (yyval.range)->min = INT_MIN;
1888		    (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
1889		}
1890    break;
1891
1892  case 49:
1893#line 384 "asn1parse.y"
1894    {
1895		    if((yyvsp[(2) - (3)].value)->type != integervalue)
1896			lex_error_message("Non-integer used in limit");
1897		    (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
1898		    (yyval.range)->min = (yyvsp[(2) - (3)].value)->u.integervalue;
1899		    (yyval.range)->max = (yyvsp[(2) - (3)].value)->u.integervalue;
1900		}
1901    break;
1902
1903  case 50:
1904#line 395 "asn1parse.y"
1905    {
1906			(yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer,
1907				     TE_EXPLICIT, new_type(TInteger));
1908		}
1909    break;
1910
1911  case 51:
1912#line 400 "asn1parse.y"
1913    {
1914			(yyval.type) = new_type(TInteger);
1915			(yyval.type)->range = (yyvsp[(2) - (2)].range);
1916			(yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type));
1917		}
1918    break;
1919
1920  case 52:
1921#line 406 "asn1parse.y"
1922    {
1923		  (yyval.type) = new_type(TInteger);
1924		  (yyval.type)->members = (yyvsp[(3) - (4)].members);
1925		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type));
1926		}
1927    break;
1928
1929  case 53:
1930#line 414 "asn1parse.y"
1931    {
1932			(yyval.members) = emalloc(sizeof(*(yyval.members)));
1933			ASN1_TAILQ_INIT((yyval.members));
1934			ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
1935		}
1936    break;
1937
1938  case 54:
1939#line 420 "asn1parse.y"
1940    {
1941			ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
1942			(yyval.members) = (yyvsp[(1) - (3)].members);
1943		}
1944    break;
1945
1946  case 55:
1947#line 425 "asn1parse.y"
1948    { (yyval.members) = (yyvsp[(1) - (3)].members); }
1949    break;
1950
1951  case 56:
1952#line 429 "asn1parse.y"
1953    {
1954			(yyval.member) = emalloc(sizeof(*(yyval.member)));
1955			(yyval.member)->name = (yyvsp[(1) - (4)].name);
1956			(yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name));
1957			output_name ((yyval.member)->gen_name);
1958			(yyval.member)->val = (yyvsp[(3) - (4)].constant);
1959			(yyval.member)->optional = 0;
1960			(yyval.member)->ellipsis = 0;
1961			(yyval.member)->type = NULL;
1962		}
1963    break;
1964
1965  case 57:
1966#line 442 "asn1parse.y"
1967    {
1968		  (yyval.type) = new_type(TInteger);
1969		  (yyval.type)->members = (yyvsp[(3) - (4)].members);
1970		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Enumerated, TE_EXPLICIT, (yyval.type));
1971		}
1972    break;
1973
1974  case 59:
1975#line 453 "asn1parse.y"
1976    {
1977		  (yyval.type) = new_type(TBitString);
1978		  (yyval.type)->members = emalloc(sizeof(*(yyval.type)->members));
1979		  ASN1_TAILQ_INIT((yyval.type)->members);
1980		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, (yyval.type));
1981		}
1982    break;
1983
1984  case 60:
1985#line 460 "asn1parse.y"
1986    {
1987		  (yyval.type) = new_type(TBitString);
1988		  (yyval.type)->members = (yyvsp[(4) - (5)].members);
1989		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, (yyval.type));
1990		}
1991    break;
1992
1993  case 61:
1994#line 468 "asn1parse.y"
1995    {
1996			(yyval.type) = new_tag(ASN1_C_UNIV, UT_OID,
1997				     TE_EXPLICIT, new_type(TOID));
1998		}
1999    break;
2000
2001  case 62:
2002#line 474 "asn1parse.y"
2003    {
2004		    Type *t = new_type(TOctetString);
2005		    t->range = (yyvsp[(3) - (3)].range);
2006		    (yyval.type) = new_tag(ASN1_C_UNIV, UT_OctetString,
2007				 TE_EXPLICIT, t);
2008		}
2009    break;
2010
2011  case 63:
2012#line 483 "asn1parse.y"
2013    {
2014			(yyval.type) = new_tag(ASN1_C_UNIV, UT_Null,
2015				     TE_EXPLICIT, new_type(TNull));
2016		}
2017    break;
2018
2019  case 64:
2020#line 490 "asn1parse.y"
2021    { (yyval.range) = NULL; }
2022    break;
2023
2024  case 65:
2025#line 492 "asn1parse.y"
2026    { (yyval.range) = (yyvsp[(2) - (2)].range); }
2027    break;
2028
2029  case 66:
2030#line 497 "asn1parse.y"
2031    {
2032		  (yyval.type) = new_type(TSequence);
2033		  (yyval.type)->members = (yyvsp[(3) - (4)].members);
2034		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
2035		}
2036    break;
2037
2038  case 67:
2039#line 503 "asn1parse.y"
2040    {
2041		  (yyval.type) = new_type(TSequence);
2042		  (yyval.type)->members = NULL;
2043		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
2044		}
2045    break;
2046
2047  case 68:
2048#line 511 "asn1parse.y"
2049    {
2050		  (yyval.type) = new_type(TSequenceOf);
2051		  (yyval.type)->range = (yyvsp[(2) - (4)].range);
2052		  (yyval.type)->subtype = (yyvsp[(4) - (4)].type);
2053		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
2054		}
2055    break;
2056
2057  case 69:
2058#line 520 "asn1parse.y"
2059    {
2060		  (yyval.type) = new_type(TSet);
2061		  (yyval.type)->members = (yyvsp[(3) - (4)].members);
2062		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type));
2063		}
2064    break;
2065
2066  case 70:
2067#line 526 "asn1parse.y"
2068    {
2069		  (yyval.type) = new_type(TSet);
2070		  (yyval.type)->members = NULL;
2071		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type));
2072		}
2073    break;
2074
2075  case 71:
2076#line 534 "asn1parse.y"
2077    {
2078		  (yyval.type) = new_type(TSetOf);
2079		  (yyval.type)->subtype = (yyvsp[(3) - (3)].type);
2080		  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type));
2081		}
2082    break;
2083
2084  case 72:
2085#line 542 "asn1parse.y"
2086    {
2087		  (yyval.type) = new_type(TChoice);
2088		  (yyval.type)->members = (yyvsp[(3) - (4)].members);
2089		}
2090    break;
2091
2092  case 75:
2093#line 553 "asn1parse.y"
2094    {
2095		  Symbol *s = addsym((yyvsp[(1) - (1)].name));
2096		  (yyval.type) = new_type(TType);
2097		  if(s->stype != Stype && s->stype != SUndefined)
2098		    lex_error_message ("%s is not a type\n", (yyvsp[(1) - (1)].name));
2099		  else
2100		    (yyval.type)->symbol = s;
2101		}
2102    break;
2103
2104  case 76:
2105#line 564 "asn1parse.y"
2106    {
2107			(yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralizedTime,
2108				     TE_EXPLICIT, new_type(TGeneralizedTime));
2109		}
2110    break;
2111
2112  case 77:
2113#line 569 "asn1parse.y"
2114    {
2115			(yyval.type) = new_tag(ASN1_C_UNIV, UT_UTCTime,
2116				     TE_EXPLICIT, new_type(TUTCTime));
2117		}
2118    break;
2119
2120  case 78:
2121#line 576 "asn1parse.y"
2122    {
2123		    /* if (Constraint.type == contentConstrant) {
2124		       assert(Constraint.u.constraint.type == octetstring|bitstring-w/o-NamedBitList); // remember to check type reference too
2125		       if (Constraint.u.constraint.type) {
2126		         assert((Constraint.u.constraint.type.length % 8) == 0);
2127		       }
2128		      }
2129		      if (Constraint.u.constraint.encoding) {
2130		        type == der-oid|ber-oid
2131		      }
2132		    */
2133		}
2134    break;
2135
2136  case 79:
2137#line 592 "asn1parse.y"
2138    {
2139		    (yyval.constraint_spec) = (yyvsp[(2) - (3)].constraint_spec);
2140		}
2141    break;
2142
2143  case 83:
2144#line 605 "asn1parse.y"
2145    {
2146		    (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
2147		    (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (2)].type);
2148		    (yyval.constraint_spec)->u.content.encoding = NULL;
2149		}
2150    break;
2151
2152  case 84:
2153#line 611 "asn1parse.y"
2154    {
2155		    if ((yyvsp[(3) - (3)].value)->type != objectidentifiervalue)
2156			lex_error_message("Non-OID used in ENCODED BY constraint");
2157		    (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
2158		    (yyval.constraint_spec)->u.content.type = NULL;
2159		    (yyval.constraint_spec)->u.content.encoding = (yyvsp[(3) - (3)].value);
2160		}
2161    break;
2162
2163  case 85:
2164#line 619 "asn1parse.y"
2165    {
2166		    if ((yyvsp[(5) - (5)].value)->type != objectidentifiervalue)
2167			lex_error_message("Non-OID used in ENCODED BY constraint");
2168		    (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
2169		    (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (5)].type);
2170		    (yyval.constraint_spec)->u.content.encoding = (yyvsp[(5) - (5)].value);
2171		}
2172    break;
2173
2174  case 86:
2175#line 629 "asn1parse.y"
2176    {
2177		    (yyval.constraint_spec) = new_constraint_spec(CT_USER);
2178		}
2179    break;
2180
2181  case 87:
2182#line 635 "asn1parse.y"
2183    {
2184			(yyval.type) = new_type(TTag);
2185			(yyval.type)->tag = (yyvsp[(1) - (3)].tag);
2186			(yyval.type)->tag.tagenv = (yyvsp[(2) - (3)].constant);
2187			if((yyvsp[(3) - (3)].type)->type == TTag && (yyvsp[(2) - (3)].constant) == TE_IMPLICIT) {
2188				(yyval.type)->subtype = (yyvsp[(3) - (3)].type)->subtype;
2189				free((yyvsp[(3) - (3)].type));
2190			} else
2191				(yyval.type)->subtype = (yyvsp[(3) - (3)].type);
2192		}
2193    break;
2194
2195  case 88:
2196#line 648 "asn1parse.y"
2197    {
2198			(yyval.tag).tagclass = (yyvsp[(2) - (4)].constant);
2199			(yyval.tag).tagvalue = (yyvsp[(3) - (4)].constant);
2200			(yyval.tag).tagenv = TE_EXPLICIT;
2201		}
2202    break;
2203
2204  case 89:
2205#line 656 "asn1parse.y"
2206    {
2207			(yyval.constant) = ASN1_C_CONTEXT;
2208		}
2209    break;
2210
2211  case 90:
2212#line 660 "asn1parse.y"
2213    {
2214			(yyval.constant) = ASN1_C_UNIV;
2215		}
2216    break;
2217
2218  case 91:
2219#line 664 "asn1parse.y"
2220    {
2221			(yyval.constant) = ASN1_C_APPL;
2222		}
2223    break;
2224
2225  case 92:
2226#line 668 "asn1parse.y"
2227    {
2228			(yyval.constant) = ASN1_C_PRIVATE;
2229		}
2230    break;
2231
2232  case 93:
2233#line 674 "asn1parse.y"
2234    {
2235			(yyval.constant) = TE_EXPLICIT;
2236		}
2237    break;
2238
2239  case 94:
2240#line 678 "asn1parse.y"
2241    {
2242			(yyval.constant) = TE_EXPLICIT;
2243		}
2244    break;
2245
2246  case 95:
2247#line 682 "asn1parse.y"
2248    {
2249			(yyval.constant) = TE_IMPLICIT;
2250		}
2251    break;
2252
2253  case 96:
2254#line 689 "asn1parse.y"
2255    {
2256			Symbol *s;
2257			s = addsym ((yyvsp[(1) - (4)].name));
2258
2259			s->stype = SValue;
2260			s->value = (yyvsp[(4) - (4)].value);
2261			generate_constant (s);
2262		}
2263    break;
2264
2265  case 98:
2266#line 703 "asn1parse.y"
2267    {
2268			(yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralString,
2269				     TE_EXPLICIT, new_type(TGeneralString));
2270		}
2271    break;
2272
2273  case 99:
2274#line 708 "asn1parse.y"
2275    {
2276			(yyval.type) = new_tag(ASN1_C_UNIV, UT_TeletexString,
2277				     TE_EXPLICIT, new_type(TTeletexString));
2278		}
2279    break;
2280
2281  case 100:
2282#line 713 "asn1parse.y"
2283    {
2284			(yyval.type) = new_tag(ASN1_C_UNIV, UT_UTF8String,
2285				     TE_EXPLICIT, new_type(TUTF8String));
2286		}
2287    break;
2288
2289  case 101:
2290#line 718 "asn1parse.y"
2291    {
2292			(yyval.type) = new_tag(ASN1_C_UNIV, UT_PrintableString,
2293				     TE_EXPLICIT, new_type(TPrintableString));
2294		}
2295    break;
2296
2297  case 102:
2298#line 723 "asn1parse.y"
2299    {
2300			(yyval.type) = new_tag(ASN1_C_UNIV, UT_VisibleString,
2301				     TE_EXPLICIT, new_type(TVisibleString));
2302		}
2303    break;
2304
2305  case 103:
2306#line 728 "asn1parse.y"
2307    {
2308			(yyval.type) = new_tag(ASN1_C_UNIV, UT_IA5String,
2309				     TE_EXPLICIT, new_type(TIA5String));
2310		}
2311    break;
2312
2313  case 104:
2314#line 733 "asn1parse.y"
2315    {
2316			(yyval.type) = new_tag(ASN1_C_UNIV, UT_BMPString,
2317				     TE_EXPLICIT, new_type(TBMPString));
2318		}
2319    break;
2320
2321  case 105:
2322#line 738 "asn1parse.y"
2323    {
2324			(yyval.type) = new_tag(ASN1_C_UNIV, UT_UniversalString,
2325				     TE_EXPLICIT, new_type(TUniversalString));
2326		}
2327    break;
2328
2329  case 106:
2330#line 746 "asn1parse.y"
2331    {
2332			(yyval.members) = emalloc(sizeof(*(yyval.members)));
2333			ASN1_TAILQ_INIT((yyval.members));
2334			ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
2335		}
2336    break;
2337
2338  case 107:
2339#line 752 "asn1parse.y"
2340    {
2341			ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
2342			(yyval.members) = (yyvsp[(1) - (3)].members);
2343		}
2344    break;
2345
2346  case 108:
2347#line 757 "asn1parse.y"
2348    {
2349		        struct member *m = ecalloc(1, sizeof(*m));
2350			m->name = estrdup("...");
2351			m->gen_name = estrdup("asn1_ellipsis");
2352			m->ellipsis = 1;
2353			ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), m, members);
2354			(yyval.members) = (yyvsp[(1) - (3)].members);
2355		}
2356    break;
2357
2358  case 109:
2359#line 768 "asn1parse.y"
2360    {
2361		  (yyval.member) = emalloc(sizeof(*(yyval.member)));
2362		  (yyval.member)->name = (yyvsp[(1) - (2)].name);
2363		  (yyval.member)->gen_name = estrdup((yyvsp[(1) - (2)].name));
2364		  output_name ((yyval.member)->gen_name);
2365		  (yyval.member)->type = (yyvsp[(2) - (2)].type);
2366		  (yyval.member)->ellipsis = 0;
2367		}
2368    break;
2369
2370  case 110:
2371#line 779 "asn1parse.y"
2372    {
2373			(yyval.member) = (yyvsp[(1) - (1)].member);
2374			(yyval.member)->optional = 0;
2375			(yyval.member)->defval = NULL;
2376		}
2377    break;
2378
2379  case 111:
2380#line 785 "asn1parse.y"
2381    {
2382			(yyval.member) = (yyvsp[(1) - (2)].member);
2383			(yyval.member)->optional = 1;
2384			(yyval.member)->defval = NULL;
2385		}
2386    break;
2387
2388  case 112:
2389#line 791 "asn1parse.y"
2390    {
2391			(yyval.member) = (yyvsp[(1) - (3)].member);
2392			(yyval.member)->optional = 0;
2393			(yyval.member)->defval = (yyvsp[(3) - (3)].value);
2394		}
2395    break;
2396
2397  case 113:
2398#line 799 "asn1parse.y"
2399    {
2400			(yyval.members) = emalloc(sizeof(*(yyval.members)));
2401			ASN1_TAILQ_INIT((yyval.members));
2402			ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
2403		}
2404    break;
2405
2406  case 114:
2407#line 805 "asn1parse.y"
2408    {
2409			ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
2410			(yyval.members) = (yyvsp[(1) - (3)].members);
2411		}
2412    break;
2413
2414  case 115:
2415#line 812 "asn1parse.y"
2416    {
2417		  (yyval.member) = emalloc(sizeof(*(yyval.member)));
2418		  (yyval.member)->name = (yyvsp[(1) - (4)].name);
2419		  (yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name));
2420		  output_name ((yyval.member)->gen_name);
2421		  (yyval.member)->val = (yyvsp[(3) - (4)].constant);
2422		  (yyval.member)->optional = 0;
2423		  (yyval.member)->ellipsis = 0;
2424		  (yyval.member)->type = NULL;
2425		}
2426    break;
2427
2428  case 117:
2429#line 825 "asn1parse.y"
2430    { (yyval.objid) = NULL; }
2431    break;
2432
2433  case 118:
2434#line 829 "asn1parse.y"
2435    {
2436			(yyval.objid) = (yyvsp[(2) - (3)].objid);
2437		}
2438    break;
2439
2440  case 119:
2441#line 835 "asn1parse.y"
2442    {
2443			(yyval.objid) = NULL;
2444		}
2445    break;
2446
2447  case 120:
2448#line 839 "asn1parse.y"
2449    {
2450		        if ((yyvsp[(2) - (2)].objid)) {
2451				(yyval.objid) = (yyvsp[(2) - (2)].objid);
2452				add_oid_to_tail((yyvsp[(2) - (2)].objid), (yyvsp[(1) - (2)].objid));
2453			} else {
2454				(yyval.objid) = (yyvsp[(1) - (2)].objid);
2455			}
2456		}
2457    break;
2458
2459  case 121:
2460#line 850 "asn1parse.y"
2461    {
2462			(yyval.objid) = new_objid((yyvsp[(1) - (4)].name), (yyvsp[(3) - (4)].constant));
2463		}
2464    break;
2465
2466  case 122:
2467#line 854 "asn1parse.y"
2468    {
2469		    Symbol *s = addsym((yyvsp[(1) - (1)].name));
2470		    if(s->stype != SValue ||
2471		       s->value->type != objectidentifiervalue) {
2472			lex_error_message("%s is not an object identifier\n",
2473				      s->name);
2474			exit(1);
2475		    }
2476		    (yyval.objid) = s->value->u.objectidentifiervalue;
2477		}
2478    break;
2479
2480  case 123:
2481#line 865 "asn1parse.y"
2482    {
2483		    (yyval.objid) = new_objid(NULL, (yyvsp[(1) - (1)].constant));
2484		}
2485    break;
2486
2487  case 133:
2488#line 888 "asn1parse.y"
2489    {
2490			Symbol *s = addsym((yyvsp[(1) - (1)].name));
2491			if(s->stype != SValue)
2492				lex_error_message ("%s is not a value\n",
2493						s->name);
2494			else
2495				(yyval.value) = s->value;
2496		}
2497    break;
2498
2499  case 134:
2500#line 899 "asn1parse.y"
2501    {
2502			(yyval.value) = emalloc(sizeof(*(yyval.value)));
2503			(yyval.value)->type = stringvalue;
2504			(yyval.value)->u.stringvalue = (yyvsp[(1) - (1)].name);
2505		}
2506    break;
2507
2508  case 135:
2509#line 907 "asn1parse.y"
2510    {
2511			(yyval.value) = emalloc(sizeof(*(yyval.value)));
2512			(yyval.value)->type = booleanvalue;
2513			(yyval.value)->u.booleanvalue = 0;
2514		}
2515    break;
2516
2517  case 136:
2518#line 913 "asn1parse.y"
2519    {
2520			(yyval.value) = emalloc(sizeof(*(yyval.value)));
2521			(yyval.value)->type = booleanvalue;
2522			(yyval.value)->u.booleanvalue = 0;
2523		}
2524    break;
2525
2526  case 137:
2527#line 921 "asn1parse.y"
2528    {
2529			(yyval.value) = emalloc(sizeof(*(yyval.value)));
2530			(yyval.value)->type = integervalue;
2531			(yyval.value)->u.integervalue = (yyvsp[(1) - (1)].constant);
2532		}
2533    break;
2534
2535  case 139:
2536#line 932 "asn1parse.y"
2537    {
2538		}
2539    break;
2540
2541  case 140:
2542#line 937 "asn1parse.y"
2543    {
2544			(yyval.value) = emalloc(sizeof(*(yyval.value)));
2545			(yyval.value)->type = objectidentifiervalue;
2546			(yyval.value)->u.objectidentifiervalue = (yyvsp[(1) - (1)].objid);
2547		}
2548    break;
2549
2550
2551/* Line 1267 of yacc.c.  */
2552#line 2553 "asn1parse.c"
2553      default: break;
2554    }
2555  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2556
2557  YYPOPSTACK (yylen);
2558  yylen = 0;
2559  YY_STACK_PRINT (yyss, yyssp);
2560
2561  *++yyvsp = yyval;
2562
2563
2564  /* Now `shift' the result of the reduction.  Determine what state
2565     that goes to, based on the state we popped back to and the rule
2566     number reduced by.  */
2567
2568  yyn = yyr1[yyn];
2569
2570  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2571  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2572    yystate = yytable[yystate];
2573  else
2574    yystate = yydefgoto[yyn - YYNTOKENS];
2575
2576  goto yynewstate;
2577
2578
2579/*------------------------------------.
2580| yyerrlab -- here on detecting error |
2581`------------------------------------*/
2582yyerrlab:
2583  /* If not already recovering from an error, report this error.  */
2584  if (!yyerrstatus)
2585    {
2586      ++yynerrs;
2587#if ! YYERROR_VERBOSE
2588      yyerror (YY_("syntax error"));
2589#else
2590      {
2591	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
2592	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
2593	  {
2594	    YYSIZE_T yyalloc = 2 * yysize;
2595	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
2596	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
2597	    if (yymsg != yymsgbuf)
2598	      YYSTACK_FREE (yymsg);
2599	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
2600	    if (yymsg)
2601	      yymsg_alloc = yyalloc;
2602	    else
2603	      {
2604		yymsg = yymsgbuf;
2605		yymsg_alloc = sizeof yymsgbuf;
2606	      }
2607	  }
2608
2609	if (0 < yysize && yysize <= yymsg_alloc)
2610	  {
2611	    (void) yysyntax_error (yymsg, yystate, yychar);
2612	    yyerror (yymsg);
2613	  }
2614	else
2615	  {
2616	    yyerror (YY_("syntax error"));
2617	    if (yysize != 0)
2618	      goto yyexhaustedlab;
2619	  }
2620      }
2621#endif
2622    }
2623
2624
2625
2626  if (yyerrstatus == 3)
2627    {
2628      /* If just tried and failed to reuse look-ahead token after an
2629	 error, discard it.  */
2630
2631      if (yychar <= YYEOF)
2632	{
2633	  /* Return failure if at end of input.  */
2634	  if (yychar == YYEOF)
2635	    YYABORT;
2636	}
2637      else
2638	{
2639	  yydestruct ("Error: discarding",
2640		      yytoken, &yylval);
2641	  yychar = YYEMPTY;
2642	}
2643    }
2644
2645  /* Else will try to reuse look-ahead token after shifting the error
2646     token.  */
2647  goto yyerrlab1;
2648
2649
2650/*---------------------------------------------------.
2651| yyerrorlab -- error raised explicitly by YYERROR.  |
2652`---------------------------------------------------*/
2653yyerrorlab:
2654
2655  /* Pacify compilers like GCC when the user code never invokes
2656     YYERROR and the label yyerrorlab therefore never appears in user
2657     code.  */
2658  if (/*CONSTCOND*/ 0)
2659     goto yyerrorlab;
2660
2661  /* Do not reclaim the symbols of the rule which action triggered
2662     this YYERROR.  */
2663  YYPOPSTACK (yylen);
2664  yylen = 0;
2665  YY_STACK_PRINT (yyss, yyssp);
2666  yystate = *yyssp;
2667  goto yyerrlab1;
2668
2669
2670/*-------------------------------------------------------------.
2671| yyerrlab1 -- common code for both syntax error and YYERROR.  |
2672`-------------------------------------------------------------*/
2673yyerrlab1:
2674  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
2675
2676  for (;;)
2677    {
2678      yyn = yypact[yystate];
2679      if (yyn != YYPACT_NINF)
2680	{
2681	  yyn += YYTERROR;
2682	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2683	    {
2684	      yyn = yytable[yyn];
2685	      if (0 < yyn)
2686		break;
2687	    }
2688	}
2689
2690      /* Pop the current state because it cannot handle the error token.  */
2691      if (yyssp == yyss)
2692	YYABORT;
2693
2694
2695      yydestruct ("Error: popping",
2696		  yystos[yystate], yyvsp);
2697      YYPOPSTACK (1);
2698      yystate = *yyssp;
2699      YY_STACK_PRINT (yyss, yyssp);
2700    }
2701
2702  if (yyn == YYFINAL)
2703    YYACCEPT;
2704
2705  *++yyvsp = yylval;
2706
2707
2708  /* Shift the error token.  */
2709  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2710
2711  yystate = yyn;
2712  goto yynewstate;
2713
2714
2715/*-------------------------------------.
2716| yyacceptlab -- YYACCEPT comes here.  |
2717`-------------------------------------*/
2718yyacceptlab:
2719  yyresult = 0;
2720  goto yyreturn;
2721
2722/*-----------------------------------.
2723| yyabortlab -- YYABORT comes here.  |
2724`-----------------------------------*/
2725yyabortlab:
2726  yyresult = 1;
2727  goto yyreturn;
2728
2729#ifndef yyoverflow
2730/*-------------------------------------------------.
2731| yyexhaustedlab -- memory exhaustion comes here.  |
2732`-------------------------------------------------*/
2733yyexhaustedlab:
2734  yyerror (YY_("memory exhausted"));
2735  yyresult = 2;
2736  /* Fall through.  */
2737#endif
2738
2739yyreturn:
2740  if (yychar != YYEOF && yychar != YYEMPTY)
2741     yydestruct ("Cleanup: discarding lookahead",
2742		 yytoken, &yylval);
2743  /* Do not reclaim the symbols of the rule which action triggered
2744     this YYABORT or YYACCEPT.  */
2745  YYPOPSTACK (yylen);
2746  YY_STACK_PRINT (yyss, yyssp);
2747  while (yyssp != yyss)
2748    {
2749      yydestruct ("Cleanup: popping",
2750		  yystos[*yyssp], yyvsp);
2751      YYPOPSTACK (1);
2752    }
2753#ifndef yyoverflow
2754  if (yyss != yyssa)
2755    YYSTACK_FREE (yyss);
2756#endif
2757#if YYERROR_VERBOSE
2758  if (yymsg != yymsgbuf)
2759    YYSTACK_FREE (yymsg);
2760#endif
2761  /* Make sure YYID is used.  */
2762  return YYID (yyresult);
2763}
2764
2765
2766#line 944 "asn1parse.y"
2767
2768
2769void
2770yyerror (const char *s)
2771{
2772     lex_error_message ("%s\n", s);
2773}
2774
2775static Type *
2776new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype)
2777{
2778    Type *t;
2779    if(oldtype->type == TTag && oldtype->tag.tagenv == TE_IMPLICIT) {
2780	t = oldtype;
2781	oldtype = oldtype->subtype; /* XXX */
2782    } else
2783	t = new_type (TTag);
2784
2785    t->tag.tagclass = tagclass;
2786    t->tag.tagvalue = tagvalue;
2787    t->tag.tagenv = tagenv;
2788    t->subtype = oldtype;
2789    return t;
2790}
2791
2792static struct objid *
2793new_objid(const char *label, int value)
2794{
2795    struct objid *s;
2796    s = emalloc(sizeof(*s));
2797    s->label = label;
2798    s->value = value;
2799    s->next = NULL;
2800    return s;
2801}
2802
2803static void
2804add_oid_to_tail(struct objid *head, struct objid *tail)
2805{
2806    struct objid *o;
2807    o = head;
2808    while (o->next)
2809	o = o->next;
2810    o->next = tail;
2811}
2812
2813static Type *
2814new_type (Typetype tt)
2815{
2816    Type *t = ecalloc(1, sizeof(*t));
2817    t->type = tt;
2818    return t;
2819}
2820
2821static struct constraint_spec *
2822new_constraint_spec(enum ctype ct)
2823{
2824    struct constraint_spec *c = ecalloc(1, sizeof(*c));
2825    c->ctype = ct;
2826    return c;
2827}
2828
2829static void fix_labels2(Type *t, const char *prefix);
2830static void fix_labels1(struct memhead *members, const char *prefix)
2831{
2832    Member *m;
2833
2834    if(members == NULL)
2835	return;
2836    ASN1_TAILQ_FOREACH(m, members, members) {
2837	if (asprintf(&m->label, "%s_%s", prefix, m->gen_name) < 0)
2838	    errx(1, "malloc");
2839	if (m->label == NULL)
2840	    errx(1, "malloc");
2841	if(m->type != NULL)
2842	    fix_labels2(m->type, m->label);
2843    }
2844}
2845
2846static void fix_labels2(Type *t, const char *prefix)
2847{
2848    for(; t; t = t->subtype)
2849	fix_labels1(t->members, prefix);
2850}
2851
2852static void
2853fix_labels(Symbol *s)
2854{
2855    char *p = NULL;
2856    if (asprintf(&p, "choice_%s", s->gen_name) < 0 || p == NULL)
2857	errx(1, "malloc");
2858    fix_labels2(s->type, p);
2859    free(p);
2860}
2861
2862