#include


#include


#include


#include "eval_i.h"




#define operand 0


#define operator 1




void opandpush(opandstack *st, int n){


if(st->top == 99){


printf("Error : Operand overflow");


printf("n");


exit(1);


}


st->top++;


st->item[st->top] = n;


}




int opandpop (opandstack *st) {


int n;


if (st->top == -1) {


printf("Error : Operand stack is empty.");


printf("n");


exit(1);


}


else{


return (st->item[st->top]--);


}


}




void operpush(operstack *st, int n) {


if (st->top == 99) {


printf("Error : Operator overflow");


printf("n");


exit(1);


}




st->top++;


st->item[st->top] = n;


}




char operpop(operstack *st) {


int n;


if (st->top == -1) {


printf("Error : Operator stack is empty.");


printf("n");


exit(1);


}




n = st->item[st->top];


st->top--;


return n;


}



int eval2(char oper, int n1, int n2) {


switch(oper) {


case '+':


return (n1 + n2);


case '-':


return (n1 - n2);


case'*':


return (n1 * n2);


case '/':


return (n1 / n2);


case '%':


return (n1 % n2);


default :


printf("Error : Operator-1n");


exit(1);


}


}




int checktype_i(char c) {


switch(c) {


case '+':


case '-':


case '*':


case '/':


case '%': return operator;


default: return operand;


}


}




int priority(char c) {


switch(c) {


case '@' : return 0;


case '+':


case '-': return 1;


case '*':


case '/':


case '%': return 2;


case '(': return 3;


default : printf("Error : Operator-2n");


exit(1);


}


}




int topstack_i(opandstack *st){


return st->item[0];


}




void eval_i(char *expr) {


int opand1, opand2, val;


char c, c2;


int l = strlen(expr);




opandstack opand;


operstack oper;




opand.top = -1;


oper.top = -1;




operpush(&oper, '@');




for(int i = 0; i


if(expr[i] >= '0' && expr[i] <= '9') {


opandpush(&opand,(int)(expr[i] - '0'));


}


else if (checktype_i(expr[i])) {


c2 = operpop(&oper);




if(priority(expr[i]) > priority(c2)) {


operpush(&oper, c2);


operpush(&oper, expr[i]);


}


else


while(priority(expr[i]) <= priority(c2)) {


opand2 = opandpop(&opand);


opand1 = opandpop(&opand);


val = eval2(c2, opand1, opand2);


c2 = operpop(&oper);


}


operpush(&oper, c2);


operpush(&oper, expr[i]);


}


}


while (c = operpop(&oper) != '@') {


opand2 = opandpop(&opand);


opand1 = opandpop(&opand);


val = eval2(c2, opand1, opand2);


opandpush(&opand, val);


}


printf("Result of evaluation : %dn", opandpop(&opand));


}

infix의 식을 입력받아 계산하는 프로그램인데 오류가떠요...