4 ms·
> anything but the simplest precedence rules. For example, if unary `NOT` has a weaker precedence than other unary operators Unary operátors use precedence lev
by ReleaseCandidat 3y ago
> anything but the simplest precedence rules. For example, if unary `NOT` has a weaker precedence than other unary operators
Unary operátors use precedence levels (binding powers) too, they are no different (regarding the existence of precedence levels) from infix functions. This is just a simplification of the precedence table in the linked article (which I haven't read).
> or if `a < b < c` is to be treated differently than `(a < b) < c`
If you want "<" to be right associative, that's exactly one of the things that's easy to do with a Pratt parser, change the binding power on one side for the "<".
> if you want to forbid bitwise operators mixing with relationals
I don't know how using a Pratt parser would interfere with throwing an error?
- orthoxerox 3y ago> If you want "<" to be right associative, that's exactly one of the things that's easy to do with a Pratt parser, change the binding power on one side for the "<". It's not about associativity at all. "a < b < c" is a ternary operator that compares three operands.
- ReleaseCandidat 3y agoThat's what I would think too (as it doesn't make much sense to compare a boolean to c), but what OP wrote doesn't make much sense else: or if `a < b < c` is to be treated differently than `(a < b) < c`
- int_19h 3y agoOP is saying that you can write (a < b < c) in C and the likes, but it behaves as if ((a < b) < c), which is pretty much never what you want - hence why ternary and N-ary comparison operators like the Python one are desirable in the first place.