docs: CLAUDE.md v0.7 全面更新 — 架构/类型/限制/测试同步
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 项目概述
|
## 项目概述
|
||||||
|
|
||||||
L Language v0.6 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法 → 语义 → IR → 可执行文件。197 单元测试 + 36 集成程序。
|
L Language v0.7 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法(+去糖)→ 语义 → IR → 可执行文件。197 单元测试 + 37 集成程序。
|
||||||
|
|
||||||
## 语言设计哲学
|
## 语言设计哲学
|
||||||
|
|
||||||
@@ -135,23 +135,29 @@ L Language/
|
|||||||
│ │ └── lexer.h/c 手写状态机,72 种 Token 类型
|
│ │ └── lexer.h/c 手写状态机,72 种 Token 类型
|
||||||
│ ├── parser/
|
│ ├── parser/
|
||||||
│ │ ├── parse_internal.h 共享 Parser struct + 内联辅助
|
│ │ ├── parse_internal.h 共享 Parser struct + 内联辅助
|
||||||
│ │ ├── parser.h/c 语句/声明/程序入口 (564 行)
|
│ │ ├── parser.h/c 语句/声明/程序入口 (603 行)
|
||||||
│ │ ├── expr.c 表达式/类型解析 (484 行, Pratt 主循环)
|
│ │ ├── expr.c 表达式/类型解析 (485 行, Pratt 主循环)
|
||||||
│ │ └── desugar.h/c 独立去糖 pass (109 行, match/guard/for/if-let/复合赋值)
|
│ │ ├── desugar.h/c 独立去糖 pass (109 行, 5 种去糖)
|
||||||
|
│ │ └── (parser.h) 公开接口
|
||||||
│ ├── ast/
|
│ ├── ast/
|
||||||
│ │ └── ast.h/c 27 种 AST 节点 + 工厂函数
|
│ │ ├── ast.h/c 27 种 AST 节点 + 工厂函数
|
||||||
|
│ │ ├── visit.h/c Visitor 统一 dispatch 框架
|
||||||
|
│ │ └── (ast.h) 公开接口
|
||||||
│ ├── sema/
|
│ ├── sema/
|
||||||
│ │ ├── sema_internal.h 共享声明 + 向前声明
|
│ │ ├── sema_internal.h 共享声明 + 向前声明
|
||||||
│ │ ├── symbol.h/c 作用域链 (Scope* parent 链表)
|
│ │ ├── symbol.h/c 作用域链 (Scope* parent 链表)
|
||||||
│ │ ├── sema.h/c 语义分析入口 + analyze_node (499 行)
|
│ │ ├── sema.h/c 语义分析入口 + analyze_node (500 行)
|
||||||
│ │ └── typeck.c 表达式类型检查 + 泛型单态化 (629 行)
|
│ │ ├── typeck.c 表达式类型检查 (559 行, Visitor dispatch)
|
||||||
|
│ │ ├── mono.c 泛型单态化 (97 行, AST 类型替换)
|
||||||
|
│ │ └── type_table.h/c 数据驱动类型描述表 (14 种)
|
||||||
│ ├── codegen/
|
│ ├── codegen/
|
||||||
│ │ ├── codegen_internal.h 共享 CgCtx + 表操作声明
|
│ │ ├── codegen_internal.h 共享 CgCtx + 表操作声明
|
||||||
│ │ ├── codegen.h/c 语句生成 + 模块入口 (453 行)
|
│ │ ├── codegen.h/c 语句生成 + 模块入口 (454 行)
|
||||||
│ │ └── cg_expr.c LLVM 表达式生成 + 类型映射 (440 行)
|
│ │ ├── cg_expr.c LLVM 表达式生成 (426 行, Visitor dispatch)
|
||||||
|
│ │ └── target.h/c 目标平台输出 (obj 文件)
|
||||||
│ ├── driver/
|
│ ├── driver/
|
||||||
│ │ ├── main.c 入口 + 命令行解析 + 流水线串联
|
│ │ ├── main.c 入口 + 命令行解析 + 流水线串联
|
||||||
│ │ └── error.h/c ErrorInfo / ErrorList 错误报告
|
│ │ └── error.h/c ErrorInfo / ErrorList (arena 分配)
|
||||||
│ └── util/
|
│ └── util/
|
||||||
│ └── arena.h/c Bump allocator (8MB, 8 字节对齐)
|
│ └── arena.h/c Bump allocator (8MB, 8 字节对齐)
|
||||||
├── test/
|
├── test/
|
||||||
@@ -160,7 +166,7 @@ L Language/
|
|||||||
│ ├── test_parser.c 语法测试 (54 tests, 20 functions)
|
│ ├── test_parser.c 语法测试 (54 tests, 20 functions)
|
||||||
│ ├── test_sema.c 语义测试 (74 tests, 24 functions)
|
│ ├── test_sema.c 语义测试 (74 tests, 24 functions)
|
||||||
│ ├── test_codegen.c 代码生成测试 (28 tests, 10 functions)
|
│ ├── test_codegen.c 代码生成测试 (28 tests, 10 functions)
|
||||||
│ └── programs/ .l 集成测试 (36 个程序)
|
│ └── programs/ .l 集成测试 (37 个程序)
|
||||||
├── docs/
|
├── docs/
|
||||||
│ ├── PRD.md 产品需求文档
|
│ ├── PRD.md 产品需求文档
|
||||||
│ └── superpowers/plans/ 实现计划
|
│ └── superpowers/plans/ 实现计划
|
||||||
@@ -211,12 +217,21 @@ LLVMModuleRef codegen_module(AstNode* ast, const char* module_name,
|
|||||||
|
|
||||||
## 类型系统
|
## 类型系统
|
||||||
|
|
||||||
| L 类型 | LLVM 类型 | C 常量创建 |
|
| L 类型 | LLVM 类型 | 说明 |
|
||||||
|--------|-----------|-----------|
|
|--------|-----------|------|
|
||||||
| `i64` | `LLVMInt64Type()` | `LLVMConstInt(ty, val, true)` |
|
| `i32` | `LLVMInt32Type()` | 有符号 32-bit |
|
||||||
| `f64` | `LLVMDoubleType()` | `LLVMConstReal(ty, val)` |
|
| `i64` | `LLVMInt64Type()` | 有符号 64-bit (默认整数) |
|
||||||
| `bool` | `LLVMInt1Type()` | `LLVMConstInt(ty, val, false)` |
|
| `u64` | `LLVMInt64Type()` | 无符号 64-bit |
|
||||||
| `void` | `LLVMVoidType()` | — |
|
| `f64` | `LLVMDoubleType()` | 双精度浮点 |
|
||||||
|
| `bool` | `LLVMInt1Type()` | 布尔 |
|
||||||
|
| `char` | `LLVMInt8Type()` | 字符 |
|
||||||
|
| `str` | `i8*` (指针) | 字符串,拼接用 malloc+memcpy |
|
||||||
|
| `void` | `LLVMVoidType()` | 无返回值 |
|
||||||
|
| `struct` | `LLVMStructType()` | 结构体,字段 GEP |
|
||||||
|
| `enum` | `{i64, i64}` | tagged union |
|
||||||
|
| `array` | `LLVMArrayType()` | 固定大小 `T[N]`,GEP 索引 |
|
||||||
|
|
||||||
|
类型表统一管理在 `type_table.c`(promote/convert/numeric 查表驱动)。
|
||||||
|
|
||||||
类型推断规则:
|
类型推断规则:
|
||||||
- 字面量:`42` → `i64`, `3.14` → `f64`, `true` → `bool`
|
- 字面量:`42` → `i64`, `3.14` → `f64`, `true` → `bool`
|
||||||
@@ -270,19 +285,32 @@ done
|
|||||||
- **C17 标准**:`-Wall -Wextra -g`,零编译警告
|
- **C17 标准**:`-Wall -Wextra -g`,零编译警告
|
||||||
- **Arena 分配**:Token、AST、符号表全部从 arena 分配,无 malloc/free 散落
|
- **Arena 分配**:Token、AST、符号表全部从 arena 分配,无 malloc/free 散落
|
||||||
- **LLVM 路径**:`D:\settings\Language\LLVM`,C API 头文件手动补充(v22.1.7 预编译包缺少部分头文件)
|
- **LLVM 路径**:`D:\settings\Language\LLVM`,C API 头文件手动补充(v22.1.7 预编译包缺少部分头文件)
|
||||||
- **链接器**:MinGW 环境用 **gcc** 链接(非 clang,避免 MSVC 依赖)
|
- **链接器**:自包含 clang+lld(优先),gcc fallback。CreateProcess 替代 system()
|
||||||
- **Windows**:仅支持 Windows 11 + MinGW-w64
|
- **Windows**:仅支持 Windows 11 + MinGW-w64
|
||||||
- **错误消息**:中文,格式 `文件名:行号:列号: 描述`
|
- **错误消息**:中文,格式 `文件名:行号:列号: 描述`
|
||||||
|
|
||||||
## 已知限制 (v0.5)
|
## 已知限制 (v0.7)
|
||||||
|
|
||||||
- 无泛型 (单态化)
|
- 无指针/引用类型(`&T`, `*T`)
|
||||||
- 无 trait / 接口
|
- 无借用检查(远期)
|
||||||
- 无模块系统(所有代码单文件)
|
|
||||||
- 无指针/引用类型
|
|
||||||
- 借用检查 (远期)
|
|
||||||
- 嵌套数组支持有限
|
- 嵌套数组支持有限
|
||||||
- `match` 仅语句级(非表达式)
|
- 无闭包 / lambda
|
||||||
|
- 无多返回值(`(T, U)` 元组)
|
||||||
|
- 无标准库
|
||||||
|
- 仅单文件+mod 模块,无包管理器
|
||||||
|
- Windows 独占(LLVM 22 + MinGW-w64)
|
||||||
|
|
||||||
|
### 近期已解决 (v0.5→v0.7)
|
||||||
|
|
||||||
|
- ✅ 泛型单态化 (`fn id<T>(x: T) -> T`)
|
||||||
|
- ✅ trait / 接口 (`trait Show` + `extend Trait Struct`)
|
||||||
|
- ✅ 模块系统 (`mod` + `use` + `pub`)
|
||||||
|
- ✅ ADT 枚举关联数据 (`enum Option { Some(T), None }`)
|
||||||
|
- ✅ `if let` 模式匹配语法糖
|
||||||
|
- ✅ 表达式作为值 (`if-expr`, block 最后表达式)
|
||||||
|
- ✅ 独立 desugar pass (match/guard/for/if-let/复合赋值)
|
||||||
|
- ✅ TypeTable 数据驱动 + AST Visitor dispatch
|
||||||
|
- ✅ 全部源文件 <800 行,197 单元 + 37 集成测试
|
||||||
|
|
||||||
## 版本号升级清单
|
## 版本号升级清单
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user