-
Notifications
You must be signed in to change notification settings - Fork 0
Introduction
HZY1618yzh edited this page Jul 27, 2026
·
1 revision
mio 是一种编译型编程语言,是 mio 解释器的进化版。首个编译版本使用 C 语言实现,第二版使用 C++ 语言实现。编译器将 .mio 源文件翻译为 LLVM IR,再直接生成原生可执行文件。
- 高性能:基于 LLVM 后端,生成优化的原生机器码
- C 语言亲和:语法接近 C,易于 C/C++ 开发者上手
- 系统编程:支持指针、内存管理、结构体、联合体等底层特性
- 面向对象:支持类、继承、虚函数、运算符重载
- 泛型编程:模板系统支持函数和类的泛型化
- 零运行时依赖:不依赖虚拟机或运行时环境
mio 编译器采用经典的三段式架构:
源代码 (.mio) → Lexer → Parser → AST → CodeGen → 目标文件 (.o) → LLD 链接 → 可执行文件
| 模块 | 文件 | 功能 |
|---|---|---|
| 词法单元 | token.hpp |
定义所有 Token 类型和关键字 |
| 词法分析器 | lexer.hpp |
将源代码转换为 Token 序列 |
| 类型系统 | types.hpp |
Mio 语言的类型表示 |
| 抽象语法树 | ast.hpp |
AST 节点定义和构造 |
| 语法分析器 | parser.hpp |
递归下降解析,生成 AST |
| 代码生成器 | codegen.hpp |
LLVM IR 生成和链接 |
| 编译器入口 | main.cpp |
命令行解析和流程编排 |
| 类型 | 说明 | 位宽 |
|---|---|---|
i8 / i16 / i32 / i64 / i128
|
有符号整数 | 8/16/32/64/128 |
u8 / u16 / u32 / u64 / u128
|
无符号整数 | 8/16/32/64/128 |
isize / usize
|
指针宽度整数 | 32/64 位自适应 |
f32 / f64
|
浮点数 | 32/64 |
bool |
布尔值 | - |
char |
字符 | 8 |
void |
空类型 | - |
| 类型 | 说明 | 示例 |
|---|---|---|
T* |
指针 | i32* |
T[N] |
定长数组 | i32[10] |
struct |
结构体 | 值语义 |
class |
类 | 引用语义,支持继承 |
enum |
枚举 | 底层 i32 |
union |
联合体 | 共享内存 |
条件语句和循环语句的关键字后必须跟冒号:
if: x > 0 {
printf("positive\n");
} elif: x < 0 {
printf("negative\n");
} else {
printf("zero\n");
}
while: i < 10 {
i = i + 1;
}
for: i = 0; i < 10; i = i + 1 {
printf("%d\n", i);
}
支持显式返回和隐式返回(最后一行不加分号):
# 显式返回
i32 add(a: i32, b: i32) {
return a + b;
}
# 隐式返回
i32 add(a: i32, b: i32) {
a + b
}
template<T:typename>
T max(a: T, b: T) {
if: a > b {
return a;
}
return b;
}
# 使用
var x = max(10, 20); # 自动推导
var y = max<f64>(3.14, 2.71); # 显式指定
| 模块 | 说明 |
|---|---|
stdio |
C 标准 I/O 函数 |
string |
字符串和内存操作 |
stdlib |
内存分配、进程控制 |
math |
数学函数 |
std |
综合标准库(算法、容器、工具) |