0

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

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

  1. 编写一个语法高亮编辑器,我可以在其中编写代码,包括使用自定义关键字。
  2. 向编辑器添加逻辑,以便它能够根据编辑器中的文本格式化内容。
  3. 有一种“操作”已输入文本的方法。

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

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

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

我希望所有这些都是有道理的。有什么想法吗?

4

1 回答 1

0

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

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

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

于 2017-04-13T10:30:02.737 回答