构建一个简单的解释器

我正在开始一个项目,我需要实现一个轻量级的解释器。 解释器用于执行简单的科学算法。 此解释器将使用的编程语言应该很简单,因为它针对的是非软件开发人员(例如,数学家)。

解释器应该支持基本的编程语言function:

  • 实数,变量,多维数组
  • 二进制(+, – ,*,/,%)和布尔(==,!=,, =)操作
  • 循环(for,while),条件表达式(if)
  • function

MathWorks MatLab是我前进的一个很好的例子,更简单。 解释器将用作演示算法的环境; 简单的算法,如查找数据集/数组的平均值,或稍微复杂的算法,如高斯消元法或RSA 。

我在这个主题上发现的最佳/最实用的资源是Ron Ayoub在Code Project上的条目( 使用解释器模式解析代数表达式 ) – 这是我问题的缩小版本的完美示例。

紫龙书似乎太多了,更实用了吗?

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

任何实用资源?

(请避免“这不是微不足道的”或“为什么要重新发明轮子”的回应)

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

这可能听起来很奇怪,但Game Scripting Mastery是学习解析,编译和解释代码的绝佳资源。

你应该检查一下:

http://www.amazon.com/Scripting-Mastery-Premier-Press-Development/dp/1931841578

一种方法是检查现有解释器的源代码。 我用D编程语言编写了一个javascript解释器,你可以从http://ftp.digitalmars.com/dmdscript.zip下载源代码。

Walter Bright,数字火星

我建议利用DLR来做到这一点,因为这正是它的设计目标。

在DLR上创建自己的语言

Lua被设计为可由非程序员使用的可扩展解释器。 (第一批用户是巴西石油地质学家,尽管从那时起用户群已经大大扩展 。)你可以拿Lua并轻松添加你的科学算法,可视化,你有什么。 它设计精良,您可以继续完成手头的任务。

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

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

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

我打算在你提问的这一部分。 一种简单的语言不是你真正想要交给非软件开发人员的。 精简版语言需要程序员付出更多努力。 您真正想要的是一个设计良好且实施良好的域特定语言(DSL)。

在这个意义上,我将介绍诺曼拉姆齐推荐的Lua。 它作为高品质DSL的基础享有盛誉。 一个记录良好且有用的DSL需要花费时间和精力,但从长远来看,可以节省每个人的时间,因为领域专家可以快速掌握并且需要最少的支持。

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