2016-03-13 69 views
0

我有以下簡單的語法:升壓精神堆棧溢出異常遞歸規則

expr_ = lit("+") > expr_ 
      | qi::uint_ 
      ; 

基本上,它只是忽略了一個int的前+跡象。

下面的輸入導致堆棧溢出:

+++ ...(~195 more + chars)... ++1 

據我所知,在規則的遞歸性確實會導致此行爲,但有沒有辦法避免這種異常(一種表示該規則是不知何故,尾遞歸)?

回答

2

正如你可能知道,你可以重寫你的規則刪除遞歸:

expr_ = *lit("+") > qi::uint_; 

至於你關於尾遞歸的問題,基本上答案是否定的。

+0

謝謝,我實際上忽略了使用'*' – 0xFF