精神过程如何规则?

时间:2013-09-09 14:50:45

标签: c++ parsing boost-spirit boost-spirit-qi

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

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”时会尝试做什么?

是否有一些好的文档可以示意性地解释如何执行精神分析?我的意思是纯粹的c或算法,没有模板或类。

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

1 个答案:

答案 0 :(得分:2)

Spirit是一个PEG解析器:

相关引用:

  

从语法上讲,PEG也看起来类似于无上下文语法(CFG),但它们有不同的解释:选择运算符选择PEG中的第一个匹配,而CFG中的模糊不清

所以,不,第二个例子根本不含糊,它只会导致无限递归( - > stackoverflow)。