编译原理 怎么求FOLLOW啊。。。

Grammar:
E -> TE'
E' -> +TE'|ε
T -> FT'
T' -> *FT'|ε
F -> (E)|id
FIRST我知道怎么求,但FOLLOW该怎么求。。。书上写得太抽象了,能说简单点吗。。。。 比如求FOLLOW(T) 和 FOLLOW(F)

只要follow额,这样,follow(E),把所有包含你要求的符号的产生式都找出来,有F -> (E)|id,那E后面就是),其他包含E的都没有,所以follow(E)={),#},E‘,包含E’的产生式有E -> TE',再由F -> (E)|id推出F -> (TE‘)|id,则E’后面也有),则follow(E’)={),#};T,包含T的产生式有E -> TE'、E' -> +TE'|ε,T后面是E‘(+TE'|ε),则T有+,,再根据F -> (E)|id,(TE')|id,E‘又可以是空(ε),则T后面有),则follow(T)={+,),#}。 T‘同理,包含T’的有T -> FT'、T' -> *FT'|ε,F -> (E)|id,推出F -> (TE‘)|id,再推出F -> (FT'E')|id,E'可以推出ε,则T'后面有),由E -> TE'推出E -> FT‘E',则T’后面是E‘,E' -> +TE'|ε,则follw(T’)含有+,所以follow(T‘)={+,),#}。

F嘛,自己推推,都是这样做得
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-26
First集合的求法:
First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集合,由于终结符的First集合就是它自己,所以求出非终结符的First集合后,就可很直观地得到每个字符串的First集合。
1. 直接收取:对形如U-a…的产生式(其中a是终结符),把a收入到First(U)中
2. 反复传送:对形入U-P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到First(U)中。

Follow集合的求法:
Follow集合是针对非终结符而言的,Follow(U)所表达的是句型中非终结符U所有可能的后随终结符号的集合,特别地,“#”是识别符号的后随符。
1. 直接收取:注意产生式右部的每一个形如“…Ua…”的组合,把a直接收入到Follow(U)中。
2.直接收取:对形如“…UP…”(P是非终结符)的组合,把First(P)直接收入到Follow(U)中。
3.反复传送:对形如U-…P的产生式(其中P是非终结符),应把Follow(U)中的全部内容传送到Follow(P)中。
相似回答