产品分类

新闻资讯

联系我们

产品展示

当前位置:蚂蚁彩票|Wellcome > 产品展示 >

2014-4-25 编译技术 14 构造符号表最简单和最容易的

2019-07-21 18:41

你是哪里做不出来?一个深灰色的梯形,一个长蓝色矩形,一个浅灰色矩形,再输入文字,一点难度都没有o(╯□╰)o!

呼伦贝尔市插画培训学校,呼伦贝尔最好的绘画学习平台!轻微课有很多来自呼伦贝尔市的学生,他们都特别喜欢画插画,一直都想要画出自己心中的插画人物,但是自学往往又太慢,很多同学报名了轻微课插画培训学校的课程,快速的提升了插画学习效率。

授课:胡静2014-4-25 编译技术 语法分析程序语义分析程序 目标代码生成程序 词法分析程序 中间代码生成程序 代码优化程序 编译的前端(Front End) 编译的后端 (Back End) 2014-4-25 编译技术 概述符号表的组织和作用 符号表的整理和查找 名字的作用域范围 非分程序结构语言的符号表组织 分程序结构语言的符号表组织 符号表的内容 2014-4-25 编译技术 什么是符号表?编译过程中,编译程序需要不断汇集 汇集和反复查证 反复查证出现 在源程序中各种名字的属性和特征等有关信息。这些 信息通常记录在一张或几张符号表 一张或几张符号表中。 符号表的每一项包含两部分: 名字(标识符): 程序名、过程名、函数名、用户定义 类型名、变量名、常量名、枚举值名、标号名等。 特性信息: 上述名字的种类、类型、维数、参数个数、 数值及目标地址(存储单元地址)等。 符号表的创建 和查找 为什么要几张符 号表?说明了什 2014-4-25编译技术 (2)建表和查表的必要性(符号表在编译过程中的作用)源程序中变量要先声明,然后才能引用。 用户通过声明语句 声明语句,声明各种名字,并给出它们的类型、维数 等信息,编译程序在处理这些声明语句时,应该将声明中的名 字及其信息登录 登录到符号表中,同时编译程序还要给变量分配存 储单元,而存储单元地址也必须登录 登录在符号表中。 当编译程序编译到引用 引用所声明的变量时(赋值或引用其值),要 进行语法语义正确性检查(类型是否符合要求)和生成相应的目 标程序,这就需要查符号表以取得相关信息。 符号表何时建立? 符号表的表项合适 填写? 在编译何阶段对符号 表内容进行查找? 2014-4-25 编译技术 2014-4-25编译技术 (3)有关符号表的操作:填表和查表填表:当分析到程序中的说明或定义语句时,应将说明或定义 的名字,以及与之有关的信息填入符号表中。 例:Procedure 2014-4-25编译技术 符号表的基本结构“名字”域: 存放名字,一般为标识符的符号串,也可为指向标识 符字符串的指针。 “信息”域: 可包括多个子域, 分别表示标识符的有关信息, 名字栏(Name) 信息栏(Information) 第一项(入口1) 第二项(入口2) 第N项(入口N) 2014-4-25编译技术 名字(标识符)的种类:简单变量、函数、过程、数组、标号、参数等类型:如整型、浮点型、字符型、指针等 性质:变量形参、值形参等 值:常量名所代表的数值 地址:变量所分配单元的首址或地址位移 大小:所占的字节数 作用域的嵌套层次: 对于数组: 维数、上下界值、计算下标变量地址所用的信息(数组信息向 量)以及数组元素类型等。 对于记录(结构、联合):域的个数,每个域的域名、地址位移、类型 对于过程或函数:形参个数、所在层次、函数返回值类型、局部变量所占空间大小等。 对于指针:所指对象类型等。 2014-4-25 编译技术 10 在整个编译期间,对符号表的操作大致可以归纳为 对给定的名字,查询此名是否已在表中;往表中填入一个新的名字 对给定名字,访问它的某些信息; 对给定名字,往表中填写或更新它的某些信息 删除一个或一组无用的项。 2014-4-25 编译技术 11 1.统一符号表:不论什么名字都填入统一格式的符号 符号表表项应按信息量最大的名字设计,填表、查表比较方便, 结构简单, 但是浪费大量空间。 2.对于不同种类的名字分别建立各种符号表 节省空间, 但是填表和查表不方便。 3.折中办法:大部分共同信息组成统一格式的符号 表,特殊信息另设附表,两者用指针连接。 1.表里面会有大量的空白表项 2.每个字段都要取最大长度, 使得空间被浪费 另一种方法是将符号表的每个 表项重新拆成新的表。 2014-4-25 编译技术 12 2014-4-25 编译技术 13 符号表的初始化: 在编译程序刚开始时,符号表或者是空的,或者预先 存放了一些保留字和标准函数名的有关项。 在编译的其他阶段,主要是对符号表进行查填的操 线性查找——方法最简单,但效率低二叉树——查找效率高,但实现上略显困难 Hash表——效率最高,可实现比较复杂而且要消耗一 些额外的存储空间。 2014-4-25 编译技术 14 构造符号表最简单和最容易的办法就是按符号出现 的顺序填写各个项。 线性表中每一项的先后顺序是按先来者先填的原则安 排的,编译程序不做任何排序的工作。 显式说明的程序设计语言,根据名字在说明部分出现 的顺序填入表中(表尾) 隐式说明的程序设计语言,根据各名字首次引用的先 后顺序填入表中。 当需要查找某个名字时,就从该表的第一项开始顺序 查找。 查表操作的平均长度为(n+1)/2 线性表的效率可以通过使用“最 新最近”访问链来进行提高: 1.每次查表时都按照这条链所指 的顺序,一旦查到之后就改造这 条链,使得连头指向刚才找到的 那个项。 这个新项。——————自适应线 在造表时把表格中的项按照名字的“大小”顺序整理排列。 这种经顺序整理了的表格的查找可以用对折法。 查表操作的平均长度Log 对一遍扫描的编译程序来说,符号表是边填边引用的,这意味着每填进一个新项都需要做顺序化的整理工作。 折中办法是把符号表组织成一棵二叉树。 查找效率比对折查找要低一些,但顺序化时间要少很多 需要额外的存储空间。 2014-4-25 编译技术 16 Hash 对于表格处理来说,根本问题在于如何保证查表与填表两方 面工作都能高效的进行。 线性表:填表快,查表慢; 对折法:填表慢,查表快。 设有一个足够大的区域,可以填写一张含N项的符号表 构造一个地址函数H,对任何名字SYM,H(SYM)取值于0至 N-1之间。 对于地址函数H,其计算要简单、高效 函数值能比较均匀的分布在0至N-1之间。 把所有取值相同的项串成一串,便于线 非分程序结构语言: 每个可独立进行编译的程序单元 是一个不包含有子模块的单一模块,如FORTRAN 语言。 2014-4-25 编译技术 19 标识符的作用域 全局:子程序名,函数名和公共区名。 局部: 程序单元中定义的变量。 符号表的组织: 2014-4-25 编译技术 20 基本处理办法: 1.子程序、函数名和公共区名填入全局符号表。 2.在子程序(函数)声明部分读到标识符,造局部符号 3.在语句部分读到标识符,查表:2014-4-25 编译技术 21 基本处理办法: 4.程序单元结束: 释放该程序单元的局部符号表。 程序编译完成:释放全部符号表。 2014-4-25 编译技术 22 分程序结构语言:模块内可嵌入子模块 标识符的作用域:标识符局部于所定义的模块(最小模块) 模块中所定义的标识符作用域是定义该标识符的子程序 2014-4-25 编译技术 23 分程序结构语言:模块内可嵌入子模块 标识符的作用域:标识符局部于所定义的模块(最小模块) 过程或函数说明中定义的标识符(包括形参)其作用域为本过程体。 2014-4-25 编译技术 24 分程序结构语言:模块内可嵌入子模块 标识符的作用域:标识符局部于所定义的模块(最小模块) 循环语句中定义的标识符,其作用域为该循环语句。 不能从循环体外转到循环体内。循环语句应看作一层 2014-4-25 编译技术 25 符号表的处理办法:建查符号表均要遵循标识符的 作用域规定进行。 建表:不能重复,不能遗漏 查表:按标识符作用域 2014-4-25 编译技术 26 符号表的处理方法: 1.在程序声明部分读到标识符时(声明性出现),建表: 2.在语句中读到标识符(引用性出现),查表: 2014-4-25 编译技术 27 符号表的处理方法: 3.标准标识符的处理 主要是语言定义的一些标准过程和函数的名字,它们是 标识符的子集。如sin con abs…. 特点: 设计编译程序时,标准名字及其数目已知处理方法: 预先将标准名填入名字表中最外层的 符号表 2014-4-25 编译技术 28 2014-4-25 编译技术 29 2014-4-25 编译技术 30 2014-4-25 编译技术 31 2014-4-25 编译技术 32 当过程和函数体编译完成后,应将与之相应的参数 名和局部变量名以及后者的特性信息从符号表中删 2014-4-25编译技术 33 Thanks yourtime! Thanks yourtime! Questions AnswersQuestions?

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

友情链接 菲达彩票__安全购彩 菲达彩票__欢迎您 小白彩票__欢迎您 小白彩票_—Wellcome 599彩票—Wellcome 599彩票—_安全购彩 快易彩票——Wellcome 快易彩票——_安全购彩 乐仑彩票_—Wellcome 乐仑彩票__欢迎您 乐猫彩票_—Wellcome

地址:北京市西城区车公庄大街9号院 版权所有:Copyright 2015-19 by hengcuan.com All rights reserved. 蚂蚁彩票|Wellcome 版权所有

技术支持:蚂蚁彩票 陕ICP备12009040号

扫一扫,加关注