系列文章戳这里
- 什么是上下文无关文法、最左推导和最右推导
- 如何判断二义文法及消除文法二义性
- 何时需要消除左递归
- 什么是句柄、什么是自上而下、自下而上分析
- 什么是LL(1)、LR(0)、LR(1)文法、LR分析表
- LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
- 编译原理第三章习题
- 词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式
- 证明LL(1)、SLR(1)、LALR(1)文法
编译原理-怎么需要消除左递归,如何消除左递归
- 系列文章戳这里
- 什么是左递归
- 什么时候需要消除左递归
- 怎么消除左递归
-
什么是左递归
一个文法是左递归的,如果它有非终结符 A A A,对某个串 α α α,存在推导 A → ∗ A x A→*Ax A→∗Ax。自上而下的分析方法不能用于左递归文法,因此需要消除左递归。由形式为 A → A a A→Aa A→Aa的产生式引起的左递归称为直接左递归。
什么时候需要消除左递归
在进行自上而下的分析(比如 L L ( 1 ) LL(1) LL(1)分析时,构造预测分析器也是 L L ( 1 ) LL(1) LL(1)分析)需要消除左递归,因为自上而下的分析方法不能用于左递归文法。任何二义文法绝不是 L R LR LR文法。
![怎么消除左递归、什么时候需要消除左递归—编译原理_第1张图片](http://img.e-com-net.com/image/info8/dd518eef7f614dd88309c80275b873df.jpg)
怎么消除左递归
直接左递归
![怎么消除左递归、什么时候需要消除左递归—编译原理_第2张图片](http://img.e-com-net.com/image/info8/5bd2d00cd2be4df39c3553913a04ec5e.jpg)
![怎么消除左递归、什么时候需要消除左递归—编译原理_第3张图片](http://img.e-com-net.com/image/info8/ee920fd2e27d448e9d14b646b2475662.jpg)
举个栗子
![怎么消除左递归、什么时候需要消除左递归—编译原理_第4张图片](http://img.e-com-net.com/image/info8/59aec86acfdf4cc5b118b94cf11e4632.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/7506ee55285047a3b5e576f9b6380323.jpg)
![怎么消除左递归、什么时候需要消除左递归—编译原理_第5张图片](http://img.e-com-net.com/image/info8/85d53555a794409fb7bfc67d76f08636.jpg)
非直接左递归
举个栗子
![在这里插入图片描述](http://img.e-com-net.com/image/info8/7f4b6283449e448bb6853ac6e543261a.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/1ed996b2f0ca45778448e8333d9b29de.jpg)
![怎么消除左递归、什么时候需要消除左递归—编译原理_第6张图片](http://img.e-com-net.com/image/info8/7313ba870f534f5eaa40c8e4cd261a59.jpg)
![怎么消除左递归、什么时候需要消除左递归—编译原理_第7张图片](http://img.e-com-net.com/image/info8/bf47bd8fe7284e9ca4cadc9d267b62cc.jpg)
举个栗子
![怎么消除左递归、什么时候需要消除左递归—编译原理_第8张图片](http://img.e-com-net.com/image/info8/c8c559802a3c4a319442ebad6d2f2eab.jpg)
![怎么消除左递归、什么时候需要消除左递归—编译原理_第9张图片](http://img.e-com-net.com/image/info8/268c12de4b2b4a4b9f76a5d2b70923ba.jpg)