审查源程序有无语义错误,为代码生成阶段收集类型信息(如类型转化,类型匹配,上下文相关性等)。

主要是类型相容检查,有以下几种:

各种条件表达式的类型是不是boolean型?

运算符的分量类型是否相容?

赋值语句的左右部的类型是否相容?

形参和实参的类型是否相容?

下标表达式的类型是否为所允许的类型?

函数说明中的函数类型和返回值的类型是否一致?

V[E]中的V是不是变量,而且是数组类型?

V.i中的V是不是变量,而且是记录类型?i是不是该记录的域名?

x+f(…)中的f是不是函数名?形参个数和实参个数是否一致?

每个使用性标识符是否都有声明?有无标识符的重复声明?

在语义分析同时产生中间代码,在这种模式下,语义分析的主要功能如下:

语义审查

在扫描声明部分时构造标识符的符号表

在扫描语句部分时产生中间代码