9

我开始一个项目,我需要实现一个轻量级的解释器。 解释器用于执行简单的科学算法。 (例如,数学家),这个解释器将使用要简单,因为它是针对非软件开发商构建一个简单的翻译器

的解释应该支持基本的编程语言 编程语言的特点:

  • 实数,变量,多维数组
  • 二进制(+, - ,*,/,%)和布尔(!==,=,<,>,< =,> =)操作
  • 路(为,同时) ,条件表达式(if)
  • 功能

MathWorks MatLab是我前往那里的一个很好的例子,只是要简单得多。 解释器将用作演示算法的环境;简单的算法,如查找数据集/数组的平均值,或者稍微复杂的算法,如Gaussian eliminationRSA

我在这个问题上找到的最好的/最实用的资源是Ron Ayoub在代码项目(Parsing Algebraic Expressions Using the Interpreter Pattern)上的条目 - 我的问题缩小版本的完美例子。

紫龙书好像太多了,什么更实用?

解释器将使用C#作为.NET库实现。然而,欢迎任何平台的资源,因为这个问题的设计架构部分是最具挑战性的。

任何实际资源?

(请避开“这不是小事”或“为什么要重新发明轮子”响应)

回答

10

我将它写在ANTLR。编写语法,让ANTLR生成一个C#解析器。您可以ANTLR请求解析树,并且解释器可能已经可以在解析树上运行。也许你必须将解析树转换为更抽象的内部表示(尽管ANTLR在生成树时已经允许省略不相关的标点符号)。

2

一种方式做到这一点是检查现有的解释器源代码。我已经写在d编程语言JavaScript解释器,你可以从下载源代码http://ftp.digitalmars.com/dmdscript.zip

沃尔特明亮,数字火星

1

你有没有考虑过使用IronPython?从.NET使用它很容易,它似乎满足您的所有要求。我知道python在科学编程中非常流行,所以你的用户可能已经熟悉它了。

2

Lua被设计为可供非程序员使用的可扩展解释器。 (第一批用户是巴西石油地质学家,尽管从那时起user base has broadened considerably)。你可以采用Lua并轻松添加你的科学算法,可视化,你有什么。它的设计精良,您可以随时完成任务。

当然,如果你真正想要的是建立自己的乐趣,那么其他建议是合理的。

0

该解释器将使用的编程语言应该很简单,因为它是针对非软件开发人员的。

我要在你的问题的这一部分编钟。一个简单的语言并不是你真正想要交给非软件开发者的。精简语言需要程序员付出更多努力。你真正想要的是一个精心设计和实施的领域特定语言(DSL)。

从这个意义上说,我将继续介绍诺曼拉姆齐推荐的Lua。它作为高质量DSL的基础而享有盛誉。有充分文件记录和有用的DSL需要花费时间和精力,但是从长远来看,当领域专家能够快速加速并且需要最少的支持时,可以节省每个人的时间。

0

我很惊讶没有人提到过xtext呢。它可以作为Eclipse pluginIntelliJ plugin。它不仅提供像ANTLR这样的解析器,而且提供DSL所需的整个管道(包括解析器,链接器,类型检查器,编译器)。您可以在Github上查看它的源代码,以了解解释器/编译器的工作原理。