语义分析
字数
527 字
阅读时间
3 分钟
语义分析的主要任务
- 收集标识符的属性信息
- 种属(Kind)
- 简单变量、复合变量(数组、记录、...)、过程、...
- 类型(Type)
- 整型、实型、字符型、布尔型、指针型、...
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息
- 参数个数、参数类型、参数传递方式、返回值类型、...
- 种属(Kind)
- 语义检查
- 常见错误:
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 例如:错把数组与过程相加,属于无意义操作,类型不匹配
- 有些错误可用自动类型转换解决
- 操作符与操作数之间的类型不匹配 例如:
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有错误
- 常见错误:
- 例:
- real:实型变量
每位占用8个字节 - integer:整型变量
每位占用4个字节
- real:实型变量
- 语义分析收集到的这些标识符的信息都会存储到一个符号表中,每一个标识符对应符号表的一条记录,记录的每一个字段都对应着标识符的一个属性
- 符号表通常带有一个字符串表,用来存放程序中用到的标志符和字符常数(橙底字上方的那一行就是字符串表)
- 如图中例子所示:NAME字段分为两部分,左部用来存放标识符在字符串表中的起始位置,右部用来存放标识符的长度
贡献者
freeway348