语义分析是Compiler的第三阶段。语义分析确保程序的声明和语句在语义上是正确的。它是一个过程集合,在语法需要时由解析器调用。前一阶段的语法树和符号表都用于检查给定代码的一致性。类型检查是语义分析的重要部分,编译器确保每个运算符都有匹配的操作数。
语义分析器:
它使用语法树和符号表来检查给定程序在语义上是否与语言定义一致。它收集类型信息并将其存储在语法树或符号表中。此类型信息随后由编译器在中间代码生成期间使用。
语义错误:
语义分析器识别的错误如下:
- 类型不匹配
- 未声明的变量
- 保留标识符滥用
语义分析的功能:
- 类型检查 –
确保以与其定义一致的方式使用数据类型。 - 标签检查 –
程序应该包含标签引用。 - 流量控制检查 –
检查控制结构是否以正确的方式使用。(例如:循环外没有 break 语句)
例子:
float x = 10.1;
float y = x*30;
在上面的例子中,整数 30 将在乘法之前被类型转换为浮点 30.0,语义分析器。
静态和动态语义:
- 静态语义——
之所以如此命名是因为它们在编译时被检查。程序在执行过程中的静态语义和意义,是间接相关的。 - 动态语义分析——
它定义了不同的程序单元如表达式和语句的含义。与静态语义不同,这些是在运行时检查的。