|
|
1.1 ! root 1: /* yacc.y - yacc ASN.1 parser */ ! 2: /* %WARNING% */ ! 3: ! 4: %{ ! 5: #ifndef lint ! 6: static char *rcsid = "$Header: /f/osi/pepsy/RCS/yacc.y.gnrc,v 7.0 90/07/01 19:54:39 mrose Exp $"; ! 7: #endif ! 8: ! 9: /* ! 10: * $Header: /f/osi/pepsy/RCS/yacc.y.gnrc,v 7.0 90/07/01 19:54:39 mrose Exp $ ! 11: * ! 12: * ! 13: * $Log: yacc.y.gnrc,v $ ! 14: * Revision 7.0 90/07/01 19:54:39 mrose ! 15: * *** empty log message *** ! 16: * ! 17: * Revision 7.1 90/05/21 17:08:28 mrose ! 18: * yyporting ! 19: * ! 20: * Revision 7.0 89/11/23 22:12:10 mrose ! 21: * Release 6.0 ! 22: * ! 23: */ ! 24: ! 25: /* ! 26: * NOTICE ! 27: * ! 28: * Acquisition, use, and distribution of this module and related ! 29: * materials are subject to the restrictions of a license agreement. ! 30: * Consult the Preface in the User's Manual for the full terms of ! 31: * this agreement. ! 32: * ! 33: */ ! 34: ! 35: ! 36: #include <stdio.h> ! 37: #include <ctype.h> ! 38: %BEGIN(PEPSY)% ! 39: #include "pepsydefs.h" ! 40: %END(PEPSY)% ! 41: %BEGIN(PEPY)% ! 42: #include "pepy.h" ! 43: %END(PEPY)% ! 44: %BEGIN(ROSY)% ! 45: #include "rosy-defs.h" ! 46: %END(ROSY)% ! 47: %BEGIN(MOSY)% ! 48: #include "mosy-defs.h" ! 49: %END(MOSY)% ! 50: ! 51: #define YYSTYPE YYSTKTYPE ! 52: ! 53: ! 54: #define YYDEBUG 1 ! 55: ! 56: extern int pepydebug; ! 57: extern int doexternals; ! 58: ! 59: int tagcontrol = TAG_UNKNOWN; ! 60: static int tagdefault; ! 61: static int listtype; ! 62: static OID modid; ! 63: ! 64: static int yyporting = 0; ! 65: ! 66: typedef struct ypa { ! 67: char *ya_text; ! 68: int ya_lineno; ! 69: } ypa, *YA; ! 70: #define NULLYA ((YA) 0) ! 71: extern double pow (); ! 72: ! 73: static YA new_action (text, lineno) ! 74: char *text; ! 75: int lineno; ! 76: { ! 77: register YA ya; ! 78: ! 79: if ((ya = (YA) calloc (1, sizeof *ya)) == NULLYA) ! 80: yyerror ("out of memory"); ! 81: ! 82: ya -> ya_text = text; ! 83: ya -> ya_lineno = lineno; ! 84: ! 85: return ya; ! 86: } ! 87: #define free_action(ya) (void) free ((char *) (ya)) ! 88: ! 89: typedef struct { ! 90: char *ys_structname; ! 91: char *ys_ptrname; ! 92: } ysa, *YS; ! 93: #define NULLYS ((YS) 0) ! 94: ! 95: static YS new_ys (str) ! 96: char *str; ! 97: { ! 98: register YS ys; ! 99: register char *p, *q; ! 100: char c; ! 101: ! 102: if((ys = (YS) malloc (sizeof *ys)) == NULLYS) ! 103: yyerror ("out of memory"); ! 104: q = str; ! 105: while (isspace (*q)) q++; ! 106: for (p = q; isalnum(*p) || *p == '_'; p++) ! 107: continue; ! 108: if (*p != '\0') { ! 109: c = *p; ! 110: *p = '\0'; ! 111: ys -> ys_structname = new_string (q); ! 112: *p = c; ! 113: } ! 114: else { ! 115: ys -> ys_structname = new_string (q); ! 116: ys -> ys_ptrname = NULLCP; ! 117: free (str); ! 118: return ys; ! 119: } ! 120: for (q = p; *q != '$'; q++) ! 121: if (! *q) { ! 122: free (str); ! 123: ys -> ys_ptrname = NULLCP; ! 124: return ys; ! 125: } ! 126: q++; ! 127: while (isspace (*q)) q++; ! 128: for (p = q; isalnum(*p) || *p == '_'; p++) ! 129: continue; ! 130: *p = '\0'; ! 131: ys -> ys_ptrname = new_string (q); ! 132: free (str); ! 133: return ys; ! 134: } ! 135: #define free_ys(ys) (void) free ((char *) (ys)) ! 136: ! 137: static int final_actions = 0; ! 138: %} ! 139: ! 140: %start ModuleDefinition ! 141: ! 142: ! 143: %union { ! 144: int yy_number; ! 145: char *yy_string; ! 146: YP yy_type; ! 147: YV yy_value; ! 148: YT yy_tag; ! 149: YA yy_action; ! 150: OID yy_oid; ! 151: YS yy_sctrl; ! 152: double yy_real; ! 153: } ! 154: ! 155: ! 156: %token ABSENT ACTION ANY APPLICATION BAR BGIN BIT BITSTRING BOOLEAN ! 157: BY CCE CHOICE COMMA COMPONENT COMPONENTS COMPONENTSOF CONTROL ! 158: DECODER DEFAULT DEFINED DEFINITIONS DOT DOTDOT DOTDOTDOT ! 159: ENCODER ENCRYPTED END ENUMERATED EXPORTS EXPLICIT FALSE FROM ! 160: ID IDENTIFIER IMPLICIT IMPORTS INCLUDES INTEGER LANGLE LBRACE ! 161: LBRACKET LITNUMBER LITSTRING LPAREN MIN MAX NAME NIL OBJECT ! 162: OCTET OCTETSTRING OF OPTIONAL PARAMETERTYPE PREFIXES PRESENT ! 163: PRINTER PRIVATE RBRACE RBRACKET REAL RPAREN SECTIONS SEMICOLON ! 164: SEQUENCE SEQUENCEOF SET SETOF SIZE STRING TAGS TRUE UNIVERSAL ! 165: VALA VALB VALI VALS VALP VALO VALOID VALR VALQ VALX VLENGTH ! 166: WITH SCTRL PLUSINFINITY MINUSINFINITY ! 167: %BEGIN(ROSY)% ! 168: OPERATION ARGUMENT RESULT ERRORS LINKED ERROR PARAMETER ! 169: /* new stuff */ ! 170: ABSTRACT OPERATIONS CONSUMER SUPPLIER INVOKES PORT PORTS ! 171: OBJECTCONSUMER OBJECTSUPPLIER REFINE AS RECURRING VISIBLE ! 172: PAIRED BIND UNBIND ! 173: /* end new stuff */ ! 174: %END(ROSY)% ! 175: %BEGIN(MOSY)% ! 176: OBJECTYPE SYNTAX ACCESS STATUS ! 177: %END(MOSY)% ! 178: ! 179: %type <yy_number> LITNUMBER ! 180: %type <yy_real> RealValue NumericRealValue SpecialRealValue ! 181: %type <yy_string> ID NAME LITSTRING VALA VALB VALI VALS VALP VALQ ! 182: VALR VALO VALX VLENGTH VALOID CONTROL PARAMETERTYPE ! 183: ParameterType Control ValParameter String ! 184: PassInt PassBool PassOid PassAny PassReal ! 185: ModuleIdentifier Symbol SymbolList ! 186: SCTRL ! 187: %type <yy_type> Type BuiltinType DefinedType PassValue PassBit ! 188: PassString NullPass ElementTypes OptionalTypeList ! 189: OptionalType NamedType ComponentsOf AlternativeTypeList ! 190: MemberTypes SubType ! 191: %BEGIN(ROSY)% ! 192: Argument Result Parameter ! 193: %END(ROSY)% ! 194: %type <yy_value> NamedNumberList NamedNumber NumericValue ! 195: Value BuiltinValue DefinedValue IdentifierList ! 196: Values NamedValueList NamedValue NNlist ! 197: %BEGIN(ROSY)% ! 198: Errors ErrorNames ! 199: LinkedOperations LinkedOperationNames ! 200: %END(ROSY)% ! 201: %BEGIN(MOSY)% ! 202: ObjectID ObjectIDComponentList ObjectSubID ! 203: %END(MOSY)% ! 204: %type <yy_tag> Tag Class ! 205: %type <yy_action> ACTION Action ! 206: %type <yy_oid> ObjIdComponentList ObjectIdentifierValue ! 207: ObjIdComponent NumberForm NameAndNumberForm ! 208: %type <yy_sctrl> Sctrl ! 209: %% ! 210: ! 211: ModuleDefinition: ModuleIdentifier DEFINITIONS TagDefault CCE ! 212: { ! 213: mymodule = $1; ! 214: mymoduleid = modid; ! 215: pass1 (); ! 216: } ! 217: ModuleActions ModulePrefixes ! 218: BGIN ModuleBody END { pass2 (); final_actions++; } ! 219: ModuleActions ! 220: ; ! 221: ! 222: TagDefault: EXPLICIT TAGS { ! 223: tagdefault = 0; ! 224: tagcontrol = TAG_EXPLICIT; ! 225: } ! 226: | IMPLICIT TAGS { ! 227: tagdefault = YP_IMPLICIT; ! 228: tagcontrol = TAG_IMPLICIT; ! 229: } ! 230: | empty { ! 231: tagdefault = 0; ! 232: tagcontrol = TAG_UNKNOWN; ! 233: } ! 234: ; ! 235: ! 236: ModuleIdentifier: ID AssignedIdentifier { $$ = $1; } ! 237: ; ! 238: ! 239: AssignedIdentifier: ObjectIdentifierValue { modid = $1; } ! 240: | empty ! 241: ; ! 242: ! 243: ModuleActions: ACTION { ! 244: %BEGIN(PEPSY)% ! 245: if (bflag) { ! 246: if (final_actions) ! 247: init_new_file (); ! 248: else { ! 249: module_actions = $1 -> ya_text; ! 250: free_action ($1); ! 251: break; ! 252: } ! 253: } ! 254: %END(PEPSY)% ! 255: %BEGIN(PEPY)% ! 256: if (bflag) { ! 257: if (final_actions) ! 258: init_new_file (); ! 259: else { ! 260: module_actions = $1 -> ya_text; ! 261: free_action ($1); ! 262: break; ! 263: } ! 264: } ! 265: %END(PEPY)% ! 266: if (!dflag) { ! 267: if (Cflag > 0) { ! 268: if (!Pflag && *sysin) ! 269: printf ("# line %d \"%s\"\n", ! 270: $1 -> ya_lineno, sysin); ! 271: fputs ($1 -> ya_text, stdout); ! 272: } ! 273: else { ! 274: printf ("%%{\n#include \"%s-types.h\"\n", ! 275: mymodule); ! 276: printf ("%s%%}\n", $1 -> ya_text); ! 277: Cflag = -1; ! 278: } ! 279: } ! 280: free_action ($1); ! 281: %BEGIN(PEPSY)% ! 282: if (bflag) ! 283: end_file (); ! 284: %END(PEPSY)% ! 285: %BEGIN(PEPY)% ! 286: if (bflag) ! 287: end_file (); ! 288: %END(PEPY)% ! 289: } ! 290: | empty ! 291: ; ! 292: ModulePrefixes: ! 293: PREFIXES String String String ! 294: { ! 295: yyencdflt = $2; ! 296: yydecdflt = $3; ! 297: yyprfdflt = $4; ! 298: } ! 299: | empty ! 300: ; ! 301: ModuleBody: Exports Imports AssignmentList ! 302: ; ! 303: ! 304: Exports: EXPORTS { listtype = TBL_EXPORT; doexternals = 0; ! 305: yyporting = 1; } ! 306: SymbolsExported SEMICOLON { ! 307: yyporting = 0; ! 308: if (mymoduleid == NULLOID) ! 309: warning ("EXPORTS but no ModuleIdentifier"); ! 310: ! 311: } ! 312: | empty ! 313: ; ! 314: ! 315: SymbolsExported: SymbolList ! 316: | empty ! 317: ; ! 318: ! 319: Imports: IMPORTS { listtype = TBL_IMPORT; yyporting = 1; } ! 320: SymbolsImported SEMICOLON { ! 321: yyporting = 0; ! 322: if (mymoduleid == NULLOID) ! 323: warning ("IMPORTS but no ModuleIdentifier"); ! 324: } ! 325: ! 326: | empty ! 327: ; ! 328: ! 329: SymbolsImported: SymbolsFromModuleList ! 330: | empty ! 331: ; ! 332: ! 333: SymbolsFromModuleList: SymbolsFromModuleList SymbolsFromModule ! 334: | SymbolsFromModule ! 335: ; ! 336: ! 337: SymbolsFromModule: SymbolList FROM ModuleIdentifier ! 338: { ! 339: addtableref ($3, modid, listtype); ! 340: } ! 341: ; ! 342: ! 343: SymbolList: SymbolList COMMA Symbol { addtable($3, listtype); } ! 344: | Symbol { addtable ($1, listtype); } ! 345: ; ! 346: ! 347: Symbol: ID ! 348: | NAME ! 349: ; ! 350: ! 351: AssignmentList: AssignmentList Section Assignment ! 352: | empty ! 353: ; ! 354: ! 355: Section: ENCODER String ! 356: { yysection = YP_ENCODER; yyencpref = $2; ! 357: yyprint (NULLCP, 0, 1); } ! 358: | DECODER String ! 359: { yysection = YP_DECODER; yydecpref = $2; ! 360: yyprint (NULLCP, 0, 1); } ! 361: | PRINTER String ! 362: { yysection = YP_PRINTER; yyprfpref = $2; ! 363: yyprint (NULLCP, 0, 1); } ! 364: | SECTIONS String String String ! 365: { ! 366: yysection = NULL; ! 367: if (strcmp (yyencpref = $2, "none")) ! 368: yysection |= YP_ENCODER; ! 369: if (strcmp (yydecpref = $3, "none")) ! 370: yysection |= YP_DECODER; ! 371: if (strcmp (yyprfpref = $4, "none")) ! 372: yysection |= YP_PRINTER; ! 373: yyprint (NULLCP, 0, 1); ! 374: } ! 375: | empty ! 376: ; ! 377: ! 378: String: ID { $$ = $1; } ! 379: | NAME { $$ = $1; } ! 380: ; ! 381: ! 382: Assignment: Typeassignment ! 383: %BEGIN(ROSY)% ! 384: | OperationDefinition ! 385: | ErrorDefinition ! 386: /* new stuff */ ! 387: | PortDefinition ! 388: | ObjectDefinition ! 389: /* | RefineDefinition -- impossible!!!! (JPO) */ ! 390: /* | BindDefinition -- lacking defs... */ ! 391: /* | UnBindDefinition -- ditto */ ! 392: /* end new stuff */ ! 393: %END(ROSY)% ! 394: %BEGIN(MOSY)% ! 395: | ObjectTypeDefinition ! 396: | ObjectIDefinition ! 397: %END(MOSY)% ! 398: | Valueassignment ! 399: ; ! 400: ! 401: %BEGIN(ROSY)% ! 402: OperationDefinition: NAME OPERATION Argument Result Errors LinkedOperations ! 403: CCE LITNUMBER { ! 404: pass1_op (mymodule, $1, $3, $4, $5, $6, $8); ! 405: } ! 406: ; ! 407: ! 408: Argument: ARGUMENT NamedType { $$ = $2; } ! 409: | empty { $$ = NULLYP; } ! 410: ; ! 411: ! 412: Result: RESULT NamedType { $$ = $2; } ! 413: | empty { $$ = NULLYP; } ! 414: ; ! 415: ! 416: Errors: ERRORS LBRACE ErrorNames RBRACE { $$ = $3; } ! 417: | empty { $$ = NULLYV; } ! 418: ! 419: LinkedOperations: LINKED LBRACE LinkedOperationNames RBRACE { $$ = $3; } ! 420: | empty { $$ = NULLYV; } ! 421: ! 422: ! 423: ErrorNames: NamedValueList { ! 424: $$ = new_value (YV_VALIST); ! 425: $$ -> yv_idlist = $1; ! 426: } ! 427: | empty { $$ = NULLYV; } ! 428: ! 429: ! 430: LinkedOperationNames: NamedValueList { ! 431: $$ = new_value (YV_VALIST); ! 432: $$ -> yv_idlist = $1; ! 433: } ! 434: | empty { $$ = NULLYV; } ! 435: ! 436: ! 437: ErrorDefinition: NAME ERROR Parameter CCE LITNUMBER { ! 438: pass1_err (mymodule, $1, $3, $5); ! 439: } ! 440: ; ! 441: ! 442: Parameter: PARAMETER NamedType { $$ = $2; } ! 443: | empty { $$ = NULLYP; } ! 444: ; ! 445: ! 446: /* new stuff start */ ! 447: PortDefinition: NAME PORT PortOperations CCE PortValue ! 448: ; ! 449: ! 450: PortValue: ObjectIdentifierValue ! 451: | NAME ! 452: ; ! 453: ! 454: PortOperations: PortSymmetrical ! 455: | PortAsymetrical ! 456: | empty ! 457: ! 458: PortSymmetrical: ABSTRACT OPERATIONS LBRACE PortOperationList RBRACE ! 459: ; ! 460: ! 461: PortAsymetrical: PortOneSided ! 462: | PortTwoSided ! 463: ; ! 464: ! 465: PortOneSided: PortConsumer ! 466: | PortSupplier ! 467: ; ! 468: ! 469: PortTwoSided: PortConsumer PortSupplier ! 470: | PortSupplier PortConsumer ! 471: ; ! 472: ! 473: PortConsumer: CONSUMER INVOKES LBRACE PortOperationList RBRACE ! 474: ; ! 475: ! 476: PortSupplier: SUPPLIER INVOKES LBRACE PortOperationList RBRACE ! 477: ; ! 478: ! 479: PortOperationList: OperationValue ! 480: | OperationValue COMMA PortOperationList ! 481: ; ! 482: ! 483: OperationValue: NAME ! 484: | ID ! 485: | LITNUMBER ! 486: | ObjectIdentifierValue ! 487: ; ! 488: ! 489: ObjectDefinition: NAME OBJECT ObjectType CCE PortValue ! 490: ; ! 491: ! 492: ObjectType: PORTS LBRACE ObjectPortList RBRACE ! 493: | empty ! 494: ; ! 495: ! 496: ObjectPortList: ObjectPort COMMA ObjectPortList ! 497: | ObjectPort ! 498: ; ! 499: ! 500: ObjectPort: PortValue ObjectPortType ! 501: ; ! 502: ! 503: ObjectPortType: ObjectSymetric ! 504: | ObjectAsymetric ! 505: ; ! 506: ! 507: ObjectSymetric: empty ! 508: ; ! 509: ! 510: ObjectAsymetric: OBJECTCONSUMER ! 511: | OBJECTSUPPLIER ! 512: ; ! 513: ! 514: /* New stuff end */ ! 515: %END(ROSY)% ! 516: ! 517: %BEGIN(MOSY)% ! 518: ObjectTypeDefinition: NAME OBJECTYPE SYNTAX NamedType ACCESS NAME ! 519: STATUS NAME CCE ObjectID { ! 520: pass1_obj (mymodule, $1, $4, $10, $6, $8); ! 521: } ! 522: ; ! 523: ! 524: ObjectIDefinition: NAME OBJECT IDENTIFIER CCE ObjectID { ! 525: pass1_oid (mymodule, $1, $5); ! 526: } ! 527: ; ! 528: ! 529: ObjectID: NAME { ! 530: $$ = new_value (YV_OIDLIST); ! 531: $$ -> yv_idlist = new_value (YV_IDEFINED); ! 532: $$ -> yv_idlist -> yv_identifier = $1; ! 533: $$ -> yv_idlist -> yv_flags |= YV_BOUND; ! 534: } ! 535: | LBRACE ObjectIDComponentList RBRACE { ! 536: $$ = new_value (YV_OIDLIST); ! 537: $$ -> yv_idlist = $2; ! 538: } ! 539: ; ! 540: ObjectIDComponentList: ObjectSubID { $$ = $1; } ! 541: | ObjectIDComponentList ObjectSubID { ! 542: $$ = add_value ($1, $2); ! 543: } ! 544: ; ! 545: ObjectSubID: LITNUMBER { ! 546: $$ = new_value (YV_NUMBER); ! 547: $$ -> yv_number = $1; ! 548: } ! 549: | NAME { ! 550: $$ = new_value (YV_IDEFINED); ! 551: $$ -> yv_identifier = $1; ! 552: $$ -> yv_flags |= YV_BOUND; ! 553: } ! 554: | NAME LPAREN LITNUMBER RPAREN { ! 555: $$ = new_value (YV_NUMBER); ! 556: $$ -> yv_number = $3; ! 557: $$ -> yv_named = $1; ! 558: $$ -> yv_flags |= YV_NAMED; ! 559: } ! 560: ; ! 561: %END(MOSY)% ! 562: ! 563: Typeassignment: ID ParameterType Action CCE Action Type { ! 564: if ($2) ! 565: $6 -> yp_param_type = $2; ! 566: if ($3) { ! 567: $6 -> yp_action0 = $3 -> ya_text; ! 568: $6 -> yp_act0_lineno= $3 -> ya_lineno; ! 569: free_action ($3); ! 570: } ! 571: if ($5) { ! 572: if ($6 -> yp_action05 == NULLCP) { ! 573: $6 -> yp_action05 = $5 -> ya_text; ! 574: $6 -> yp_act05_lineno= $5 -> ya_lineno; ! 575: free_action ($5); ! 576: } ! 577: else ! 578: yyerror("too many preliminary actions associated with type"); ! 579: } ! 580: pass1_type (yyencpref, yydecpref, yyprfpref, ! 581: mymodule, $1, $6); ! 582: } ; ! 583: ! 584: Type: BuiltinType Action { ! 585: $$ = $1; ! 586: $$ -> yp_direction = yysection; ! 587: if ($2) { ! 588: $$ -> yp_action2 = $2 -> ya_text; ! 589: $$ -> yp_act2_lineno= $2 -> ya_lineno; ! 590: free_action ($2); ! 591: } ! 592: } ! 593: | DefinedType Action { ! 594: $$ = $1; ! 595: $$ -> yp_direction = yysection; ! 596: if ($2) { ! 597: $$ -> yp_action2 = $2 -> ya_text; ! 598: $$ -> yp_act2_lineno= $2 -> ya_lineno; ! 599: free_action ($2); ! 600: } ! 601: } ! 602: | SubType Action { ! 603: $$ = $1; ! 604: $$ -> yp_direction = yysection; ! 605: if ($2) { ! 606: $$ -> yp_action2 = $2 -> ya_text; ! 607: $$ -> yp_act2_lineno = $2 -> ya_lineno; ! 608: free_action ($2); ! 609: } ! 610: } ! 611: ; ! 612: ! 613: Action: ACTION ! 614: | empty { $$ = NULLYA; } ! 615: ; ! 616: ! 617: Control: CONTROL ! 618: | empty { $$ = NULLCP; } ! 619: ; ! 620: ! 621: ParameterType: PARAMETERTYPE ! 622: | empty { $$ = NULLCP; } ! 623: ; ! 624: ! 625: BuiltinType: BOOLEAN PassBool { ! 626: $$ = new_type (YP_BOOL); ! 627: $$ -> yp_intexp = $2; ! 628: } ! 629: | INTEGER PassInt NNlist { ! 630: $$ = new_type ($3 ? YP_INTLIST : YP_INT); ! 631: $$ -> yp_intexp = $2; ! 632: if ($3) ! 633: $$ -> yp_value = $3; ! 634: } ! 635: | ENUMERATED PassInt LBRACE NamedNumberList RBRACE { ! 636: $$ = new_type (YP_ENUMLIST); ! 637: $$ -> yp_intexp = $2; ! 638: $$ -> yp_value = $4; ! 639: } ! 640: ! 641: | Bitstring PassBit NNlist { ! 642: $$ = $2; ! 643: $$ -> yp_code = $3 ? YP_BITLIST: YP_BIT; ! 644: if ($3) ! 645: $$ -> yp_value = $3; ! 646: } ! 647: | Octetstring PassString { ! 648: $$ = $2; ! 649: $$ -> yp_code = YP_OCT; ! 650: } ! 651: | NIL { $$ = new_type (YP_NULL); } ! 652: | SEQUENCE Sctrl PassAny { ! 653: $$ = new_type (YP_SEQ); ! 654: $$ -> yp_strexp = $3; ! 655: } ! 656: | SequenceOf Sctrl Action Control Type { ! 657: $$ = new_type (YP_SEQTYPE); ! 658: $$ -> yp_type = $5; ! 659: if ($2) { ! 660: $$ -> yp_structname = $2 -> ys_structname; ! 661: $$ -> yp_ptrname = $2 -> ys_ptrname; ! 662: free_ys ($2); ! 663: } ! 664: if ($4) { ! 665: $$ -> yp_control = $4; ! 666: $$ -> yp_flags |= YP_CONTROLLED; ! 667: } ! 668: if ($3) { ! 669: $$ -> yp_action3 = $3 -> ya_text; ! 670: $$ -> yp_act3_lineno = $3 -> ya_lineno; ! 671: free_action ($3); ! 672: } ! 673: } ! 674: | SEQUENCE Sctrl Action LBRACE ElementTypes RBRACE { ! 675: $$ = new_type (YP_SEQLIST); ! 676: $$ -> yp_type = $5; ! 677: if ($2) { ! 678: $$ -> yp_structname = $2 -> ys_structname; ! 679: $$ -> yp_ptrname = $2 -> ys_ptrname; ! 680: free_ys ($2); ! 681: } ! 682: if ($3 && $$ -> yp_action1 == NULLCP) { ! 683: $$ -> yp_action1 = $3 -> ya_text; ! 684: $$ -> yp_act1_lineno = $3 -> ya_lineno; ! 685: free_action ($3); ! 686: } ! 687: else if ($3) ! 688: yyerror("too many actions associated with SEQUENCE"); ! 689: } ! 690: | SET Sctrl PassAny { ! 691: $$ = new_type (YP_SET); ! 692: $$ -> yp_strexp = $3; ! 693: } ! 694: | SetOf Sctrl Action Control Type { ! 695: $$ = new_type (YP_SETTYPE); ! 696: $$ -> yp_type = $5; ! 697: if ($2) { ! 698: $$ -> yp_structname = $2 -> ys_structname; ! 699: $$ -> yp_ptrname = $2 -> ys_ptrname; ! 700: free_ys ($2); ! 701: } ! 702: if ($4) { ! 703: $$ -> yp_control = $4; ! 704: $$ -> yp_flags |= YP_CONTROLLED; ! 705: } ! 706: if ($3) { ! 707: $$ -> yp_action3 = $3 -> ya_text; ! 708: $$ -> yp_act3_lineno = $3 -> ya_lineno; ! 709: free_action ($3); ! 710: } ! 711: } ! 712: ! 713: | SET Sctrl Action LBRACE MemberTypes RBRACE { ! 714: $$ = new_type (YP_SETLIST); ! 715: $$ -> yp_type = $5; ! 716: if ($2) { ! 717: $$ -> yp_structname = $2 -> ys_structname; ! 718: $$ -> yp_ptrname = $2 -> ys_ptrname; ! 719: free_ys ($2); ! 720: } ! 721: if ($3 && $$ -> yp_action1 == NULLCP) { ! 722: $$ -> yp_action1 = $3 -> ya_text; ! 723: $$ -> yp_act1_lineno = $3 -> ya_lineno; ! 724: free_action ($3); ! 725: } ! 726: else if ($3) ! 727: yyerror("too many actions associated with SET"); ! 728: } ! 729: | Tag Action IMPLICIT Type { ! 730: $$ = $4; ! 731: $$ -> yp_tag = $1; ! 732: if ($2 && $$ -> yp_action1 == NULLCP) { ! 733: $$ -> yp_action1 = $2 -> ya_text; ! 734: $$ -> yp_act1_lineno= $2 -> ya_lineno; ! 735: free_action ($2); ! 736: } ! 737: else if ($2) ! 738: yyerror("too many actions associated with tagged type"); ! 739: $$ -> yp_flags |= YP_IMPLICIT | YP_TAG; ! 740: } ! 741: | Tag Action EXPLICIT Type { ! 742: $$ = $4; ! 743: $$ -> yp_tag = $1; ! 744: if ($2 && $$ -> yp_action1 == NULLCP) { ! 745: $$ -> yp_action1 = $2 -> ya_text; ! 746: $$ -> yp_act1_lineno= $2 -> ya_lineno; ! 747: free_action ($2); ! 748: } ! 749: else if ($2) ! 750: yyerror("too many actions associated with tagged type"); ! 751: $$ -> yp_flags |= YP_TAG; ! 752: } ! 753: | Tag Action Type { ! 754: $$ = $3; ! 755: $$ -> yp_tag = $1; ! 756: if ($2 && $$ -> yp_action1 == NULLCP) { ! 757: $$ -> yp_action1 = $2 -> ya_text; ! 758: $$ -> yp_act1_lineno= $2 -> ya_lineno; ! 759: free_action ($2); ! 760: } ! 761: else if ($2) ! 762: yyerror("too many actions associated with tagged type"); ! 763: $$ -> yp_flags |= (YP_TAG | tagdefault); ! 764: } ! 765: | CHOICE Sctrl Action Control LBRACE ! 766: AlternativeTypeList RBRACE { ! 767: $$ = new_type (YP_CHOICE); ! 768: $$ -> yp_type = $6; ! 769: if ($2) { ! 770: $$ -> yp_structname = $2 -> ys_structname; ! 771: $$ -> yp_ptrname = $2 -> ys_ptrname; ! 772: free_ys ($2); ! 773: } ! 774: if ($4) { ! 775: $$ -> yp_control = $4; ! 776: $$ -> yp_flags |= YP_CONTROLLED; ! 777: } ! 778: if ($$ -> yp_action1 == NULLCP && $3) { ! 779: $$ -> yp_action1 = $3 -> ya_text; ! 780: $$ -> yp_act1_lineno = $3 -> ya_lineno; ! 781: free_action ($3); ! 782: } ! 783: else if ($3) ! 784: yyerror("too many actions associated with CHOICE"); ! 785: } ! 786: | NAME LANGLE Type { ! 787: $$ = $3; ! 788: $$ -> yp_bound = $1; ! 789: $$ -> yp_flags |= YP_BOUND; ! 790: } ! 791: | AnyType PassAny { ! 792: $$ = new_type (YP_ANY); ! 793: $$ -> yp_strexp = $2; ! 794: } ! 795: | OBJECT IDENTIFIER PassOid { ! 796: $$ = new_type (YP_OID); ! 797: $$ -> yp_strexp = $3; ! 798: } ! 799: | ENCRYPTED Type { ! 800: $$ = $2; ! 801: $$ -> yp_tag = new_tag (PE_CLASS_UNIV); ! 802: $$ -> yp_tag -> yt_value = new_value(YV_NUMBER); ! 803: $$ -> yp_tag -> yt_value -> yv_number = PE_PRIM_ENCR; ! 804: $$ -> yp_flags |= ! 805: (YP_ENCRYPTED | YP_TAG | YP_IMPLICIT); ! 806: } ! 807: | REAL PassReal { ! 808: $$ = new_type(YP_REAL); ! 809: $$ -> yp_strexp = $2; ! 810: } ! 811: ; ! 812: ! 813: NNlist: LBRACE NamedNumberList RBRACE { $$ = $2; } ! 814: | empty { $$ = NULL; } ! 815: ; ! 816: DefinedType: ID PassValue ValParameter { ! 817: $$ = $2; ! 818: $$ -> yp_code = YP_IDEFINED; ! 819: $$ -> yp_identifier = $1; ! 820: if ($3) { ! 821: $$ -> yp_parm = $3; ! 822: $$ -> yp_flags |= YP_PARMVAL; ! 823: } ! 824: check_impexp ($$); ! 825: } ! 826: | ID DOT ID PassValue ValParameter { ! 827: $$ = $4; ! 828: $$ -> yp_code = YP_IDEFINED; ! 829: $$ -> yp_identifier = $3; ! 830: $$ -> yp_module = $1; ! 831: if ($5) { ! 832: $$ -> yp_parm = $5; ! 833: $$ -> yp_flags |= YP_PARMVAL; ! 834: } ! 835: } ! 836: ; ! 837: ! 838: PassValue: VALA { ! 839: $$ = new_type (YP_UNDF); ! 840: $$ -> yp_intexp = NULLCP; ! 841: $$ -> yp_strexp = $1; ! 842: $$ -> yp_prfexp = 'a'; ! 843: } ! 844: | VALB { ! 845: $$ = new_type (YP_UNDF); ! 846: $$ -> yp_intexp = $1; ! 847: $$ -> yp_strexp = NULLCP; ! 848: $$ -> yp_prfexp = 'b'; ! 849: } ! 850: | VALI { ! 851: $$ = new_type (YP_UNDF); ! 852: $$ -> yp_intexp = $1; ! 853: $$ -> yp_strexp = NULLCP; ! 854: $$ -> yp_prfexp = 'i'; ! 855: } ! 856: | VALX VLENGTH { ! 857: $$ = new_type (YP_UNDF); ! 858: $$ -> yp_intexp = $2; ! 859: $$ -> yp_strexp = $1; ! 860: $$ -> yp_prfexp = 'x'; ! 861: } ! 862: | VALOID { ! 863: $$ = new_type (YP_UNDF); ! 864: $$ -> yp_intexp = NULLCP; ! 865: $$ -> yp_strexp = $1; ! 866: $$ -> yp_prfexp = 'O'; ! 867: } ! 868: | PassString ! 869: ; ! 870: ! 871: AnyType: ANY ! 872: | ANY DEFINED BY NAME ! 873: ; ! 874: ! 875: PassOid: VALOID ! 876: | empty { $$ = NULLCP; } ! 877: ; ! 878: ! 879: PassAny: VALA ! 880: | empty { $$ = NULLCP; } ! 881: ; ! 882: ! 883: PassBool: VALB ! 884: | empty { $$ = NULLCP; } ! 885: ; ! 886: ! 887: PassInt: VALI ! 888: | empty { $$ = NULLCP; } ! 889: ; ! 890: ! 891: PassBit: VALX VLENGTH { ! 892: $$ = new_type (YP_UNDF); ! 893: $$ -> yp_intexp = $2; ! 894: $$ -> yp_strexp = $1; ! 895: } ! 896: | NullPass ! 897: ; ! 898: ! 899: PassString: VALS { ! 900: $$ = new_type (YP_UNDF); ! 901: $$ -> yp_intexp = NULLCP; ! 902: $$ -> yp_strexp = $1; ! 903: $$ -> yp_prfexp = 's'; ! 904: } ! 905: | VALO VLENGTH { ! 906: $$ = new_type (YP_UNDF); ! 907: $$ -> yp_intexp = $2; ! 908: $$ -> yp_strexp = $1; ! 909: $$ -> yp_prfexp = 'o'; ! 910: } ! 911: | VALQ { ! 912: $$ = new_type (YP_UNDF); ! 913: $$ -> yp_intexp = NULLCP; ! 914: $$ -> yp_strexp = $1; ! 915: $$ -> yp_prfexp = 'q'; ! 916: } ! 917: | NullPass ! 918: ; ! 919: ! 920: PassReal: VALR ! 921: | empty { $$ = NULLCP; } ! 922: ; ! 923: ! 924: NullPass: empty { ! 925: $$ = new_type (YP_UNDF); ! 926: $$ -> yp_intexp = NULLCP; ! 927: $$ -> yp_strexp = NULLCP; ! 928: } ! 929: ; ! 930: ! 931: ValParameter: VALP ! 932: | empty { $$ = NULLCP; } ! 933: ; ! 934: ! 935: NamedNumberList: NamedNumber { $$ = $1; } ! 936: | NamedNumberList COMMA NamedNumber { ! 937: $$ = add_value ($1, $3); ! 938: } ! 939: ; ! 940: NamedNumber: NAME LPAREN NumericValue RPAREN Action { ! 941: $$ = $3; ! 942: $$ -> yv_named = $1; ! 943: $$ -> yv_flags |= YV_NAMED; ! 944: if ($5) { ! 945: $$ -> yv_action = $5 -> ya_text; ! 946: $$ -> yv_act_lineno = $5 -> ya_lineno; ! 947: free_action ($5); ! 948: } ! 949: } ! 950: ; ! 951: NumericValue: LITNUMBER { ! 952: $$ = new_value (YV_NUMBER); ! 953: $$ -> yv_number = $1; ! 954: } ! 955: | DefinedValue ! 956: ; ! 957: ! 958: ElementTypes: OptionalTypeList { $$ = $1; } ! 959: | empty { $$ = NULLYP; } ! 960: ; ! 961: MemberTypes: OptionalTypeList { $$ = $1; } ! 962: ! 963: | empty { $$ = NULLYP; } ! 964: ; ! 965: OptionalTypeList: OptionalType { $$ = $1; } ! 966: | OptionalTypeList COMMA OptionalType { ! 967: $$ = add_type ($1, $3); ! 968: } ! 969: ; ! 970: OptionalType: NamedType { $$ = $1; } ! 971: | NamedType OPTIONAL Control { ! 972: $$ = $1; ! 973: $$ -> yp_flags |= YP_OPTIONAL; ! 974: if ($3) { ! 975: $$ -> yp_optcontrol = $3; ! 976: $$ -> yp_flags |= YP_OPTCONTROL; ! 977: } ! 978: } ! 979: | NamedType DEFAULT Value Control { ! 980: $$ = $1; ! 981: $$ -> yp_default = $3; ! 982: $$ -> yp_flags |= YP_DEFAULT; ! 983: if ($4) { ! 984: $$ -> yp_optcontrol = $4; ! 985: $$ -> yp_flags |= YP_OPTCONTROL; ! 986: } ! 987: } ! 988: | ComponentsOf { $$ = $1; } ! 989: | NAME ComponentsOf { $$ = $2; $$->yp_id = $1; } ! 990: ; ! 991: NamedType: NAME Action Type { ! 992: $$ = $3; ! 993: $$ -> yp_id = $1; ! 994: if ($$ -> yp_action1 == NULLCP && $2) { ! 995: $$ -> yp_action1 = $2 -> ya_text; ! 996: $$ -> yp_act1_lineno = $2 -> ya_lineno; ! 997: free_action ($2); ! 998: } ! 999: $$ -> yp_flags |= YP_ID; ! 1000: } ! 1001: | Type { $$ = $1; } ! 1002: ; ! 1003: ComponentsOf: Components Type { ! 1004: $$ = $2; ! 1005: $$ -> yp_flags |= YP_COMPONENTS; ! 1006: } ! 1007: ; ! 1008: AlternativeTypeList: NamedType { $$ = $1; } ! 1009: | AlternativeTypeList COMMA NamedType { ! 1010: $$ = add_type ($1, $3); ! 1011: } ! 1012: ; ! 1013: ! 1014: Tag: LBRACKET Class NumericValue RBRACKET { ! 1015: $$ = $2; ! 1016: $$ -> yt_value = $3; ! 1017: } ! 1018: ; ! 1019: Class: UNIVERSAL { $$ = new_tag (PE_CLASS_UNIV); } ! 1020: | APPLICATION { $$ = new_tag (PE_CLASS_APPL); } ! 1021: | PRIVATE { $$ = new_tag (PE_CLASS_PRIV); } ! 1022: | empty { $$ = new_tag (PE_CLASS_CONT); } ! 1023: ; ! 1024: ! 1025: ! 1026: Valueassignment: NAME Type CCE Value ! 1027: ; ! 1028: ! 1029: Value: BuiltinValue ! 1030: | DefinedValue ! 1031: ; ! 1032: BuiltinValue: TRUE { ! 1033: $$ = new_value (YV_BOOL); ! 1034: $$ -> yv_number = 1; ! 1035: } ! 1036: | FALSE { ! 1037: $$ = new_value (YV_BOOL); ! 1038: $$ -> yv_number = 0; ! 1039: } ! 1040: | LITNUMBER { ! 1041: $$ = new_value (YV_NUMBER); ! 1042: $$ -> yv_number = $1; ! 1043: } ! 1044: | LBRACE ID IdentifierList RBRACE { ! 1045: $$ = new_value (YV_IDLIST); ! 1046: $$ -> yv_idlist = new_value (YV_IDEFINED); ! 1047: $$ -> yv_idlist -> yv_identifier = $2; ! 1048: if ($3) ! 1049: $$ = add_value ($$, $3); ! 1050: } ! 1051: | LITSTRING { ! 1052: $$ = new_value (YV_STRING); ! 1053: $$ -> yv_string = $1; ! 1054: } ! 1055: | NIL { $$ = new_value (YV_NULL); } ! 1056: | LBRACE Values RBRACE { ! 1057: $$ = new_value (YV_VALIST); ! 1058: $$ -> yv_idlist = $2; ! 1059: } ! 1060: | NAME Value { ! 1061: $$ = $2; ! 1062: $$ -> yv_id = $1; ! 1063: $$ -> yv_flags |= YV_ID; ! 1064: } ! 1065: | Type Value { ! 1066: $$ = $2; ! 1067: $$ -> yv_type = $1; ! 1068: $$ -> yv_flags |= YV_TYPE; ! 1069: } ! 1070: | RealValue { ! 1071: $$ = new_value (YV_REAL); ! 1072: $$ -> yv_real = $1; ! 1073: } ! 1074: ; ! 1075: ! 1076: RealValue: NumericRealValue ! 1077: | SpecialRealValue ! 1078: ; ! 1079: ! 1080: SpecialRealValue: PLUSINFINITY { $$ = PE_REAL_INFINITY;} ! 1081: | MINUSINFINITY { $$ = - PE_REAL_INFINITY; } ! 1082: ; ! 1083: ! 1084: NumericRealValue: LBRACE LITNUMBER COMMA LITNUMBER COMMA ! 1085: LITNUMBER RBRACE { ! 1086: if ($4 != 2 && $4 != 10) ! 1087: myyerror ("Illegal base value %d", $4); ! 1088: $$ = $2 * pow ((double)$4, (double)$6); ! 1089: } ! 1090: ; ! 1091: ! 1092: DefinedValue: ID { ! 1093: $$ = new_value (YV_IDEFINED); ! 1094: $$ -> yv_identifier = $1; ! 1095: } ! 1096: | NAME { /* XXX */ ! 1097: $$ = new_value (YV_IDEFINED); ! 1098: $$ -> yv_identifier = $1; ! 1099: $$ -> yv_flags |= YV_BOUND; ! 1100: } ! 1101: | ID DOT ID { ! 1102: $$ = new_value (YV_IDEFINED); ! 1103: $$ -> yv_identifier = $3; ! 1104: $$ -> yv_module = $1; ! 1105: } ! 1106: ; ! 1107: ! 1108: IdentifierList: IdentifierList COMMA ID { ! 1109: $$ = new_value (YV_IDEFINED); ! 1110: $$ -> yv_identifier = $3; ! 1111: if ($1) ! 1112: $$ = add_value ($1, $$); ! 1113: } ! 1114: | empty { $$ = NULLYV; } ! 1115: ; ! 1116: ! 1117: Values: NamedValueList { $$ = $1; } ! 1118: | empty { $$ = NULLYV; } ! 1119: ; ! 1120: NamedValueList: NamedValue { $$ = $1; } ! 1121: | NamedValueList COMMA NamedValue { ! 1122: $$ = add_value ($1, $3); ! 1123: } ! 1124: ; ! 1125: NamedValue: Value { $$ = $1; } ! 1126: ; ! 1127: ! 1128: empty: ; ! 1129: ! 1130: Octetstring: OCTET STRING ! 1131: | OCTETSTRING ! 1132: ; ! 1133: ! 1134: Bitstring: BITSTRING ! 1135: | BIT STRING ! 1136: ; ! 1137: ! 1138: SequenceOf: SEQUENCEOF ! 1139: | SEQUENCE OF ! 1140: ; ! 1141: SetOf: SETOF ! 1142: | SET OF ! 1143: ; ! 1144: Components: COMPONENTSOF ! 1145: | COMPONENTS OF ! 1146: ; ! 1147: ! 1148: ObjectIdentifierValue: LBRACE ObjIdComponentList RBRACE ! 1149: { $$ = $2; } ! 1150: ; ! 1151: ! 1152: ObjIdComponentList: ObjIdComponent ! 1153: | ObjIdComponentList ObjIdComponent ! 1154: { ! 1155: $$ = addoid($1, $2); ! 1156: oid_free ($1); ! 1157: oid_free ($2); ! 1158: } ! 1159: ; ! 1160: ! 1161: ObjIdComponent: NumberForm ! 1162: | NameAndNumberForm ! 1163: ; ! 1164: ! 1165: NumberForm: LITNUMBER { $$ = int2oid ($1); } ! 1166: | DefinedValue { ! 1167: $$ = oidlookup($1->yv_identifier); ! 1168: free((char *)$1); ! 1169: } ! 1170: ; ! 1171: ! 1172: NameAndNumberForm: NAME LPAREN NumberForm RPAREN { ! 1173: free ($1); ! 1174: $$ = $3; ! 1175: } ! 1176: ; ! 1177: ! 1178: SubType: Type SubtypeSpec ! 1179: | SET SizeConstraint OF Sctrl Action Control Type { ! 1180: $$ = new_type (YP_SETTYPE); ! 1181: $$ -> yp_type = $7; ! 1182: if ($4) { ! 1183: $$ -> yp_structname = $4 -> ys_structname; ! 1184: $$ -> yp_ptrname = $4 -> ys_ptrname; ! 1185: free_ys ($4); ! 1186: } ! 1187: if ($6) { ! 1188: $$ -> yp_control = $6; ! 1189: $$ -> yp_flags |= YP_CONTROLLED; ! 1190: } ! 1191: if ($5) { ! 1192: $$ -> yp_action3 = $5 -> ya_text; ! 1193: $$ -> yp_act2_lineno = $5 -> ya_lineno; ! 1194: free_action ($5); ! 1195: } ! 1196: } ! 1197: ! 1198: | SEQUENCE SizeConstraint OF Sctrl Action Control Type { ! 1199: $$ = new_type (YP_SEQTYPE); ! 1200: $$ -> yp_type = $7; ! 1201: if ($4) { ! 1202: $$ -> yp_structname = $4 -> ys_structname; ! 1203: $$ -> yp_ptrname = $4 -> ys_ptrname; ! 1204: free_ys ($4); ! 1205: } ! 1206: if ($6) { ! 1207: $$ -> yp_control = $6; ! 1208: $$ -> yp_flags |= YP_CONTROLLED; ! 1209: } ! 1210: if ($5) { ! 1211: $$ -> yp_action3 = $5 -> ya_text; ! 1212: $$ -> yp_act3_lineno = $5 -> ya_lineno; ! 1213: free_action ($5); ! 1214: } ! 1215: } ! 1216: ; ! 1217: ! 1218: SubtypeSpec: LPAREN SubtypeAlternative SubtypeAlternativeList RPAREN ! 1219: ; ! 1220: ! 1221: SubtypeAlternative: SubtypeValueSet ! 1222: | SubtypeConstraint ! 1223: ; ! 1224: ! 1225: SubtypeAlternativeList: BAR SubtypeAlternative SubtypeAlternativeList ! 1226: | empty ! 1227: ; ! 1228: ! 1229: SubtypeValueSet: Value ! 1230: | ContainedSubType ! 1231: | ValueRange ! 1232: | PermittedAlphabet ! 1233: ; ! 1234: ! 1235: SubtypeConstraint: SizeConstraint ! 1236: | InnerTypeConstraint ! 1237: ; ! 1238: ! 1239: ContainedSubType: INCLUDES Type ; ! 1240: ! 1241: ValueRange: LowerEndPoint DOTDOT UpperEndpoint ! 1242: ; ! 1243: ! 1244: LowerEndPoint: LowerEndValue ! 1245: | LowerEndValue LANGLE ! 1246: ; ! 1247: ! 1248: UpperEndpoint: UpperEndValue ! 1249: | LANGLE UpperEndValue ! 1250: ; ! 1251: ! 1252: LowerEndValue: Value ! 1253: | MIN ! 1254: ; ! 1255: ! 1256: UpperEndValue: Value ! 1257: | MAX ! 1258: ; ! 1259: ! 1260: SizeConstraint: SIZE SubtypeSpec ! 1261: ; ! 1262: ! 1263: PermittedAlphabet: FROM SubtypeSpec ! 1264: ; ! 1265: ! 1266: InnerTypeConstraint: WITH COMPONENT SingleTypeConstraint ! 1267: | WITH COMPONENTS MultipleTypeConstraints ! 1268: ; ! 1269: ! 1270: SingleTypeConstraint: SubtypeSpec ! 1271: ; ! 1272: ! 1273: MultipleTypeConstraints:FullSpecification ! 1274: | PartialSpecification ! 1275: ; ! 1276: ! 1277: FullSpecification: LBRACE TypeConstraints RBRACE ! 1278: ; ! 1279: ! 1280: PartialSpecification: LBRACE DOTDOTDOT COMMA TypeConstraints RBRACE ! 1281: ; ! 1282: ! 1283: TypeConstraints: NamedConstraint ! 1284: | NamedConstraint COMMA TypeConstraints ! 1285: ; ! 1286: ! 1287: NamedConstraint: NAME Constraint ! 1288: | Constraint ! 1289: ; ! 1290: ! 1291: Constraint: ValueConstraint ! 1292: | PresenceConstraint ! 1293: | empty ! 1294: ; ! 1295: ! 1296: ValueConstraint: SubtypeSpec ! 1297: ; ! 1298: ! 1299: PresenceConstraint: PRESENT ! 1300: | ABSENT ! 1301: ; ! 1302: ! 1303: Sctrl: SCTRL { $$ = new_ys ($1); } ! 1304: | empty { $$ = NULLYS; } ! 1305: ; ! 1306: %% ! 1307: ! 1308: #ifdef HPUX ! 1309: #define uchar Uchar ! 1310: #endif ! 1311: #include "lex.c"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.