此语法独立规则代码生成预期结果
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或算法,没有模板或类。
编辑: 实际上我认为第二条规则应该在编译时失败,因为它不明确。
答案 0 :(得分:2)
Spirit是一个PEG解析器:
相关引用:
从语法上讲,PEG也看起来类似于无上下文语法(CFG),但它们有不同的解释:选择运算符选择PEG中的第一个匹配,而CFG中的模糊不清
所以,不,第二个例子根本不含糊,它只会导致无限递归( - > stackoverflow)。