The Precedence of Postfixed Iteration Operators

As of version, 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, 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.