当编译程序扫描上述源程序时,生成栈式符号表,试就此符号表回答以下问题: (1)画出扫描到 getsym 过程体之前的栈符号表,并要求指明 DISPLAY 和 TOP 值。

时间: 2024-03-17 20:47:43 浏览: 18
词法分析器的主要任务是将源程序的字符流转换成一个个单词,并将其分类为对应的记号。在这个 Pascal 程序中,词法分析器需要将源程序中的关键字(如 PROGRAM、VAR、BEGIN、END 等)、标识符(如 P、input、output 等)、常量(如 norw、13 等)以及运算符和界符(如 +、-、*、/、;、:、,、(、) 等)等转换成对应的记号,并将这些记号传递给语法分析器进行后续处理。 在编译过程中,栈式符号表是用于保存程序中定义的变量、常量、过程等信息的一种数据结构。在扫描过程中,编译器会按照作用域嵌套的顺序将符号表压入栈中,并在离开作用域时将符号表弹出。这样做可以保证在查找符号时,先在当前作用域的符号表中查找,如果没有找到,则继续在上一层作用域的符号表中查找,直到找到为止。 根据您提供的程序代码,我画出了扫描到 getsym 过程体之前的栈符号表。假设在程序开始执行时,符号表为空,则 DISPLAY 数组的初始值为 nil,TOP 值也为 nil。当程序执行到 VAR 关键字时,会新建一个符号表,并将其压入栈中,同时将 DISPLAY 的栈顶元素指向该符号表,TOP 值也指向该符号表。在程序执行到 getsym 过程体之前,符号表的状态如下所示: ``` +-------+ +-------+ +-------+ | k | | i | | norw | +-------+ +-------+ +-------+ | 1 | | | | 13 | +-------+ +-------+ +-------+ | VAR | | VAR | | CONST| +-------+ +-------+ +-------+ |PROGAM | | | | | +-------+ +-------+ +-------+ | DISPLAY --> | DISPLAY --> | DISPLAY --> nil +-------+ +-------+ +-------+ | TOP --> | TOP --> | TOP --> Symbol table of CONST +-------+ +-------+ +-------+ ``` 其中,每个符号表中的符号被表示为一个键值对,键为符号的名称,值为符号的类型和属性等信息。在上面的符号表中,k、i、norw、13、VAR 和 CONST 都是符号的名称,它们的类型和属性等信息被省略了。在符号表中,k、i 和 norw 是变量名,它们的值分别为 1 和 13;VAR 和 CONST 是关键字,表示变量和常量的定义;PROGRAM 是关键字,表示程序的定义。 在这个符号表中,DISPLAY 数组的栈顶元素指向的是 VAR 关键字所对应的符号表,TOP 值也指向该符号表。在扫描过程中,如果需要查找一个符号,编译器会从 DISPLAY 的栈顶开始逐个查找符号表,直到在某个符号表中找到了该符号为止。因此,在这个符号表中,如果需要查找变量 k,就可以从 TOP 指针指向的符号表中查找到它的定义。如果需要查找常量 norw,就需要先从 DISPLAY 数组中查找到 VAR 关键字所对应的符号表,然后在该符号表中查找常量 norw 的定义。

相关推荐

最新推荐

recommend-type

表驱动LL(1)语法分析程序.docx

(1)根据LL(1)分析法编写一个语法分析程序,输入文法的FIRST(α)和FOLLOW(U)集,由程序自动生成文法的预测分析表。 (2)所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为LL(1)文法。 (3)对输入的...
recommend-type

查填符号表:掌握词法扫描,查填符号表

查填符号表:熟悉c语言编译环境;掌握词法扫描,查填符号表,好的资源大家分享!!!!
recommend-type

编译原理的语法分析——LL(1)分析表的实现.docx

LL(1)语法分析程序、自顶向下语法分析判断LL(1)文法的方法、文法等价变换、LL(1)分析表的构造、对某一输入串的分析过程的理解,本次实验的LL(1)文法为表达式文法: E→E+T | T T→T*F | F F→i | (E)
recommend-type

编译原理CP lab实验报告.doc

在 Engintime CP lab上做的编译原理实验,这个平台做的实验设计的很好,这个实验报告里一共包括两个实验报告,一个是从正则表达式到NFA。另一个是使用Lex自动生成扫描程序
recommend-type

IntelliJ IDEA编译项目报错 "xxx包不存在" 或 "找不到符号"

主要介绍了IntelliJ IDEA编译项目报错 "xxx包不存在" 或 "找不到符号" ,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。