编译原理试题(2009-2010-1).doc_第1页
编译原理试题(2009-2010-1).doc_第2页
编译原理试题(2009-2010-1).doc_第3页
编译原理试题(2009-2010-1).doc_第4页
编译原理试题(2009-2010-1).doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理试题A1名词解释短语LL(1)文法语法分析无环路有向图(DAG)语法制导翻译2 Pascal语言无符号数的正规定义如下:num digit+ (.digit+)? (E(+|-)? digit+)?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。3下面两个文法中哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有移进归约冲突的规范的LR(1)项目集。S aAcS aAcA bbA | bA bAb | b4构造下面文法的LL(1)分析表。D TLT int | realL id RR , id R | e5 C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。6把表达式-(a+b)*(c+d)+(a+b+c)翻译成三元式。7为下面文法添加语义规则(或叫动作子程序),输出S产生的二进制数的值,如输入是101时,输出5。S SS S B | BB 0 | 18一个C语言的函数如下:func(c,l)char c;long l; func(c,l);在X86/Linux机器上编译生成的汇编代码如下:.fileparameter.c.version01.01gcc2_compiled.:.text.align 4.globl func.type func,functionfunc:pushl %ebp 将老的基地址指针压栈movl %esp,%ebp 将当前栈顶指针作为基地址指针subl $4,%esp 分配空间movl 8(%ebp),%eaxmovb %al,-1(%ebp)movl 12(%ebp),%eaxpushl %eaxmovsbl -1(%ebp),%eaxpushl %eaxcall funcaddl $8,%esp.L1:leave 和下一条指令一起完成恢复老的基地址指针,将栈顶ret 指针恢复到调用前参数压栈后的位置,并返回调用者.Lfe1:.size func,.Lfe1-func.identGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)(a) 请指出对应源程序第5行的函数调用func(c,l)的汇编指令是哪几条。(b) 请说明字符型参数和长整型参数在参数传递和存储分配方面有什么区别。(小于长整型size的整型参数的处理方式和字符型参数的处理方式是一样的。)9程序的文法如下:P DD D ; D | id : T | proc id ; D ; S(1)写一个语法制导定义,打印该程序一共声明了多少个id。(2)写一个翻译方案,打印该程序每个变量id的嵌套深度。编译原理试题B1名词解释句柄LR(1)文法无环路有向图(DAG)语法制导翻译局部优化2某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。3下面两个文法中哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有移进归约冲突的规范的LR(1)项目集。S aAcS aAcA bbA | bA bAb | b4程序的文法如下:P DD D ; D | id : T | proc id ; D ; S(1)写一个语法制导定义,打印该程序一共声明了多少个id。(2)写一个翻译方案,打印该程序每个变量id的嵌套深度。5在PASCAL语言中,简单类型的变量的声明例举如下:m, n : integerp, q, r : real为这样的声明写一个LR(1)文法(为简单起见,变量标识符都用id表示),并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。6下面程序在SUN工作站上运行时陷入死循环,试说明原因。如果将第8行的long *p改成short *p,并且将第23行long k 改成short k后,loop中的循环体执行一次便停止了。试说明原因。main()addr();loop();long *p;loop()long i,j;j=0;for(i=0;i10;i+)(*p)-;j+;addr()long k;k=0;p=&k;7一个C语言函数如下:main()int i,j,k;i=5;j=1;while(j100)k=i+1;j=j+k;经优化编译后,生成的代码如下:.file“optimize.c” gcc2_compiled.:_gnu_compiled_c:.text.align 2.globl _func.type_func,function _func:pushl %ebpmovl %esp,%ebpmovl $1,%eaxmovl $6,%edx.align 2,0x90L4:addl %edx,%eaxcmpl $99,%eaxjle L4leaveretLfe1:.size_func,Lfe1-_func试说明编译器对这个程序作了哪些种类的优化(只需要说复写传播、删除公共子表达式等,不需要说怎样完成这些优化的)。8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论