符号表
符号表 = 名字域 + 属性信息域
- 名字域:标识符的字符串
- 属性信息域:类型、作用域、存储位置、维数、参数列表等
符号表在语义分析阶段填充,供后续阶段查询。
说明类语句翻译
说明类语句 → 填符号表 → 不产生中间代码
常量说明
- 将常量名、类型、值填入符号表
- 如
const int N = 10→ 符号表记录 (N, int, 10)
简单变量说明
- 将变量名、类型填入符号表
- 如
int a→ 符号表记录 (a, int)
复合类型说明
- 复合类型(数组、结构体等)需记录维数、成员类型、偏移量等信息
- 如
int arr[3][4]→ 符号表 + 内情向量表
重点 复合类型文法,考试可能要求设计文法。
复合类型文法设计
常见复合类型说明语句的文法模式:
D → T id | T id L
L → , id L | ε
T → int | float | char | struct id | type[N]
- 类型 含基本类型和复合类型
- 链表 传递类型信息(继承属性)
- 嵌套数组 用递归方式描述
⚠️ 考试题可能给出一种复合类型,要求写出对应文法及语义动作。