是否可以用高级语言实现编译器?

时间:2012-07-29 23:53:07

标签: compiler-construction lua

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

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

答案 2 :(得分:-1)

正如其他人所指出的那样,是的,这是可能的,但是......

1-使用编译器,通常实现的编程语言与用于实现的编程语言之间的耦合非常薄。 另一方面,各种语言具有各种社区和各种“专业领域”。对于编写编译器,前端函数编程语言(Haskell,Ocaml等)具有更丰富的用例和示例库,您可能想要探索它。他们的社区也充满了编程语言极客非常乐意分享他们的经历。

2 - 如果你有兴趣写一个翻译(或翻译),那么故事是不同的。主持人langague的一些特征强烈影响你的解释语言中的一些特征可以实现。例如,应用程序顺序,动态范围和闭包在主机中更容易实现,解释语言遵循相同的规则。