2016 - 2024

感恩一路有你

消除间接左递归 编译原理,如何消除文法的左递归?

浏览量:2254 时间:2021-03-15 07:18:57 作者:admin

编译原理,如何消除文法的左递归?

1. A->aa

2。A->ba

B->ab(A和B属于非终结符,A和B属于终结符)

一般来说,左递归是在情况1中“>”的两边包含相同的非终结符;

在情况2中,a->ba中“>”后的B和B->ab中“>”前的B是同一个非终结符

这两种情况称为左递归。

如何消除左递归?

将s->aa | B代入a->ac | SD |ε,得到a->ac | aad | BD |ε,然后消除直接左递归:a->bda | a | a | ASA |ε,所以选择a

如果CFG是这样的,a-> ABA-> E有左递归,语法分析中的递归下降法和LL(1)法不能处理这个问题,因为程序会陷入递归,不能前进。Cfga-> BA“a”-> BA“| e与前面的表达式相同,但所有语法的第一项是终止符,它消除了左递归。有消除左递归的算法,一般编译原理书中会介绍,不是很复杂。

编译原理的消除左递归是怎么回事啊?

[Q→RB[b(2),我们可以得到

R->(BCA B B | B | B[B

]R->(BCA BCA | B | a)R“

]R->bcar“”->bcar“124124124(2)R”

R“->bcar”ε

消除间接左递归 左递归是什么意思 左递归文法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。