『编译技术』SysY-Mips编译器设计——实验总结
『编译技术』SysY-Mips编译器设计——实验总结章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
实验得分最终八个点得分如下所示,排名除第六个点外均位于20名附近,而第六个点来到50+。第六个点较为反常,出现了分配给其的寄存器越多,cycle反而越高的情况,mem执行较多,猜测是使用了较深的递归而产生了大量寄存器传参冲突。
实验总结总而言之,从一个月前正式着手进行优化,再到如今优化后代码来到1w+行,即使循环外提等关键优化未来得及细细琢磨,排名似乎也不是很理想,这场优化之路至此也 ...
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 前言本部分任务为对Mips后端代码做出代码优化,主要是配合中端优化的后端消PHI和图着色寄存器分配。实际上,后端优化更多涉及特定的体系结构,这里实现的仅仅是冰山一角。
一. 后端消PHI这一步说是优化,然而是LLVM经历过mem2reg优化后不得不做的一步。
消PHI即将PHI指令消去,换句话说,PHI指令的Value值应该保留,但后面的数据流应当通过Move指令消去。LLV ...
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——中端代码优化章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 前言本部分任务为对LLVM中间代码做出代码优化,实际上大量的优化都集中于此。不要指望看这份文档就能看明白优化,因为笔者整理时也看不明白了。
一. Mem2Reg0. 何为Mem2Reg?在sysY中定义的变量称作原始变量,而在LLVM中的一个个变量我会称作虚拟变量(后续很有可能会统称为变量…但实际不一样),定义和赋值的概念不再区分。
本优化不考虑全局变量和数组,仅针对单值in ...
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 任务目标由生成的中间代码LLVM转化为目标代码Mips,实现简单的寄存器分配,不考虑后端优化。
一. 前置准备Mips基本分区data常量段包含所有准备输出的字符串。
text代码段全局变量:使用GP做偏移
函数和主函数代码段:其中变量定义,入栈时使用FP做偏移
关键寄存器
$gp:全局寄存器 记录全局变量
$sp:栈顶寄存器
$fp:栈帧寄存器,记录的是活动记录基地 ...
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
任务目标狭义的LLVM(Low Level Virtual Machine)是一种常用的通用中间代码表示。在本部分内容中,我们由建立好的语法树生成中间代码LLVM,不考虑复杂优化方法。
前置准备
LLVM生成时将常量全部带入,在后续中我们了解到属于常量折叠优化。
在编译开始前遍历字符串,清 +,- 连着的长串符号,这样可以减少部分无意义的运算指令。
将错误处理和中间代码生成 ...
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 作业要求设计并实现错误处理程序,能够诊断出题目要求的常见语法语义错误,并进行适当的局部化容错处理,输出程序中所有错误信息,包括类型与位置。
一. 错误编码本次作业只针对如下数条错误情况予以考虑。
a 非法符号:在字符串中出现的非法符号
b 名字重定义:变量名在当前作用域下的重复定义,内层覆盖外层定义是合法的,必须是同层作用域才出错
c 未定义的名字:使用 ...
『杂谈』What makes a good PhD student?
『杂谈』What makes a good PhD student?翻译自一篇Nature文章,作者是电气工程专业。
读博士应该是一趟充满乐趣且充满回报的旅程,因为你能够花费你的全部工作时间去发现探寻新想法,并且从中的得到回报,还不需要承担行政上的责任。尽管他们会得到很少的报酬,还会长时间工作,并且缺少安全感,但是那些执着于科学事业的研究者之所以如此做,是因为这是他们想要追求的全部。
不幸地是,大多数新博士生都是缺少提前准备的,并且因此他们之中的很少数将来会实现自己成为独立科研者的抱负。这主要的原因一是在多数大学存在固有的“成绩膨胀”情况,使得很难从毕业生中辨别出真正有天赋的一流学生,二是目前大学承担着培养越来越多博士生的压力。(The main reasons for this are the ‘grade creep’ inherent at most universities, making it difficult to identify the really talented first-class graduates from the rest, and the press ...
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——总体设计概述本编译器源自『编译技术』课程设计,针对C语言子集SysY文法的源代码生成Mips体系架构目标代码。
2024年编译实验教程
章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 支持文法2023年编译技术实验文法说明
一. 总体结构本编译器采用经典的前端-中端-后端架构,前端负责词法分析,语法分析,符号表建立,错误处理部分,中端负责生成中间代码LLVM以及中间代码优化,后端负责生成目标代码MIPS以及后端代码优化。
二. 接口设 ...
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语法分析章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 任务目标设计并实现语法分析程序,分析语法成分,建立正确的语法树。
一. 终结符
Ident
Number
FormatString(即使它有文法,仍将其看作终结符)
各种符号,关键字
二. 非终结符将在下列出非终结符的FIRST以及是否有冲突情况,以便于解决后续问题;从简单至复杂分析,有助于分析复杂非终结符的FIRST。
非终结符
FIRST集
备注
<C ...
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——词法分析章节目录
『编译技术』SysY-Mips编译器设计——总体设计概述
『编译技术』SysY-Mips编译器设计——词法分析
『编译技术』SysY-Mips编译器设计——语法分析
『编译技术』SysY-Mips编译器设计——语义分析(符号表管理与错误处理)
『编译技术』SysY-Mips编译器设计——中间代码LLVM生成
『编译技术』SysY-Mips编译器设计——目标代码Mips生成
『编译技术』SysY-Mips编译器设计——中端代码优化
『编译技术』SysY-Mips编译器设计——后端代码优化
『编译技术』SysY-Mips编译器设计——实验总结
零. 任务目标设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词值。
一. SysY文法的单词(Token)
二. 词法解析器Lexer设计词法解析器通过扫描输入的源程序字符串,将其分割成一个个单词,同时记录这些单词的类别信息,主要用途在于耦合进后续的语法解析器,使得语法解析器在解析文法时词法解析器可以源源不断为其提供语法解析的最小单元,单词。
因此我们的词法解析主要功 ...