Compiler construction 可以用高级语言实现编译器吗?

Compiler construction 可以用高级语言实现编译器吗?,compiler-construction,lua,Compiler Construction,Lua,我对低级概念感兴趣,比如操作系统、算法、数学证明软件正确性等 我最感兴趣的是编译器。我开始学习它们,并希望实现一个玩具编译器,以便于学习,也许它会成为一个大东西(你永远不知道,对吧?) 我的目标是实现类似lua的静态类型、线程感知编程语言(第一个目标当然是具有基本堆栈操作的解释器)。我的问题是,我对C、C++或pascal等低级语言没有什么兴趣,我想知道是否可以在动态类型的环境中实现静态类型语言的编译器? 我有兴趣用lua或python实现这样一种语言(不过lua更适合我)。简单的问题:是的,当

我对低级概念感兴趣,比如操作系统、算法、数学证明软件正确性等

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

我的目标是实现类似lua的静态类型、线程感知编程语言(第一个目标当然是具有基本堆栈操作的解释器)。我的问题是,我对C、C++或pascal等低级语言没有什么兴趣,我想知道是否可以在动态类型的环境中实现静态类型语言的编译器?
我有兴趣用lua或python实现这样一种语言(不过lua更适合我)。

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

是的。事实上,最新版本的C#编译器将实现。。。在C#中:

(我说的是罗斯林图书馆:)

这篇文章的基础是一个新的C语言编译器,用C语言编写的。 新的VB编译器也是用VB编写的,有关详细信息,请参阅VB团队博客)

编辑

看看这个:


它是用Python编写的Python实现。

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

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


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

当然,这是可能的。编译器只是一个程序,通常通过语法树将字符串转换为其他字符串,这是大多数高级语言都能做到的。然而,你必须理解你要编译的语言…我建议你试试,看看你能在一天,然后一周内想出什么。一旦你完成了这项工作,你将得到比你从其他任何地方都能得到的更多的问题答案。这一评论也适用于上述回答者:C#和java是静态类型的,它们的编译器是用静态类型语言编写的,但我打算用动态类型语言实现静态类型语言编译器类型化环境。我看不出你为什么不能用动态类型化语言来实现它。Scheme和Smalltalk环境传统上都是自托管的——这对你来说够动态吗?@VanioBegic:我发布了一个链接,指向用Python编写的Python实现。是的,我听说过pypy,我很喜欢这个想法,但讨厌它性能。这就是我选择Lua而不是python的原因。我喜欢Lua的另一个方面是线程,以及它为您提供机制而不是完整功能的方式:D(我说的是LuaJit)