get familiar with pa1

This commit is contained in:
ridethepig 2023-03-17 17:41:06 +08:00
parent cd99c49691
commit 3ecd8f4478
3 changed files with 74 additions and 3 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.s

24
CS143体验报告.md Normal file
View File

@ -0,0 +1,24 @@
# CS143 体验报告
## 理论课程部分
> 待施工
## Written Assignment 部分
> 既然它网站上都放了,那我就姑且做一下?
>
> 还没咋做捏
## Programming Assignment 部分
### 开始之前
这门课的官方材料好像每隔几年就会换一个地方,导致找起来十分的困难(之前做的 xv6 就很棒多少年的东西都放在同一个网站上现在这个时间点2023年3月的官网应该是在 edx 上面需要注册收费之类的才能获取相关材料。不过这门课历史悠久基本上从2000年左右就有了自然是被大家复制传播到了各种地方。这个 repo 里面的 starter code 是从 github 上别人的仓库里面的分发包(`student-dist.tar.gz`)解压出来的,我对比了几个仓库的代码内容都是一样的,那么做这个版本的应该问题不大。不过和课程网站上的内容还是有一些不同的,这就没有办法了,大家也拿不到 Stanford 的内部版本。
### PA1
第一个实验是用 COOL 写一个简单的程序,程序的功能是解释一个简单的 Stack Machine 语言,会输入一些序列然后按照文档的说明进行操作。
推荐的实现方式是,定义一个 `StackCommand` 类,然后为每一条命令实现一个子类用来执行具体的操作。这里还给了一个工具类 `atoi.cl`,里面实现了 `String``int` 的转换。不需要实现错误处理,假设给出的序列都是合法的。

View File

@ -7,10 +7,56 @@
* Skeleton file
*)
class Main inherits IO {
class List {
isNil() : Bool { true };
head() : String { { abort(); ""; } };
tail() : List { { abort(); self; } };
cons(i : String) : List {
(new Cons).init(i, self)
};
};
main() : Object {
out_string("Nothing implemented\n")
class Cons inherits List {
car : String; -- The element in this list cell
cdr : List; -- The rest of the list
isNil() : Bool { false };
head() : String { car };
tail() : List { cdr };
init(i : String, rest : List) : List {
{
car <- i;
cdr <- rest;
self;
}
};
};
class Main inherits IO {
stack : List;
print_list(l: List) : Object {
if l.isNil() then {
out_string("\n");
}
else {
out_string(l.head());
out_string(" ");
print_list(l.tail());
}
fi
};
main() : Object {
{
stack <- new List;
let x: String <- "" in {
while (not(x = "x")) loop {
x <- in_string();
stack <- stack.cons(x);
}
pool;
};
stack <- stack.tail();
print_list(stack);
}
};
};