精神过程如何规则

how does spirit process rules?

本文关键字:规则 何规则 过程      更新时间:2023-10-16

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

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或算法,没有模板或类。

编辑:实际上,我认为第二条规则应该在编译器时失败,因为它是模棱两可的。

Spirit是一个PEG解析器:

  • 解析表达式语法(维基百科)
  • 另请参阅 http://boost-spirit.com 网站上的"关于页面"简介
  • 文档摘要中的解析器表达式语法

相关报价:

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

的匹配项。

所以,不,第二个例子一点也不模棱两可,它只会导致无限递归(--> stackoverflow)。