C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Codex 脚本

C# Codex 脚本编写功能示例

作者:xiaoshuaishuai8

该C#示例实现了一个简单的脚本引擎,支持自定义命令、参数解析、注释、字符串参数和保留执行结果,此示例可展示了基础框架,可进一步扩展更多复杂功能,感兴趣的朋友一起看看吧

Codex 脚本编写功能

以下是一个简单的 C# 示例,展示如何实现类似 Codex 的脚本编写功能。该示例包含基本的脚本解析和执行逻辑。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class ScriptEngine
{
    private Dictionary<string, Func<string[], object>> _commands = new Dictionary<string, Func<string[], object>>();
    public ScriptEngine()
    {
        // 注册内置命令
        RegisterCommand("print", args =>
        {
            Console.WriteLine(string.Join(" ", args));
            return null;
        });
        RegisterCommand("add", args =>
        {
            if (args.Length < 2) return 0;
            return double.Parse(args[0]) + double.Parse(args[1]);
        });
    }
    public void RegisterCommand(string name, Func<string[], object> action)
    {
        _commands[name] = action;
    }
    public object ExecuteScript(string script)
    {
        var lines = script.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
        object lastResult = null;
        foreach (var line in lines)
        {
            var trimmed = line.Trim();
            if (string.IsNullOrWhiteSpace(trimmed) || trimmed.StartsWith("//")) continue;
            var parts = Regex.Matches(trimmed, @"[\""].+?[\""]|[^ ]+")
                            .Cast<Match>()
                            .Select(m => m.Value.Trim('"'))
                            .ToArray();
            if (parts.Length == 0) continue;
            var command = parts[0];
            var args = parts.Skip(1).ToArray();
            if (_commands.TryGetValue(command, out var action))
            {
                lastResult = action(args);
            }
            else
            {
                throw new InvalidOperationException($"Unknown command: {command}");
            }
        }
        return lastResult;
    }
}
public class Program
{
    public static void Main()
    {
        var engine = new ScriptEngine();
        // 示例脚本
        string script = @"
            print ""Hello, Codex!""
            print ""Calculating...""
            add 5 3
            print ""Result:"" $last
        ";
        // 执行脚本
        engine.ExecuteScript(script);
    }
}

功能说明

该代码实现了一个简单的脚本引擎,具有以下特点:

扩展方法

要增强脚本功能,可以考虑以下改进:

// 添加变量支持
private Dictionary<string, object> _variables = new Dictionary<string, object>();
// 添加条件语句支持
public object ExecuteIf(string condition, string thenScript, string elseScript = null)
{
    // 实现条件判断逻辑
}
// 添加循环支持
public void ExecuteWhile(string condition, string bodyScript)
{
    // 实现循环逻辑
}

使用示例

// 注册自定义命令
engine.RegisterCommand("square", args =>
{
    if (args.Length < 1) return 0;
    var num = double.Parse(args[0]);
    return num * num;
});
// 使用变量
engine.RegisterCommand("set", args =>
{
    if (args.Length < 2) return null;
    _variables[args[0]] = args[1];
    return null;
});

这个实现提供了基础框架,可以根据需要扩展更复杂的脚本功能。

到此这篇关于C# Codex 脚本编写功能示例的文章就介绍到这了,更多相关C# Codex 脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文