grammar XdrUnionGrammar
rule union_def "union" space identifier space union_body space? ";" <Xdrgen::AST::Definitions::Union> end rule union_body "switch" space? "(" space? discriminant:declaration space? ")" space? "{" space? arms_n:(arm_spec)+ default_case_n:(default_case_spec)? space? "}" <Xdrgen::AST::Definitions::UnionBody> end rule union_type_spec "union" space union_body <Xdrgen::AST::Definitions::NestedUnion> end rule arm_spec cases_n:case_spec+ space? declaration space? ";" space? <Xdrgen::AST::Definitions::UnionArm> end rule case_spec "case" space? value space? ":" space? <Xdrgen::AST::Definitions::UnionArmCase> end rule default_case_spec "default" space? ":" space? declaration space? ";" <Xdrgen::AST::Definitions::UnionDefaultArm> end
end