慕课编译原理(习题集)
慕课⼴西⼤学.编译原理.期末复习.习题汇总
0 ⽬录
1 引论
1.1 什么是编译程序
刚才这种翻译模式属于:
A.编译
技术部岗位职责
B.解释
C.
D.
1.2 为什么要学习编译原理
1.3 编译过程
可以直接运⾏的⽬标代码是:
A.汇编指令代码
B.可重新定位指令代码
C.绝对指令代码英语试题
1.4 编译程序的结构
编译五个阶段的⼯作和编译前后端建⽴对应关系正确的是:
A.前端:词法分析,语法分析;后端:中间代码产⽣,优化,⽬标代码⽣成。
克己复礼的意思B.前端:词法分析,语法分析,中间代码产⽣;后端:优化,⽬标代码⽣成。
C.前端:词法分析,语法分析,中间代码产⽣,优化;后端:词法分析,⽬标代码⽣成。
D.前端:词法分析,语法分析,中间代码产⽣,优化;后端:优化,⽬标代码⽣成。
1.7 课后作业
1(15分)(1)什么是编译程序?编译程序有哪些类型?编译程序的结构是怎样的?
答:1编译程序是把某⼀种语⾔程序(称为源语⾔程序)等价地转换成另⼀种语⾔程序(称为⽬标语⾔程序)的程序
2编译程序有:1)诊断编译程序(Diagnostic Compiler),2)优化编译程序(Optimizing Compiler),3)交叉编译程序(Cross Compiler),4)可变⽬标编译涅序(Retargetable Compiler)
3编译程序的结构是1)编译程序总框,2)遍,3)编译前端与后端
2(10分)(2)编译程序和解释程序的区别是什么?
答:编译程序和解释程序的区别是:
解释程序(解释器),它或者直接解释执⾏源程序,或者将源程序翻译成某种中间表⽰形式后再加以执⾏;
编译程序(编译器),则是将源程序翻译成⽬标语⾔程序,然后在计算机上运⾏⽬标程序。
两种语⾔处理程序的根本区别是:在编译⽅式下,机器上运⾏的是与源程序等价的⽬标程序,源程序和编译程序都不再参与⽬标程序的执⾏过程,⽽在解释⽅式下,解释程序和源程序(或某种等价表⽰)要参与到程序的运⾏过程中,运⾏程序的控制权在解释程序。
解释器翻译源程序时不⽣成独⽴的⽬标程序,⽽编译器则将源程序翻译成独⽴的⽬标程序。
3(15分)(3)学习编译原理的意义是什么?
威廉华莱士答:学习编译原理的意义是
1学习编译程序构造原理,技术
1)提⾼对计算机系统总体认识
2)感悟计算思维
3)更好地理解"计算”
2更好地理解⾼级语⾔
3运⽤编译原理和⽅法构造实⽤⼯具
1)⽤"计算"的眼光看世界
2)⽤计算解决实际问题
4(20分)(4)编译中,遍、编译前端与后端的概念?遍和编译阶段有什么区别?
答:1编译中,遍、编译前端与后端的概念是:
遍:所谓"遍",就是对源程序或源程序的中间表⽰从头到尾扫描⼀次
编译前端:与源语⾔有关的部分,如词法分析,语法分析,语义分析与中间代码产⽣,与机器⽆关的优化
编译后端:与⽬标机有关的部分,与⽬标机有关的优化,⽬标代码产⽣2遍和编译阶段的区别是:阶段与遍是不同的概念
1)⼀遍可以由若⼲段组成
2)⼀个阶段也可以分若⼲遍来完成
5(20分)(5)编译程序的⽣成有哪些⽅法?请简单说明之。
答:编译程序的⽣成的⽅法有:
1)以机器语⾔和汇编语⾔为⼯具:可以针对具体的机器,充分发挥计算机的系统功能;⽣成的程序效率⾼
2)⾼级语⾔书写:程序易读,易理解,容易维护,⽣产的效率⾼;利⽤已有的某种语⾔的编译程序实现另⼀语⾔的编译程序
3)⾃编译⽅式
4)编译程序⾃动产⽣:编译程序⼀编译程序,编译程序产⽣器,编译程序书写系统
6(20分)(6)编译原理中⽤到的计算思维⽅法有哪些?
答:编译原理中⽤到的计算思维⽅法有:
1)抽象
2)⾃动化
3)问题分解
4)递归
5)权衡(折衷,Tradeoff)
2 ⾼级程序设计语⾔概论
2.2 程序设计语⾔的定义
下⾯哪种说法正确?
A.标识符是语义概念,名字是语法概念
B.标识符是语法概念,名字是语义概念
边牧多少钱
下⾯哪些属于程序语⾔的语义定义?
A.表达式中圆括号必须匹配
B.类的声明必须以class开头
C.关于函数调⽤时参数传递⽅法的描述
D.函数体必须⽤return语句结尾
2.3 ⾼级程序设计语⾔的⼀般特性
P2的代码能够调⽤P1吗?
A.可以
B.不可以
下⾯哪种说法正确?
A.标识符是语义概念,名字是语法概念
B.标识符是语法概念,名字是语义概念
下⾯说法的是错误的是:
A.名字的绑定(binding)是指将标识符与所代表的程序数据或代码进⾏关联
B.名字的绑定总是发⽣在编译过程中
C.名字的绑定可以发⽣在运⾏过程中
在C语⾔中,下⾯选项只具有右值、不具有左值的是:
A.变量
B.下标变量
他山之石的意思C.a + 5
D.指针变量P
3 ⾼级程序设计语⾔的语法描述
关于菊花的古诗3.6 课后作业
1(20分)令⽂法G6为: N→D∣ND N→0∣1∣2∣3∣4∣5∣6∣7∣8∣9(1)G6的语⾔L(G6) 是什么?
(2)给出句⼦0127、34和568的最左推导和最右推导
2(10分)写⼀个⽂法,使其语⾔是奇数集,且每个奇数不以0开头。
3(20分)令⽂法为
E→T∣E+T∣E-T
T→F∣T F∣T/F
F→(E)∣i
(1)给出i+i i、i(i+i)的最左推导和最右推导
(2)给出i+i+i、i+i i的语法树
4(10分)证明下⾯的⽂法是⼆义的:
S→iSeS∣iS∣i
5(40分)给出下⾯语⾔的相应⽂法:
6(10分)附加题:⽣成语⾔的⽂法G是什么?它是chomsky那⼀型的⽂法?
5 词法分析2
5.1 词法规则形式化-正规集与正规式
e是什么?
A.字符
B.字
C.正规式
Æ是什么?
A.集合
B.字
C.正规式
a (a ÎS)是什么?
A.字符
用计算机
B.字
C.正规式
5.2 确定有限⾃动机
图中DFA M识别的L(M) 是什么?
A.L(M)={以aa或bb开头的字}
B.L(M)={含aa或bb的字}
C.L(M)={以aa或bb结尾的字}
哪个DFA识别{e} ?
A.双圈q0
B.单圈q0
5.3 ⾮确定有限⾃动机