Joe keane <
j...@panix.com> wrote:
(snip)
> This reminds me of a question.
> One person designs a language 'C1' with precedence:
>
> [higher]
> ...
> |
> &
> <, <=, >, <=
> ==, !=
> ...
> [lower]
> Some other person designs a language 'C2' with precedence:
Looks not so far from B, see:
http://cm.bell-labs.com/cm/cs/who/dmr/bref.pdf
> [higher]
> ...
> <, <=, >, <=
> ==, !=
> |
> &
> ...
> [lower]
> They're the same besides that.
> To compromise, they make a new language 'C3' such that a program is
> valid C3 if it is valid C1 and valid C2 -and- both ways mean the same.
Seems easy if you disallow the use of the operators with changed
precedence without appropriate ()'s.
> Is there some good way to do this -in the grammar-?
As above, put the restriction in the grammar.
As I understand it, not having actually ever programmed in B,
(but found the reference manual) B only had the bitwise operators,
and shared them (used them also for) the logical operators.
The had (and have) the appropriate precedence.
When C inherited them from B, and then added the && and || operators,
the previous & and | operators kept their precedence. For actual use
as bitwise operators, such as masks, it would be more convenient if
they had higher precedence. As it is, they pretty much always are
parenthesized. (Easy to forget and generate wrong results.)
-- glen