ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:68.45KB ,
资源ID:7019116      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7019116.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(精品编译原理复习题集docx.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

精品编译原理复习题集docx.docx

1、精品编译原理复习题集docx编译原理复习题集1 名词解释 短语 句柄 文法 上下文无关文法LL (1)文法LR (1)文法语法分析无环路有向图(DAG)后缀式语法制导翻译遍局部优化词法分析语法分析语义分析源语言源程序目标语言中间语言(中间表示)2.叙述下面的正规式描述的语言,并画岀接受该语言的最简DFA的状态转换图。(1 |01 )*0*3.Pascal语言无符号数的正规定义如下:num digit (. digit) ? (E(+|-)? digit) ?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。4.画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。

2、5.用状态转换图表示接收(a|b)*aa的确定的有限自动机。6.处于/*和*/Z间的串构成注解,注解屮间没有*/。画出接受这种注解的DFA的状 态转换图。7.某操作系统下合法的文件名为device: name.extension其屮第一部分(device:)和第三部分(.extension)可缺省,device, name和 extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限 自动机。8.构造一个DFA,它接受20, 1上0和1的个数都是偶数的字符串。9.给出与下图的NFA等价的正规式。10.把下面的NFA确定化。11.下面两个文法屮哪一个不是LR (1)文法?对

3、非LR (1)的那个文法。给出那个有 移进一归约冲突的规范的LR (1)项目集。S -aAc A t bbA | bS aAc A t bAb|b12.将下面的DFA化成最简形式。13.为语言L= vv | vvg (a | b)*并且在w的任何前缀中,a的个数不少于b的个数 写一个LR (1)文法,不准超过6个产生式。14.写一个文法,使其语言是奇数集,且每个奇数不以0开头。15.考查文法G(s):S-* ( T ) a + S aT-T, S | S消除文法的左递归; 提取公共左因子;对每个非终结符,写岀不带冋朔的递归子程序。16.设文法G(S):S-(L) |a S|aL-L, S|S(

4、1)消除左递归和冋溯;(2)计算每个非终结符的FIRST和FOLLOW;(3)构造预测分析表。17程序的文法如下:Pt D T | id :八 proc id ; ; S(1)写一个语法制导定义,打印该程序一共声明了多少个id。(2)写一个翻译方案,打卬该程序每个变量id的嵌套深度。18.构造下面文法的LL (1)分析表。DtTLT t int | realL id RR t , id R | 19.已知文法G(S)S-a| A| (T) TT S|S 写出句子(a, a), a)的规范归约过程及每一步的句柄。20.已知文法G(E)E-T|E+TT-F|T *FF- (E) | i(1)给岀句

5、型(T *F+i)的最右推导及画岀语法树;(2)给出句型(T *F+i)的短语。21在PASCAL语言中,简单类型的变量的声明例举如下:m, n : integerp, q, r : real为这样的声明写一个LR (1)文法(为简单起见,变量标识符都用id表示),并根 据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的 类型填入符号表。22.一个非LR (1)的文法如下:L t MLb | aM E请给出所有有移进一归约冲突的LR (1)项目集,以说明该文法确实不是LR (1) 的。23.现有句型ybalfi和产生式ba,分别指出LL (1)方法和LR (1)方法在扫描

