user: Please show me the C implementation that matches the assembly code listed below:

```asm
<lexAnalysis>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x168,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x158(%rsp)
  xor    %eax,%eax
  movq   $0x0,0x10(%rsp)
  movq   $0x0,0x18(%rsp)
  movq   $0x0,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  movq   $0x0,0x30(%rsp)
  movq   $0x0,0x38(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x0,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x68(%rsp)
  movl   $0x0,0x70(%rsp)
  movq   $0x0,0x80(%rsp)
  movq   $0x0,0x88(%rsp)
  movq   $0x0,0x90(%rsp)
  movq   $0x0,0x98(%rsp)
  movq   $0x0,0xa0(%rsp)
  movq   $0x0,0xa8(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0xb8(%rsp)
  movq   $0x0,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movq   $0x0,0xd0(%rsp)
  movq   $0x0,0xd8(%rsp)
  movl   $0x0,0xe0(%rsp)
  movq   $0x0,0xf0(%rsp)
  movq   $0x0,0xf8(%rsp)
  movq   $0x0,0x100(%rsp)
  movq   $0x0,0x108(%rsp)
  movq   $0x0,0x110(%rsp)
  movq   $0x0,0x118(%rsp)
  movq   $0x0,0x120(%rsp)
  movq   $0x0,0x128(%rsp)
  movq   $0x0,0x130(%rsp)
  movq   $0x0,0x138(%rsp)
  movq   $0x0,0x140(%rsp)
  movq   $0x0,0x148(%rsp)
  movl   $0x0,0x150(%rsp)
  test   %esi,%esi
  je     L7
  mov    %rdi,%r12
  mov    %esi,%r13d
  mov    $0x0,%ebp
  movabs $0x3ffffff03ffffff,%r15
  jmp    L1785
L7:
  mov    0x158(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L647
  mov    $0x0,%eax
  add    $0x168,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1039:
  movabs $0x1400000014000000,%rdx
  test   %rdx,%rax
  jne    L1449
L1816:
  cmpb   $0x0,0x80(%rsp)
  jne    L790
L194:
  cmpb   $0x0,0x10(%rsp)
  jne    L72
L566:
  add    $0x1,%ebp
  jmp    L378
L362:
  lea    -0x41(%rbx),%ecx
  cmp    $0x3c,%cl
  ja     L1816
  mov    $0x1,%eax
  shl    %cl,%rax
  test   %r15,%rax
  je     L1039
  cmpb   $0x0,0x10(%rsp)
  jne    L1237
L1604:
  cmp    $0x69,%bl
  je     L321
  cmp    $0x65,%bl
  je     L1808
  cmp    $0x6d,%bl
  je     L1090
  cmp    $0x6c,%bl
  je     L1130
  cmp    $0x76,%bl
  je     L809
  cmp    $0x63,%bl
  je     L93
  cmp    $0x77,%bl
  jne    L1369
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x68,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x69,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x6c,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x65,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L666
L1112:
  lea    D108(%rip),%rdi
  call   <puts@plt>
  add    $0x5,%ebp
  jmp    L378
  lea    0x2(%rbp),%ebx
  movslq %ebx,%rbx
  lea    0xf0(%rsp),%rax
  mov    %rax,0x8(%rsp)
L908:
  movzbl -0x1(%r12,%rbx,1),%r14d
  movsbl %r14b,%esi
  mov    0x8(%rsp),%rdi
  mov    $0x0,%eax
  call   <append@plt>
  mov    %ebx,%ebp
  add    $0x1,%rbx
  cmp    $0x22,%r14b
  jne    L908
  lea    0xf0(%rsp),%rbx
  mov    %rbx,%rdi
  call   <strlen@plt>
  movb   $0x0,0xef(%rsp,%rax,1)
  mov    %rbx,%rsi
  lea    D330(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
L378:
  cmp    %r13d,%ebp
  je     L7
L1785:
  movslq %ebp,%rax
  movzbl (%r12,%rax,1),%ebx
  movsbl %bl,%r14d
  cmp    $0x3e,%bl
  jg     L362
  cmp    $0x1f,%bl
  jle    L1816
  sub    $0x20,%ebx
  cmp    $0x1e,%bl
  ja     L1816
  movzbl %bl,%ebx
  lea    D617(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  cmpb   $0x0,0x80(%rsp)
  jne    L1655
L251:
  lea    0x10(%rsp),%rdi
  mov    %r14d,%esi
  mov    $0x0,%eax
  call   <append@plt>
  add    $0x1,%ebp
  jmp    L378
L1655:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L251
L1237:
  lea    0x10(%rsp),%rdi
  mov    %rdi,0x8(%rsp)
  mov    %rdi,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    0x8(%rsp),%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1604
L321:
  lea    0x1(%rbp),%eax
  cltq
  movzbl (%r12,%rax,1),%eax
  cmp    $0x66,%al
  je     L1005
  cmp    $0x6e,%al
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x74,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L1685
L494:
  lea    D359(%rip),%rdi
  call   <puts@plt>
  add    $0x3,%ebp
  jmp    L378
L1005:
  cmpb   $0x0,0x80(%rsp)
  jne    L1470
L1756:
  lea    D469(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
L1470:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1756
L1685:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L494
L1808:
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x6c,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x73,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x65,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x20,(%r12,%rax,1)
  jne    L1134
  lea    0x5(%rbp),%eax
  cltq
  cmpb   $0x69,(%r12,%rax,1)
  jne    L1134
  lea    0x6(%rbp),%eax
  cltq
  cmpb   $0x66,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L1725
L336:
  lea    D63(%rip),%rdi
  call   <puts@plt>
  add    $0x7,%ebp
  jmp    L378
L1725:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x19,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %eax,%es:(%rdi)
  jmp    L336
L1090:
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x61,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x69,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x6e,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L1289
L1563:
  lea    D543(%rip),%rdi
  call   <puts@plt>
  add    $0x4,%ebp
  jmp    L378
L1289:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1563
L1130:
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x6f,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x6e,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x67,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L931
L434:
  lea    D543(%rip),%rdi
  call   <puts@plt>
  add    $0x4,%ebp
  jmp    L378
L931:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L434
L809:
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x6f,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x69,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x64,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L245
L141:
  lea    D625(%rip),%rdi
  call   <puts@plt>
  add    $0x4,%ebp
  jmp    L378
L245:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L141
L93:
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x68,(%r12,%rax,1)
  je     L1739
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x6f,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x6e,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x73,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x74,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L667
L497:
  lea    D111(%rip),%rdi
  call   <puts@plt>
  add    $0x5,%ebp
  jmp    L378
L1739:
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x61,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x72,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L342
L705:
  lea    D449(%rip),%rdi
  call   <puts@plt>
  add    $0x4,%ebp
  jmp    L378
L342:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L705
L666:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x19,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %eax,%es:(%rdi)
  jmp    L1112
L1369:
  cmp    $0x66,%bl
  jne    L805
  lea    0x1(%rbp),%eax
  cltq
  cmpb   $0x6c,(%r12,%rax,1)
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x6f,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x61,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x74,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L386
L735:
  lea    D111(%rip),%rdi
  call   <puts@plt>
  add    $0x5,%ebp
  jmp    L378
L386:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x19,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %eax,%es:(%rdi)
  jmp    L735
L667:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x19,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %eax,%es:(%rdi)
  jmp    L497
L805:
  cmp    $0x73,%bl
  je     L697
L1134:
  lea    0x80(%rsp),%rdi
  mov    %r14d,%esi
  mov    $0x0,%eax
  call   <append@plt>
  add    $0x1,%ebp
  jmp    L378
L697:
  lea    0x1(%rbp),%eax
  cltq
  movzbl (%r12,%rax,1),%eax
  cmp    $0x68,%al
  je     L1155
  cmp    $0x74,%al
  jne    L1134
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x72,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x75,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x63,(%r12,%rax,1)
  jne    L1134
  lea    0x5(%rbp),%eax
  cltq
  cmpb   $0x74,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L961
L1794:
  lea    D279(%rip),%rdi
  call   <puts@plt>
  add    $0x6,%ebp
  jmp    L378
L1155:
  lea    0x2(%rbp),%eax
  cltq
  cmpb   $0x6f,(%r12,%rax,1)
  jne    L1134
  lea    0x3(%rbp),%eax
  cltq
  cmpb   $0x72,(%r12,%rax,1)
  jne    L1134
  lea    0x4(%rbp),%eax
  cltq
  cmpb   $0x74,(%r12,%rax,1)
  jne    L1134
  cmpb   $0x0,0x80(%rsp)
  jne    L1682
L1526:
  lea    D111(%rip),%rdi
  call   <puts@plt>
  add    $0x5,%ebp
  jmp    L378
L1682:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x19,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %eax,%es:(%rdi)
  jmp    L1526
L961:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1794
  cmpb   $0x0,0x80(%rsp)
  jne    L1105
L1551:
  cmpb   $0x0,0x10(%rsp)
  jne    L1382
L279:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  movzbl (%r12,%rax,1),%eax
  cmp    $0x2b,%al
  je     L1391
  cmp    $0x3d,%al
  je     L58
  lea    D390(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L1105:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1551
L1382:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L279
L1391:
  lea    D602(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
L58:
  lea    D534(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L1032
L800:
  cmpb   $0x0,0x10(%rsp)
  jne    L941
L1108:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  movzbl (%r12,%rax,1),%eax
  cmp    $0x3d,%al
  je     L349
  cmp    $0x3e,%al
  je     L145
  cmp    $0x2d,%al
  je     L1381
  lea    D23(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L1032:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L800
L941:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1108
L1381:
  lea    D591(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
L349:
  lea    D163(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
L145:
  lea    D115(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L793
L195:
  cmpb   $0x0,0x10(%rsp)
  jne    L1715
L655:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L600
  lea    D719(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L793:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L195
L1715:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L655
L600:
  lea    D418(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L1487
L694:
  cmpb   $0x0,0x10(%rsp)
  jne    L1348
L952:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L1595
  lea    D524(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L1487:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L694
L1348:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L952
L1595:
  lea    D550(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L40
L997:
  cmpb   $0x0,0x10(%rsp)
  jne    L60
L1540:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L314
  lea    D9(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L40:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L997
L60:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1540
L314:
  lea    D446(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L287
L1245:
  cmpb   $0x0,0x10(%rsp)
  jne    L130
L404:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L700
  lea    D518(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebx,%ebp
  jmp    L378
L287:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1245
L130:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L404
L700:
  lea    D70(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L1605
L1249:
  cmpb   $0x0,0x10(%rsp)
  jne    L1371
L928:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L1819
  lea    D673(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L1605:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1249
L1371:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L928
L1819:
  lea    D277(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L1366
L860:
  cmpb   $0x0,0x10(%rsp)
  jne    L1588
L1347:
  add    $0x1,%ebp
  jmp    L378
L1366:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L860
L1588:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1347
L1449:
  cmpb   $0x0,0x80(%rsp)
  jne    L68
L1191:
  cmpb   $0x0,0x10(%rsp)
  jne    L1547
L611:
  mov    %r14d,%esi
  lea    D15(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  jmp    L378
L68:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1191
L1547:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L611
  cmpb   $0x0,0x80(%rsp)
  jne    L39
L1777:
  cmpb   $0x0,0x10(%rsp)
  jne    L1044
L1646:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L675
  lea    D395(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L39:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1777
L1044:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1646
L675:
  lea    D552(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
  cmpb   $0x0,0x80(%rsp)
  jne    L1165
L1075:
  cmpb   $0x0,0x10(%rsp)
  jne    L1025
L785:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  cmpb   $0x3d,(%r12,%rax,1)
  je     L249
  lea    D309(%rip),%rdi
  call   <puts@plt>
  mov    %ebx,%ebp
  jmp    L378
L1165:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L1075
L1025:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L785
L249:
  lea    D570(%rip),%rdi
  call   <puts@plt>
  add    $0x2,%ebp
  jmp    L378
L790:
  lea    0x80(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D62(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L194
L72:
  lea    0x10(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D613(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xc,%ecx
  mov    $0x0,%eax
  mov    %rbx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x0,(%rdi)
  jmp    L566
L647:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D108
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D330
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D62
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D613
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D359
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D469
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D63
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D543
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D625
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D111
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D449
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D279
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D390
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D602
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D534
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D23
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D591
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D163
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D115
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D719
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D418
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D524
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D550
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D9
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D446
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D518
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D70
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D673
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D277
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D15
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D395
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D552
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D309
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D570
type_guessed: string

tool: D108: <while, keyword>

tool: D330: <%s, literal>


tool: D62: <%s, identifier>


tool: D613: <%s, digit>


tool: D359: <int, keyword>

tool: D469: <if, keyword>

tool: D63: <else if, keyword>

tool: D543: <main, keyword>

tool: D625: <void, keyword>

tool: D111: <float, keyword>

tool: D449: <char, keyword>

tool: D279: <struct, keyword>

tool: D390: <+, operator>

tool: D602: <++, operator>

tool: D534: <+=, assignment>

tool: D23: <-, operator>

tool: D591: <--, operator>

tool: D163: <-=, assignment>

tool: D115: <->, pointer>

tool: D719: <*, operator>

tool: D418: <*=, assignment>

tool: D524: </, operator>

tool: D550: </=, assignment>

tool: D9: <=, assignment>

tool: D446: <==, comparison>

tool: D518: <%%, operator>


tool: D70: <%%=, assignment>


tool: D673: <!, logical>

tool: D277: <!=, relational>

tool: D15: <%c, delimiter>


tool: D395: <<, relational>

tool: D552: <<=, relational>

tool: D309: <>, relational>

tool: D570: <>=, relational>

assistant: ```c
int lexAnalysis(char *str, int len) {
  int i = 0, j;
  char curr, next;
  char t[100] = "";
  char tw[100] = "";
  char tl[100] = "";
loop:
  if (i == len) {
    return 0;
  }
  curr = str[i];
  switch (curr) {
  case '"':
    i++;
    do {
      curr = str[i];
      append(tl, curr);
      i++;
    } while (curr != '"');
    tl[strlen(tl) - 1] = 0;
    printf("<%s, literal>\n", tl);
    memset(tl, 0, 100);
    goto loop;
    break;
  case '0':
  case '1':
  case '2':
  case '3':
  case '4':
  case '5':
  case '6':
  case '7':
  case '8':
  case '9':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    append(t, curr);
    i++;
    goto loop;
    break;
  case 'a':
  case 'b':
  case 'c':
  case 'd':
  case 'e':
  case 'f':
  case 'g':
  case 'h':
  case 'i':
  case 'j':
  case 'k':
  case 'l':
  case 'm':
  case 'n':
  case 'o':
  case 'p':
  case 'q':
  case 'r':
  case 's':
  case 't':
  case 'u':
  case 'v':
  case 'w':
  case 'x':
  case 'y':
  case 'z':
  case 'A':
  case 'B':
  case 'C':
  case 'D':
  case 'E':
  case 'F':
  case 'G':
  case 'H':
  case 'I':
  case 'J':
  case 'K':
  case 'L':
  case 'M':
  case 'N':
  case 'O':
  case 'P':
  case 'Q':
  case 'R':
  case 'S':
  case 'T':
  case 'U':
  case 'V':
  case 'W':
  case 'X':
  case 'Y':
  case 'Z':
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    if (curr == 'i') {
      i++;
      next = str[i];
      if (next == 'f') {
        if (strlen(tw) > 0) {
          printf("<%s, identifier>\n", tw);
          memset(tw, 0, 100);
        }
        printf("<if, keyword>\n");
        i++;
        goto loop;
      } else if (next == 'n') {
        i++;
        next = str[i];
        if (next == 't') {
          if (strlen(tw) > 0) {
            printf("<%s, identifier>\n", tw);
            memset(tw, 0, 100);
          }
          printf("<int, keyword>\n");
          i++;
          goto loop;
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'e') {
      i++;
      next = str[i];
      if (next == 'l') {
        i++;
        next = str[i];
        if (next == 's') {
          i++;
          next = str[i];
          if (next == 'e') {
            i++;
            next = str[i];
            if (next == ' ') {
              i++;
              next = str[i];
              if (next == 'i') {
                i++;
                next = str[i];
                if (next == 'f') {
                  if (strlen(tw) > 0) {
                    printf("<%s, identifier>\n", tw);
                    memset(tw, 0, 100);
                  }
                  printf("<else if, keyword>\n");
                  i++;
                  goto loop;
                } else {
                  i -= 6;
                }
              } else {
                i -= 5;
              }
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'm') {
      i++;
      next = str[i];
      if (next == 'a') {
        i++;
        next = str[i];
        if (next == 'i') {
          i++;
          next = str[i];
          if (next == 'n') {
            if (strlen(tw) > 0) {
              printf("<%s, identifier>\n", tw);
              memset(tw, 0, 100);
            }
            printf("<main, keyword>\n");
            i++;
            goto loop;
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'l') {
      i++;
      next = str[i];
      if (next == 'o') {
        i++;
        next = str[i];
        if (next == 'n') {
          i++;
          next = str[i];
          if (next == 'g') {
            if (strlen(tw) > 0) {
              printf("<%s, identifier>\n", tw);
              memset(tw, 0, 100);
            }
            printf("<main, keyword>\n");
            i++;
            goto loop;
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'v') {
      i++;
      next = str[i];
      if (next == 'o') {
        i++;
        next = str[i];
        if (next == 'i') {
          i++;
          next = str[i];
          if (next == 'd') {
            if (strlen(tw) > 0) {
              printf("<%s, identifier>\n", tw);
              memset(tw, 0, 100);
            }
            printf("<void, keyword>\n");
            i++;
            goto loop;
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'c') {
      i++;
      next = str[i];
      if (next == 'h') {
        i++;
        next = str[i];
        if (next == 'a') {
          i++;
          next = str[i];
          if (next == 'r') {
            if (strlen(tw) > 0) {
              printf("<%s, identifier>\n", tw);
              memset(tw, 0, 100);
            }
            printf("<char, keyword>\n");
            i++;
            goto loop;
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'w') {
      i++;
      next = str[i];
      if (next == 'h') {
        i++;
        next = str[i];
        if (next == 'i') {
          i++;
          next = str[i];
          if (next == 'l') {
            i++;
            next = str[i];
            if (next == 'e') {
              if (strlen(tw) > 0) {
                printf("<%s, identifier>\n", tw);
                memset(tw, 0, 100);
              }
              printf("<while, keyword>\n");
              i++;
              goto loop;
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'f') {
      i++;
      next = str[i];
      if (next == 'l') {
        i++;
        next = str[i];
        if (next == 'o') {
          i++;
          next = str[i];
          if (next == 'a') {
            i++;
            next = str[i];
            if (next == 't') {
              if (strlen(tw) > 0) {
                printf("<%s, identifier>\n", tw);
                memset(tw, 0, 100);
              }
              printf("<float, keyword>\n");
              i++;
              goto loop;
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 'c') {
      i++;
      next = str[i];
      if (next == 'o') {
        i++;
        next = str[i];
        if (next == 'n') {
          i++;
          next = str[i];
          if (next == 's') {
            i++;
            next = str[i];
            if (next == 't') {
              if (strlen(tw) > 0) {
                printf("<%s, identifier>\n", tw);
                memset(tw, 0, 100);
              }
              printf("<float, keyword>\n");
              i++;
              goto loop;
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 's') {
      i++;
      next = str[i];
      if (next == 'h') {
        i++;
        next = str[i];
        if (next == 'o') {
          i++;
          next = str[i];
          if (next == 'r') {
            i++;
            next = str[i];
            if (next == 't') {
              if (strlen(tw) > 0) {
                printf("<%s, identifier>\n", tw);
                memset(tw, 0, 100);
              }
              printf("<float, keyword>\n");
              i++;
              goto loop;
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    if (curr == 's') {
      i++;
      next = str[i];
      if (next == 't') {
        i++;
        next = str[i];
        if (next == 'r') {
          i++;
          next = str[i];
          if (next == 'u') {
            i++;
            next = str[i];
            if (next == 'c') {
              i++;
              next = str[i];
              if (next == 't') {
                if (strlen(tw) > 0) {
                  printf("<%s, identifier>\n", tw);
                  memset(tw, 0, 100);
                }
                printf("<struct, keyword>\n");
                i++;
                goto loop;
              } else {
                i -= 5;
              }
            } else {
              i -= 4;
            }
          } else {
            i -= 3;
          }
        } else {
          i -= 2;
        }
      } else {
        i--;
      }
    }
    append(tw, curr);
    i++;
    goto loop;
    break;
  case '+':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '+':
      printf("<++, operator>\n");
      i++;
      break;
    case '=':
      printf("<+=, assignment>\n");
      i++;
      break;
    default:
      printf("<+, operator>\n");
    }
    goto loop;
    break;
  case '-':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '-':
      printf("<--, operator>\n");
      i++;
      break;
    case '=':
      printf("<-=, assignment>\n");
      i++;
      break;
    case '>':
      printf("<->, pointer>\n");
      i++;
      break;
    default:
      printf("<-, operator>\n");
    }
    goto loop;
    break;
  case '*':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<*=, assignment>\n");
      i++;
      break;
    default:
      printf("<*, operator>\n");
    }
    goto loop;
    break;
  case '/':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("</=, assignment>\n");
      i++;
      break;
    default:
      printf("</, operator>\n");
    }
    goto loop;
    break;
  case '=':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<==, comparison>\n");
      i++;
      break;
    default:
      printf("<=, assignment>\n");
    }
    goto loop;
    break;
  case '%':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<%%=, assignment>\n");
      i++;
      break;
    default:
      printf("<%%, operator>\n");
    }
    goto loop;
    break;
  case '!':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<!=, relational>\n");
      i++;
      break;
    default:
      printf("<!, logical>\n");
    }
    goto loop;
    break;
  case ' ':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    goto loop;
  case '{':
  case '}':
  case '(':
  case ')':
  case '[':
  case ']':
  case ',':
  case ';':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    printf("<%c, delimiter>\n", curr);
    i++;
    goto loop;
    break;
  case '<':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<<=, relational>\n");
      i++;
      break;
    default:
      printf("<<, relational>\n");
    }
    goto loop;
    break;
  case '>':
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    next = str[i];
    switch (next) {
    case '=':
      printf("<>=, relational>\n");
      i++;
      break;
    default:
      printf("<>, relational>\n");
    }
    goto loop;
    break;
  default:
    if (strlen(tw) > 0) {
      printf("<%s, identifier>\n", tw);
      memset(tw, 0, 100);
    }
    if (strlen(t) > 0) {
      printf("<%s, digit>\n", t);
      memset(t, 0, 100);
    }
    i++;
    goto loop;
  }
}
```