05-编译原理课程测试第五套卷(附解析)-编译原理试题-中国科技大学.docVIP

05-编译原理课程测试第五套卷(附解析)-编译原理试题-中国科技大学.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
05-编译原理课程测试第五套卷(附解析)-编译原理试题-中国科技大学

编译原理课程测试第五套卷(附解析) 1、(10分)用子集构造法给出由下面的NFA得到的DFA的转换表 2、(20分)(1)通过构造识别活前缀的DFA和构造分析表,来证明文法E ( E + id | id是SLR(1)文法。 (2)下面左右两个文法都和(1)的文法等价 E ( E + M id | id E ( M E + id | id M ( ( M ( ( 请指出其中有几个文法不是LR(1)文法,并给出它们不是LR(1)文法的理由。 3、(10分)下面是C语言两个函数f和g的概略(它们不再有其它的局部变量): int f (int x) { int i; …return i +1; … } int g (int y) {int j; … f (j +1); … } 请按照教材上例6.5中图6.13的形式,画出函数g调用f,f的函数体正在执行时,活动记录栈的内容及相关信息,并按图6.12左侧箭头方式画出控制链。假定函数返回值是通过寄存器传递的。 4、(10分)C语言函数f的定义如下: int f (int x, int (py, int ((ppz) { ((ppz +=1; (py +=2; x +=3; return x + (py + ((ppz; } 变量a是指向b的指针,变量b是指向c的指针,c是整型变量并且当前值是4。那么执行f (c, b, a)的返回值是多少? 5、(10分)Java语言的实现通常把对象和数组都分配在堆上,把指向它们的指针分配在栈上,依靠运行时的垃圾收集器来回收堆上那些从栈不可达的空间(垃圾)。这种方式提高了语言的安全性,但是增加了运行开销。编译时能否采用一些技术,以降低垃圾收集所占运行开销?概述你的方案。 6、(5分)在面向对象语言中,编译器给每个对象分配空间的第1个域存放虚方法表的指针。是否可以把虚方法表指针作为最后1个域而不是第1个域?请简要说明理由。 7、(15分)考虑一个简单语言,其中所有的变量都是整型(不需要显式声明),并且仅包含赋值语句、读语句和写语句。下面的产生式定义了该语言的语法(其中lit表示整型常量;OP的产生式没有给出,因为它和下面讨论的问题无关)。 Program ( StmtList StmtList ( Stmt StmtList | Stmt Stmt ( id := Exp; | read (id ); | write ( Exp ); Exp ( id | lit | Exp OP Exp 我们把不影响write语句输出值的赋值(包括通过read语句来赋值)称为无用赋值,写一个语法指导定义,它确定一个程序中出现过赋予无用值的变量集合(不需要知道无用赋值的位置)和没有置初值的变量集合(不影响write语句输出值的未置初值变量不在考虑之中)。 非终结符StmtList和Stmt用下面3个属性(你根据需要来定义其它文法符号的属性): (1)uses_in:在本语句表或语句入口点的引用变量集合,它们的值影响在该程序点后的输出。 (2)uses_out:在本语句表或语句出口点的引用变量集合,它们的值影响在该程序点后的输出。 (3)useless:本语句表或语句中出现的无用赋值变量集合。 8、(10分)一个C文件array.c仅有下面两行代码: char a[ ][4] = { “123”, “456”}; char (p[ ] = { “123”, “456”}; 从编译生成的下列汇编代码可以看出对数组a和指针p的存储分配是不同的。试依据这里的存储分配,为置了初值后的数组a和指针p写出类型表达式。 .file “array.c” .globl a .data .type a, @object .size a, 8 a: .string “123” .string “456” .section .rodata .LC0: .string “123” .LC1: .string “456” .globl p .data .align 4 .type p, @object .size p, 8 p: .long .LC0 .long .LC1 .section .note.GNU-stack, “”, @progbits .ident “GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)” 9、(10分)两个C文件long.c和short.c的内容分别是 long i = 32768(

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档