diff --git a/README.md b/README.md index 8a58d7b..af18ac8 100644 --- a/README.md +++ b/README.md @@ -54,11 +54,11 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 | 类别 | 关键特性 | |----------|---------------------------------------------------------------------------------------------------| | 语言层 | `module` / `import` / `function` / `loop` / `if–else` / Pratt 表达式解析
静态类型检查 & 作用域分析 | -| 编译器前端 | **Lexer / Parser / Semantic Analyzer** 全栈自研,生成 JSON-AST | +| 编译器前端 | Lexer / Parser / Semantic Analyzer 全栈自研,生成 JSON-AST | | IR & 后端 | 三地址式 IR ➜ 线性扫描寄存器分配 ➜ SnowVM 指令 | | 虚拟机 | 栈 + 寄存器混合架构、GUI 局部变量监视 | | snow pkg | - `.cloud` DSL 描述项目、依赖与构建
- 预设 `clean / compile / run / package / publish` 任务
- 离线缓存与远程仓库解析 | -| CLI | `snow init`, `snow compile`, `snow run`, `snow clean`, `snow build`, `snow generate` | +| CLI | init, compile, run, clean, build, generate,debug | ## Snow-Lang 官网 @@ -104,7 +104,7 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 4. **运行成功** - `````snow + `````snow ## 编译器输出 ### Snow 源代码 #### Main.snow @@ -118,6 +118,59 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 end body end function end module + line col type lexeme + ---------------------------------------------------- + 1 1 KEYWORD module + 1 7 COLON : + 1 9 IDENTIFIER Main + 1 13 NEWLINE \n + + 2 5 KEYWORD import + 2 11 COLON : + 2 12 IDENTIFIER Math + 2 16 NEWLINE \n + + 3 5 KEYWORD function + 3 13 COLON : + 3 15 IDENTIFIER main + 3 19 NEWLINE \n + + 4 9 KEYWORD return_type + 4 20 COLON : + 4 22 TYPE int + 4 25 NEWLINE \n + + 5 9 KEYWORD body + 5 13 COLON : + 5 14 NEWLINE \n + + 6 13 IDENTIFIER Math + 6 17 DOT . + 6 18 IDENTIFIER add + 6 21 LPAREN ( + 6 22 NUMBER_LITERAL 6 + 6 23 COMMA , + 6 24 NUMBER_LITERAL 1 + 6 25 RPAREN ) + 6 26 NEWLINE \n + + 7 13 KEYWORD return + 7 20 NUMBER_LITERAL 0 + 7 21 NEWLINE \n + + 8 9 KEYWORD end + 8 13 KEYWORD body + 8 17 NEWLINE \n + + 9 5 KEYWORD end + 9 9 KEYWORD function + 9 17 NEWLINE \n + + 10 1 KEYWORD end + 10 5 KEYWORD module + 10 1 EOF + ## 词法分析通过,没有发现错误 + #### Math.snow module: Math function: add @@ -126,121 +179,179 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 declare n2: int return_type: int body: - return n1 + n2 + return n1 + n2 end body end function end module + line col type lexeme + ---------------------------------------------------- + 1 1 KEYWORD module + 1 7 COLON : + 1 9 IDENTIFIER Math + 1 13 NEWLINE \n + + 2 5 KEYWORD function + 2 13 COLON : + 2 15 IDENTIFIER add + 2 18 NEWLINE \n + + 3 9 KEYWORD parameter + 3 18 COLON : + 3 19 NEWLINE \n + + 4 13 KEYWORD declare + 4 21 IDENTIFIER n1 + 4 23 COLON : + 4 25 TYPE int + 4 28 NEWLINE \n + + 5 13 KEYWORD declare + 5 21 IDENTIFIER n2 + 5 23 COLON : + 5 25 TYPE int + 5 28 NEWLINE \n + + 6 9 KEYWORD return_type + 6 20 COLON : + 6 22 TYPE int + 6 25 NEWLINE \n + + 7 9 KEYWORD body + 7 13 COLON : + 7 14 NEWLINE \n + + 8 12 KEYWORD return + 8 19 IDENTIFIER n1 + 8 22 PLUS + + 8 24 IDENTIFIER n2 + 8 26 NEWLINE \n + + 9 9 KEYWORD end + 9 13 KEYWORD body + 9 17 NEWLINE \n + + 10 5 KEYWORD end + 10 9 KEYWORD function + 10 17 NEWLINE \n + + 11 1 KEYWORD end + 11 5 KEYWORD module + 11 1 EOF + + ## 词法分析通过,没有发现错误 + + ## 语义分析通过,没有发现错误 + ### AST [ - { + { "type": "Module", "name": "Main", "imports": [ - { - "module": "Math", - "type": "Import" - } + { + "type": "Import", + "module": "Math" + } ], "functions": [ - { + { "type": "Function", "name": "main", "parameters": [ - + ], "returnType": "int", "body": [ - { + { "type": "ExpressionStatement", "expression": { - "type": "CallExpression", - "callee": { + "type": "CallExpression", + "callee": { "type": "MemberExpression", "object": { - "type": "Identifier", - "name": "Math" + "type": "Identifier", + "name": "Math" }, "member": "add" - }, - "arguments": [ + }, + "arguments": [ { - "type": "NumberLiteral", - "value": "6" + "type": "NumberLiteral", + "value": "6" }, { - "type": "NumberLiteral", - "value": "1" + "type": "NumberLiteral", + "value": "1" } - ] + ] } - }, - { + }, + { "type": "Return", "value": { - "type": "NumberLiteral", - "value": "0" + "type": "NumberLiteral", + "value": "0" } - } + } ] - } + } ] - }, - { + }, + { "type": "Module", "name": "Math", "imports": [ - + ], "functions": [ - { + { "type": "Function", "name": "add", "parameters": [ - { + { "name": "n1", "type": "int" - }, - { + }, + { "name": "n2", "type": "int" - } + } ], "returnType": "int", "body": [ - { + { "type": "Return", "value": { - "type": "BinaryExpression", - "left": { + "type": "BinaryExpression", + "left": { "type": "Identifier", "name": "n1" - }, - "operator": "+", - "right": { + }, + "operator": "+", + "right": { "type": "Identifier", "name": "n2" + } } - } - } + } ] - } + } ] - } + } ] ### IR func main() { - %0 = CONST 6 - %1 = CONST 1 - %2 = CALL Math.add, %0, %1 - %3 = CONST 0 - RET %3 + %0 = CONST 6 + %1 = CONST 1 + %2 = CALL Math.add, %0, %1 + %3 = CONST 0 + RET %3 } func add(%0, %1) { - %2 = ADD_I32 %0, %1 - RET %2 + %2 = ADD_I32 %0, %1 + RET %2 } - - + ### VM code 0000: I_PUSH 6 0001: I_STORE 0 @@ -248,35 +359,41 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 0003: I_STORE 1 0004: I_LOAD 0 0005: I_LOAD 1 - 0006: CALL 12 2 + 0006: CALL 13 2 0007: I_STORE 2 0008: I_PUSH 0 0009: I_STORE 3 0010: I_LOAD 3 0011: HALT - 0012: I_LOAD 0 - 0013: I_LOAD 1 - 0014: I_ADD - 0015: I_STORE 2 - 0016: I_LOAD 2 - 0017: RET + 0012: HALT + 0013: I_LOAD 0 + 0014: I_LOAD 1 + 0015: I_ADD + 0016: I_STORE 2 + 0017: I_LOAD 2 + 0018: RET + 0019: RET Written to D:\Devs\IdeaProjects\Snow\target\Demo1.water - + === Launching VM === - Calling function at address: 12 + + Calling function at address: 13 + Return 7 + Process has ended Operand Stack state:[0] - + --- Call Stack State --- - - + ### VM Local Variable Table: 0: 6 1: 1 2: 7 3: 0 + + === VM exited === ````` ## 编译 Snow 源代码 @@ -287,36 +404,36 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 #### 独立编译步骤: -1. **运行编译器: ** +1. **运行编译器:** 你可以通过以下命令来编译单个或多个 `.snow` 文件,或者递归编译一个目录中的所有 `.snow` 源文件为`.water`虚拟机指令。 - * **单个文件编译: ** + * **单个文件编译:** ```bash Snow complete [SnowCode].snow ``` - * **多个文件编译: ** + * **多个文件编译:** ```bash Snow complete [SnowCode1].snow [SnowCode2].snow [SnowCode3].snow -o [Name] ``` - * **目录递归编译: ** + * **目录递归编译:** ```bash Snow -d path/to/source_dir ``` -2. **查看编译输出: ** +2. **查看编译输出:** 编译过程会输出源代码、抽象语法树(AST)、中间表示(IR)以及虚拟机指令等内容。你可以看到如下几个分段输出: * **AST**(抽象语法树)部分以 JSON 格式输出。 * **IR**(中间表示)部分会列出逐行的中间代码。 * **VM code**(虚拟机指令)会展示虚拟机的字节码指令。 -3. **默认执行模式: ** - 编译器会在 **DEBUG 模式** 下运行,显示详细的执行过程和状态,并且在虚拟机中执行编译后的代码,最后会打印出所有局部变量的值。 +3. **默认执行模式:** + 编译器会在 **RUN 模式** 下运行,**DEBUG 模式**显示详细的执行过程和状态,并且在虚拟机中执行编译后的代码,最后会打印出所有局部变量的值。 --- @@ -326,18 +443,18 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 #### 集成编译命令: -1. **基本用法: ** +1. **基本用法:** ```bash snow [OPTIONS] ``` -2. **命令选项: ** +2. **命令选项:** * `-h, --help`: 显示帮助信息并退出。 * `-v, --version`: 打印 Snow 编程语言的版本并退出。 -3. **可用命令: ** +3. **可用命令:** * `compile`: 将 `.snow` 源文件编译成虚拟机字节码文件(`.water`)。此命令会使用 `.cloud` 文件来指导编译过程。 * `clean`: 清理构建输出和本地缓存,移除中间产物,释放磁盘空间。 @@ -347,7 +464,7 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 * `generate`: 根据 `project.cloud` 生成项目目录结构。 * `build`: 构建当前项目,按顺序解析依赖、编译和打包。 -4. **例如,执行集成编译命令: ** +4. **例如,执行集成编译命令:** ```bash snow compile [SnowCode].snow @@ -355,7 +472,7 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 * 此命令会使用 `.cloud` 文件中的配置信息来指导编译过程,并生成 `.water`。 -5. **使用帮助: ** +5. **使用帮助:** 如果你需要了解某个命令的详细选项,可以使用: ```bash