I am currently more inclined to keep them separated. Because this way we won't have to worry about "merging" two or more `struct hlsl_reg_reservations` (say, one that was returned by `parse_reg_reservation()` and other returned by `parse_packoffset()`) in the parser when we add support for parsing multiple register() and packoffset()s for the same cbuffer element.
I don't see what's difficult about merging them? In terms of colon_attribute parsing I think it'd look almost identical, it'd just be a difference of checking e.g. "$1.packoffset_reservation.type" vs "$1.reg_reservation.packoffset_type".