编译原理第1章课后习题答案(修订版)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.6.3 答:各声明的作用域分别如下: 块 B1 B1 B1 B1 B2 B2 B3 B3 B4 B4 B5 B5 声明 INT INT INT INT INT INT INT INT INT INT INT INT X W Y Z X Z W X W X Y Z 作用域 B1-B2-B4 B1-B3-B4 B1-B5 B1-B2-B5 B2-B3 B2 B3 B3 B4 B4 B5 B5
1.1.2 编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么? 答: 编译器是针对于某一个特定的处理器对源程序进行翻译的, 所以它能够将一次性翻译成 目标代码, 再在处理器上运行, 这种形式的程序运行显然要比翻译一部分命令执行一部分命 令要快,这也正是相对于解释器的优点所在。 对于解释器而言恰恰相反, 它并不是将源程序一次性翻译成目标代码而是翻译一部分再执行 一部分,这种做法有两好处,首先它使得运行变得动态性,即对于相同的小部分代码它不用 再解释, 这使得编译的效益提高。 其次是这种解释的机制使得相同的程序在不同的处理器上 运行成为可能,通过解释可以在不同的处理器上执行。 1.1.3 答:汇编语言比较容易输出和调试,再由汇编器处理后生成可重新定位的机器语言。 1.1.4 把一种高级语言翻译成为另一种高级语言的编译器称为源到源的翻译器。 编译器使用 C 语言做为目标语言有什么好处? 答: 把 C 语言作为目标语言的好处是一方面 C 语言被广泛的应用, 使得编译后的目标语言能 够被大多数人理解。 另一方面 c 语言已经有比较高效完备的编译器, 便于再程序编译成其它 语言的目标程序。 1.6.1(左),1.6.2(右) 对下图中的块结构的 C 代码,指出赋给 w、x、y 和 z 的值。 int w,x,y,z; int i=4;int j=5; { int j=7; i=6; w=i+j; } x=i+j; { int i=8; y=i+j; } z=i+j; A1 A2 int w,x,y,z; int i=3;int j=4; { int i=5; w=i+j; } x=i+j; { int j=6; i=7; y=i+j; } z=i+j; B1 B2
编译原理第 2 版参考习题答案 (1,3 章,2017 年修订) 1.1.1 编译器和解释器之间的区别是什么? 答:编译器和解释器之间的区别在于以下三个方面: 1. 是否生成目标程序: 编译器将源语言编写的程序等价地转换成目标语言编写的程序, 然 后由目标机器直接执行可执行的目标程序;而解释器不将源程序翻译成目标程序,而是直 接根据用户的输入执行源程序的操作。 2. 执行速度:执行编译器产生的目标程序比解释器的执行速度要快得多。 3. 错误诊断的灵活性:解释器逐个语句执行源程序,因此错误诊断效果比编译器要好。
1.6.4:下面的 C 代码的打印结果是什么? #define a (x+1) int x = 2 ; void b(){ x = a; printf("%d\n",x);} void c(){int x = 1; printf("%d\n",a);} void main(){b();c();getchar();} 答:3 2
Байду номын сангаас
A3 A4
B3 B4
A5
B5
声明或定值 int i=4 (注:在 A2 中 i=6 int j=5 int j=7 int i=8 由分析可以得出: w=6+7=13; x=6+5=11; y=8+5=13; z=6+5=11;
作用域 A1-A4 后改值为 6) A1-A2 A2 A4
声明或定值 作用域 int i=3 B1--B2 (注:在 B4 中 i=7 后改值为 7) int j=4 B1-B4 int i=5 B2 int j=6 B4 由分析可以得出: w=5+4=9; x=3+4=7; y=6+7=13; z=7+4=11;