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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x180,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x64,-0x170(%rbp)
  movl   $0x0,-0x16c(%rbp)
  movl   $0x0,-0x168(%rbp)
  movl   $0x0,-0x164(%rbp)
  movl   $0x0,-0x160(%rbp)
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x150(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  jmp    L454
L144:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  jne    L195
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  mov    %al,-0x172(%rbp)
  movsbl -0x172(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
L195:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x31,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x32,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x33,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x34,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x35,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x36,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x37,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x38,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x39,%al
  je     L397
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x30,%al
  jne    L327
L397:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%edx
  mov    -0x168(%rbp),%eax
  cltq
  mov    %dl,-0xe0(%rbp,%rax,1)
  addl   $0x1,-0x168(%rbp)
  jmp    L249
L327:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  jne    L466
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  mov    %al,-0x172(%rbp)
  movsbl -0x172(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
  jmp    L249
L466:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x2b,%al
  je     L169
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  je     L169
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x2a,%al
  je     L169
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x2f,%al
  je     L169
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x25,%al
  je     L169
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x5e,%al
  jne    L249
L169:
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  mov    %eax,-0x15c(%rbp)
  cmpl   $0x1,-0x15c(%rbp)
  jne    L51
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  mov    %al,-0x172(%rbp)
  movsbl -0x172(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
  jmp    L249
L51:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  mov    %al,-0x172(%rbp)
  movsbl -0x172(%rbp),%eax
  mov    %eax,%edi
  call   <prioridad@plt>
  mov    %eax,-0x158(%rbp)
  lea    -0x170(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pop@plt>
  mov    %al,-0x171(%rbp)
  movsbl -0x171(%rbp),%eax
  mov    %eax,%edi
  call   <prioridad@plt>
  mov    %eax,-0x154(%rbp)
  mov    -0x158(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  jle    L170
  movsbl -0x171(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
  movsbl -0x172(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
  jmp    L249
L170:
  cmpl   $0x0,-0x154(%rbp)
  je     L49
  mov    -0x168(%rbp),%eax
  cltq
  movzbl -0x171(%rbp),%edx
  mov    %dl,-0xe0(%rbp,%rax,1)
  addl   $0x1,-0x168(%rbp)
  jmp    L35
L288:
  lea    -0x170(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pop@plt>
  mov    %al,-0x171(%rbp)
  movsbl -0x171(%rbp),%eax
  mov    %eax,%edi
  call   <prioridad@plt>
  mov    %eax,-0x154(%rbp)
  mov    -0x158(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  jg     L35
  mov    -0x168(%rbp),%eax
  cltq
  movzbl -0x171(%rbp),%edx
  mov    %dl,-0xe0(%rbp,%rax,1)
  addl   $0x1,-0x168(%rbp)
L35:
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  test   %eax,%eax
  je     L288
L49:
  movsbl -0x172(%rbp),%edx
  lea    -0x170(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <push@plt>
L249:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x29,%al
  jne    L433
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  cmp    $0x1,%eax
  jne    L285
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L285
L282:
  lea    -0x170(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pop@plt>
  mov    %al,-0x171(%rbp)
  mov    -0x168(%rbp),%eax
  cltq
  movzbl -0x171(%rbp),%edx
  mov    %dl,-0xe0(%rbp,%rax,1)
  addl   $0x1,-0x168(%rbp)
L285:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  je     L431
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  test   %eax,%eax
  je     L282
L431:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  jne    L241
  lea    -0x170(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pop@plt>
  mov    %al,-0x171(%rbp)
  jmp    L433
L241:
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x164(%rbp)
L433:
  addl   $0x1,-0x16c(%rbp)
L454:
  mov    -0x16c(%rbp),%eax
  cltq
  movzbl -0x150(%rbp,%rax,1),%eax
  test   %al,%al
  je     L202
  cmpl   $0x0,-0x164(%rbp)
  je     L144
  jmp    L202
L358:
  lea    -0x170(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <pop@plt>
  mov    %al,-0x171(%rbp)
  cmpb   $0x28,-0x171(%rbp)
  je     L350
  mov    -0x168(%rbp),%eax
  cltq
  movzbl -0x171(%rbp),%edx
  mov    %dl,-0xe0(%rbp,%rax,1)
  addl   $0x1,-0x168(%rbp)
  jmp    L202
L350:
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x1,-0x160(%rbp)
L202:
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  test   %eax,%eax
  jne    L116
  cmpl   $0x0,-0x160(%rbp)
  je     L358
L116:
  mov    -0x170(%rbp),%eax
  mov    %eax,%edi
  call   <pila_vacia@plt>
  cmp    $0x1,%eax
  jne    L113
  cmpl   $0x0,-0x164(%rbp)
  jne    L113
  cmpl   $0x0,-0x160(%rbp)
  jne    L113
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L113:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L64
  call   <__stack_chk_fail@plt>
L64:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D47
type_guessed: string
name: retrieve_data
arguments: data_tag: D48
type_guessed: string
name: retrieve_data
arguments: data_tag: D20
type_guessed: string
name: retrieve_data
arguments: data_tag: D7
type_guessed: string
name: retrieve_data
arguments: data_tag: D50
type_guessed: string

tool: D47: Introduce la exprecion infija	

tool: D48: %s

tool: D20: La exprecion esta mal

tool: D7: Es incorrecta, falta ( 

tool: D50: 
Postfija= %s

assistant: ```c
main() {
  char infija[100], posfija[100], pila[100], operador, s;
  int ne = 100, i = 0, p, pr2, x, j = 0, band = 0, band2 = 0;
  printf("Introduce la exprecion infija\t");
  scanf("%s", infija);
  while (infija[i] != '\0' && band == 0) {
    if (infija[i] == '(') {
      operador = infija[i];
      push(pila, &ne, operador);
    }
    if (infija[i] == '1' || infija[i] == '2' || infija[i] == '3' || infija[i] == '4' || infija[i] == '5' || infija[i] == '6' || infija[i] == '7' || infija[i] == '8' || infija[i] == '9' || infija[i] == '0') {
      posfija[j] = infija[i];
      j++;
    } else {
      if (infija[i] == '(') {
        operador = infija[i];
        push(pila, &ne, operador);
      } else {
        if (infija[i] == '+' || infija[i] == '-' || infija[i] == '*' || infija[i] == '/' || infija[i] == '%' || infija[i] == '^') {
          x = pila_vacia(ne);
          if (x == 1) {
            operador = infija[i];
            push(pila, &ne, operador);
          } else {
            operador = infija[i];
            p = prioridad(operador);
            s = pop(pila, &ne);
            pr2 = prioridad(s);
            if (p > pr2) {
              push(pila, &ne, s);
              push(pila, &ne, operador);
            } else {
              if (pr2 != 0) {
                posfija[j] = s;
                j++;
                while (pila_vacia(ne) == 0) {
                  s = pop(pila, &ne);
                  pr2 = prioridad(s);
                  if (p <= pr2) {
                    posfija[j] = s;
                    j++;
                  }
                }
              }
              push(pila, &ne, operador);
            }
          }
        }
      }
    }
    if (infija[i] == ')') {
      if (pila_vacia(ne) == 1) {
        printf("La exprecion esta mal");
      }
      while (infija[i] != '(' && pila_vacia(ne) == 0) {
        s = pop(pila, &ne);
        posfija[j] = s;
        j++;
      }
      if (infija[i] == '(') {
        s = pop(pila, &ne);
      } else {
        printf("Es incorrecta, falta ( ");
        band = 0;
      }
    }
    i++;
  }
  while (pila_vacia(ne) == 0 && band2 == 0) {
    s = pop(pila, &ne);
    if (s != '(') {
      posfija[j] = s;
      j++;
    } else {
      printf("La exprecion esta mal");
      band2 = 1;
    }
  }
  if (pila_vacia(ne) == 1 && band == 0 && band2 == 0)
    printf("\nPostfija= %s", posfija);
  return 0;
}
```