diff options
author | Daniel <kingdread@gmx.de> | 2020-04-21 14:06:15 +0200 |
---|---|---|
committer | Daniel <kingdread@gmx.de> | 2020-04-21 14:06:15 +0200 |
commit | 0ad7a333dc2b45f0ba658ea455284d086294a088 (patch) | |
tree | 0aef7a0a3cac0fe5467f9397d41dc6910cb44311 /src/fexpr | |
parent | d1f277892ec127b1fb83ad56de59b29c32695661 (diff) | |
download | raidgrep-0ad7a333dc2b45f0ba658ea455284d086294a088.tar.gz raidgrep-0ad7a333dc2b45f0ba658ea455284d086294a088.tar.bz2 raidgrep-0ad7a333dc2b45f0ba658ea455284d086294a088.zip |
grammar: fix precendence rules
If we don't allow the higher-tier on the left side, we cannot chain
multiple or/and on the same level. Since or is associative, we shouldn't
expect the user to write (... or (... or ...)) and instead provide the
flattened version as well.
Diffstat (limited to 'src/fexpr')
-rw-r--r-- | src/fexpr/grammar.lalrpop | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/fexpr/grammar.lalrpop b/src/fexpr/grammar.lalrpop index f559ff1..caaaf7f 100644 --- a/src/fexpr/grammar.lalrpop +++ b/src/fexpr/grammar.lalrpop @@ -28,18 +28,18 @@ PlayerFilter: Box<dyn filters::player::PlayerFilter> = { } Disjunction<T>: T = { - <a:Conjunction<T>> "or" <b:Conjunction<T>> => a | b, + <a:Disjunction<T>> "or" <b:Conjunction<T>> => a | b, Conjunction<T>, } Conjunction<T>: T = { - <a:Negation<T>> "and"? <b:Negation<T>> => a & b, + <a:Conjunction<T>> "and"? <b:Negation<T>> => a & b, Negation<T>, } Negation<T>: T = { - "not" <T> => ! <>, - "!" <T> => ! <>, + "not" <Negation<T>> => ! <>, + "!" <Negation<T>> => ! <>, T, } |