广工编译原理课件.ppt

广工编译原理课件.ppt

ID:57064742

大小:158.50 KB

页数:21页

时间:2020-07-30

广工编译原理课件.ppt_第1页
广工编译原理课件.ppt_第2页
广工编译原理课件.ppt_第3页
广工编译原理课件.ppt_第4页
广工编译原理课件.ppt_第5页
资源描述:

《广工编译原理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

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

3、TT→T*F

4、FF→(E)

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

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、id递归下降分析法经过验证,文法G'[E]是LL(1)文法。递归下降分析法分析程序中定义两个函数:(1)函数GetSym()功能:读进源程序的下一个单词符号并将它放在全程变量sym。(2)函数error()功能:出错处理程序。递归下降分析法对文法G'[E]可写出相应的递归下降分析程序如下:E→TE'E'→+TE'

13、εT→FT'T'→*

14、FT'

15、εF→(E)

16、idmain(){GetSym();E();if(sym==‘#’)printf(“success”);elseprintf(“fail”);}递归下降分析法E(){T();E'();}E'(){if(sym==‘+’){GetSym();T();E();}elseif((sym!=‘)’)&&(sym!=‘#’))error();}递归下降分析法E→TE'E'→+TE'

17、εT→FT'T'→*FT'

18、εF→(E)

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

20、εT→FT

21、'T'→*FT'

22、εF→(E)

23、idT(){if(sym==‘*’){GetSym();F();T();}elseif(symfollow(T'))error();}递归下降分析法练习:编写T’()?F(){if(sym==‘id’)GetSym();elseif(sym==‘(’){GetSym();E();if(sym==‘)’)GetSym();elseerror();}elseerror();}E→TE'E'→+TE'

24、εT→FT'T'→*FT'

25、εF→(E)

26、id递归下降分析法递归下降分析

27、法main(){GetSym();E();if(sym==‘#’)printf(“success”);elseprintf(“fail”);}id+id#E(){T();E'();}T(){F();T();}见F见E'见T'返回下一页F(){if(sym==‘id’)GetSym();elseif(sym==‘(’){GetSym();E();if(sym==‘)’)GetSym();elseerror();}elseerror();}递归下降分析法返回T递归下降分析法T(){if(sym==‘*’)

28、{GetSym();F();T();}elseif(symfollow(T'))error();}follow(T')={+,),#}返回T递归下降分析法E'(){if(sym==‘+’){GetSym();T();E();}elseif((sym!=‘)’)&&(sym!=‘#’))error();}返回E见T返回E对这个例子,若采用扩充的BNF表示法改写文法,得到G"[E]:E→T{+T}T→F{*F}F→(E)

29、id递归下降分析法E→E+T

30、TT→T*F

31、FF→(E)

32、id该文法是LL(1)文

33、法,其递归下降分析程序中主函数和函数F()同上,对函数E()和函数T()用while语句描述如下:递归下降分析法E(){T();while(sym==‘+’){GetSym();T();}}T(){F();while(sym==‘*’){GetSym();F();}}E→T{+T}T→F{*F}F→(E)

34、id递归下降分析法缺点:对文法要求高,必须是LL(1)文法,同时由于递归调用较多,影响分析器的效率。优点:递归下降分析法简

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

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

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