资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
编译原理练习三一、填空题1编译过程中,每当扫描器识别出一个名字后,编译程序就查阅 符号表,看该名字是否在其中。如果该名字是一个新名字就将它添进 符号表 。2在语义分析阶段,符号表所登记的信息将用于 语义检查 和 产生中间代码;在目标代码生成阶段,符号表是 地址分配 的依据。3过程信息表中必须包括 过程名 、 参数信息 和 过程入口地址 。4编译程序使用 说明标识符的过程、函数或子程序的静态层次 区别标识符的作用域。5编译程序在其工作过程中使用最多的数据结构是 表 。它记录着源程序中的各种信息,以便查询和修改。在这些 表 中,尤以 符号表最为重要,它的生存期最长,使用也最频繁。6过程与过程引用中信息交换的方法是全局变量 和参数传递。7PASCAL 语言中局部变量的作用域为说明该变量的过程或函数,除去该过程或函数内部嵌套的含有同名标识符的过程或函数。8将过程的每次执行和过程的 活动记录 相对应就解决了过程递归调用所引起的问题。9形式参数和实在参数之间的对应关系通常按 它们在源程序中的位置 来确定。10对于某个压缩了的上下文无关文法,当把每个文法符号联系于一组属性,且让该文法的规则附加以 语义规则 时,称该文法为属性文法。11文法符号的属性有两种,一种称为 继承属性 ,另一种称为 综合属性 。12一个文法符号的继承属性是通过语法树中它的 兄弟结点和父 结点的相应文法符号的属性来计算的,而综合属性是通过语法树中它的 子 结点的属性之值来计算的。13语法制导的编译程序能同时进行 语法 分析和语义 分析。14在 PASCAL 中,由于允许用户动态申请与释放内存空间,所以必须采用 堆式 存储分配技术。15静态区的分配对象是 全程变量和不改变其值的对象 。静态区分配的特点是 其访问地址可采用绝对地址 。二、选择题(单项和多项)1在编译过程中,符号表的主要作用是 c d 。a. 帮助错误处理b. 辅助语法错误的检查c. 辅助语义的(即上下文有关的)正确性检查d. 辅助代码生成e. 辅助对目标代码的优化2PASCAL 中过程说明的局部量地址分配在 b 。a. 调用者的数据区中b. 被调用者的数据区中c. 主程序的数据区中d. 公共数据区中3与 PASCAL 语言存储分配方式相似的语言是 a 。a.C 语言 b.BASIC 语言 c.FORTRAN-774运行阶段的存储组织与管理的目的是 b c 。a. 提高编译程序的运行速度b. 提高目标程序的运行速度c. 为运行阶段的存储分配作准备5动态存储分配时,可以采用的分配方法有: a b 。a. 以过程为单位的栈式动态存储分配b. 堆存储分配c. 最佳分配方法6过程调用时,参数的传递方法通常有 a b c d 。a.传值 b.传地址 c.传结果 d.传名7过程调用的参数传递中,将出现的任一形参都代之以相应的实参的为 b ,过程体对形参的任何引用或赋值都被处理成对形式单元的间接访问的为 c ,像使用局部变量一样使用形式单元的为 a 。a.传值 b. 传名 c.传地址 d.传结果8FORTRAN 编译中存储分配 a 。a.静态存储分配 b. 动态存储分配9在编译方法中,动态存储分配的含义是什么? a a. 在运行阶段对源程序中的量进行分配b. 在编译阶段对源程序中的量进行分配c. 在编译阶段对源程序中的量进行分配,在运行时这些量的地址可以根据需要改变d. 以上都不正确9名字就是标识符,标识符就是名字。 b a.正确 b.不正确10在编译时有传名功能的语言是 a 。a.ALGOL 60 b.BASIC c.FORTRAN d.COBOL三、在编译过程中为什么要建立符号表?符号表应包括那些内容?解答:因为在编译的过程中,始终涉及到对一些语法符号的处理,故要用到这些语法符号的相关属性。为了在需要的时候能找到这些语法成分及其相关属性,必须使用一些表格保存这些语法成分及其属性,这些表格就是符号表。符号表应包括语法符号的名字和相关的属性,不同语法符号在符号表中存放的信息不同。四、试写出下面类型的内部表示:(假设简单类型的值一律占一个单元)array 1.5 of array 1.10 of record i: integer;b: booleanend五、 当前层数为 L,可用偏移量 Offset 值为 101,且有下面程序,写出本层符号表的内容。const m=333;n=444;type at=array1.10 of real;rt=record i,j:integer end;VAR a,b:at; x,y:real;100 arrayTy 1 subTy intPtr 1 510 arrayTy 1 subTy intPtr 1 102 recorTy i intPtr 0 b boolPtr 1 六、试写出标识符表的平分查表算法略(可参考数据结构中的知识)七、试写出二叉式局部符号表的管理程序(创建,填表,查表,撤消)略八、简述静态存储分配的基本思想。静态存储分配对语言有何要求?解答:静态存储分配指在编译阶段对源程序中的量分配以固定的单元,运行时始终不变。静态存储分配对语言的要求如下:1程序中的每一个数据对象的大小在编译阶段能够确定(即不允许有可变体积的数据,如可变数组等)2程序运行过程中的给定时刻,每一个数据对象只允许存在一个实例(即不允许有递归等)3所有数据的性质是完全确定的(即不允许有需在运行时动态确定性质的名字)满足上述特点的语言,其程序所需要的数据空间总量在编译时是完全确定的。九、试比较静态存储分配方案和动态存储分配方案解答:静态存储分配指在编译阶段对源程序中的量分配以固定的单元,运行时始终不变。动态存储分配在运行阶段动态地为源程序中的量分配单元,但并不是所有工作aPtr varKind dir L 103m intPtr consKind 333intPtr consKind 444naPtr typeKind falseatrecordPtr typeKind falsertintPtr fieldKind 101 recordPtriintPtr fieldKind 102 recordPtrjaaPtr varKind dir L 113brealPtr varKind dir L 123xrealPtr varKind dir L 124y全部放在运行时刻做,编译程序在编译阶段要为运行阶段设计好存储组织形式。编译程序会在编译阶段为每一个数据项安排好它在数据区中的相对位置。十、一个活动记录包括哪些信息?各信息的作用?何时填写它们?解答:为了管理过程在依次执行中所需要的信息,使用一个连续的存储块记录表示该活动的相关信息,称其为活动记录。当过程返回时,当前活动记录一般包含如下内容:1 连接数据2 返回地址3 动态链:指向调用该过程前的运行活动记录地址的指针4 静态链:指向静态直接外层最新活动记录地址的指针,用来访问非局部数据。5 形式单元:存放相应的实在参数的地址或值6 局部数据:局部变量、内情向量、临时工作单元十一、表达式文法如下:EnE(E)EE+E试给出定义表达式值的属性文法。解答:参考 P245 内容
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号