Skip to content

Commit

Permalink
update_2024_requirements
Browse files Browse the repository at this point in the history
  • Loading branch information
1-rambo committed Apr 23, 2024
1 parent fab6d72 commit 9b2b292
Show file tree
Hide file tree
Showing 9 changed files with 14 additions and 16 deletions.
4 changes: 2 additions & 2 deletions docs/levels/0.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public:
接下来,请你阅读 `token.h``tokenizer.h``main.cpp`,搞清楚目前程序的大概结构。如果你感兴趣的话,也可以读一读 `tokenizer.cpp` 或者其它文件,彻底理解目前程序的工作原理。

试回答以下问题:
1. 为什么 `Tokenizer::tokenize` 接受的形参类型是 `const std::string&` 而不是 `std::string`?可不可以用 `std::string`
1. 为什么 `Tokenizer::tokenize` 接受的形参类型是 `const std::string&` 而不是 `std::string`?可不可以用 `std::string&`
2. 为什么使用 `TokenPtr`,也即 `std::unique_ptr<Token>`?如果改用 `Token*`,会有什么影响?
3. main 函数中 `std::cout << *token` 是如何实现的?
4. 当词法分析出现错误时,程序是如何进行错误处理的?
Expand All @@ -84,4 +84,4 @@ public:

## 阶段性检查

