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

2020-02-21 15:50

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

入分析工作栈中。若M[Xm,ai]=“Error”,则调用出错处理程序。

②若Xm?VT并且Xm=ai,则表明分析工作栈顶的符号与当前输入符号相匹配,将工作栈顶的符号Xm退出,输入符号指针向右移一位。

③若Xm=#,则表明输入符号串已完全匹配,分析成功结束分析工作。

3、分析程序的算法(P77)

例:对输入串 # i*i+i #的预测分析过程 P78

第四节 递归下降分析程序的构造

一、递归下降分析程序的构造方法

对文法的每个非终结符号,根据各侯选式的结构,编写一个对应的子程序,完成非终结符相应的语法成分的识别和分析任务。 二、递归下降分析程序的功能

对某个非终结符,用产生式规则的右部符号进行匹配。 三、递归下降分析程序的特点

1、程序结构清晰,易于手工操作。

2、对语义处理灵活。 四、递归下降分析法的必要条件

必须是不包含左递归和回溯的上下文无关文法。 五、递归下降分析程序的设计

P74

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

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

第五节 预测分析法的错误处理 一、出错情况

1、工作栈顶终结符与输入符号不匹配。

2、对应M[A,a]中为空(Error)。 二、出错处理

1、报告出错(出错位臵,出错性质)。 2、处理出错情况,使语法分析继续下去:

⑴若M[A,a]中为空(Error),跳过输入符号a,若该项为同步(synch),则退出工作栈顶的非终结符A。

⑵工作栈顶的终结符无法与输入符号匹配,则弹出该符号。

第六节 学习与理解

一、填空题

⑴自上而下语法分析方法的基本思想是:从文法的开始符号出发。不断建立最左直接推导,试图构造一个推导序列,最终由它推导出与输入符号串相同的符号串。

⑵自上而下分析方法会遇到的主要问题有回溯和左递归。 ⑶在语法分析中,最常见的两种方法一定是自上而下分析法,另一种是自下而上分析法。 二、选择题

⑴编译过程中,语法分析器的任务是B,C,D。

A、分析单词是怎样构成的 B、分析单词串是如何构成语句的

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

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

C、分析语句是如何构成程序的 D、分析程序结构

⑵高级语言编译程序常用的语法分析方法中,递归下降分析法属于B分析方法。

A、自左至右 B、自上而下 C、自下而上 D、自右至左

三、解答题

⑴已知文法G: A?aAa??

①该文法是LL(1)文法吗?为什么?

②若采用LL(1)方法进行分析,如何得到该文法的LL(1)分析表。

③若输入串“aaaa”,请给出语法分析过程。 解:

①因为FOLLOW(A)=FOLLOW(A)?FIRST(A)={a,#},造成FOLLOW(A)?FIRST(A)={a,#}?{a,?}??,所以该文法不是LL(1)文法。

②若采用LL(1)方法进行语法分析,必须修改该文法。因该文法产生偶数(可以为0)个a,所以得到文法G`:A?aaA??。

此时 FOLLOW(A)={#},因此

FOLLOW(A)?FIRST(A)={#}?{a,?}=?

所以文法G`是LL(1)文法。该文法的LL(1)分析表:

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

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

VT a # VN A A?aaA A?? ③对符号串“aaaa”的分析过程:

步骤 1 2 3 4 5 6 7 8 分析栈 输入串 产生式/动作 #A aaaa# A?aaA #Aaa aaaa# 匹配 #Aa aaa# 匹配 #A aa# A?aaA #Aaa aa# 匹配 #Aa a# 匹配 #A # A?? # # 接受 ⑵设文法G(A):

A?aABc?aA B?Bb?d

①试给出文法G(A)等价的LL(1)文法G`(A)。

②构造G`(A)的LL(1)分析表,给出输入串aadc#的分析过程。

解答:

①由于该文法G(A) A?aABc?a 存在回溯 B?Bb?d 存在左递归

所以不是LL(1)文法。

②改写文法G(A)

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

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

A?aABc?a

提取最左公共因子使得:A?a(ABc??),定义A`?ABc?? 改写后的产生式:

A?aA` A`?ABc??

又因为:B?Bb?d存在左递归,消除左递归后的产生式:

B?dB` B`?bB`??

③构造文法每一个非终结符号FIRST和FOLLOW的集合。 a、构造文法每一个非终结符号FIRST的集合 FIRST(A)={a} FIRST(A`)={a,?} FIRST(B)={d} FIRST(B`)={b,?}

b、构造文法每一个非终结符号FOLLOW的集合 因为A?aA`和A`?ABc??,所以:

FOLLOW(A)={#}?FIRST(B)\\{?}={#,d}

因为A?aA`,所以FOLLOW(A`)= FOLLOW(A)={#,d} 因为A`?ABc,所以FOLLOW(B)={c}

因为B?dB`,所以FOLLOW(B`)=FOLLOW(B), 最终结果:

FOLLOW(A)= FOLLOW(A`)={#,d}。

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


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

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

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

马上注册会员

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