【编译原理】龙书第一章作业答案

【编译原理】龙书第一章作业答案

练习1.6.1 :对图1-13a中的块结构的C代码,指出赋给w、x、y和z的值

【编译原理】龙书第一章作业答案_第1张图片
答案: w=13,x=11,y=13,z=11。可以把图中块结构看作块B1,第一个大括号内是块B2,第二个内是块B3。块B2有变量j的声明,因此w的定义中对j的使用被绑定到这个声明,没有i的声明,只能指向块B1中i的声明,同时B2重新定义该声明的i值为6,所以w=6+7=13。由于x在块B1中,i和j绑定到的都是块B1的声明,x=6+5=11。块B3有i的声明但没有j的声明,只能绑定到块B1对j的声明,所以y=8+5=13。z同理x可得值为11。

练习1.6.2 :对图1-13b中的代码重复练习1.6.1,指出赋给w、x、y和z的值

【编译原理】龙书第一章作业答案_第2张图片

答案: w=9,x=7,y=13,z=11。把图中块结构看作块B1,第一个大括号内是块B2,第二个内是块B3。块B2有变量i的声明但没有j的声明,只能绑定到块B1对j的声明,因此w=5+4=9。由于x在块B1中,i和j绑定到的都是块B1的声明,x=3+4=7。块B3有j的声明,没有i所以只能指向块B1中对i的声明,同时在块B3中重新定义i值,所以y=7+6=13。z同理x均指向块B1的声明,但由于块B3已重新定义i值,所以z=7+4=11。

练习1.6.3 :对于图1-14中的块结构代码,假设使用常见的声明的静态作用域规则,给出其中12个声明中每一个的作用域

【编译原理】龙书第一章作业答案_第3张图片
答案: 声明语句作用域包括整个所在块,除去块内对同一参数有声明的其他块:

声明 作用域
第一行 int w B1-B3-B4
第一行 int x B1-B2-B4
第一行 int y B1-B5
第一行 int z B1-B2-B5
第二行 int x B2-B3
第二行 int z B2
第三行 int w B3
第三行 int x B3
第四行 int w B4
第四行 int x B4
第五行 int y B5
第五行 int z B5

练习1.6.4 :下面的C代码的打印结果是什么

【编译原理】龙书第一章作业答案_第4张图片
答案: 打印结果为3、2。函数main调用函数b时,执行打印变量x值的指令, b中定义x=a,所以根据宏定义用x+1替换a,x=x+1。x在b中没有声明,所以指向到全局变量int x=2的声明,x=2+1=3。b运行结束之后调用函数c,c要打印宏a的值,同上用x+1替换a,c中有声明int x=1,故打印值中的x指向这个,a=1+1=2。

你可能感兴趣的:(【编译原理】龙书第一章作业答案)