代码之家  ›  专栏  ›  技术社区  ›  Abdulsattar Mohammed

正在为f_编写编译器hello world吗?[关闭]

f#
  •  4
  • Abdulsattar Mohammed  · 技术社区  · 15 年前

    我不相信看到 this . 它说:

    在四月,克里斯托法·史密斯将展示在F.*中编写一个Java到x86编译器。

    演示可能会持续一到两个小时,这肯定不足以写下 编译程序 . 我听说F很强大,但是 强大?

    好吧,我想问的是:你能用f写一个编译器吗?

    4 回复  |  直到 11 年前
        1
  •  16
  •   Jon Skeet    15 年前

    在一个项目的演示过程中,给出一个项目的演示和实现整个项目是不同的。

    在一个小时内,可以很好地呈现Java到x86编译器的一些有趣的方面,甚至可以显示一些代码:但这与在那时和那里创建所有代码不一样。

        2
  •  18
  •   Jörg W Mittag    15 年前

    让我们先从一些修正开始:

    • 它不是Java编译器,它是一个小型编译器。 子集 Java的。
    • 它没有指出编译器将在哪里 书面的 在那个时候,只有 解释 .
    • 事实上,它甚至没有说,它说,它会 提出了 . 见鬼,我可以在3分钟内呈现GCC。这不会是一个非常 有用的 演讲,但这将是一个演讲。

    也就是说,用一种非常适合在一小时内编写编译器的语言为一种简单语言解释一个结构良好、简单的编译器是绝对可行的。

    F是ML语言家族的成员(特别是OCAML的近亲),这些语言确实非常适合编写编译器。事实上, 原因 罗宾·米尔纳之所以选择ML(元语言)作为他的语言,是因为 特别设计 用于编写编译器。编译器基本上是一个大函数(因此在函数语言中实现是非常自然的),它检测模式(因此在模式匹配的语言中实现是非常自然的),并为它检测到的每个模式执行一点代码(因此在具有一流函数的语言中实现是非常自然的)。ONS)。那现在怎么办?F是一种功能性语言,具有非常复杂的模式匹配功能。另一个不错的特性是一个具有代数数据类型和区分联合的表示型系统,这使得表示抽象语法树非常容易。

    在lang.net研讨会上,Jason Olson a talk on F# 在这个过程中,他展示了一些他目前正在研究的解释程序片段,这些片段很好地展示了这些特性。

    Fredrik Holmstr_¶M目前正在研究 IronJS 是动态语言运行时的ECMAScript 3实现。看看 code 特别是 AST types 还有一些 analysis parsing 代码。

    Jonathan Tang's Write Yourself a Scheme in 48 Hours 这是另一个编写解释器的好例子,这次在与f_共享许多特性的haskell中。

    The 90 Minute Scheme to C compiler by Marc Feeley 是关于用Scheme编写的方案编译器的演示文稿。

    Implementing Scheme in Ruby 詹姆斯·科格兰教授观众方案,实时代码,并用Ruby解释方案解释器,并编写了几个示例方案程序,全部只需15分钟。

        3
  •  8
  •   Tomas Petricek    15 年前

    Java是一种相当复杂的语言,所以我认为克里斯不会实现完整的Java编译器。然而,他的谈话确实指出,使用代码(和一般的树型结构)进行操作是 许多的 在F中比在任何其他.NET语言中都容易。这就是为什么F被用于各种静态分析工具(如微软的静态驱动验证程序)的原因。

    像fslex和fsyacc这样的工具可以很容易地为一种语言编写解析器。克里斯有 blog with simple mathematical expressions . 罗伯特·皮克林写道 a more sophisticated example 它只需要几行代码就可以生成IL代码(将数学表达式编译为.NET)。如果使用表达式树生成代码,在.NET 4.0上更容易实现这一点。

    所以我想,即使他是从头开始编写编译器,他也可以为一个语言编写编译器,这个语言可以用来编写非平凡的示例程序。

        4
  •  5
  •   J D    13 年前

    你能用F语言写一个编译器吗?

    在过去的一周里,我用F语言编写了两个小型编译器,每一个都用了那么多时间。是的,这是可以做到的。 Here 就是其中之一。

    注意,F派生的ML语言系列是专门为此应用程序设计的(元编程)。