user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<isExpressionKeyword>:
  endbr64
  push   %r15
  push   %r14
  lea    D85(%rip),%r14
  push   %r13
  lea    D251(%rip),%r13
  push   %r12
  lea    D82(%rip),%r12
  push   %rbp
  mov    %rdi,%rbp
  mov    %r14,%rdi
  push   %rbx
  lea    D147(%rip),%rbx
  sub    $0x48,%rsp
  mov    %rsi,(%rsp)
  call   <strlen@plt>
  mov    %r12,%rdi
  mov    %eax,%r15d
  call   <strlen@plt>
  mov    %r13,%rdi
  mov    %eax,0x8(%rsp)
  call   <strlen@plt>
  lea    D83(%rip),%rdi
  mov    %eax,0xc(%rsp)
  call   <strlen@plt>
  mov    %rbx,%rdi
  mov    %eax,0x10(%rsp)
  call   <strlen@plt>
  lea    D358(%rip),%rdi
  mov    %eax,0x14(%rsp)
  call   <strlen@plt>
  lea    D297(%rip),%rdi
  mov    %eax,0x18(%rsp)
  call   <strlen@plt>
  lea    D44(%rip),%rdi
  mov    %eax,0x1c(%rsp)
  call   <strlen@plt>
  lea    D227(%rip),%rdi
  mov    %eax,0x20(%rsp)
  call   <strlen@plt>
  lea    D342(%rip),%rdi
  mov    %eax,0x24(%rsp)
  call   <strlen@plt>
  lea    D345(%rip),%rdi
  mov    %eax,0x28(%rsp)
  call   <strlen@plt>
  lea    D124(%rip),%rdi
  mov    %eax,0x2c(%rsp)
  call   <strlen@plt>
  lea    D366(%rip),%rdi
  mov    %eax,0x30(%rsp)
  call   <strlen@plt>
  lea    D119(%rip),%rdi
  mov    %eax,0x34(%rsp)
  call   <strlen@plt>
  lea    D23(%rip),%rdi
  mov    %eax,0x38(%rsp)
  call   <strlen@plt>
  mov    %eax,0x3c(%rsp)
  test   %rbp,%rbp
  je     L335
  mov    %r15d,%edx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L442
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  mov    %r14,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L131:
  add    $0x48,%rsp
  mov    %r15d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L442:
  mov    0x8(%rsp),%r15d
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L38
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  mov    %r12,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
  cs nopw 0x0(%rax,%rax,1)
L335:
  xor    %r15d,%r15d
  jmp    L131
  nopl   (%rax)
L38:
  mov    0xc(%rsp),%r15d
  mov    %r13,%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L313
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
  nopl   0x0(%rax)
