区块链技术博客
www.b2bchain.cn

编译原理学习笔记 6.1 符号表管理技术概述

这篇文章主要介绍了编译原理学习笔记 6.1 符号表管理技术概述的讲解,通过具体代码实例进行19296 讲解,并且分析了编译原理学习笔记 6.1 符号表管理技术概述的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=19296

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

前言

参考课上PPT内容。 该学习笔记目前仅打算个人使用。
后续会进一步整理,包括添加笔记内容,标明参考资料。

更新中。。。

跳过目录

目录

  • 一、符号表
    • 符号表建立时间
  • 二、符号表在编译过程中的作用
  • 三、符号表的操作
    • 填表
    • 查表
    • 定位和重定位

一、符号表

  • 编译过程中,编译程序用来记录源程序中各种名字特性信息
  • 也称为名字特性表

名字

  • 程序名、过程名、函数名、用户定义类型名、变量名、常量名、枚举值名、标号名等。

特性信息

  • 上述名字的种类、类型、维数、参数个数及目标地址(存储单元地址)等。

符号表建立时间

多遍编译程序:
编译原理学习笔记 6.1 符号表管理技术概述

  • 词法分析:创建符号表,填入标识符
  • 语法分析:不对表进行处理
  • 语义分析和代码生成:填入符号的其他属性

合并遍编译程序:
编译原理学习笔记 6.1 符号表管理技术概述

  • 好处:属性能立即填入表中

二、符号表在编译过程中的作用

建表和查表的必要性:

源程序中变量要先声明,然后才能引用。用户通过声明语句,声明各种名字,并给出它们的类型维数等信息。

编译程序在遇到这些声明语句时,应该将声明中的名字以及信息登录到符号表中,同时编译程序还要给变量分配存储单元

存储单元地址也必须登录在符号表中。

当编译程序编译到引用所声明的变量时(赋值或引用其值),要进行语法语义正确性检查(类型是否符合要求等)和生成相应的目标程序,这就需要查符号表以取得相关信息。

例:

int x, a, b; ... ... ... L: x := a + b; ... 

建表,分配存贮
编译原理学习笔记 6.1 符号表管理技术概述

  1. 语法分析和语义分析

    • 说明语句、赋值语句的语法规则;
    • 上下文有关分析:是否声明;
    • 类型一致性检查。
  2. 生成目标代码

    LOAD a的地址
    ADD b的地址
    STO x的地址

三、符号表的操作

  • 填表(登录)
  • 查表(检索)

填表

当分析到程序中的说明或定义语句时,应将说明或定义的名字,以及与之有关的信息填入符号表中。

注:说明语句(声明语句)和定义语句的区别:声明语句不分配空间,定义语句分配实际空间

例:Procedure P( )

查表

  1. 填表前查表,检查在程序的同一作用域内名字是否重复定义

  2. 检查名字的种类是否与说明一致;

  3. 对于强类型语言,要检查表达式中各变量的类型是否一致;

  4. 生成目标指令时,要取得所需要的地址

    ……

定位和重定位

  • 用于分程序结构的语言

  • 定位:set

    分程序的开始

  • 重定位:reset

    分程序的结束

本文转自互联网,侵权联系删除编译原理学习笔记 6.1 符号表管理技术概述

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 编译原理学习笔记 6.1 符号表管理技术概述
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们