《编译原理》第章语法制导翻译.pdf
文本预览下载声明
编译原理
武汉大学计算机学院
编译原理课程组
语义分析
语法正确并不能保证含义(语义)正确。
依据语言的语义规则对语法分析得到的语法结构进行静态
语义检查 (确定类型、类型和运算合法性检查、识别含义与相
应的语义处理及其它一些静态语义检查),并用另一种内部形
式表示出来,或者直接用目标语言表示出来。
语义分析
程序的含义涉及两方面:数据结构的含义与控制结构的含义。
数据结构的含义——名字的含义(类型正确性检查)。
控制结构的含义——语言自身定义(形式化与非形式化)。
语义分析
语义分析的基本功能:
◆ 确定类型——数据类型(词法分析)
◆
◆ 类型检查——运算合法性、运算对象类型一致性或相容性
◆
◆ 识别含义——语法成分的含义(中间代码、目标代码)
◆
◆ 其他静态语义检查——控制流检查等
◆
语义分析
一般情况下,语义分析仅产生中间代码,因为:
◆ 词法分析与语法分析简单、比例小,有利于难点分解;
◆
◆ 有利于中间代码优化;
◆
◆ 有利于程序的移植;
◆
◆ 有利于任务的分解、人员的组织。
◆
语义分析
语义是上下文有关的,进行形式化很困难。
尚无公认的、广泛被接受与流传的语义形式化系统用于描
述程序设计语言的语义。
尚未形成可用于编译程序构造的、系统的形式化语义算法
或典型技术。
语法制导翻译技术有利于语义分析与目标代码生成的形式
化走向实用。
第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)
显示全部