[英]boost::spirit::qi difference parser behavior
我正在嘗試了解Qi的差分解析器的行為。
用這樣的東西:
ruleA =
ruleAa
| ruleAb
| ruleAc
;
ruleB =
ruleA - ruleAc
;
我在想,如果輸入匹配ruleAa或ruleAb,則解析器將匹配ruleB。 換句話說,ruleB將從ruleA中減去一個替代項(ruleAc)。 這不正確嗎?
在我的代碼中,我正在執行類似上面的操作,並且可以編譯,但似乎未達到我的預期。 我的實際用例涉及其他因素,在這里很難解決。
本質上,我想做的是:我有一個類似ruleA的規則,其中包含一組替代項。 在我的語法中,此規則已在幾個不同的地方使用。 但是,在一種特定的用法中,我需要避免僅引起一種替代方法。 差異解析器似乎是用於該目的的,但也許我誤會了?
提前致謝!
我在想,如果輸入匹配ruleAa或ruleAb,則解析器將匹配ruleB。 換句話說,ruleB將從ruleA中減去一個替代項(ruleAc)。 這不正確嗎?
(A|B|C) - C
僅等效於(A|B)
前提是C
永遠不會匹配(A|B)
會匹配的任何內容。
一個簡單的例子,假設:
A = int_;
B = +space;
C = char_;
因為C
總是匹配A
或B
匹配的位置,所以很顯然(A|B) - C
總是不匹配。 與(A|B|C)-C
。
總之任何A
或B
也符合C
不再匹配something - C
。
在我的語法中,此規則已在幾個不同的地方使用。 但是,在一種特定的用法中,我需要避免僅引起一種替代方法。 差異解析器似乎是用於此目的的
正如您在上面看到的,情況並非如此。 差異解析器根本不/ modify /左側解析器。 (它只是丟棄一些與左側無關的比賽)。
我能想到的最好的事情是/只在一個位置使用/ (A|B)
在另一位置/使用(A|B|C)
。 就是這么簡單: 說出您的意思 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.