Fixtype of expressions [C:6.5].
This is a tagged union type, introduced by fty::deftagsum.
For now, we only cover some of the primary expressions [C:6.5.1], namely identifiers and constants. String literals are not covered. Generic selections are not covered. Parenthesized expression are implicitly covered in the abstract syntax, whose structure provides grouping.
Of the postfix expressions [C:6.5.2],
for now we only cover
array subscripting,
function calls (where we limit the function to be an identifier),
structure and union member access
(both forms:
Of the unary expressions [C:6.5.3],
for now we only cover pre-increment/decrement,
and the ones built with the unary operators.
Note that the grammar in [C] does not define as unary operators
all the operators of unary expressions,
e.g.
We include cast expressions, but only with the currently limited type names captured by tyname.
We use a general notion of binary expression to represent multiplicative [C:6.5.5], additive [C:6.5.6], shift [C:6.5.7], relational [C:6.5.8], equality [C:6.5.9], bitwise conjunction [C:6.5.10], bitwise exclusive disjunction [C:6.5.11], bitwise inclusive disjunction [C:6.5.12], logical conjunction [C:6.5.13], logical disjunction [C:6.5.14], and assigment [C:6.5.16] expressions. The grammar in [C] classifies these as different kinds of expressions also in order to capture the precedences among the various operators; however, in an abstract syntax, this is not necessary.
We include ternary conditional expressions.
We do not include the comma operator.