能否使用高级语言实现编译器?

我对诸如操作系统、算法、数学证明软件正确性等低层概念非常着迷。

最让我感兴趣的是编译器。我开始学习它们,并希望为了学习而实现一个玩具编译器,也许它会变成什么大东西(你永远不知道,对吧?)。

我的目标是实现一个类似 Lua 的静态类型、线程感知的编程语言(当然,首要目标是带有基本堆栈操作的解释器)。我的问题是我对 C、C++ 或 Pascal 等较低层语言几乎没有兴趣,我想知道在一个动态类型的环境中是否可能实现一个静态类型语言的编译器?

我有兴趣在 Lua 或 Python 中实现这样的语言(虽然 Lua 更适合我)。

点赞
用户659804
用户659804

简单的问题:是的,当然,这是经常这样做的。

大多数编译型语言最终都会被"引导",以使它们自己的编译器是用该语言本身编写的:例如,标准的Java编译器javac就是用Java编写的。

2012-07-29 23:56:44
用户221061
用户221061

是的,事实上,最新版本的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实现。

2012-07-30 00:01:07
用户427762
用户427762
  1. 正如其他人所述,这是可能的,但……
  • 使用编译器时,实现的编程语言和使用的语言之间的耦合通常相当薄弱。
  • 另一方面,各种语言有各自的社区和各自的“专业领域”。对于编写编译器,前沿的函数式编程语言(如Haskell、Ocaml等)拥有更丰富的用例和示例库,您可能想要探索。此外,它们的社区充满程序语言极客,他们乐于分享自己的经验。
  1. 如果您有兴趣编写解释器(或翻译器),那么情况就不同了。主机语言的某些特性强烈影响了您的解释语言中某些特性的实现难度。例如,应用程序顺序、动态作用域和闭包在主机中更容易实现,解释语言遵循相同的规则。
2012-08-01 19:20:22