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

时间:2017-04-13 10:22:50

标签: c# parsing expression editor evaluator

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

所以,我的想法是......是......

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

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

    ...然后我希望能够动态运行该代码,就像它是应用程序的一部分一样。

    我希望所有这一切都有道理。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您想要使用哪种语法语法?你自己还是C#? 如果您只想在运行时编译一些C#代码 - 您可以使用 CodeDOM 之类的东西。可以通过 C#语法高亮显示器来实现突出显示。

如果你想要自己的终端/非终端语法 - 你应该使用 ANTLR4 等语法制作者。通过这种方式,您将了解大多数编译器/解释器的工作原理。

主要思想是你写 Lexer (负责输入的标记化)和 Parser (实际上只是语法规则列表,'制作'换言之)。它将为您提供完整的AST,您可以从中评估/突出显示您的文本。许多语言语法已经在 here 中编写,包括C#语法(甚至是ANTLR4本身)。因此,您可以选择一些并根据您的需要进行修改。