编译原理 第三章上下文无关文法及分析.ppt

编译原理 第三章上下文无关文法及分析.ppt

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

第三章 上下文无关文法及分析 学习目标: 理解: 上下文无关文法, 推导,归约,分析树,抽象语法树 了解: 语法的结构,二义性文法 分析学习的主要内容 语法结构的描述 : 上下文无关文法 语法分析的方法(代码实现语法规则分析) 自顶向下的语法分析 自底向上的语法分析 正则表达式和上下文无关文法的主要差别 上下文无关文法的规则是递归的 由上下文无关文法识别的结构类比由正则表达式识别的结构类大大增多了 3.1 分析过程 3.2 上下文无关文法 3.3 分析树与抽象语法树 3.4 二义性 3.1 分析过程 分析的任务 从由扫描程序产生的记号中确定程序的语法结构 隐式或显式地构造出表示该结构的分析树或语法树 分析的接口 输入: 当分析过程需要下一个记号时,分析程序就调用扫描程序过程以从输入中获得它 输出: 构造的隐式或显式语法树。语法树的每个节点包括了编译后面过程所需的特性 分析的错误处理 错误恢复 报告有意义的错误信息,并继续进行分析(去找到尽可能多的错误) 错误修复 从提交给它的非正确版本中推断出一个可能正确的代码版本(这通常在简单情况下才发生的) 3.2 上下文无关文法 作用 上下文无关文法说明程序设计语言的语法结构 除了上下文无关文法涉及到了递归规则之外,与使用正则表达式说明词法结构很相似 例如 整型算术表达式的上下文无关文法是 exp - exp op exp | (exp) | number op - + | - | * number的正则表达式 number = digit digit* digit = 0|1|2|3|4|5|6|7|8|9 3.2.1 上下文无关文法的定义 定义 上下文无关文法G= (VT,VN,P,S): VT 是终结符集合 VN 是非终结符集合, VN∩VT=φ P 是产生式集合, 或语法规则, 形如A→ α,其中 A∈ VN 且 α ∈ (VN∪VT) * S 是开始符号 , S∈VN 例如 简单的算术表达式的文法G=(VT,VN,P,S) 解释 VT 是组成符号串的基本符号。终结符是单词 VN 是用来表示符号串集合的结构名 开始符号“S”表示的符号串集合是由语法定义的语言 产生式定义了一种结构,结构名在箭头的左边。箭头的右边定义了结构的布局。 产生式的形式 ( A→ α) 被称为Backus-Naur范式(或 BNF) 表示法惯例 按照惯例,我们可以只写出一个文法的产生式 一般来说,第一个产生式的左边是开始符号 使用小写字母表示终结符 使用大写字母或用… 括起的表示非终结符 如果 A-α1, A- α2, …, A- αn 是所有左边是A的产生式,我们可以写为 A- α1 | α2 |… | αn 例如 简单算术表达式的文法可写为: E - E O E | (E) | num O - + | - | * | / 文法的Chomsky分类 有四类文法: 无限制文法 (0型) 上下文有关文法 (1型) 上下文无关文法 (2型) 正规文法 (3型) 这四种文法的关系: 例如 3.2.2 推导 和 归约 推导和归约的作用 上下文无关文法规则确定了为由规则定义的结构的记号符号符合语法的串集 例如:对应文法 exp-exp op exp | (exp) | number op- + | - | * (34-3)*42 是合法的串 (34-3*42 不是合法的串 文法规则通过推导或归约确定记号符号的正规集 直接推导 and 直接归约 A- β是文法 G 的产生式 , 若有v 和w 满足:v=αAγ,w=αβγ,其中 α,γ ∈ (VN∪VT) * ,则称v 直接推导到 w,或 w直接归约到 v,记作 v=w 直接推导就是用产生式的右部替换产生式的左部(非终结符)的过程 直接归约 就是用产生式的左部非终结符替换产生式的右部的过程 推导和归约 =的闭包 , α=*β α=*β当且仅当有0个或多个 (n=0)推导序列α1=α2=… =αn-1=αn,α=α1且β =αn S=*w, 其中 w ∈ VT * 且 S是文法G的开始符号,被称为 S 推导出 w 或 w归约到 S 例如 exp-exp op exp | (exp) | num op- + | - | * (34-3)*42 的推导是: (1)exp=exp op exp (exp-exp op exp) (2) =exp op num (exp-num) (3) =exp * num (op-*) (4) =(exp)*num (exp-(exp)) (5) =(exp op exp)* num (exp-exp op exp) (6) =(

文档评论(0)

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

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

1亿VIP精品文档

相关文档