依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 24|回复: 0

一门受 LLM 时代启发的、面向 AI 友好的编程语言+编程语言的IDE

[复制链接] 主动推送

2万

主题

2万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21163
发表于 12 小时前 | 显示全部楼层 |阅读模式
一门受 LLM 时代启发的、面向 AI 友好的编程语言+编程语言的IDE
该项目实现了 Snow 语言的完整编译流程,包括词法分析,语法分析,语义分析,中间表示(IR)生成以及最终的虚拟机(VM)指令生成和执行器,提供从源码到字节码再到自研编程语言虚拟机 ( SnowVM) 的完整编译-执行链路。
通过 Snow 编译器,可以将 .snow 源文件编译为 .water虚拟机指令,并在 SnowVM 上直接运行。
从源码编译、构建管理、依赖管理、项目标准化、可视化调试面板到原生镜像发布,全部由 Snow 官方工具完成,降低学习与集成成本。
背景理念
Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的语法和严格的类型系统,以帮助 LLM 更好地理解程序。
语言使用显式的 module 声明来组织代码,用 function,params,returns,body 等关键字分隔不同代码块,语法结构固定且易读。此外,Snow 实现了语义分析来检查变量作用域和类型一致性,在编译阶段捕获错误并确保生成的中间代码正确无误。这种自上而下的编译流程,使得代码设计和生成更加模块化,可解释,也有利于调试和优化。
功能特性[td]
类别关键特性
语言层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 任务
- 离线缓存与远程仓库解析
CLIinit, compile, run, clean, build, generate,debug
开发环境安装
  • 开发环境准备(附件中包含以下软件):

    • 安装集成开发环境 IntelliJ IDEA
    • 安装 Java 开发工具 Graalvm-jdk-24
  • 获取源码: 将项目源码下载或克隆到本地目录。
  • 运行项目
    使用IDEA配置好的运行配置 Demo1

    一门受 LLM 时代启发的、面向 AI 友好的编程语言+编程语言的IDE

    一门受 LLM 时代启发的、面向 AI 友好的编程语言+编程语言的IDE
  • 运行成功
    1. ## 编译器输出
    2. ### Snow 源代码
    3. #### Main.snow
    4. module: Main
    5.     import:Math
    6.     function: main
    7.         returns: int
    8.         body:
    9.             Math.add(6,1)
    10.             return 0
    11.         end body
    12.     end function
    13. end module
    14. line   col    type             lexeme
    15. ----------------------------------------------------
    16. 1      1      KEYWORD          module
    17. 1      7      COLON            :
    18. 1      9      IDENTIFIER       Main
    19. 1      13     NEWLINE          \n

    20. 2      5      KEYWORD          import
    21. 2      11     COLON            :
    22. 2      12     IDENTIFIER       Math
    23. 2      16     NEWLINE          \n

    24. 3      5      KEYWORD          function
    25. 3      13     COLON            :
    26. 3      15     IDENTIFIER       main
    27. 3      19     NEWLINE          \n

    28. 4      9      KEYWORD          returns
    29. 4      20     COLON            :
    30. 4      22     TYPE             int
    31. 4      25     NEWLINE          \n

    32. 5      9      KEYWORD          body
    33. 5      13     COLON            :
    34. 5      14     NEWLINE          \n

    35. 6      13     IDENTIFIER       Math
    36. 6      17     DOT              .
    37. 6      18     IDENTIFIER       add
    38. 6      21     LPAREN           (
    39. 6      22     NUMBER_LITERAL   6
    40. 6      23     COMMA            ,
    41. 6      24     NUMBER_LITERAL   1
    42. 6      25     RPAREN           )
    43. 6      26     NEWLINE          \n

    44. 7      13     KEYWORD          return
    45. 7      20     NUMBER_LITERAL   0
    46. 7      21     NEWLINE          \n

    47. 8      9      KEYWORD          end
    48. 8      13     KEYWORD          body
    49. 8      17     NEWLINE          \n

    50. 9      5      KEYWORD          end
    51. 9      9      KEYWORD          function
    52. 9      17     NEWLINE          \n

    53. 10     1      KEYWORD          end
    54. 10     5      KEYWORD          module
    55. 10     1      EOF              
    56. ## 词法分析通过,没有发现错误

    57. #### Math.snow
    58. module: Math
    59.     function: add
    60.         params:
    61.             declare n1: int
    62.             declare n2: int
    63.         returns: int
    64.         body:
    65.            return n1 + n2
    66.         end body
    67.     end function
    68. end module
    69. line   col    type             lexeme
    70. ----------------------------------------------------
    71. 1      1      KEYWORD          module
    72. 1      7      COLON            :
    73. 1      9      IDENTIFIER       Math
    74. 1      13     NEWLINE          \n

    75. 2      5      KEYWORD          function
    76. 2      13     COLON            :
    77. 2      15     IDENTIFIER       add
    78. 2      18     NEWLINE          \n

    79. 3      9      KEYWORD          params
    80. 3      18     COLON            :
    81. 3      19     NEWLINE          \n

    82. 4      13     KEYWORD          declare
    83. 4      21     IDENTIFIER       n1
    84. 4      23     COLON            :
    85. 4      25     TYPE             int
    86. 4      28     NEWLINE          \n

    87. 5      13     KEYWORD          declare
    88. 5      21     IDENTIFIER       n2
    89. 5      23     COLON            :
    90. 5      25     TYPE             int
    91. 5      28     NEWLINE          \n

    92. 6      9      KEYWORD          returns
    93. 6      20     COLON            :
    94. 6      22     TYPE             int
    95. 6      25     NEWLINE          \n

    96. 7      9      KEYWORD          body
    97. 7      13     COLON            :
    98. 7      14     NEWLINE          \n

    99. 8      12     KEYWORD          return
    100. 8      19     IDENTIFIER       n1
    101. 8      22     PLUS             +
    102. 8      24     IDENTIFIER       n2
    103. 8      26     NEWLINE          \n

    104. 9      9      KEYWORD          end
    105. 9      13     KEYWORD          body
    106. 9      17     NEWLINE          \n

    107. 10     5      KEYWORD          end
    108. 10     9      KEYWORD          function
    109. 10     17     NEWLINE          \n

    110. 11     1      KEYWORD          end
    111. 11     5      KEYWORD          module
    112. 11     1      EOF        

    113. ## 词法分析通过,没有发现错误

    114. ## 语义分析通过,没有发现错误

    115. ### AST
    116. [
    117.   {
    118.     "type": "Module",
    119.     "name": "Main",
    120.     "imports": [
    121.       {
    122.         "type": "Import",
    123.         "module": "Math"
    124.       }
    125.     ],
    126.     "functions": [
    127.       {
    128.         "type": "Function",
    129.         "name": "main",
    130.         "parameters": [
    131.          
    132.         ],
    133.         "returnType": "int",
    134.         "body": [
    135.           {
    136.             "type": "ExpressionStatement",
    137.             "expression": {
    138.               "type": "CallExpression",
    139.               "callee": {
    140.                 "type": "MemberExpression",
    141.                 "object": {
    142.                   "type": "Identifier",
    143.                   "name": "Math"
    144.                 },
    145.                 "member": "add"
    146.               },
    147.               "arguments": [
    148.                 {
    149.                   "type": "NumberLiteral",
    150.                   "value": "6"
    151.                 },
    152.                 {
    153.                   "type": "NumberLiteral",
    154.                   "value": "1"
    155.                 }
    156.               ]
    157.             }
    158.           },
    159.           {
    160.             "type": "Return",
    161.             "value": {
    162.               "type": "NumberLiteral",
    163.               "value": "0"
    164.             }
    165.           }
    166.         ]
    167.       }
    168.     ]
    169.   },
    170.   {
    171.     "type": "Module",
    172.     "name": "Math",
    173.     "imports": [
    174.       
    175.     ],
    176.     "functions": [
    177.       {
    178.         "type": "Function",
    179.         "name": "add",
    180.         "parameters": [
    181.           {
    182.             "name": "n1",
    183.             "type": "int"
    184.           },
    185.           {
    186.             "name": "n2",
    187.             "type": "int"
    188.           }
    189.         ],
    190.         "returnType": "int",
    191.         "body": [
    192.           {
    193.             "type": "Return",
    194.             "value": {
    195.               "type": "BinaryExpression",
    196.               "left": {
    197.                 "type": "Identifier",
    198.                 "name": "n1"
    199.               },
    200.               "operator": "+",
    201.               "right": {
    202.                 "type": "Identifier",
    203.                 "name": "n2"
    204.               }
    205.             }
    206.           }
    207.         ]
    208.       }
    209.     ]
    210.   }
    211. ]
    212. ### IR
    213. func main() {
    214.   %0 = CONST 6
    215.   %1 = CONST 1
    216.   %2 = CALL Math.add, %0, %1
    217.   %3 = CONST 0
    218.   RET %3
    219. }
    220. func add(%0, %1) {
    221.   %2 = ADD_I32 %0, %1
    222.   RET %2
    223. }

    224. ### VM code
    225. 0000: I_PUSH     6
    226. 0001: I_STORE    0
    227. 0002: I_PUSH     1
    228. 0003: I_STORE    1
    229. 0004: I_LOAD     0
    230. 0005: I_LOAD     1
    231. 0006: CALL       13 2
    232. 0007: I_STORE    2
    233. 0008: I_PUSH     0
    234. 0009: I_STORE    3
    235. 0010: I_LOAD     3
    236. 0011: HALT      
    237. 0012: HALT      
    238. 0013: I_LOAD     0
    239. 0014: I_LOAD     1
    240. 0015: I_ADD      
    241. 0016: I_STORE    2
    242. 0017: I_LOAD     2
    243. 0018: RET        
    244. 0019: RET        
    245. Written to D:\Devs\IdeaProjects\Snow\target\Demo1.water

    246. === Launching VM ===

    247. Calling function at address: 13

    248. Return 7

    249. Process has ended

    250. Operand Stack state:[0]

    251. --- Call Stack State ---

    252. ### VM Local Variable Table:
    253. 0: 6
    254. 1: 1
    255. 2: 7
    256. 3: 0

    257. === VM exited ===
    复制代码


