编译原理复习——符号表

符号表作为编译系统的重要组成部分,贯穿于 法分析 检查 语义处理 的编译全过程
在编译程序中符号表用来存放源程序中出现的 关名字的属性信息 ,这些信息集中反映了 名字的
语义特征属性
符号表总体结构的设计和实现下列因素有关
源语言的复杂性(包括词法结构、语法结构的复杂性)
对于编译系统在时间效率和空间效率方面的要求
符号表中所登记的信息在编译不同阶段都要用到
例如:在 词法分析 语法分析 过程中不断更新表中的 信息
在语义分析之前已经创建符号表,语义分析阶段写入 名字属性信息
另外,在词法分析到代码生成的 各阶段 则会从表 中获取不同的属性信息
符号表的功能主要归结为以下几个方面:
① 收集符号属性
编译程序扫描说明部分收集有关标识符的属性, 并在符号表中建立符号的相应属性信息
② 作为上下文语义的合法性检查的依据
通过符号表中属性记录可进行相应 上下文的语义检查
③ 作为目标代码生成阶段地址分配的依据
符号表的组成
符号表包括 名字栏 信息栏 (可有多列)。
信息栏 包含许多子栏和标志位,用 来记录相应名字和各种属性
名字栏 也称主栏。主栏的内容称为 关键字 (key  word)
符号表的符号常见属性
虽然不同的语言定义的标识符属性不尽相同,下列 几种属性通常都是需要的:
符号名
② 符号的类型
符号的存储类别
④ 符号的作用域及可视性
⑤ 符号变量的存储分配信息
⑥ 符号的其它属性:数组内情向量、记录结构型的成员 信息、函数及过程的形参
符号表的实现/操作
在整个编译期间,对于符号表的操作大致可归纳 为五类:
对给定名字, 查询 名字是否已在表中;
往表中 插入 一个新的名字;
对给定名字, 访问 它的某些信息;
对给定名字, 填写 更新 它的某些信息;
删除 一个或一组无用的项。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用编程写诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值