簡體   English   中英

boost :: spirit :: qi差異解析器行為

[英]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總是匹配AB匹配的位置,所以很顯然(A|B) - C總是不匹配。 (A|B|C)-C

總之任何AB 符合C不再匹配something - C


在我的語法中,此規則已在幾個不同的地方使用。 但是,在一種特定的用法中,我需要避免僅引起一種替代方法。 差異解析器似乎是用於此目的的

正如您在上面看到的,情況並非如此。 差異解析器根本不/ modify /左側解析器。 (它只是丟棄一些與左側無關的比賽)。

我能想到的最好的事情是/只在一個位置使用/ (A|B)在另一位置/使用(A|B|C) 就是這么簡單: 說出您的意思

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM