Lexer的Clojure实现


编译原理的大作业是写一个简单绘图语言的编译器。我打算用lisp来写这个东西,于是还是我熟悉一点的Clojure就好了,其中遇到了很多麻烦的事情,有很大一部分是不熟悉Java的API,然而当时在写的时候,旁边是写安卓的Boiler Yao强者。这里就记一下遇到的别的问题好了。

这篇是记录完成lexer的过程。因为实现比较简单,打算连着Clojure建立项目的部分一起在这里总结一下。

阅读全文

Linux 4.x 添加系统调用


学校学习操作系统,上机使用的环境是Ubuntu 10.4,内核上也就是Linux 2.6,但是现在Linux内核版本已经4.x了啊喂。主要更难过的是,上机给的示例代码在4.x的机子上根本就没法运行,因为系统调用的接口已经变了。就这样我也就忍了,自己找找新的接口定义也就完了。

结果接下来要求添加一个系统调用,这回好了,添加系统调用的文件夹直接就不存在。到网上去找也是各种最高才到3.x的教程,简直没有办法能做下去,幸而再后来还是找到了一两篇中文的教材,没至于沦落到啃英文手册的地步,不过看来自己是非总结一下不可了。

阅读全文

chibi-scheme源码阅读1


某学校编译原理讲课重点集中在编译器的前端,也就是文法分析、语义分析什么的上面,讲得实在繁琐,感觉自己更想去接受语法纯粹一点的Lisp。

同时也是非常好奇,Lisp的编译过程是怎么实现的呢,于是就决定读一下Lisp的源代码。

阅读全文

lisp解释器实现 (3)


讲述如何实现匿名函数。

阅读全文

lisp解释器实现 (2)


介绍一下Lisp中的变量与环境的概念。

阅读全文

lisp解释器实现 (1)


昨天实现了一个解释器,感觉这个东西需要记录一下,不然大概会忘得一干二净(也是咸鱼了好久没有写博客了)

阅读全文

姐姐的启示录1

记录姐姐对我的教诲。颤抖吧,人类。

阅读全文

二维数组与二维指针


今天在科协和罗阳豪大佬关于二维数组和指针的用法上产生了一点分歧。

在谈到二维数组和指针的时候,我们都认同二维数组不应该等同于指针。然而在二维数组是不是一个指向分配地址空间第一位的二维指针的问题上,罗大佬却提出了这样的一种观点:就是二维数组是指向一个一维指针数组的指针,然后一维指针数组的各个元素再指向数组的每一列。

然而我却觉得,作为一个栈空间存在的东西,数组名应该就是一个指向存储体本身的指针。

阅读全文

Gentoo杂项1

对Gentoo里面的东西是渐渐了解的,然后这些可能不足以单独写成一篇博客,所以还是决定一点点来收集和总结,于是有了这一个系列

阅读全文

搭建Ngrok服务器

ngork是提供内网穿透的一个工具。要使用这个的原因大致是因为装着Gentoo的那台电脑太重了,不方便带到宿舍外去,但是在宿舍外又想配置刚弄好的系统…所以我至少需要连接到出于宿舍Wi-Fi里的Gentoo上。

ngrok原本是又一个官方的网站,即默认走官方的路线,用个客户端即可的。但是出于众所周知的原因,原本的ngrok官网不能使用了。国内虽然有替代的网站,但是好像或多或少都有一点盈利方面的倾向,感觉用得不会很愉快。

ngrok这个东西服务器和客户端都是开源的,因而觉得自己搭就可以。

阅读全文