在教学网 **大作业 / Lv.0 检查** 处,提交 `lv0-answer.txt`。在 2023 年 5 月 7 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.0 检查** 处,提交 `lv0-answer.txt`。在 2024 年 5 月 5 日 23:59:59 前提交的,可能获得分数加成。
6 changes: 3 additions & 3 deletions docs/levels/1.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ int main() {
ValuePtr a = std::make_shared<NumericValue>(42);
ValuePtr b = std::make_shared<BooleanValue>(false);
ValuePtr c = std::make_shared<SymbolValue>("eq?");
ValuePtr d = std::make_shared<StringValue>("Hello");
ValuePtr d = std::make_shared<StringValue>("Hello\"");
ValuePtr e = std::make_shared<NilValue>();
ValuePtr f = std::make_shared<PairValue>(
c,
Expand All @@ -148,11 +148,11 @@ int main() {
42
#f
eq?
"Hello"
"Hello\""
()
(eq? 42 "Hello")
```

### 阶段性检查

在教学网 **大作业 / Lv.1 检查** 处,提交上述测试的运行截图(截到部分代码和运行窗口即可)。在 2023 年 5 月 13 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.1 检查** 处,提交上述测试的运行截图(截到部分代码和运行窗口即可)。在 2024 年 5 月 5 日 23:59:59 前提交的,可能获得分数加成。
2 changes: 1 addition & 1 deletion docs/levels/2.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ int main() {
+------------+-----------+
```
在教学网 **大作业 / Lv.2 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2023 年 5 月 19 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.2 检查** 处,提交上述测试的运行截图(包含运行窗口即可)。在 2024 年 5 月 12 日 23:59:59 前提交的,可能获得分数加成。
> 删除或注释 `RJSJ_TEST` 宏的调用即可停用测试。关于 `rjsj_test` “测试框架”的更多信息,请参阅[此说明](../appendix/rjsj_test.md)。
>
Expand Down
2 changes: 1 addition & 1 deletion docs/levels/3.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,4 @@ int main() {

如上所述,将“求值环境” `env` 作为 `TestCtx` 的成员,随后修改 `eval` 方法为新的求值过程。调用宏的方法修改为 `RJSJ_TEST(TestCtx, Lv2, Lv3)`,即测试 Lv2 和 Lv3 两个测试用例集。重新编译并运行后,观察测试结果。

在教学网 **大作业 / Lv.3 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2023 年 5 月 25 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.3 检查** 处,提交上述测试的运行截图(包含运行窗口即可)。在 2024 年 5 月 19 日 23:59:59 前提交的,可能获得分数加成。
2 changes: 1 addition & 1 deletion docs/levels/4.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,4 @@ int main() {

重新编译并运行后,观察测试结果。

在教学网 **大作业 / Lv.4 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2023 年 5 月 31 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.4 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2024 年 5 月 26 日 23:59:59 前提交的,可能获得分数加成。
2 changes: 1 addition & 1 deletion docs/levels/5.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,4 @@ int main() {

重新编译并运行后,观察测试结果。

在教学网 **大作业 / Lv.5 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2023 年 6 月 6 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.5 检查** 处,提交上述测试的运行截图(包含运行窗口即可)。在 2024 年 6 月 2 日 23:59:59 前提交的,可能获得分数加成。
2 changes: 1 addition & 1 deletion docs/levels/6.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,4 @@ int main() {

出于 `EvalEnv` 的重构,你可能需要修改 `TestCtx` 里的 `env` 的声明和初始化方式。重新编译并运行后,观察测试结果。

在教学网 **大作业 / Lv.6 检查** 处,提交上述测试的运行截图(包含运行窗口即可;不必通过全部测试)。在 2023 年 6 月 12 日午夜前提交的,可能获得分数加成。
在教学网 **大作业 / Lv.6 检查** 处,提交上述测试的运行截图(包含运行窗口即可)。在 2023 年 6 月 9 日 23:59:59 前提交的,可能获得分数加成。
8 changes: 3 additions & 5 deletions docs/levels/7.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Mini-Lisp 规定的特殊形式数量不多,我们还差这些:

如何让 REPL 模式和文件模式尽可能多地复用代码,是一个具有考验性的问题。期待你的解答。

## 任务 7.5 来试试你的解释器!(选做)
## 任务 7.5 来试试你的解释器!

编写一段 Mini-Lisp 代码,它将下述列表中的数从小到大排序后输出:

Expand All @@ -127,12 +127,10 @@ Mini-Lisp 规定的特殊形式数量不多,我们还差这些:

```cpp
int main() {
RJSJ_TEST(TestCtx, Lv2, Lv3, Lv4, Lv5, Lv5Extra, Lv6, Lv7, Lv7Lib);
// 如果你想尝试更多例子:
// RJSJ_TEST(TestCtx, Lv2, Lv3, Lv4, Lv5, Lv5Extra, Lv6, Lv7, Lv7Lib, Sicp);
RJSJ_TEST(TestCtx, Lv2, Lv3, Lv4, Lv5, Lv5Extra, Lv6, Lv7, Lv7Lib, Sicp);
}
```

重新编译并运行后,观察测试结果。

恭喜你完成了我们的大作业要求。在教学网 **大作业 / Lv.7 检查** 处,提交上述测试的运行截图,该测试结果将作为你的大作业分数的一部分
恭喜你完成了我们的大作业要求。在教学网 **大作业 / Lv.7 检查** 处,提交一个压缩包(学号-姓名.zip),包括该测试结果的截图(lv7-answer.jpg)以及 Mini-lisp 代码(lv7-answer.scm),该提交将作为你的大作业分数的一部分
2 changes: 1 addition & 1 deletion docs/levels/7p.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

我们的 Mini Lisp 没有提供任何字符串操作函数。你可以添加一些如字符串与整数的转换、字符串的拼接、访问、操作等等内置过程。

此外,你可以结合一些其它的第三方库,实现非常复杂的功能。比如,你可以综合一些 2D 绘图库,使得你的解释器支持通过一些内置过程,在窗口中绘制各种各样图案(然后你就能用 Lisp 写一个《不围棋》了,哈哈)。
此外,你可以结合一些其它的第三方库,实现非常复杂的功能。比如,你可以综合一些 2D 绘图库,使得你的解释器支持通过一些内置过程,在窗口中绘制各种各样图案(然后你就能用 Lisp 写一个《黑白棋》了,哈哈)。

你还可以尝试实现 `read` 内置过程——从标准输入读取一个表达式(外部表示)。但这个功能实现起来非常复杂;你可以先尝试实现 `readline` 类似的内置过程,读取一行输入,然后再 `eval`。这个会比 `read` 容易得多。

Expand Down

0 comments on commit 9b2b292

Please sign in to comment.