美文网首页
编程语言是怎么构造的(二 变量的定义和调用)

编程语言是怎么构造的(二 变量的定义和调用)

作者: zxbyh | 来源:发表于2018-11-29 16:30 被阅读0次

    导航:

    编程语言是怎么构造的(一 四则混合运算的实现)
    编程语言是怎么构造的(二 变量的定义和调用)
    编程语言是怎么构造的(三 函数的定义和调用)
    编程语言是怎么构造的(四 将语法分析和执行分离)

     二 实现变量的功能

    上一篇文章,我们实行了四则混合运算的功能。现在我们开始为它增加一个变量的功能。对于一个编程语言来说,变量是一个基本要素。

    最终运行的效果是这样的:

    准备工作

    在DrRacket新建一个文件,file->New Tab,然后把上一遍文章我们的四则运算的代码打开。代码在https://gitee.com/zxbyh/scip/blob/master/R4/four-mixed-operations.rkt。代码的最前面加上 (require r5rs) 。

    一 变量名的识别

    目前我们的这个四则混合运算语言里面元素只有两个类型: 数字和操作符,因此符号就直接等于操作符了,但是现在我们加上变量了,那么符号就可能包含 操作符 和 变量名。因此要增加一个函数判断一个符号是否是一个变量名:

    这个函数很好理解,一个元素是符号且不是操作符,那么就是变量名。

    二 变量的存放和变量值的获取。

           框架frame就是变量的容器,变量和值分别通过两个列表来存放,按位对应。并把这两个列表再放到一个列表里面,形式如下:

           要检索变量的值就把变量表和值表都同时按位移动,找到变量后,那么这时的值表当前位置的元素也就是变量值了。

    定义新变量的操作如下

    如果不存在这个变量,就添加变量和值到框架

    三 变量定义语句的分析

           接下来就需要我们的解释器能够 识别类似 (define x 1) 这样子的定义语句,然后从里面找到变量x 和变量的值 1,然后再利用上面的功能吧变量存放起。

    先定义一个辅助函数 define语句的解释 这句现在还不能执

           这句现在还不能执行,我们接下来要修改m-eval 函数,参加框架的参数,这样才能从框架里面找到变量并执行。

    四 代码块的分析

    在修改m-eval函数之前,我们再做一件事情,我们目前的四则混合运算的代码都是一句表达式,现在我们进入变量后,就存在有变量定义和运算的多个表达式的情况了,这个叫代码模块。我们用 begin 来表示。

    这就是一个线性递归,比较好理解

    五 最后一步,m-eval函数加上框架参数

    好了,到现在到最后一步了,修改一下m-eval函数。其实主要就是增加对 begin,define,变量的求值,并且将框架作为一个新增参数。

    小有成就!!

    小结

    本节看完后,要深入理解变量存放的框架,这个是下一阶段函数定义和调用的基础。

    这一部分的代码请到此下载https://gitee.com/zxbyh/scip/blob/master/R4/four-mixed-operations-valuable.rkt,然后在自己电脑上运行。

    接下来我们将进入第三阶段: 函数的定义和调用

    导航:

    编程语言是怎么构造的(一 四则混合运算的实现)
    编程语言是怎么构造的(二 变量的定义和调用)
    编程语言是怎么构造的(三 函数的定义和调用)
    编程语言是怎么构造的(四 将语法分析和执行分离)

    相关文章

      网友评论

          本文标题:编程语言是怎么构造的(二 变量的定义和调用)

          本文链接:https://www.haomeiwen.com/subject/ymffcqtx.html