精神过程如何规则
how does spirit process rules?
此语法独立规则代码产生预期结果
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)。
相关文章:
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 尽管遵循了规则,内存泄漏在哪里
- 这是关于成员访问规则的正确摘要吗
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 增强精神解析器规则以检测语句中的特殊结尾
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 为什么此指针值不能转换为整数的规则是什么?
- 传递通用函数,用于梯形规则的数值积分
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 模板如何影响C++中隐式声明的规则?
- antlr 规则上下文是否可以独立于目标
- Bison/flex 在识别规则后等待输入
- 生成文件中隐式规则中的 -c 标志出错
- 单链接列表实现,规则为 3
- 指针算术规则中的"possibly-hypothetical"是什么意思?
- 假设声明中某些上下文中需要的名称查找规则是什么
- C++ 用于检查容器类中是否存在函数和隐式推导规则的概念