分析语句和声明是如何构成程序的
收集标识符的属性信息
- 种属
- 简单变量
- 复合变量
- 过程
- 类型
- 整型
- 实型
- 字符型
- 布尔型
- 指针型
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息
使用符号表和字符串表来存储这些信息
符号表中Name字段为什么要设计字符串表,而不是将标识符直接放到Name字段中?
- 必要性:现代程序语言一般不限制标识符的长度,故name字段的长度不便预先固定,短了:适用范围小,长了:浪费空间、降低查询效率。将标识符的字面值单独放在字符串表中,其位置索引放在name字段中,可保证name长度固定,并由此带来存储效率高、查询方便的优点
- 可行性:语义分析中较少使用标识符的字面值,故在name字段中不保存标识符字面值是合理的
语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
转载地址:
https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce