我需要检查双倍符号的文本。例如“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输出。答案 0 :(得分:0)
找到答案。应该在phrase_parse之后比较字符串itrator,而不是在phrase_parse输出。
答案 1 :(得分:0)
在这种情况下,'1 +++++ 1'正确解析,因为因子递归地接受+'(可能是一元+/-)。
将其拆分
factor = ('-' >> value[_val=-_1])
| ('+' >> value[_val= _1])
| value [_val = _1];
value = double_ | '(' >> expression >> ')'