文档详情

《编译原理》第章语法制导翻译.pdf

发布:2017-06-14约1.97万字共47页下载文档
文本预览下载声明
编译原理 武汉大学计算机学院 编译原理课程组 语义分析 语法正确并不能保证含义(语义)正确。 依据语言的语义规则对语法分析得到的语法结构进行静态 语义检查 (确定类型、类型和运算合法性检查、识别含义与相 应的语义处理及其它一些静态语义检查),并用另一种内部形 式表示出来,或者直接用目标语言表示出来。 语义分析 程序的含义涉及两方面:数据结构的含义与控制结构的含义。 数据结构的含义——名字的含义(类型正确性检查)。 控制结构的含义——语言自身定义(形式化与非形式化)。 语义分析 语义分析的基本功能: ◆ 确定类型——数据类型(词法分析) ◆ ◆ 类型检查——运算合法性、运算对象类型一致性或相容性 ◆ ◆ 识别含义——语法成分的含义(中间代码、目标代码) ◆ ◆ 其他静态语义检查——控制流检查等 ◆ 语义分析 一般情况下,语义分析仅产生中间代码,因为: ◆ 词法分析与语法分析简单、比例小,有利于难点分解; ◆ ◆ 有利于中间代码优化; ◆ ◆ 有利于程序的移植; ◆ ◆ 有利于任务的分解、人员的组织。 ◆ 语义分析 语义是上下文有关的,进行形式化很困难。 尚无公认的、广泛被接受与流传的语义形式化系统用于描 述程序设计语言的语义。 尚未形成可用于编译程序构造的、系统的形式化语义算法 或典型技术。 语法制导翻译技术有利于语义分析与目标代码生成的形式 化走向实用。 第8章 语法制导翻译 ◆ 属性文法 ◆ ◆ 目标代码结构 ◆ ◆ 中间代码 ◆ ◆ 控制语句的翻译 ◆ 8.1 语法制导翻译 1. 属性文法 (Attribute Grammar) 属性可以是需要表达或涉及的任何内容,如名字的类型、名字 的值、名字的存储地址、生成的代码以及查填符号表的操作、打印 出错信息的操作、生成代码的操作等。 属性值的计算,由语法分析过程中产生的语法分析树相应结点 的环境推导出来。 为产生式附加子程序,用于计算文法符号的属性值。 8.1 语法制导翻译 1. 属性文法 (Attribute Grammar) 对某个上下文无关文法,为每个文法符号指定一组属性,且为 文法中的每个产生式附加一段属性计算方法——语义规则/语义动作 /语义子程序,则称该文法为属性文法。 8.1 语法制导翻译 1. 属性文法——举例 G[L]: L →En print(E.val); E →E +T E.val:=E .val+T.val; 1 1 E →T E.val:=T.val; T →T *F T.val:=T .val*F.val; 1 1 T →F T.val:=F.val; F →(E)
显示全部
相似文档