消除文法的左递归例题 编译原理,如何消除文法的左递归?
浏览量:3009
时间:2021-03-15 11:46:05
作者:admin
编译原理,如何消除文法的左递归?
1. A->aa
2。A->ba
B->ab(A和B属于非终结符,A和B属于终结符)
一般来说,左递归是在情况1中“>”的两边包含相同的非终结符;
在情况2中,a->ba中“>”后的B和B->ab中“>”前的B是同一个非终结符
这两种情况称为左递归。
编译原理的消除左递归是怎么回事啊?
如果像这样的CFG a-> ABA-> E离开了递归,那么递归下降法和语法分析中的LL(1)就不能处理它,因为程序会陷入递归,无法前进。Cfga-> BA“a”-> BA“| e与前面的表达式相同,但所有语法的第一项是终止符,它消除了左递归。有消除左递归的算法,一般编译原理书中会介绍,不是很复杂。
【编译原理】自顶向下LL(1)分析中,消除左递归和提取左因子的目的是什么?
通常,LL(1)是通过函数递归实现的
]例如,语法:a-> a | a
代码实现是:[function a()
{
a()
match(”)
term(a)]}
!]这样就可以看到死循环了…
消除了左递归后的语法
a-> AA“
a”-> AA“
]这个问题可以避免
公因子就是刚刚提出的就像你在楼上说的,避免程序回溯,消除歧义
消除文法的左递归例题 lr1文法都是二义性左递归 证明文法具有二义性
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。
下一篇
IM视频 im