此语法独立规则代码产生预期结果
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 解析器:
- Parsing expression grammar (维基百科)
- 另请参阅About Page introduction关于 http://boost-spirit.com网站
- Parser Expression Grammar在文档摘要 中
相关引用:
Syntactically, PEGs also look similar to context-free grammars (CFGs), but they have a different interpretation: the choice operator selects the first match in PEG, while it is ambiguous in CFG
所以,不,第二个例子一点也不含糊,它只是导致无限递归(--> stackoverflow)。
关于c++ - 精神过程如何规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701019/