#include <stdio.h>

typedef char Item;

#include "pilha.h"

#define MAX 100

int operando (char);
int precedencia (char);

main() {
  char infixa[MAX], ch; int i, n;
  
  printf("Digite uma expressão aritmética: ");
  scanf("%s", infixa); 
  n = strlen(infixa); 
  inicializa_pilha(n);
  for (i=0; i<n; i++)
    if (operando(infixa[i]))
      printf("%c", infixa[i]);
    else 
      switch (infixa[i]) {
      case '(': empilha(infixa[i]); break;
      case ')': while ((ch = desempilha()) != '(') printf("%c", ch); break; 
      default: 
	while (!pilha_vazia() && precedencia(topodapilha()) >= precedencia(infixa[i]))
	  printf("%c", desempilha()); 
	empilha(infixa[i]);
      }
  while (!pilha_vazia()) 
    printf("%c", desempilha());
  printf("\n"); 
}

int operando (char ch) {
  if (ch >= 'A' && ch <= 'Z')
    ch = ch - 'A' + 'a';    /* conversão para minúscula */
  return ch >= 'a' && ch <= 'z';
}

int precedencia (char ch) {
  switch (ch) {
  case '*': case '/': return 2;
  case '+': case '-': return 1;
  case '(': return 0;
  }
}

