第4章语法分析-自上而下分析(3)

2020-02-21 15:50

编译原理 第四章 语法分析—自上而下分析

构造算法:

1、对文法开始符号S,将“#”臵于FOLLOW(S)中。 即FOLLOW(S) = ? # ?。

2、若A →?B? 是一个产生式,则把FIRST(β)-{ε}加至 FOLLOW(B)中。

3、若A →?B是一个产生式,或A→?B? 是一个产生式,而 ???(即??FIRST(?));则把FOLLOW(A)加至FOLLOW(B)中。

例 文法G

E →TE` E`→+TE`|ε T →FT` T`→*FT`|ε F→(E)|i

求FOLLOW(E):

因为 F→(E) ,所以FIRST())加入FOLLOW(E)中, FOLLOW(E) = ? ) ? ;

又因为E→TE`,E是文法的开始符号,则#加至FOLLOW(E)中,所以

FOLLOW(E)= ? # ? U FOLLOW(E)=? #,) ?。 求FOLLOW(E`):

因为E→TE`, 满足算法(3)若A →?B是一个产生式,则 把FOLLOW(A)加至FOLLOW(B)中,所以

制作人:李明新 共28页第11页 13-3-24

编译原理 第四章 语法分析—自上而下分析

FOLLOW(E`)= FOLLOW(E)U FOLLOW(E)

= ? #,) ?

求FOLLOW(T):

因为E→TE`, 满足算法⑵若A →?B? 是一个产生式,则把 FIRST(β)\\{ε}加至FOLLOW(B)中,所以

FOLLOW(T) = FOLLOW(T) U FIRST(E`)\\{ε}

= {+}

又因为E`??,满足算法(3)若A→?B? 是一个产生式,而 ???,则把FOLLOW(A)加至FOLLOW(B)中。所以

FOLLOW(T) = FOLLOW(E) U FOLLOW(T)

= ? #,) ?U ?+? = ? #,),+?

求FOLLOW(T`):

因为T→FT`,满足算法(3)若A →?B是一个产生式,则 把FOLLOW(A)加至FOLLOW(B)中,所以

FOLLOW(T) = FOLLOW(T) U FOLLOW(T`)

= ? #,),+?

求FOLLOW(F):

因为T→FT`, 满足算法⑵若A →?B? 是一个产生式,则把 FIRST(β)\\{ε}加至FOLLOW(B)中,所以

FOLLOW(F) = FOLLOW(F) U FIRST(T`)\\{ε}= {*} 又因为T`??,满足算法(3)若A→?B? 是一个产生式,而

制作人:李明新 共28页第12页 13-3-24

编译原理 第四章 语法分析—自上而下分析

???,则把FOLLOW(A)加至FOLLOW(B)中。所以

FOLLOW(F) = FOLLOW(T) U FOLLOW(F)

= ? #,),+? U ?*? = ? #,),+,* ?

连续使用上述三条规则,直到每个FOLLOW不再增大为止。 FOLLOW(E)= FOLLOW(E?)= ? #,) ? FOLLOW(T)= FOLLOW(T?)= ? #,),+ ?

FOLLOW(F)= ? #,),+,* ? 七、证明上述文法是否为LL(1)文法

对于产生式A????:

1、若? ? ?,证明侯选式?,?的首字符集是否相交。

FIRST(?)∩FIRST(?)= Ф 例:F?(E)?i

FIRST(()∩FIRST(i)= Ф

2、若?=ε,证明FIRST(A)和FOLLOW(A)是否相交。

FIRST(A)∩FOLLOW(A)=φ 例:E`?+TE`??

FIRST(E`)∩FOLLOW(E`) =? +,? ?∩? ),# ?=φ

八、构造分析表的算法

1、对文法G的每个产生式A→α执行第二步和第三步; 2、对每个终结符a?FIRST(?),把A→α加至M[A,a]中;

制作人:李明新 共28页第13页 13-3-24

编译原理 第四章 语法分析—自上而下分析

3、若ε?FIRST(α),则对任何b?FOLLOW(A)把A→α(或A??)加至M[A,b]中;

4、把所有无定义的M[A,a]标上“出错标志” 例: E→TE` , E`→+TE`′|ε

T→FT` , T`→*FT`′|ε

F→(E)|i

求其FIRST的集合:

FIRST(E)=FIRST(T)=FIRST(F)={(,i )} FIRST(E?)={ +,ε},FIRST(T?)={ *,ε} 求其FOLLOW的集合:

FOLLOW(E)= FOLLOW(E?)= ? #,) ? FOLLOW(T)= FOLLOW(T?)= ? #,),+ ?

FOLLOW(F)= ? #,),+,* ? 根据算法构造LL(1)的分析表:

终结符 非终结符 i + * ( ) # E TE` TE` E` +TE` ? ? T FT` FT` T` ? *FT` ? ? F i (E) 九、LL(1)分析器的逻辑结构与分析程序 1、LL(1)分析器的逻辑结构

LL(1)分析法,由总控程序控制输入字符串,在一张LL(1)分析表和一个分析工作栈上运行,而完成语法分析任务的。

制作人:李明新 共28页第14页 13-3-24

编译原理 第四章 语法分析—自上而下分析

输入字符串 a1 a2 ? ai ? an

X 总控程序 分析栈 分析表 # 其中:

①分析表,实现相应的分析动作,即对[Ai,aj],设Ai??表示当前分析工作栈顶为Ai,输入字符为aj时,应选用Ai??进行推导。

②分析工作栈,用于存放分析过程中的文法符号。分析工作栈初始化时,在工作栈顶写入一个“#”,再写入文法开始符号。

③总控程序,依据分析工作栈和分析表联合控制输入串的识别和分析。

2、分析程序的工作原理

⑴把“#”和文法开始符号推入分析工作栈;设臵指示器的初始值,用第一个输入符号(终结符号)与分析工作栈顶文法符号进行匹配。

⑵设在某一步的分析工作栈与输入串的当前工作状态: X1X2?Xm-1Xm为分析工作栈中的当前状态;aiai+1?#为输入串的当前状态。

①若Xm?VN,则以Xm及ai组成符号对(Xm,ai)查分析表M[Xm,ai],设Xm?UVW,将Xm从分析工作栈顶退出,并将UVW按反向写

制作人:李明新 共28页第15页 13-3-24


第4章语法分析-自上而下分析(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:工作总结公安百日会战经验总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: