【问题标题】:How to write a LISP interpreter for actionscript 3?如何为 actionscript 3 编写 LISP 解释器?
【发布时间】:2010-03-23 21:53:55
【问题描述】:

我知道有一个,但是按照我想要的方式实现并不容易。

我想知道解释lisp语言的步骤以及哪些功能是必须实现的。

【问题讨论】:

  • 正如 Vilx 所说,它非常复杂。如果您无法获得已经编写好的按照您的方式运行的程序,那么您自己重写它的机会不大。
  • 我在 as3 方面有很多知识,我从 3 年前就开始使用它,我很确定我至少想尝试一下。

标签: actionscript-3 lisp


【解决方案1】:

首先,您学习 Lisp,然后阅读 LiSP 并且(假设您对 ActionScript 足够了解)您才刚刚开始。 PAIP 也有关于实现 Lisp 解释器和编译器的部分。

要了解通常如何处理它,您可以查看Write Yourself a Scheme in 48 hours。它使用 Haskell 作为实现语言,但它会给你一个想法。

这肯定不会是微不足道的,但它已经经常完成,并且可以从中学到很多东西。

【讨论】:

  • 好吧,我想在这里投票给我的人没有读过 LiSP,也没有尝试过写一个简单的 Lisp 解释器。对于一个最小的 Lisp 解释器,您需要一个阅读器、某种处理环境的方法和七个基本原语。有了这个核心,就可以在 Lisp 本身中构建其余部分。当然,这不会是一个完整的 CL 或 Scheme,但实现一些有用的东西并不是火箭科学。存在如此多方言的原因之一是同音、简单和规则的语法。当然,如果你想要一个合规的 CL 或 Scheme,事情会涉及更多,但这不是 OP 的问题。
  • 我不知道 as3 但如果它与浏览器中的 javascript 足够相似(我认为是),那么语义与 Lisp 非常相似。如果是这样的话,那么大部分工作就是编写一个 s-expression 解析器(不难)和实现 cons 单元格(也不难,它只是一个有两个字段的对象)。
  • @Nathan 在语法上看起来一样,但完全是面向对象的。
  • 我对 as3 也不太了解,但我上面链接的书籍应该很好地涵盖了这个主题。例如,在 PAIP(编译 Lisp)的第 23 章中,显示了对虚拟堆栈机的指令集的编译,LiSP 甚至涵盖了对 C 的编译(如果我没记错的话)。我同意,鉴于现代动态语言,完成一些有用的事情不会那么难。 (当然也取决于动机、技能和人们认为有用的东西)
  • (在他们展示了如何实现解释器之后,主要是 Lisp 内部的 Lisp,但原理可以转移到其他动态语言。)
【解决方案2】:

danlei's recommendations 非常棒。如果你想学习 Lisp,PAIP 是一个更好的选择,因为它会教你很多关于 Common Lisp 和一小部分 Scheme 的知识。

但是,我的建议是从 The Structure and Interpretation of Computer Programs 开始,它至少会教给您与 PAIP 一样多的 Lisp 知识(不过,您不会学到太多关于 AI 的知识),关于如何编写 Lisp 解释器的更长更完整的部分,是一本很棒的书。此外,它还可以在线获取。我必须通过邮件订购 PAIPLiSP

【讨论】:

  • 我同意,应该提到 SICP。 PAIP 和 SICP 都是有启发性的读物(我没有完全研究过它们,但仍然如此),不仅就 Lisp 而言,而且就整个编程而言。
【解决方案3】:

查看“编程语言基础”一书(也称为 EoPL)。

【讨论】:

    【解决方案4】:

    如果你想用更高级的语言实现一个基本的 lisp,你可能会从The Little Schemer 的后面章节中学到一些东西(向你展示如何在 Scheme 中编写一个元循环评估器),全部 WYAS48(向您展示如何在 Haskell 中实现 R5RS 方案)和这些 two Norvig articles(其中他在 Python 中实现了一个基本的类似 lisp 的方法)。

    【讨论】:

      【解决方案5】:

      您可以查看 sporklisp(它是用 vba 编写的 lisp 变体)并在 excel 中工作。

      https://github.com/spoonix/sporklisp

      PS 我已经能够毫无问题地将它移植到 MS Access。

      -----sporklisp作者的注释-------

      很多概念都来自 lisp 向导,尤其是计算机程序的结构和解释 (SICP)、Peter Norvig 的 LisPy 和 JScheme 优秀教程,以及 Christian Queinnec 的 Lisp in Small Pieces。

      【讨论】:

        【解决方案6】:

        我会推荐阅读著名的dragon books 之一。它几乎解释了解析、编译、代码生成、优化等的整个过程

        【讨论】:

        • 你不需要做任何这些事情来编写一个简单的 Lisp 解释器。另外,Dragon Book 很棒,但它并没有教你如何编写解释器。毕竟标题是“编译器设计原则”。
        • 如果你编译或解释,很多东西是共同的。您仍然需要解析,甚至可能将其放入中间代码中(特别是如果您想要任何类型的性能(因为您已经使用了一种性能不太好的语言 (as3)))
        • Lisp“解析”(我们通常称之为“阅读”)非常容易。
        【解决方案7】:

        如果你不得不问 - 你不能这样做。

        实现一种编程语言是一件非常复杂的事情,即使您不必从头开始。而且我认为 Actionscript 不会有很多支持工具/库。最重要的是,LISP 是一种函数式编程语言,除了通常的语言实现之外,还需要相当多的额外技巧才能获得不错的性能。

        【讨论】:

        • 我使用 as3 编写复杂的应用程序,但我从未实现过一种语言,这并不意味着我做不到。
        • 正如我所说 - 它非常复杂。如果您真的想知道,请从学习上下文无关语法和有限状态自动机之类的东西开始。查找解析器和词法分析的维基百科页面,从那里挖掘,直到你理解这些和相关概念,比如你的手背。然后你可能会开始考虑实现自己的编程语言。
        • 这在两个方面是错误的:as3 的语义(根据我的阅读)非常接近 Lisp。函数、垃圾收集等内置结构的重用应该几乎是微不足道的。其次,解析一个简单的 Lisp 并不难。您可以使用简单的递归函数编写一个 s 表达式解析器,必要时将其转换为紧密循环和外部堆栈。无需复杂的解析器或词法分析器。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 2015-03-25
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        相关资源
        最近更新 更多