get familiar with pa1
This commit is contained in:
parent
cd99c49691
commit
3ecd8f4478
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.s
|
||||
24
CS143体验报告.md
Normal file
24
CS143体验报告.md
Normal 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` 的转换。不需要实现错误处理,假设给出的序列都是合法的。
|
||||
|
||||
@ -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);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user