2012-12-18 45 views
2

我需要檢查加倍符號的文字。例如「1 + 1 * 2」應該可以,但「1 ** 2 + 3」或「 - 1 + 4 * 3」不應該。考慮精神計算例子的一部分。用精神檢查加倍符號:: qi

 expression = 
      term[_val=_1] 
      >> *( ('+' >> term[_val+=_1]) 
        | ('-' >> term[_val-=_1]) 
       ); 

     term = 
      factor[_val=_1] 
      >> *( ('*' >> factor[_val*=_1]) 
       | ('/' >> factor[_val/=_1]) 
       ); 

     factor = 
      double_[_val=_1] 
      | '(' >> expression[_val=_1] >> ')' 
      | ('-' >> factor[_val=_1]) 
      | ('+' >> factor[_val=_1]); 

phrase_parse用「1 +++ 1」或「1 ** - 1」等表達式返回true。我試圖用重複像這樣:

 term = 
      factor[_val=_1] 
      >> *( (repeat(0)[char_('*')] >> factor[_val*=_1]) 
       | ('/' >> factor[_val/=_1]) 
       ); 

但它does not幫助。我錯過了什麼? 謝謝。

編輯:找到了答案。我們應該比較一下phrase_parse之後的字符串itrators,而不是phrase_parse輸出。

回答

0

找到了答案。我們應該比較一下phrase_parse之後的字符串itrators,而不是phrase_parse輸出。

0

在這種情況下,「1 +++++ 1」正確解析,因爲因子遞歸地接受+'(可能意圖是一元+/-)。

拆分了

factor = ('-' >> value[_val=-_1]) 
     | ('+' >> value[_val= _1]) 
     | value [_val = _1]; 
    value = double_ | '(' >> expression >> ')'