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

```asm
<wmlKeyWGrammarClass>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  lea    D88(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x1,%eax
  test   %edx,%edx
  je     L4
  lea    D30(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x2,%eax
  test   %edx,%edx
  je     L4
  lea    D48(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x3,%eax
  test   %edx,%edx
  je     L4
  lea    D74(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x4,%eax
  test   %edx,%edx
  je     L4
  lea    D38(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x5,%eax
  test   %edx,%edx
  je     L4
  lea    D73(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x6,%eax
  test   %edx,%edx
  je     L4
  lea    D99(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x7,%eax
  test   %edx,%edx
  je     L4
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x8,%eax
  test   %edx,%edx
  je     L4
  lea    D40(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x9,%eax
  test   %edx,%edx
  je     L4
  lea    D131(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xa,%eax
  test   %edx,%edx
  je     L4
  lea    D121(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xb,%eax
  test   %edx,%edx
  je     L4
  lea    D22(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xc,%eax
  test   %edx,%edx
  je     L4
  lea    D143(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xd,%eax
  test   %edx,%edx
  je     L4
  lea    D93(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xe,%eax
  test   %edx,%edx
  je     L4
  mov    %rbx,%rsi
  lea    D82(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
L4:
  pop    %rbx
  ret
```

tool_calls: name: unpack_data
arguments: label: D88
datatype: string
name: unpack_data
arguments: label: D30
datatype: string
name: unpack_data
arguments: label: D48
datatype: string
name: unpack_data
arguments: label: D74
datatype: string
name: unpack_data
arguments: label: D38
datatype: string
name: unpack_data
arguments: label: D73
datatype: string
name: unpack_data
arguments: label: D99
datatype: string
name: unpack_data
arguments: label: D8
datatype: string
name: unpack_data
arguments: label: D40
datatype: string
name: unpack_data
arguments: label: D131
datatype: string
name: unpack_data
arguments: label: D121
datatype: string
name: unpack_data
arguments: label: D22
datatype: string
name: unpack_data
arguments: label: D143
datatype: string
name: unpack_data
arguments: label: D93
datatype: string
name: unpack_data
arguments: label: D82
datatype: string

tool: D88: argument

tool: D30: charset

tool: D48: color

tool: D74: enumval

tool: D38: font

tool: D73: identifier

tool: D99: keyword

tool: D8: literal

tool: D40: reason

tool: D131: reserved

tool: D121: special

tool: D22: unused

tool: D143: class

tool: D93: child

tool: D82: 
Unrecognized token class %s

assistant: ```c
int wmlKeyWGrammarClass(token)
char *token;
{
  if (strcmp(token, "argument") == 0)
    return 1;
  if (strcmp(token, "charset") == 0)
    return 2;
  if (strcmp(token, "color") == 0)
    return 3;
  if (strcmp(token, "enumval") == 0)
    return 4;
  if (strcmp(token, "font") == 0)
    return 5;
  if (strcmp(token, "identifier") == 0)
    return 6;
  if (strcmp(token, "keyword") == 0)
    return 7;
  if (strcmp(token, "literal") == 0)
    return 8;
  if (strcmp(token, "reason") == 0)
    return 9;
  if (strcmp(token, "reserved") == 0)
    return 10;
  if (strcmp(token, "special") == 0)
    return 11;
  if (strcmp(token, "unused") == 0)
    return 12;
  if (strcmp(token, "class") == 0)
    return 13;
  if (strcmp(token, "child") == 0)
    return 14;
  printf("\nUnrecognized token class %s", token);
  return 0;
}
```