编译原理与技术练习题汇总

《编译原理与技术》练习题 13

练习 6

6.1 符号表的作用有哪些?

6.2 符号表的表项通常包括哪些属性,主要描述的内容是什么?

6.3 符号表组织的数据结构有哪些种?每种组织结构选取的主要依据是什么?

6.4 程序块是程序语言的主要构造元素,它允许以嵌套的方式确定局部声明。大多数语言规定,程序

块结构的声明作用域使最近嵌套规则,请按照这个规则写出下列声明的作用域。

main() {

/* 开始块B0 */

int a = 0; int b =0;

{ /* 开始块B1 */

int b = 1;

{ /* 开始块B2 */

int a = 2; ……

} /* 结束块B2 */ { /* 开始块B3 */

int b = 3; ……

} /* 结束块B3*/ ……

} /* 结束块B1*/ }

6.5 C语言中规定变量标识符可以定义为:extern、ertern static、auto、local static和register,请对这

5种变量分别说明其作用域。

6.6 设散列表为HT[13],哈希函数定义为hash(key)=key(整数除法取余运算),用链地址法解决

冲突对下列关键码12,23,45,57,20,3,31,15,56,78造表。

《编译原理与技术》练习题 14

练习 7

7.1 请考虑过程和活动记录的联系和区别。 7.2 请解释下列概念:

生存期,过程的活动,活动树,活动记录。

7.3 有哪些常见的参数传输方式,请分析和比较它们各自的特点。

7.4 对你熟悉的高级程序语言(如C、Pascal、C++、Java或C#),了解它们的参数传输机制。 7.5 执行下面Pascal程序的输出a结果分别是什么,如果参数的传递机制是: (1)引用调用方式; (2)值-结果调用方式;

program copyout (input, output); var a: integer;

procedure unsafe (var x: integer);

begin x := 2; a := 0 end;

begin

a := 1; unsafe (a); writeln (a)

end

7.6 执行下面程序时打印的a分别是什么,若参数的传递机制是: (1)按值调用方式; (2)引用调用方式; (3)值-结果调用方式; (4)换名调用方式。

procedure p(x, y, z); begin y := y +1; z := z+x; end p; begin a := 2;

《编译原理与技术》练习题 15

b := 3; p(a+b, a, a); print a; end;

7.7 设计存储分配时要考虑哪些主要因素?常见的存储分配策略有哪些?简单说明在什么情况下使

用哪种存储分配策略。

7.8 C++语言中关于变量的存储类型符有4个:auto、register、static和extern,请说明每个说明符所

表示的存储方式。

7.9 为下面FORTRAN程序的运行时环境构造出一个可能的组织结构,要保证对AVE的调用时存在

的一个存储器指针(参考7.4节)。

REAL A(SIZE), AVE INTEGER N, I 10 READ *, N

IF (N .LE. 0 .OR. N .GT. SIZE) GOTO 99 READ *, (A(I), I=1, N) PRINT *, ‘AVE = ‘, AVE(A, N) GOTO 10 99 CONTINUE END

REAL FUNCTION AVE (B, N) INTEGER I, N REAL B(N), SUM SUM = 0.0 DO 20 I=1, N 20 SUM = SUM+B(I) AVE = SUM/N END

7.10考虑C语言中的下列过程:

void f ( char c, char s[10], double r) { int * x;

《编译原理与技术》练习题 16

int y [5]; ...... }

(1)使用标准C参数传递约定,利用7.5.1所描述的活动记录结构判断以下的fp的偏移:c,s[7]和

y[2](假设数据大小为:整型=2个字节,字符=1个字节,双精度=8个字节,地址=4个字节) (2)假设所有的参数都是按值传递(包括数组),重做(1); (3)假设所有的参数都是引用传递(包括数组),重做(1)。

7.11为下面C程序的运行时环境构造出一个可能的组织结构(参考7.5.1节)。

(1) 在进入函数f中的块A之后; (2) 在进入函数g中的块B之后。

int a[10]; char *s = ‘hello’; int f ( int i, int b[] ) { int j = 1; A: { int i = j; }

void g (char *s) { char c = s[0]; } main () { int x = 1; x = f (x, a); g (s); return 0; }

B: { int a[5]; ...... }

char c = b[i]; ......

} return 0;

联系客服:779662525#qq.com(#替换为@)