【编译原理和技术试卷】2008.docVIP

  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文档。上传文档
查看更多
【编译原理和技术试卷】2008

中 国 科 学 技 术 大 学 2007-2008学年第二学期考试试卷(A) 考试科目:编译原理和技术 得分: 学生所在系: 姓名: 学号: 1、(10分)用正规式表示字母表{a, b}上a不会相邻的所有句子的集合,并给出接受该语言的最简DFA。 2、(15分)(1)为下面文法构造规范LR(1)分析表,画出像教材上图3.19这样的状态转换图就可以了。 S ( V = E | E V ( ( E | id E ( V (2)上述状态转换图有同心项目集吗?若有,合并同心项目集后是否会出现动作冲突? 3、(10分)为字母表{0, 1}上的回文数集合写一个LR文法;若你认为该语言不存在LR文法,则说明理由。(注:一个数字串,从左向右读和从右向左读都一样时,称它为回文数。) 4、(10分)下面的翻译方案计算0和1的串的值(解释为二进制的正整数)。 B ( B1 0 { B.val = B1.val ( 2 } B ( B1 1 { B.val = B1.val ( 2 + 1 } B ( 1 { B.val = 1 } 重写该翻译方案,使得它基础文法没有左递归,并且为整个输入串计算的B.val和原来的一样。 5、(10分)若布尔表达式有异或xor(exclusive-or)运算(异或运算的结果为真,当且仅当它的一个运算对象为真),请按照教材上表7.4的风格给出异或运算的语义规则。(备注:该题目设计得不好。) 6、(5分)在面向对象语言中,编译器给每个类建立虚方法表,如教材上图11.3和图11.4那样。请简要说明,为什么编译器给每个类仅建立虚方法表,而不是建立所有方法的方法表。 7、(15分)C语言和Java语言的数组声明和数组元素引用的语法形式同教材上7.3.3节和7.3.4节讨论的不一样,例如float A[10][20]和A[i+1][j-1],并且每一维的下界都是0。若适应这种情况的赋值语句的文法如下: S ( L := E E ( E + E | (E ) | L L ( L [E ] | id (1)重新设计教材上7.3.3节数组元素的地址计算公式,以方便编译器产生数组元素地址计算的中间代码。不要忘记每一维的下界都是0。 (2)重新设计数组元素地址计算的翻译方案。只需写出产生式L ( L [E ] | id的翻译方案,但要能和7.3.4节中产生式S ( L := E和E ( E + E | (E ) | L的翻译方案衔接。若翻译方案中引入新的函数调用,要解释这些函数的含义。 8、(15分)一个C语言的文件如下: func(long i, long j, long k) { k = (i + j) – (i – j – f(k)); } 经GCC 3.4.6编译器编译得到的汇编代码分两列在下面给出: .file “call.c” | movl 16(%ebp), %eax .text | movl %eax, (%esp) .globl func | call f .type func, @function | subl %eax, %ebx func: | movl %ebx, %eax pushl %ebp | subl %eax, %esi movl $esp, %ebp | movl %esi, %eax pushl %esi | movl %eax, 16(%ebp) pushl %ebx | popl %ebx movl 12(%ebp), %eax | popl %esi movl 8(%ebp), %esi | popl %ebp addl %eax, %esi | ret movl 12(%ebp), %edx | .size func, .-func movl 8(%ebp), %eax | .section .note.GNU-stack,””,@progbits movl %eax, %ebx | .ident “GCC: (GNU) 3.4.6” subl %edx, %ebx 请根据上述汇编代码,并参考教材上例6.5和第6章到第9章习题中的汇编代码进行总结:为适应函数调用引起的跨函数执行,该编译器在寄存器的值的保护方面有些什么约定? 9、(10分)下面左边的函数被GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)优化成右边的代码。若你认为该优化结果不对或该优化不合理,则阐述你的理由。若你认

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档