精华内容
下载资源
问答
  • 第四章 符号表&词法分析 符号表及其作用符号表的内容 存储分配&符号表的组织 四标识符的处理 五符号表的结构和存取 六词法分析 七取单词 八读标识符 九词法分析器的自动生成 十一个实例 符号表及其作用 1编译程序...
  • 编译原理=符号表的认识

    千次阅读 2018-06-23 15:23:06
    编译原理 符号表 符号表的每一项(入口)包含两大栏: 名字栏: 也称主栏,关键字栏. 信息栏: 记录相应的不同属性,分为若干子栏. 对符号表的操作: 填入名称. 查找名字. 访问信息. 填写修改信息. 删除. 对符号表...
    • 编译原理 符号表
      符号表的每一项(入口)包含两大栏:
      名字栏: 也称主栏,关键字栏.
      信息栏: 记录相应的不同属性,分为若干子栏.
      对符号表的操作:
      填入名称.
      查找名字.
      访问信息.
      填写修改信息.
      删除.
      对符号表进行操作的时机:
      定义性出现.
      使用性出现.
      按名字的不同种属建立多张符号表,如常数表,变量名表,过程名表,…
      符号的组织方式:
      1.安排各项各栏的存储单元为固定长度.
      2.用间接方式安排各栏存储单元.
      符号表的存放次序:
      1.把每一项置于连续K存储单元中,构成一张K*N的表.
      2.把整个符号表分成m个子表,如T1,T2,T3..Tm,每个子表包含有N项.
      符号表的信息栏中登记了每个名字的有关性质:
      类型:整,实或布尔等.
      种属:简单变量,数组,过程等.
      大小:长度,即所需的存储单元字数.
      相对数:指分配给该名字的存储单元的相对地址.
      PL语言编译程序的符号表.
      1.表格的定义:
      名字表 : 登记程序中出现的各种名字及属性.
      程序体表:
      层次显示表: 描述正在处理的各种嵌套层,对程序体表进行管理.
      数组信息表
      中间代码表: 用于存放编译程序所产生的每条中间代码.
    展开全文
  • 编译原理实验查找符号表运用所学知识,选择语言、选择算法(数据结构),编程实现符号表管理程序。熟悉编译过程,训练编写程序的能力,为后续实验积累经验。
  • 编译原理讲义 符号表5.ppt
  • 编译原理符号表

    千次阅读 2019-06-20 12:24:56
    文章目录一、符号表作用是什么1. 收集符号属性2. 上下文语义的合法性检查的依据3. 作为目标代码生成阶段地址分配的依据二、符号表的组织方式1. 符号表分为几大栏,主键是什么?2. 什么是各项,各栏等长,说明利弊?...

    一、符号表的作用是什么

    1. 收集符号属性

    • 例如,编译程序分析到下述两个说明语句
    int A;
    float B[5];
    

    则在符号表中收集到关于符号A的属性是一个整型变量,关于符号B的属性是具有5个浮点型元素的一维数组。

    2. 上下文语义的合法性检查的依据

    同一个标识符可能在程序的不同地方出现,而有关该符号的属性是在这些不同情况下收集的。特别是在多趟编译及程序分段编译(在PASCAL及C中以文件为单位)的情况下,更需检查标识符属性在上下文中的一致性和合法性。通过符号表中属性记录可进行相应上下文的语义检查。

    • 例如,在一个C语言程序中出现
    int i [3,5]; //定义整型数组i
    float i[4,2]; //定义实型数组i,重定义冲突
    

    3. 作为目标代码生成阶段地址分配的依据

    每个符号变量在目标代码生成时需要确定其在存储分配的位置(主要是相对位置)。语言程序中的符号变量由它被定义的存储类别(如在C、FORTRAN语言中)或被定义的位置(如分程序结构的位置)来确定。首先要确定其被分配的区域。

    例如,在C语言中首先要确定该符号变量是分配在公共区(extern)、文件静态区(extern static)、函数静态区(函数中static)、还是函数运行时的动态区(auto)等。其次是根据变量出现的次序,(一般来说)决定该变量在某个区中所处的具体位置,这通常使用在该区域中相对区头的相对位置确定。而有关区域的标志及相对位置都是作为该变量的语义信息被收集在该变量的符号表属性中。

    二、符号表的组织方式

    1. 符号表分为几大栏,主键是什么?

    • 名字栏: 也称主栏,关键字栏.
    • 信息栏: 记录相应的不同属性,分为若干子栏

    2. 什么是各项,各栏等长,说明利弊?

    各项各栏所占存储单元的长度固定,
    可以用固定分配空间,但是会有剩余空间未使用造成浪费

    什么是间接方式安排符号表的信息?

    如果各种名字所需的信息(INFORMATION )空间长短不一,那么,我们可把 一些共同属性直接登记在符号表的信息栏中,而把某些特殊属性登记在别的 地方,并在信息栏中附设一指示器,指向存放特殊属性的地方

    三、符号表的整理、查找

    1. 顺序表;

    使用一个一维数组或多个一维数组存放符号串名字和相关性息

    • 特点:
    1. 按名字出现的先后顺序依次填入;
    2. 查找时从头到尾逐个查找;
    • 缺点: 查找很慢
    • 改进的思路:
    1. 按照编程习惯可以反序查找。
    2. 按“最新最近”访问原则形成一条指向表的链子,每次查找时都按着这条链所指的顺序查找

    2. 对半查找与二叉树;

    • 在造表时把表格中的项按名字的“大小”顺序整理排列。
    • 所谓名字的“大小”通常是指名字的内码二进制。
    • 对于经顺序化的表格的查找可用对折法。
    a. 对折法的查找方法如下:
    1. 首先把要查找的项和中项(即第[n/2]+1项)作比
      较,若相等,则宣布查找成功。
    2. 若要查找的项小于中项,则继续在1〜[n/2]的各项
      中去查找。
    3. 若要查找的项大于中项,则就到[n/2]+2〜n的各项
      中去查找。

    平均查找次数1+log2n

    b. 杂凑技术。
    1. 假定有一个足够大的区域,这个区域用来填写一张含N项的符号表。构造一个地址函数H,对任何名字,H函数的取值在0至N-1之间。即不论对此项查表或填表,都能从H函数中获得它在表中的位置。
    2. 对地址函数H有两点要求:
      1. 函数的计算要简单、高效;
      2. 函数值能比较均匀的分布在0至N-1之间。
    3. 构造函数H的办法:
    • 直接地址法、数字分析法、
    • 平方取中法、折叠法、除留余数法、随机数法
    1. 解决地址冲突的办法:
    • 开放地址法、再哈希法、
    • 链地址法、建立一个公共溢出区
    • 杂凑技术:使用一张杂凑链表通过间接方式查填符号表。

    将具有相同杂凑值符号名连成一串,便于线性查找。杂凑表是一个可容纳N个指示器值的一维数组,它的每个元素的初值全为null。符号表除了通常包含的栏外,还增设了一链接栏,他把所有持有相同杂凑值的符号名连接成一条链。

    四、名字的作用范围

    1. 什么是最近嵌套作用域原则,具体描述Pascal语言的名字是否满足最近嵌套作用域原则?

    • 最近嵌套作用域规则:
      即对每个过程指定一个唯一的编号,以便跟踪过程里的局部名字。在符号表中,表示局部名字用一个二元组: < 名字,过程编号 >对一个名字查找符号表是:只有当表项中的名字其字符逐个匹配,并且该记录相关的编号和当前所处理的过程的编号匹配时,才能确定查找成功.

    2. 嵌套结构型程序设计语言的符号表:

    1. 针对符号表设计为栈符号表,新名字出现总是从栈顶填入。为了保证从内层向外层查,查找 操作从符号表的栈顶往底部查找。TOP指向栈顶第一个可用单元,P总是指向最新子符号表首地址。
    2. 过程的嵌套层次表(display),是引入的一个显示层次关系表。其作用是为了描述过程的嵌套层次,指出当前正在活动着的各嵌套的过程(或 函数)相应的子符号表在栈符号表中的起始位置(相对地址)。
      display表本身也是一个栈,每进入一个新的过程(或函数),栈顶指针增1;每退出一个新的过程(或函数),栈顶指针减1。栈顶指针总是指向当前正在处理的最内层的过程在栈符号表中 的起始位置。
    3. 在信息栏中引入一个指针域(previous),用来链接它在同一个过程内的下一名字在表中的下标(相对位置)。每一层最后一个域名字,指针域之值为0。这样每当需要查找个新名字时,就能通过display表找出当前正在处理的最内层的过程及所有外层的子符号表在栈符号表中的位置。然后通过指针域可以找到同一个过程内的所有被说明的名字。

    五、符号表的内容

    (1)类型(整、实、双实、字符、指针等);
    (2)种属(简单变量、数组或结构体等);
    (3)长度(所需的存储单元数);
    (4)相对数(存储单元相对地址);

    展开全文
  • 用c编译的符号表,用于编译原理,里面也包含源代码
  • 编译原理——符号表习题

    千次阅读 2020-06-22 22:55:33
    编译过程中,每当识别出一个新名字,就将它加入符号表中,并且在词法分析和语法语义分析阶段会陆续填入该名字的有关信息,这些信息在编译的不同阶段都要用到。在语义分析中,符号表所登记的内容将用于语义检查和产生...

    1.符号表有什么作用?

    编译过程中,每当识别出一个新名字,就将它加入符号表中,并且在词法分析和语法语义分析阶段会陆续填入该名字的有关信息,这些信息在编译的不同阶段都要用到。在语义分析中,符号表所登记的内容将用于语义检查和产生中间代码。在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。

    2.符号表有哪些构造和查找方式?

    构造和查找符号表的方式主要有:线性查找、二叉树和杂凑技术。

    线性查找按照关键字出现的顺序填写各个项,查找时也按照顺序逐个查找。为了提高查找效率,可以按照“最新最近”访问原则将符号表构建为自适应线性表。

    基于二叉树的查找方式,将符号表构造成一颗二叉排序树,当待查名字和树根所记录的名字相等时,查找成功;如果待查名字小于树根记录的名字,则继续在左子树上查找;否则继续在右子树上查找。

    杂凑技术将符号表中的名字按照杂凑函数计算所得的值组织成杂凑表,查找时用杂凑函数计算待查名字的值,在杂凑表相应的位置查找名字的记录。

    3.

    PROGRAM P(input, output)
         const norw=13;
         var    l,k:integer;
                  word:ARRAY[1..norw]of char;
         procedure  getsym;
         var i,j:integer;
                procedure  getch(word:real);
                      begin
                       ...
                      end;{getch}
         begin
                ...
                i:=1;k:=i+j;
                ...
         end;{getsym}
         procedure block(lev,lx:integer);
              var dx,txo:integer;
              procedure enter(k:real);
                   begin
                       ...
                   end;{enter}
              procedure stat(fs:integer);
                   var i,cxl:integer;
                   procedure ex(fs:integer);
                         var  addop:real;
                         procedure term(fs:intger);
                              var  i:integer;
                                  begin
                                       ...
                                       j:=cxl;
                                       ...
                                  end;{term}
                          begin   ...end;{ex}
                   begin ...  end;{stat}
                begin ...  end;{block}
          begin ...  end;{P}
    

    1)画出扫描到getsym过程体之前的栈符号表,并要求指明DISPLAY和TOP值。(20分)

    2)画出扫描到term过程体之前的栈符号表,并要求指明DISPLAY和TOP值。 (20分)

    3)编译term的过程体时,试以该过程体中出现的变量i、cxl为例说明其查找范围的控制步骤。(10分)

    解:1)
    在这里插入图片描述
    2)
    在这里插入图片描述
    3)取得DISPLAY栈顶20,查过程term栈顶子符号表,顺Previous链,在21号单元找到i,未找到cxl;取得DISPLAY次栈顶17,查过程ex子符号表,未找到cxl;取得DISPLAY次次栈顶13,查过程stat子符号表,找到cxl。

    展开全文
  • 实现查填符号表功能,读出源程序中的标识符,并在符号表中进行查找,若存在则输出该标识符及其编号和位置;否则将其填入符号表,并分配编号,确定位置,输出标识符
  • 编译原理--符号表

    千次阅读 2020-12-02 09:33:37
    经过编译后,代码中的各种符号都被分配了地址,比将各种信息记录在符号表中,当符号在被用到时,系统去符号表里查询地址,类型等信息。 符号表用来体现作用域与可见性信息,符号表中语言符号可分为关键字符号,操作...

     

        经过编译后,代码中的各种符号都被分配了地址,并将各种信息记录在符号表中。例如:

     int var = 100; 系统先在内存上分配一块内存,地址为1004,再将变量标识符var、int关键字标识符和地址1004等信息记录到符号表中,

     int* p = &var;  系统再在内存上分配一块内存,地址为1001,再将变量标识符p、int* 关键字标识符和地址1001等信息记录到符号表中,

    当符号在被用到时,系统去符号表里查询地址,例如var,系统查询到地址是1004的位置,根据类型int 返回数值100;

                                                                                          p,系统查询到地址1001的位置,根据类型int* 返回数值1004;

                                                                                          *p,系统查询到地址1001的位置,根据类型int 返回数值100。

     

    符号表用来体现作用域可见性信息,符号表中语言符号可分为关键字符号操作符符号标识符符号,

    符号表的作用:

     1、收集符号属性;(词法分析)

    2、上下文语义的合法性检查的依据;(语法分析)

    3、作为目标代码生成阶段地址分配的依据;(语义分析)

     

    符号表中的标识符一般设置的属性项目有:

    1、符号名

    2、符号的类型

    3、符号的存储类别

    4、符号的作用域及可视性

    5、符号变量的存储分配信息

    6、 符号的其它属性

    实现符号表的常用数据结构:

    1、一般的线性表:如:数组,链表等

    2、有序表:查询较无序表快,如可以采用折半查找

    3、二叉搜索树

    4、Hash表

    开/闭作用域:


     

    展开全文
  • 2、编译原理字母符号表

    千次阅读 2018-09-11 20:53:08
    【1】 字母 &amp;amp;amp; 符号 符号串 【2】文法及其分类 文法的分类 0型文法
  • 编译原理:第10章 符号表.pdf
  • 运用所学知识,编程实现符号表管理程序。读出源程序中与C语言词法规定相一致的标识符,并在符号表中进行查找,若存在则输出该标识符及其编号和位置;否则将其填入符号表,并分配编号,确定位置,输出该标识符。输出...
  • 编译原理系列之八 符号表

    千次阅读 2018-12-25 14:32:00
    符号表用来体现作用域与可见性信息 符号表作用: ① 收集符号属性;(词法分析) ② 上下文语义的合法性检查的依据;(语法分析) ③ 作为目标代码生成阶段地址分配的依据;(语义分析) 符号表中语言符号可...
  • 符号表 -(编译原理

    万次阅读 2019-03-12 16:15:11
    符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。 符号表编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关...
  • 编译原理电子课件
  • 编译原理 第八章复习题 符号表

    千次阅读 2019-06-19 10:21:48
    编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。正确 符号表常用的操作不包括(B)。 A 查询给定的名字是否已在中 B 检查名字是否符合标识符命名的文法 C 对给定名字,往中填写或更新它的...
  • 可直接运行,原创代码,C语言,查填符号表
  • 1.什么是符号表?符号表有哪些重要作用? 2.符号表项常包括哪些部分?各描述什么? 3.符号表的组织方式有哪些?它的组织取决于哪些因素?
  • 编译原理实验 之 符号表

    千次阅读 2012-05-29 00:22:40
     编译器首先都是进行的词法分析,而词法分析的基础就是符号表.  把不同类型的数据和其操作,属性都先预留下来,后面词法分析的时候可以用到.  这次的实验只是很简单的模拟而已,所以代码比较简单,编译实验...
  • 编译原理词汇

    2013-12-15 20:25:41
    一些编译原理的专用词汇 1. 编译程序 编译程序是一种翻译程序,它将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。 2. 词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical ...
  • 编译原理第八章-符号表

    千次阅读 2019-06-13 22:44:38
    2 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。 正确 3 符号表常用的操作不包括(B )。 A 查询给定的名字是否已在中 B 检查名字是否符合标识符命名的文法 C 对给定名字,往中...
  • 编译原理结构框架8符号表管理

    千次阅读 2014-12-03 21:19:06
    重点:符号表作用,符号表的组织结构,符号表作用域。 难点:符号表的组织结构及其性能评价。 8.1符号表作用 n符号表是以名字为关键字来记录其信息的数据结构,其上支持的两个最基本操作应该是添加项和查找...
  • 编译原理及实现技术:18.语义分析_抽象地址和符号表.ppt
  • 编译原理及实现技术:19.语义分析_符号表管理_goto语句.ppt
  • 编译原理手记03-词法分析与符号表

    千次阅读 2014-07-21 19:35:28
    符号表 。 比如词法分析器解析出了一个"if",之后词法分析器就会挨个儿的查找这个"if",这时它在关键字中找到了这个"if",然后就会得出这样的结果:if是一个关键字! 同样的道理,如果解析出的一个...
  • 编译原理语法分析器,输出语句,出错处理,符号表, 实验C源程序,实验代码
  • 编译原理 符合和语法分析

    千次阅读 2018-10-30 12:29:55
    符号表和语义分析   一、语义分析的内容 1. 遇到名称 (变量名,函数名) 定义时 检查是否重定义。(redefined)   2. 遇到名称使用时 检查是否未定义。(undefined)   3. 类型检查 表达式中的运算,赋值,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,866
精华内容 41,946
关键字:

编译原理符号表的作用