C# 构造一个简单的解释器
我正在启动一个项目,需要实现一个轻量级的解释器。 解释器用于执行简单的科学算法。 这个解释器将使用的编程语言应该很简单,因为它面向的是非软件开发人员(例如数学家) 解释器应支持基本编程语言功能:C# 构造一个简单的解释器,c#,architecture,compiler-construction,programming-languages,C#,Architecture,Compiler Construction,Programming Languages,我正在启动一个项目,需要实现一个轻量级的解释器。 解释器用于执行简单的科学算法。 这个解释器将使用的编程语言应该很简单,因为它面向的是非软件开发人员(例如数学家) 解释器应支持基本编程语言功能: 实数、变量、多维数组 二进制(+,-,*,/,%)和布尔(=,!=,=)运算 循环(for、while)、条件表达式(if) 功能 这是我前进方向的一个很好的例子,只是简单得多。 解释器将用作演示算法的环境;简单的算法,如查找数据集/数组的平均值,或稍微复杂一些的算法,如或 我在这个主题上找到的最好
- 实数、变量、多维数组
- 二进制(+,-,*,/,%)和布尔(=,!=,=)运算
- 循环(for、while)、条件表达式(if)
- 功能
(请避免“这不是小事”或“为什么要重新发明轮子”的回答)我会把它写进去。编写语法,让ANTLR生成一个C#解析器。您可以ANTLR请求解析树,并且解释器可能已经可以对解析树进行操作了。也许您必须将解析树转换为更抽象的内部表示形式(尽管ANTLR已经允许在生成树时省略不相关的标点符号)。这听起来可能有些奇怪,但掌握游戏脚本是学习解析、编译和解释代码的一个很好的资源 你应该好好看看:
一种方法是检查现有解释器的源代码。我已经用D编程语言编写了一个javascript解释器,您可以从
Walter Bright,Digital Mars我建议利用DLR来实现这一点,因为这正是它的设计目的 您考虑过使用吗?它很容易从.NET中使用,而且似乎满足了您的所有要求。我知道python在科学编程方面相当流行,所以您的用户可能已经熟悉它了。被设计为可扩展的解释器,供非程序员使用。(最早的用户是巴西石油地质学家,尽管从那时起就没有了。)你可以使用Lua,轻松添加你的科学算法、可视化,以及你拥有的东西。它的设计非常出色,你可以继续完成手头的任务 当然,如果你真正想要的是建立自己的乐趣,那么其他的建议是合理的 这个解释器将使用的编程语言应该很简单,因为它面向的是非软件开发人员 我将插话回答你问题的这一部分。简单的语言并不是您真正想要交给非软件开发人员的。精简的语言需要程序员付出更多的努力。您真正想要的是一种设计良好、实现良好的领域特定语言(DSL)
从这个意义上说,我将支持诺曼·拉姆齐对卢阿的建议。它作为高质量DSL的基地享有良好的声誉。一个记录良好且有用的DSL需要花费时间和精力,但从长远来看,当领域专家能够快速提高速度并需要最少的支持时,它将为每个人节省时间。我很惊讶还没有人提到。可按和提供。它不仅提供像ANTLR这样的解析器,还提供DSL所需的整个管道(包括解析器、链接器、类型检查器、编译器)。您可以在Github上查看它的源代码,了解解释器/编译器是如何工作的。该库刚刚发布到Github。它似乎做了你要求的大部分事情。它很容易使用。只需注册您想要为脚本提供的函数,将脚本编译成字节码并执行即可。这本书太棒了!书中描述的脚本语言是用C语言实现的,有趣的是,Alex Varanese和我很早以前就开始讨论irc了,我们年轻时经常在irc上聊天。很有趣,他现在是作家了。他是x86汇编的大师。