网站大量收购独家精品文档,联系QQ:2885784924

编译原理 第 4 讲 自顶向下语法分析方法.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 第 4 讲 自顶向下语法分析方法

第4讲 自顶向下语法分析方法 确定的自顶向下分析思想 LL(1)文法的判别 某些非LL(1)文法到LL(1)文法的等价变换 不确定的自顶向下分析思想 确定的自顶向下分析方法 一、确定的自顶向下分析思想 文法G1[S]: S→pA S→qB A→cAd A→a B→dB B→b 2、如果两个产生式有相同的左部,那么它们的右部由不同的终结符开始。 文法G2[S]: S→Ap S→Bq A→a A→cA B→b B→dB 3、文法中无空产生式。 定义:设 G = (VT ,VN , S , P) 是上下文 无关文法, FIRST(α) = { a|α aβ,a∈ VT, α,β ∈ V* } 若α ε,则规定ε∈ FIRST(α) FIRST(Ap)={a,c} FIRST(Bq)={b,d} 文法G3[S]: S→aA S→d A→bAS A→ε 定义:设 G = (VT ,VN , S , P) 是上下文无关文法,A∈VN , S是开始符号。 FOLLOW(A) = {a|S ?A?且a∈FIRST(?), ?∈V*,?∈V+ } 若S ?A?,且? ε,则规定 #∈FOLLOW(A) 对于 A→α A→β 其中A∈VN , α, β ∈VN* 当α和β不同时推导出空时(设 α不推导 出空,β推导出空),则当FIRST(α)∩(FIRST(β)∪FOLLOW(A)) = Φ 时,对于非终结符A的替换仍可唯一地 确定候选。 定义:给定上下文无关文法的产生式 A→α,A∈VN , α∈V*,若α ε, 则 SELECT(A→α)=FIRST(α) 如果α ε,则SELECT(A→α)=FIRST(α)∪FOLLOW(A) 定义:一个上下文无关文法是LL(1)文法的充要条件是: 对每个非终结符A的两个不同产生式A→α和A→β,满足 SELECT(A→α)∩SELECT(A→β)=Φ 其中α,β不能同时 ε LL(1)文法的含义: 第一个L表示:自顶向下分析是从左向右扫描输入串。 第二个L表示:分析过程中将用最左推导。 1表示:只需向右看一个符号便可决定如何推导(即选择哪个产生式进行推导)。 类似也可以有LL(K)文法:需向前查看K个符号才可确定选用哪个产生式。 文法G[S]是否是LL(1)文法? S→aA S→d A→bAS A→ε 设文法G[S] 为: S→aAS S→b A→bA A→ε 二、LL(1)文法的判别 求出能推出ε的非终结符 计算FIRST集 计算FOLLOW集 计算SELECT集 判别是否是LL(1)文法 例:设文法G[S] 为: S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 判断它是否是LL(1)文法。 1.求出能推出ε的非终结符 S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 2.计算FIRST集 1.若X?V?,则FIRST(X)={X} 2.若X?VN,且有产生式X?a…,则 a∈FIRST(X); 若X??也是一条产生式,则 ?∈FIRST(X). S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 3.计算FOLLOW集 1.对于文法的开始符号S,置#于FOLLOW(S)中; S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 4.计算SELECT集 S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 三、某些非LL(1)文法到LL(1)文法 的等价变换 提取左公共因子 消除左递归 1、提取左公共因子 A→αβ|αγ导致SELECT(A→αβ)∩ SELECT(A→αγ)≠Φ,因此是非LL(1)文法。 例:文法G1[S] 为: S→aSb S→aS S→ε 例:文法G2为: A→ad A→Bc B→aA B→bB 结 论 不一定每个文法的左公共因子都能在有限的步骤内替换成无左公共因子的文法,文法中不含左公共因子只是LL(1)文法的必要条件。 2、消除左递归

文档评论(0)

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

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

1亿VIP精品文档

相关文档