docs: README/CHANGELOG/语言参考更新至 v0.6

This commit is contained in:
2026-06-05 21:02:05 +08:00
parent 459d1e1e10
commit 2baf762d82
3 changed files with 108 additions and 18 deletions
+20 -13
View File
@@ -4,7 +4,7 @@
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-0.5.0-blue" alt="version">
<img src="https://img.shields.io/badge/version-0.6.0-blue" alt="version">
<img src="https://img.shields.io/badge/C-17-555555" alt="C">
<img src="https://img.shields.io/badge/LLVM-22.1.7-4B8BBE" alt="LLVM">
<img src="https://img.shields.io/badge/GCC-15.x-darkgreen" alt="GCC">
@@ -16,18 +16,20 @@
## 简介
L Language 是一门学习型编译语言,手写词法分析、递归下降 + Pratt 解析、语义分析和 LLVM IR 代码生成,最终生成原生可执行文件。语法借鉴 Rust,类型系统支持类型推断
L Language 是一门学习型编译语言,手写词法分析、递归下降 + Pratt 解析、语义分析和 LLVM IR 代码生成,最终生成原生可执行文件。语法博采众长(Rust/Swift/Elixir),拥有管道、字符串插值、命名参数等独有特性
📖 **[语言参考手册](docs/language-reference.md)** — 完整的语法、类型、示例教程
```rust
fn fib(n: i64) -> i64 {
if n < 2 { return n; }
return fib(n - 1) + fib(n - 2);
fn double(x: i64) -> i64 {
return x * 2;
}
fn main() -> i64 {
print_i64(fib(10)); // 输出 55
let name = "L";
print_str("Hello, \(name)!"); // 字符串插值
let result = 10 |> double() |> double(); // 管道
print_i64(result); // 40
return 0;
}
```
@@ -41,8 +43,8 @@ fn main() -> i64 {
```mermaid
graph TB
subgraph 前端["编译器前端"]
Lexer[词法分析器<br/>手写状态机<br/>40 种 Token]
Parser[语法分析器<br/>递归下降 + Pratt<br/>14 种 AST 节点]
Lexer[词法分析器<br/>手写状态机<br/>55+ 种 Token]
Parser[语法分析器<br/>递归下降 + Pratt<br/>25 种 AST 节点]
Sema[语义分析器<br/>作用域链 + 类型推断<br/>类型检查 + 错误收集]
end
@@ -69,13 +71,13 @@ graph TB
| 模块 | 输入 | 输出 | 核心结构 |
|------|------|------|----------|
| `lexer/` | `char*` 源码 | `Token[]` | `Token` {kind, start, length, line, col} |
| `parser/` | `Token[]` | `AstNode*` | 14 种节点 (Program..IdentExpr) |
| `parser/` | `Token[]` | `AstNode*` | 25 种节点 (Program..MethodCall) |
| `ast/` | — | 工厂函数 | `AstNode` {kind, type, as{union}} |
| `sema/` | `AstNode*` | 类型标注 | `Scope` 作用域链 + `Symbol` 符号表 |
| `codegen/` | `AstNode*` | `LLVMModuleRef` | `CgCtx` {module, builder, var_table} |
| `driver/` | 命令行参数 | exit code | 流水线串联 + 错误报告 |
## 功能 (v0.5)
## 功能 (v0.6)
### 类型系统
@@ -103,6 +105,7 @@ graph TB
- `while` 循环
- `for i in 0 to 10` (去糖为 while)
- `match expr { pat => { ... } _ => { ... } }` (去糖为 if-else)
- `guard x >= 0 else { return -1; }` (去糖为 if-else)
- `return`
### 函数 & 方法
@@ -111,11 +114,15 @@ graph TB
- 返回类型校验
- `extend StructName { fn method(self: Type) -> Ret { ... } }`
- `instance.method(args)` 调用
- **命名参数**`draw_rect(width: 10, height: 20)` 任意顺序传参
- **管道 `|>`**`10 |> double() |> add(5)` 数据流从左到右
- 内建函数:`print_i64`, `print_f64`, `print_bool`, `print_str`
### 运算符
### 运算符 & 语法糖
`+ - * / %` `== != < > <= >=` `&& || !` `+= -= *= /=` `str + str`
`+ - * / %` `== != < > <= >=` `&& || !` `+= -= *= /=` `|>` `str + str`
- **字符串插值**`"Hello, \(name)!"``"Hello, " + name + "!"`
### 内存管理
@@ -159,7 +166,7 @@ mingw32-make -j4
# 构建
cd build && mingw32-make -j4
# 运行全部测试 (158 单元 + 24 集成)
# 运行全部测试 (158 单元 + 29 集成)
./l_lang_lexer_test.exe # 词法分析 (41 tests)
./l_lang_test.exe # 语法分析 (15 tests)
./l_lang_sema_test.exe # 语义分析 (74 tests)