- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第章 作业参考答案
第五章 自顶向下语法分析方法
1.对文法G[S]
S(a|∧|(T)
T(T,S|S
给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。
对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。
经改写后的文法是否是LL(1)的?给出它的预测分析表。
给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。
解:
(1) (a,(a,a))的最左推导为S((T)((T,S)((S,S)((a,(T))((a,(T,S))((a,(S,a))((a,(a,a))
(((a,a),∧,(a)),a)的最左推导为
S((T)((T,S)((S,a)(((T),a)(((T,S),a)(((T,S,S),a)(((S,∧,(T)),a)((((T),∧,(S)),a)
((((T,S),∧,(a)),a)((((S,a),∧,(a)),a)((((a,a),∧,(a)),a)
(2)由于有T(T,S的产生式,所以消除该产生式的左递归,增中一个非终结符U有新的文法G/[S]:
S(a|∧|(T)
T(SU
U(,SU|ε
分析子程序的构造方法
对满足条件的文法按如下方法构造相应的语法分析子程序。
(1) 对于每个非终结号U,编写一个相应的子程序P(U);
(2) 对于规则U::=x1|x2|..|xn,有一个关于U的子程序P(U),P(U)按如下方法构造:
IF CH IN FIRST(x1) THEN P(x1)
ELSE IF CH IN FIRST(x2) THEN P(x2)
ELSE ...
.
.
.
IF CH IN FIRST(xn) THEN P(xn)
ELSE ERROR
其中,CH存放当前的输入符号,是一个全程变量;ERROR是一段处理出错信息的程序;
P(xj)为相应的子程序。
(3) 对于符号串x=y1y2...yn;p(x)的含义为:
BEGIN
P(y1);
P(y2);
...
P(yn);
END
如果yi是非终结符,则P(yi)代表调用处理yi的子程序;
如果yi是终结符,则P(yi)为形如下述语句的一段子程序
IF CH=yi THEN READ(CH) ELSE ERROR
即如果当前文法中的符号与输入符号匹配,则继续读入下一个待输入符号到CH中,
否则表明出错。
(4) 如果文法中有空规则U::=EPSILON,则算法中的语句
IF CH IN FIRST(xn) THEN P(xn)
ELSE ERROR
改写为:
IF CH IN FIRST(xn) THEN P(xn)
ELSE IF CH IN FOLLOW(U) THEN RETURN
ERROR
(5) 要分析一个OrgStr,应在该串的后面加上一个串括号#,并从子程序P(S)(S为文法的开始符号)开始,
如果中途没有产生错误,并且最后CH=#,则说明OrgStr串合法,否则该串不合法。
对每个非终结符写出不带回溯的递归子程序如下:
char CH;//存放当前的输入符号
void P_S()//非终结符S的子程序
{
if(CH==’a’) READ(CH);//产生式S(a
else if(CH==’^’) READ(CH);//产生式S(^
else if(CH==’(’)//产生式S((T)
{
READ(CH);
P_T();
IF (CH==’)’) THEN READ(CH) else ERROR}
else ERR;}
void P_T()//非终结符S的子程序
{
if(IsIn(CH,FIRST_SU)) //FIRST_SU为T(SU的右部的FIRST集合
{
P_S();
P_U();
}}
void P_U()//非终结符U的子程序
{
if(CH==’,’)//产生式U(,SU
{
READ(CH);
P_S();
P_U();
}
else//产生式U(ε
{
if(IsIn(CH,FOLLOW_U)) //FOLLOW_U为U的FOLLOW集合
return ;
else ERR;
}
}
(3)判断文法G/[S]是否为LL(1)文法。
各非终结符的FIRST集合如下:
FIRST(S)={a,∧,(}
FIRST(T)=FIRST(S)={a,∧,(}
FIRST(U)={,,ε}
各非终结符的FOLLOW集合如下:
FOLLOW(S)={#} ∪ FIRST(U) ∪ FOLLOW(T) ∪ FOLLOW(U)={#,,,)}
FOLLOW(T)={)}
FOLLOW(U)=FOLLOW(T)={)}
您可能关注的文档
- 统计学课后题答案(全章节).doc
- 统计学题目h4抽样估计.doc
- 统计继续教试题及答案.doc
- 统计学高教三版课后习题答案.doc
- 绥化市206年中考语文试卷(有答案和解析).doc
- 绣花机开位作(大豪工控).doc
- 继承法对债人利益保护的缺陷和完善发展与协调.doc
- 继承法对继法对债权人利益保护的缺陷和完善的应用.doc
- 继电保护典故障分析.doc
- 继电保护复题以及答案.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
最近下载
- 文献综述中小企业成本控制研究.docx VIP
- (2025春新版本)人教版七年级历史下册全册教案.pdf
- 北京市一零一中学2023-2024学年七年级下学期期中考试英语试卷(含答案).pdf
- 物业管理服务报价表完整优秀版 .pdf VIP
- 文献综述--中小企业成本控制的研究.doc VIP
- 莒县鸿瑞矿业有限公司新型节能环保型石灰窑项目(三期)竣工环境保护验收监测报告.docx VIP
- 第9课 近代西方的法律与教化 教案-统编版(2019)高中历史选择性必修1国家制度与社会治理.pdf
- ZOOM声乐乐器L-12 快速入门 (Chinese)说明书用户手册.pdf
- 基于单片机的宠物喂养系统的设计与实现.docx
- 中小学(三阶魔方的复原)校本教材.doc VIP
文档评论(0)