我正在尝试使用C#项目,我希望允许用户通过在编辑器中键入代码来动态运行代码。 因此,考虑到这一点,我考虑过编写某种脚本编辑器,解析器和评估器,但是想先与其他人核实,以防我只是重新发明轮子?
所以,我的想法是......是......
例如,如果我输入以下内容......
if (Shape.IsACube())
{
// Do some cube stuff
}
else if (Shape.Area(height, length, width) > 40)
{
// Do some large area stuff
}
...然后我希望能够动态运行该代码,就像它是应用程序的一部分一样。
我希望所有这一切都有道理。有什么想法吗?
答案 0 :(得分:0)
您想要使用哪种语法语法?你自己还是C#? 如果您只想在运行时编译一些C#代码 - 您可以使用 CodeDOM 之类的东西。可以通过 C#语法高亮显示器来实现突出显示。
如果你想要自己的终端/非终端语法 - 你应该使用 ANTLR4 等语法制作者。通过这种方式,您将了解大多数编译器/解释器的工作原理。
主要思想是你写 Lexer (负责输入的标记化)和 Parser (实际上只是语法规则列表,'制作'换言之)。它将为您提供完整的AST,您可以从中评估/突出显示您的文本。许多语言语法已经在 here 中编写,包括C#语法(甚至是ANTLR4本身)。因此,您可以选择一些并根据您的需要进行修改。