[英]C++ boost::spirit::qi recursive rule
使用boost :: spirit :: qi,假設您要解析以下內容:
object.member()
您可以使用如下規則:
member_access_rule =
symbol_rule >> '.' >> symbol_rule >> '(' >> ')'
;
但是,如果要解析:
object.member().member()
要么
object.member().member().member()
看來,您將使用以下規則:
member_access_rule =
( member_access_rule >> '.' >> symbol_rule >> '(' >> ')' )
| ( symbol_rule >> '.' >> symbol_rule >> '(' >> ')' )
;
但這是行不通的。
在上述形式中,“ member_access_rule”內的第一個子規則本身就是因此,因此對“ member_access_rule”的遞歸調用將堆積起來,而無需嘗試匹配替代方案。
我該如何解決?
任何意見,將不勝感激!
是的,PEG很容易發生臭名昭著的左遞歸。
我只是將規則重構為
member_access_rule =
( symbol_rule >> '.' >> symbol_rule >> '(' >> ')' )
| ( member_access_rule >> '.' >> symbol_rule >> '(' >> ')' )
;
或者,就此而言:
member_access_rule =
symbol_rule >> +('.' >> symbol_rule) >> '(' >> ')';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.