【PL理论】(25) C- 语言:表达式求值的推理规则 | 执行语句的推理规则 | 语句执行的推理规则

  • 💭 写在前面:本章我们将继续更新我们的 "C-" 语言,更新表达式求值的推理规则、执行语句的推理规则以及语句执行的推理规则。

目录

0x00 C- 语言更新:表达式求值的推理规则

0x01 C- 语言更新:执行语句的推理规则

0x02 C- 语言更新:语句执行的推理规则

0x01 接下来我们该做什么?


0x00 C- 语言更新:表达式求值的推理规则

表达式求值的推理规则,定义为关系:

\color{} \rho ,M\vdash e\Downarrow v

含义:给定环境 \color{} \rho 和内存 \color{} M,表达式 \color{} e 求值为 \color{} v

请注意变量 \color{} x 的语义如何改变,其余表达式情况的语义被省略。

0x01 C- 语言更新:执行语句的推理规则

执行语句的推理规则,定义为关系:

\color{} \left \langle \rho ,M,s \right \rangle\Rightarrow \left \langle {\rho }',{M}'\right \rangle

变量声明的语义如下,边界条件 \color{} l\notin Dom(M) 意味着必须分配一个新的内存位置。

💭 举个例子:填写赋值语句的语义

执行语句的推理规则,定义为关系:

 \color{} \left \langle \rho ,M,s \right \rangle\Rightarrow \left \langle {\rho }',{M}' \right \rangle

如果一个变量被立即重新声明如下,会发生什么?这是一个 bug 吗?

var x = 1;
var x = 2;
...

0x02 C- 语言更新:语句执行的推理规则

语句执行的推理规则,定义为关系:

\color{} \left \langle \rho ,M,s \right \rangle\Rightarrow \left \langle {\rho }',{M}' \right \rangle

与 C 语言不同,这在我们当前的 C- 语义中是允许的:

它可以正常运行,尽管在内存中创建了一个无法访问的位置。

定义为关系:

 \color{} \left \langle \rho ,M,s \right \rangle\Rightarrow \left \langle {\rho }',{M}' \right \rangle

举个例子:填写 if 语句的 true 分支的语义,完成 C- 语句的其他情况的语义是直截了当的。

特别地,while 语句可以类似地处理:

0x01 预告:接下来我们要讨论的内容

在当前的 C- 语言中,你可能已经注意到内存位置只会生成,而不会被释放。

因此,长时间运行的程序可能会耗尽内存。

在现实世界的语言中,我们还必须考虑指针、结构、动态分配等问题。

在下一章中,我们将讨论 内存管理机制 (memory management),比如 自动垃圾回收器 (garbage collector) 。


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.10
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

相关推荐

  1. [C++] Makefile语法规则

    2024-06-16 16:12:05       58 阅读
  2. C语言整形提升规则

    2024-06-16 16:12:05       52 阅读
  3. go语言命名规则

    2024-06-16 16:12:05       22 阅读
  4. C语言命名规则(期末版)

    2024-06-16 16:12:05       56 阅读
  5. 漫谈:C语言 奇葩指针定义规则

    2024-06-16 16:12:05       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 16:12:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 16:12:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 16:12:05       82 阅读
  4. Python语言-面向对象

    2024-06-16 16:12:05       91 阅读

热门阅读

  1. Vue基础面试题(三)

    2024-06-16 16:12:05       29 阅读
  2. Web前端指令符:解码、应用与挑战

    2024-06-16 16:12:05       24 阅读
  3. 【无标题】

    2024-06-16 16:12:05       21 阅读
  4. 超级数据查看器 教程pdf 1-31集 百度网盘

    2024-06-16 16:12:05       39 阅读
  5. Oracle数据库之多行函数(十九)

    2024-06-16 16:12:05       32 阅读
  6. js 刷题常用方法

    2024-06-16 16:12:05       30 阅读
  7. [C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品

    2024-06-16 16:12:05       31 阅读
  8. 什么是仲裁器(Arbiter)?

    2024-06-16 16:12:05       85 阅读
  9. C++学习(21)

    2024-06-16 16:12:05       39 阅读
  10. (53)MOS管专题--->(08)MOS管N沟道MOS管

    2024-06-16 16:12:05       35 阅读
  11. MySQL 考证作用

    2024-06-16 16:12:05       32 阅读