【问题标题】:Is it possible to implement a compiler in high level language?是否可以用高级语言实现编译器?
【发布时间】:2012-07-29 23:53:06
【问题描述】:

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

最让我感兴趣的是编译器。我开始了解它们,并希望为了学习而实现一个玩具编译器,也许结果证明这是一件大事(你永远不知道,对吗?)。

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

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

【问题讨论】:

  • 当然,这是可能的。编译器只是一个将字符串转换为其他字符串的程序,通常通过语法树,这是大多数高级语言都可以做到的。但是,您必须了解您正在编译的语言 to...
  • 我建议您尝试一下,看看您能在一天内弄清楚什么,然后一周。完成后,您将获得比从其他任何地方获得的更多问题的答案。
  • Yes.

标签: compiler-construction lua


【解决方案1】:

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

【讨论】:

    【解决方案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 Team 博客。

    编辑

    看看这个:https://bitbucket.org/pypy/pypy

    它是用 Python 编写的 Python 实现。

    【讨论】:

    • 此评论也适用于上述回答者:C# 和 java 是静态类型的,它们的编译器是用静态类型语言编写的,但我打算在动态类型环境中实现静态类型语言编译器。
    • 我看不出你不能用动态类型语言来做这件事的原因。
    • Scheme 和 Smalltalk 环境传统上是自托管的——这对您来说足够动态吗?
    • @VanioBegic:我发布了一个用 Python 编写的 Python 实现的链接。
    • 是的,我听说过 pypy,我真的很喜欢这个想法,但讨厌它的性能。这就是我选择 Lua 而不是 python 的原因。另外,我喜欢 lua 的原因是线程以及它为您提供机制的方式和功能不完整:D(我说的是 LuaJit)
    【解决方案3】:

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

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

    2-如果您对编写口译员(或笔译员)感兴趣,那么故事就不同了。宿主语言的某些特性会强烈影响您的解释语言中的某些特性的易用性。例如、应用程序顺序、动态范围和闭包在宿主中更容易实现,解释语言遵循相同的规则。

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2014-12-14
      • 2014-09-17
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2010-12-19
      • 2010-10-15
      相关资源
      最近更新 更多