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

Programming languages 哪些编程语言有最容易实现的解释器?,programming-languages,lisp,language-design,forth,Programming Languages,Lisp,Language Design,Forth,我需要为编程语言实现一个解释器,作为我正在进行的项目的一部分。我不认为这个项目的细节太重要,除了它要求我从头开始实现一个解释器,我不能使用现有的编程语言(要求支持可移植分隔的continuation,并且能够用Javascript和Java为它编写解释器) 显然,我宁愿避免发明一种全新的编程语言,所以我希望有一种非常简单的语言可以复制,或者至少可以从中获得灵感 我的第一个想法是Forth或一种基本的类似Lisp的语言,但是我更喜欢这种语言的语法更接近于更流行的编程语言,如Java、Python或

我需要为编程语言实现一个解释器,作为我正在进行的项目的一部分。我不认为这个项目的细节太重要,除了它要求我从头开始实现一个解释器,我不能使用现有的编程语言(要求支持可移植分隔的continuation,并且能够用Javascript和Java为它编写解释器)

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

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

换句话说,我希望现在用PHP编程的人对这种语言相当熟悉,我不相信Forth或Lisp符合这一标准


有人能为这样一种语言提供一些建议吗?

我认为Lisp和Forth有一些最简单、最天真的口译员

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


在任何情况下,研究可以嵌入到开发环境中的现有脚本语言,并避免不惜一切代价使用自己的脚本语言。实现编译器(从广义上讲)是非常有趣的事情,但从长远来看,维护它可能会很昂贵。

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

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


您将在语言解析方面获得大量经验,而不会受到其他功能需求的阻碍。

我认为这既是一种对有用的最终产品的渴望,也是一种对您自己的启发

在这种情况下,我必须同意其他人的意见,他们建议在类似Lisp的语言上使用变体,至少是第一次,特别是如果您以前没有这样做过的话

Lua是一种非常流行的脚本语言,用于这种需要小而不是特别高性能的用户脚本的事情

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

请参阅以下列表:
我建议您从lisp的子集开始——基本上是car、cdr、cons和quote。确保您有一个基本的扫描器来处理无效字符,然后是无效类型(比如cons需要2个参数,第二个必须是列表)。您可以通过了解基本数据结构来实现这一点(仅链表就可以做到,但双链接或循环更好)。

Tcl。语法与Lisp一样简单,它有一个用于中缀算术的
expr
proc。它甚至对块使用
{}
,因此,如果你斜视得恰到好处,你可以告诉人们这是一种类似C的语言


它没有中缀赋值
a=b
,但是一旦你开始使用通用中缀符号,语言就会变得非常复杂,非常快,因此,我不确定这是否与您的其他需求兼容。

两者都有非常简单但表达力强的语法。

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


有关实现的信息,请参阅此PDF:。

这听起来像是一项工作

  • 它是一种小型语言,旨在简单地实现
  • Java中已经有几个,至少Javascript正在开发中
  • 其语法符合您的要求(赋值、中缀运算符)

您剩下的工作是实现分隔的连续体,但当您排除Lisp/Scheme时,您已经知道了这一点。

您可以使用Lisp子集,如果您使用sweet表达式,或者至少使用卷曲中缀表示法,您仍然可以使用更自然的表示法:

  • 卷曲中缀通过将{a+b}读作(+ab)来添加中缀,并支持传统的函数表示法,如f(x)。详见SRFI-105

  • Sweet表达式建立在卷曲中缀的基础上,并添加语法相关的缩进。更多信息请参见SRFI-110。其URL为(对于SRFI-105,只需将“110”替换为“105”)

这两者都已由可读的Lisp S-expressions项目实现:


享受吧

-1表示希望使PHP相似;)把它扼杀在萌芽状态。我不想让一个PHP与之相似,我只是想让用PHP编程的人合理地熟悉一些东西。几周前做了一个……很有趣。还有一些像pbrain这样的扩展也添加到了项目中。我认为编写一个优化的JIT编译器会很有趣,但是后来我被工作分散了注意力……是的,我想当你考虑“试图为人们设计一种语言来实际使用”部分时,它并不能完全回答这个问题。理智,不是。它的目的是为图灵完整编程语言提供尽可能最小的编译器。我想+1一个TCL答案,但编写一个完整的TCL解释器并不是那么容易。您可以非常简单地获得该语言的一个适度核心,但是TCL包含许多子语言,例如,您提到的expr命令。任何真正的程序都必须支持expr,因为它出现在if命令中,所以实际上您必须在类似shell的语言(即TCL endekalogWell)之上实现一种类似C的语言,他确实说过“或者至少从中汲取灵感”,并且TCL兼容性不是一个硬性要求。另外,由于
expr
看起来与任何其他进程都非常相似,因此它不需要完全是i