| 编译原理模拟试题
四、简述题答案:
1、考虑下面程序
…………
Var a:integer;
Procedure S(X);
Var X:integer;
Begin
a:=a+1;
X:=a+X
End;
Begin
a:=5;
S(a);
Print(a)
End.
试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么?
答:传名:a=12 (2分)
传值:a=6 (2分)
3、写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。
逆波兰表示:
abc*+ab+/d- (2分)
三元式序列:
① (*,b,c)
② (+,a,①)
③ (+,a,b)
④ (/,②,③)
⑤ (-,④,d) (2分)
4、已知文法G(S)
S→a|∧|(T)
T→T,S|S
写出句子((a,a),a)的规范归约过程及每一步的句柄。
句型 归约规则 句柄
((a,a),a) S→a a
((S,a),a) T→S S
((T,a),a) S→a a
((T,S),a) T→T,S T,S
((S),a) T→S S
((T),a) S→S(T) (T)
(S,a) T→S S
(T,a) S→a a
(T,S) T→T,S T,S
(T) S→(T) (T)
S (4分)
5、何谓优化?按所涉及的程序范围可分为哪几级优化?
答:优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。 (2分)
三种级别:局部优化、循环优化、全局优化。 (2分)
6、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?
答:目标代码通常采用三种形式:机器语言,汇编语言,待装配机器语言模块。(2分)
应着重考虑的问题:
(1)如何使生成的目标代码较短;
(2)如何充分利用寄存器,以减少访问内存次数;
(3)如何充分利用指仅系统的的特点。 (2分)
|