user: Demonstrate the C code that generates the assembly output below:

```asm
<isNumber>:
  endbr64
  test   %rdi,%rdi
  je     L86
  movzbl (%rdi),%eax
  test   %al,%al
  je     L86
L312:
  cmp    $0x20,%al
  je     L73
  movzbl (%rdi),%eax
  test   %al,%al
  je     L86
  cmp    $0x2e,%al
  je     L371
  lea    -0x2b(%rax),%edx
  and    $0xfd,%edx
  jne    L97
  movzbl 0x1(%rdi),%eax
  test   %al,%al
  je     L86
  cmp    $0x2e,%al
  je     L103
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L86
  movzbl 0x2(%rdi),%edx
  lea    0x2(%rdi),%rax
  test   %dl,%dl
  je     L313
L334:
  lea    -0x30(%rdx),%ecx
  cmp    $0x9,%cl
  ja     L501
  movzbl 0x1(%rax),%edx
  add    $0x1,%rax
  test   %dl,%dl
  jne    L334
L313:
  mov    $0x1,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L501:
  cmp    $0x2e,%dl
  je     L469
  cmp    $0x65,%dl
  je     L348
  cmp    $0x20,%dl
  jne    L86
  lea    0x1(%rax),%rdx
  movzbl 0x1(%rax),%eax
  test   %al,%al
  jne    L220
  jmp    L313
  nopl   0x0(%rax)
L103:
  movzbl 0x2(%rdi),%eax
  lea    0x2(%rdi),%rdx
  test   %al,%al
  je     L86
L282:
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L86
  movzbl 0x1(%rdx),%eax
  lea    0x1(%rdx),%rcx
  test   %al,%al
  je     L313
L588:
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L179
L230:
  movzbl 0x1(%rcx),%eax
  add    $0x1,%rcx
  test   %al,%al
  je     L313
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  jbe    L230
L179:
  cmp    $0x65,%al
  je     L245
L487:
  cmp    $0x20,%al
  jne    L86
  movzbl 0x1(%rcx),%eax
  lea    0x1(%rcx),%rdx
  test   %al,%al
  jne    L220
  jmp    L313
L440:
  movzbl 0x1(%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  je     L313
L220:
  cmp    $0x20,%al
  je     L440
L86:
  xor    %eax,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L371:
  movzbl 0x1(%rdi),%eax
  lea    0x1(%rdi),%rdx
  test   %al,%al
  jne    L282
  jmp    L86
  xchg   %ax,%ax
L73:
  movzbl 0x1(%rdi),%eax
  add    $0x1,%rdi
  test   %al,%al
  jne    L312
  jmp    L86
  nopw   0x0(%rax,%rax,1)
L97:
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L86
  movzbl 0x1(%rdi),%edx
  lea    0x1(%rdi),%rax
  test   %dl,%dl
  jne    L334
  jmp    L313
  nopl   0x0(%rax)
L348:
  lea    0x1(%rax),%rdx
  movzbl 0x1(%rax),%eax
  test   %al,%al
  je     L86
  nopl   0x0(%rax)
L343:
  lea    -0x2b(%rax),%ecx
  and    $0xfd,%ecx
  jne    L462
  movzbl 0x1(%rdx),%eax
  test   %al,%al
  je     L86
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L86
  movzbl 0x2(%rdx),%eax
  lea    0x2(%rdx),%rcx
  test   %al,%al
  je     L313
L107:
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L487
  movzbl 0x1(%rcx),%eax
  add    $0x1,%rcx
  test   %al,%al
  jne    L107
  jmp    L313
  nop
L462:
  sub    $0x30,%eax
  cmp    $0x9,%al
  ja     L86
  movzbl 0x1(%rdx),%eax
  lea    0x1(%rdx),%rcx
  test   %al,%al
  jne    L107
  jmp    L313
  nopl   0x0(%rax)
L469:
  movzbl 0x1(%rax),%edx
  test   %dl,%dl
  je     L313
  lea    -0x30(%rdx),%ecx
  cmp    $0x9,%cl
  ja     L523
  lea    0x2(%rax),%rcx
  movzbl 0x2(%rax),%eax
  test   %al,%al
  jne    L588
  jmp    L313
  nopl   0x0(%rax)
L523:
  cmp    $0x20,%dl
  je     L529
  cmp    $0x65,%dl
  jne    L86
  lea    0x2(%rax),%rdx
  movzbl 0x2(%rax),%eax
  test   %al,%al
  jne    L343
  jmp    L86
  nopl   0x0(%rax,%rax,1)
L245:
  movzbl 0x1(%rcx),%eax
  lea    0x1(%rcx),%rdx
  test   %al,%al
  jne    L343
  jmp    L86
  nopl   (%rax)
L529:
  lea    0x2(%rax),%rdx
  movzbl 0x2(%rax),%eax
  test   %al,%al
  jne    L220
  jmp    L313
```

assistant: ```c
bool isNumber(char *s) {
  double i = 3.;
  if (s == NULL) {
    return false;
  }
  char state = 0;
  while (*s) {
    switch (state) {
    case 0:
      if (*s == ' ') {
        s++;
      } else {
        state = 1;
      }
      break;
    case 1:
      if (*s == '.') {
        state = 2;
        s++;
      } else if (*s == '+' || *s == '-') {
        state = 5;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 6;
        s++;
      } else {
        return false;
      }
      break;
    case 2:
      if (*s >= '0' && *s <= '9') {
        state = 3;
        s++;
      } else {
        return false;
      }
      break;
    case 3:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 4:
      if (*s == ' ') {
        s++;
      } else {
        return false;
      }
      break;
    case 5:
      if (*s == '.') {
        state = 2;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 6;
        s++;
      } else {
        return false;
      }
      break;
    case 6:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == '.') {
        state = 10;
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 7:
      if (*s == '+' || *s == '-') {
        state = 8;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 9;
        s++;
      } else {
        return false;
      }
      break;
    case 8:
      if (*s >= '0' && *s <= '9') {
        state = 9;
        s++;
      } else {
        return false;
      }
      break;
    case 9:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 10:
      if (*s >= '0' && *s <= '9') {
        state = 3;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else {
        return false;
      }
      break;
    }
  }
  if (state == 3 || state == 4 || state == 6 || state == 9 || state == 10) {
    return true;
  }
  return false;
}
```