编译原理第4章-自顶向下语法分析方法详解.ppt

编译原理第4章-自顶向下语法分析方法详解.ppt

  1. 1、本文档共112页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 语法分析 ;语法分析程序的功能和语法分析方法; 4.1 语法分析程序的功能;语法分析的方法;4.1 语法分析程序的功能;4.1 语法分析程序的功能;4.2 自上而下语法分析法 ;4.2.1 非确定的自上而下分析法的思想 ;4.2.1 非确定的自上而下分析法的思想;4.2.1 非确定的自上而下分析法的思想;4.2.1 非确定的自上而下分析法的思想;4.2.1 非确定的自上而下分析法的思想;4.2.1 非确定的自上而下分析法的思想;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除;4.2.2 文法的左递归性和回溯的消除; 对文法的某个非终结符A,当它有多个侯选式时:; 这也就是说,在自上而下分析过程中,为了避免回溯,要求描述语言的文法是LL(1)文法。;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件; LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件;LL(1)文法的判断条件; 确定的自上而下分析法要求描述 语言的文法是 LL(1)文法。 ; (3)?求文法每个产生式的SELECT集。; 例 设有文法G[S];对每一文法符号X∈V, 求FIRST(X)的规则: ; FIRST(S)=FIRST(aAbDe)∪FIRST(d)={ a,d };FOLLOW(A) ={ a | S ? …Aa …且a∈VT }; FOLLOW(S)={#,a,b,c,d,e}; 根据LL(1)文法的定义有:;E → TE E→ +TE | ε T → FT T→ *FT | ε F → (E) | id ;例1 设有文法G[S]:;例2 设有文法G[A] ;所以 SELECT(A→aB)∩SELECT(A→d)=Φ;例3 设有文法G[S]:; SELECT(B→a)=FIRST(a)= {a};例4 设有文法G[S]:; SELECT(S→AB) =FIRST(AB)∪FOLLOW(S) ={ a, b, # };LL(1)文法的判断条件;LL(1)文法的判断条件;4.2.3 某些非LL(1)文法到LL(1)文法的改写; 由 LL(1)文法定义可知, 若文法中??有左递归或含有公共左因子,则该文法不是 LL(1) 文法,因此,对某些非LL(1)文法而言, 可通过消除左递归和反复提取公共左因子对文法进行等价变换,可能将其改造为 LL(1)文法。 消除文法左递归的方法见4.2.2。 ;提取公共左因子; 提取公共左因子将文法改写成: ;例1 设有文法G[S]: ;不难验证改写后的文法为LL(1)文法。 ;例2 设有文法G[S]:;对S提取公共左因子得 ; 应当指出的是并非一切非LL(1)文法都能改写为LL(1)文法。; 对S提取公共左因子后,得; 显然,它仍不是一个LL(1)文法,且不难看出无论将上述步骤重复多少次, 都无法将它改写为LL(1)文法。;4.2.4 递归下降分析法;基本思想;构造递归下降分析程序的方法:;(1) 当遇到终结符a时,则编写语句 ;(4) 当某个非终结符的规则有多个候选式 时,按LL(1)文法的条件能唯一地选 择一个候选式进行推导。 ;E→ E + T | T T→ T * F | F F→ (E) | id ; 分析 首先消去文法左递归,得到文法 G[E]; 无左递归的文法不一定是LL(1)文法,根据LL(1)文法的判断条件,对非终结符 E, T, F有: ; SELECT(E →+TE)∩SELECT(E →ε) =FIRST(+TE)∩FOLLOW(E) ={ + }∩{ ), # }= Φ; SELECT(F→id )∩SELECT(F→(E)) = FIRST(id)∩FIRST((E))={id}∩{(}=Φ;分析程序中定义两个函数:; 对文法G[E]可写出相应的递归下降分析程序如下: ;E ( )

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档