2

我需要检查文本是否有双重符号。例如“1+1*2”应该可以,但“1**2+3”或“--1+4*3”不应该。考虑精神计算示例的一部分。

     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]);

短语解析返回真,表达式如“1+++1”或“1**-1”。我尝试像这样使用重复:

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

但它没有帮助。我想念什么?谢谢。

编辑:找到答案。应该在phrase_parse 之后比较字符串迭代器,而不是phrase_parse 输出。

4

2 回答 2

0

在这种情况下,'1+++++1' 正在正确解析,因为 factor 递归地接受 +(可能是一元 +/-)。

把它分开

  factor = ('-' >>  value[_val=-_1])
         | ('+' >> value[_val= _1])
         | value [_val = _1];
  value = double_ | '(' >> expression >> ')'
于 2012-12-30T08:27:58.453 回答
0

找到了答案。应该在phrase_parse 之后比较字符串迭代器,而不是phrase_parse 输出。

于 2012-12-18T11:27:13.313 回答