自己动手构造编译系统:编译、汇编与链接2.1.3 符号表管理
2023-03-09 22:21:41 时间
2.1.3 符号表管理
符号表是记录符号信息的数据结构,它使用按名存取的方式记录与符号相关的所有编译信息。编译器工作时,少不了符号信息的记录和更新。在本书定义的高级语言中,符号存在两种形式:变量和函数。前者是数据的符号化形式,后者是代码的符号化形式。语义分析需要根据符号检测变量使用的合法性,代码生成需要根据符号产生正确的地址,因此,符号信息的准确和完整是进行语义分析和代码生成的前提。见图2-6。
对于变量符号,需要在符号表中记录变量的名称、类型、区分变量的声明和定义的形式,如果变量是局部变量,还需要记录变量在运行时栈帧中的相对位置。例如以下变量声明语句:
extern int var;
该语句声明了一个外部的全局变量,记录变量符号的数据结构除了保存变量的名称“var”之外,还需要记录变量的类型“int”,以及变量是外部变量的声明形式“extern”。
对于函数符号,需要在符号表中记录函数的名称、返回类型、参数列表,以及函数内定义的所有局部变量等。例如下面的函数定义代码:
int sum(int a,int b)
{
int c;
c=a+b;
return c;
}
符号表应该记录函数的返回类型“int”、函数名“sum”、参数列表“int,int”。函数的局部变量除了显式定义的变量“c”之外,还暗含参数变量“a”和“b”。
由于局部变量的存在,符号表必须考虑代码作用域的变化。函数内的局部变量在函数之外是不可见的,因此在代码分析的过程中,符号表需要根据作用域的变化动态维护变量的可见性。
相关文章
- 伴鱼:借助 Flink 完成机器学习特征系统的升级
- Excelize 开源五周年 ?
- elasticsearch5.6集群部署实验
- 「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战之动态表单(五)
- Hadoop实战-part3
- 通过组策略管理模板强制允许安装第三方拓展(无禁用提示)
- Excelize 开源五周年 ?
- 跟上时代:Openwrt路由器配置直接拨号和ipv6的两种方案
- Excelize 开源五周年 ?
- Excelize 开源五周年 ?
- Excelize 开源五周年 ?
- Excelize 开源五周年 ?
- Excelize 开源五周年 ?
- Excelize 开源五周年 ?
- HTTP详解
- Excelize 开源五周年 ?
- 星巴克和万智牌的字体设计师DaveBailey.xyz用其全名.xyz展示独立字体设计
- 免费虚拟主机管理系统 哪个好
- DHCP的原理与配置
- Excelize 开源五周年 ?