many, many chore
This commit is contained in:
FallenYing
2023-07-28 09:30:17 +08:00
parent b043fd1d05
commit f501a6b993
33 changed files with 453 additions and 453 deletions

View File

@@ -2,7 +2,7 @@
是时候证明新的解析器确实有能力解释更复杂的命令了。
到目前为止,我们的解析器只接受简单的动词-名词命令。让我们试着解析一些更复杂的命令,比如:
到目前为止,我们的解析器只接受简单的动词 - 名词命令。让我们试着解析一些更复杂的命令,比如:
- get coin from box
- put coin in box
@@ -16,7 +16,8 @@
- ask A from B
- give A to B
思考题:你能否自行实现这些命令
::: warning 🤔 思考题:你能否自行实现这些命令
:::
但是正如前一章所解释的,类似的命令(比如 "从 B 中获取 A "和已经存在的 "获取 A")必须以正确的顺序排列。如果'get A'首先出现,那么它将消耗任何以'get'开头的命令,包括所有应该被新模式匹配的命令。简而言之,"从 B 获取 A "必须出现在 "获取 A "之前。
@@ -32,13 +33,13 @@
目前,我们不需要有两个以上非终结点的模式。
# parsexec.h
## parsexec.h
```c
extern bool parseAndExecute(const char *input);
```
# parsexec.c
## parsexec.c
```c
#include <ctype.h>
@@ -106,9 +107,9 @@ bool parseAndExecute(const char *input)
}
```
在一个新的模块 inventory2.c 中,我们实现了新的多名词命令 get、drop/put、ask 和 give。现在我们终于可以把金币放回盒子里了(可喜可贺,可喜可贺)。
在一个新的模块 inventory2.c 中,我们实现了新的多名词命令 get、drop/put、ask 和 give。现在我们终于可以把金币放回盒子里了 (可喜可贺,可喜可贺)。
# inventory2.h
## inventory2.h
```c
extern bool executeGetFrom(void);
@@ -117,7 +118,7 @@ extern bool executeAskFrom(void);
extern bool executeGiveTo(void);
```
# inventory2.c
## inventory2.c
```c
#include <stdbool.h>
@@ -210,11 +211,12 @@ bool executeGiveTo(void)
仔细观察上面的代码,你可能会注意到,像 "把硬币放进森林 "和 "把硬币放进盒子 "这样的命令(当盒子被关闭时)会得到以下奇怪的回答:"这太重了。" 这是因为大多数物体(包括封闭的盒子,以及像森林这样的场景)容纳其他物体的能力为零。这是正确的,但这个信息是很不恰当的。为了避免这种情况,我们将为那些容量为零的物体引入一个单独的信息:"这样做似乎不太适合。"
先想想有没有什么办法解决?
::: warning 🤔 先想想有没有什么办法解决?
:::
然而,当它作为对 "把钥匙放进盒子里 "的回应时,这个特殊的信息是完全误导的。所以我们将为这种特殊的对象组合做一个特殊的例外。
# move.c
## move.c
```c
#include <stdbool.h>