christian.opp.exp 33.8 KB
Newer Older
1 2 3 4 5 6
Warning: you are using the standard library and/or the %inline keyword. We
recommend switching on --infer in order to avoid obscure type error messages.
%{
%}
%start main
%token ABSENT
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
%token ABSTRACT_SYNTAX
%token ALL
%token APPLICATION
%token AUTOMATIC
%token Assignment
%token At
%token AtDot
%token BEGIN
%token BIT
%token BMPString
%token BOOLEAN
%token BY
%token Bang
%token <string> Bstring
%token CHARACTER
%token CHOICE
%token CLASS
%token COMPONENT
%token COMPONENTS
%token CONSTRAINED
%token CONTAINING
%token Circumflex
%token Colon
%token Comma
%token <string> Cstring
%token DEFAULT
%token DEFINITIONS
%token <string> DefinedSyntax
%token Dot
%token DoubleDot
%token EMBEDDED
%token ENCODED
%token END
%token ENUMERATED
%token EOF
%token EXCEPT
%token EXPLICIT
%token EXPORTS
%token EXTENSIBILITY
%token EXTERNAL
%token Ellipsis
%token FALSE
%token FROM
%token GeneralString
%token GeneralizedTime
%token GraphicString
%token <string> Hstring
%token Hyphen
%token IA5String
%token IDENTIFIER
%token IMPLICIT
%token IMPLIED
%token IMPORTS
%token INCLUDES
%token INSTANCE
%token INTEGER
%token INTERSECTION
%token ISO646String
%token LeftBrace
%token LeftBracket
%token LeftDoubleBracket
%token LeftParen
%token LessThan
%token <string> Lower
%token <string> LowerField
%token MAX
%token MIN
%token MINUS_INFINITY
%token Middle
%token NULL
%token <string> Number
%token NumericString
%token OBJECT
%token OCTET
%token OF
%token OPTIONAL
%token ObjectDescriptor
%token PATTERN
%token PDV
%token PLUS_INFINITY
%token PRESENT
%token PRIVATE
%token PrintableString
%token REAL
%token RELATIVE_OID
%token <string> RealNumber
%token RightBrace
%token RightBracket
%token RightDoubleBracket
%token RightParen
%token SEQUENCE
%token SET
%token SIZE
%token STRING
%token SYNTAX
%token SemiColon
%token T61String
%token TAGS
%token TRUE
%token TYPE_IDENTIFIER
%token TeletexString
%token UNION
%token UNIQUE
%token UNIVERSAL
%token UTCTime
%token UTF8String
%token UniversalString
%token <string> Upper
%token <string> UpperField
%token VideotexString
%token VisibleString
%token WITH
119 120 121
%type <unit> main
%%

122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
option_UNIQUE_:
  
    {    ( None )}
| x = UNIQUE
    {    ( Some x )}

option_objectOptionalitySpec_:
  
    {    ( None )}
| x = objectOptionalitySpec
    {    ( Some x )}

option_objectSetOptionalitySpec_:
  
    {    ( None )}
| x = objectSetOptionalitySpec
    {    ( Some x )}

option_typeOptionalitySpec_:
  
    {    ( None )}
| x = typeOptionalitySpec
    {    ( Some x )}

option_valueOptionalitySpec_:
  
    {    ( None )}
| x = valueOptionalitySpec
    {    ( Some x )}

option_valueSetOptionalitySpec_:
  
    {    ( None )}
| x = valueSetOptionalitySpec
    {    ( Some x )}

option_withSyntaxSpec_:
  
    {    ( None )}
| x = withSyntaxSpec
    {    ( Some x )}

loption_separated_nonempty_list_Comma_fieldSetting__:
  
    {    ( [] )}
| x = separated_nonempty_list_Comma_fieldSetting_
    {    ( x )}

loption_separated_nonempty_list_Comma_userDefinedConstraintParameter__:
  
    {    ( [] )}
| x = separated_nonempty_list_Comma_userDefinedConstraintParameter_
    {    ( x )}

nonempty_list_tokenOrGroupSpec_:
  x = tokenOrGroupSpec
    {    ( [ x ] )}
