docs: README/CHANGELOG/语言参考更新至 v0.6
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user