编译原理 FOLLOW集

方法:
E → TE’
E’→ +TE’|ε
T→ F T’
T’→ *F T’|ε
F → (E)|id

——————————————
为什么:
FOLLOW(F)= {+,*,),$}
??

不是应该中有{*,$}吗??

第1个回答  2014-04-05
因为有:
T→ F T’
T’→ *F T’
所以FIRST(T')是FOLLOW(F)的子集。所以 * 是FOLLOW(F)中的元素。
因为有:
T→ F T’
T’→ε
所以FOLLOW(T)是FOLLOW(F)的子集。
因为有:
E’→ +TE’
所以FIRST(E‘)是FOLLOW(T)中的子集。所以FIRST(E‘)是FOLLOW(F) 中的子集。
因为有:
E’→ +TE’
所以+是FIRST(E’)中的元素,所以+是FOLLOW(F)中的元素。
因为有:
E’→ ε
E → TE’
所以有:
FOLLOW(E)是FOLLOW(T)子集。前面有所以FOLLOW(T)是FOLLOW(F)的子集。所以有
FOLLOW(E)是FOLLOW(F)的子集,
由F → (E)|id
知 ) 是FOLLOW(E)的元素。所以 ) 是FOLLOW (F)的元素。
因为E是开始符号,所以有 $ 是FOLLOW(E)中的元素,所以 $ 是FOLLOW(F)中的元素。
综上所述:
FOLLOW(F)= {*,+,),$}追问

嗯,你回答得好认真啊。
有一点不太明白:
————————
因为有:
T→ F T’
T’→ε
所以FOLLOW(T)是FOLLOW(F)的子集。
————————
为什么呢? 还有T 和 T'有什么关系呢,T 和T' 不是可以看成完全不同的字母吗?

追答

我们来看FOLLOW集的定义:

很明显

T→ F T’
T’→ε
满足第3点中的

所以FOLLOW(A)中的所有符号放入FOLLOW(B)中,对照一下,FOLLOW(T)中的所有符号放到FOLLOW(F)中。即FOLLOW(T)是FOLLOW(F)的子集。

本回答被提问者采纳

编译原理如何求解语法分析中的follow集合?
求解语法分析中的Follow集合是编译原理中的关键步骤。Follow集合表示在文法推导过程中紧跟某个非终结符后的所有终结符集合。其概念直接且直观,是理解编译器如何解析程序语言的基础。以非终结符A为例,其Follow集合由所有在推导过程中出现A时,在其后面紧跟着出现的终结符构成。例如在文法S->aA|ε中,A可...

编译原理follow集怎么算
编译原理中的Follow集是用于语法分析的一种辅助工具,用于确定非终结符号在某个产生式右侧的后继符号集合。下面是计算Follow集的步骤:初始化:将文法的开始符号的Follow集设为$ { # }$ ,其中$ # $表示输入符号串的结束标志。对于每个非终结符号 $A$,计算 $A$ 的Follow集。对于每个产生式$ A ...

编译原理——First集与Follow集
第一种情况: FOLLOW(F)=FIRST(T')={ * } 第二种情况 : FOLLOW(F)=FOLLOW(T')={ + , * , $ } 第一种情况 : FOLLOW(E)={ $ , ) } 2.2 第二次迭代 由于我们列出了等值关系,所以只需要再走一次第一次迭代的过程就可以了!因为主要是FOLLOW可能在变,所以我们只需要找到FOLLOW的...

编译原理 FOLLOW集
所以FIRST(T')是FOLLOW(F)的子集。所以 * 是FOLLOW(F)中的元素。因为有:T→ F T’T’→ε 所以FOLLOW(T)是FOLLOW(F)的子集。因为有:E’→ +TE’所以FIRST(E‘)是FOLLOW(T)中的子集。所以FIRST(E‘)是FOLLOW(F) 中的子集。因为有:E’→ +TE’所以+是FIRST(E’)中的元素...

编译原理语法分析中,求first,follow集合时,要消除左递归吗
如果题目是单纯求first、follow集合,不需要消除左递归.但是,如果求first、follow集合是为了判断文法是否为LL(1)文法的话,可以直接得出否定的结论(因为含有左递归的文法绝对不是LL(1)文法).可以先对文法进行改写,一般是消除左递归和提取左公共因子,然后再判断.

编译原理follow集怎么求?例:s->xSNy|Nx;N->zN|空 答案:follow(S)={...
求某一非终结符的follow集,主要看产生式右端(含有该非终结符的右端)。因为S是该文法的开始符,所以#在follow(S)中。在产生式S->xSNy的右端,S的后跟符号是first(Ny),即z和y。这样follow(S)={y,z,#} 求follw(N)时,看产生式S->xSNy和S->Nx,在它们的右端都含有N,根据S->...

编译原理 FOLLOW集
1、任何FOLLOW(S)都包含输入终止符号,其中S是开始符号。适用该条,因此FOLLOW(E’)中包含终止符号#。2、如果存在产生式,A->αBβ,则将FIRST(β)中除ε以外的符号都放入FOLLOW(B)中。该条不适用,因为在上述所有产生式中不存在形如E‘->αE’β这样的产生式。3、如果存在产生式,A->αB,...

关于编译原理first follow 和select
若A的follow集里面含有c 则语言是合法的 Select集的作用是将first集和follow集进行合并,如果两个文法的左端都是A,若他们的select集交集为空,表明他们是两个无关的,不会产生不确定性的文法,反之,则表明文法不是LL(1)文法 计算的公式很繁杂,理解了意思之后,看就能看出来。。。

编译原理问题。非终结符的FOLLOW集里面为什么要放个#号?
号是分析过程中引入的界符 用来表示开始和结束的边界用 对于一个文法G(S)来说 求公理S的FOLLOW集的时候,由于没有一个产生式的右部包含S 所以我们规定S的FOLLOW集是{#} 就是一个句型的结束符 句型

编译原理计算first 集和follow集的简单方法? S->bBS' S'->aAS'|ε...
first : S'=a,ε S=b A=a,c B=d B'=b,ε follow: S'= S= A=a B=a B'=a

相似回答