update
many, many chore
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user