2009-09-03 51 views
0

我正在用wpf编写一个小的可视化工具,这个想法是,普通用户可以创建有趣的可视化而不需要编程向导。动态关键字,C#编译服务 - 如何运行编译时尚未提供的代码?

我有了像StartPath方法的控制器类(双X,双y)和的LineTo(X,Y)CurveTo(...)等

的想法是,用户可以键入这些命令放入一个文本框中并让它在画布上绘制结果。

StartPath(0,0); 
LineTo(30,50); 
LineTo(50,40); 
EndPath(); 

我有一个想法是使用具有实现的所有方法的.cs模板,与更换令牌内的额外运行()命令。我将模板作为字符串加载,将用户命令插入Run()方法,使用新的.NET 4.0编译服务即时创建程序集,然后加载它并调用其Run()方法并访问公开的Path在画布上绘制它。

另外一个将实际上只是解析文本,错误检查,并调用相应的方法。

是否还有其他的方法,尤其是与新的动态关键字?

回答

2

你不需要使用任何新的.NET 4.0。在框架中编译C#代码的能力已经存在很久了。事实上,我的Snippy工具几乎完全符合你的说法 - 它是一个用户代码进入的模板。如果您愿意,欢迎将您的工具基于我的工具。您可以从C# in Depth site下载代码。

从别的

除此之外,你会不会要求您的用户的方式有.NET 4.0。

至于dynamic - 在这种情况下它并没有真正的帮助,除非你喜欢让你的用户在IronPython/IronRuby中编写代码。 C#仍然没有一种“eval”调用,让你只需执行一个任意的字符串。

+0

我会看看它,非常感谢。 感谢您澄清,我没有达到最新的c#规范。 – kitsune 2009-09-03 18:26:45

+0

很好地工作:http://dl.getdropbox.com/u/133877/test.jpg 再次感谢:) – kitsune 2009-09-07 08:39:58

1

我觉得你不如试试定义LL1语言生成解析器和扫描仪,并建立自己的解释。

可可/ R是这样的工作非常稳定的和众所周知的工具。 看看这个是你心里有什么不应该是困难的:

http://www.scifac.ru.ac.za/coco/cshcoco.htm

如果你要使用新的动态,你还是会有问题解析输入命令文本。 您可以使用动态在解析器之上构建解释器。

希望这会有帮助

+0

为什么要去设计和实现自己的语言的所有麻烦,哪些用户会然后必须学习,而不是使用已经精心设计的,强大的实施和众所周知的方法?如果C#恰好不是一个很好的选择,这是很容易,如果你想拥有自己的小型指令集一样转到(X,Y)了lineTo使用嘘,IronPython的,IronRuby的等等... – 2009-09-03 18:30:35

+0

(X,Y),你可以不使用已有的语言。使用只需要学习您的业务特定的迷你语言就能够发出命令。 如果你跟进Coco/R链接,你会发现很容易定义LL1语法。 当一个输入被解析时(在运行时),生成的解析器将自动调用一段.Net代码,向您传递您可能需要的任何其他信息。 让我知道你是否需要帮助把东西放在一起。 – 2009-09-03 18:55:45