我对较低级别的概念感兴趣,例如操作系统,算法,数学证明软件正确性等。
最让我感兴趣的是编译器。我开始学习它们并希望为了学习而实现一个玩具编译器,也许它变得很大(你永远都不知道,对吧?)。
我的目标是实现类似lua的静态类型,线程感知编程语言(第一个目标是具有基本堆栈操作的解释器)。我的问题是,我对c,c ++或pascal等低级语言几乎没有兴趣,我想知道是否有可能在动态类型环境中为静态类型语言实现编译器?
我有兴趣在lua或python中实现这样的语言(虽然lua更适合我)。
答案 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的一些特征强烈影响你的解释语言中的一些特征可以实现。例如,应用程序顺序,动态范围和闭包在主机中更容易实现,解释语言遵循相同的规则。