| x = tokenOrGroupSpec xs = nonempty_list_tokenOrGroupSpec_
    {    ( x :: xs )}

separated_nonempty_list_Comma_actualParameter_:
  x = actualParameter
    {    ( [ x ] )}
| x = actualParameter _2 = Comma xs = separated_nonempty_list_Comma_actualParameter_
    {    ( x :: xs )}

separated_nonempty_list_Comma_atNotation_:
  x = atNotation
    {    ( [ x ] )}
| x = atNotation _2 = Comma xs = separated_nonempty_list_Comma_atNotation_
    {    ( x :: xs )}

separated_nonempty_list_Comma_fieldSetting_:
  x = fieldSetting
    {    ( [ x ] )}
| x = fieldSetting _2 = Comma xs = separated_nonempty_list_Comma_fieldSetting_
    {    ( x :: xs )}

separated_nonempty_list_Comma_fieldSpec_:
  x = fieldSpec
    {    ( [ x ] )}
| x = fieldSpec _2 = Comma xs = separated_nonempty_list_Comma_fieldSpec_
    {    ( x :: xs )}

separated_nonempty_list_Comma_parameter_:
  x = parameter
    {    ( [ x ] )}
| x = parameter _2 = Comma xs = separated_nonempty_list_Comma_parameter_
    {    ( x :: xs )}

separated_nonempty_list_Comma_userDefinedConstraintParameter_:
  x = userDefinedConstraintParameter
    {    ( [ x ] )}
| x = userDefinedConstraintParameter _2 = Comma xs = separated_nonempty_list_Comma_userDefinedConstraintParameter_
    {    ( x :: xs )}

separated_nonempty_list_Dot_Lower_:
  x = Lower
    {    ( [ x ] )}
| x = Lower _2 = Dot xs = separated_nonempty_list_Dot_Lower_
    {    ( x :: xs )}

separated_nonempty_list_Dot_primitiveFieldName_:
  x = primitiveFieldName
    {    ( [ x ] )}
| x = primitiveFieldName _2 = Dot xs = separated_nonempty_list_Dot_primitiveFieldName_
    {    ( x :: xs )}

230
main:
231
  _1 = moduleDefinition _2 = EOF
232
    {  ()}
233 234

moduleDefinition:
235
  _1 = moduleIdentifier _2 = DEFINITIONS _3 = tagDefault _4 = extensionDefault _5 = Assignment _6 = BEGIN _7 = moduleBody _8 = END
236
    {  ()}
237 238

moduleIdentifier:
239
  _1 = Upper _2 = definitiveIdentifier
240
    {  ()}
241 242

definitiveIdentifier:
243
  _1 = LeftBrace _2 = definitiveObjIdComponentList _3 = RightBrace
244
    {  ()}
245 246
| 
    {let _1 =
247
                 ()
248
in
249
  ()}
250 251

definitiveObjIdComponentList:
252
  _1 = definitiveObjIdComponent
253 254 255
    {  ()}
| _1 = definitiveObjIdComponent _2 = definitiveObjIdComponentList
    {  ()}
256 257

definitiveObjIdComponent:
258
  _1 = nameForm
259 260 261 262 263
    {  ()}
| _1 = definitiveNumberForm
    {  ()}
| _1 = definitiveNameAndNumberForm
    {  ()}
264 265

definitiveNumberForm:
266
  _1 = Number
267
    {  ()}
268 269

definitiveNameAndNumberForm:
270
  _1 = Lower _2 = LeftParen _3 = definitiveNumberForm _4 = RightParen
271
    {  ()}
272 273

tagDefault:
274
  _1 = EXPLICIT _2 = TAGS
275 276 277 278 279
    {  ()}
| _1 = IMPLICIT _2 = TAGS
    {  ()}
| _1 = AUTOMATIC _2 = TAGS
    {  ()}
280 281
| 
    {let _1 =
282
                 ()
283
in
284
  ()}
285 286

extensionDefault:
287
  _1 = EXTENSIBILITY _2 = IMPLIED
288
    {  ()}
