# quickscript **Repository Path**: lightsever/quickscript ## Basic Information - **Project Name**: quickscript - **Description**: 这是又一个用c# 开发 的 类c# 脚本语言。%99 由AI 编写 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-10 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QuickScript 一个轻量级的字节码虚拟机与编译器,用于 C 风格的脚本语言,基于 .NET 10.0 和 ANTLR 4 构建。 > **关于本项目**:本项目 99% 的代码由 AI 生成,耗时两周完成。项目的核心目的是**学习 AI 辅助开发**——探索如何利用 AI 高效地完成从语言设计、编译器实现到虚拟机构建的全流程。 ## 功能特性 **语言** - C 风格语法,完整的运算符优先级 - 静态类型,支持 `var` 类型推断 - 函数(脚本自定义函数与宿主注册的系统函数) - 控制流:`if`/`else`、`switch`/`case`、`while`、`for`、`do`-`while`、`break`、`continue` - 数组,支持下标访问(`new int[10]`、`arr[i]`) - 字符串操作:拼接、子串、查找、大小写转换 - 类型转换:`(double)x` - 数值类型:`int`、`int64`、`uint`、`uint64`、`float`、`double`、`bool`、`string` **虚拟机** - 基于栈的字节码 VM,4MB 栈空间 - 约 60 条操作码:算术、逻辑、位运算、字符串、内存、控制流、函数调用 - 统一函数表,支持脚本函数与系统(宿主)函数 - 线性内存分配器,帧作用域自动清理 - 执行步数限制,防止无限循环 **编译器** - ANTLR 4.13.2 语法定义 → 两遍字节码编译 - 支持前向函数引用 - `&&` 和 `||` 短路求值 - 内置 `print()` 和 `pow()` 语法糖 ## 快速开始 ```csharp using QuickScript.Core; using QuickScript.Core.VM; using QuickScript.Compiler; // 编译并运行源代码 var compiler = new Compiler(); byte[] bytecode = compiler.CompileToBytes(@" int add(int a, int b) { return a + b; } print(add(3, 4)); "); var env = new Env(); env.OnDump = s => Console.WriteLine(s); // print() 输出 using var vm = new ScriptContext(env); vm.RunCode(bytecode); // 输出: 7 ``` ## 注册系统函数 宿主程序可以注册原生 C# 函数供脚本调用。使用 `CallTool` 提供的扩展方法来读取参数和生成返回值: ```csharp using QuickScript.Core.VM; using QuickScript.Core.VM.Function; using QuickScript.Core.VM.Value; using VT = QuickScript.Core.VM.Value.VMType; // 1. 实现系统函数(独立方法) static byte[] SysDouble(ScriptContext context) { int x = context.PopI32(); // CallTool: 弹出参数 return context.CreateReturnI32(x * 2); // CallTool: 创建返回值 } // 2. 注册到 Env var env = new Env(); env.Register(new SystemFunctionReg("double", new FunctionSignature(new[] { VT.I32 }, VT.I32), SysDouble)); // 3. 构建 ScriptLib 并调用(详见 tests/console/) ``` ## 项目结构 ``` QuickScript/ ├── src/ │ ├── QuickScript.Core/ # VM 运行时、字节码类型、指令集 │ ├── QuickScript.Compiler/ # 基于 ANTLR 的编译器(源代码 → 字节码) │ ├── QuickScript.g4 # ANTLR 语法定义 │ └── generate_parser.bat # 解析器重新生成脚本 ├── tests/ │ ├── QuickScript.Tests/ # 单元测试(500+) │ └── console/ # 示例控制台应用 ├── tools/ │ └── antlr-4.13.2-complete.jar ├── docs/ # 语言与操作码文档 └── aidoc/ # 设计文档 ``` ## 构建与测试 ```bash dotnet build dotnet test ``` ## 许可证 详见 [LICENSE](LICENSE)。