Skip to content

ha1fseven/Compilation_

Repository files navigation

TinyCompiler

一个用于教学和研究的自举编译器实现,支持基本语言特性和可视化分析


📖 概述

TinyCompiler 是一个用 C++ 实现的编译器前端和解释器。它的主要目标是作为学习编译技术的实践项目,提供了从词法分析、语法分析、语义分析到中间代码生成和解释执行的完整流程。本项目代码结构清晰,注释详尽,非常适合高校学生、教师以及对编译原理感兴趣开发者用于学习和研究。

✨ 关键特性

  • 清晰的阶段划分:严格遵循编译器设计的经典阶段,每个模块职责单一,便于理解和修改
  • 详细的文档与注释:代码中包含大量注释,关键算法和数据结构都有解释,降低了学习门槛
  • 友好的学习工具
    • 支持生成可视化语法树(AST)和控制流图(CFG)
    • 提供详细的编译过程日志输出
  • 自举能力:可以使用自身来编译部分核心库
  • 丰富的测试用例:包含大量正面和负面的测试用例,覆盖了语言的主要特性
  • 实现的语言特性:支持变量声明、算术运算、控制流(if/while)、函数定义和基本类型系统
  • 多种执行模式:支持编译到中间代码和直接解释执行

🏗️ 技术架构

本项目主要由以下几个模块构成:

  1. 前端 (Frontend)
    • 词法分析器 (Lexer):手写实现,将源代码转换为令牌(Token)流
    • 语法分析器 (Parser):手写递归下降实现,构建抽象语法树(AST)
    • 语义分析器 (Semantic Analyzer):进行类型检查、作用域分析和符号表管理
  2. 中端 (Middle-end)
    • 中间代码生成 (IR Generation):生成自定义的三地址码
    • 优化器 (Optimizer):实现常量传播和死代码消除优化
  3. 后端 (Backend)
    • 解释器 (Interpreter):直接执行中间代码

🎯 适用人群

  • 学习《编译原理》课程的高校学生,希望有一个可参考的实现
  • 希望深入理解程序如何从代码变为可执行文件的开发者
  • 对语言设计、虚拟机、程序分析感兴趣的研究人员和爱好者
  • 任何想为自己设计的领域特定语言(DSL)制作编译器的人

About

支持C++小型代码词法分析/语法分析/语义分析的模拟编译器代码,仅供学习参考。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages