符号表

符号表 = 名字域 + 属性信息域

  • 名字域:标识符的字符串
  • 属性信息域:类型、作用域、存储位置、维数、参数列表等

符号表在语义分析阶段填充,供后续阶段查询。

说明类语句翻译

说明类语句 → 填符号表 → 不产生中间代码

常量说明

  • 将常量名、类型、值填入符号表
  • 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]
  • 类型 含基本类型和复合类型
  • 链表 传递类型信息(继承属性)
  • 嵌套数组 用递归方式描述

⚠️ 考试题可能给出一种复合类型,要求写出对应文法及语义动作。