将 AScript - C 转换为更通用的表达方式,可以理解为:脚本语言 - C语言这里的 AScript 可能是指某种脚本语言,而 C 则是指 C 语言,这是一种广泛使用的编程语言。如果需要更具体的解释或者转换,请提供更多的上下文信息。
摘要:一、简介 AScript 是一个基于 C# 的动态脚本解析、编译与执行引擎。它支持C# 语法,可以让应用程序在不重新编译的情况下动态执行用户自定义的脚本逻辑。 开源地址:https:gitee.comrockey627ascript
一、简介
AScript 是一个基于 C# 的动态脚本解析、编译与执行引擎。它支持C# 语法,可以让应用程序在不重新编译的情况下动态执行用户自定义的脚本逻辑。
开源地址:https://gitee.com/rockey627/ascript
二、核心特性
语法支持
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("5+8*6"); // 53
5
6 // 定义函数
7 string code = @"
8 int sum(int a, int b)=>a+b;
9 int n=10;
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. 多支线执行
基于多层级上下文,支线间数据互不干扰,同时共享父级公共逻辑。
