As of version 0.9.5.0, the precedence of the postfixed iteration operators—*, + and ?— is now higher than cross-product, for which the operator is the colon :. This means that a*:b is now equivalent to (a*):b, a*:b+ is equivalent to (a*):(b+), and a:b+ is now equivalent to a:(b+). As always, one can always use overt parentheses to force a desired grouping or to make the grouping more obvious to human readers.

The postfixed iteration operators also include the numerical iterations denoted inside curly braces, e.g. a{4}, a{1,3}, a{2,} and a{,4}.

OLD: Before release 0.9.5.0, the precedence of the postfixed iteration
operators—*, + and ?— was lower than cross-product. Thus a*:b
and a*:b+ were simply ungrammatical, and a:b+ was equivalent to (a:b)+.
This old precedence, reflecting the precedence in the Xerox twolc and xfst
languages, reflected the fact that in the Xerox twolc language, the
alphabet of an FSM is a set of *character pairs*, such that a:b
would be a single member of the alphabet, i.e., a single
“letter” in the alphabet. In Kleene, which does not support
anything like the twolc language, this precedence is no longer natural.