编译原理-第二章 一个简单的语法指导编译器-2.7 符号表

符号表:

  • 定义:是一种供编译器用于保存有关源程序构造的各种信息的数据结构
  • 用途:在综合阶段用于生成目标代码
  • 存储信息:符号表的每个条目中包含与一个标识符相关的信息,比如它的字符串、类型、存储位置等
  • 构建:
    • 符号表条目是在分析阶段由词法分析器、语法分析器和语义分析器创建并使用的
    • 一个声明的作用域是指该声明起作用的那一部分程序,将为每个作用域建立一个单独的符号表来实现作用域,例如每个类可以拥有自己的符号表,它的每个域和方法都在表中有一个对应的条目
      • 标识符x的作用域:实际上指的是x的某个声明的作用域
      • 作用域:本身是指一个或多个声明起作用的程序部分
      • 最近嵌套规则:一个标识符x在最近的x声明的作用域中,即从x出现的块开始,从内到外检查各个块时找到的第一个对x的声明
    • 例:
      •   
      • 因为会有多个语句块嵌套在同一外围语句块中,所以将这些符号表链接起来可以形成一个树形结构
      • 创建一个新符号表,包含一个名为table的散列表
      • 在当前表中加入一个新的条目,散列表保存了键-值对;键是一个字符串,也可以说是一个指向字符串的引用,值是一个Symbol类的条目
      • 得到一个新的标识符的条目,从当前块的符号表开始搜索链接符号表,返回一个符号表条目或Null
  • 使用:
    • 作用:从效果上看,是将信息从声明的地方传递到实际使用的地方
    • 例:

 

参考——《编译原理(第二版)》

posted @ 2020-03-10 23:16  方知有  阅读(623)  评论(0编辑  收藏  举报