Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用spirit::qi检查双重符号_C++_Boost Spirit Qi - Fatal编程技术网

C++ 用spirit::qi检查双重符号

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 =

我需要检查文本中是否有双重符号。例如,“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]);
短语_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 >> ')'