289 290
| 
    {let _1 =
291
                 ()
292
in
293
  ()}
294 295

moduleBody:
296
  _1 = exports _2 = imports _3 = assignmentList
297
    {  ()}
298 299
| 
    {let _1 =
300
                 ()
301
in
302
  ()}
303 304

exports:
305
  _1 = EXPORTS _2 = symbolsExported _3 = SemiColon
306 307 308
    {  ()}
| _1 = EXPORTS _2 = ALL _3 = SemiColon
    {  ()}
309 310
| 
    {let _1 =
311
                 ()
312
in
313
  ()}
314 315

symbolsExported:
316
  _1 = symbolList
317
    {  ()}
318 319
| 
    {let _1 =
320
                 ()
321
in
322
  ()}
323 324

imports:
325
  _1 = IMPORTS _2 = symbolsImported _3 = SemiColon
326
    {  ()}
327 328
| 
    {let _1 =
329
                 ()
330
in
331
  ()}
332 333

symbolsImported:
334
  _1 = symbolsFromModuleList
335
    {  ()}
336 337
| 
    {let _1 =
338
                 ()
339
in
340
  ()}
341 342

symbolsFromModuleList:
343
  _1 = symbolsFromModule
344 345 346
    {  ()}
| _1 = symbolsFromModuleList _2 = symbolsFromModule
    {  ()}
347 348

symbolsFromModule:
349
  _1 = symbolList _2 = FROM _3 = globalModuleReference
350
    {  ()}
351 352

globalModuleReference:
353
  _1 = Upper _2 = assignedIdentifier
354
    {  ()}
355 356

assignedIdentifier:
357
  _1 = objectIdentifierValue
358 359 360
    {  ()}
| _1 = definedValue
    {  ()}
361 362
| 
    {let _1 =
363
                 ()
364
in
365
  ()}
366 367

symbolList:
368
  _1 = symbol
369 370 371
    {  ()}
| _1 = symbolList _2 = Comma _3 = symbol
    {  ()}
372 373

symbol:
374
  _1 = reference
375 376 377
    {  ()}
| _1 = parameterizedReference
    {  ()}
378 379

reference:
380
  _1 = Upper
381 382 383
    {  ()}
| _1 = Lower
    {  ()}
384 385

assignmentList:
386
  _1 = assignment
387 388 389
    {  ()}
| _1 = assignmentList _2 = assignment
    {  ()}
390 391

assignment:
392
  _1 = typeAssignment
393 394 395 396 397 398 399 400 401 402 403 404 405
    {  ()}
| _1 = valueAssignment
    {  ()}
| _1 = valueSetTypeAssignment
    {  ()}
| _1 = objectClassAssignment
    {  ()}
| _1 = objectAssignment
    {  ()}
| _1 = objectSetAssignment
    {  ()}
| _1 = parameterizedAssignment
    {  ()}
406 407

definedType:
408
  _1 = externalTypeReference
409 410 411 412 413 414 415
    {  ()}
| _1 = Upper
    {  ()}
| _1 = parameterizedType
    {  ()}
| _1 = parameterizedValueSetType
    {  ()}
416 417

externalTypeReference:
418
  _1 = Upper _2 = Dot _3 = Upper
419
    {  ()}
420 421

definedValue:
422
  _1 = externalValueReference
423 424 425 426 427
    {  ()}
| _1 = Lower
    {  ()}
| _1 = parameterizedValue
    {  ()}
428 429

externalValueReference:
430
  _1 = Upper _2 = Dot _3 = Lower
431
    {  ()}
432 433

typeAssignment:
434
  _1 = Upper _2 = Assignment _3 = type_x
435
    {  ()}
436 437

valueAssignment:
438
  _1 = Lower _2 = type_x _3 = Assignment _4 = value
439
    {  ()}
440 441

valueSetTypeAssignment:
442
  _1 = Upper _2 = type_x _3 = Assignment _4 = valueSet
443
    {  ()}
444 445

valueSet:
446
  _1 = LeftBrace _2 = elementSetSpecs _3 = RightBrace
