Ruby

[翻译] 用 Ruby 写编译器之六:匿名函数 lambda

原文链接:http://www.hokstad.com/writing-a-compiler-in-ruby-bottom-up-step-6.html


既然上次已经提到说,我们其实是在从 Lisp、Scheme 还有类似的其他语言中借鉴各种要实现的功能(我没想过要把这个项目做成原创的⋯⋯或者至少也要等到以后再说吧),那么现在也是时候实现一些更加强大的功能了。

那就来做延迟求值以及匿名函数吧

Lambda ,又名匿名函数,可以像普通的数值或者字符串类型那样被当作函数参数来到处传递,也可以在需要的时候才调用(当然不调也可以)。同时,外层函数(也就是定义匿名函数的函数)作为它们的运行环境,在其中定义的局部变量可以被这些匿名函数所访问。这就形成了[一个闭包](http://en.wikipedia.org/wiki/Closure_(computer_science))。我们这次**并不是**要实现完整的闭包功能,只是开头的一小步而已,完整的实现要等到再后面了。

[翻译] 用 Ruby 写编译器之五:整数常量,以及 if 语句

原文链接:http://www.hokstad.com/writing-a-compiler-in-ruby-bottom-up-step-5.html


上次我承诺会发布的更快一些,不过还是失败了⋯⋯作为补偿,这章的内容将会是原计划中的第 5,6,7 章内容的合并,因为这三章确实都很短。闲话少叙:

处理数字常量

到目前为止,我们只处理了一些实现所必须的数字常量,也就是当一个外部函数的返回值是数字的情况,而且没有做任何形式的类型检查。

[翻译] 用 Ruby 写编译器之四:自定义函数,以及运行时支持

原文链接:http://www.hokstad.com/writing-a-compiler-in-ruby-bottom-up-step-4.html


抱歉,又拖了很长时间。要忙的事情实在很多。正如上一篇文章末尾提到的那样,这次要讲的是自定义函数,以及一个简单的“运行时库”。

自定义函数

一门编程语言如果连函数和方法都没有的话,那也就不能算是一门语言了。而且,实践表明,一门面向对象语言中的所有特性都可以通过过程式的语言要素来实现:一个方法也只不过是以一个对象为额外参数的函数而已。因此,增加对函数的支持就是实现一门语言的核心所在。

[翻译] 用 Ruby 写编译器之三:语句序列,以及子表达式

原文链接:http://www.hokstad.com/writing-a-compiler-in-ruby-bottom-up—step-3.html


我本来是想要早点发表的,可是我这周又不行了 – 虽然整理一篇旧文只需要半个小时。不管怎样,这是第三章,而且我会在末尾大概列一下之后的大纲。由于我会试着把一些小的步骤组合成更有内容的章节(下面就有个这样的例子),因此原来的 30 篇文章已经被我给减到了 20 篇左右(当然,这只是我已经完成了的,后面还有新的呢)。

[翻译] 用 Ruby 写编译器之二:函数调用,以及 Hello World

原文地址:http://www.hokstad.com/writing-a-compiler-in-ruby-bottom-up-step-2.html


我会选择 Ruby 来作为我的实现语言并没有什么特别的理由。在现阶段,语言的选择并不重要;不过,我确实很喜欢 Ruby。

在这之后,我会采取一系列的步骤令所实现的语言向其实现语言靠拢。我的意思是,我想将编译器实现为可以自举的,即它应该能够编译自身。

而这也就意味着,要么我的编译器需要至少支持 Ruby 语言的一个子集,要么就需要一个中间的翻译步骤,来将编译器中的实现翻译成它自己可以编译的语言。

[翻译] 用 Ruby 写编译器之零

这是一个国外的编译器达人写的一系列教程,内容为用 Ruby 语言,以自底向上的方式开发一个 Ruby 语言的编译器。这个教程非常适合于实战派的程序员。该教程的入口见这里,其代码见这里

我会试着翻译一下这个教程。由于这个项目之后又有了很大的进展,而教程本身却又已经很久没有更新了,所以之后我可能也会自己总结一下那些最新的开发工作。