user: What is the c source code of the assembly code below?

```asm
<attribute_to_str>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jne    L310
  lea    D66(%rip),%rax
  jmp    L53
L310:
  cmpl   $0x2,-0x14(%rbp)
  jne    L344
  lea    D114(%rip),%rax
  jmp    L53
L344:
  cmpl   $0x3,-0x14(%rbp)
  je     L294
  cmpl   $0x4,-0x14(%rbp)
  jne    L139
L294:
  lea    D38(%rip),%rax
  jmp    L53
L139:
  cmpl   $0x5,-0x14(%rbp)
  jne    L262
  lea    D141(%rip),%rax
  jmp    L53
L262:
  cmpl   $0x6,-0x14(%rbp)
  jne    L136
  lea    D112(%rip),%rax
  jmp    L53
L136:
  cmpl   $0x7,-0x14(%rbp)
  jne    L222
  lea    D27(%rip),%rax
  jmp    L53
L222:
  cmpl   $0x3de,-0x14(%rbp)
  jne    L189
  lea    D25(%rip),%rax
  jmp    L53
L189:
  cmpl   $0x3df,-0x14(%rbp)
  jne    L216
  lea    D132(%rip),%rax
  jmp    L53
L216:
  cmpl   $0x3e0,-0x14(%rbp)
  jne    L64
  lea    D71(%rip),%rax
  jmp    L53
L64:
  cmpl   $0x3e1,-0x14(%rbp)
  jne    L213
  lea    D149(%rip),%rax
  jmp    L53
L213:
  cmpl   $0x3e2,-0x14(%rbp)
  jne    L256
  lea    D36(%rip),%rax
  jmp    L53
L256:
  cmpl   $0x3e3,-0x14(%rbp)
  jne    L22
  lea    D169(%rip),%rax
  jmp    L53
L22:
  cmpl   $0x3e4,-0x14(%rbp)
  jne    L89
  lea    D5(%rip),%rax
  jmp    L53
L89:
  cmpl   $0x3e5,-0x14(%rbp)
  jne    L58
  lea    D88(%rip),%rax
  jmp    L53
L58:
  cmpl   $0x3e6,-0x14(%rbp)
  jne    L202
  lea    D39(%rip),%rax
  jmp    L53
L202:
  cmpl   $0x3e7,-0x14(%rbp)
  jne    L74
  lea    D97(%rip),%rax
  jmp    L53
L74:
  cmpl   $0x7cf,-0x14(%rbp)
  jle    L270
  mov    $0x14,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x14(%rbp),%eax
  lea    -0x7d0(%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%ecx
  lea    D151(%rip),%rdx
  mov    $0x14,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    -0x8(%rbp),%rax
  jmp    L53
L270:
  mov    $0x1,%edi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D59(%rip),%rdx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
  mov    -0x10(%rbp),%rax
L53:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D66
datatype: string
name: parse_data
arguments: label: D114
datatype: string
name: parse_data
arguments: label: D38
datatype: string
name: parse_data
arguments: label: D141
datatype: string
name: parse_data
arguments: label: D112
datatype: string
name: parse_data
arguments: label: D27
datatype: string
name: parse_data
arguments: label: D25
datatype: string
name: parse_data
arguments: label: D132
datatype: string
name: parse_data
arguments: label: D71
datatype: string
name: parse_data
arguments: label: D149
datatype: string
name: parse_data
arguments: label: D36
datatype: string
name: parse_data
arguments: label: D169
datatype: string
name: parse_data
arguments: label: D5
datatype: string
name: parse_data
arguments: label: D88
datatype: string
name: parse_data
arguments: label: D39
datatype: string
name: parse_data
arguments: label: D97
datatype: string
name: parse_data
arguments: label: D151
datatype: string
name: parse_data
arguments: label: D59
datatype: string

tool: D66: Unrecognized Symbol

tool: D114: Extra Long ID

tool: D38: Extra Long Integer

tool: D141: Extra Long Fractional Part

tool: D112: Extra Long Exponent Part

tool: D27: Integer Leading Zero

tool: D25: MOD

tool: D132: DIV

tool: D71: OR

tool: D149: AND

tool: D36: <>

tool: D169: <=

tool: D5: >=

tool: D88: LONGREAL

tool: D39: REAL

tool: D97: INT

tool: D151: loc%d in SYMTABLE

tool: D59: %d

assistant: ```c
char *attribute_to_str(int attr) {
  if (attr == 1)
    return "Unrecognized Symbol";
  else if (attr == 2)
    return "Extra Long ID";
  else if (attr == 3 || attr == 4)
    return "Extra Long Integer";
  else if (attr == 5)
    return "Extra Long Fractional Part";
  else if (attr == 6)
    return "Extra Long Exponent Part";
  else if (attr == 7)
    return "Integer Leading Zero";
  else if (attr == 990)
    return "MOD";
  else if (attr == 991)
    return "DIV";
  else if (attr == 992)
    return "OR";
  else if (attr == 993)
    return "AND";
  else if (attr == 994)
    return "<>";
  else if (attr == 995)
    return "<=";
  else if (attr == 996)
    return ">=";
  else if (attr == 997)
    return "LONGREAL";
  else if (attr == 998)
    return "REAL";
  else if (attr == 999)
    return "INT";
  else if (attr >= 2000) {
    char *str = (char *)malloc(20);
    snprintf(str, 20, "loc%d in SYMTABLE", attr - 2000);
    return str;
  }
  char *str = (char *)malloc(1);
  snprintf(str, 1, "%d", attr);
  return str;
}
```