447
    {  ()}
448 449

type_x:
450
  _1 = builtinType
451 452 453 454 455
    {  ()}
| _1 = referencedType
    {  ()}
| _1 = constrainedType
    {  ()}
456 457

builtinType:
458
  _1 = bitStringType
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497
    {  ()}
| _1 = booleanType
    {  ()}
| _1 = characterStringType
    {  ()}
| _1 = choiceType
    {  ()}
| _1 = embeddedPDVType
    {  ()}
| _1 = enumeratedType
    {  ()}
| _1 = externalType
    {  ()}
| _1 = instanceOfType
    {  ()}
| _1 = integerType
    {  ()}
| _1 = nullType
    {  ()}
| _1 = objectClassFieldType
    {  ()}
| _1 = objectIdentifierType
    {  ()}
| _1 = octetStringType
    {  ()}
| _1 = realType
    {  ()}
| _1 = relativeOIDType
    {  ()}
| _1 = sequenceType
    {  ()}
| _1 = sequenceOfType
    {  ()}
| _1 = setType
    {  ()}
| _1 = setOfType
    {  ()}
| _1 = taggedType
    {  ()}
498 499

namedType:
500
  _1 = Lower _2 = type_x
501
    {  ()}
502 503

referencedType:
504
  _1 = definedType
505 506 507 508 509 510 511 512 513
    {  ()}
| _1 = usefulType
    {  ()}
| _1 = selectionType
    {  ()}
| _1 = typeFromObject
    {  ()}
| _1 = valueSetFromObjects
    {  ()}
514 515

value:
516
  _1 = builtinValue
517 518 519 520 521
    {  ()}
| _1 = referencedValue
    {  ()}
| _1 = objectClassFieldValue
    {  ()}
522 523

builtinValue:
524
  _1 = bitStringValue
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
    {  ()}
| _1 = booleanValue
    {  ()}
| _1 = characterStringValue
    {  ()}
| _1 = choiceValue
    {  ()}
| _1 = embeddedPDVValue
    {  ()}
| _1 = enumeratedValue
    {  ()}
| _1 = externalValue
    {  ()}
| _1 = integerValue
    {  ()}
| _1 = nullValue
    {  ()}
| _1 = objectIdentifierValue
    {  ()}
| _1 = octetStringValue
    {  ()}
| _1 = realValue
    {  ()}
| _1 = relativeOIDValue
    {  ()}
| _1 = sequenceValue
    {  ()}
| _1 = sequenceOfValue
    {  ()}
| _1 = setValue
    {  ()}
| _1 = setOfValue
    {  ()}
558 559

referencedValue:
560
  _1 = definedValue
561 562 563
    {  ()}
| _1 = valueFromObject
    {  ()}
564 565

namedValue:
566
  _1 = Lower _2 = value
567
    {  ()}
568 569

booleanType:
570
  _1 = BOOLEAN
571
    {  ()}
572 573

booleanValue:
574
  _1 = TRUE
575 576 577
    {  ()}
| _1 = FALSE
    {  ()}
578 579

integerType:
580
  _1 = INTEGER
581 582 583
    {  ()}
| _1 = INTEGER _2 = LeftBrace _3 = namedNumberList _4 = RightBrace
    {  ()}
584 585

namedNumberList:
586
  _1 = namedNumber
587 588 589
    {  ()}
| _1 = namedNumberList _2 = Comma _3 = namedNumber
    {  ()}
590 591

namedNumber:
592
  _1 = Lower _2 = LeftParen _3 = signedNumber _4 = RightParen
593 594 595
    {  ()}
| _1 = Lower _2 = LeftParen _3 = definedValue _4 = RightParen
    {  ()}
596 597

signedNumber:
598
  _1 = Number
599 600 601
    {  ()}
| _1 = Hyphen _2 = Number
    {  ()}
602 603

integerValue:
604
  _1 = signedNumber
605 606 607
    {  ()}
| _1 = Lower
    {  ()}
608 609

enumeratedType:
610
  _1 = ENUMERATED _2 = LeftBrace _3 = enumerations _4 = RightBrace
