# Snow **Repository Path**: jcnc-org/snow ## Basic Information - **Project Name**: Snow - **Description**: Snow 是一门面向 AI 时代的新型编程语言,灵感源自大模型(LLM)的发展趋势。它的设计初衷是让 LLM 更容易生成和理解代码,从而提升人与 AI 协同编程的效率。 该项目实现了 Snow 语言的完整编译流程。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://snow-lang.com - **GVP Project**: No ## Statistics - **Stars**: 152 - **Forks**: 18 - **Created**: 2025-06-06 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: scripting-language **Tags**: 编译器, 虚拟机, 解释器, 编程语言, SnowLang ## README

Snow Icon

Snow编程语言

Gitee Star GitCode Star

## 项目简介 **Snow** 是一门面向 AI 时代的新型编程语言,灵感源自大模型(LLM)的发展趋势。它的设计初衷是让 LLM 更容易生成和理解代码,从而提升人与 AI 协同编程的效率。 该项目完整实现了 Snow 语言的编译流程,包括 **词法分析、语法分析、语义分析、中间表示(IR)生成**,以及最终的 **虚拟机(VM)指令生成与执行**。通过这一完整的编译-执行链路,开发者可以将 `.snow` 源文件编译为 `.water` 虚拟机指令,并直接在 **SnowVM** 上运行。 从源码编译、构建管理、依赖管理、项目标准化、可视化调试面板到原生镜像发布,全部由 Snow 官方工具完成,降低学习与集成成本。 ## 集成开发环境 Snow 专属 IDE — **IDEology** 仓库地址:[https://gitee.com/jcnc-org/IDEology](https://gitee.com/jcnc-org/IDEology) Snow IntelliJ IDEA 插件 仓库地址:[https://gitee.com/jcnc-org/snow-intelli-j](https://gitee.com/jcnc-org/snow-intelli-j) > 目前 IDEology 尚未提供正式发行版,开发者可通过源码自行编译获得使用体验。 ![IMG_IDE_5.png](docs/README/IMG/IMG_IDE_5.png) ## 背景理念 Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的语法和严格的类型系统,以帮助 LLM 更好地理解程序。 相关背景: [心路历程](docs/Snow-Lang-Journey/Snow-Lang-Journey.md) ## Snow-Lang 官网 [https://snow-lang.com](https://snow-lang.com) ## 下载 Snow 发行版 [https://gitee.com/jcnc-org/snow/releases](https://gitee.com/jcnc-org/snow/releases) ### Snow SDK 目录结构 Snow SDK 包含以下目录结构: ``` SnowSDK/ ├── bin/ # 可执行文件目录 └── lib/ # 标准库目录 ├── os/ # 操作系统相关库 ├── std/ # 标准库 └── syscall/ # 系统调用库 ``` ### Arch Linux 安装 - 通过 [AUR 仓库](https://aur.archlinux.org/packages/snow)或[自建源仓库](https://github.com/taotieren/aur-repo)安装 `snow` 发行版。 ```bash # AUR yay -Syu snow # 或自建源 sudo pacman -Syu snow # 或安装包组 sudo pacman -Syu snow-lang ``` - 通过 [AUR 仓库](https://aur.archlinux.org/packages/snow-git)或[自建源仓库](https://github.com/taotieren/aur-repo)安装 `snow-git` 开发版。 ```bash # AUR yay -Syu snow-git # 或自建源 sudo pacman -Syu snow-git # 或安装包组 sudo pacman -Syu snow-lang-git ``` ## 相关文档 [Snow-Lang 指南](docs/Snow-Lang-Syntax/Snow-Lang-Syntax.md) [Snow-Lang 语法规范](docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md) [Git 管理规范](docs/Snow-Lang-Git-Management/Snow-Lang-Git-Management.md) [SnowVM OpCode 指令表](docs/SnowVM-OpCode/SnowVM-OpCode.md) [Snow-Lang GraalVM AOT 打包指南](docs/Snow-Lang-GraalVM-AOT-Native-Image-Package/Snow-Lang-GraalVM-AOT-Native-Image-Package.md) ## 开发环境安装 1. **开发环境准备**: 1. 安装集成开发环境 [IntelliJ IDEA](https://www.jetbrains.com/idea/download) 2. 安装 Java 开发工具 [Graalvm-jdk-25](https://www.graalvm.org/downloads/) 2. **获取源码**: 将项目源码下载或克隆到本地目录。 ```bash git clone https://gitee.com/jcnc-org/snow.git ``` ## 编译 Snow 源代码 ### 1. 独立编译 (Standalone Compilation) 独立编译不依赖 `.cloud` 文件,而是直接使用 `snow` 编译器进行 `.snow` 文件的编译和执行。 #### 独立编译步骤: 1. **运行编译器:** 你可以通过以下命令来编译单个或多个 `.snow` 文件,或者递归编译一个目录中的所有 `.snow` 源文件为`.water`虚拟机指令。 * **单个文件编译:** ```bash snow compile [SnowCode].snow ``` * **多个文件编译:** ```bash snow compile [SnowCode1].snow [SnowCode2].snow [SnowCode3].snow -o [Name] ``` * **目录递归编译:** ```bash snow -d path/to/source_dir ``` 2. **查看编译输出:** 编译过程会输出源代码、抽象语法树(AST)、中间表示(IR)以及虚拟机指令等内容。你可以看到如下几个分段输出: * **AST**(抽象语法树)部分以 JSON 格式输出。 * **IR**(中间表示)部分会列出逐行的中间代码。 * **VM code**(虚拟机指令)会展示虚拟机的字节码指令。 3. **默认执行模式:** 编译器会在 **RUN 模式** 下运行,**DEBUG 模式**显示详细的执行过程和状态,并且在虚拟机中执行编译后的代码,最后会打印出所有局部变量的值。 --- ### 2. **集成编译 (Integrated Compilation)** 集成编译需要使用 `.cloud` 文件来指定项目的配置和结构,适用于项目标准化、依赖管理、构建管理和项目分发等场景。 #### 集成编译命令: 1. **基本用法:** ```bash snow [OPTIONS] ``` 2. **命令选项:** * `-h, --help`: 显示帮助信息并退出。 * `-v, --version`: 打印 Snow 编程语言的版本并退出。 3. **可用命令:** * `compile`: 将 `.snow` 源文件编译成虚拟机字节码文件(`.water`)。此命令会使用 `.cloud` 文件来指导编译过程。 * `clean`: 清理构建输出和本地缓存,移除中间产物,释放磁盘空间。 * `version`: 打印 Snow 的版本。 * `run`: 运行已编译的虚拟机字节码文件(`.water`)。 * `init`: 初始化一个新项目,生成 `project.cloud` 文件。 * `generate`: 根据 `project.cloud` 生成项目目录结构。 * `build`: 构建当前项目,按顺序解析依赖、编译和打包。 4. **例如,执行集成编译命令:** ```bash snow compile [SnowCode].snow ``` * 此命令会使用 `.cloud` 文件中的配置信息来指导编译过程,并生成 `.water`。 5. **使用帮助:** 如果你需要了解某个命令的详细选项,可以使用: ```bash snow --help ``` 例如,查看 `compile` 命令的具体选项: ```bash snow compile --help ``` --- ## 示例代码片段 以下是一个简单的 Snow 代码示例,演示模块定义,导入和函数声明的基本语法: ```snow module: Math function: main returns: int body: Math.factorial(6) return 0 end body end function function: factorial params: declare n:int returns: int body: declare num1:int = 1 loop: init: declare counter:int = 1 cond: counter <= n step: counter = counter + 1 body: num1 = num1 * counter end body end loop return num1 end body end function end module ``` 上述代码定义了一个名为 `Math` 的模块,其中包含两个函数: * `main`: 不接收任何参数,返回类型为 `int`。在函数体内调用了 `Math.factorial(6)`,然后返回 `0`。 * `factorial`: 接收一个 `int` 类型的参数 `n`,返回类型为 `int`。函数体内先声明并初始化局部变量 `num1` 为 `1`,然后通过一个 `loop` 循环(从 `counter = 1` 到 `counter <= n`)依次将 `num1` 乘以 `counter`,循环结束后返回 `num1`,即 `n` 的阶乘值。 > 更多示例代码见 [playground 目录](https://gitee.com/jcnc-org/snow/tree/main/playground) ## 项目结构说明 项目采用 Maven 多模块构建,源码结构如下: ### 根级模块结构 ``` Snow/ ├── snow-backend/ # 独立模块:编译器后端 ├── snow-common/ # 独立模块:通用工具 ├── snow-ir/ # 独立模块:中间表示(IR) ├── snow-lexer/ # 独立模块:词法分析 ├── snow-parser/ # 独立模块:语法分析 ├── snow-semantic/ # 独立模块:语义分析 ├── snow-vm/ # 独立模块:虚拟机 ├── src/main/java/org/jcnc/snow/ # 主源码目录 ├── pom.xml # Maven 聚合配置 └── ... ``` ### 主源码目录结构(src/main/java/org/jcnc/snow/) * **`compiler/`** - Snow 编译器核心 * **`lexer/`** - 词法分析模块 * `core/`: 词法分析器主逻辑 * `scanners/`: 各类 Token 扫描器(关键字、字符串、数字等) * `token/`: Token 定义和工具 * `utils/`: 词法分析辅助工具 * **`parser/`** - 语法分析模块 * `ast/`: 抽象语法树(AST)节点定义 * `context/`: 解析上下文管理 * `core/`: 解析器主逻辑 * `expression/`: 表达式解析 * `statement/`: 语句解析 * `module/`: 模块解析 * `function/`: 函数解析 * `struct/`: 结构体解析 * `utils/`: 语法分析辅助工具 * `factory/`: 工厂类 * **`semantic/`** - 语义分析模块 * `core/`: 语义分析器主逻辑 * `analyzers/`: 具体的语义分析器(类型检查、符号表等) * `type/`: 类型系统定义和管理 * `symbol/`: 符号表管理 * `error/`: 错误处理 * `utils/`: 语义分析辅助工具 * **`ir/`** - 中间表示(IR)模块 * `core/`: IR 核心数据结构(函数、基本块、指令等) * `builder/`: IR 构建器(表达式、语句、函数等) * `instruction/`: IR 指令定义 * `value/`: IR 值类型 * `common/`: 公共工具 * `utils/`: IR 辅助工具 * **`backend/`** - 编译器后端模块 * `core/`: 后端编译核心 * `generator/`: 虚拟机指令生成器 * `builder/`: 指令构建器 * `alloc/`: 寄存器分配 * `utils/`: 后端辅助工具 * **`vm/`** - 虚拟机(SnowVM) * **`engine/`** - 执行引擎 * 寄存器/栈管理 * 指令执行逻辑 * **`commands/`** - 虚拟机指令集 * 各类指令的具体实现 * **`execution/`** - 执行流程控制 * 指令顺序执行 * 分支跳转管理 * **`io/`** - 输入输出 * 指令加载 * 文件解析 * 标准库 I/O 实现 * **`gui/`** - 可视化调试 * Swing 调试面板 * 局部变量表展示 * **`module/`** - 模块管理 * 标准库模块加载 * **`interfaces/`** - 公共接口 * **`factories/`** - 工厂类 * **`utils/`** - 工具类 * 日志、调试输出等 * **`VMInitializer.java`** - VM 初始化器 * **`VMLauncher.java`** - VM 启动器 * **`pkg/`** - 构建与包管理系统(snow pkg) * **`dsl/`** - DSL 解析器 * `.cloud` 配置文件解析 * **`tasks/`** - 预设任务 * clean / compile / run / package / publish 等 * **`resolver/`** - 依赖解析 * 本地/远程仓库访问 * 缓存管理 * **`lifecycle/`** - 生命周期管理 * pre/post 脚本钩子 * **`model/`** - 数据模型 * 项目模型 * 依赖模型 * 版本模型 * **`utils/`** - 工具函数 * 文件操作 * 日志记录 * 校验和计算 * **`cli/`** - 命令行前端 * **`commands/`** - 子命令实现 * compile / run / clean / init / generate / build 等 * **`api/`** - 公共接口 * 选项解析 * 终端交互抽象 * **`utils/`** - 工具类 * 终端颜色、进度条 * 异常格式化 * **`SnowCLI.java`** - 主入口 * **`common/`** - 通用工具模块 * **`Mode.java`** - 运行模式(RUN、DEBUG) * **`SnowConfig.java`** - 配置管理 * **`NumberLiteralHelper.java`** - 数字字面量处理 * **`StringEscape.java`** - 字符串转义处理 ## 版权声明 版权所有 © 2025 许轲(Luke),代表 SnowLang 项目。 仓库地址: 本项目依据 [Apache 2.0 许可证](LICENSE) 进行许可和发布。 “SnowLang 项目”为由许轲(Luke)发起的独立开源项目。 未来,项目可能会成立正式的组织或实体,以进一步负责本项目的开发和管理。 ## 支持我们 如果你喜欢我们的项目,欢迎给我们一个 Star! 你们的关注和支持,是我们团队持续进步的动力源泉!谢谢大家! ## 加入我们 - 微信: `xuxiaolankaka` - QQ: `1399528359` - 邮箱: `luke.k.xu [at] hotmail.com`