user: 这段汇编代码用C语言表示是什么样的：

```asm
<lex_look_ahead>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r13
  mov    %rdx,%r12
  mov    %rcx,%r15
  mov    %r8d,%r14d
  mov    %esi,%eax
  add    (%rdx),%eax
  mov    %eax,0x8(%rsp)
  lea    -0x1(%rsi),%ebx
L150:
  mov    (%r12),%eax
  movsbl 0x0(%r13,%rax,1),%edi
  call   <is_whitespace@plt>
  test   %rax,%rax
  je     L79
  mov    (%r12),%eax
  add    $0x1,%eax
  mov    %eax,(%r12)
  cmp    %ebx,%eax
  jb     L150
L79:
  movb   $0x0,(%r15)
  mov    (%r12),%eax
  mov    %eax,%edx
  cmpb   $0x0,0x0(%r13,%rdx,1)
  je     L32
  cmp    %eax,0x8(%rsp)
  jbe    L32
  mov    $0x0,%ebp
  mov    $0x0,%ebx
  lea    -0x1(%r14),%esi
  mov    %esi,0xc(%rsp)
  jmp    L66
L10:
  movsbl 0x4(%rsp),%eax
  mov    %eax,0x4(%rsp)
  mov    %eax,%edi
  call   <is_alpha@plt>
  test   %rax,%rax
  je     L165
  mov    %r14d,%edi
  call   <is_alpha@plt>
  test   %rax,%rax
  je     L32
L165:
  mov    0x4(%rsp),%edi
  call   <is_number@plt>
  test   %rax,%rax
  je     L167
  mov    %r14d,%edi
  call   <is_number@plt>
  test   %rax,%rax
  je     L32
L167:
  mov    %r14d,%edi
  call   <_is_statement_terminator@plt>
  test   %rax,%rax
  jne    L32
  mov    0x4(%rsp),%edi
  call   <_is_operator@plt>
  test   %rax,%rax
  je     L18
L32:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L83:
  mov    %ebx,%eax
  mov    %bpl,(%r15,%rax,1)
  add    $0x1,%ebx
  mov    %ebx,%eax
  movb   $0x0,(%r15,%rax,1)
  mov    (%r12),%eax
  mov    %eax,%edx
  cmpb   $0x0,0x0(%r13,%rdx,1)
  je     L32
  add    %ebx,%eax
  cmp    0x8(%rsp),%eax
  jae    L32
L66:
  mov    %bpl,0x4(%rsp)
  mov    %eax,%eax
  movzbl 0x0(%r13,%rax,1),%ebp
  movsbl %bpl,%r14d
  mov    %r14d,%edi
  call   <is_whitespace@plt>
  test   %rax,%rax
  jne    L32
  test   %ebx,%ebx
  jne    L10
L18:
  cmp    %ebx,0xc(%rsp)
  ja     L83
  lea    D9(%rip),%rdi
  call   <err_msg@plt>
  mov    (%r12),%edi
  add    %r13,%rdi
  call   <err_msg@plt>
  lea    D3(%rip),%rdi
  call   <err_msg@plt>
  mov    $0x0,%eax
  call   <die@plt>
  jmp    L83
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D9
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D3
type_guessed: string

tool: D9: not enough room for next token: '

tool: D3: '


assistant: ```c
void lex_look_ahead(const char *input, unsigned int input_len, unsigned int *pos, char *output, unsigned int output_size) {
  unsigned int i;
  unsigned int end;
  char last;
  char next;
  i = 0;
  end = *pos + input_len;
  last = '\0';
  next = '\0';
  while (is_whitespace(input[*pos])) {
    *pos += 1;
    if (*pos >= input_len - 1) {
      break;
    }
  }
  output[0] = '\0';
  while (input[*pos] && (*pos + i) < end) {
    last = next;
    next = input[*pos + i];
    if (is_whitespace(next)) {
      break;
    }
    if (i > 0) {
      if (is_alpha(last) && !is_alpha(next)) {
        break;
      }
      if (is_number(last) && !is_number(next)) {
        break;
      }
      if (_is_statement_terminator(next)) {
        break;
      }
      if (_is_operator(last)) {
        break;
      }
    }
    if (i >= output_size - 1) {
      err_msg("not enough room for next token: '");
      err_msg(&(input[*pos]));
      err_msg("'\n");
      die();
    }
    output[i] = next;
    output[i + 1] = '\0';
    i++;
  }
}
```