5.16.5.2. Union Binding

Start data section to src/flx_parse.mly[7 /33 ] Next Prev First Last
   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: 
End data section to src/flx_parse.mly[7]