变量名和内存地址及符号表
转载
1、变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存中不存在,操作时转换成地址数存放在寄存器中了。其实可以理解为是符号表起到了连接作用。
2、符号表 (此段摘抄网上一个课件)
符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。
在编译过程中需要不断汇集和查证出现在源程序中的各种名字的属性和特征等信息编译器使用符号表来记录名字的作用域以及绑定信息编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,符号表中的信息在编译的不同阶段都用到在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否一致)和产生中间代码在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。对一个多遍扫描的编译程序,不同遍所用的符号表也往往各有不同。因为每遍所关心的信息各有差异。
符号表的属性:
符号名
符号的类型
符号的存储类别
符号的作用域及可视性
符号变量的存储分配信息
符号的其它属性
数组内情向量
记录结构型的成员信息
函数及过程的形参
符号表的组织结构
第一种: 把属性种类完全相同的那些符号组织在一起,构造出多个符号表常数表、变量名表、过程名表,标号表
第二种: 把所有语言中的符号都组织在一张符号表中。组成一张包括了所有属性的庞大的符号表
符号表例子: