Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ 精神是如何形成的?_C++_Parsing_Boost Spirit_Boost Spirit Qi - Fatal编程技术网

C++ 精神是如何形成的?

C++ 精神是如何形成的?,c++,parsing,boost-spirit,boost-spirit-qi,C++,Parsing,Boost Spirit,Boost Spirit Qi,此语法独立规则代码生成预期结果 term = ( double_ >> "+" >> term ) [_val = _1 + _2]| ( double_ >> "-" >> term ) [_val = _1 - _2]| ( double_ >> "*" >> term ) [_val = _1 * _2]| ( doubl

此语法独立规则代码生成预期结果

term        = ( double_ >> "+" >> term ) [_val = _1 + _2]|
              ( double_ >> "-" >> term ) [_val = _1 - _2]|
              ( double_ >> "*" >> term ) [_val = _1 * _2]|
              ( double_ >> "/" >> term ) [_val = _1 / _2]|
              double_                    [_val = _1] ;
而这一条没有:

term        = ( term >> "+" >> term ) [_val = _1 + _2]|
              ( term >> "-" >> term ) [_val = _1 - _2]|
              ( term >> "*" >> term ) [_val = _1 * _2]|
              ( term >> "/" >> term ) [_val = _1 / _2]|
              double_                    [_val = _1] ;
我猜这和递归歧义有关。。。当以“1+2+3”为美联储时,第二条规则试图做什么

是否有一些好的文档以示意图的方式解释如何执行spirit解析?我的意思是作为一个纯c或算法,没有模板或类

编辑:
实际上,我认为第二条规则应该在编译时失败,因为它是不明确的。

Spirit是一个PEG解析器:

  • (维基百科)
  • 另请参见网站上的
  • 在文件摘要中
相关报价:

在语法上,PEG看起来也类似于上下文无关语法(CFG),但它们有不同的解释:choice操作符选择PEG中的第一个匹配项,而CFG中的第一个匹配项是不明确的


所以,不,第二个例子根本不含糊,它只导致无限递归(-> STACKOFFAST)。< /P>如果它不是模糊的C++代码,编译器会允许它。使用Boost概念检查和一些元编程技术,我相信精灵可以返回错误吗?他会吗?