实现线与 IMPLEMENTATION_THREADS.md(RT / HIR / codegen / 驱动 / move-std)对齐时可交叉更新。
五条线可同时开工,依赖关系:A(词法) → B(语法) 为前后序;C(驱动/会话) 消费 B;D(后端) 可先写 IR 拼装与桩;E(测试/CI) 与 A–D 并行,用 fixture 钉住行为。
| 线 | 代号 | 职责 | 依赖 |
|---|---|---|---|
| 1 | LEX | 词法:Token/Lexer、注释、关键字与标点 |
sui_llvm_span |
| 2 | PARSE | 语法:AST、模块级文法、Parser + DiagCx |
LEX, sui_llvm_syntax, sui_llvm_errors |
| 3 | DRV | 驱动:Session、读入源文件、CLI、阶段编排 |
PARSE, sui_llvm_session |
| 4 | LLVM | 后端:LLVM IR 文本/FFI 边界、Target、可测的 emit 桩 |
sui_llvm_hir(可先字符串 API) |
| 5 | QA | 测试与 CI:单测、fixture、tests/、后续 ui 测试脚手架 |
全库(桩阶段可只测 LEX/PARSE) |
- 核心
TokenKind(关键字子集、标点、->、Invalid) - 非法字符:统一策略(
Invalid+ parser 报错或 lexer 侧DiagCx) - 行注释
//;块注释/* */(嵌套深度支持) - 数字字面量(整数、hex 若需要)
- 单元测试:
module头与注释跳过 - 与 Move Reference 词法对齐清单(文档勾选项)
- 扩展 AST:
fun/struct/use/ 表达式(按里程碑分批) -
Parser:peek/bump、expect_ident、基础DiagCx错误 - 文法 v0:
module <ident>::<ident> { }(空模块体) - 将错误写入
DiagCx(带Span) - 单元测试:合法模块 + 尾部多余 token
-
Session:SourceFile列表、DiagCx、add_file - CLI:
sui_llvm <file.move>(--emit=*待加) - 从路径读入 UTF-8,I/O 错误打印到 stderr
- 串联:
parse→emit_parse_tree_ir打印到 stdout
- 纯文本 IR 桩:
emit_parse_tree_ir(模块元数据 + 空define) - 选定 LLVM 版本,工作区
llvm-sys与llvm-config文档化 -
TargetTriple/DataLayout占位 - 对接
HirCrate的最小端到端(先常量/空函数)
-
tests/fixtures/min_module.move+compiler/sui_llvm/tests/fixture_parse.rs -
examples/*.move(5 个基准)+compiler/sui_llvm/tests/examples_parse.rs -
cargo test --workspace覆盖 lexer/parser 与 fixture - (后续)
trybuild风格 UI 测试或自研.stderr对比 - CI 工作流:fmt + clippy + test(无 LLVM 机器上可先跳过 codegen 链接)
- 线 1:基础
Lexer+module a::b { }所需 token - 线 2:解析最简
module头 - 线 3:
Session+ 驱动读文件 - 线 4:
codegen模块名桩 IR 注释 - 线 5:lexer/parser 单元测试
后续迭代按 M1/M2…(见 ARCHITECTURE.md)把各线勾选项填满。