feat: L Language v0.1 编译器完整实现

5 阶段编译流水线: 词法分析 → 语法分析(Pratt) → 语义分析(类型推断) → LLVM IR → .exe

模块:
- lexer: 手写状态机, 40 种 Token, // 和 /* */ 注释
- parser: Pratt 表达式解析(9 级优先级) + 递归下降语句/函数
- ast: 14 种节点类型 + 工厂函数
- sema: 作用域链符号表 + 类型推断 + 类型检查
- codegen: AST → LLVM-C API, print_i64/f64/bool 内建
- driver: 命令行 + 流水线串联 + 错误报告
- util: Arena bump allocator (8MB)

测试: 65 单元测试(词法41+语法15+语义9) + 5 集成测试 全部通过

语言特性: i64/f64/bool/void, let不可变变量, if/else, while, 递归函数
This commit is contained in:
2026-06-05 00:26:59 +08:00
commit 3b7bab1e1b
40 changed files with 5804 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
fn main() -> i64 {
let x: i64 = 1 + 2 * 3;
print_i64(x);
return 0;
}
+9
View File
@@ -0,0 +1,9 @@
fn main() -> i64 {
let x: i64 = 10;
if x > 5 {
print_i64(1);
} else {
print_i64(0);
}
return 0;
}
+11
View File
@@ -0,0 +1,11 @@
fn countdown(n: i64) -> i64 {
if n > 0 {
print_i64(n);
return countdown(n - 1);
}
return 0;
}
fn main() -> i64 {
return countdown(5);
}
+12
View File
@@ -0,0 +1,12 @@
fn fib(n: i64) -> i64 {
if n < 2 {
return n;
}
return fib(n - 1) + fib(n - 2);
}
fn main() -> i64 {
let result: i64 = fib(10);
print_i64(result);
return 0;
}
+14
View File
@@ -0,0 +1,14 @@
fn square(x: f64) -> f64 {
return x * x;
}
fn add_floats(a: f64, b: f64) -> f64 {
return a + b;
}
fn main() -> i64 {
let s: f64 = square(3.0);
let sum: f64 = add_floats(s, 4.0);
print_f64(sum);
return 0;
}