有没有办法将编译器放在程序中?

时间:2012-04-03 06:07:44

标签: c#

我正在开发一款游戏机器人。我想在那里放置类似脚本编写器的东西,我的程序正在从游戏的内存中读取所有需要的东西,而且我有所有的游戏对象。我想在我的程序中添加一些内容,允许用户创建自己的脚本。

例如

foreach (character ch in characters_on_screen)
{
if (ch.burning()) {game_say("burning!");}
}

我真的不知道它是否难以制作,这就是为什么我在这里写作:P,我在c#工作,我认为脚本语言并不重要,因为所有的游戏脚本都不会我觉得很难 那么最简单的方法是什么? (如果有的话) 谢谢:))

P.S。 我还想知道是否有办法禁用多个功能,比如创建文件等。

4 个答案:

答案 0 :(得分:2)

查看csscript

答案 1 :(得分:2)

您可以选择几种方式。

  1. 如果你想创建一种非常专业的脚本语言,你基本上必须实现一种。这需要创建语义,词法,语法分析器,将您的字符串输入转换为委托链。
  2. 您是否想要毫不费力地创建一种非常专业的语言,您可以搜索现有的框架。
  3. 您可以使用现有的编程语言来描述操作,例如C#(并使用Roslyn编译器),FreePascal,JS,Python / Ruby(并使用DLR脚本引擎来执行ruby / python代码)。
  4. 我个人会使用python / ruby​​实现。它们是动态语言,具有足够的功能和能力,可以根据特定语言进行自定义。

    您可能还想查看以下SO帖子:thisthis

答案 2 :(得分:1)

您还可以使用C#编译器在运行时编译C#代码。查看Microsoft.CSharp命名空间中的运行时补充类。

还有一个教程here

通过这种方式,如果您愿意,可以尝试将输入视为santise;它只需要字符串。以及实施接口等限制。

答案 3 :(得分:1)

我会使用JavaScript。它更安全(例如,没有文件系统访问)并且易于编写。 JavaScript .NET是V8引擎的一个很好的包装器。

还有IActiveScript COM接口,可用于托管任何实现IActiveScript的基于COM的脚本语言(例如VBScript,JScript [旧的5.x和更新的9.x {Chakra}] )