611
    {  ()}
612 613

enumerations:
614
  _1 = rootEnumeration
615 616 617 618 619
    {  ()}
| _1 = rootEnumeration _2 = Comma _3 = Ellipsis _4 = exceptionSpec
    {  ()}
| _1 = rootEnumeration _2 = Comma _3 = Ellipsis _4 = exceptionSpec _5 = Comma _6 = additionalEnumeration
    {  ()}
620 621

rootEnumeration:
622
  _1 = enumeration
623
    {  ()}
624 625

additionalEnumeration:
626
  _1 = enumeration
627
    {  ()}
628 629

enumeration:
630
  _1 = enumerationItem
631 632 633
    {  ()}
| _1 = enumerationItem _2 = Comma _3 = enumeration
    {  ()}
634 635

enumerationItem:
636
  _1 = Lower
637 638 639
    {  ()}
| _1 = namedNumber
    {  ()}
640 641

enumeratedValue:
642
  _1 = Lower
643
    {  ()}
644 645

realType:
646
  _1 = REAL
647
    {  ()}
648 649

realValue:
650
  _1 = numericRealValue
651 652 653
    {  ()}
| _1 = specialRealValue
    {  ()}
654 655

numericRealValue:
656
  _1 = RealNumber
657 658 659 660 661
    {  ()}
| _1 = Hyphen _2 = RealNumber
    {  ()}
| _1 = sequenceValue
    {  ()}
662

663 664 665 666 667 668
specialRealValue:
  _1 = PLUS_INFINITY
    {  ()}
| _1 = MINUS_INFINITY
    {  ()}

669
bitStringType:
670
  _1 = BIT _2 = STRING
671 672 673
    {  ()}
| _1 = BIT _2 = STRING _3 = LeftBrace _4 = namedBitList _5 = RightBrace
    {  ()}
674 675

namedBitList:
676
  _1 = namedBit
677 678 679
    {  ()}
| _1 = namedBitList _2 = Comma _3 = namedBit
    {  ()}
680 681

namedBit:
682
  _1 = Lower _2 = LeftParen _3 = Number _4 = RightParen
683 684 685
    {  ()}
| _1 = Lower _2 = LeftParen _3 = definedValue _4 = RightParen
    {  ()}
686 687

bitStringValue:
688
  _1 = Bstring
689 690 691 692 693 694 695 696 697
    {  ()}
| _1 = Hstring
    {  ()}
| _1 = LeftBrace _2 = identifierList _3 = RightBrace
    {  ()}
| _1 = LeftBrace _2 = RightBrace
    {  ()}
| _1 = CONTAINING _2 = value
    {  ()}
698 699

identifierList:
700
  _1 = Lower
701 702 703
    {  ()}
| _1 = identifierList _2 = Comma _3 = Lower
    {  ()}
704

705 706 707 708
octetStringType:
  _1 = OCTET _2 = STRING
    {  ()}

709
octetStringValue:
710
  _1 = Bstring
711 712 713 714 715
    {  ()}
| _1 = Hstring
    {  ()}
| _1 = CONTAINING _2 = value
    {  ()}
716 717

nullType:
718
  _1 = NULL
719
    {  ()}
720 721

nullValue:
722
  _1 = NULL
723
    {  ()}
724

725 726 727 728 729 730 731 732
sequenceType:
  _1 = SEQUENCE _2 = LeftBrace _3 = RightBrace
    {  ()}
| _1 = SEQUENCE _2 = LeftBrace _3 = extensionAndException _4 = optionalExtensionMarker _5 = RightBrace
    {  ()}
| _1 = SEQUENCE _2 = LeftBrace _3 = componentTypeLists _4 = RightBrace
    {  ()}

733
extensionAndException:
734
  _1 = Ellipsis
735 736 737
    {  ()}
| _1 = Ellipsis _2 = exceptionSpec
    {  ()}
738

739 740 741 742 743 744 745 746 747
optionalExtensionMarker:
  _1 = Comma _2 = Ellipsis
    {  ()}
| 
    {let _1 =
                 ()
in
  ()}

748
componentTypeLists:
749
  _1 = rootComponentTypeList
750 751 752 753 754 755 756 757 758
    {  ()}
| _1 = rootComponentTypeList _2 = Comma _3 = extensionAndException _4 = extensionAdditions _5 = optionalExtensionMarker
    {  ()}
| _1 = rootComponentTypeList _2 = Comma _3 = extensionAndException _4 = extensionAdditions _5 = extensionEndMarker _6 = Comma _7 = rootComponentTypeList
    {  ()}
| _1 = extensionAndException _2 = extensionAdditions _3 = extensionEndMarker _4 = Comma _5 = rootComponentTypeList
    {  ()}
| _1 = extensionAndException _2 = extensionAdditions _3 = optionalExtensionMarker
    {  ()}
759 760

rootComponentTypeList:
761
  _1 = componentTypeList
762
    {  ()}
763 764

extensionEndMarker:
765
  _1 = Comma _2 = Ellipsis
766
    {  ()}
767

768 769
extensionAdditions:
  _1 = Comma _2 = extensionAdditionList
770
    {  ()}
771 772
| 
    {let _1 =
773
                 ()
774
in
775
  ()}
776

777 778
extensionAdditionList:
  _1 = extensionAddition
779
    {  ()}
780
| _1 = extensionAdditionList _2 = Comma _3 = extensionAddition
781
    {  ()}
782

783 784
extensionAddition:
  _1 = componentType
785
    {  ()}
786
| _1 = extensionAdditionGroup
787
    {  ()}
788

789 790
extensionAdditionGroup:
  _1 = LeftDoubleBracket _2 = versionNumber _3 = componentTypeList _4 = RightDoubleBracket
791
    {  ()}
792

793 794
versionNumber:
  
795
    {let _1 =
796
                 ()
797
in
798
  ()}
799
| _1 = Number _2 = Colon
800
    {  ()}
801

802 803 804 805
componentTypeList:
  _1 = componentType
    {  ()}
| _1 = componentTypeList _2 = Comma _3 = componentType
806
    {  ()}
807

808 809
componentType:
  _1 = namedType
810
    {  ()}
811
| _1 = namedType _2 = OPTIONAL
812
    {  ()}
813
| _1 = namedType _2 = DEFAULT _3 = value
814
    {  ()}
815
| _1 = COMPONENTS _2 = OF _3 = type_x
816
    {  ()}
817

818 819 820 821 822
sequenceValue:
  _1 = LeftBrace _2 = componentValueList _3 = RightBrace
    {  ()}
| _1 = LeftBrace _2 = RightBrace
    {  ()}
823

824 825 826 827
componentValueList:
  _1 = namedValue
    {  ()}
| _1 = componentValueList _2 = Comma _3 = namedValue
828
    {  ()}
829

830 831
sequenceOfType:
  _1 = SEQUENCE _2 = OF _3 = type_x
832
    {  ()}
833
| _1 = SEQUENCE _2 = OF _3 = namedType
834
    {  ()}
835 836

sequenceOfValue:
837
  _1 = LeftBrace _2 = valueList _3 = RightBrace
838 839 840 841 842
    {  ()}
| _1 = LeftBrace _2 = namedValueList _3 = RightBrace
    {  ()}
| _1 = LeftBrace _2 = RightBrace
    {  ()}
843 844

valueList:
845
  _1 = value
846 847 848
    {  ()}
| _1 = valueList _2 = Comma _3 = value
    {  ()}
849 850

namedValueList:
851
  _1 = namedValue
852 853 854
    {  ()}
| _1 = namedValueList _2 = Comma _3 = namedValue
    {  ()}
855 856

setType:
857
  _1 = SET _2 = LeftBrace _3 = RightBrace
858 859 860 861 862
    {   ()}
| _1 = SET _2 = LeftBrace _3 = extensionAndException _4 = optionalExtensionMarker _5 = RightBrace
    {  ()}
| _1 = SET _2 = LeftBrace _3 = componentTypeLists _4 = RightBrace
    {  ()}
863 864

