precedence stack[MAX_STACK_SIZE];
static int isp[]={0,19,12,12,13,13,13,0};
static int icp[]={20,19,12,12,13,13,13,0};


void postfix()
{
 char symbol;
 precedence token;
 int n=0;
 int top=0;

 stack[0] = eos;
 for(token = get_token(&symbol,&n); token!=eos ; token=get_token(&symbol,&n))
 {
  if(token == operand)
   printf("%c",symbol);
  else if(token == rparen)
  {
   //왼쪽 괄호가 나올때까지 토큰들을 제거해서 출력시킴
   while(stack[top]!=lparen)
    printf_token(delete(&top));
   delete(&top);//좌괄호를버린다
  else
   //symbol의 isp가 token의 icp보다 크거나 같으면 symbol을 제거하고 출력시킴
   while(isp[stack[top]]>=icp[token])
    printf_token(delete(&top));
  add(&top,token);
  }

 }
 while((token = delete(&top))!=eos)
  printf_token(token);  // printf_token함수는 get_token함수의 수행하는 과정을 역으로만든다.
 printf("\n");
}


블로그 이미지

百見 이 不如一打 요 , 百打 가 不如一作 이다.

,