编译 Snow 源代码1. 独立编译 (Standalone Compilation)
独立编译不依赖 .cloud 文件,而是直接使用 Snow 编译器进行 .snow 文件的编译和执行。
独立编译步骤:
  • 运行编译器: 你可以通过以下命令来编译单个或多个 .snow 文件,或者递归编译一个目录中的所有 .snow 源文件为.water虚拟机指令。

    • 单个文件编译:
      Snow complete [SnowCode].snow
    • 多个文件编译:
      Snow complete [SnowCode1].snow [SnowCode2].snow [SnowCode3].snow -o [Name]
    • 目录递归编译:
      Snow -d path/to/source_dir
  • 查看编译输出: 编译过程会输出源代码、抽象语法树(AST)、中间表示(IR)以及虚拟机指令等内容。你可以看到如下几个分段输出:

    • AST(抽象语法树)部分以 JSON 格式输出。
    • IR(中间表示)部分会列出逐行的中间代码。
    • VM code(虚拟机指令)会展示虚拟机的字节码指令。
  • 默认执行模式: 编译器会在 RUN 模式 下运行,DEBUG 模式显示详细的执行过程和状态,并且在虚拟机中执行编译后的代码,最后会打印出所有局部变量的值。


2. 集成编译 (Integrated Compilation)
集成编译需要使用 .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 代码示例,演示模块定义,导入和函数声明的基本语法:
  1. module: Math
  2.     function: main
  3.         returns: int
  4.         body:
  5.             Math.factorial(6)
  6.             return 0
  7.         end body
  8.     end function

  9.     function: factorial
  10.         params:
  11.             declare n:int
  12.         returns: int
  13.         body:
  14.             declare num1:int = 1
  15.             loop:
  16.                 init:
  17.                     declare counter:int = 1
  18.                 cond:
  19.                     counter <= n
  20.                 step:
  21.                     counter = counter + 1
  22.                 body:
  23.                     num1 = num1 * counter
  24.                 end body
  25.             end loop
  26.             return num1
  27.         end body
  28.     end function
  29. 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 目录
