AScript - C#轻量级动态脚本引擎
核心特性语法支持C# 基本语法变量、运算符、表达式控制流if/else、for、while、foreach、continue、break、return函数支持自定义函数、函数重载、递归调用字符串内插$hello {name}十六进制整数0x0A行注释与块注释执行模式解析执行即时解析计算编译执行编译成委托再执行可缓存编译结果再执行多层级上下文支持创建子上下文子上下文可继承访问父上下文中的定义实现逻辑复用适用于多支线脚本执行、函数调用隔离等场景顶级上下文ScriptContext.Root可全局设置变量、函数等宿主集成注入变量、函数、类型自定义语法解析关键字扩展流式读取脚本三、快速开始1 // NuGet: Install-Package AScript 2 using AScript; 3 var script new Script(); 4 var result script.Eval(58*6); // 53 5 6 // 定义函数 7 string code 8 int sum(int a, int b)ab; 9 int n10; 10 sum(n,5); 11 var result script.Eval(code); // 15四、应用场景1. 规则引擎将业务规则以脚本形式存储运行时动态加载执行无需发版即可调整规则逻辑。1 string filePath ./rule.txt; 2 // 缓存时间-1表示永久缓存0表示不缓存大于0表示缓存时间毫秒 3 int cacheTime -1; 4 // 文件路径作为缓存key 5 string cacheKey filePath; 6 // 文件修改时间作为版本号或者计算文件md5作为版本号 7 string cacheVersion File.GetLastWriteTime(filePath).ToFileTimeUtc().ToString(); 8 // 如果文件未改动则从缓存中执行否则重新读取-解析-编译-缓存-执行 9 var script new Script(); 10 script.Eval(() File.OpenRead(filePath), cacheTime, cacheKey, cacheVersion);2. 公式计算器让用户自定义计算公式系统负责解析执行如财务模板、绩效计算等场景。3. 游戏脚本系统为游戏提供轻量级脚本支持玩家可编写脚本实现自动任务、宏命令等功能。4. 插件扩展机制允许第三方编写脚本扩展程序功能沙箱执行保障安全性。5. 多支线执行基于多层级上下文支线间数据互不干扰同时共享父级公共逻辑。1 var rootContext new ScriptContext(); 2 rootContext.SetVar(n, 8); 3 rootContext.AddFuncint, int, int(sum, (a, b) a b); 4 5 // 支线1 6 var context1 new ScriptContext(rootContext); 7 context1.SetVar(x, 100); 8 var script1 new Script(context1); 9 var result1 script1.Eval(sum(x, n)); 10 Console.WriteLine(result1); // 108 11 12 // 支线2 13 var context2 new ScriptContext(rootContext); 14 context2.SetVar(y, 50); 15 var script2 new Script(context2); 16 var result2 script2.Eval(sum(y, n)); 17 Console.WriteLine(result2); // 58