编译原理1.6习题 程序设计语言基础

发布时间:2024年01月19日

图源:文心一言

编译原理习题整理~🥝🥝

作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡

  • 第1版:自己的解题,与AI老师的判卷~🧩🧩

编辑:梅头脑🌸?

审核:文心一言

题源:龙书《编译原理》 Alfre V.Aho 等著? 赵建华 等译


🧵参考答案

🧵练习1.6.1

🧵练习1.6.2

🧵练习1.6.3

🧵练习1.6.4

🔚结语


🧵参考答案

🌸乔卿博文:编译原理(龙书):第一章部分题目参考答案_编译原理龙书答案-CSDN博客

🌸fool2fish (Zhouxuan Yang)?博文:dragon-book-exercise-answers - GitCode

🧵练习1.6.1

🧩题目

对图1-13a中的块结构的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;

🌰答题

📇阿梅答题

?int w, x, y, z;
int i = 4; int j = 5;
{
? int j = 7; ? ?// i = 4,j = 7
? i = 6;? ? ? ? // i = 6,j = 7
? w = i + j; ? ?// i = 6,j = 7,w = 13
}
x = i + j; ? ? ?// i = 4,j = 5,w = 13,x = 9
{
? int i = 8; ? ?// i = 8,j = 5,w = 13,x = 9
? y = i + j; ? ?// i = 8,j = 5,w = 13,x = 9,y = 3
}
z = i + j; ? ? ?// i = 4,j = 5,w = 13,x = 9,y = 13,z = 9

📇AI审核

AI回复简单版本:

  • 第5行 i = 6 ,修改了全局变量 i 的值为 6。

AI回复详细版本:

int w, x, y, z;  
int i = 4; int j = 5;  
{  
    int j = 7;    // i = 4, j(局部) = 7, j(全局) is hidden  
    i = 6;        // i = 6, j(局部) = 7  
    w = i + j;    // i = 6, j(局部) = 7, w = 13  
}                 // j(局部) goes out of scope, i = 6, j(全局) = 5  
x = i + j;        // i = 6, j = 5, w = 13, x = 11  
{  
    int i = 8;    // i(局部) = 8, i(全局)被隐藏, j = 5, w = 13, x = 11  
    y = i + j;    // i(局部) = 8, j = 5, w = 13, x = 11, y = 13  
}                 // i(局部) goes out of scope, i(全局) = 6, j = 5  
z = i + j;        // i = 6, j = 5, w = 13, x = 11, y = 13, z = 11

🧵练习1.6.2

🧩题目

对图1-13b中的块结构的C代码,指出并赋给w、x、y和z的值

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;

🌰答题

📇阿梅答题

int w, x, y, z;
int i = 3; int j = 4;
{
  int i = 5;    // i = 5(局部),j = 4(全局)
  w = i + j;    // i = 5(局部),j = 4(全局),w = 9
}
x = i + j;      // i = 3(全局),j = 4(全局),w = 9 ,x = 7
{
  int j = 6;    // i = 3(全局),j = 6(局部),w = 9 ,x = 7
  i = 7;        // i = 7(全局),j = 6(局部),w = 9 ,x = 7
  y = i + j;    // i = 7(全局),j = 6(局部),w = 9 ,x = 7,y = 13
}
z = i + j;      // i = 7(全局),j = 4(全局),w = 9 ,x = 7,y = 13,z = 11

🧵练习1.6.3

🧩题目

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

🌰答题

📇阿梅答题

声明域wxyz
B1B1-B3-B4B1-B2-B3-B4B1-B5B1-B2-B5
B2B2-B3B2
B3B3B3
B4B4B4
B5B5B5

📇参考答案

第2行,块B2重新声明了x,也就是B2的值可以包含到B3,但是B1的值在B2已经被重新声明,因此B1只能作用到B2,无法在B3生效。

声明域wxyz
B1B1-B3-B4B1-B2-B4B1-B5B1-B2-B5
B2B2-B3B2
B3B3B3
B4B4B4
B5B5B5

🧵练习1.6.4

🧩题目

#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(); }

🌰答题

📇阿梅答题

#define a (x + 1)
int x = 2;
void b() { x = a; printf("%d\n", x); }        // a = x + 1,即a = 2; x = a(全局), 即 x = 3,输出3
void c() { int x = 1; printf("%d\n", a); }    // a = x + 1, x = 1,即a = 2(局部),输出2
void main () { b(); c(); }

综上,输出3,2


🔚结语

博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容{例如有错误、难理解、不简洁、缺功能}等,博主会顶锅前来修改~~😶?🌫?😶?🌫?

我是梅头脑,本片博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,感谢点赞小伙伴对于博主的支持~~🌟🌟

同系列的博文:🌸编译原理_梅头脑_的博客-CSDN博客

同博主的博文:🌸随笔03 笔记整理-CSDN博客

文章来源:https://blog.csdn.net/weixin_42789937/article/details/135676378
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。