#include #include #define MAX_SIZE 100 #define lparen 0 #define rparen 1 #define plus 2 #define minus 3 #define times 4 #define divide 5 #define mod 6 #define eos 7 #define operand 8 int isp[] = {0, 19, 12, 12, 13, 13, 13, 0,14}; //¿ì¼±¼øÀ§ ÁöÁ¤ int icp[] = {20, 19, 12, 12, 13, 13, 13, 0,14}; int stack[MAX_SIZE]; //½ºÅà ÇÒ´ç char input[MAX_SIZE]; char output[MAX_SIZE]; char symbol; int top = 0; void push(int *top, int item)// ½ºÅûðÀÔ { (*top)++; stack[*top] = item; } void pop(int *top)//½ºÅûèÁ¦ { stack[*top] = NULL; (*top)--; } int popInteger(int *top) { int pop = stack[*top]; stack[*top] =NULL; (*top)--; return pop; } char get_op()//Á¤¼öÇü ½ºÅÿ¡ ¸Â´Â ¹®ÀÚÇü ¿¬»êÀÚ ±¸Çϱâ { switch(stack[top]) { case 2: return '+'; case 3: return '-'; case 4: return '*'; case 5: return '/'; case 6: return '%'; } } void input_to_output()//ÁßÀ§Ç¥±â¸¦ ÈÄÀ§Ç¥±â·Î º¯È¯ÇÏ´Â ÇÔ¼ö { int token; int index =-1; int count =0; int i; stack[0] =eos; for(token = get_token(&symbol, &index); token!=eos; token = get_token(&symbol ,&index)) { if(token == operand) //ÅäÅ«ÀÌ Á¤¼ö ÀϽà ¹Ù·Î ÈÄÀ§ Ç¥±â ¹è¿­¿¡ ÀÔ·Â { output[count] = symbol; count ++; } else if(token == rparen)//ÅäÅ«ÀÌ ')' ÀÏ°æ¿ì '('¾Õ±îÁö Ãâ·Â { while(stack[top] != lparen) { output[count] = get_op(); //ÈÄÀ§Ç¥±â¹è¿­¿¡ ½ºÅÿ¡ ¾Ë¸ÂÀº ¿¬»êÀÚ »ðÀÔ pop(&top); count++; } pop(&top);//'('»èÁ¦ } else { while(isp[stack[top]]>=icp[token]) { output[count] = get_op(); count++; pop(&top); } push(&top, token); } } if(stack[top] !=NULL) //¸¶Áö¸·À¸·Î ½ºÅÿ¡ ³²¾ÆÀÖ´Â ¿¬»êÀÚ¸¦ ÈÄÀ§Ç¥±â ¹è¿­·Î »ðÀÔ { output[count] = get_op(); pop(&top); } printf("ÁßÀ§ Ç¥±â °è»ê½Ä¿¡¼­ ÈÄÀ§Ç¥±â °è»ê½ÄÀ¸·Î ¹Ù²Û ½Ä : "); //ÈÄÀ§Ç¥±â·Î º¯È¯ÇÑ °è»ê½Ä Ãâ·Â for(i=0; output[i]!=NULL ; i++) printf("%c", output[i]); printf("\n"); } int get_token(char *symbol, int *index) //ÀÔ·ÂÇÑ ÁßÀ§ Ç¥±â °è»ê½Ä¿¡¼­ ¹®ÀÚ Çϳª¾¿ °¡Á®¿À´Â ÇÔ¼ö { (*index)++; *symbol = input[*index]; switch(*symbol) { case '(': return lparen; case ')': return rparen; case '+': return plus; case '-': return minus; case '*': return times; case '/': return divide; case '%': return mod; case '\0': return eos; default : return operand; } } int cal() { int op1, op2; int i; for(i=0; i