关闭

是不是所有的文法都可以化为LL(1)文法?

1779人阅读 评论(0) 收藏 举报
分类:

这个问题也是我想问的... 然后就搜到了这样的一个回答




提出一个问题:是不是所有的文法都可以化为LL(1)文法?

这个问题提得很好,说明该同学确实认真学习了本章内容,对没有讲到的问题进行了深入的思考。

 

应当指出,并非一切非LL(1)文法都能利用提取左因子的方法将它改造为LL(1)文法。例如,对于文法
S→AU|BR   A→aAU|b
B→aBR|b   U→c   R→d
对于S产生式,因有
FIRST(AU)∩FIRST(BR)={a,b}
故它不是一个LL(1)文法,为对S产生式的两个候选式提取左因子,可先将其中的非终结符号A,B分别用相应产生式的右部进行替换,我们得到
S→aAUU|bU|aBRR|bR
经提取左因子后,得到了与原文法等价的文法
S→aS′|bS″  S′→AUU|BRR    S″→U|R
A→aAU|b   B→aBR|b    U→c    R→d
显然,它仍不是一个LL(1)文法,且不难看出,无论将上述操作重复多少次都不能把它改造为LL(1)文法。
能由某一LL(1)文法产生的语言称为LL(1)语言。已经证明,LL(1)文法及LL(1)语言具有许多重要的特性。现不加证明地列举其中的一些主要结论如下:
(1) 任何LL(1)文法都是无二义性的;
(2) 左递归文法必然不是LL(1)文法;
(3) 存在一种算法,它能判断任意的文法是否为LL(1)文法;
(4) 存在一种算法,它能判定任意两个LL(1)文法是否产生相同的语言;
(5) 不存在这样的算法,它能判定任意的前后文无关语言是否为LL(1)语言;
(6) 非LL(1)语言 (即不能由任何LL(1)文法产生的前后文无关语言)是存在的。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13363次
    • 积分:624
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条