C++ 用spirit::qi检查双重符号
我需要检查文本中是否有双重符号。例如,“1+1*2”应该可以,但“1**2+3”或“-1+4*3”不应该。考虑精神部分的例子,C++ 用spirit::qi检查双重符号,c++,boost-spirit-qi,C++,Boost Spirit Qi,我需要检查文本中是否有双重符号。例如,“1+1*2”应该可以,但“1**2+3”或“-1+4*3”不应该。考虑精神部分的例子, expression = term[_val=_1] >> *( ('+' >> term[_val+=_1]) | ('-' >> term[_val-=_1]) ); term =
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]);
短语_parse返回true,表达式为“1+++1”或“1**-1”。我试着像这样重复使用:
term =
factor[_val=_1]
>> *( (repeat(0)[char_('*')] >> factor[_val*=_1])
| ('/' >> factor[_val/=_1])
);
但这没用。我错过了什么?
谢谢
编辑:找到了答案。应该在短语解析后比较字符串itrators,而不是短语解析输出。找到了答案。应该在短语_parse之后比较字符串itrators,而不是短语_parse输出。在这种情况下,“1+++1”正确解析,因为factor递归地接受+(可能是一元+/-) 分开
factor = ('-' >> value[_val=-_1])
| ('+' >> value[_val= _1])
| value [_val = _1];
value = double_ | '(' >> expression >> ')'