user: Converte this assembly snippet into its equivalent C code:

```asm
<parse_word>:
  endbr64
  push   %rbp
  lea    D90(%rip),%rsi
  mov    %rdi,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L127
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbp
  jmp    1140 <duplicate@plt>
  nopl   (%rax)
L127:
  lea    D92(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L5
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbp
  jmp    1170 <clear@plt>
  nopl   0x0(%rax)
L5:
  lea    D41(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L46
L30:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x20,%rsp
  xor    %edi,%edi
  pop    %rbp
  jmp    1160 <exit@plt>
  nopl   0x0(%rax)
L46:
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L30
  lea    D8(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L167
  call   <POP@plt>
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L150
  sqrtsd %xmm0,%xmm0
L64:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
L122:
  add    $0x20,%rsp
  pop    %rbp
  jmp    1120 <PUSH@plt>
  nopl   0x0(%rax)
L167:
  lea    D14(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L24
  call   <POP@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <POP@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  addsd  0x8(%rsp),%xmm0
  add    $0x20,%rsp
  pop    %rbp
  jmp    1120 <PUSH@plt>
L9:
  call   <__stack_chk_fail@plt>
  nopl   0x0(%rax,%rax,1)
L24:
  lea    D50(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L71
  call   <POP@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x10(%rsp)
  call   <POP@plt>
  subsd  0x10(%rsp),%xmm0
  call   <PUSH@plt>
L158:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x20,%rsp
  pop    %rbp
  ret
L71:
  lea    D93(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L20
  call   <POP@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <POP@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  mulsd  0x8(%rsp),%xmm0
  jmp    L122
L20:
  lea    D107(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L183
  call   <POP@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x10(%rsp)
  call   <POP@plt>
  divsd  0x10(%rsp),%xmm0
  call   <PUSH@plt>
  jmp    L158
L183:
  lea    0x10(%rsp),%rdx
  lea    D37(%rip),%rsi
  mov    %rbp,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  js     L158
  je     L199
  movsd  0x10(%rsp),%xmm0
  call   <PUSH@plt>
  jmp    L158
L199:
  lea    D40(%rip),%rdi
  call   <printf@plt>
  jmp    L158
L150:
  call   <sqrt@plt>
  jmp    L64
```

tool_calls: name: disassemble_data
arguments: data_label: D90
data_type: string
name: disassemble_data
arguments: data_label: D92
data_type: string
name: disassemble_data
arguments: data_label: D41
data_type: string
name: disassemble_data
arguments: data_label: D88
data_type: string
name: disassemble_data
arguments: data_label: D8
data_type: string
name: disassemble_data
arguments: data_label: D14
data_type: string
name: disassemble_data
arguments: data_label: D50
data_type: string
name: disassemble_data
arguments: data_label: D93
data_type: string
name: disassemble_data
arguments: data_label: D107
data_type: string
name: disassemble_data
arguments: data_label: D37
data_type: string
name: disassemble_data
arguments: data_label: D40
data_type: string

tool: D90: dup

tool: D92: clear

tool: D41: exit

tool: D88: quit

tool: D8: sqrt

tool: D14: +

tool: D50: -

tool: D93: *

tool: D107: /

tool: D37: %lf

tool: D40: 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;
}
```