c4:500 行代码的 C 语言解释器
C4(C in four functions)是 Robert Swierczek 写的一个极简主义练习:用大约 500 行 C 代码实现一个能运行 C 程序的虚拟机和解释器。整个项目就四个函数:next() 词法分析、program() 语法分析生成代码、eval() 虚拟机执行、main() 组装。
它有多强
1 | gcc -o c4 c4.c |
最后一行是它的名场面:c4 可以解释执行 c4 自己(甚至再套一层), demonstrates 了”自举(self-hosting)”的概念。
我做了什么
以 c4 为基础学习整个解释器的骨架:词法分析如何把源码切成 token、虚拟机的指令集(IMM/ADJ/PUSH/JMP/…)、符号表的组织。my_gcc.c 是学习过程中加入自己注释和修改的版本。
为什么值得读
- 一份代码同时覆盖编译原理四大阶段:词法、语法、语义(生成虚拟机指令)、执行
- 没有任何依赖,纯 C,一个周末就能读完
- 读懂它之后再看 Lua 解释器、脚本引擎,结构都是似曾相识的
注意:c4 原版使用 Linux/Mac 的系统调用(open/read/write),Windows 下需要用 WSL 或 Cygwin 环境运行。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 寰宇体的世界!
评论
GiscusTwikoo
