<编译原理>——first集、follow集、firstvt集及lastvt集

之前自顶向下语法分析写了下怎么求first、follow集,这次写一下firstvt、lastvt的求法,顺便写写我对这四个集合的理解


先补充一下上篇博客:

我们知道,first集和follow集是用在自顶向下语法分析中。假如给定例子S->aA|bB|c,那么S被替换后,打头的字符可能是a、b或c;而形如S->Aa,A->b,这时候替换S后,打头的是非终结符A,替换A,得到b,也就是b成为了S的打头。这里需注意的是如果有A->空,那么这时候a也有可能成为打头的。所以我的理解,first集为非终结符所有可能的打头非终结符。而follow集不是非终结符的最末尾非终结符,而是非终结符下一位的终结符,也就是规约某非终结符后,‘期待’见到的非终结符。


Firstvt集的求法
有三条规则
(1)A->a.......,即以终结符开头,该终结符入Firstvt(2)A->B.......,即以非终结符开头,该非终结符的Firstvt入A的Firstvt(3)A->Ba.....,即先以非终结符开头,紧跟终结符,则终结符入Firstvt


Lastvt集的求法
也有三条规则:(1)A->.......a,即以终结符结尾,该终结符入Lastvt(2)A->.......B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt(3)A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Firstvt


Firstvt集和Lastvt集主要用在自底向上语法分析,这时候要考虑一个问题。比如说读入3+3*3,这里的+和*优先级未知,那读到3+3的时候,是进行规约还是继续读入就涉及到优先级的问题,Firstvt集和lastvt集的作用就在于此。

比如说S->aA,A->b 那么S的firstvt集为a,A的为b,对于S->aA来说A的firstvt集中所有元素其优先级都高于a;同理对于某非终结符的lastvt集,集中的所有元素的优先级高于非终结符后跟的终结符


  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值