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