2

我正在阅读 P. Norvig 用 Python 编写的 Scheme 解释器的代码,我想尝试用 Python 编写一个解释器。这恰好是帖子的主题:初级程序员可以为它实现解释器的语言是什么?. 但是,我长期以来对学习 OCaml 非常感兴趣,如果我下定决心学习 OCaml,那可能是一个合适的时机。

我应该付出很多努力来实现 OCaml 语言的 Python 解释器吗?这只是一个个人项目,我的目标(除了学习 OCaml)主要是练习我在编译器和解释器上阅读的内容。

如果 OCaml 不适合,您个人有什么建议?

您能否暗示 OCaml 的良好参考(甚至:编写 OCaml 解析器/解释器)。

## 编辑

Lua / Ruby / BASIC 怎么样?(因为我也想学这些)

谢谢并恭祝安康

4

4 回答 4

7

您似乎在说您想在 Python 中创建一个 OCaml 解释器(不是 OCaml 中的 Python 解释器,对吗?)。在我看来,OCaml 本身是一种太大的语言,无法为教育项目选择。我会选择一种小得多的语言。这就是为什么 Scheme 是一个不错的选择——核心语言非常小。

使用 OCaml,您还可以进行类型推断,这非常值得学习,但又是一个相当大的话题。

对于一些小的和有点 ML-ish 的东西,你可以从无类型的 lambda 演算开始。这是一个非常常见的测试用例。

于 2012-07-15T18:41:56.540 回答
5

如果你想很好地介绍 OCaml 的语义基础(一点理论),你应该看看Didier Rémy的《使用、理解和解开 OCaml 语言》一书。

编写一个完整的 OCaml 语言的实现将是相当多的工作,但是编写一个合理的子集的实现是可行的,例如,作为一个学期项目。

鉴于 ML 语言非常擅长符号操作(解释器、编译器、分析器、证明检查器......),在 OCaml 中编写 Python 实现可能比在 Python 中编写 OCaml 实现更有趣——这可能解释了一些混乱你的问题。

于 2012-07-15T23:55:47.113 回答
3

你可以从麻省理工学院 Gerald Sussman 的 SICP 开始阅读,在第 4 章中,你将构建一些用于不同目的的解释器。在第 5 章中,您将构建编译器。

另外,尝试阅读 GNU/Emacs 的源代码,它有一个很好的 elisp 解释器。

此外,您可以订阅 coursera.org 的编译器课程,在那里构建一个相当复杂的解释器。

我建议你写一个scheme/lisp的解释器,因为你不必处理解析,而python的工作方式与这些完全一样。

于 2012-07-15T19:14:37.820 回答
0

如何编写解释器(在 Python 中)

这是我不久前在当地 Python 聚会上发表类似演讲后制作的视频。在视频中,我在一小时内用 Python 实现了一种小型函数式语言。这可能是一个很好的起点。

于 2013-07-10T20:50:13.157 回答