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解析器:
- (维基百科)
- 另请参见网站上的
- 在文件摘要中
所以,不,第二个例子根本不含糊,它只导致无限递归(-> STACKOFFAST)。< /P>如果它不是模糊的C++代码,编译器会允许它。使用Boost概念检查和一些元编程技术,我相信精灵可以返回错误吗?他会吗?