通俗易懂LL(1)判别方法

LL(1)文法简介

LL(1)的含义为:第一个L表明自顶向下分析时从左向右扫描输入串,第二个L表明分析过程将最左推导,1表明只需向右看一个符号便可决定如何推导,即选择那个产生式进行推导。
讲得什么:说的是编译器从你写的代码中的每行的左边开始读取字符,到右边结束进行下一行读取;分析也是从每行代码的左边字符开始,到右边结束进行下一行;1表示一种状态接受输入时能唯一的确定下面的状态。

LL(1)文法的判别

书本上讲的啰啰嗦嗦,看的头皮发麻,其实只要掌握了下面几条就可以很容易的判别文法是否符合LL(1)文本。

  • FIRSIT() 开始符号集
    就是找括号里第一个字符的终结字符集,如下面找A的开始字符集,显而易见,它的两个非终结字符如下图。
    在这里插入图片描述
  • FOLLOW()后跟符号集
    同理,寻找括号内后边紧跟的终结字符集,下图跟在A后面的S为非空终结符,但我们要的是终结符,对S求FIRST得到a和d;还有一个后面什么也没跟,那就是括号#,,综上就可以得到下面的答案。
    在这里插入图片描述
  • SELECT()选择符号集
    这个是最重要的,它能确定从一种状态进入另一种状态的唯一性,如果括号里面箭头指向终结字符,那这个终结字符就是答案,如果不是,则求这个非终结字符的FIRST()。
    特殊公式,很重要
    在这里插入图片描述
    判断文法是否符合LL(1)的充分必要条件:
    在这里插入图片描述

例题讲解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Leader_wang/article/details/82793687