繁体   English   中英

如何从缺少 beta 的语法中删除左递归?

[英]How to remove left recursion from a grammar with beta missing?

这是问题所在:

A -> A*B | 一个+ CDE | 阿布

所有作品都以A开头。我想这满足规则吗? 如您所见,它缺少测试版。 如何对其执行左递归? 甚至可以对其执行左递归吗?

到目前为止我学到的是,如果它是这样的: A -> A*B | 一个+ CDE | 阿布 | b

然后我会将 b 视为 beta 并解决为:

A -> bA'

A' -> *BA' | +CDEA' | abA' | ε

没有测试版,我很困惑。 我认为什么是测试版?

在尝试删除右递归之前,您需要通过删除所有无用和非生产性非终端来减少语法。 由于A是非生产性的(它没有非递归生产性),因此它将与使用它的任何生产性一起被淘汰。 这当然摆脱了右递归:-)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM