用Python编写第一个解释器 - 选择OCaml语言

时间:2012-07-15 18:33:44

标签: python parsing compiler-construction ocaml interpreter

我正在阅读P. Norvig用Python编写的Scheme解释器代码,我想尝试用Python编写一个解释器。这恰好是帖子的主题:What language can a junior programmer implement an interpreter for it?。但是,我非常有兴趣学习OCaml很长一段时间,如果我为OCaml做出决定,这可能是正确的时机。

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

如果OCaml不合适,你个人会建议什么?

你能否为OCaml提供一个好的参考(甚至:写一个OCampl解析器/解释器)。

##编辑

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

谢谢和问候

4 个答案:

答案 0 :(得分:7)

你好像在说你想用Python创建一个OCaml解释器(不是OCaml中的Python解释器,对吧?)。在我看来,OCaml本身对于教育项目来说是一个太大的语言。我会选择一种更小的语言。这就是为什么Scheme是一个不错的选择 - 核心语言非常小。

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

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

答案 1 :(得分:4)

如果你想要很好地介绍OCaml的语义基础(理论上的一点点),你应该看看DidierRémy的书Using, Understanding, and Unraveling The OCaml Language

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

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

答案 2 :(得分:3)

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

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

此外,您可以订阅Coursera.org的编译器课程,广告在那里构建一个非常复杂的解释器。

我建议你编写一个scheme / lisp的解释器,因为你不需要处理解析,而python的工作原理与它们完全相同。

答案 3 :(得分:0)

How to write an interpreter (in Python)

这是我之前在本地Python聚会上发表类似演讲后的视频。在视频中,我在一小时内在Python中实现了一个小函数语言。这可能是一个很好的起点。