# include <iostream.h> # include <graphics.h> # include <string.h> # include <stdlib.h> # include <ctype.h> # include <conio.h> # include <math.h> # include <dos.h> static char Stack[50][10]={NULL}; static int top=-1; static int cit=0; static int input_length=-1; static int output_length=0; static int productions[6]={5,1,7,7,2,10}; const char Grammar[5][11][10]={ {\"S\",\"E\"}, {\"E\",\"E+T\",\"E-T\",\"E*T\",\"E/T\",\"E%T\",\"E^T\",\"T\"}, {\"T\",\"T+F\",\"T-F\",\"T*F\",\"T/F\",\"T%F\",\"T^F\",\"F\"}, {\"F\",\"(E)\",\"D\"}, {\"D\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"} }; char Input[25][10]={NULL}; char InfixExpression[30]={NULL}; char PostfixExpression[25][10]={NULL}; //------------------------- ShowMainScreen( ) -------------------------// void ShowMainScreen( ) { cleardevice( ); setfillstyle(2,1); bar(0,0,getmaxx( ),getmaxy( )); for(int i=0;i<15;i++) { setcolor(i); rectangle(i,i,(getmaxx( )-i),(getmaxy( )-i)); } for(i=0;i<3;i++) { delay(400); setcolor(1); settextstyle(4,0,10); outtextxy((20-i),(50-i),\"+\"); outtextxy((420-i),20,\"^\"); outtextxy((100-i),150,\"*\"); outtextxy((550-i),(100-i),\"-\"); outtextxy((320-i),20,\"/\"); outtextxy((250-i),160,\"(\"); outtextxy((500-i),250,\")\"); settextstyle(1,0,10); outtextxy((70-i),320,\"0\"); outtextxy((550-i),-20,\"1\"); outtextxy((150-i),100,\"2\"); outtextxy((450-i),100,\"3\"); outtextxy((220-i),-20,\"4\"); outtextxy((560-i),220,\"5\"); outtextxy((360-i),170,\"6\"); outtextxy((200-i),335,\"7\"); outtextxy((30-i),-10,\"8\"); outtextxy((370-i),320,\"9\"); } delay(400); char expression[10][5]={\"T\",\"r\",\"a\",\"n\",\"s\",\"l\",\"a\",\"t\",\"o\",\"r\"}; int x=80; int y=50; for(i=0;i<10;i++) { settextstyle(4,0,9); setcolor(0); moveto((x-3),(y+2)); outtext(expression[i]); moveto((x-2),(y+1)); outtext(expression[i]); moveto((x-1),(y+1)); outtext(expression[i]); setcolor(13); moveto(x,y); outtext(expression[i]); moveto((x+1),y); outtext(expression[i]); moveto((x+2),y); outtext(expression[i]); moveto((x+3),y); outtext(expression[i]); x=getx( ); delay(150); } delay(500); settextstyle(4,0,4); setcolor(0); outtextxy(160,142,\"with Bottom-Up Parser\"); outtextxy(161,141,\"with Bottom-Up Parser\"); setcolor(5); outtextxy(162,140,\"with Bottom-Up Parser\"); outtextxy(163,140,\"with Bottom-Up Parser\"); delay(500); setcolor(15); line(495,415,580,415); line(496,416,580,416); line(495,449,580,449); line(496,448,580,448); line(495,415,495,449); line(496,417,496,448); arc(580,432,270,90,17); arc(580,432,270,90,16); setcolor(7); line(497,417,580,417); line(498,418,580,418); line(497,447,580,447); line(498,446,580,446); line(497,417,497,447); line(498,418,498,446); arc(580,432,270,90,15); arc(580,432,270,90,14); setcolor(8); line(499,419,580,419); line(499,445,580,445); line(499,419,499,445); arc(580,432,270,90,13); setcolor(9); setfillstyle(1,9); bar(500,420,580,444); pieslice(580,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(508,422,\"Continue\"); outtextxy(509,422,\"Continue\"); setcolor(14); outtextxy(510,420,\"Continue\"); outtextxy(511,420,\"Continue\"); setcolor(15); line(425,415,490,415); line(426,416,489,416); line(425,449,490,449); line(426,448,489,448); line(490,415,490,449); line(489,416,489,448); arc(430,432,90,270,17); arc(430,432,90,270,16); setcolor(7); line(427,417,488,417); line(428,418,487,418); line(427,447,488,447); line(428,446,487,446); line(488,417,488,447); line(487,418,487,446); arc(430,432,90,270,15); arc(430,432,90,270,14); setcolor(8); line(429,419,486,419); line(429,445,486,445); line(486,419,486,445); arc(430,432,90,270,13); setcolor(9); setfillstyle(1,9); bar(430,420,485,444); pieslice(430,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(433,422,\"Exit\"); outtextxy(434,422,\"Exit\"); setcolor(14); outtextxy(435,420,\"Exit\"); outtextxy(436,420,\"Exit\"); i=0; int key_code=0; do { delay(500); key_code=0; if(kbhit( )) key_code=(int)getch( ); if((i)%2==0) { settextstyle(0,0,1); setcolor(1); outtextxy(435,400,\"<Esc>\"); setcolor(4); outtextxy(515,400,\"<Enter>\"); } else if((i%2)==1) { settextstyle(0,0,1); setcolor(4); outtextxy(435,400,\"<Esc>\"); setcolor(1); outtextxy(515,400,\"<Enter>\"); } i++; } while(key_code!=13 && key_code!=27); if(key_code==13) { settextstyle(0,0,1); setcolor(1); outtextxy(435,400,\"<Esc>\"); setcolor(4); outtextxy(515,400,\"<Enter>\"); setcolor(12); setfillstyle(1,12); bar(500,420,580,444); pieslice(580,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(508,422,\"Continue\"); outtextxy(509,422,\"Continue\"); setcolor(14); outtextxy(510,420,\"Continue\"); outtextxy(511,420,\"Continue\"); delay(500); setcolor(9); setfillstyle(1,9); bar(500,420,580,444); pieslice(580,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(508,422,\"Continue\"); outtextxy(509,422,\"Continue\"); setcolor(14); outtextxy(510,420,\"Continue\"); outtextxy(511,420,\"Continue\"); } else if(key_code==27) { settextstyle(0,0,1); setcolor(4); outtextxy(435,400,\"<Esc>\"); setcolor(1); outtextxy(515,400,\"<Enter>\"); setcolor(12); setfillstyle(1,12); bar(430,420,485,444); pieslice(430,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(433,422,\"Exit\"); outtextxy(434,422,\"Exit\"); setcolor(14); outtextxy(435,420,\"Exit\"); outtextxy(436,420,\"Exit\"); delay(500); setcolor(9); setfillstyle(1,9); bar(430,420,485,444); pieslice(430,432,0,360,12); settextstyle(2,0,6); setcolor(0); outtextxy(433,422,\"Exit\"); outtextxy(434,422,\"Exit\"); setcolor(14); outtextxy(435,420,\"Exit\"); outtextxy(436,420,\"Exit\"); delay(500); exit(0); } delay(500); } //------------------------- ShowInputScreen( ) ------------------------// void ShowInputScreen( ) { setfillstyle(2,1); bar(15,15,(getmaxx( )-15),(getmaxy( )-15)); for(int count=0;count<3;count++) { setcolor(1); settextstyle(4,0,10); outtextxy((20-count),(50-count),\"+\"); outtextxy((420-count),20,\"^\"); outtextxy((100-count),150,\"*\"); outtextxy((550-count),(100-count),\"-\"); outtextxy((320-count),20,\"/\"); outtextxy((250-count),140,\"(\"); outtextxy((500-count),250,\")\"); settextstyle(1,0,10); outtextxy((70-count),320,\"0\"); outtextxy((550-count),-20,\"1\"); outtextxy((150-count),100,\"2\"); outtextxy((450-count),100,\"3\"); outtextxy((220-count),-20,\"4\"); outtextxy((570-count),220,\"5\"); outtextxy((360-count),170,\"6\"); outtextxy((200-count),335,\"7\"); outtextxy((20-count),-10,\"8\"); outtextxy((400-count),320,\"9\"); } settextstyle(4,0,9); setcolor(0); outtextxy(107,42,\"Translator\"); outtextxy(108,42,\"Translator\"); outtextxy(109,42,\"Translator\"); setcolor(13); outtextxy(110,40,\"Translator\"); outtextxy(111,40,\"Translator\"); outtextxy(112,40,\"Translator\"); outtextxy(113,40,\"Translator\"); settextstyle(4,0,4); setcolor(0); outtextxy(145,135,\"with Bottom-Up Parser\"); outtextxy(146,134,\"with Bottom-Up Parser\"); setcolor(5); outtextxy(147,133,\"with Bottom-Up Parser\"); outtextxy(148,133,\"with Bottom-Up Parser\"); outtextxy(149,133,\"with Bottom-Up Parser\"); settextstyle(2,0,7); setcolor(8); outtextxy(29,282,\"Enter the Infix Expression :\"); outtextxy(30,281,\"Enter the Infix Expression :\"); setcolor(11); outtextxy(30,280,\"Enter the Infix Expression :\"); outtextxy(31,280,\"Enter the Infix Expression :\"); setcolor(15); rectangle(29,305,608,375); rectangle(30,306,607,374); setcolor(7); rectangle(31,307,606,373); rectangle(32,308,605,372); rectangle(33,309,604,371); setcolor(8); rectangle(34,310,603,370); setfillstyle(1,0); bar(35,311,602,369); } //---------------------- ReadInfixExpression( ) ----------------------// void ReadInfixExpression( ) { ShowInputScreen( ); int x_1=36; int x_2=601; int y_1=312; int y_2=368; setfillstyle(1,0); bar(x_1,y_1,x_2,y_2); int count=0; int key_code=0; char Key=NULL; do { if(kbhit( )) { Key=NULL; key_code=0; Key=getch( ); key_code=int(Key); if(key_code==13 || key_code==27) break; if(count<25 && key_code!=8) { InfixExpression[count]=Key; count++; } else if(key_code==8 && count>0) { setfillstyle(1,0); bar(x_1,y_1,x_2,y_2); count--; InfixExpression[count]=NULL; } } setcolor(15); settextstyle(1,0,4); moveto(45,320); outtext(InfixExpression); int xx=(getx( )-2); int yy=gety( ); while(!kbhit( )) { setfillstyle(1,15); bar(xx,yy,(xx+3),(yy+40)); delay(200); setfillstyle(1,0); bar(xx,yy,(xx+3),(yy+40)); delay(200); } } while(1); } //------------------ ConvertInfixExpressionToInput( ) -----------------// void ConvertInfixExpressionToInput( ) { int type=0; int count=0; int last_type=0; int length=strlen(InfixExpression); char Temp[10]={NULL}; do { Temp[0]=InfixExpression[count]; if(isdigit((int)Temp[0])) type=1; else type++; if(type!=last_type) { input_length++; strcpy(Input[input_length],Temp); } else strcat(Input[input_length],Temp); count++; last_type=type; } while(count<=length); strcpy(Input[input_length],\"$\"); input_length++; } //------------------------------ Push( ) ------------------------------// void Push(const char* Token) { top++; strcpy(Stack[top],Token); } //------------------------------- Pop( ) ------------------------------// const char* Pop( ) { char Item[15]={NULL}; strcpy(Item,Stack[top]); strset(Stack[top],NULL); top--; return Item; } //----------------------------- Reduce( ) -----------------------------// void Reduce(const int items,const int index) { for(int i=0;i<items;i++) Pop( ); Push(Grammar[index][0]); } //------------------------------ Shift( ) -----------------------------// void Shift( ) { Push(Input[cit]); cit++; } //----------------------- CheckReduceCondition( ) ---------------------// const int CheckReduceCondition( ) { int items; int index; char TopItems[100]={NULL}; for(int i=0;i<=top;i++) { strset(TopItems,NULL); for(int j=i;j<=top;j++) strcat(TopItems,Stack[j]); for(j=0;j<productions[0];j++) { for(int k=1;k<=productions[(j+1)];k++) { if(strcmp(TopItems,Grammar[j][k])==0) { items=(top-i+1); index=j; goto NextCheck; } } } } return 0; NextCheck: char CitInput[20]={NULL}; strcpy(CitInput,Stack[top]); strcat(CitInput,Input[cit]); for(i=0;i<productions[0];i++) { for(int j=1;j<=productions[(i+1)];j++) { if(strstr(Grammar[i][j],CitInput)!=NULL) return 0; } } Reduce(items,index); return 1; } //--------------------------- CheckSyntax( ) --------------------------// void CheckSyntax( ) { delay(1000); setfillstyle(2,1); bar(10,10,(getmaxx( )-10),(getmaxy( )-10)); setfillstyle(1,9); bar(10,52,295,55); settextstyle(2,0,9); setcolor(0); outtextxy(17,22,\"Syntax Checking\"); outtextxy(18,22,\"Syntax Checking\"); outtextxy(19,22,\"Syntax Checking\"); setcolor(13); outtextxy(20,20,\"Syntax Checking\"); outtextxy(21,20,\"Syntax Checking\"); outtextxy(22,20,\"Syntax Checking\"); setcolor(9); outtextxy(20,20,\" :\"); outtextxy(21,20,\" :\"); outtextxy(22,20,\" :\"); setfillstyle(1,1); bar(30,75,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,74,610,435); line(30,104,610,104); line(270,75,270,435); line(510,75,510,435); setlinestyle(0,0,0); for(int count=0;count<21;count++) line(30,(119+(count*15)),610,(119+(count*15))); settextstyle(2,0,7); setcolor(0); outtextxy(48,79,\"Stack\"); outtextxy(49,78,\"Stack\"); outtextxy(288,79,\"Input\"); outtextxy(289,78,\"Input\"); setcolor(5); outtextxy(49,77,\"Stack\"); outtextxy(50,77,\"Stack\"); outtextxy(289,77,\"Input\"); outtextxy(290,77,\"Input\"); settextstyle(2,0,5); setcolor(0); outtextxy(518,82,\"Next Action\"); outtextxy(519,81,\"Next Action\"); setcolor(5); outtextxy(519,80,\"Next Action\"); outtextxy(520,80,\"Next Action\"); int flag=0; setcolor(11); settextstyle(0,0,1); moveto(40,109); for(int i=0;i<=top;i++) { moveto(getx( ),gety( )); outtext(Stack[i]); } moveto(280,109); for(int j=cit;j<input_length;j++) { moveto(getx( ),gety( )); outtext(Input[j]); } outtextxy(520,109,\"Shift\"); count=1; do { if(!CheckReduceCondition( )) { Shift( ); outtextxy(520,(109+(count*15)),\"Shift\"); } else outtextxy(520,(109+(count*15)),\"Reduce\"); moveto(40,(109+(count*15))); for(int i=0;i<=top;i++) { moveto(getx( ),gety( )); outtext(Stack[i]); } moveto(280,(109+(count*15))); for(int j=cit;j<input_length;j++) { moveto(getx( ),gety( )); outtext(Input[j]); } if(top==0 && strcmp(Stack[top],Grammar[0][0])==0 && strcmp(Input[cit],\"$\")==0) { flag=1; break; } else if(strcmp(Stack[top],\"$\")==0) { flag=0; break; } count++; if(count==22) { settextstyle(0,0,1); do { setcolor(14); outtextxy(480,450,\"Press ANY key...\"); delay(300); setcolor(1); outtextxy(480,450,\"Press ANY key...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(470,440,610,465); setfillstyle(1,1); bar(30,100,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,74,610,435); line(30,104,610,104); line(270,75,270,435); line(510,75,510,435); setlinestyle(0,0,0); for(count=0;count<21;count++) line(30,(119+(count*15)),610,(119+(count*15))); count=0; setcolor(11); settextstyle(0,0,1); } } while(1); setfillstyle(1,9); bar(10,460,85,462); settextstyle(2,0,6); setcolor(0); outtextxy(19,443,\"Result\"); outtextxy(20,443,\"Result\"); setcolor(13); outtextxy(20,442,\"Result\"); outtextxy(21,442,\"Result\"); setcolor(9); outtextxy(20,442,\" :\"); outtextxy(21,442,\" :\"); if(!flag) { settextstyle(2,0,6); setcolor(0); outtextxy(94,447,\"Incorrect\"); outtextxy(95,446,\"Incorrect\"); setcolor(15); outtextxy(95,445,\"Incorrect\"); outtextxy(96,445,\"Incorrect\"); settextstyle(0,0,1); do { setcolor(14); outtextxy(435,450,\"Press ANY key to Exit.\"); delay(300); setcolor(1); outtextxy(435,450,\"Press ANY key to Exit.\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(430,440,610,465); } else { settextstyle(2,0,6); setcolor(0); outtextxy(94,447,\"Correct\"); outtextxy(95,446,\"Correct\"); setcolor(15); outtextxy(95,445,\"Correct\"); outtextxy(96,445,\"Correct\"); settextstyle(0,0,1); do { setcolor(14); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); setcolor(1); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(370,440,610,465); } } //--------------- ShowInfixToPostfixConversionScreen( ) ---------------// void ShowInfixToPostfixConversionScreen( ) { delay(1000); setfillstyle(2,1); bar(10,10,(getmaxx( )-10),(getmaxy( )-10)); setfillstyle(1,9); bar(10,52,440,55); settextstyle(2,0,9); setcolor(0); outtextxy(17,22,\"Infix-Postfix Conversion\"); outtextxy(18,22,\"Infix-Postfix Conversion\"); outtextxy(19,22,\"Infix-Postfix Conversion\"); setcolor(13); outtextxy(20,20,\"Infix-Postfix Conversion\"); outtextxy(21,20,\"Infix-Postfix Conversion\"); outtextxy(22,20,\"Infix-Postfix Conversion\"); setcolor(9); outtextxy(20,20,\" :\"); outtextxy(21,20,\" :\"); outtextxy(22,20,\" :\"); setfillstyle(1,9); bar(10,87,73,89); settextstyle(2,0,6); setcolor(0); outtextxy(19,70,\"Input\"); outtextxy(20,70,\"Input\"); setcolor(13); outtextxy(20,69,\"Input\"); outtextxy(21,69,\"Input\"); setcolor(9); outtextxy(20,69,\" :\"); outtextxy(21,69,\" :\"); setcolor(12); settextstyle(2,0,6); moveto(90,73); int x; int y; for(int count=0;count<(input_length-1);count++) { x=getx( ); y=(gety( )-1); moveto(x,y); outtext(Input[count]); moveto((x+1),(y+1)); outtext(Input[count]); } setcolor(15); moveto(91,72); for(count=0;count<(input_length-1);count++) { x=getx( ); y=gety( ); moveto(x,y); outtext(Input[count]); moveto((x+1),y); outtext(Input[count]); } setfillstyle(1,1); bar(30,105,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,104,610,435); line(30,134,610,134); line(97,105,97,435); line(300,105,300,435); setlinestyle(0,0,0); for(count=0;count<19;count++) line(30,(149+(count*15)),610,(149+(count*15))); settextstyle(2,0,7); setcolor(0); outtextxy(108,109,\"Stack\"); outtextxy(109,108,\"Stack\"); outtextxy(313,109,\"Postfix Expression\"); outtextxy(314,108,\"Postfix Expression\"); setcolor(5); outtextxy(109,107,\"Stack\"); outtextxy(110,107,\"Stack\"); outtextxy(314,107,\"Postfix Expression\"); outtextxy(315,107,\"Postfix Expression\"); settextstyle(2,0,5); setcolor(0); outtextxy(41,107,\"Symbol\"); outtextxy(42,106,\"Symbol\"); outtextxy(35,119,\"Scanned\"); outtextxy(36,118,\"Scanned\"); setcolor(5); outtextxy(42,105,\"Symbol\"); outtextxy(43,105,\"Symbol\"); outtextxy(36,117,\"Scanned\"); outtextxy(37,117,\"Scanned\"); } //------------------- InfixToPostfixConversion( ) ---------------------// void InfixToPostfixConversion( ) { ShowInfixToPostfixConversionScreen( ); for(top=0;top<50;top++) strset(Stack[top],NULL); top=-1; input_length--; Push(\"(\"); strcpy(Input[input_length],\")\"); int i=0; int j=0; int k=0; int colors[7]={3,6,7,10,11,14,12}; char Symbol_scanned[10]={NULL}; do { strset(Symbol_scanned,NULL); strcpy(Symbol_scanned,Input[i]); if(strcmp(Symbol_scanned,\"(\")==0) Push(Symbol_scanned); else if(strcmp(Symbol_scanned,\")\")==0) { while(strcmp(Stack[top],\"(\")!=0) { strcpy(PostfixExpression[j],Pop( )); j++; } Pop( ); } else if(strcmp(Symbol_scanned,\"/\")==0 || strcmp(Symbol_scanned,\"*\")==0 || strcmp(Symbol_scanned,\"-\")==0 || strcmp(Symbol_scanned,\"+\")==0 || strcmp(Symbol_scanned,\"^\")==0) { if(strcmp(Symbol_scanned,\"^\")==0) { } else if(strcmp(Symbol_scanned,\"*\")==0 || strcmp(Symbol_scanned,\"/\")==0) { while(strcmp(Stack[top],\"^\")==0 || strcmp(Stack[top],\"*\")==0 || strcmp(Stack[top],\"/\")==0) { strcpy(PostfixExpression[j],Pop( )); j++; } } else if(strcmp(Symbol_scanned,\"+\")==0 || strcmp(Symbol_scanned,\"-\")==0) { while(strcmp(Stack[top],\"(\")!=0) { strcpy(PostfixExpression[j],Pop( )); j++; } } Push(Symbol_scanned); } else if(strcmp(Symbol_scanned,\"/\")!=0 || strcmp(Symbol_scanned,\"*\")!=0 || strcmp(Symbol_scanned,\"-\")!=0 || strcmp(Symbol_scanned,\"+\")!=0 || strcmp(Symbol_scanned,\"(\")!=0 || strcmp(Symbol_scanned,\")\")!=0 || strcmp(Symbol_scanned,\"^\")!=0) { strcpy(PostfixExpression[j],Symbol_scanned); j++; } settextstyle(0,0,1); outtextxy(50,(139+(k*15)),Symbol_scanned); int x=110; int y=(139+(k*15)); for(int count=0;count<=top;count++) { setcolor(colors[count%7]); moveto(x,y); outtext(Stack[count]); x=getx( ); } x=310; y=(139+(k*15)); for(count=0;count<j;count++) { setcolor(colors[count%7]); moveto(x,y); outtext(PostfixExpression[count]); x=getx( ); } i++; k++; if(k==20) { settextstyle(0,0,1); do { setcolor(14); outtextxy(480,450,\"Press ANY key...\"); delay(300); setcolor(1); outtextxy(480,450,\"Press ANY key...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(470,440,610,465); setfillstyle(1,1); bar(30,130,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,104,610,435); line(30,134,610,134); line(97,105,97,435); line(300,105,300,435); setlinestyle(0,0,0); for(k=0;k<19;k++) line(30,(149+(k*15)),610,(149+(k*15))); k=0; } } while(top!=-1); output_length=j; do { setcolor(14); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); setcolor(1); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(370,440,610,465); } //------------ ShowEvaluationOfPostfixExpressionScreen( ) -------------// void ShowEvaluationOfPostfixExpressionScreen( ) { delay(1000); setfillstyle(2,1); bar(10,10,(getmaxx( )-10),(getmaxy( )-10)); setfillstyle(1,9); bar(10,52,590,55); settextstyle(2,0,9); setcolor(0); outtextxy(17,22,\"Evaluation of Postfix Expression\"); outtextxy(18,22,\"Evaluation of Postfix Expression\"); outtextxy(19,22,\"Evaluation of Postfix Expression\"); setcolor(13); outtextxy(20,20,\"Evaluation of Postfix Expression\"); outtextxy(21,20,\"Evaluation of Postfix Expression\"); outtextxy(22,20,\"Evaluation of Postfix Expression\"); setcolor(9); outtextxy(20,20,\" :\"); outtextxy(21,20,\" :\"); outtextxy(22,20,\" :\"); setfillstyle(1,9); bar(10,87,73,89); settextstyle(2,0,6); setcolor(0); outtextxy(19,70,\"Input\"); outtextxy(20,70,\"Input\"); setcolor(13); outtextxy(20,69,\"Input\"); outtextxy(21,69,\"Input\"); setcolor(9); outtextxy(20,69,\" :\"); outtextxy(21,69,\" :\"); setcolor(12); settextstyle(2,0,6); moveto(90,73); int x; int y; for(int count=0;count<output_length;count++) { x=getx( ); y=(gety( )-1); moveto(x,y); outtext(PostfixExpression[count]); moveto((x+1),(y+1)); outtext(PostfixExpression[count]); } setcolor(15); moveto(91,72); for(count=0;count<output_length;count++) { x=getx( ); y=gety( ); moveto(x,y); outtext(PostfixExpression[count]); moveto((x+1),y); outtext(PostfixExpression[count]); } setfillstyle(1,1); bar(30,105,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,104,610,435); line(30,134,610,134); line(189,105,189,435); setlinestyle(0,0,0); for(count=0;count<19;count++) line(30,(149+(count*15)),610,(149+(count*15))); settextstyle(2,0,7); setcolor(0); outtextxy(203,109,\"Stack\"); outtextxy(204,108,\"Stack\"); setcolor(5); outtextxy(204,107,\"Stack\"); outtextxy(205,107,\"Stack\"); settextstyle(2,0,6); setcolor(0); outtextxy(41,111,\"Symbol Scanned\"); outtextxy(42,110,\"Symbol Scanned\"); setcolor(5); outtextxy(42,109,\"Symbol Scanned\"); outtextxy(43,108,\"Symbol Scanned\"); } //------------------- InfixToPostfixConversion( ) ---------------------// void EvaluationOfPostfixExpression( ) { ShowEvaluationOfPostfixExpressionScreen( ); for(top=0;top<50;top++) strset(Stack[top],NULL); top=-1; int i=0; int j=0; int colors[7]={3,6,7,10,11,14,12}; char Symbol_scanned[10]={NULL}; strcat(PostfixExpression[output_length],\"=\"); do { strset(Symbol_scanned,NULL); strcpy(Symbol_scanned,PostfixExpression[i]); if(strcmp(Symbol_scanned,\"/\")==0 || strcmp(Symbol_scanned,\"*\")==0 || strcmp(Symbol_scanned,\"-\")==0 || strcmp(Symbol_scanned,\"+\")==0 || strcmp(Symbol_scanned,\"^\")==0) { long value_1=0; long value_2=0; long result=0; value_1=atol(Pop( )); value_2=atol(Pop( )); switch(Symbol_scanned[0]) { case \'+\': result=value_2+value_1; break; case \'/\': result=value_2/value_1; break; case \'*\': result=value_2*value_1; break; case \'-\': result=value_2-value_1; break; case \'^\': result=powl(value_2,value_1); break; } char Temp[15]={NULL}; ltoa(result,Temp,10); Push(Temp); } else if(strcmp(Symbol_scanned,\"/\")!=0 && strcmp(Symbol_scanned,\"*\")!=0 && strcmp(Symbol_scanned,\"-\")!=0 && strcmp(Symbol_scanned,\"+\")!=0 && strcmp(Symbol_scanned,\"^\")!=0 && strcmp(Symbol_scanned,\"=\")!=0) Push(Symbol_scanned); settextstyle(0,0,1); setcolor(colors[j%7]); outtextxy(70,(139+(15*j)),Symbol_scanned); int x=200; int y=(139+(j*15)); for(int k=0;k<=top;k++) { setcolor(colors[k%7]); moveto(x,y); outtext(Stack[k]); x=getx( ); } i++; j++; if(j==20) { do { setcolor(14); outtextxy(480,450,\"Press ANY key...\"); delay(300); setcolor(1); outtextxy(480,450,\"Press ANY key...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(470,440,610,465); setfillstyle(1,1); bar(30,105,610,435); setlinestyle(0,0,3); setcolor(9); rectangle(30,104,610,435); line(30,134,610,134); line(189,105,189,435); setlinestyle(0,0,0); for(j=0;j<19;j++) line(30,(149+(j*15)),610,(149+(j*15))); j=0; } } while(strcmp(Symbol_scanned,\"=\")!=0); do { setcolor(14); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); setcolor(1); outtextxy(385,450,\"Press ANY key to continue...\"); delay(300); } while(!kbhit( )); while(kbhit( )) getch( ); setfillstyle(2,1); bar(370,440,610,465); } //--------------------------- ShowSummary( ) --------------------------// void ShowSummary( ) { for(int i=0;i<15;i++) { setcolor(i); rectangle(i,i,(getmaxx( )-i),(getmaxy( )-i)); } setfillstyle(2,1); bar(15,15,(getmaxx( )-15),(getmaxy( )-15)); setfillstyle(1,14); bar(180,75,450,78); settextstyle(1,0,6); setcolor(0); outtextxy(138,20,\"* Summary *\"); outtextxy(139,20,\"* Summary *\"); setcolor(13); outtextxy(140,20,\"* Summary *\"); outtextxy(141,20,\"* Summary *\"); outtextxy(142,20,\"* Summary *\"); settextstyle(1,0,4); setcolor(0); outtextxy(98,106,\"Infix Expression :\"); outtextxy(99,106,\"Infix Expression :\"); setcolor(5); outtextxy(100,105,\"Infix Expression :\"); outtextxy(101,105,\"Infix Expression :\"); setcolor(15); rectangle(99,145,501,200); rectangle(100,146,500,199); setcolor(7); rectangle(101,147,499,198); rectangle(102,148,498,197); setcolor(8); rectangle(103,149,497,196); rectangle(104,150,496,195); setfillstyle(1,0); bar(105,151,495,194); settextstyle(1,0,4); setcolor(0); outtextxy(98,220,\"Postfix Expression :\"); outtextxy(99,220,\"Postfix Expression :\"); setcolor(5); outtextxy(100,219,\"Postfix Expression :\"); outtextxy(101,219,\"Postfix Expression :\"); setcolor(15); rectangle(99,259,501,316); rectangle(100,260,500,315); setcolor(7); rectangle(101,261,499,314); rectangle(102,262,498,313); setcolor(8); rectangle(103,263,497,312); rectangle(104,264,496,311); setfillstyle(1,0); bar(105,265,495,310); settextstyle(1,0,5); setcolor(0); outtextxy(98,323,\"Result :\"); outtextxy(99,323,\"Result :\"); setcolor(5); outtextxy(100,322,\"Result :\"); outtextxy(101,322,\"Result :\"); setcolor(15); rectangle(99,369,501,431); rectangle(100,370,500,430); setcolor(7); rectangle(101,371,499,429); rectangle(102,372,498,428); setcolor(8); rectangle(103,373,497,427); rectangle(104,374,496,426); setfillstyle(1,0); bar(105,375,495,425); setcolor(11); settextstyle(2,0,8); int x=115; int y=157; for(i=0;i<input_length;i++) { moveto((x-1),y); outtext(Input[i]); moveto(x,y); outtext(Input[i]); x=getx( ); } int color_array[7]={3,6,7,10,11,14,12}; x=115; y=270; for(i=0;i<output_length;i++) { settextstyle(2,0,8); setcolor(color_array[(i%7)]); moveto((x-1),y); outtext(PostfixExpression[i]); moveto(x,y); outtext(PostfixExpression[i]); x=getx( ); } setcolor(11); settextstyle(1,0,5); outtextxy(120,373,Stack[0]); outtextxy(121,373,Stack[0]); while(!kbhit( )); setcolor(0); setfillstyle(1,0); for(i=0;i<380;i+=8) pieslice(320,240,0,360,i); } int main( ) { int driver=VGA; int mode=VGAHI; initgraph(&driver,&mode,\"..\\\\Bgi\"); ShowMainScreen( ); ReadInfixExpression( ); ConvertInfixExpressionToInput( ); CheckSyntax( ); InfixToPostfixConversion( ); EvaluationOfPostfixExpression( ); ShowSummary( ); closegraph( ); return 0; }