项目结构说明
  • compiler/: Snow 编译器源代码目录

    • lexer/: 词法分析模块,负责将源码切分为 Token
    • parser/: 语法分析模块,将 Token 流解析为 AST(含模块/函数/语句解析)
    • semantic/: 语义分析模块,负责符号表管理、类型检查等
    • ir/: 中间表示(IR)模块,生成并管理三地址码形式的中间代码
    • backend/: 编译器后端模块,将 IR 翻译为虚拟机指令,包含寄存器分配和指令生成器
  • vm/: 虚拟机相关源代码目录

    • commands/: 定义 SnowVM 指令集的具体实现
    • engine/: 核心执行引擎,提供指令执行和寄存器/栈管理
    • execution/: 执行流程控制(按指令顺序执行、分支跳转等)
    • io/: 输入输出辅助类(加载指令、文件解析等)
    • gui/: Swing 可视化调试面板,实时展示局部变量表
    • factories/、utils/: 指令创建、日志调试等公共工具
  • pkg/: 内置构建与包管理器 snow pkg

    • dsl/: .cloud 描述文件解析器
    • tasks/: 预设任务实现(clean · compile · run · package · publish 等)
    • resolver/: 本地/远程仓库解析与缓存
    • lifecycle/: 任务生命周期钩子(pre/post 脚本等)
    • model/: 项目、依赖、版本等模型
    • utils/: 文件、日志、校验和等通用工具
    • doc/: 开发者文档与示例 .cloud 配置
  • cli/: 独立的命令行前端

    • commands/: compile / run / pkg 等子命令实现
    • api/: 公共选项解析、终端交互抽象
    • utils/: 终端颜色、进度条、异常格式化等
    • SnowCLI.java: CLI 主入口



链接: https://pan.baidu.com/s/182ooWVwRHFRbUcA-iX3iHw
提取码下载:
文件名称:提取码下载.txt 
下载次数:0  文件大小:16 Bytes  售价:199金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员6折;永久VIP4折】
安全检测,请放心下载




相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-8-27 21:56

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表