有可能用高级语言实现编译器吗



我对操作系统、算法、数学证明软件正确性等较低级别的概念很感兴趣。

最吸引我的是编译器。我开始学习它们,并希望为了学习而实现一个玩具编译器,也许它会成为一件大事(你永远不会知道,对吧?)。

我的目标是实现类似lua的静态类型、线程感知编程语言(第一个目标当然是具有基本堆栈操作的解释器)。不过,我的问题是,我对c、c++或pascal等较低级别的语言几乎没有兴趣,我想知道是否有可能在动态类型环境中实现静态类型语言的编译器?

我有兴趣在lua或python中实现这样一种语言(不过lua更适合我)。

简单的问题:是的,当然,它一直都在做。大多数编译后的语言最终都是"自举"的,因此它们自己的编译器是用语言本身编写的:例如,标准Java编译器javac是用Java编写的。

是的。事实上,最新版本的C#编译器将被实现。。。在C#中:http://blogs.msdn.com/b/csharpfaq/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

(我说的是Roslyn C#库:)

这项工作的基础是一个新的C#编译器,用C#编写(和新的VB编译器也是用VB编写的,有关详细信息,请参阅VB团队博客)。

编辑

看看这个:https://bitbucket.org/pypy/pypy

它是用Python编写的Python的实现。

正如其他人所指出的,是的,这是可能的,但。。。

1-对于编译器,通常要实现的编程语言和用于实现的语言之间的耦合非常小。另一方面,各种语言有不同的社区和不同的"专业领域"。对于编写编译器,前端函数式编程语言(Haskell、Ocaml等)有更丰富的用例和示例库,您可能想探索一下。此外,他们的社区充满了编程语言极客,他们非常乐意分享自己的经验。

2-如果你对写一个口译员(或翻译)感兴趣,那么故事就不一样了。主机langague的一些特性强烈影响切换的易用性。您的解释语言中的一些特性可以实现。例如,应用程序顺序、动态作用域和闭包在宿主中更容易实现,解释语言遵循相同的规则。

最新更新