赞
踩
1.语义分析概述
1.1 定义
语义是指源程序及其组成部分所表述的含义,和语法不同,语法是关于程序及其组成部分的构成规则的描述,是上下文无关的;而语义是关于语法结构的含义及其使用规则的描述,是上下文有关的。语法上正确,其语义不一定正确。
如下面的程序段,在语法结构上是正确的,但是在语义上有很多错误:
int x = 0, z; float y(){.....} void main(){ z = x() + t; z /= x; x = y(); }1.2 分类
分为静态语义和动态语义。
静态语义 是指在编译阶段能够检查的语义,比如标识符未定义,类型不匹配等。 动态语义 是指在目标程序运行阶段能够检查的语义,比如除数为0,无效指针,数组下标越界等。 1.3 任务
语义分析的任务就是对结构上正确的源程序进行上下文有关性质的审查,审查源程序是否有无语义错误,为代码生成阶段收集类型信息。
1.4 主要功能
主要功能包括建立符号表,进行静态语义检查,发现语义错误。
1.5 地位和作用
如下图所示:
2.语义描述
2.1 程序的语义
2.2 函数的语义
2.3 各种名字的声明和使用的语义
2.4 各种语句的语义
2.5 表达式的语义
3.符号表
3.1 概述
在编译程序工作的过程中,需要不断收集、记录和使用源程序中的各种名字及其属性等相关信息,以便检查语义是否正确,并辅助翻译为正确的代码。一般是建立表格的方式记录信息。
3.2 功能
1)收集符号信息
2)进行语义的合法性检查
3.3 表
符号表应该包含常量表、变量表、函数表等等。
4.静态语义检查
4.1 声明与定义语义检查
4.2 表达式语义检查
4.3 语句语义检查
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。