表达式编辑器/解析器/评估器

Expression editor / parser / evaluator

我正在尝试处理一个 C# 项目,我希望允许用户通过在编辑器中键入代码来动态地 运行 编写代码。 因此,考虑到这一点,我考虑编写某种脚本编辑器、解析器和评估器,但想先与其他人核实一下,以防我只是重新发明轮子?

所以,我的想法is/was...

  1. 编写一个语法高亮编辑器,我可以将代码写入其中, 包括使用自定义关键字。
  2. 向编辑器添加逻辑,以便它能够格式化 内容基于编辑器中的文本。
  3. 有办法'actioning'输入的文字。

例如,如果我输入以下...

if (Shape.IsACube())
{
  // Do some cube stuff
}
else if (Shape.Area(height, length, width) > 40)
{
  // Do some large area stuff
}

...那么我希望能够 运行 即时运行该代码,就好像它是应用程序的一部分一样。

我希望所有这些都有意义。有什么想法吗?

您想使用哪种语法?你自己的还是 C#? 如果你只想在运行时编译一些 C# 代码——你可以使用像 CodeDOM 这样的东西。高亮可以通过C# Syntax Highlighter.

实现

如果你想在 terminals/non-terminals 中使用自己的语法 - 你应该使用像 ANTLR4 这样的语法生成器。这样你就会明白大多数 compilers/interpretators 是如何工作的。

主要思想是编写 Lexer(负责输入的标记化)和 Parser(实际上只是列表语法规则,换句话说 'productions')。它会给你完整的 AST,你可以从中 evaluate/highlight 你的文本。许多语言语法已经在您之前用 here 编写,包括 C# 语法(甚至介绍了 ANTLR4 本身)。因此,您可以选择一些并根据需要进行修改。