mcc:一个简单易理解的 C 编译器

mcc (minimal c compiler) 是一个小型的 C 编译器,仅支持有限的 C 语言特性,思路来源于 C4。 C4 仅用了少量代码和有限特性实现了自举(1个文件4个函数),非常精巧但却晦涩难懂。 正所谓:编译过程一遍过,递归调用循环调,全局变量随处变,类型转换强制转。 mcc 则走的是相反的路,完全以简单可理解为目标。当然,不可避免地,代码量会大许多,大概有1700多行。 如果你刚刚开始学习编译原理,希望真切地了解编译器前端和虚拟机运行,而不只是书上的文法和期末的试卷,那么可以考虑先看看 mcc,然后再回去看 C4,相信会豁然开朗。 项目地址:https://github.com/patricklaux/mcc 注:C4 是500多行代码。 1. 编译运行 # 下载源码 git clone git@github.com:patricklaux/mcc.git # 编译 mcc gcc -o mcc ./src/mcc/lexer.c ./src/mcc/parser.c ./src/mcc/vm.c ./src/mcc/mcc.c # 使用 mcc 运行测试代码 ./mcc [-s] [-d] ./src/test/test1.c 提示: 除了直接用 gcc 编译,也可以用 cmake,这里不再赘述。 -s 和 -d 为可选参数: -s 打印生成的指令,但不执行;-d 运行并打印整个运行过程执行的指令。 Windows 10 (MinGW_w64 11.0) 和 Ubuntu 22.04 (gcc 11.4.0) 均可正常编译运行。 2. 概要介绍 2.1. 流程 为了便于理解,特意画了几张流程图,按图索骥,相信更容易理解。 ...

2025-07-18 20:00:00 · 刘涛