一个用于教学和研究的自举编译器实现,支持基本语言特性和可视化分析
TinyCompiler 是一个用 C++ 实现的编译器前端和解释器。它的主要目标是作为学习编译技术的实践项目,提供了从词法分析、语法分析、语义分析到中间代码生成和解释执行的完整流程。本项目代码结构清晰,注释详尽,非常适合高校学生、教师以及对编译原理感兴趣开发者用于学习和研究。
- 清晰的阶段划分:严格遵循编译器设计的经典阶段,每个模块职责单一,便于理解和修改
- 详细的文档与注释:代码中包含大量注释,关键算法和数据结构都有解释,降低了学习门槛
- 友好的学习工具:
- 支持生成可视化语法树(AST)和控制流图(CFG)
- 提供详细的编译过程日志输出
- 自举能力:可以使用自身来编译部分核心库
- 丰富的测试用例:包含大量正面和负面的测试用例,覆盖了语言的主要特性
- 实现的语言特性:支持变量声明、算术运算、控制流(if/while)、函数定义和基本类型系统
- 多种执行模式:支持编译到中间代码和直接解释执行
本项目主要由以下几个模块构成:
- 前端 (Frontend)
- 词法分析器 (Lexer):手写实现,将源代码转换为令牌(Token)流
- 语法分析器 (Parser):手写递归下降实现,构建抽象语法树(AST)
- 语义分析器 (Semantic Analyzer):进行类型检查、作用域分析和符号表管理
- 中端 (Middle-end)
- 中间代码生成 (IR Generation):生成自定义的三地址码
- 优化器 (Optimizer):实现常量传播和死代码消除优化
- 后端 (Backend)
- 解释器 (Interpreter):直接执行中间代码
- 学习《编译原理》课程的高校学生,希望有一个可参考的实现
- 希望深入理解程序如何从代码变为可执行文件的开发者
- 对语言设计、虚拟机、程序分析感兴趣的研究人员和爱好者
- 任何想为自己设计的领域特定语言(DSL)制作编译器的人