版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章:语法分析
递归下降法自顶向下语法分析的实现方式LL(1)递归下降法(Recursive-DescentParsing)
对每个非终极符构造相应的一个子程序(称为语法分析子程序),其功能是识别、分析该非终极符所能推导出的字符串.
1.1递归下降法的基本原理例如:一条产生式:While_Stm→whileExpdoStm则对应产生式右部的语法分析程序部分如下:begin
Match(while);
Exp;
Match(do);
Stm;
end
begin
Match(while);Exp;
Match(do);
Stm;
end
while
x>y
do
ifx>ythenx:=y+xelsey:=x递归下降分析示图复杂任务的不断拆解细化,直至直接匹配。1.2对文法的要求为了保证推导的唯一性,对文法的要求与LL(1)文法相同。即对于文法G中任一非终极符A,其任意两个产生式A和A,都要满足下面条件:
Predict(A)Predict(A)=2.语法分析程序的构造两个标准函数ReadToken:把输入流的头符读入变量token中Match(a):iftoken=athenReadToken else出错匹配两个动作读取下一个字符2.语法分析程序的构造当产生式形如:A
1|2|…|n,则按下面的方法编写子程序A:
procedureA()beginiftokenPredict(A1)then(1)elseiftokenPredict(A2)then(2)
else……iftokenPredict(An)then
(
n)
elseerror()end其中对
i=X1X2…Xn,(
i)='(X1);'(X2);…;'(Xn);如果XVN,
'(X)=X();如果XVT,'(X)=Match(X);//即if(token==X)ReadToken();如果X=,'(
)=skip(空语句).两句话①对于终极符匹配②对于非终极符调用2.语法分析程序的构造主程序:voidmain(){
ReadToken();S(); if(token=='#')成功; else失败}
2.语法分析程序的构造具体构建流程给定一个文法G求每条规则的Predict集写针对每个非终极符的函数写主函数优点:构造简单缺点:频繁的函数调用影响效率程序比较长终极符产生匹配命令,而非终极符则产生调用命令.因为文法递归相应子程序也递归,所以称这种方法为递归子程序方法或递归下降法.与文法相关,文法变,程序变例:假设有文法
Z→aBa B→bB|cPredict(Z→aBa)={a},Predict(B→bB)={b},Predict{B→c}={c}则相应的递归子程序可如下:procedureZ()beginiftoken=athenMatch(a);
B;
Match(a)elseerr(1)end;procedureB()beginiftoken=bthenMatch(b);B;elseiftoken=cthenMatch(c);elseerr(2)end;语法分析主程序:BeginReadToken;Z;Match(#)
EndReadTokenReadToken
(aBa)
'(a);'(
B);'(a)匹配调用匹配读取下一个字符例: ETE’ E’+TE’|
TFT’ T’*FT’|
Fi|(E)Predict(ETE’)=first(TE’)={i,(}Predict(E’+TE’)=first(+TE’)={+}Predict(E’
)=follow(E’)={),#}Predict(TFT’)=first(FT’)={i,(}Predict(T’*FT’)=first(*FT’)={*}Predict(T’
)=follow(T’)={+,),#}Predict(Fid)=first(id)={i}Predict(F(E))=first((E))={(}procedureE()beginiftoken
{i,(}thenT;
E’
;
elseerr(1)end;语法分析主程序:BeginReadToken;E;Match(#)
endprocedureE’
()beginiftoken=“+”thenMatch(+);T;
E’
elseiftoken
{),#}
thenskipelseerr(2)end;例: ETE’ E’+TE’|
TFT’ T’*FT’|
Fi|(E)Predict(ETE’)=first(TE’)={i,(}Predict(E’+TE’)=first(+TE’)={+}Predict(E’
)=follow(E’)={),#}Predict(TFT’)=first(FT’)={i,(}Predict(T’*FT’)=first(*FT’)={*}Predict(T’
)=follow(T’)={+,),#}Predict(Fid)=first(id)={i}Predict(F(E))=first((E))={(}例: ETE’ E’+TE’|
TFT’ T’*FT’|
Fi|(E)Predict(ETE’)=first(TE’)={i,(}Predict(E’+TE’)=first(+TE’)={+}Predict(E’
)=follow(E’)={),#}Predict(TFT’)=first(FT’)={i,(}Predict(T’*FT’)=first(*FT’)={*}Predict(T’
)=follow(T’)={+,),#}Predict(Fid)=first(id)={i}Predict(F(E))=first((E))={(}procedureT()beginiftoken
{i,(}thenF;
T’
elseerr(3)end;procedureT’
()beginiftoken=“*”thenMatch(*);F;
T’
elseiftoken
{+,),#}
thenskipelseerr(4)end;例: ETE’ E’+TE’|
TFT’ T’*FT’|
Fi|(E)Predict(ETE’)=first(TE’)={i,(}Predict(E’+TE’)=first(+TE’)={+}Predict(E’
)=follow(E’)={),#}Predict(TFT’)=first(FT’)={i,(}Predict(T’*FT’)=first(*FT’)={*}Predict(T’
)=follow(T’)={+,),#}Predict(Fid)=first(id)={i}Predict(F(E))=first((E))={(}procedureF
()beginiftoken=“i”thenMatch(i
)
elseiftoken=“(”
thenMatch((
); E;
Match())elseerr(5)end;例: ETE’ E’+TE’|
TFT’ T’*FT’|
Fi|(E)Predict(ETE’)=first(TE’)={i,(}Predict(E’+TE’)=first(+TE’)={+}Predict(E’
)=follow(E’)={),#}Predict(TFT’)=first(FT’)={i,(}Predict(T’*FT’)=first(*FT’)={*}Predict(T’
)=follow(T’)={+,),#}Predict(Fid)=first(id)={i}Predict(F(E))=first((E))={(}ETFiiM(i)E’TFiiM(i)E’T’FT’例:i+i*i#递归下降分析过程+++M(+)*#*M(*)i###skip####M(i)skipE→TE’E’→+TE’│εT→FT’T’→*FT’│εF→(E)│iT’++skipTE’FT’+TE’FT’εiiiε*FT’ε语法分析主程序:BeginReadToken;E;Match(#)
endTEE'T'F大量函数调用!!ETFiiM(i)E’TFiiM(i)T’F例:i+i*+i#递归下降分析过程+++M(+)**M(*)+E→TE’E’→+TE’│εT→FT’T’→*FT’│εF→(E)│iT’++skipTE’+TE’FT’ii*FT’ε语法分析主程序:BeginReadToken;E;Match(#)
endFT’Err(5)ETE'T'F练习题:已知文法G[S]:SAB|bCA|bB|aDCAD|bDaS|c1、计算每个非终极符的First集、Follow集.2、计算每个产生式的Predict集合.3、判断该文法是否为递归下降文法?文法符号First集step1step2step3SABCD
SAB|bCA|bB|aDCAD|bDaS|c{b,a,
}{b,
}{a,
}{b,a,c}{a,c}{b}{b,
}{a,
}{b}{a,c}{b}{b,
}{a,
}{b}{a,c}文法符号First集S{a,b,
}A{b,
}B{a,
}C{a,b,c}D{a,c}
SAB|bCA|bB|aDCAD|bDaS|c文法符号Follow集step1S
ABS
bCBaDCADDaSSABCD{#}{
}{
}{}{}{#}{a,#
}{#}{}{}{#}{a,#
}{#}{#}{}{#}{a,#
}{#}{#}{#}{#}{a,#,c
}{#}{#}{#}Predict(SAB
)={a,b,#}Predict(SbC
)={b}Predict(A
)={a,c,#}Predict(Ab)={b}Predict(B
)={#}Predict(BaD)={a}Predict(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年惠州市教育局招聘市直公办中小学教师考试试卷真题
- 2028年商业秘密保护与保密协议二篇
- 2023年电子设备防盗展示产品企业组织架构及部门职责
- 如何评估候选人在沟通和协作方面的能力
- 用图象表示变量之间的关系(第1课时体验图象表示变量之间的关系)(教学课件)数学新教材北师大版七年级下册
- 科技中介服务机构如何运用科创数智大脑提升服务精准度
- (2026年)生产车间安全培训考核试卷及答案
- 初级会计师《经济法基础》个人所得税法律制度章节测试题(含考点归纳)
- 2026边检专业能力面试题及答案
- 性病相关性不孕不育筛查干预
- 电梯意外事件与事故应急救援及演习制度培训
- DLT 593-2016 高压开关设备和控制设备
- 《车险基础知识培训》
- SCA涂胶机内部培训资料课件
- 通用电子嘉宾礼薄
- 2023年山东财经大学燕山学院教师招聘考试笔试题库及答案
- 长兴兴德生物科技有限公司秸秆综合利用提升项目环境影响报告
- 某地块土壤污染状况调查汇报PPT模板框架
- 校园超市招标文件
- 模拟CMOS集成电路设计课程设计实验报告(二级放大器的设计)
- GB/T 4798.4-2023环境条件分类环境参数组分类及其严酷程度分级第4部分:无气候防护场所固定使用
评论
0/150
提交评论