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

转载 2015年11月18日 16:09:29

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




提出一个问题:是不是所有的文法都可以化为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)文法产生的前后文无关语言)是存在的。

相关文章推荐

LL1文法分析

  • 2015-06-27 19:40
  • 438KB
  • 下载

LL(1)文法的实现代码(可报错处理)

先定义一个分析表 public class Table { private String[][] table = { { "", "", "", "", "", "" }, { ...

LL(1)文法分析程序

LL(1)文法分析器简单实现

文法: E->E+T | T T->T*F | F F->(E)|i 消除左递归: E->TH H->+TH|e(空,一普赛肋) ...

编译原理LL(1)文法实现

  • 2012-12-27 19:37
  • 258KB
  • 下载

从上下文无关文法(CFG)到语法分析树——LL(1)分析法

本文介绍了根据上下文无关文法,使用预测分析法生成语法分析树的步骤。
  • cuiods
  • cuiods
  • 2016-10-22 10:14
  • 1268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)