• 编译原理复习——符号表


    符号表作为编译系统的重要组成部分,贯穿于 法分析 检查 语义处理 的编译全过程
    在编译程序中符号表用来存放源程序中出现的 关名字的属性信息 ,这些信息集中反映了 名字的
    语义特征属性
    符号表总体结构的设计和实现下列因素有关
    源语言的复杂性(包括词法结构、语法结构的复杂性)
    对于编译系统在时间效率和空间效率方面的要求
    符号表中所登记的信息在编译不同阶段都要用到
    例如:在 词法分析 语法分析 过程中不断更新表中的 信息
    在语义分析之前已经创建符号表,语义分析阶段写入 名字属性信息
    另外,在词法分析到代码生成的 各阶段 则会从表 中获取不同的属性信息
    符号表的功能主要归结为以下几个方面:
    ① 收集符号属性
    编译程序扫描说明部分收集有关标识符的属性, 并在符号表中建立符号的相应属性信息
    ② 作为上下文语义的合法性检查的依据
    通过符号表中属性记录可进行相应 上下文的语义检查
    ③ 作为目标代码生成阶段地址分配的依据
    符号表的组成
    符号表包括 名字栏 信息栏 (可有多列)。
    信息栏 包含许多子栏和标志位,用 来记录相应名字和各种属性
    名字栏 也称主栏。主栏的内容称为 关键字 (key  word)
    符号表的符号常见属性
    虽然不同的语言定义的标识符属性不尽相同,下列 几种属性通常都是需要的:
    符号名
    ② 符号的类型
    符号的存储类别
    ④ 符号的作用域及可视性
    ⑤ 符号变量的存储分配信息
    ⑥ 符号的其它属性:数组内情向量、记录结构型的成员 信息、函数及过程的形参
    符号表的实现/操作
    在整个编译期间,对于符号表的操作大致可归纳 为五类:
    对给定名字, 查询 名字是否已在表中;
    往表中 插入 一个新的名字;
    对给定名字, 访问 它的某些信息;
    对给定名字, 填写 更新 它的某些信息;
    删除 一个或一组无用的项。
  • 相关阅读:
    MySQL 事务
    华为云Astro的前世今生:用7年时间革新低代码开发观念
    CSS 3之美化菜单
    【网页前端】CSS常用布局之定位
    单链表的相关操作(初阶)
    消息对话框
    Java如何使用反射创建动态代理(JDK原生)呢?
    图书管理系统(java版)
    Oracle/PLSQL: Lag Function
    【LeetCode回溯算法#08】递增子序列,巩固回溯算法中的去重问题
  • 原文地址:https://blog.csdn.net/m0_53345417/article/details/127933912