任务1:收集标识符的属性信息
- 种属(Kind)
- 简单变量、复合变量(数组、记录、...)、过程、...
- 类型(Type)
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息
- 参数个数、参数类型、参数传递方式、返回值类型、...
符号表
用于存放上述标识符的属性信息的数据结构
符号表为什么要设计字符串表这样的数据结构?
- NAME是变长的,固定长度存储浪费空间,单独用字符串表存储,使得符号表易于查询,字符串表根据首地址+字符串长度也能直接存取。
任务2:语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
- 数据下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有错误
- ......