0

我正在为我的产品搜索脚本语言,这将允许轻松定制。

我已经构建了自己的基于 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 - 我自己的小语言?

谢谢!

4

2 回答 2

6

如果您想走上艰难的道路,我建议您在接下来的 6 个月左右尝试编写自己的“编译器”。如果您想要一种更简单的方法,我建议您使用实际的 C# 语言编写脚本并使用CodeDOM来编译和执行。

为了正确使用生成/编译的程序集,我建议您强制最终用户使用接口并在应用程序中使用依赖注入。

编辑 :

在您对问题进行编辑之后。老实说,我对 Lua 或 IronPython 都一无所知,但我肯定知道:你永远不应该尝试重新发明轮子。不要尝试编写自己的语言。我确实记得花了 3 个月的时间尝试编写自己的小型 ORM(Dapper 的 SQL 生成器),结果突然发现 ServiceStack ORMLite 比我的代码更好,性能也更高。

正如我之前解释的那样,我真的建议使用 C#(因为您也在应用程序中使用它)。

于 2013-09-07T08:14:14.647 回答
1

在编译代码或从应用程序中评估表达式时,您可以使用 C# 向应用程序添加功能。这可以使用 .NET 框架来完成,而不依赖于社区支持的组件,但是如果您选择编写自己的代码,可以学习社区支持的库。

这是一篇关于如何从您的应用程序编译的文章:http: //www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at-Runtime

还有可用于在运行时评估表达式的 C# Eval 库:http: //csharp-eval.com/HowTo.php

于 2013-09-07T08:21:01.280 回答