编译原理课件04(2)语法分析.ppt

编译原理课件04(2)语法分析.ppt

ID:49308414

大小:412.00 KB

页数:43页

时间:2020-02-04

编译原理课件04(2)语法分析.ppt_第1页
编译原理课件04(2)语法分析.ppt_第2页
编译原理课件04(2)语法分析.ppt_第3页
编译原理课件04(2)语法分析.ppt_第4页
编译原理课件04(2)语法分析.ppt_第5页
资源描述:

《编译原理课件04(2)语法分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、4.2.4递归下降分析法递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。4.2.4递归下降分析法基本思想对文法中的每个非终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用,所以将此种分析法称为递归下降分析法。4.2.4递归下降分析法构造递归下降分析程序的方法:为每个非终结符编制一个递归下降分析函数,每个函数名是相应的非终结符,函数体则是根据规则右部符号串的结构和顺序编写。A→α

2、1α2…αnαi∈VTαi∈VNα1α2…αn=ε4.2.4递归下降分析法(1)当遇到终结符a时,则编写语句if(当前读来的输入符号==a)读下一个输入符号;(2)当遇到非终结符A时,则编写语句调用A();(4)当某个非终结符的规则有多个候选式时,按LL(1)文法的条件能唯一地选择一个候选式进行推导。(3)当遇到规则A→ε时,则编写语句4.2.4递归下降分析法if(当前读来的输入符号FOLLOW(A))error();E→E+T

3、TT→T*F

4、FF→(E)

5、id例设有文法G[E]:试构造一个识别该文法句子的递归下降分析程序。4.2.4递

6、归下降分析法分析首先消去文法左递归,得到文法G'[E]E→TE'E'→+TE'

7、εT→FT'T'→*FT'

8、εF→(E)

9、idE→E+T

10、TT→T*F

11、FF→(E)

12、id4.2.4递归下降分析法无左递归的文法不一定是LL(1)文法,根据LL(1)文法的判断条件,对非终结符E',T',F有:E→TE'E'→+TE'

13、εT→FT'T'→*FT'

14、εF→(E)

15、id4.2.4递归下降分析法ETE'ETE'TFT'F(E)(TE')ETE'TFT'+ETE'FT'+TE'+ETE'(FT')SELECT(E'→+TE'

16、)∩SELECT(E'→ε)=FIRST(+TE')∩{FIRST(ε)∪FOLLOW(E')}={+}∩{ε,),$}=ΦSELECT(T'→*FT')∩SELECT(T'→ε)=FIRST(*FT')∩{FIRST(ε)∪FOLLOW(T')}={*}∩{ε,),$,+}=Φ4.2.4递归下降分析法SELECT(F→id)∩SELECT(F→(E))=FIRST(id)∩FIRST((E))={id}∩{(}=Φ所以文法G'[E]是LL(1)文法。4.2.4递归下降分析法分析程序中定义两个函数:(1)函数Scaner()功能:读进源程

17、序的下一个单词符号并将它放在全程变量sym。(2)函数error()功能:出错处理程序。4.2.4递归下降分析法对文法G'[E]可写出相应的递归下降分析程序如下:E→TE'E'→+TE'

18、εT→FT'T'→*FT'

19、εF→(E)

20、idmain(){Scaner();E();if(sym==‘$’)printf(“success”);elseprintf(“fail”);}4.2.4递归下降分析法E(){T();E'();}E'(){if(sym==‘+’){Scaner();T();E();}elseif((sym!=‘)’)&&(sy

21、m!=‘$’))error();}4.2.4递归下降分析法E→TE'E'→+TE'

22、εT→FT'T'→*FT'

23、εF→(E)

24、idT(){F();T();}E→TE'E'→+TE'

25、εT→FT'T'→*FT'

26、εF→(E)

27、idT(){if(sym==‘*’){Scaner();F();T();}elseif(symfollow(T'))error();}4.2.4递归下降分析法F(){if(sym==‘id’)Scaner();elseif(sym==‘(’){Scaner();E();if(sym==‘)’)Scaner();

28、elseerror();}elseerror();}E→TE'E'→+TE'

29、εT→FT'T'→*FT'

30、εF→(E)

31、id4.2.4递归下降分析法4.2.4递归下降分析法main(){Scaner();E();if(sym==‘$’)printf(“success”);elseprintf(“fail”);}id+id$E(){T();E'();}T(){F();T();}见F见E'见T'返回下一页F(){if(sym==‘id’)Scaner();elseif(sym==‘(’){Scaner();E();if(sym==‘)’)S

32、caner();elseerror();}elseerror();}4.2.4递归下降分析法返回T4.2.4递归下降分析法T(){if(sym==‘*’){Scaner();F();T()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。