user: 请将以下的汇编代码转换成C语言代码:

```asm
<parse_word>:
  endbr64
  push   %rbx
  sub    $0x10,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  lea    D33(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L112
  call   <duplicate@plt>
L116:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L210
  add    $0x10,%rsp
  pop    %rbx
  ret
L112:
  lea    D83(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L136
  call   <clear@plt>
  jmp    L116
L136:
  lea    D78(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L7
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L116
L7:
  lea    D7(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L49
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L116
L49:
  lea    D12(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L73
  call   <POP@plt>
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L185
  sqrtsd %xmm0,%xmm0
L138:
  call   <PUSH@plt>
  jmp    L116
L185:
  call   <sqrt@plt>
  jmp    L138
L73:
  lea    D24(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L233
  call   <POP@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %rbx,%xmm2
  addsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  call   <PUSH@plt>
  jmp    L116
L233:
  lea    D13(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L150
  call   <POP@plt>
  movsd  %xmm0,(%rsp)
  mov    $0x0,%eax
  call   <POP@plt>
  subsd  (%rsp),%xmm0
  call   <PUSH@plt>
  jmp    L116
L150:
  lea    D79(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L68
  call   <POP@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %rbx,%xmm3
  mulsd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  call   <PUSH@plt>
  jmp    L116
L68:
  lea    D74(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L108
  call   <POP@plt>
  movsd  %xmm0,(%rsp)
  mov    $0x0,%eax
  call   <POP@plt>
  divsd  (%rsp),%xmm0
  call   <PUSH@plt>
  jmp    L116
L108:
  mov    %rsp,%rdx
  lea    D17(%rip),%rsi
  mov    %rbx,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  js     L116
  je     L3
  movsd  (%rsp),%xmm0
  call   <PUSH@plt>
  jmp    L116
L3:
  lea    D87(%rip),%rdi
  call   <printf@plt>
  jmp    L116
L210:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D33
type_guessed: string
name: disassemble_data
arguments: data_tag: D83
type_guessed: string
name: disassemble_data
arguments: data_tag: D78
type_guessed: string
name: disassemble_data
arguments: data_tag: D7
type_guessed: string
name: disassemble_data
arguments: data_tag: D12
type_guessed: string
name: disassemble_data
arguments: data_tag: D24
type_guessed: string
name: disassemble_data
arguments: data_tag: D13
type_guessed: string
name: disassemble_data
arguments: data_tag: D79
type_guessed: string
name: disassemble_data
arguments: data_tag: D74
type_guessed: string
name: disassemble_data
arguments: data_tag: D17
type_guessed: string
name: disassemble_data
arguments: data_tag: D87
type_guessed: string

tool: D33: dup

tool: D83: clear

tool: D78: exit

tool: D7: quit

tool: D12: sqrt

tool: D24: +

tool: D13: -

tool: D79: *

tool: D74: /

tool: D17: %lf

tool: D87: Invalid Input


assistant: ```c
void parse_word(char word[]) {
  int string_s;
  double x;
  if (strcmp(word, "dup") == 0)
    duplicate();
  else if (strcmp(word, "clear") == 0)
    clear();
  else if (strcmp(word, "exit") == 0)
    exit(0);
  else if (strcmp(word, "quit") == 0)
    exit(0);
  else if (strcmp(word, "sqrt") == 0)
    PUSH(sqrt(POP()));
  else if (strcmp(word, "+") == 0)
    PUSH(POP() + POP());
  else if (strcmp(word, "-") == 0) {
    x = POP();
    PUSH(POP() - x);
  } else if (strcmp(word, "*") == 0)
    PUSH(POP() * POP());
  else if (strcmp(word, "/") == 0) {
    x = POP();
    PUSH(POP() / x);
  } else {
    string_s = sscanf(word, "%lf", &x);
    if (string_s < 0)
      return;
    if (string_s == 0) {
      printf("Invalid Input\n");
      return;
    }
    PUSH(x);
  }
  return;
}
```