Stanford Compiler Week 6 Code Generation Part 2
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
备注:
图片均来自于课件。
这次回顾代码生成第二部分。
代码生成的例子回顾之前讨论的语言
\begin{aligned}
\mathrm{P} \rightarrow &\mathrm{D ; P | D}\\
\mathrm{D} \rightarrow &\text {def } \operatorname{id}(\mathrm{ARGS})=\mathrm{E} \\
\text { ARGS} \rightarrow &\text {id, ARGS | id }\\
\mathrm{E} \rightarrow& \text {int} \text { id } | \text { if } \mathrm{E}_{1}=\mathrm{E}_{2} \text { then } \mathrm{E}_{3} \text { else } \mathr ...
Stanford Compiler PA3
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
参考资料:
https://github.com/dychen/compilers/tree/master/PA3
https://github.com/yifanyang96/Compiler/tree/master/PA3
https://github.com/skyzluo/CS143-Compilers-Stanford
https://github.com/afterthat97/cool-compiler
error处理:
http://marvin.cs.uidaho.edu/Teaching/CS445/bisonErrorToken.html
https://www.gnu.org/software/bison/manual/html_node/Error-Recovery.html
这次回顾作业3——语法分析,本次作业和前一次相比要容易一些,困难的部分主要是 ...
Stanford Compiler PA3翻译
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这部分对PA3进行翻译。
编程作业 III1. 简介在此作业中,您将为Cool编写一个解析器。该作业使用两种工具:解析器生成器(C++工具称为$\mathrm{bison}$; Java工具称为$\mathrm{CUP}$)和用于处理树的程序包。解析器的输出将是抽象语法树(AST)。您将使用解析器生成器的语义操作来构造此AST。
当然,您肯定需要参考Cool的语法结构,该语法结构在Cool参考手册的图1中(以及其他部分)中找到。 $\mathrm{bison}$和$\mathrm{CUP}$的文档可在线获得。Cool支持代码讲义中介绍了处理树的包的C++版本;Java版本的文档可在线获得。对于此作业和后续作业,您都需要了解树程序包。
本讲义中有很多信息,您需要了解其中的大部分才能编写一个有效的解析器,请仔细阅读讲义。
2. 文件和目录 ...
计算机程序的构造和解释(SICP) 第3章 习题解析 Part7
这次回顾第三章第七部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
http://community.schemewiki.org/?SICP-Solutions
http://community.schemewiki.org/?sicp
3.63(p23 ...
CS170 Efficient Algorithms and Intractable Problems HW7
课程主页:
https://cs170.org/
https://inst.eecs.berkeley.edu/~cs170/fa18/
课程视频:
https://www.bilibili.com/video/BV1wK411g7ck
参考资料:
https://people.eecs.berkeley.edu/~daw/teaching/cs170-s03/Notes/lecture15.pdf
https://piazza.com/class_profile/get_resource/honxzoabz711ew/hvep5i3vb292gs
这次回顾HW7。
2. Copper Pipes
$dp[n] = \{0\}$($dp[i]$表示长度为$i$对应的最大值)
for $i=1,\ldots, n$:
$dp[i] = p[i]$
for $j=1, \ldots, i - 1$:
$dp[i]=\max(dp[i], dp[i-j] + p[j])$
return $dp[n]$
3. A Dice Game参考资料:
https://personal.vu ...
CS170 Efficient Algorithms and Intractable Problems HW6
课程主页:
https://cs170.org/
https://inst.eecs.berkeley.edu/~cs170/fa18/
课程视频:
https://www.bilibili.com/video/BV1wK411g7ck
参考资料:
https://people.eecs.berkeley.edu/~daw/teaching/cs170-s03/Notes/lecture15.pdf
https://piazza.com/class_profile/get_resource/honxzoabz711ew/hvep5i3vb292gs
这次回顾HW6。
2. Horn Formulas参考资料:
https://people.eecs.berkeley.edu/~daw/teaching/cs170-s03/Notes/lecture15.pdf
set all variables to false
$W=\{v|(\Rightarrow v)\in \text{formulas} \}$
while $W\neq \varnothing$:
$\forall v\i ...
CS170 Efficient Algorithms and Intractable Problems Section7
课程主页:
https://cs170.org/
https://inst.eecs.berkeley.edu/~cs170/fa18/
课程视频:
https://www.bilibili.com/video/BV1wK411g7ck
这次回顾Section 7。
1. Job Assignment(a)优化的变量是第$i$个人在第$j$个工作上分配的时间$x_{ij}$。
(b)约束:
\begin{aligned}
\sum_{i=1}^I x_{ij} &\le 1 , j=1,\ldots, J, 第j份工作分配的总时间小于等于1\\
\sum_{j=1}^{J} x_{ij} &\le 1,i=1,\ldots, I,第i个人的总工作时间小于等于1\\
x_{ij}&\ge 0, i=1,\ldots, I,j=1,\ldots, J
\end{aligned}(c)优化目标为
\sum_{ij}a_{ij}x_{ij}2. Understanding convex polytopes(a)任取$x,y \in \Omega$,那么
\begin{aligned} ...
CS170 Efficient Algorithms and Intractable Problems Section6
课程主页:
https://cs170.org/
https://inst.eecs.berkeley.edu/~cs170/fa18/
课程视频:
https://www.bilibili.com/video/BV1wK411g7ck
这次回顾Section 6。
1. Shortest Paths with Dynamic Programming!记最优解为$d(S,E)$。
(a)需要解决的子问题是$S\to F$的最短路径,其中$(F,E)\in G$,对于此例,子问题是$S\to B, S\to D$。
(b)显然
d(S,E) = \min \left(d(S,B) + 2 , d(S,D) + 1\right)(c)dependency graph是有向无环图。
(d)拓扑排序。
(e)一共有$|V|$个子问题,要求解每个问题,需要求解的子问题和每个节点的入度相关。
(f)
$d(S,C)=2$
$d(S, A) = 1$
$d(S,B)=7$
$d(S,D)=5$
$d(S,E)=6$
所以路径为$SCDE$。
2. String Shuffling1定义子问题: ...
Stanford Compiler Week 6 Code Generation Part 1
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
备注:
图片均来自于课件。
这次回顾代码生成第一部分。
代码生成简介
我们专注于为带有累加器的堆栈机生成代码;
我们想在真实的机器上运行生成的代码,例如MIPS处理器(或模拟器);
我们使用MIPS指令和寄存器模拟堆栈机指令;
累加器保存在MIPS寄存器$\mathrm{$ a_0}$中;
堆栈保存在内存中
堆栈向低地址生长,这是MIPS的标准约定。
堆栈中下一个位置的地址保存在MIPS寄存器$\mathrm{$sp}$中
栈顶在地址$\mathrm{$sp} +4$处。
MIPS简介MIPS架构是
原型精简指令集计算机(RISC)
大多数操作都将寄存器用于操作数和结果
使用load和store指令在内存中使用值
32个通用寄存器(每个32位)
我们使用$\mathrm{$ sp,$a0}$和$\mathrm{$t1}$(临时寄存器)
阅读SPIM模拟器文档以 ...
Stanford Compiler Week 6 Runtime Organization
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
备注:
图片均来自于课件。
这次回顾运行时组织。
运行时组织
我们已经涵盖了编译器的前端阶段
词法分析
解析
语义分析
接下来是后端阶段
优化
代码生成
需要了解的内容
在讨论代码生成之前,我们需要了解我们试图生成的内容;
有许多用于构造可执行代码的标准技术,这些技术被广泛使用;
运行时资源管理
如下两者的对应关系
静态(编译时)结构
动态(运行时)结构
仓储组织
程序的运行流程
程序的执行最初是在操作系统的控制下;
当调用程序时:
操作系统为程序分配空间;
代码被加载到部分空间中;
操作系统跳至入口点(即“main”);
内存布局
按照传统,机器组织的布局如下:
顶部的低地址;
底部高地址;
划定不同数据区域的线(line)。
这些图片是简化的:
例如,并非所有内存都必须是连续的。
其他空间 = 数据空间。
编译器负责:
生成代码;
协调 ...
Stanford Compiler 实验环境配置(续)
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
参考资料:
https://courses.edx.org/courses/course-v1:StanfordOnline+SOE.YCSCS1+2T2020/6b750292e90d4950b895f621a5671b49/
https://stackoverflow.com/questions/42120938/exec-format-error-32-bit-executable-windows-subsystem-for-linux
https://blog.csdn.net/zhou5712/article/details/65935783
https://github.com/afterthat97/cool-compiler/issues/2
上一篇博客介绍了如何在Ubuntu下配置开发环境,这里介绍基于wsl2 + vscode配置开发环境。
配置wsl2 ...
计算机程序的构造和解释(SICP) 第3章 习题解析 Part6
这次回顾第三章第六部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
http://community.schemewiki.org/?SICP-Solutions
http://community.schemewiki.org/?sicp
由于chez s ...