diff --git a/.gitee/ISSUE_TEMPLATE/bug.yml b/.gitee/ISSUE_TEMPLATE/bug.yml
index 8c52224..8f2368e 100644
--- a/.gitee/ISSUE_TEMPLATE/bug.yml
+++ b/.gitee/ISSUE_TEMPLATE/bug.yml
@@ -69,7 +69,7 @@ body:
attributes:
label: 软件版本/分支
options:
- - v0.4.2
+ - v0.5.0
- main
- dev
- 其他
diff --git a/.run/Snow.run.xml b/.run/Snow.run.xml
new file mode 100644
index 0000000..30b2c4f
--- /dev/null
+++ b/.run/Snow.run.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index da8a7f2..1e47407 100644
--- a/README.md
+++ b/README.md
@@ -11,8 +11,8 @@
-
-
+
+
@@ -53,12 +53,12 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的
| 类别 | 关键特性 |
|----------|---------------------------------------------------------------------------------------------------|
-| 语言层 | `module` / `import` / `function` / `loop` / `if–else` / Pratt 表达式解析
静态类型检查 & 作用域分析 |
-| 编译器前端 | **Lexer / Parser / Semantic Analyzer** 全栈自研,生成 JSON-AST |
+| 语言层 | module / import / function / loop / if–else / Pratt 表达式解析
静态类型检查 & 作用域分析 |
+| 编译器前端 | 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
@@ -462,6 +579,12 @@ end module
“SnowLang 项目”为由许轲(Luke)发起的独立开源项目。
未来,项目可能会成立正式的组织或实体,以进一步负责本项目的开发和管理。
+## 支持我们
+
+如果你喜欢我们的项目,欢迎给我们一个 Star!
+你们的关注和支持,是我们团队持续进步的动力源泉!谢谢大家!
+
+
## 加入我们
- 微信: `xuxiaolankaka`
diff --git a/docs/SnowVM-OpCode/SnowVM-OpCode.md b/docs/SnowVM-OpCode/SnowVM-OpCode.md
index 4bd5d46..26343b7 100644
--- a/docs/SnowVM-OpCode/SnowVM-OpCode.md
+++ b/docs/SnowVM-OpCode/SnowVM-OpCode.md
@@ -1,7 +1,8 @@
# SnowVM-OpCode
-## 1. Byte8 区域(0x0000-0x001F)
+## Type Control (0x0000-0x00BF)
+### Byte8 (0x0000-0x001F)
| 指令名 | 十六进制 | 说明 |
|----------|--------|----------------|
| B\_ADD | 0x0000 | byte8 加法 |
@@ -26,7 +27,7 @@
---
-## 2. Short16 区域(0x0020-0x003F)
+### Short16 (0x0020-0x003F)
| 指令名 | 十六进制 | 说明 |
|----------|--------|------------------|
@@ -52,7 +53,7 @@
---
-## 3. Int32 区域(0x0040-0x005F)
+### Int32 (0x0040-0x005F)
| 指令名 | 十六进制 | 说明 |
|----------|--------|----------------|
@@ -78,7 +79,7 @@
---
-## 4. Long64 区域(0x0060-0x007F)
+### Long64 区域(0x0060-0x007F)
| 指令名 | 十六进制 | 说明 |
|----------|--------|-----------------|
@@ -104,7 +105,7 @@
---
-## 5. Float32 区域(0x0080-0x009F)
+### Float32 区域(0x0080-0x009F)
| 指令名 | 十六进制 | 说明 |
|----------|--------|------------------|
@@ -127,7 +128,7 @@
---
-## 6. Double64 区域(0x00A0-0x00BF)
+### Double64 区域(0x00A0-0x00BF)
| 指令名 | 十六进制 | 说明 |
|----------|--------|-------------------|
@@ -150,7 +151,7 @@
---
-## 7. 类型转换(0x00C0-0x00DF)
+## Type Conversion (0x00C0-0x00DF)
| 指令名 | 十六进制 | 说明 |
|-----|--------|--------------------|
@@ -185,11 +186,17 @@
| D2L | 0x00DC | double64 转 long64 |
| D2F | 0x00DD | double64 转 float32 |
-
-
---
+## Reference Control (0x00E0-0x00EF)
+| 指令名 | 十六进制 | 说明 |
+|----------|--------|---------------------------|
+| R\_PUSH | 0x00E0 | 将对象引用压入操作数栈 |
+| R\_LOAD | 0x00E1 | 从本地变量表加载对象引用并压入操作数栈 |
+| R\_STORE | 0x00E2 | 将操作数栈顶的对象引用弹出并存入本地变量表指定槽位 |
-## 8. 栈控制(0x0100-0x01FF)
+
+
+## Stack Control (0x0100-0x01FF)
| 指令名 | 十六进制 | 说明 |
|------|--------|----------|
@@ -199,7 +206,7 @@
---
-## 9. 流程控制(0x0200-0x02FF)
+## Flow Control (0x0200-0x02FF)
| 指令名 | 十六进制/十进制 | 说明 |
|------|----------|-------|
@@ -209,7 +216,7 @@
---
-## 10. 寄存器控制(0x0300-0x03FF)
+## Register Control (0x0300-0x03FF)
| 指令名 | 十六进制 | 说明 |
|-----|--------|---------|
@@ -217,7 +224,7 @@
---
-## 11. 系统控制(0x0400-0x04FF)
+## System Control (0x0400-0x04FF)
| 指令名 | 十六进制 | 说明 |
|-------------|--------|------|
diff --git a/pom.xml b/pom.xml
index 53b5d38..ec86d77 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
org.jcnc.snow
Snow
- 0.4.2
+ 0.5.0
UTF-8
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 3597cae..3f8a7b3 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -4,7 +4,6 @@ module org.jcnc.snow.compiler {
uses CLICommand;
requires java.desktop;
requires java.logging;
- requires org.graalvm.nativeimage;
exports org.jcnc.snow.compiler.ir.core;
exports org.jcnc.snow.compiler.ir.instruction;
}
diff --git a/src/main/java/org/jcnc/snow/cli/SnowCLI.java b/src/main/java/org/jcnc/snow/cli/SnowCLI.java
index 0ce6ba0..d05b0bf 100644
--- a/src/main/java/org/jcnc/snow/cli/SnowCLI.java
+++ b/src/main/java/org/jcnc/snow/cli/SnowCLI.java
@@ -4,6 +4,8 @@ import org.jcnc.snow.cli.api.CLICommand;
import org.jcnc.snow.cli.commands.*;
import org.jcnc.snow.cli.utils.CLIUtils;
import org.jcnc.snow.cli.utils.VersionUtils;
+import org.jcnc.snow.common.Mode;
+import org.jcnc.snow.common.SnowConfig;
import java.util.Arrays;
import java.util.Map;
diff --git a/src/main/java/org/jcnc/snow/cli/utils/CLIUtils.java b/src/main/java/org/jcnc/snow/cli/utils/CLIUtils.java
index ca36951..efa44b3 100644
--- a/src/main/java/org/jcnc/snow/cli/utils/CLIUtils.java
+++ b/src/main/java/org/jcnc/snow/cli/utils/CLIUtils.java
@@ -26,12 +26,21 @@ public class CLIUtils {
"-v", "--version"
);
+ /**
+ * 全局调试标志集合,支持 "-debug"、"--debug"。
+ */
+ public static final Set GLOBAL_DEBUG_FLAGS = Set.of(
+ "--debug"
+ );
+
/**
* 全局选项列表,包括帮助和版本选项的描述。
*/
public static final List