Operator Precedence

2004-02-18: There is an unfortunate mistake on p. 202 of the book in Table 3.31: Precedence of Opeators from High to Low. According to this table, the high-precedence crossproduct operator : outranks everything else, followed by the prefix operators such as ~ (complement) \ (term complement), and $ (contains) that are said to outrank suffix operators such as * (Kleene plus) and + (Kleene star) and other iteration operators. This is true only for the term complement operator \ but false for the other prefix operators, as illustrated by the examples below:

    \a*   is equivalent to     [\a]*    not equivalent to    \[a*]

   but

    ~a*   is equivalent to    ~[a*]    not equivalent to    [~a]*
    $a^2  is equivalent to    $[a^2]   not equivalent to    [$a]^2
    $a+  
is equivalent to    $[a+]    not equivalent to    [$a]+

In the original book release of xfst (version 8.1.7), expressions such as \a:b are not accepted as valid. Because the high precedence crossproduct operator outranks the term complement, \a:b is equivalent to the illegal expression \[a:b]. Note that term complement operator can only be used to modify a regular language and is not applicable to a regular relations sucah as the pair a:b.

Starting with the 8.3.9 release of xfst, the term complement operator outranks the colon. Consequently, an expression such as \a:b is now legal and equivalent to [\a]:b designating the relation that maps any single character symbol other than a to b.

The correct operator precedence table for version 8.3.9 and later xfst versions is given below. It includes the substitution operator ` (see page 51 in the book) that was inadvertently left out of the original table and the precede < and follow operators that appear in the precedence table but are not discussed anywhere in the book.

    \ `                                  Term complement, Substitution
    :                                       High-precedence crossproduct operator
    + * ^ .1 .2 .u .l .i .r   Kleene plus and star, iteration, upper-lower, invert and reverse
    ~ $ $. $?                          Complement, symbol complement, containment
    /                                      Ignore
                                             Concatenation (no overt operator)
   >                                   Precede and follow
    | & -                                 Union, intersect, minus
    => -> (->) @-> etc.         Rule operators
    .x. .o.                            Crossproduct and compose

    Table 3.31: Precedence of Operators from High to Low.

The correct precedence table for xfst-8.1.7 on the book CD can be derived from the above table by exchanging the first two lines.

Last Modified:Wednesday, 18-Feb-2004 18:23:38 PST