user: 下面的汇编指令对应的C源代码是什么:

```asm
<scan>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  movq   $0x0,-0x8(%rbp)
L36:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  movsbl -0x11(%rbp),%eax
  cmp    $0x39,%eax
  jg     L75
  cmp    $0x31,%eax
  jge    L84
  cmp    $0x30,%eax
  je     L68
  cmp    $0x30,%eax
  jg     L75
  cmp    $0x2d,%eax
  je     L201
  cmp    $0x2d,%eax
  jg     L75
  test   %eax,%eax
  je     L62
  cmp    $0x2b,%eax
  je     L95
  jmp    L75
L68:
  nop
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  movsbl -0x11(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L46
  jmp    L24
L46:
  nop
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L102
L84:
  nop
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  jmp    L53
L61:
  nop
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L102
L95:
  nop
  addq   $0x1,-0x10(%rbp)
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L102
L201:
  nop
  addq   $0x1,-0x10(%rbp)
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L102
L62:
  nop
  addq   $0x1,-0x10(%rbp)
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L14
L75:
  nop
  addq   $0x1,-0x10(%rbp)
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%eax
  jmp    L14
L107:
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
L53:
  movsbl -0x11(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L61
  jmp    L107
L24:
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  movsbl -0x11(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L188
  jmp    L24
L188:
  nop
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
L102:
  jmp    L36
L14:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D2
datatype: string
name: parse_data
arguments: data_tag: D6
datatype: string
name: parse_data
arguments: data_tag: D3
datatype: string
name: parse_data
arguments: data_tag: D24
datatype: string
name: parse_data
arguments: data_tag: D30
datatype: string
name: parse_data
arguments: data_tag: D21
datatype: string

tool: D2: Num


tool: D6: +


tool: D3: -


tool: D24: EOF


tool: D30: ERR


tool: D21: Oct


assistant: ```c
int scan(char *s, int l) {
  char *p = s;
  char *q = 0;
  for (;;) {
    {
      char yych;
      if (((s + l) - p) < 2)
        ;
      yych = *p;
      switch (yych) {
      case 0x00:
        goto yy10;
      case '+':
        goto yy6;
      case '-':
        goto yy8;
      case '0':
        goto yy2;
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        goto yy4;
      default:
        goto yy12;
      }
    yy2:
      ++p;
      switch ((yych = *p)) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        goto yy16;
      default:
        goto yy3;
      }
    yy3 : {
      printf("Num\n");
      continue;
    }
    yy4:
      ++p;
      yych = *p;
      goto yy15;
    yy5 : {
      printf("Num\n");
      continue;
    }
    yy6:
      ++p;
      {
        printf("+\n");
        continue;
      }
    yy8:
      ++p;
      {
        printf("-\n");
        continue;
      }
    yy10:
      ++p;
      {
        printf("EOF\n");
        return 0;
      }
    yy12:
      ++p;
      {
        printf("ERR\n");
        return 1;
      }
    yy14:
      ++p;
      if ((s + l) <= p)
        ;
      yych = *p;
    yy15:
      switch (yych) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        goto yy14;
      default:
        goto yy5;
      }
    yy16:
      ++p;
      if ((s + l) <= p)
        ;
      yych = *p;
      switch (yych) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        goto yy16;
      default:
        goto yy18;
      }
    yy18 : {
      printf("Oct\n");
      continue;
    }
    }
  }
}
```