After the non-answer of Albert Y. C. Lai about the associativity
of logical connectives:
a compiler writer already knows it's "(and x y z t)" and generates the correct code and not bother to split hair.
I issued a bit acrimonious remark pointing out that a parsing
question should not be answered that a compiler writer "knows".
imagine that your students ask you: HOW "x && y && z && t" is transformed into "(and x y z t)
I got my reward...
What would you tell students about commas and semicolons in the following? Are these commas and semicolons left associating? Right associating? Both? Neither? Has anyone even asked? How to parse them? I would tell the same.
Pascal's "begin foo() ; tora() ; tigger() end"
C's "x = (y=10 , y=f(y) , y=g(y) , y);"
Haskell's "f x | g x > 0 , h x < 0 , sin x > 0 = ()"
Prolog's "g(X,Y) :- parent(X,C1) , parent(C1,C2) , parent(C2,Y)."
Matlab's "[3+4i , 3 , 5-i ; 1-i , 1+i , 1 ; 7+8i , 4-3i , -i]"
Now I don't know whether Albert Y. C. Lai is pulling my leg, or
he really confuses the operator grammars and other ways of
parsing... Everybody who taught Prolog knows that commas and
semicolons in this language ARE logical connectives, so replacing
one non-answer by another one "I would tell the same" is not an
appropriate response. There IS a concrete answer to this
question, both operators are xfy with well defined precedence.
In Pascal commas and semicolons are not operators at all, and the
standard parsing is a recursive top-down old machinery (well, it
was, when I studied the Wirth & Amman compiler sources). The
associativity is implicitly specified by the grammar productions.
In Matlab the syntactic connectives in matrices are not operators
either.
In one detail Albert Y. C. Lai is absolutely right, namely that this discussion is completely pointless.
Jerzy Karczmarczuk