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

```asm
<getTok>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  movl   $0x2,-0xc(%rbp)
  movq   $0x0,-0x8(%rbp)
L239:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x5c,%eax
  ja     L119
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D17(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D17(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  jmp    L77
  cmpl   $0x0,-0xc(%rbp)
  jne    L147
  mov    -0x8(%rbp),%rax
  jmp    L77
  cmpl   $0x0,-0xc(%rbp)
  jne    L227
  mov    -0x8(%rbp),%rax
  jmp    L77
L227:
  cmpl   $0x1,-0xc(%rbp)
  je     L14
  addl   $0x1,-0xc(%rbp)
  jmp    L14
  cmpl   $0x2,-0xc(%rbp)
  jle    L228
  subl   $0x1,-0xc(%rbp)
  jmp    L192
L228:
  cmpl   $0x1,-0xc(%rbp)
  je     L192
  mov    $0x0,%eax
  jmp    L77
  cmpl   $0x0,-0xc(%rbp)
  jne    L295
  mov    -0x8(%rbp),%rax
  jmp    L77
L295:
  cmpl   $0x2,-0xc(%rbp)
  jne    L222
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  jmp    L77
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L128
  mov    $0x0,%eax
  jmp    L77
  cmpl   $0x2,-0xc(%rbp)
  je     L283
  cmpl   $0x2,-0xc(%rbp)
  jg     L89
  cmpl   $0x0,-0xc(%rbp)
  je     L201
  cmpl   $0x1,-0xc(%rbp)
  jne    L89
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x8(%rbp),%rax
  jmp    L77
L201:
  mov    -0x8(%rbp),%rax
  jmp    L77
L283:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x1,-0xc(%rbp)
  nop
  jmp    L89
L119:
  cmpl   $0x2,-0xc(%rbp)
  jne    L28
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0xc(%rbp)
  jmp    L28
L147:
  nop
  jmp    L114
L14:
  nop
  jmp    L114
L192:
  nop
  jmp    L114
L222:
  nop
  jmp    L114
L128:
  nop
  jmp    L114
L89:
  nop
  jmp    L114
L28:
  nop
L114:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L239
L77:
  pop    %rbp
  ret
```

assistant: ```c
const char *getTok(const char **pp) {
  enum { inAtom, inString, init, inComment };
  int state = init;
  const char *tokStart = 0;
  for (;;) {
    switch (**pp) {
    case '\0':
      return 0;
    case ' ':
    case '\r':
    case '\t':
    case '\n':
      if (state == inAtom)
        return tokStart;
      break;
    case '(':
      if (state == inAtom)
        return tokStart;
      if (state != inString)
        state++;
      break;
    case ')':
      if (state > init)
        --state;
      else if (state != inString)
        return 0;
      break;
    case ';':
    case '/':
    case '=':
      if (state == inAtom)
        return tokStart;
      if (state == init)
        return (*pp)++;
      break;
    case '\\':
      ++*pp;
      if (**pp == '\0')
        return 0;
      break;
    case '"':
      switch (state) {
      case inString:
        ++*pp;
        return tokStart;
      case inAtom:
        return tokStart;
      case init:
        tokStart = *pp;
        state = inString;
        break;
      }
      break;
    default:
      if (state == init) {
        tokStart = *pp;
        state = inAtom;
      }
      break;
    }
    ++*pp;
  }
}
```