『编译技术』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设计词法解析器通过扫描输入的源程序字符串,将其分割成一个个单词,同时记录这些单词的类别信息,主要用途在于耦合进后续的语法解析器,使得语法解析器在解析文法时词法解析器可以源源不断为其提供语法解析的最小单元,单词。
因此我们的词法解析主要功 ...
『保研经历』保研经历Part4——暑假插曲
『保研经历』保研经历Part4——暑假插曲保研后记,聊一聊人生迄今最焦虑的一个暑假我是怎么度过的,本Part暂时搁置一下,后续补齐。
计算所暑期学校
『计算机组成原理』具备外设交互与异常处理功能的五级流水线CPU设计文档(潦草版)
『计算机组成原理』具备外设交互与异常处理功能的五级流水线CPU设计文档(潦草版)前言由于笔者大二上学期还停留在记纸质笔记的睿智阶段,因此丢失了很多宝贵的计组材料。但计组带我真正踏入了计算机领域的大门,那段时光也是最一心向学的美好记忆,故有必要整理下仍能找到的材料,主要集中在P7与P8部分。
主控制信号基于Mips汇编开发。
基本指令
指令
NPCSel
ExtOp
RegDst
ALUSrc
ALUControl
MemWrite
RegWriteSel
RegWrite
TuseRs
TuseRt
Tnew
Op
Func
DataExtOp
位数
[1:0]
[1:0]
[1:0]
[1:0]
[2:0]
[0:0]
[1:0]
[0:0]
[1:0]
[1:0]
[1:0]
[5:0]
[5:0]
[2:0]
ADD
0
0
1
0
0
0
0
1
1
1
1
000000
100000
0
SUB
0
0
1
0
1
0
0
1
1
1
1
000000
100010
0
AND
0
0
1
0
4
0
0
1
1
1
1
000000
100100
...
『面向对象』面向对象第四单元总结——图书管理系统与UML
『面向对象』面向对象第四单元总结——图书管理系统与UML一.前言随着马原考试铃声敲响,大二一年的学习生活即将告一段落,由于考试周的复习以及准备os的挑战性任务答辩,期末周显得格外匆忙(也是自己有点泄劲了)。抱着还是要用心总结一下这学期以来对OO的感受的想法,于是选择在最后一天的下午完成最后一次的博客,为面向对象课程画上一个圆满的句号。
二.正向建模与开发本单元重点考验我们对程序架构的设计和抽象能力,以及加强对UML图的绘制训练,在三次迭代开发中完成一个小型的图书管理系统,并逐步增加校际借阅与购书,还书逾期处理等功能,同时使用UML类图,状态图,顺序图辅助完成代码工作。
本单元鼓励我们采用正向建模的方式,即先画出类图,构造好类的功能和类与类之间联系,再去进行代码的实际实现,由架构指导实现的出发点是很好的,在较大规模的设计开发中必须要先有整体的架构设计,分成不同的模块,无论是分配给不同的人做也好,抑或是让实现者有明确的思路也好,无疑是有所裨益的。在本单元第一次作业中,我先在纸上画出了草图,再根据草图完成代码,最后补充了UML图(相信很多人都是如此),我认为这也算是正向建模的体现。至于为何老 ...
『面向对象』面向对象第三单元总结——社交网络与JML
『面向对象』面向对象第三单元总结——社交网络与JML一.前言转眼第三单元也迎来结尾,这单元的笔者的经历可谓是起起落落落落落(省略n个),充满了魔幻色彩。
官方要求培养的能力有二:
了解基本的JML语法和语义,以及具备根据JML给出的规格编写Java代码的能力。
了解OK方法,以及具备规格写OK测试的能力。
JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言。在单元末尾再来思考JML的存在意义,笔者终于理解为什么行业上鲜有人使用,一旦方法代码复杂起来,用语法很难去描述一个完备的规格(比如实验课上较复杂的JML俺都写不出来),连课程组给出的JML都能被找出Bug,在日后的大工程中那想都不敢想,以及目前好像缺少形式化验证的方法(如何验证JML所写与你脑海里构想的功能相符且完备),我们也要去深入探讨是否有必要完成这种形式化编程,或者说是否需要将需求先转化成JML规格进而再转化成代码,就笔者目前接触到的程序中是不太需要的,然而无论如何本单元也为我们开辟了一片新的天地,对于形式化构建类和方法,增强程序的健壮性有了更加深入的理解,学习到了许多未 ...
『面向对象』面向对象第二单元总结——多线程电梯
『面向对象』面向对象第二单元总结——多线程电梯一.前言三至四月实属是笔者大学生涯中最为辛劳的一段时间,一周一次的OO,操作系统的LAB2LAB3上机,蓝桥杯,以及最最最麻烦的冯如杯,与这段经历比起来,高三的最后冲刺也彷佛暗淡无光。一晃撑到了四月中旬,痛并痛着的电梯月即将迎来尾声,各种繁事琐事也纷纷有条不紊的结束,那便即以此篇收尾。
在本单元中,学习的主要目标是掌握简单的多线程程序设计方法以及更深一步体会层次化架构设计的魅力,为此我们进行了三个单元的多线程电梯迭代作业。第一次作业,要求实现一套简单的多线程电梯调度系统,大致可分解为单部电梯的运行策略和多台电梯的联合调度策略;第二次作业,为每台电梯新增了容量,起始楼层与运行速度的属性,以及扩展了增加电梯与维修电梯的请求;第三次作业,增加了每台电梯的可达性属性,以及对同一楼层的同时开门的服务中电梯,只接人电梯数量做出了约束。
笔者个人而言难度排序为1>3>2。
二.锁与同步块本单元中笔者锁的选择就是synchronized关键字,并加之配合上sleep,wait,notifyAll的方法,完成了对多线程并发问题的处理。在研讨课讨论 ...
『面向对象』面向对象第一单元总结——表达式求解
『面向对象』面向对象第一单元总结——表达式求解一.前言第一单元的主题是表达式解析与计算,主要学习目标是让我们这些OO小白初步了解体会面向对象层次化编程的思想,并浅浅进行代码上的实践(给大伙一..小小的OO震撼),把握不同类的拆分与继承,同时把握每一个类的属性,方法的设计,使得各个类间关系得当,构造出以类为基础的模块结构,并在主函数中用较短的代码(因为主要的代码实现应在类中)合理调度各个对象,实现最终要求。
本博客将分四个方面进行总结:度量分析,架构设计体验,自我Bug分析与找院友Bug方法,心得体会,接下来让我们一同走进美丽的OO世界。
二.度量分析1.代码统计
本单元最终统计代码量1300+行,包含部分注释与辅助函数,去除后整体代码量在1200行左右,与整个项目的难度预期相符。除Poly类外大多控制在100行内,较为符合单一职责原则;而Poly类内存在大量化简函数与计算函数,长度来到400+行。
2.UML类图分析本单元历经三次迭代,最终UML类图如下,白色部分为第一次作业,绿色部分为第二次作业新增,红色部分为第三次作业新增。
可以看到,本结构以Factor,Unit,Poly类的 ...
『操作系统』操作系统第六次理论作业
『操作系统』操作系统第六次理论作业一. 文件系统的性能对整体系统的性能影响很大,请总结在实现文件系统时可以从哪些方面提高文件系统的性能,简要给出这些手段的具体解决思路。目录项分解,当前目录,磁盘碎片整理,块高速缓存,磁盘调度,提前读取,合理分配磁盘空间,信息的优化分布,RAID技术等。
(1)目录管理:改进文件的目录结构以及检索目录的方法,来减少对文件的查找时间;(2)文件存储方式,访问方式:选择性能更优异的文件存储结构,以提高对文件的访问速度;(3)提高磁盘读写速度:通过采用磁盘高速缓存、优化物理块的分布、利用提前读、延迟写、优化物理块分布、并行交叉存取或虚拟盘等方法来提高磁盘I/O速度,以提高对数据的传送速度。
二. 简述文件控制块(FCB)的主要内容。虽然不同的系统,其文件控制块的内容和格式不完全相同,但通常都包括以下三类信息:基本信息、存取控制信息和使用信息。
(1)基本信息。包括文件名、文件号、用户名、文件类型、文件的物理地址、文件长度、文件的逻辑结构和物理结构等。其中用户名主要是指文件主和授权用户;而物理地址的内容通常与文件的物理结构有关,对于连续文件和链接文件,应说明起 ...
『操作系统』操作系统第五次理论作业
『操作系统』操作系统第五次理论作业一. 有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们的优先数和需要的处理器时间如下表,忽略进行调度等所花费的时间,回答下列问题:a. 写出采用“先来先服务”、“短作业(进程)优先”、“非抢占式的优先数”和“轮转法”等调度算法,进程执行的次序。(其中轮转法的时间片为2)b. 分别计算上述算法中各进程的周转时间和等待时间,以及平均周转时间。
进程
处理器时间
优先级(数小优先级高)
P1
10
3
P2
1
1
P3
2
3
P4
1
4
P5
5
2
先来先服务:
进程
周转时间
等待时间
P1
10
0
P2
11
10
P3
13
11
P4
14
13
P5
19
14
平均周转时间:13.4
短作业优先:
进程
周转时间
等待时间
P1
19
9
P2
1
0
P3
4
2
P4
2
1
P5
9
4
平均周转时间:7
非抢占优先数:
进程
周转时间
等待时间
P1
16
6
...