Skip to content

Latest commit

 

History

History
78 lines (54 loc) · 3.37 KB

File metadata and controls

78 lines (54 loc) · 3.37 KB

任务清单:五条并行工作流

实现线与 IMPLEMENTATION_THREADS.md(RT / HIR / codegen / 驱动 / move-std)对齐时可交叉更新。

五条线可同时开工,依赖关系:A(词法) → B(语法) 为前后序;C(驱动/会话) 消费 BD(后端) 可先写 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)

线 1 — LEX(library/sui_llvm_lexer

  • 核心 TokenKind(关键字子集、标点、->Invalid
  • 非法字符:统一策略(Invalid + parser 报错或 lexer 侧 DiagCx
  • 行注释 //;块注释 /* */(嵌套深度支持)
  • 数字字面量(整数、hex 若需要)
  • 单元测试:module 头与注释跳过
  • Move Reference 词法对齐清单(文档勾选项)

线 2 — PARSE(library/sui_llvm_syntax + library/sui_llvm_parse

  • 扩展 AST:fun / struct / use / 表达式(按里程碑分批)
  • Parserpeek/bumpexpect_ident、基础 DiagCx 错误
  • 文法 v0:module <ident>::<ident> { }(空模块体)
  • 将错误写入 DiagCx(带 Span
  • 单元测试:合法模块 + 尾部多余 token

线 3 — DRV(library/sui_llvm_session + compiler/sui_llvm

  • SessionSourceFile 列表、DiagCxadd_file
  • CLI:sui_llvm <file.move>--emit=* 待加)
  • 从路径读入 UTF-8,I/O 错误打印到 stderr
  • 串联:parseemit_parse_tree_ir 打印到 stdout

线 4 — LLVM(library/sui_llvm_codegen_llvm + 后续 sui_llvm_target

  • 纯文本 IR 桩:emit_parse_tree_ir(模块元数据 + 空 define
  • 选定 LLVM 版本,工作区 llvm-sysllvm-config 文档化
  • TargetTriple / DataLayout 占位
  • 对接 HirCrate 的最小端到端(先常量/空函数)

线 5 — QA(tests/ + 各 crate #[cfg(test)]

  • 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)把各线勾选项填满。