CS143 环境搭建全流程
edX上也开设了这门课:这里
2022.9.24 更新:添加了直接在Linux上配置的步骤
在Linux上配置环境
老师提供的环境比较简陋,因此我从PA3开始在自己配置的Linux上做作业。
我的用是Ubuntu22.04,其他Debian系的系统应该都可以的。
首先打开命令行,输入:
$ sudo apt-get install flex bison build-essential csh openjdk-6-jdk libxaw7-dev
如果你用C++做作业可以去掉openjdk-6-jdk。
接着创建文件夹:
$ sudo mkdir /usr/class
其他目录创建也完全没有问题,只要一会儿配置环境变量时相应地修改一下位置就可以了。
输入:
$ sudo chown $USER /usr/class
$ cd /usr/class
$ wget https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@student-dist.tar.gz
解压:
$ tar -xf student-dist.tar.gz
配置环境变量:
$ export PATH=$PATH:/usr/class/bin
如果你不是在usr/class下解压的文件,需要根据你自己的路径配置。
课程上没说,但你还需要输入以下命令:
$ sudo apt-get install libc6-i386
由于我已经做完了PA2,所以我不用配置flex了,至此配置完成。
如果你要做PA2的话,还需要安装旧版本flex,因为上面的命令会安装最新版的flex导致不兼容,对于此,你可以去这里。
直接使用课程提供的环境
安装Virtual Box
网址:https://www.virtualbox.org/wiki/Downloads

安装步骤中没有什么特别要说的点,网上的安装教程也有很多了。
安装VM镜像
下载
这个镜像可以在edX上找到,但是似乎要花钱升级课程后才能下载:

通过一番查找,我发现在B站上有人已经分享了这个文件,下面是链接,将链接中的vbox文件夹整体下载即可。
链接:https://pan.baidu.com/s/1DcEyrQyBIzbZ1577RTUA_Q
提取码:xobv
配置
在Virtual Box的注册中找到上面下载的Complier.vbox并添加。

添加后:

设置共享文件夹
可以通过共享文件夹在windows和linux系统间同步文件。
先自己在合适的位置新建一个文件夹
然后如下图所示进行配置:

运行虚拟机,在其中的命令行输入sudo usermod -a -G vboxsf compilers,后重启虚拟机就可以了。

下载用于判作业的脚本
判作业的脚本在官网上也没有,我从github找到了:
https://github.com/s7hoang/stanford-lagunita-cs1-compilers-grading-scripts
或者从网盘下载:
链接:https://pan.baidu.com/s/1s70FF3N_8xrbNDB_L5oMrQ
提取码:darg
下载后将4个脚本放到之前创建的共享文件夹中:

打开虚拟机,查看是否同步至linux系统中:

执行以下命令,将脚本移动到相应作业所在的文件夹中,其中的<FolderName>代指共享文件夹名称,<num>代指脚本号1-4中的一个。
要注意的是由于mooc版本的课程相比于学校课程多了一个作业,因此脚本号与作业号产生了偏差,第i个脚本对应的是第i+1个作业:
$ mv /media/sf_<FolderName>/pa<num>-grading.pl /home/compilers/cool/assignment/PA<num+1>
如下所示,脚本1对应的是作业2,而作业1没有判题脚本:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YeYsxkXG-1662249796917)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220904073821082.png)]](https://images2.imgbox.com/24/fb/YuyUL1QP_o.png)
当你完成作业后,在对应作业的目录下执行:
$ perl pa<num>-grading.pl
即可对作业进行判分。
运行hello_world.cl
最后运行一个示例,输入以下命令:
$ mkdir examples
$ cd examples
$ cp /usr/class/cs143/examples/hello_world.cl .
$ coolc hello_world.cl
$ spim hello_world.s
注意第三行最后的.。
如下所示:
