python | 编译原理,语法分析——LL(1)文法实现 中

上一个文章实现了对LL(1)文法各非终结符求first集和follow集,我们这篇文章则是继续求得LL(1)的预测分析集。看一下预测分析集的求解方法:这里我们需要求对于一个串的first集,求解方法如下:任意符号α的FIRST集求法:1. α为终结符,则把它自身加入FIRSRT(α)2. α为非终结符,则:(1)若存在产生式α->a...,则把a加入FIRST(α),其中a可以...
摘要由CSDN通过智能技术生成

上一个文章实现了对LL(1)文法各非终结符求first集和follow集,我们这篇文章则是继续求得LL(1)的预测分析集。

看一下预测分析集的求解方法:
在这里插入图片描述
这里我们需要求对于一个串的first集,求解方法如下:

任意符号α的FIRST集求法:
1. α为终结符,则把它自身加入FIRSRT(α)
2. α为非终结符,则:
(1)若存在产生式α->a...,则把a加入FIRST(α),其中a可以为ε
(2)若存在一串非终结符Y1,Y2, ..., Yk-1,且它们的FIRST集都含空串,且有产生式α->Y1Y2...Yk...,那么把FIRST(Yk)-{ε}加入FIRST(α)。如果k-1抵达产生式末尾,那么把ε加入FIRST(α)
   注意(2)要连续进行,通俗地描述就是:沿途的Yi都能推出空串,则把这一路遇到的Yi的FIRST集都加进来,直到遇到第一个不能推出空串的Yk为止。
重复1,2步骤直至每个FIRST集都不再增大为止。

这地方借鉴自:【编译原理】语法分析LL(1)分析法的FIRST和FOLLOW集

通过这一步骤编写求一个串的first集合:

dirFirst = defaultdict(set)
def getDirFirst(curPro):
   res = []
   # 对于一个字符串求first集
   for i in range(1,len(curPro)):
       if curPro[i] in vt:
           res.append(curPro[i])
           break
       elif curPro[i] in vn
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值