用spirit :: qi检查加倍符号

时间:2012-12-18 11:18:11

标签: c++ boost-spirit-qi

我需要检查双倍符号的文本。例如“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]);

phrase_parse返回true,表达式为“1 +++ 1”或“1 ** - 1”。我试着像这样使用重复:

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

但它没有帮助。我错过了什么? 感谢。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

将其拆分

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