是不是所有的文法都可以化为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
  • 439KB
  • 下载

编译原理之ll(1)文法判断和左递归问题

LL(1)文法判断和左递归

编译原理—LL(1)文法分析器

  • 2006年03月16日 00:00
  • 181KB
  • 下载

LL(1)文法分析程序

  • 2008年06月25日 10:51
  • 5KB
  • 下载

LL(1) 文法

问题描述: 输入:文法的多个产生式或产生式选项 输出:(1)    产生式中非终结符的First集和Follow集      (2)    判断该文法是否是LL(1)文法      (3)  ...

\编译原理\编译原理 LL(1)文法

  • 2012年01月01日 13:56
  • 75KB
  • 下载

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

  • 2012年12月27日 19:37
  • 258KB
  • 下载

LL(1)文法first集

LL(1) 文法 first集  思路:  利用递归 第一步先计算可导空的非终极符集合   令first(X)=空   若 X->a... 则将a加入first(X)    若 X->ABC.. ,则...

ll1文法和First集合follow集合

  • 2010年01月22日 20:28
  • 3.93MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:是不是所有的文法都可以化为LL(1)文法?
举报原因:
原因补充:

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