C#脚本语言与自己的语言

时间:2013-09-07 08:06:38

标签: c# .net

我正在为我的产品搜索脚本语言,这样可以轻松定制。

我已经构建了自己的基于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;!小号

2 个答案:

答案 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