Fixtype of GCC attributes.
This is a tagged union type, introduced by fty::deftagsum.
This is part of the GCC extension for attributes. For now we only model the older
The documentation lists three kinds of attributes: empty, names, and names with parameters. For now we only model the latter two kinds. The documentation lists three kinds of parameters (which presumably refer to the whole collection of parameters of a single attribute with parameters, not to a single parameter, because otherwise it would be unclear what it means, for a single parameter, to be a comma-separated list of things, given that parameters are themselves comma-separated. However, the three kinds of (lists of) parameters overlap syntactically: an instance of the first kind, i.e. an identifier, could be also an expression, and thus could be also an instance of the third kind; an instance of the second kind, i.e. an identifier followed by one or more expressions, could be also just a list of two or more expressions, and thus an instance of the third kind. Thus, we simply define an attribute with parameter as containing a list of zero or more expressions, which covers all three kinds of parameters.
Note the distinction between an attribute that is just a name, and an attributed that consists of a name and zero parameters: in concrete syntax, the latter would include open and closed parentheses, without anything in between (except white space or comments).