审查源程序有无语义错误,为代码生成阶段收集类型信息(如类型转化,类型匹配,上下文相关性等)。
主要是类型相容检查,有以下几种:
各种条件表达式的类型是不是boolean型?
运算符的分量类型是否相容?
赋值语句的左右部的类型是否相容?
形参和实参的类型是否相容?
下标表达式的类型是否为所允许的类型?
函数说明中的函数类型和返回值的类型是否一致?
V[E]中的V是不是变量,而且是数组类型?
V.i中的V是不是变量,而且是记录类型?i是不是该记录的域名?
x+f(…)中的f是不是函数名?形参个数和实参个数是否一致?
每个使用性标识符是否都有声明?有无标识符的重复声明?
在语义分析同时产生中间代码,在这种模式下,语义分析的主要功能如下:
语义审查
在扫描声明部分时构造标识符的符号表
在扫描语句部分时产生中间代码