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

2018-11-29  本文已影响0人  zxbyh

导航:

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

 二 实现变量的功能

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

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

准备工作

在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,然后在自己电脑上运行。

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

导航:

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

上一篇下一篇

猜你喜欢

热点阅读