CH8 静态语义分析和中间代码生成.pdf
文本预览下载声明
S.P
词法分析程序
符 语法分析程序
错
号
表 语义分析、生成中间代码 误
处
管
理 代码优化 理
生成目标程序
O.P
编译原理 2017年5月5 日
第8章 静态语义分析和中间代码生成
符号表
静态语义分析
中间代码生成
编译原理 2017年5月5 日
符号表
符号表 (symbol tables )
•名字信息建立后加入/ 更改符号表
名字信息如:种类,类型,偏移地址,占用空间等
• 需要获取名字信息时,查找符号表
•符号表的组织可以体现名字作用域规则
编译原理 2017年5月5 日
符号表的作用
用来存放有关标识符(符号)的属性信息
• 这些信息会在编译的不同阶段用到
• 符号表的内容将用于静态语义检查和产生中间代码
• 在目标代码生成阶段,符号表是对符号名进行地址
分配的依据
• 对一个多遍扫描的编译程序,不同遍所用的符号表
也会有所不同,因为每遍所关心的信息或所能得到
的信息会有差异
用来体现作用域与可见性信息
编译原理 2017年5月5 日
符号的常见属性
符号名
符号的类别
符号的类型
符号的存储类别和存储分配信息
符号的作用域信息
其他属性
• 数组内情向量
• 记录结构的成员信息
• 函数及过程的形参
编译原理 2017年5月5 日
符号表的实现
针对符号表的常见操作
• 创建符号表 在编译开始,或进入一个作用域
• 插入表项 在遇到新的标识符声明时进行
• 查询表项 在引用标识符时进行
• 修改表项 在获得新的语义值信息时进行
• 删除表项 在标识符成为不可见或不再需要它的任
何信息时进行
• 释放符号表空间 在编译结束前或退出一个作用域
编译原理 2017年5月5 日
符号表的实现
实现符号表的常用数据结构
• 一般的线性表
如:数组,链表,等
• 有序表
查询较无序表快,如可以采用折半查找
• 二叉搜索树
• Hash表
编译原理
显示全部