setValue:
865
  _1 = LeftBrace _2 = componentValueList _3 = RightBrace
866 867 868
    {  ()}
| _1 = LeftBrace _2 = RightBrace
    {  ()}
869

870 871 872 873 874 875
setOfType:
  _1 = SET _2 = OF _3 = type_x
    {  ()}
| _1 = SET _2 = OF _3 = namedType
    {  ()}

876
setOfValue:
877
  _1 = LeftBrace _2 = valueList _3 = RightBrace
878 879 880 881 882
    {  ()}
| _1 = LeftBrace _2 = namedValueList _3 = RightBrace
    {  ()}
| _1 = LeftBrace _2 = RightBrace
    {  ()}
883

884 885
choiceType:
  _1 = CHOICE _2 = LeftBrace _3 = alternativeTypeLists _4 = RightBrace
886
    {  ()}
887

888 889
alternativeTypeLists:
  _1 = rootAlternativeTypeList
890
    {  ()}
891
| _1 = rootAlternativeTypeList _2 = Comma _3 = extensionAndException _4 = extensionAdditionAlternatives _5 = optionalExtensionMarker
892
    {  ()}
893

894 895
rootAlternativeTypeList:
  _1 = alternativeTypeList
896
    {  ()}
897

898 899
extensionAdditionAlternatives:
  _1 = Comma _2 = extensionAdditionAlternativesList
900
    {  ()}
901 902 903 904 905
| 
    {let _1 =
                 ()
in
  ()}
906

907 908
extensionAdditionAlternativesList:
  _1 = extensionAdditionAlternative
909
    {  ()}
910
| _1 = extensionAdditionAlternativesList _2 = Comma _3 = extensionAdditionAlternative
911
    {  ()}
912

913 914
extensionAdditionAlternative:
  _1 = extensionAdditionAlternativesGroup
915
    {  ()}
916
| _1 = namedType
917
    {  ()}
918

919 920
extensionAdditionAlternativesGroup:
  _1 = LeftDoubleBracket _2 = versionNumber _3 = alternativeTypeList _4 = RightDoubleBracket
921
    {  ()}
922

923 924
alternativeTypeList:
  _1 = namedType
925
    {  ()}
926
| _1 = alternativeTypeList _2 = Comma _3 = namedType
927
    {  ()}
928

929 930
choiceValue:
  _1 = Lower _2 = Colon _3 = value
931
    {  ()}
932

933 934
selectionType:
  _1 = Lower _2 = LessThan _3 = type_x
935
    {  ()}
936

937 938
taggedType:
  _1 = tag _2 = type_x
939
    {  ()}
940
| _1 = tag _2 = IMPLICIT _3 = type_x
941
    {  ()}
942
| _1 = tag _2 = EXPLICIT _3 = type_x
943
    {  ()}
944

945 946
tag:
  _1 = LeftBracket _2 = class_x _3 = classNumber _4 = RightBracket
947
    {  ()}
948

949
classNumber:
950
  _1 = Number
951
    {  ()}
952
| _1 = definedValue
953
    {  ()}
954

955 956
class_x:
  _1 = UNIVERSAL
957
    {  ()}
958
| _1 = APPLICATION
959
    {  ()}
960
| _1 = PRIVATE
961
    {  ()}
962 963 964 965 966
| 
    {let _1 =
                 ()
in
  ()}
967

968 969
embeddedPDVType:
  _1 = EMBEDDED _2 = PDV
970
    {  ()}
971

972 973
embeddedPDVValue:
  _1 = sequenceValue
974
    {  ()}
975

976 977
externalType:
  _1 = EXTERNAL
978
    {  ()}
979

980 981
externalValue:
  _1 = sequenceValue
982
    {  ()}
983

984 985
objectIdentifierType:
  _1 = OBJECT _2 = IDENTIFIER
986
    {  ()}
987

988 989
objectIdentifierValue:
  _1 = LeftBrace _2 = objIdComponentsList _3 = RightBrace
990
    {  ()}
991
| _1 = LeftBrace _2 = definedValue _3 = objIdComponentsList _4 = RightBrace
992
    {  ()}
993