user: Translate the below assembly code into C programming language:

```asm
<printToken>:
  endbr64
  push   %r14
  lea    D31(%rip),%r14
  push   %r13
  mov    %ecx,%r13d
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %rsi,%rbp
  sub    $0x8,%rsp
  cmp    $0x21,%edi
  ja     L46
  lea    D3(%rip),%rdx
  mov    %edi,%edi
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L46:
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D88(%rip),%rdi
L75:
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x8,%rsp
  mov    %r14,%rdi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1060 <puts@plt>
  nopw   0x0(%rax,%rax,1)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D21(%rip),%rdi
  jmp    L75
  nopw   0x0(%rax,%rax,1)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D57(%rip),%rdi
  jmp    L75
  nopw   0x0(%rax,%rax,1)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D23(%rip),%rdi
  jmp    L75
  nopw   0x0(%rax,%rax,1)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D55(%rip),%rdi
  jmp    L75
  nopl   (%rax)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D18(%rip),%rdi
  jmp    L75
  nopl   (%rax)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D5(%rip),%rdi
  jmp    L75
  nopl   (%rax)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D102(%rip),%rdi
  jmp    L75
  nopl   (%rax)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D48(%rip),%rdi
  jmp    L75
  nopl   (%rax)
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  lea    D12(%rip),%rdi
  jmp    L75
```

tool_calls: name: retrieve_data
arguments: data_tag: D31
data_type: string
name: retrieve_data
arguments: data_tag: D88
data_type: string
name: retrieve_data
arguments: data_tag: D21
data_type: string
name: retrieve_data
arguments: data_tag: D57
data_type: string
name: retrieve_data
arguments: data_tag: D23
data_type: string
name: retrieve_data
arguments: data_tag: D55
data_type: string
name: retrieve_data
arguments: data_tag: D18
data_type: string
name: retrieve_data
arguments: data_tag: D5
data_type: string
name: retrieve_data
arguments: data_tag: D102
data_type: string
name: retrieve_data
arguments: data_tag: D48
data_type: string
name: retrieve_data
arguments: data_tag: D12
data_type: string

tool: D31: ______________________________________________________

tool: D88: ERR:    %s		%d		%d


tool: D21: FLOAT: %s		%d		%d


tool: D57: ID:     %s		%d		%d


tool: D23: INT:   %s		%d		%d


tool: D55: LIT:    %s		%d		%d


tool: D18: PR:     %s		%d		%d


tool: D5: ARIT:  %s		%d		%d


tool: D102: ASIG:  %s		%d		%d


tool: D48: REL:   %s		%d		%d


tool: D12: SIGN:  %s		%d		%d


assistant: ```c
printToken(int type, char *value, int charC, int lineC) {
  switch (type) {
  case 31:
    printf("______________________________________________________\n");
    printf("ASIG:  %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 30:
    printf("______________________________________________________\n");
    printf("ARIT:  %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 32:
    printf("______________________________________________________\n");
    printf("REL:   %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 2:
    printf("______________________________________________________\n");
    printf("FLOAT: %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 7:
    printf("______________________________________________________\n");
    printf("INT:   %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 33:
    printf("______________________________________________________\n");
    printf("SIGN:  %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 6:
    printf("______________________________________________________\n");
    printf("ID:     %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 29:
    printf("______________________________________________________\n");
    printf("PR:     %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  case 8:
    printf("______________________________________________________\n");
    printf("LIT:    %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  default:
    printf("______________________________________________________\n");
    printf("ERR:    %s\t\t%d\t\t%d\n", value, charC, lineC);
    printf("______________________________________________________\n");
    break;
  }
}
```