L313:
  mov    0x10(%rsp),%r15d
  lea    D83(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L255
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D83(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
  nopl   (%rax)
L255:
  mov    0x14(%rsp),%r15d
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L435
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  mov    %rbx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
  nopl   (%rax)
L435:
  mov    0x18(%rsp),%r15d
  lea    D358(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L293
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D358(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L293:
  mov    0x1c(%rsp),%r15d
  lea    D297(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L304
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D297(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L304:
  mov    0x20(%rsp),%ebx
  lea    D44(%rip),%rsi
  mov    %rbp,%rdi
  mov    %ebx,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L143
  mov    (%rsp),%rax
  mov    %ebx,%r15d
  test   %rax,%rax
  je     L131
  lea    D44(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L143:
  mov    0x24(%rsp),%r15d
  lea    D227(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L198
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D227(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L198:
  mov    0x28(%rsp),%r15d
  lea    D342(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L416
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D342(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L416:
  mov    0x2c(%rsp),%r15d
  lea    D345(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L240
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D345(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L240:
  mov    0x30(%rsp),%r15d
  lea    D124(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L118
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D124(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L118:
  mov    0x34(%rsp),%r15d
  lea    D366(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L415
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D366(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L415:
  mov    0x38(%rsp),%r15d
  lea    D119(%rip),%rsi
  mov    %rbp,%rdi
  mov    %r15d,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L405
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L131
  lea    D119(%rip),%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L131
L405:
  mov    0x3c(%rsp),%ebx
  lea    D23(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r15d,%r15d
  mov    %ebx,%edx
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L131
  mov    (%rsp),%rdi
  mov    %ebx,%r15d
  test   %rdi,%rdi
  je     L131
  lea    D23(%rip),%rsi
  call   <strcpy@plt>
  jmp    L131
```

tool_calls: name: retrieve_data
arguments: label: D85
datatype: string
name: retrieve_data
arguments: label: D251
datatype: string
name: retrieve_data
arguments: label: D82
datatype: string
name: retrieve_data
arguments: label: D147
datatype: string
name: retrieve_data
arguments: label: D83
datatype: string
name: retrieve_data
arguments: label: D358
datatype: string
name: retrieve_data
arguments: label: D297
datatype: string
name: retrieve_data
arguments: label: D44
datatype: string
name: retrieve_data
arguments: label: D227
datatype: string
name: retrieve_data
arguments: label: D342
datatype: string
name: retrieve_data
arguments: label: D345
datatype: string
name: retrieve_data
arguments: label: D124
datatype: string
name: retrieve_data
arguments: label: D366
datatype: string
name: retrieve_data
arguments: label: D119
datatype: string
name: retrieve_data
arguments: label: D23
datatype: string

tool: D85: quote

tool: D251: if

tool: D82: lambda

tool: D147: begin

tool: D83: set!

tool: D358: cond

tool: D297: and

tool: D44: or

tool: D227: case

tool: D342: let

tool: D345: let*

tool: D124: letrec

tool: D366: do

tool: D119: delay

tool: D23: quasiquote

assistant: ```c
int isExpressionKeyword(const char *c, char *value) {
  const char *start = c;
  const char *QUOTE = "quote";
  const int QUOTE_SZ = strlen(QUOTE);
  const char *LAMBDA = "lambda";
  const int LAMBDA_SZ = strlen(LAMBDA);
  const char *IF = "if";
  const int IF_SZ = strlen(IF);
  const char *SET_BANG = "set!";
  const int SET_BANG_SZ = strlen(SET_BANG);
  const char *BEGIN = "begin";
  const int BEGIN_SZ = strlen(BEGIN);
  const char *COND = "cond";
  const int COND_SZ = strlen(COND);
  const char *AND = "and";
  const int AND_SZ = strlen(AND);
  const char *OR = "or";
  const int OR_SZ = strlen(OR);
  const char *CASE = "case";
  const int CASE_SZ = strlen(CASE);
  const char *LET = "let";
  const int LET_SZ = strlen(LET);
  const char *LET_STAR = "let*";
  const int LET_STAR_SZ = strlen(LET_STAR);
  const char *LETREC = "letrec";
  const int LETREC_SZ = strlen(LETREC);
  const char *DO = "do";
  const int DO_SZ = strlen(DO);
  const char *DELAY = "delay";
  const int DELAY_SZ = strlen(DELAY);
  const char *QUASIQUOTE = "quasiquote";
  const int QUASIQUOTE_SZ = strlen(QUASIQUOTE);
  if (c == NULL)
    return 0;
  if (strncmp(c, QUOTE, QUOTE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, QUOTE);
    c += QUOTE_SZ;
    return c - start;
  } else if (strncmp(c, LAMBDA, LAMBDA_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LAMBDA);
    c += LAMBDA_SZ;
    return c - start;
  } else if (strncmp(c, IF, IF_SZ) == 0) {
    if (value != NULL)
      strcpy(value, IF);
    c += IF_SZ;
    return c - start;
  } else if (strncmp(c, SET_BANG, SET_BANG_SZ) == 0) {
    if (value != NULL)
      strcpy(value, SET_BANG);
    c += SET_BANG_SZ;
    return c - start;
  } else if (strncmp(c, BEGIN, BEGIN_SZ) == 0) {
    if (value != NULL)
      strcpy(value, BEGIN);
    c += BEGIN_SZ;
    return c - start;
  } else if (strncmp(c, COND, COND_SZ) == 0) {
    if (value != NULL)
      strcpy(value, COND);
    c += COND_SZ;
    return c - start;
  } else if (strncmp(c, AND, AND_SZ) == 0) {
    if (value != NULL)
      strcpy(value, AND);
    c += AND_SZ;
    return c - start;
  } else if (strncmp(c, OR, OR_SZ) == 0) {
    if (value != NULL)
      strcpy(value, OR);
    c += OR_SZ;
    return c - start;
  } else if (strncmp(c, CASE, CASE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, CASE);
    c += CASE_SZ;
    return c - start;
  } else if (strncmp(c, LET, LET_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LET);
    c += LET_SZ;
    return c - start;
  } else if (strncmp(c, LET_STAR, LET_STAR_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LET_STAR);
    c += LET_STAR_SZ;
    return c - start;
  } else if (strncmp(c, LETREC, LETREC_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LETREC);
    c += LETREC_SZ;
    return c - start;
  } else if (strncmp(c, DO, DO_SZ) == 0) {
    if (value != NULL)
      strcpy(value, DO);
    c += DO_SZ;
    return c - start;
  } else if (strncmp(c, DELAY, DELAY_SZ) == 0) {
    if (value != NULL)
      strcpy(value, DELAY);
    c += DELAY_SZ;
    return c - start;
  } else if (strncmp(c, QUASIQUOTE, QUASIQUOTE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, QUASIQUOTE);
    c += QUASIQUOTE_SZ;
    return c - start;
  } else
    return 0;
}
```