第五章节 语法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章节 语法分析

编译原理 Principles of Compiler 5.1 概述 语法分析 输入:为单词的序列 任务:判断单词的序列是否满足一个上下文无关文法 输出:一个与单词序列匹配的语法树 语法分析的一般方法 利用一个栈表示识别的状态 根据语法树的生成方式分为自上而下与自下而上的两种策略 5.2 CFG与PDA 上下文无关文法 CFG ( Context-free Grammar ) 产生式的形式为A ? ?,其中A ? VN 上下文无关语言 CFL ( Context-free Language ) 一个语言是CFL,当且仅当存在CFG描述它。 5.2 CFG与PDA 下推自动机 PDA ( Push Down Automata ) 带一个栈的有穷状态自动机 PDA读入一个符号,在做状态迁移的同时还能够对栈进行操作 是栈式程序的抽象模型 CFG与PDA的等价性 一个语言是CFL,当且仅当存在一台PDA识别它 5.2 CFG与PDA 下推自动机的应用 例:只使用一个栈与一个状态变量,识别语言L = { 0n1n | n ? 0 } 算法描述 令状态变量s = 0, 从左向右读入符号,重复以下动作: 如果s == 0,那么 3.1 如果a为0,则压入0 3.2 如果a为1,则弹出一个0,且令s = 1 如果s == 1,那么 4.1 如果a为0,则ERROR 4.2 如果a为1,则弹出一个0 如果输入结束,那么s == 0则接受,否则拒绝。 5.2 CFG与PDA 下推自动机的形式定义 一个PDA M=(Q, S, ?, q0, d, F),其中: Q为状态集 ?为字符集 ?为栈字符集 q0 ? Q为初始状态 F ? Q为接受状态集 ?:Q ? ?? ? ? ? P( Q ? ?? ), ?? = ? ? { ? } 5.2 CFG与PDA PDA的语言 一个PDA M=(Q, S, ?, q0, d, F)接受串?,如果?能够写成? = a1a2…am,ai???,并且存在M的一个状态序列s0s1…sm与一个栈的串序列?0?2…?m,使得: s0 = q0,?0 = ? ?0?i?m( (si+1, b) ? ?(si, ai+1, c) ),其中?i = c?, ?i+1 = b?,b, c ? ??,? ? ??* sm ? F M的语言为所有M接受的串的集合 5.3 自上而下的分析方法 一般策略 给定一个文法G,判断一个串a是否属于G的语言。 自上而下的分析方法试图从文法的开始符号推导出目标串a,如果成功则认为a属于G的语言。 由于该推导过程正好表示对应语法树从上到下的生成过程,因此称之为自上而下的分析方法。 5.3 自上而下的分析方法 文法G[S]: S ? 0S1 | ? 分析过程 令输入串a = 0011 分析过程即从S开始试图推导出0011 S?0S1 ?00S11 ?0011 5.3.1 基于PDA的分析算法 基本思想 利用PDA的栈来存储推导的中间结果。 利用PDA的非确定性来“猜测”所有可能的推导。 采用最左推导,及时将推导产生出来的最左终结符与输入匹配 5.3.1 基于PDA的分析算法 构造思想 给定文法G=(VN,VT,P,S),构造PDA M=(Q,S,?,q0,d,F),使M恰好接受G的语言。 PDA的分析算法 1 向栈中压入$S。 2 如果栈顶符号为非终结符A,则非确定性地用A的所有产生式的右部替换栈顶的A。 3 如果栈顶符号为终结符a,则与输入符号匹配,如果成功则从栈顶弹出a,否则该分支进入无定义状态(终止)。 4 如果栈顶符号为$,而且输入符号为$(输入结束),则接受,否则该分支进入无定义状态。 5 重复2,3,4。 5.3.1 基于PDA的分析算法 PDA的构造方法 给定文法G[S]: S ? 0S1 | 01 构造步骤 构造初始迁移 为每一条产生式构造对应的迁移 为每一个终结符的匹配构造对应的迁移 构造猜测成功的迁移 5.3.1 基于PDA的分析算法 5.3.1 基于PDA的分析算法 算法特点 通用性好 抽象层次高 算法效率低 5.3.2 左递归的消除 直接左递归的消除 产生式P ? P? | ? 改写为:P ? ?P’,P’ ? ?P’ | ? 一般形式的直接左递归 P ? P?1 | P?2 | … | P?m | ?1 | ?2 | … | ?n 改写为: P ? ?1P’ | ?2P’ | … | ?nP’ P’ ? ?1P’ | ?2P’ | … | ?mP’ | ? 5.3.2 左递归的消除 间接左递归 S ? Qc | c Q ? Rb | b R ? Ca | a 间接左递归产生的原因 推导串的首个非终结符存在环路 消除方法:打破可能存在的环路 5.3.2 左递归的消除

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档