3.4自上而下语法分析3.4.1自上而下分析的一般方法-Read.ppt

3.4自上而下语法分析3.4.1自上而下分析的一般方法-Read.ppt

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

上次课程内容回顾 3.3.3 形式语言与自动机简介 3.3.3 形式语言与自动机简介(续) 3.4 自上而下语法分析 3.4.1 自上而下分析的一般方法 3.4.1 自上而下分析的一般方法(续1) 3.4.2 消除左递归 1 消除文法的直接左递归(续1) 1 消除文法的直接左递归(续1) 1 消除文法的直接左递归(续2) 2 消除文法的左递归 2 消除文法的左递归(续1) 3.4.3 提取左因子 3.4.3 提取左因子(续1) 3.4.4 递归下降分析 稳妥的笨方法: 文法的状态转换图 : 状态图的化简: 状态图的化简(续1) 3 递归下降子程序 3 递归下降子程序(续) 上次课程内容回顾 3.4.5 预测分析器 3.4.5.1 非递归预测分析器的工作模式 1 预测分析表 2 工作方式 3 驱动器算法 4 用预测分析器分析句子 4 用预测分析器分析句子(续) 3.4.5.2 构造预测分析表 3.4.5.2 构造预测分析表(续1) 3.4.5.2 构造预测分析表(续2) 3.4.5.2 构造预测分析表(续3) 3.4.5.2 构造预测分析表(续4) 3.4.5.2 构造预测分析表(续5) 3.4.5.3 LL(1)文法 3.4.5.3 LL(1)文法(续1) 3.4.5.3 LL(1)文法(续2) 3.4.5.3 LL(1)文法(续3) 3.4.5.3 LL(1)文法(续4) 算法3.7 构造预测分析表 输入 文法G 输出 分析表M 方法 应用下述规则 对文法的每个产生式A→α,执行2和3; 对FIRST(α)的每个终结符a,加入α到M[A,a]; 若ε∈FIRST(α),则FOLLOW(A)每个终结符b(包括#),加入α到M[A,b]; M中其它没有定义的条目均是error。 ■ M[A,a]如何指导下一步动作: 若当前栈顶为A,当前输入为a,则规则2表示下一步动作是展开A→α,因为a∈FIRST(α),所以展开后下一次正好匹配a。 若当前栈顶为A,当前输入为b且b∈FOLLOW(A),则规则3表示下一步动作是展开A→ε,即栈顶弹出A,继续分析A之后的部分,因为b∈FOLLOW(A),所以弹出A后下一次正好匹配A的后继b。 FIRST(F/T/E)= {( id num} FIRST(T) = {* / mod ε} FIRST(E) = {+ - ε} FIRST(L) = {ε ( id num} FOLLOW(L) = {#} FOLL0W(E/E)= {) ;} FOLLOW(T/T)= {+ - ; )} FOLLOW(F) = {+ - * / mod ) ;} 2. 对FIRST(α)的每个终结符a,加入α到M[A,a]; 3. 若ε∈FIRST(α),则FOLLOW(A)每个终结符b(包括#), 加入α到M[A,b]; 从文法构造分析表 F T T E E L # ; ) ( mod / * - + num id E;L E;L E;L TE TE TE +TE -TE FT FT FT *FT /FT mod FT id num (E) ε ε ε ε ε ε ε M[A,a]的作用:指导产生式产生句子(指导推导) 问题:是否为任意文法构造的分析表M[A,a]中都最多有一个条目? 例3.23 二义文法文法的预测分析表: 文法: S→iCtSS|a S→eS|ε C→b ? a b e i t # S ? ? ? ? S ? ? ? ? C ? ? ? ? ? 预测分析表: FIRST与FOLLOW集合: FIRST(C) = {b} FIRST(S) = {ε, e} FIRST(S) = {i, a} FOLLOW(S) = {#, e} FOLLOW(S)= {#, e} FOLLOW(C) = {t} a iCtSS b eS ε ε 定义3.12 文法G被称为是LL(1)文法,当且仅当为它构造的预测分析表中不含多重定义的条目。由此分析表所组成的分析器被称为LL(1)分析器,它所分析的语言被称为LL(1)语言。第一个L代表从左到右扫描输入序列,第二个L表示产生最左推导,1表示在确定分析器的每一步动作时向前看一个终结符。 ■ 判定LL(1)文法的方法:a.构造分析表; b.无需构造分析表。 推论3.2 G是LL(1)的,当且仅当G的任何两个产生式A→α|β满足: 对任何终结符a,α和β不能同时推导出以a开始的串; α和β最多有一个可以推导出ε; 若β=*ε,则α不能导出以FOLLOW(A)中终结符开始的任何串。 ■ 对所有A→α: 2.

文档评论(0)

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

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

1亿VIP精品文档

相关文档