我正在开始一个项目,我需要实现一个轻量级的解释器。 解释器用于执行简单的科学算法。 该解释器将使用的编程语言应该很简单,因为它针对的是非软件开发人员(例如,数学家)。
解释器应支持基本的编程语言功能:
MathWorks MatLab是我前进的一个很好的例子,更简单。 解释器将用作演示算法的环境;简单算法,例如查找数据集/数组的平均值,或稍微复杂的算法,例如Gaussian elimination或RSA。
我在这个主题上发现的最佳/最实用的资源是Ron Ayoub在Code Project(Parsing Algebraic Expressions Using the Interpreter Pattern)上的条目 - 这是我问题缩小版的一个完美例子。
紫龙书似乎太多了,更实用了什么?
解释器将使用C#实现为.NET库。但是,欢迎任何平台的资源,因为这个问题的设计架构部分是最具挑战性的。
任何实用资源?
(请避免“这不是微不足道”或“为什么要重新发明轮子”的反应)
答案 0 :(得分:10)
我会在ANTLR中写下来。编写语法,让ANTLR生成一个C#解析器。您可以向ANTLR请求解析树,并且解释器可能已经在解析树上运行。也许您必须将解析树转换为更抽象的内部表示(尽管ANTLR已经允许在生成树时忽略不相关的标点符号)。
答案 1 :(得分:2)
听起来可能很奇怪,但Game Scripting Mastery是学习解析,编译和解释代码的绝佳资源。
你应该检查一下:
http://www.amazon.com/Scripting-Mastery-Premier-Press-Development/dp/1931841578
答案 2 :(得分:2)
一种方法是检查现有解释器的源代码。我用D编程语言编写了一个javascript解释器,你可以从http://ftp.digitalmars.com/dmdscript.zip下载源代码
Walter Bright,数字火星
答案 3 :(得分:2)
我建议利用DLR来做到这一点,因为这正是它的设计目标。
答案 4 :(得分:2)
Lua被设计为可由非程序员使用的可扩展解释器。 (第一批用户是巴西石油地质学家,虽然从那时起user base has broadened considerably。)你可以拿Lua并轻松添加你的科学算法,可视化,你有什么。它设计精良,你可以继续完成手头的任务。
当然,如果您真正想要的是建立自己的乐趣,那么其他建议是合理的。
答案 5 :(得分:1)
您是否考虑过使用IronPython?它易于从.NET使用,似乎满足您的所有要求。我知道python在科学编程中非常流行,所以你的用户可能已经熟悉它了。
答案 6 :(得分:0)
这个解释器将使用的编程语言应该很简单,因为它针对非软件开发人员。
我打算在你的问题的这一部分插话。简单的语言不是您真正想要交给非软件开发人员的。精简版语言需要程序员付出更多努力。你真正想要的是一个精心设计和良好实现的领域特定语言(DSL)。
从这个意义上讲,我将介绍诺曼拉姆齐推荐的Lua。它作为高品质DSL的基础享有盛誉。一个记录良好且有用的DSL需要花费时间和精力,但从长远来看,可以节省每个人的时间,因为领域专家可以快速掌握并且需要最少的支持。
答案 7 :(得分:0)
我很惊讶没人提到xtext。它以Eclipse plugin和IntelliJ plugin提供。它不仅提供像ANTLR这样的解析器,还提供DSL所需的整个管道(包括解析器,链接器,类型检查器,编译器)。您可以在Github上查看它的源代码,以了解解释器/编译器的工作原理。
答案 8 :(得分:0)
Silk库刚刚发布到GitHub。它似乎满足了您的大部分要求。这是非常容易使用。只需注册要使用的功能,编写脚本,将其编译为字节码并执行即可。