对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对 A→Ab|Ba A→aA|a B→a进行改写,并对改写后的文法进行判断
时间: 2023-06-09 07:03:41 浏览: 905
某些非LL文法到LL文法的改写-编译原理LL(K)
对于一个文法若消除了左递归,提取了左公共因子后并不一定为LL(1)文法。将文法 A→Ab|Ba 改写为 A→aA',A'→bA|ε;B→a。对改写后的文法进行判断:
1. 首先,由于 A→aA' 和 B→a 的非终结符的首字符都是 a,因此需要查看 FOLLOW(A') 和 FOLLOW(B) 是否存在交集。但是,FOLLOW(A')={b,$},FOLLOW(B)={$},它们没有交集。
2. 判断 A' 的候选式之间是否存在 FIRST/FOLLOW 冲突。但是,A' 的候选式中不存在一个非终结符的 FIRST 集合和 FOLLOW(A') 集合的交集。
综上所述,改写后的文法是 LL(1) 文法。
阅读全文