编译原理学习笔记(十八)~LL(1)文法

定义

        文法G被称为是LL(1)文法,当且仅当为它构造的预测分析表中不含多重定义的条目

  • 第一个L代表从左到右扫描输入序列,
  • 第二个L表示产生最左推导
  • 1表示在确定每一步 动作时向前看一个终结符。

具体怎么理解呢?
        举个简单的例子吧,通过自上而下语法分析,我们可以利用FIRST()和FOLLOW()集合构造出预测分析表,有时一个[E,a]对于的框中只有一个式子,这时候就称为LL(1)文法。因为有时会产生一个框中有两个式子对应。比如下面的例子:
编译原理学习笔记(十八)~LL(1)文法
而一般类似下面的预测分析表,我们就可以称对应的文法为LL(1)文法
注:其实就是一个框中只可以写一个式子【这样理解应该就可以啦】
编译原理学习笔记(十八)~LL(1)文法

判断是否为LL(1)文法的方法

编译原理学习笔记(十八)~LL(1)文法
解释:
这里还是举个例子说明吧,以下面的为例:
编译原理学习笔记(十八)~LL(1)文法
编译原理学习笔记(十八)~LL(1)文法
编译原理学习笔记(十八)~LL(1)文法
(上图为举例式子)对于条件一,假设他们的交集不为空,也就是两者的FIRST集合中存在相同的非终结符。这里我们修改一个FIRST集合:FIRST(E)={(,mod,num} FIRST(T’) = { mod} 【假设交集不为空,看看预测表有什么变化】,那么运用构造预测表的方法:我们可以发现【E’,mod】对应的框中出现了不止一个式子(可以归纳为+TE’和-TE’),所以不是LL(1)文法。

注:上述的假设其实不是完成证明条件(1),只是帮助理解。
对于条件二就比较好理解了,和条件(1)差不多的。