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