美文网首页
racket中的读取宏 reader

racket中的读取宏 reader

作者: liewhite | 来源:发表于2016-09-28 09:59 被阅读0次

    racket不同于别的语言,它是一门可编程的语言。其首页上万年不变的一行大字A programmable programming language已经说明了一切。

    当我们处理一个复杂编程问题时,如果是一般的编程语言,我们只能设计数据结构或类,然后编码实现方法。但是这一切在racket中都变了,我们首先要做的是设计一门最适合解决这个问题的语言,实现语言,然后实现解决问题的方法。

    为什么这么说,这得益于racket中的源代码解析过程。在racket程序运行前,会经历两个运行前过程:read和expand,分别对应于读取期和编译前,read可以将任意的输入字符解析为语法树,expand则任意修改语法树,最后编译器进行编译,解释器执行。也就是说,我们可以在两个阶段改变编译器看到的东西。这就是可编程编程语言的威力。

    racket的reader是一个递归下降的解析器,它可以经一个readtable和各种参数进行配置。这个readtable定义了很多分隔符和特殊字,比如:

    数据单元的开始

    如何解析#开头的数据

    number和symbol的分隔符

    开闭括号

    第一个列表元素后的 .

    不过这个我们一般不更改,除非想定义出一门完全崭新的语言,我们还是不要太标新立异,我们一般只考虑默认的readtable。

    从一个流中读取产生一个一个datum(数据单元),如果是个复合数据,那么递归调用reader去读取其中的数据单元。

    相关文章

      网友评论

          本文标题:racket中的读取宏 reader

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