user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<parseAndExecute>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D94(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x10(%rbp)
  lea    D22(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  je     L146
  mov    -0x10(%rbp),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L157
  mov    $0x0,%eax
  jmp    L69
L157:
  mov    -0x10(%rbp),%rax
  lea    D19(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L118
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeLook@plt>
  jmp    L146
L118:
  mov    -0x10(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L94
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeGo@plt>
  jmp    L146
L94:
  mov    -0x10(%rbp),%rax
  lea    D78(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L80
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeGet@plt>
  jmp    L146
L80:
  mov    -0x10(%rbp),%rax
  lea    D47(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L63
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeDrop@plt>
  jmp    L146
L63:
  mov    -0x10(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L75
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeGive@plt>
  jmp    L146
L75:
  mov    -0x10(%rbp),%rax
  lea    D81(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L27
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <executeAsk@plt>
  jmp    L146
L27:
  mov    -0x10(%rbp),%rax
  lea    D36(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L8
  mov    $0x0,%eax
  call   <executeInventory@plt>
  jmp    L146
L8:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L146:
  mov    $0x1,%eax
L69:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D94
type_infered: string
name: unpack_data
arguments: tag: D22
type_infered: string
name: unpack_data
arguments: tag: D39
type_infered: string
name: unpack_data
arguments: tag: D19
type_infered: string
name: unpack_data
arguments: tag: D28
type_infered: string
name: unpack_data
arguments: tag: D78
type_infered: string
name: unpack_data
arguments: tag: D47
type_infered: string
name: unpack_data
arguments: tag: D80
type_infered: string
name: unpack_data
arguments: tag: D81
type_infered: string
name: unpack_data
arguments: tag: D36
type_infered: string
name: unpack_data
arguments: tag: D48
type_infered: string

tool: D94:  


tool: D22: 


tool: D39: quit

tool: D19: look

tool: D28: go

tool: D78: get

tool: D47: drop

tool: D80: give

tool: D81: ask

tool: D36: inventory

tool: D48: I don't know how to '%s'.


assistant: ```c
bool parseAndExecute(char *input) {
  char *verb = strtok(input, " \n");
  char *noun = strtok(NULL, "\n");
  if (verb != NULL) {
    if (strcmp(verb, "quit") == 0) {
      return false;
    } else if (strcmp(verb, "look") == 0) {
      executeLook(noun);
    } else if (strcmp(verb, "go") == 0) {
      executeGo(noun);
    } else if (strcmp(verb, "get") == 0) {
      executeGet(noun);
    } else if (strcmp(verb, "drop") == 0) {
      executeDrop(noun);
    } else if (strcmp(verb, "give") == 0) {
      executeGive(noun);
    } else if (strcmp(verb, "ask") == 0) {
      executeAsk(noun);
    } else if (strcmp(verb, "inventory") == 0) {
      executeInventory();
    } else {
      printf("I don't know how to '%s'.\n", verb);
    }
  }
  return true;
}
```