6、 到此句型的什么位置决定用此产生式?24(a)为下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E的 符号(即值大于零还是小于零)记录在属性E.sign中(属性值分别用POS或NEG表示)。 你可以假定所有的整数都不为零,这样就不用担心零的符号。E T E *E I +E | -E | unsigned_integer(b)为上面的表达式产生栈机器屁码。代码执行后,表达式的值留在栈上。你自己 设计所需的栈机器指令,并写清楚指令的含义。25.个文法如下:St(S)S a请给出该文法中对活前缀(有效的LR (1)项目。26.为下面文法添加语义规则(或叫动作子程序),输出S产生的二进制

7、数的值,如输 入是101时,输出5。S t SS t S B | BB t 0 | 127.写岀表达式(a + b*c)/(a+b)-d的逆波兰表示及三元式序列。28.何谓优化?按所涉及的程序范围可分为哪几级优化?29.目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?30把表达式(a+b)*(c+d)+(a+b+c)翻译成三元式。31.设布尔表达式的文法为E -*EiVE2E EiAE?E - i假定它们将用于条件控制语句屮,请(1)改写文法,使之适合进行语法制导翻译;(2)写出改写后的每个产生式的语义动作。32.给出活动记录空间结构。并给岀各部分的存储对象。33画出 IF a0 T

8、HEN x:=x+l ELSE x:二4*( x- 1)的翻译方案图。34.个C语言程序如下:func(il, i2, i3)long il, i2, i3;long jl, j2, j3;printf (Addresses of il,i2, i3 二 %o, %o, %on,&il, &i2, &i3); printf (Addresses of jl, j2, j3 = %o, %o, %orT, &jl, &j2, &j3);main()long i 1, i2, i3;func(il, i2, i3);该程序在SUN工作站上的运行结果如下:Addresses of il, i2, i

9、3 二 35777773634, 35777773640,35777773644Addresses of jl,j2,j3 二 35777773524,35777773520,35777773514 从上面的结果可以看出,func函数的3个形式参数的地址依次升高,而3个局部 变量的地址依次降低。试说明为什么会有这个区别。35.个C语言程序如下:void fun(struct int x; double r; val) main()struct int x; double r; val;fun (val);该程序在X86/Linux机器上的用cc命令编译时,报告的错误信息如下:1: warnin

10、g: structure defined inside parms1: warning: anonymous struct declared inside parameter 1ist1: warning: its scope is only this definition or dcclaration,1: warning: which is probably not what you want7: incompatible type for argument 1 of fun请问,报告最后一行的错误的原因是什么?如何修改程序,使得编译时不再出现这 个错误信息。36.个C语言程序如下:mai

11、n()func ();printf (Rcturn from funcrT);func ()char s 4;strcpy(s, 12345678); printf(sn,s);该程序在PC机linux操作系统上的运行结果如下:12345678Segmentation fault (core dumped)试分析为什么会岀现这样的运行错误。37.个C语言函数如下:func (i)long i;long j;j=i-l;func(j);该函数在PC机1 irmx操作系统上编译生成的汇编代码如下:f ile stack cgcc2_compiled:_gnucompiledc:.textalign

12、 2globl _functype _func, function_func:pushl %ebpmovl %esp, %ebpsubl $4,%espmovl 8 (%ebp), %edxdecl %edxmovl %edx, -4 (%ebp)movl -4 (%ebp), %eaxpushl %eaxcall _funcaddl $4,%espLI:leaveretLfel:size _func, Lfel-_func试画出该函数的一个活动记录的内容,包括活动记录的每个单元存放什么东西、执 行movl 8 (%ebp), %edx指令时栈顶指针所指的的位置、与活动记录有关的另一个指针所指

13、的位置和地址增长方向。38.个C语言的函数如下:func(cj)char c;long I;func(c,l);在X86/Linux机器上编译牛成的汇编代码如下:.file parameter.c.versio n M01.01Hgcc2_compiled.:.text.align 4.globl func.type fun c,functi onfunc:pushl %ebp 将老的基地址指针压栈movl %esp5%ebp 将当前栈顶指针作为基地址指针subl $4,%esp 分配空间movl 8(%ebp),%eax movb %al,-1 (%ebp) movl 12(%ebp),%e

14、ax pushl %eax movsbl -1(%ebp),%eax pushl %eax call funcaddl $8,%esp,L1:leave 和下一条指令一起完成恢复老的基地址指针,将栈顶 ret 指针恢复到调用前参数压栈后的位置,并返回调用者Lfe1:.size func,.Lfe 1func.ident GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)*(a)请指出对应源程序第5行的函数调用func(c,l)的汇编指令是哪几条。(b)请说明字符型参数和长整型参数在参数传递和存储分配方面有什么区别。(小于 长整

15、型size的整型参数的处理方式和字符型参数的处理方式是一样的。)39.个C语言程序及其在某种机器linux操作系统上的编译结果如下。根据所生成的 汇编程序来解释程序中四个变量的作用域、牛存期和置初值方式等方面的区别。static long aa 二 10;short bb = 20;func ()static long cc 二 30;short dd = 40;编译生成的汇编代码如下:.file ,zsta ti c. cv ersion 0101gcc2_compilcd.:dataalign 4type aa,object.size aa, 4aa:.long 10globl bbali

16、gn 2type bb,objectsize bb, 2bb:value 20.align 4type cc.2,objectsize cc. 2, 4cc. 2:long 30.text.align 4globl functype func, functionfunc:pushl %ebpmovl %esp, %ebpsubl $4,%espmovw $40,-2 (%ebp)L1:leaveret.Lfel:size func, Lfel-func.ident GCC: (GNU) egcs-2. 91. 66 19990314/Linux (egcs-1. 1. 2 release),z

17、40.C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证 所接受的程序没有运行吋的类型错误。例如,编译吋的类型检查-般不能保证运行 时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。41.下面程序在SUN工作站上运行时陷入死循环,试说明原因。如果将第8行的long *p 改成short *p,并且将第23行long k改成short k后,loop屮的循环体执行一 次便停止了。试说明原因。main()addr();loop();long *p;loopO long i,j;j=0; for(i=0;ivl0;i+)(*p);j+;addr()long k;k=

18、0;p 二&k;42.下面程序的结果是120o但是如果把第10行的abs(l)改成1的话,则程序结果是 1,试分析为什么会有这不同的结果。int fact()static int i=5;if(i=0) return(l);else i=i-l;return(i+abs(l )*fact();main() printf(nfactor of 5 = %dnl fact();43.一个C语言函数如下:main()int i, j, k;i 二5;j=l;while(j100) k=i+l;j=j+k;经优化编译后,生成的代码如下:.file op ti mize. cgcc2_compiled.

19、: gnu_compilcd_c:textalign 2.globl _func.type _func, function_func:pushl %ebpmovl %esp, %ebpmovl $1,%eaxmovl $6, %edxalign 2,0x90L4:addl %edx, %eaxcmpl $99, %eaxjle L4leaveretLfel:size func,Lfel- func试说明编译器对这个程序作了哪些种类的优化(只需要说复写传播、删除公共子表 达式等,不需要说怎样完成这些优化的)。44.对下面的流程图,假定各基本块出口之后的活跃变量均为a、b、f,循环中可用作 固定的寄存器为RO、R1,则将RO、R1固定分配给循环中哪两个变量,可使执行代价节 省得最多?写出分析过程。45.Pascal语言的repeat -unti.1语句的语法形式为S T repeat Si until E其语义解释为:假真请按如下耍求构造该语句的翻译模式:(1)写出适合语法制导翻译的产牛式;(2)写出每个产生式对应的语义动作。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1