racket中的读取宏 reader

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

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

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


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

数据单元的开始

如何解析#开头的数据

number和symbol的分隔符

开闭括号

第一个列表元素后的 .

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,473评论 11 349
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,896评论 6 13
  • 已经是腊月二十八的凌晨了,再过两天就是除夕,莫不是要在医院过年了吗?小弟还在输血,无法安睡,这样的日子已经持续...
    你好好吃阅读 1,768评论 0 0
  • 听到题目,首先映入脑海的便是范玮琪的《最初的梦想》:最初的梦想 紧握在手上 最想要去的远方 怎么能在半路就返航。仔...
    天上掉的一只馅饼阅读 1,625评论 0 0
  • 今天,来说说我和杨姑娘吧! “缘分”,这是一个好微妙的词啊! 都说在这个世界上,两个人相遇的可能性是千万分之一,成...
    Alice乐乐阅读 2,812评论 6 4