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 *
yysymbol_name(yysymbol_kind_t yysymbol)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
yy_symbol_value_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep)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
yy_symbol_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep)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
yy_stack_print(yy_state_t * yybottom,yy_state_t * yytop)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
yy_reduce_print(yy_state_t * yyssp,YYSTYPE * yyvsp,int yyrule)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
yydestruct(const char * yymsg,yysymbol_kind_t yykind,YYSTYPE * yyvaluep)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
yyparse(void)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
yyerror(const char * s)2764 yyerror (const char *s)
2765 {
2766 lex_error_message ("%s\n", s);
2767 }
2768
2769 static Type *
new_tag(int tagclass,int tagvalue,int tagenv,Type * oldtype)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 *
new_objid(const char * label,int value)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
add_oid_to_tail(struct objid * head,struct objid * tail)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 *
new_type(Typetype tt)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 *
new_constraint_spec(enum ctype ct)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);
fix_labels1(struct memhead * members,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
fix_labels2(Type * t,const char * prefix)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
fix_labels(Symbol * s)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