自顶向下语法分析详解.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
检查由扫描器输出的单词符号序列是否符合该语言的文法——句子 扫描器 分析器 语义处理 单词符号 分析树 源程序 分析器的输入:Token序列 分析器的输出 分析树 出错处理 分析方法 自顶向下(递归下降、预测分析) 自底向上(算符优先、LR分析器) 第四章 语法分析 4.1自顶向下的分析方法 基本思想 寻找输入符号串最左推导 试图根据当前输入单词判断使用哪个产生式 基本过程 从根开始,按与最左推导相对应的顺序,构造输入符号串(Token)的分析树 1、重要概念 推导: αAβ?αγβ (依据:A→γ) 最左(Left-most)推导——最左分析 左句型 最左推导对应最右归约 最右(Right-most)推导——最右分析 规范推导、规范句型(右句型) 最右推导对应最左归约(规范归约) 自顶向下语法分析要解决的问题是? 候选式的确定 给定文法S→cAd A→ab|a ?句子cad是该文法定义语言的句子 S S c A d c A d a b a 产生式(候选式)的选择:当要进行关于某个语法变量的推导时,希望能够根据当前符号确定候选式。 带回溯的自顶向下分析思想 给定文法G[S]和输入串W,从S出发自顶向下构 造语法树: 若存在某条推导路径,使得S=* W,则W语法正确; 若尝试所有推导路径,都无法得到S=* W,则W语法错误. 不确定的自顶向下分析需作回溯,效率很低. 2.确定的自顶向下分析思想 基本思想:每一步根据当前输入符号可唯一确定某条规则用于推导 .由根向下构造语法树 .构造最左推导 .推导出的终结符是否与当前输入符匹配 确定的自顶向下分析思想 例1: S – pA [1] | qB[2] A – cAd[3] | a [4] 输入串:W=pccadd 分析结论:W语法正确且分析过程的每一步都唯一 原因:本文法的非终结符(S,A)的候选都以 终结符开头,且两两不同. S: p≠q A: c≠a 例2: S – Ap [1] | Bq [2] A – a [3] | cA [4] B – b [5] | dB [6] 输入串:W=ccap 分析结论:W语法正确且分析过程的每一步都唯一 原因:本文法的A和B的候选以终结符开头,且两两不同. A: a≠c B: b≠d ;并且对于 S: FIRST(Ap)∩FIRST(Bq) = {a,c} ∩ {b,d}=?   定义:FIRST(?)={a|? =* a?,a∈VT, ?, ?∈V*} 若? =* ε则规定ε∈FRIST(?) 例3: S – aA [1] | d [2] A – bAS [3] | ? [4] 输入串:W=abd 分析结论:W语法正确且分析过程的每一步都唯一 原因:S: a≠d A: {b} ∩ FOLLOW(A) = {b} ∩ {a,d}=?   定义: FOLLOW(A)={a?S =* ? A ?且a ∈ FRIST(?),? ∈V*, ?∈V+ } 我们希望:从左到右扫描输入串——寻找它的一个最左推导 对于 G 的每个非终结符 A 的任何两个不同的候选式 A→α|β 1) FIRST(α)∩FIRST(β)=φ 2) 如果β?*ε,则 FISRT(α)∩FOLLOW(A)=φ ——文法G是 LL(1) 的充要条件 第一个L : 从左到右扫描输入串  第二个L: 生成的是最左推导 1: 向前看一个输入符号 3.LL(1)文法的判别 1.对于A∈Vn,计算First(A) 2.对于A∈Vn,计算Follow(A) 3.对于A–?|β ,计算 FIRST(?) ∩FIRST(β) FIRST(β ) ∩ follow(A)(若? =* ?成立) 1.若A=* ? ,则? ∈ First(A) 2.若 A–B…,则  FIRST(A)= FIRST(A)∪(FIRST(B)-{ε})  若 A–a…,则 FIRST(A)= FIRST(A)∪{a}   3.若 A– ? B…及 A– ? a…,且   ? =* ?,则类似于步骤2处理 求FIRST( A ) 的算法 FIRST(F)={(,id} FIRST(T)=FIRST(F)={(,id} FIRST(E)=FIRST(T)={(,id} FIRST(E)={+,ε} FIRST(T)={*,ε} FIRST(+)=

文档评论(0)

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

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

1亿VIP精品文档

相关文档