『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——总体设计概述
本编译器源自『编译技术』课程设计,针对C语言子集SysY
文法的源代码生成Mips
体系架构目标代码。
章节目录
- 『编译技术』SysY-Mips编译器设计——总体设计概述
- 『编译技术』SysY-Mips编译器设计——词法分析
- 『编译技术』SysY-Mips编译器设计——语法分析
- 『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
- 『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
- 『编译技术』SysY-Mips编译器设计——目标代码Mips生成
- 『编译技术』SysY-Mips编译器设计——中端代码优化
- 『编译技术』SysY-Mips编译器设计——后端代码优化
- 『编译技术』SysY-Mips编译器设计——实验总结
零. 支持文法
一. 总体结构
本编译器采用经典的前端-中端-后端架构,前端负责词法分析,语法分析,符号表建立,错误处理部分,中端负责生成中间代码LLVM以及中间代码优化,后端负责生成目标代码MIPS以及后端代码优化。
二. 接口设计
本编译器秉持着高内聚,低耦合的思想,将核心功能完整封装在了各个子模块,而主类Compiler仅保留调用子模块的接口,编译步骤跟随调用的接口依次为:
clearAnnotation
:删除代码中的注释parseCompUnit
:语法分析,依据语法规则生成语法树,同时伴随着词法分析与生成符号表,并进行错误处理printWrongInfo
:若代码出错,则打印报错信息并暂停编译过程genLLVM
:生成中间代码LLVM,并将其逻辑结构保存在IrModule中optimizeLLVM
:进行中间代码优化,通过调节IrModule中的FLAG可随时关闭/开启优化setMipsModule
/genMips
:将中间代码的结构依次装填入后端Mips的结构中,并生成最终的目标代码Mips
三. 文件说明
文件树如下所示:
FrontEnd
:前端代码包Core
:内含语法分析器与词法分析器,是前端解析的精髓Info
:存储解析中遇到的错误,单词等相关信息NonTerminal
:存储文法内各个非终结符节点SymbolTable
:存储符号表
MidEnd
:中端代码包IrInstructions
:存储LLVM的相关指令SymbolTable
:代码优化时用到,存储为mem2reg而重新构建了中间代码符号表Tools
:一些工具类IrCore
:内含Value, User, IrGlobal, IrFunction, IrBasicBlock, IrModule等LLVM中端架构类
BackEnd
:后端代码包MipsInstructions
:存储Mips的相关指令MipsCore
:完全模仿LLVM架构,构建出的Mips下的一套架构,用于将LLVM架构装配到后端,并进行Mips目标代码生成,其中MipsInstructionBlock为核心,它的作用是将一条LLVM语句翻译为多条Mips语句。Compiler
:编译器启动类
四. 各章节目录
- 『编译技术』SysY-Mips编译器设计——总体设计概述
- 『编译技术』SysY-Mips编译器设计——词法分析
- 『编译技术』SysY-Mips编译器设计——语法分析
- 『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
- 『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
- 『编译技术』SysY-Mips编译器设计——目标代码Mips生成
- 『编译技术』SysY-Mips编译器设计——中端代码优化
- 『编译技术』SysY-Mips编译器设计——后端代码优化
- 『编译技术』SysY-Mips编译器设计——实验总结
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yang's CS World!
评论