哪些编程语言拥有最容易实现的解释器?

时间:2010-10-13 22:48:51

标签: programming-languages lisp language-design forth

我需要为编程语言实现一个解释器,作为我正在研究的项目的一部分。我不认为这个项目的细节太相关,除了它要求我从头开始实现一个解释器,我不能使用现有的编程语言(要求包括支持便携式分隔连续,并能够编写一个Javascript和Java中的解释器。

显然我宁愿避免发明一种全新的编程语言,所以我希望有一些非常简单的语言可以复制,或者至少从中汲取灵感。

我的第一个想法是Forth或一种基本的类似Lisp的语言,但是我更喜欢这种语言的语法更接近更流行的编程语言,如Java,Python或Ruby。特别是,这意味着支持中缀运算符(a + b),以及a = b变量赋值。

换句话说,我希望这种语言对今天用PHP编程的人感觉相当熟悉,我不相信Forth或Lisp都符合这个标准。

有人可以为这种语言提供任何建议吗?

12 个答案:

答案 0 :(得分:14)

我认为Lisp和Forth有一些最简单的天真翻译。

您可以选择一种简单的动态语言,最难的部分就是构建解析器。例如,JavaScript的子集可能有效。解释器基本上遍历AST并执行每个节点的操作。

无论如何,研究可以嵌入到开发环境中的现有脚本语言,并避免不惜一切代价滚动自己的脚本语言。实现编译器(广义上讲)非常有趣,但从长远来看,维护起来可能很昂贵。

答案 1 :(得分:10)

这听起来像是Lua的工作。

  • 这是一种小型语言,旨在实现简单
  • Java中已有多个implementations,至少在Javascript中正在进行中。
  • 其语法符合您的要求(作业,中缀运算符)。

你留下的工作是实现分隔的延续,但是当你排除Lisp / Scheme时就已经知道了。

答案 2 :(得分:8)

的Tcl。语法和Lisp一样简单,并且它有一个expr proc用于中缀算术。它甚至使用{}作为块,所以如果你恰到好处地斜视,你可以告诉人们它是一种类似C的语言。

它没有中缀赋值a=b,但是一旦你开始使用通用中缀表示法,语言变得非常复杂,所以我不确定它是如何与你的其他要求兼容的。

答案 3 :(得分:6)

SmalltalkIo都有非常简单但富有表现力的语法。

答案 4 :(得分:4)

Logo是一种简单的类似Lisp的语言,没有括号和几百个实现。

Logo information on Wikipedia

有关实施的信息,请参阅此PDF:Logo tree

答案 5 :(得分:3)

Brainfuck?我的意思是它只有8个命令,每个命令映射到一个字符。

答案 6 :(得分:2)

首先构建一个LISP解释器,这将是相对简单。

您将在语言分析方面获得大量经验,而不会受到其他功能要求的限制。

答案 7 :(得分:2)

我认为这对于你自己的教化来说是一种运动,因为它需要一种有用的最终产品。

在这种情况下,我必须同意推荐类似Lisp语言变体的其他人,至少在第一遍时,尤其是如果你之前没有这样做过。

Lua是一种非常流行的脚本语言,需要很小的,而不是特别高效的用户脚本。

您也可以考虑javascript本身(或子集)是否符合您的要求。

另请参阅此处的列表: http://en.wikipedia.org/wiki/Continuation#Programming_language_support

答案 8 :(得分:1)

PCF

答案 9 :(得分:1)

答案 10 :(得分:0)

我建议你从lisp的一个子集开始 - 基本上是car,cdr,cons和quote。确保你有一个处理无效字符的基本扫描程序,然后是无效类型(比如cons需要2个args,第2个必须是列表)。你可以通过基本数据结构的知识来完成这项工作(单独链接列表可以做到这一点,但双重链接或循环更好)。

答案 11 :(得分:0)

如果你使用sweet-expressions,或者至少使用卷曲中缀表示法,你可以使用Lisp子集并且仍然有更自然的表示法:

  • Curly-infix通过将{a + b}读为(+ a b)来添加中缀,并支持传统的函数符号,如f(x)。在SRFI-105中查看更多信息。

  • Sweet-expressions基于卷曲中缀构建,并添加与语法相关的缩进。在SRFI-110中查看更多信息。其网址为http://srfi.schemers.org/srfi-110/(对于SRFI-105,只需将“110”替换为“105”)。

两者都是由Readable Lisp S表达式项目实现的: http://readable.sourceforge.net/

享受!