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");
}