2012-07-29 100 views
3

我对底层概念比如操作系统,算法,数学证明软件正确性等很感兴趣。是否可以用高级语言实现编译器?

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

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

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

+6

当然,这是可能的。编译器只是一个将字符串转换为其他字符串的程序,通常通过语法树,这是大多数高级语言可以做到的。但是,您必须了解您正在编译的语言*为* ... – 2012-07-29 23:55:54

+0

我建议您尝试一下,看看您可以在一天内找到什么,然后再查看一周。一旦你完成了它,你将会得到比你从其他任何地方都能获得的问题更多的答案。 – 2012-07-30 00:23:27

+0

[是](https://www.google.de/search?hl=de&q=Compiler+in+lua&sei=8c0WUJS3DoTPhAfsooCQAg&gbv=2)。 – 2012-07-30 18:09:35

回答

6

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

2

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

(我说的是罗斯林C#库:)

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

编辑

检查了这一点:https://bitbucket.org/pypy/pypy

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

+0

此评论也发送至上述回答者: C#和java是静态类型的,它们的编译器是用静态类型语言编写的,但我打算在静态类型化环境中实现静态类型的语言编译器。 – 2012-07-30 00:07:22

+0

我不明白为什么你不能用动态类型语言来做它。 – 2012-07-30 00:08:54

+1

Scheme和Smalltalk环境传统上一直是自我托管的 - 对你来说是否足够动态? – 2012-07-30 00:17:08

-1

至于其他人都指出,是的,这是可能的,但是......

1-有了一个编译器,通常实施的编程语言和用于执行该实现的之间的耦合是非常薄。另一方面,各种语言有不同的社区和各种“专业领域”。对编写编译器而言,前面的函数式编程语言(Haskell,Ocaml等等)有更丰富的用例和例子库,你可能想要探索一下。他们的社区也充斥着编程语言极客非常乐意分享他们的经验。

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

相关问题