我正在为我的产品搜索脚本语言,这样可以轻松定制。
我已经构建了自己的基于XML的小语言,但我对此解决方案并不满意:
<ScrArp>
<StaticClass Name="Root">
<Method Return="Void" Name="Main">
<Call Method="Print" Text="Hello World" />
<Declare Type="SampleClass" Name="myInstance">
<Set>
<NewInstance Type="SimpleClass" />
</Set>
</Declare>
<Call Text="Hello 123">
<Instance Name="myInstance">
<!-- <Instance Name="mySample2..."> -->
<Method Name="TestMethod" />
<!-- </Instance> -->
</Instance>
</Call>
</Method>
</StaticClass>
<Class Name="SampleClass">
<Method Return="Void" Name="TestMethod">
<Parameter>
<Declare Type="String" Name="Text" />
<Parameter>
<Call Method="Print">
<Text>
<Get Name="Text" />
</Text>
</Call>
</Method>
<Method Return="String" Name="Method2">
<Declare Type="String" Name="cReturnValue" />
<Set>
<Instance Name="cReturnValue" />
<Value>
<Call>
<Instance Name="cReturnValue" />
</Call>
<Value>
</Set>
<Return>
<Instance Name="cReturnValue" />
<Return>
</Method>
</Class>
</ScrArp>
我之前使用过Lua和IronPython,但我不太喜欢Lua,据我所知,IronPython只是社区支持。
现在我的问题。哪个是C#脚本编写的最佳解决方案? - IronPython - Lua - 我自己的小语言?
感谢&#39;!小号
答案 0 :(得分:6)
如果你想艰难前行,我建议你花费大约6个月左右的时间来编写自己的“编译器”。如果您想要一种更简单的方法,我建议您使用实际的C#语言提供脚本,并使用CodeDOM进行编译和执行。
为了正确使用生成/编译的程序集,我建议您强制最终用户使用接口,并在应用程序中使用Dependency Injection。
编辑:
在您对问题进行编辑之后。说实话,我对Lua或IronPython都没有任何线索,但我肯定知道的事情:你永远不应该尝试重新发明轮子。不要尝试编写自己的语言。我记得花了3个月的时间尝试编写自己的小型ORM(SQL Generator for Dapper),最后突然发现ServiceStack ORMLite,它比我的代码更好,性能更高。
正如我之前所解释的,我真的建议使用C#(因为你也在你的应用程序中使用它)。
答案 1 :(得分:1)
在编译代码或评估应用程序中的表达式时,可以使用C#为应用程序添加功能。这可以使用.NET框架完成,而不依赖于社区支持的组件,但如果您选择编写自己的代码,则可以从社区支持的库中学习。
这是一篇关于如何从您的应用程序进行编译的文章:http://www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at-Runtime
还有C#Eval库可用于在运行时评估表达式:http://csharp-eval.com/HowTo.php