Remove leading _ from EnumValue and StructMember. Give them constructors. Use those constructors.
Pointers to arrays need another layer of parens.
When parsing types, descend into parens first. Wrap on the way back out. This properly parses (*x)[] as array-of-pointers.