簡體   English   中英

C ++ boost :: spirit :: qi遞歸規則

[英]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.

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