编译原理第三章First集和Follow集以及LL(1)文法

1.自顶向下的文法分析        LL(1)文法

从左向右扫描,进行最左推导

2.First集     

首符号集   找最左边可能出现的终结符

找First(E),就先看推导,推出来是非终结符T,然后看T的推导,F,看F的推导是(和i,因此,

First(E) = { ( , i }

以此类推,就可以得到First集,如果推导的首字母是终结符,就是终结符符号,如果是非终结符,就看非终结符的推导

3.Follow集

        后跟符号集        找出该非终极符后面所能跟随的所有终结符        (看右边)

1.# ∈ Follow(S)        S是识别符号

2.若存在        U - > xWy         First(y) - {空串} ∈ Follow(W)

3.若存在        U - > xW 或 U -> xWy ,其中y可以推导出空串

此时,U的follow也是W的follow,因此follow(W) = follow(U)

例题举例:

4.SELECT选择符号集

求SELECT集的方法

计算出文法的所有First集和Follow集

选择符号集是针对可以有两条以及以上的产生式的时候,计算SELECT集

  5.LL(1)文法

自顶向下分析技术       

判断:对于每一个非终结符,它的任意两个产生式,满足可选集的交集为空集

且至多有一个能推导出来

非LL(0)文法进行等价变换为LL(1)文法

方法一:提取左公共因子(找右部的公共因子)

例题:

方法二:消除左递归

方法如下:

 现在我们来看一道例题:

问我们消除左递归后的文法:

将左递归的式子分为两个,第一个式子将含E的去掉,第二个式子在补上,实际就是将左递归转变为右递归的过程,我们会创建一个非终结符,不要忘记了空串

如果是间接左递归,就先转换为直接左递归,然后再套用公式

LL(1)分析的实现:递归下降的分析,表驱动的分析

可以判断某字符串是否是文法的句子

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值