付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章
2.对下面的文法G:
EfTE
E->+E|e
TfFT
TTT|£
F9PF
F9*叫£
P->(E)|aIbI*
⑴计郛这个文法的每个非终结符的FIRST集和FOLLOW集,
(2)证明这个方法是LL(1)的。
(3)构造它的预测分析表。
(4)构造它的递归下降分析程序。
解:
(1)计算这个文法的每个非终结符的FIRST集和FOLLOW英。
FIRST集合有:
FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,*};
FIRST(£)=(1,c)
FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,1;
E1RST(T)=FIRST(T)U{2}={(,a,b/,e};
FIRST(F)=FTRST(P)={(,a,b/};
FIRST(F/)=FIRST(P)={*,e};
FIRST(P)={(,a,b/};
FOLLOW集合有:
FOLLOW(E)={),#};
FOLLOW(E)=FOLLOW(E)=1),0};
FOLLOW(T)=FIRST(E)UFOLLOW(E)={+,),#};〃不包含e
FOLLOW(T)=FOLLOW(T)=FIRST(E)UFOLLOW(E)={+,),#};
FOLLOW(F)=FIRST(T)UFOLLOW(T)={(,a,b/,+,),#};//不包含e
FOLLOW(Fj=FOLLOW(F)=FIRST(T)UFOLLOW(T)={(,a,b「,+,),#};
FOLLOW(P)=FIRST(F/)UFOLLOW(F)={*,(,a,bj,+,),#};//不包含£
(2)证明这个方法是LL(1)的。
各产生式的SELECT集合有:
SELECT(ETTE)=FIRST(T)={(,a,b/};
SELECT(E、9+E)={+};
SELECT(E->£)=FOLLOW(E)={),#}
SELECT(T-^FT)=FIRST(F)={(,a,b,"};
SELECT(T^T)=FIRST(T)={(,a,b/};
SELECT(T->e)=FOLLOW(T)={+,),#};
SELECT(FTPF)=FIRST(P)={(,a,b,.};
SELECT(FT*F)={*};
SELECT(FTs)=FOLLOW(F)={(,a,bj,+,),#};
SELECT(P9(E))={(}
SELECT(P->a)={a}
SELECT(P->b)={b}
SELECT(PT')=「}
可见,相同左部产生式的SELECT集的交集均为空,所以文法G[E]是LL(1)文法。
(3)构造它的预测分析表。
文法G[E]的预测分析表如下:
*
+*()ab
EfTE今TETTETTE
E’9+E今£->£
T9FT今FT今FT今FT,
T)£IT今£TTTT9T今£
FfPF今PFTPFTPF
F'€9*F"->£)£->£今€->£->£
PT(E)->alb4
(4)构造它的递归下降分析程序。
对每个非终结符写出不带回溯的递归子程序如下:
charCH;〃存放当前的输入符号
voidP_E()〃非线结符E的子程序
{
if(IsIn(CH,FIRSTTEP))//FIRSTTEP为TTTE的右部的FIRST集合,产生式ETTE
(
P_T();
P_EP();
)
elseERR;
)
voidP_EP()〃非终结符E的子程序
(
if(CH=r+')〃产生式ET+E
(
READ(CH);
P_E();
)
else〃产生式E->£
(
if(lsln(CH,FOLLOW一EP))//FOLLOWEP为E的FOLLOW集合
return;
elseERR;
)
)
voidP_T()〃非终结符T的子程序
{
if(IsIn(CH,FIRST_FTP))//FIRST_TEP为T9FT的右部的FIRST集合,产生式TIFT
(
P_F();
P_TP();
)
elseERR;
)
voidP_TP()〃非终结符T的子程序
if(Isln(CH,FIRSTT))//FIRSTT为产生式T>T的右部的FIRST集合,产生式TTT
P_T();
)
else〃产生式T)£
(
if(IsIn(CH,FOLLOW_TP))//FOLLOW_TP为T的FOLLOW集合
return;
elseERR;
)
)
voidP_F。//非终结符F的子程序
{
if(IsIn(CH,FIRST.PFP))//FIRST_PFP为FTP—的右部的FIRST集合,产生式F9PF
(
P_P();
P_FP();
)
elseERR;
)
voidP_FP()〃非终结符F的子程序
(
if(CH==,*')〃产生式F3*F
{
READ(Cl!);
P_FP();
)
else〃产生式F今£
{
if(lsln(CH,FOLLOW_FP))//FOLLOW_FP为F的FOLLOW集合
return;
elseERR;
)
)
voidP_PO〃非终结符P的子程序
{
if(CH==,(')
(
READ(CH);
P_E();
if(CH==,)')READCII(CH):
else
ERR;
)
elseif(CH=='a')READ(CH);
elseif(CH==,b')READ(CH);
,
PISPir(CH==r)READ(QI):
elseERR;
)
4证明下述文法不是LL(I)的。
S->C$C->bA|aBA->a|aC|bAAB->b|bC|aBB你能否构造一等价的文法,使其是LL
(1)的,并给出判断过程。
【解】SELECT(A->a)nSELECT(A->aC)^<I>,WffiLL(1)文法的判定条件:
(1)文法不含左递归
(2)对于文法U的任意两个不同的规则有:SelectiU-*o)ASelect(U-*尸中一个
文法若满足以上条件,称该文法G为LL(1)文法。得出该文法不是LL(1)文法。该文法
含公共因子,消除后的文法为:
s->c$
C->bA|aB
A->aA'|bAA
A'
B->bB'|
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 常见精神障碍的表现与诊断
- 《求职面试技巧》课件
- 南京安全管控措施讲解
- 消防应急照明安装安全技术交底
- 6S安全培训考试卷及答案
- jsp面试题及答案
- 2026年农产品食品检验员职业技能竞赛理论考试题库资料及答案
- 2015安全员b证试题及答案
- 2026年四川省电梯安装修理作业人员T证考试练习题及答案
- 初中九年级数学《建立二次函数模型解决抛物线型问题》教学设计
- 2025年嘉兴辅警文职笔试及答案
- 化工分析培训课件模板
- 设施设备维护人员面试题及答案
- 中药处方保密协议书
- 2025年安徽省高职单独招生文化课统一考试(英语)
- 公路施工项目安全风险评估报告范本
- 全麻术后导尿管刺激征管理
- 剧毒化学品名录(2025年版)
- 2025年烘焙技术知识培训考试题库与答案
- DG-TG08-12-2024 普通中小学建设标准
- 温泉酒店室内装修施工方案
评论
0/150
提交评论