• 【PL理论】(24) C- 语言:有块的作用域 | 更新的语法 | 新的语义域 | 环境 vs. 内存


    • 💭 写在前面:我们将再次扩展之前的C语言,让我们向这种语言引入“作用域”的概念。

    目录

    0x00 C- 语言:有块的作用域

    0x01 C- 语言:更新的语法

    0x02 新的语义域

    0x03 环境 vs. 内存


    0x00 C- 语言:有块的作用域

    现在,你必须在使用变量之前先声明它!

    同样,你可以拥有一个变量,它是在 if while 语句的块 { } 中局部的。

    下面是一个用新的 C- 写的示例程序,请注意,我们有像 var x = 5 这样的声明

    1. var x = 5;
    2. var i = 1;
    3. var s = 0;
    4. while (i < 10) {
    5. var x = i + i; // 这个 x 只在循环内部绑定
    6. s = s + x;
    7. i = i + 1
    8. };
    9. x = x + s // 'x' 将会变成 5 + 90 = 95

    0x01 C- 语言:更新的语法

    为简化起见,这次我不会介绍指针的概念给 C-

    相反,我们有了变量声明的语句,必须同时声明和初始化

    0x02 新的语义域

    值的域与之前相同:

    vVal=Z+B" role="presentation">vVal=Z+B

    现在程序状态包括环境和内存,语句的执行将改变这个状态:

    ρEnv=VarLoc" role="presentation">ρEnv=VarLoc
    MMem=LocVal" role="presentation">MMem=LocVal

    𝑳𝒐𝒄 是一组有效的内存位置 (地址),即 Loc={l1,l2,...,lN}" role="presentation">Loc={l1,l2,...,lN},其中 N" role="presentation">N 是最大内存大小。

    下面,我们来更仔细地看一下环境和内存。

    0x03 环境 vs. 内存

    在函数式语言中,环境通常直接将一个名称映射到一个值。

    在具有内存的命令式语言中,环境通常将一个名称映射到内存位置 (地址) 。

    然后,内存将每个位置映射到一个值,在下面的图中,l1,l2,l2" role="presentation">l1,l2,l2 表示内存位置。

    在先前的示例中,当 inner x" role="presentation">x 被声明时,这些状态应该如何改变?

    1. var x = 5;
    2. var i = 1;
    3. var s = 0;
    4. while (i < 10) {
    5. var x = i + i;
    6. ...
    7. }

    在先前的示例中,当内部 x" role="presentation">x 被声明时,这些状态应该如何改变?

    • 名称 x 必须更改为指向新的位置 l4" role="presentation">l4
    • 并且必须创建一个新的内存插槽
    • 请注意,l1" role="presentation">l1 的内存插槽仍然存在内存中


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

    📜 参考资料 

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

  • 相关阅读:
    网络运维与网络安全 学习笔记2023.11.17
    测试大语言模型在嵌入式设备部署的可能性——模型TinyLlama-1.1B-Chat-v1.0
    C【文件操作】
    shell之sed
    群签名、环签名、盲签名
    springcloud05——Zookeeper实现支付微服务
    基于SpringBoot的校园周边美食探索及分享平台
    【C++】常用拷贝和替换算法
    Java应用生产Full GC或者OOM问题如何定位
    IDEA中 lombok不生效解决方法
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/139611971