Snow 是一门面向 AI 时代的新型编程语言,灵感源自大模型(LLM)的发展趋势。它的设计初衷是让 LLM 更容易生成和理解代码,从而提升人与 AI 协同编程的效率。
该项目完整实现了 Snow 语言的编译流程,包括 词法分析、语法分析、语义分析、中间表示(IR)生成,以及最终的 虚拟机(VM)指令生成与执行。通过这一完整的编译-执行链路,开发者可以将 .snow 源文件编译为 .water 虚拟机指令,并直接在 SnowVM 上运行。
从源码编译、构建管理、依赖管理、项目标准化、可视化调试面板到原生镜像发布,全部由 Snow 官方工具完成,降低学习与集成成本。
Snow 专属 IDE — IDEology
仓库地址:https://gitee.com/jcnc-org/IDEology
Snow IntelliJ IDEA 插件
仓库地址:https://gitee.com/jcnc-org/snow-intelli-j
目前 IDEology 尚未提供正式发行版,开发者可通过源码自行编译获得使用体验。
Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的语法和严格的类型系统,以帮助 LLM 更好地理解程序。
相关背景: 心路历程
https://gitee.com/jcnc-org/snow/releases
Snow SDK 包含以下目录结构:
SnowSDK/
├── bin/ # 可执行文件目录
└── lib/ # 标准库目录
├── os/ # 操作系统相关库
├── std/ # 标准库
└── syscall/ # 系统调用库
# AUR
yay -Syu snow
# 或自建源
sudo pacman -Syu snow
# 或安装包组
sudo pacman -Syu snow-lang# AUR
yay -Syu snow-git
# 或自建源
sudo pacman -Syu snow-git
# 或安装包组
sudo pacman -Syu snow-lang-git-
开发环境准备:
- 安装集成开发环境 IntelliJ IDEA
- 安装 Java 开发工具 Graalvm-jdk-25
-
获取源码: 将项目源码下载或克隆到本地目录。
git clone https://gitee.com/jcnc-org/snow.git
独立编译不依赖 .cloud 文件,而是直接使用 snow 编译器进行 .snow 文件的编译和执行。
-
运行编译器: 你可以通过以下命令来编译单个或多个
.snow文件,或者递归编译一个目录中的所有.snow源文件为.water虚拟机指令。-
单个文件编译:
snow compile [SnowCode].snow
-
多个文件编译:
snow compile [SnowCode1].snow [SnowCode2].snow [SnowCode3].snow -o [Name]
-
目录递归编译:
snow -d path/to/source_dir
-
-
查看编译输出: 编译过程会输出源代码、抽象语法树(AST)、中间表示(IR)以及虚拟机指令等内容。你可以看到如下几个分段输出:
- AST(抽象语法树)部分以 JSON 格式输出。
- IR(中间表示)部分会列出逐行的中间代码。
- VM code(虚拟机指令)会展示虚拟机的字节码指令。
-
默认执行模式: 编译器会在 RUN 模式 下运行,DEBUG 模式显示详细的执行过程和状态,并且在虚拟机中执行编译后的代码,最后会打印出所有局部变量的值。
集成编译需要使用 .cloud 文件来指定项目的配置和结构,适用于项目标准化、依赖管理、构建管理和项目分发等场景。
-
基本用法:
snow [OPTIONS] <command>
-
命令选项:
-h, --help: 显示帮助信息并退出。-v, --version: 打印 Snow 编程语言的版本并退出。
-
可用命令:
compile: 将.snow源文件编译成虚拟机字节码文件(.water)。此命令会使用.cloud文件来指导编译过程。clean: 清理构建输出和本地缓存,移除中间产物,释放磁盘空间。version: 打印 Snow 的版本。run: 运行已编译的虚拟机字节码文件(.water)。init: 初始化一个新项目,生成project.cloud文件。generate: 根据project.cloud生成项目目录结构。build: 构建当前项目,按顺序解析依赖、编译和打包。
-
例如,执行集成编译命令:
snow compile [SnowCode].snow
- 此命令会使用
.cloud文件中的配置信息来指导编译过程,并生成.water。
- 此命令会使用
-
使用帮助: 如果你需要了解某个命令的详细选项,可以使用:
snow <command> --help
例如,查看
compile命令的具体选项:snow compile --help
以下是一个简单的 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 目录
项目采用 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 聚合配置
└── ...
-
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 项目。
仓库地址: https://gitee.com/jcnc-org/snow
本项目依据 Apache 2.0 许可证 进行许可和发布。
“SnowLang 项目”为由许轲(Luke)发起的独立开源项目。
未来,项目可能会成立正式的组织或实体,以进一步负责本项目的开发和管理。
如果你喜欢我们的项目,欢迎给我们一个 Star!
你们的关注和支持,是我们团队持续进步的动力源泉!谢谢大家!
- 微信:
xuxiaolankaka - QQ:
1399528359 - 邮箱:
luke.k.xu [at] hotmail.com
