Skip to content

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 综合标准库(算法、容器、工具)

了解更多

Clone this wiki locally