user: Translate the below assembly code into C programming language:

```asm
<parse_word>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L122
  mov    $0x0,%eax
  call   <duplicate@plt>
  jmp    L0
L122:
  mov    -0x28(%rbp),%rax
  lea    D22(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L79
  mov    $0x0,%eax
  call   <clear@plt>
  jmp    L0
L79:
  mov    -0x28(%rbp),%rax
  lea    D48(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L23
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L0
L23:
  mov    -0x28(%rbp),%rax
  lea    D86(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L37
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L0
L37:
  mov    -0x28(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L68
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L68:
  mov    -0x28(%rbp),%rax
  lea    D107(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L172
  mov    $0x0,%eax
  call   <POP@plt>
  movsd  %xmm0,-0x30(%rbp)
  mov    $0x0,%eax
  call   <POP@plt>
  movapd %xmm0,%xmm1
  addsd  -0x30(%rbp),%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L172:
  mov    -0x28(%rbp),%rax
  lea    D47(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L102
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %xmm0,%rax
  movsd  -0x10(%rbp),%xmm0
  movq   %rax,%xmm2
  subsd  %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L102:
  mov    -0x28(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L78
  mov    $0x0,%eax
  call   <POP@plt>
  movsd  %xmm0,-0x30(%rbp)
  mov    $0x0,%eax
  call   <POP@plt>
  movapd %xmm0,%xmm3
  mulsd  -0x30(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L78:
  mov    -0x28(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L157
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    $0x0,%eax
  call   <POP@plt>
  movq   %xmm0,%rax
  movsd  -0x10(%rbp),%xmm0
  movq   %rax,%xmm4
  divsd  %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L157:
  lea    -0x10(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  lea    D105(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L58
  cmpl   $0x0,-0x14(%rbp)
  jne    L63
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L0
L63:
  mov    -0x10(%rbp),%rax
  movq   %rax,%xmm0
  call   <PUSH@plt>
  jmp    L0
L58:
  nop
L0:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D25
type_infered: string
name: disassemble_data
arguments: tag: D22
type_infered: string
name: disassemble_data
arguments: tag: D48
type_infered: string
name: disassemble_data
arguments: tag: D86
type_infered: string
name: disassemble_data
arguments: tag: D8
type_infered: string
name: disassemble_data
arguments: tag: D107
type_infered: string
name: disassemble_data
arguments: tag: D47
type_infered: string
name: disassemble_data
arguments: tag: D73
type_infered: string
name: disassemble_data
arguments: tag: D28
type_infered: string
name: disassemble_data
arguments: tag: D105
type_infered: string
name: disassemble_data
arguments: tag: D81
type_infered: string

tool: D25: dup

tool: D22: clear

tool: D48: exit

tool: D86: quit

tool: D8: sqrt

tool: D107: +

tool: D47: -

tool: D73: *

tool: D28: /

tool: D105: %lf

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