682: union_decl: 683: | ENUM NAME LBRACE enum_items RBRACE SEMI 684: { 685: `AST_union (rstoken $1 $6, snd $2, [], $4) 686: } 687: 688: | UNION NAME tvarlist EQUAL type_sum_items SEMI 689: { 690: `AST_union (rstoken $1 $6, snd $2, $3, $5) 691: } 692: | UNION NAME tvarlist EQUAL VBAR type_sum_items SEMI 693: { 694: `AST_union (rstoken $1 $7, snd $2, $3, $6) 695: } 696: 697: | UNION NAME tvarlist LBRACE type_sum_items2 RBRACE 698: { 699: `AST_union (rstoken $1 $6, snd $2, $3, $5) 700: } 701: 702: opt_value: 703: | EQUAL INTEGER { 704: let sr,t,v = $2 in 705: let n = Big_int.int_of_big_int v in 706: Some n 707: } 708: | { None } 709: 710: enum_items: 711: | enum_items COMMA enum_item { $1 @ [$3] } 712: | enum_item { [$1] } 713: enum_item: 714: | NAME opt_value 715: { 716: let sr = slift (fst $1) in 717: snd $1, $2, typecode_of_expr (`AST_void sr) 718: } 719: 720: type_sum_items: 721: | type_sum_items VBAR type_sum_item { $1 @ [$3] } 722: | type_sum_item { [$1] } 723: type_sum_item: 724: | NAME OF expr { (snd $1,None,typecode_of_expr $3) } 725: | NAME 726: { 727: let sr = slift (fst $1) in 728: snd $1, None, typecode_of_expr (`AST_void sr) 729: } 730: type_sum_items2: 731: | type_sum_items2 type_sum_item SEMI { $1 @ [$2] } 732: | type_sum_item SEMI { [$1] } 733: