First集和Follow集的求法

自上而下分析:

FIRST集求法

    First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集合,由于终结符的First集合就是它自己,所以求出非终结符的First集合后,就可很直观地得到每个字符串的First集合。

  1. 直接收取:对形如U->a…的产生式(其中a是终结符),把a收入到First(U)中
  2. 反复传送:对形入U->P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到First(U)中【意思就是只需要把第一个非终结符的First集传过去~这个地方是要注意的地方,也是难点】。

FOLLOW集的求法

    Follow集合是针对非终结符而言的,Follow(U)所表达的是句型中非终结符U所有可能的后随终结符号的集合,特别地,“#”是识别符号的后随符。注意Follow集合是从开始符号S开始推导。

  1.  直接收取:注意产生式右部的每一个形如“…Ua…”的组合,把a直接收入到Follow(U)中。因a是紧跟在U后的终结符。
  2. 直接收取:对形如“…UP…”(P是非终结符)的组合,把First(P)直接收入到Follow(U)中【在这里,如果First(P)中有空字符,那么就要把左部(假设是S)的Follow(S)送入到Follow(U)中。还有就是Follow集中是没有空字符的】。
  3. 3直接收取:若S->…U,即以U结尾,则#∈Follow(U)
  4. *反复传送:对形如U->…P的产生式(其中P是非终结符),应把Follow(U)中的全部内容传送到Follow(P)中。

当构造完这两个集合,则开始构造文法分析表

对每一个产生式A->XXX,执行

(1)对First(A)中的每一个终结符a,把A->XXX加入M[A,a]中。

(2)若‘空’在First(A)中,把Follow(A)的每一个终结符b(包括$),把A->XXX加入M[A,b]中。剩下为错误条目,空白处理。

在编译原理中,FirstFollow是用于构造语法分析表的两个重要概念。其中,First是指文法符号串中第一个终结符号的合,而Follow是指在文法符号串中某个非终结符号后面可能出现的结符号的合。下面是它们的求法: 1. First求法: - 如果X是一个终结符号,则First(X) = {X}。 - 如果X是一个非终结符号,则将X产生的所有符号串的First合并,即First(X) = First(α),其中X → α。 - 如果X可以推导出ε,则将ε加入First(X)中。 2. Follow求法: - 对于文法的开始符号S,将#加入Follow(S)中。 - 对于文法中的每个产生式A → αBβ,将Follow(A)加入Follow(B)中。 - 对于文法中的每个产生式A → αB,或者产生式A → αBβ且ε∈First(β),将Follow(A)加入Follow(B)中。 下面是一个综合例子,求解文法符号串E的FirstFollow: ``` E → TE' E' → +TE' | ε T → FT' T' → *FT' | ε F → (E) | id ``` - 求解First(E): - First(T) = {(, id)} - First(E') = {+, ε} - First(E) = First(T) ∪ First(E') = {(, id, +, ε)} - 求解Follow(E): - 将#加入Follow(E)中。 - 对于产生式T → FT',将Follow(T)加入Follow(T')中,即{(, id, +, #)} - 对于产生式E → TE',将Follow(E)加入Follow(T),即{(, id)} - 对于产生式T' → *FT',将Follow(T')加入Follow(F),即{*, (, id)} - 对于产生式E' → +TE',将Follow(E')加入Follow(T'),即{+, *, (, id)} - 对于产生式F → (E) ,将Follow(F)加入Follow(E'),即{+, *, ), #, (, id} - 对于产生式F → id ,将Follow(F)加入Follow(E'),即{+, *, ), #, (, id}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值