# MiniC **Repository Path**: Naezaer/MiniC ## Basic Information - **Project Name**: MiniC - **Description**: 基于Antlr4和C++实现的一个迷你C语言编译器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-27 - **Last Updated**: 2025-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 【C/C++】手写迷你C语言编译器 ## 项目介绍 编写(项目中有三种方案:antlr、flex/bison、手写递归下降实现,我会分享第一中和第三种)一个模块化的迷你C语言编译器(MiniC)揭开编译器/解释器/解析器的底层工作原理(感兴趣的朋友们可以通过类似的思路创建自己的编程语言和编译器)。 编译器开发工具有很多,如 Flex/Bison/YACC、LLVM、langcc、Antlr、纯手写等等。这期通过Antlr4工具和C++开发一个迷你C语言编译器(MiniC)。Antlr4本身是用Java开发的,但是它可以根据用户定义的词法和语法规则文件生成Java、C++、C#、Python等多种目标语言代码,大大简化了编译器开发过程中的词法/语法/语义分析过程。 MiniC的模块介绍: - **前端**:词法/语法/语义分析(借助Antlr4)、语法分析树构建(CST)、抽象语法树构建(AST)、可视化AST(借助Graphviz)等; - **中间表示**:线性IR生成(可以使用LLVM IR 或者自定义 IR); - **后端**:暂支持arm32汇编生成(后续可以增加Risc-V、MIPS等架构),生成的汇编语言可以通过交叉编译成可执行文件,然后在实体机或者qemu模拟器上运行测试; MiniC的功能介绍(暂不优化,后续增加SSA优化、寄存器分配优化等): - 基本数据类型先只支持bool、char、int、float; - 全局/局部变量声明、定义、初始化、赋值(暂只实现基本类型)以及作用于管理; - 函数声明、函数定义、函数调用、函数传参(包括指针、数组等); - 运算符支持(算术运算、逻辑运算、关系运算、编译器功能运算符如sizeof),其中逻辑运算支持短路求值和数值转换; - 控制语句(条件语句和循环语句); - 指针支持(基本类型); - 数组支持(多维数组、数组声明、数组赋值、数组访问等); - 其他功能后续再实现。