編譯原理課程設(shè)計(jì)_第1頁
編譯原理課程設(shè)計(jì)_第2頁
編譯原理課程設(shè)計(jì)_第3頁
編譯原理課程設(shè)計(jì)_第4頁
編譯原理課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

南華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院編譯原理課程設(shè)計(jì)名:賦值語句,if語句,while循環(huán)語句詞法,語法及語義分析,中間代碼生成程序設(shè)計(jì)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級:計(jì)算機(jī)091姓名:Dragon學(xué)號:20094440116實(shí)驗(yàn)地點(diǎn):8棟2-209任課老師:劉星完成日期:2012.5.14《編譯原理》課程設(shè)計(jì)指導(dǎo)書一、課程設(shè)計(jì)教學(xué)的目的與要求課程設(shè)計(jì)是對學(xué)生的一種全面綜合訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的必不可少的一個教學(xué)環(huán)節(jié)。通常,設(shè)計(jì)題中的問題比平時的練習(xí)題要復(fù)雜,也更接近實(shí)際。編譯原理這門課程安排的課程設(shè)計(jì)的目的是旨在要求學(xué)生進(jìn)一步鞏固課堂上所學(xué)的理論知識,深化理解和靈活掌握教學(xué)內(nèi)容,選擇合適的數(shù)據(jù)邏輯結(jié)構(gòu)表示問題,然后編制算法和程序完成設(shè)計(jì)要求,從而進(jìn)一步培養(yǎng)學(xué)生獨(dú)立思考問題、分析問題、解決實(shí)際問題的動手能力。要求學(xué)生在上機(jī)前應(yīng)認(rèn)真做好各種準(zhǔn)備工作,熟悉機(jī)器的操作系統(tǒng)和語言的集成環(huán)境,獨(dú)立完成算法編制和程序代碼的編寫。設(shè)計(jì)時間:1周。開發(fā)工具:DOS環(huán)境下使用TurboC;Windows環(huán)境下使用VisualC++。其它熟悉語言。二、課程設(shè)計(jì)的內(nèi)容:設(shè)計(jì)題一:算術(shù)表達(dá)式的語法分析及語義分析程序設(shè)計(jì)。1.目的通過設(shè)計(jì)、編制、調(diào)試一個算術(shù)表達(dá)式的語法及語義分析程序,加深對語法及語義分析原理的理解,并實(shí)現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。2.設(shè)計(jì)內(nèi)容及要求:算術(shù)表達(dá)式的文法:〈無符號整數(shù)〉∷=〈數(shù)字〉{〈數(shù)字〉}〈標(biāo)志符〉∷=〈字母〉{〈字母〉|〈數(shù)字〉}〈表達(dá)式〉∷=[+|-]〈項(xiàng)〉{〈加法運(yùn)算符〉〈項(xiàng)〉}〈項(xiàng)〉∷=〈因子〉{〈乘法運(yùn)算符〉〈因子〉}〈因子〉∷=〈標(biāo)志符〉|〈無符號整數(shù)〉|‘(’〈表達(dá)式〉‘)’〈加法運(yùn)算符〉∷=+|-〈乘法運(yùn)算符〉∷=*|/可以選擇遞歸下降法、LL(1)、算符優(yōu)先分析法、LR法完成以上任務(wù),中間代碼選用逆波蘭式或四元式。寫出算術(shù)表達(dá)式的符合分析方法要求的文法,給出分析方法的思想,完成分析程序設(shè)計(jì)。編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測試并通過所設(shè)計(jì)的分析程序。設(shè)計(jì)題二:布爾表達(dá)式的語法分析及語義分析程序設(shè)計(jì)。1.目的通過設(shè)計(jì)、編制、調(diào)試一個布爾表達(dá)式的語法及語義分析程序,加深對語法及語義分析原理的理解,并實(shí)現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。2.設(shè)計(jì)內(nèi)容及要求(1)可以選擇遞歸下降法、LL(1)、算符優(yōu)先分析法、LR法完成以上任務(wù),中間代碼選用逆波蘭式或四元式。(2)如1題寫出符合分析方法要求的文法,給出分析方法的思想,完成分析程序設(shè)計(jì)。(3)編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測試并通過所設(shè)計(jì)的分析程序。設(shè)計(jì)題三:條件語句的語法分析及語義分析程序設(shè)計(jì)。1.目的通過設(shè)計(jì)、編制、調(diào)試一個語法及語義分析程序,加深對語法及語義分析原理的理解。2.設(shè)計(jì)內(nèi)容及要求IF〈布爾表達(dá)式〉THEN〈賦值語句〉ELSE〈賦值語句〉其中(1)可以選擇遞歸下降法、LL(1)、算符優(yōu)先分析法、LR法完成以上任務(wù),中間代碼選用四元式。(2)如1題寫出符合分析方法要求的文法,給出分析方法的思想,完成分析程序設(shè)計(jì)。(3)編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測試并通過所設(shè)計(jì)的分析程序。設(shè)計(jì)題四:循環(huán)語句的語法分析及語義分析程序設(shè)計(jì)。1.目的通過設(shè)計(jì)、編制、調(diào)試一個語法及語義分析程序,加深對語法及語義分析原理的理解。2.設(shè)計(jì)內(nèi)容及要求WHILE〈布爾表達(dá)式〉DO〈賦值語句〉其中(1)可以選擇遞歸下降法、LL(1)、算符優(yōu)先分析法、LR法完成以上任務(wù),中間代碼選用四元式。(2)如1題寫出符合分析方法要求的文法,給出分析方法的思想,完成分析程序設(shè)計(jì)。(3)編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測試并通過所設(shè)計(jì)的分析程序。設(shè)計(jì)題五:自選一種常見高級語言為背景,對其進(jìn)行簡化.例如只包括整型常數(shù)和其四則運(yùn)算以及相應(yīng)的賦值語句,轉(zhuǎn)移語句,條件語句和最簡單的輸入輸出語句等.編制一個包括必要處理階段(詞法分析、語法分析、語義分析、代碼生成)簡化又完整的編譯程序.。1.目的對編譯的完整過程有一個感性認(rèn)識,對各個環(huán)節(jié)的任務(wù),處理方法有一定的熟悉。2.設(shè)計(jì)內(nèi)容及要求(1)如1題寫出符合分析方法要求的文法,給出分析方法的思想,完成分析程序設(shè)計(jì)。(2)編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測試并通過所設(shè)計(jì)的分析程序。三、課程特色《編譯原理》課程是理論性較強(qiáng)的課程。其特點(diǎn)是概念多、內(nèi)容抽象。尤其是文法、形式語言及自動機(jī)的概念是計(jì)算機(jī)專業(yè)的理論學(xué)習(xí)和研究的基礎(chǔ)。編譯原理與方法對于深刻理解程序設(shè)計(jì)語言、深入了解程序在計(jì)算機(jī)中的運(yùn)行機(jī)制、掌握程序設(shè)計(jì)語言的翻譯方法起到不可替代的作用。同時《編譯原理》課程也是實(shí)踐性很強(qiáng)的課程,要求學(xué)生在基本掌握了編譯理論和技術(shù)的基礎(chǔ)上,綜合應(yīng)用先修課程及本課程的知識,完成課程的實(shí)驗(yàn)和課程設(shè)計(jì)。四、課程設(shè)計(jì)步驟與方法第一步需要同學(xué)給出語法分析方法及中間代碼形式的描述及文法和屬性文法的描述;或者詞法分析方法及符號表和TOKEN代碼的設(shè)計(jì)。第二步需要同學(xué)進(jìn)行簡要的分析與概要設(shè)計(jì);第三步需要同學(xué)按照學(xué)過的語法分析方法和語法制導(dǎo)翻譯方法進(jìn)行詳細(xì)的算法設(shè)計(jì),然后進(jìn)行實(shí)際編程。五、課程設(shè)計(jì)說明書與圖紙課程設(shè)計(jì)報告書的內(nèi)容應(yīng)包括:設(shè)計(jì)題目、班級、學(xué)號、姓名、完成日期;給出語法分析方法及中間代碼形式的描述、文法和屬性文法的設(shè)計(jì);或者詞法分析方法及符號表和TOKEN代碼的設(shè)計(jì)。簡要的分析與概要設(shè)計(jì);詳細(xì)的算法描述;源程序清單;給出軟件的測試方法和測試結(jié)果;設(shè)計(jì)的評價、收獲與體會。六、課程設(shè)計(jì)答辯課程設(shè)計(jì)完成后由教師上機(jī)現(xiàn)場檢查并由學(xué)生回答老師的提問七、課程設(shè)計(jì)進(jìn)度表序號內(nèi)容所用時間1給出語法分析方法及中間代碼形式的描述、文法和屬性文法的設(shè)計(jì);或者詞法分析方法及符號表和TOKEN代碼的設(shè)計(jì)。

1天2簡要的分析與概要設(shè)計(jì)

1天

3算法設(shè)計(jì)與程序設(shè)計(jì)3天4撰寫課程設(shè)計(jì)報告書1天合計(jì)

以上布置的任務(wù)是基本設(shè)計(jì)任務(wù),希望同學(xué)們自己加大難度,取得更好成績;同時要求同學(xué)們不得出現(xiàn)抄襲現(xiàn)象。上交內(nèi)容:1、以學(xué)號命名的文件夾,包括程序源代碼,一組較完備的測試數(shù)據(jù)(存在一個文本文件中);2、課程設(shè)計(jì)報告(紙質(zhì)版和電子版都要交,電子版放上面那個文件夾下):包括選題說明,簡單的軟件需求分析說明,軟件設(shè)計(jì)說明,設(shè)計(jì)經(jīng)驗(yàn)總結(jié)。功能描述:該程序具有什么功能?程序結(jié)構(gòu)描述:函數(shù)調(diào)用格式、參數(shù)含義、返回值描述、函數(shù)功能;另外可以附加函數(shù)之間的調(diào)用關(guān)系圖、程序總體執(zhí)行流程圖。設(shè)計(jì)經(jīng)驗(yàn)總結(jié)包括下列方面:你對你的軟件如何評價?你的設(shè)計(jì)有何特色?你自己覺得應(yīng)該給多少分?你在編程過程中花時多少?多少時間在紙上設(shè)計(jì)?多少時間上機(jī)輸入和調(diào)試?多少時間在思考問題?遇到了哪些難題?你是怎么克服的?你的收獲有哪些?四、結(jié)果分析:1.輸入條件語句:if(a>0)a=b;#(正確輸入)錯誤輸入:if(;#(錯誤輸入,則判斷有語法錯誤)3.if語句語法,語義,及中間代碼生成中間代碼4.while語句詞法及語義,語法分析While語句的中間代碼生成while和if語句綜合分析圖5-1六、課程設(shè)計(jì)總結(jié):詞法分析的基本任務(wù)是從字符串表示的源程序中識別出具有獨(dú)立意義的單詞符號,其基本思想是根據(jù)掃描到單詞符號的第一個字符的種類,拼出相應(yīng)的單詞符號。通過本試驗(yàn)的完成,更加加深了對詞法分析原理的理解。而語法分析的運(yùn)行過程,主程序大致流程為:“置初值”調(diào)用scaner函數(shù)讀下一個單詞符號調(diào)用IrParse結(jié)束。遞歸下降分析的大致流程為:“先判斷是否為begin”不是則“出錯處理”,若是則“調(diào)用scaner函數(shù)”調(diào)用語句串分析函數(shù)“判斷是否為end”不是則“出錯處理”,若是則調(diào)用scaner函數(shù)“判斷syn=0&&kk=0是否成立”成立則說明分析成功打印出來。不成立則“出錯處理”。當(dāng)詞法,語法都分析完成后進(jìn)行重點(diǎn)的語義分析和中間代碼生成。首先,用三地址代碼表示中間代碼,這需要對輸入串判斷,是為if語句,while語句,還是賦值語句,不同的輸入串將跳轉(zhuǎn)到不同的函數(shù)進(jìn)行相應(yīng)的處理,并得出最終的中間代碼。整個過程花費(fèi)2天的時間,一天用于編寫主要代碼,并調(diào)試出詞法功能模塊,第二天主要調(diào)試語法及語義功能模塊的實(shí)現(xiàn),及中間代碼生成工作。在設(shè)計(jì)條件語句的語義的實(shí)現(xiàn)算法時,遇到的小小的困難,經(jīng)過賴心的調(diào)試后解決。之后while循環(huán)中嘗試加入條件和賦值語句時沒遇到什么困難。自己評分:整個設(shè)計(jì)于調(diào)試總共花費(fèi)4天左右時間,程序基本實(shí)現(xiàn)了賦值語句,if語句,While循環(huán)語句的詞法分析與語法分析及語義分析和中間代碼生成的功能。程序能找出簡單的錯誤所在及原因。因此我自己覺得可以打優(yōu)秀!??!源代碼://編譯原理實(shí)驗(yàn),可進(jìn)行簡單的詞法分析和語法分析和語義分析,中間代碼生成#include<stdio.h>#include<string.h>#include<stdlib.h>charprog[80],token[8],ch,ana[80];intsyn,p,m,n,sum,i;char*rwtab[6]={"begin","if","then","while","do","end"};chararray[10][20];intliter=0,W_flag=0,if_flag=0;voidscaner();intdoanaly();intyuyi();voidmiddle_code();intmain(){ while(1) { p=i=0; W_flag=if_flag=liter=0; printf("\npleaseinputastring(endwith'#'):\n\n"); do{ scanf("%c",&ch); prog[p++]=ana[i++]=ch; }while(ch!='#'); ana[i]='\0'; p=0; printf("**開始詞法分析:**\n"); do{ scaner(); switch(syn) { case11:printf("(%-10d%5d)\n",sum,syn); break; case-1:printf("youhaveinputawrongstringwheninscaner\n"); getchar(); break;//exit(0); default:printf("(%-10s%5d)\n",token,syn); break; } }while(syn!=0); printf("\n"); i=doanaly(); if(i==-1) { printf("\n語法分析:awrongstringwheninanalysis\n"); } else { printf("\n語法分析:0error(s),0warning(s)\n"); middle_code(); } getchar(); } return0;}voidscaner(){ sum=0;for(m=0;m<8;m++) token[m++]=NULL;ch=prog[p++];m=0;while((ch=='')||(ch=='\n')) ch=prog[p++];if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) { token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; }}elseif((ch>='0')&&(ch<='9')){ while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=11;}elseswitch(ch){ case'<':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=22; token[m++]=ch; }else { syn=20; p--; }break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){ syn=24;token[m++]=ch;}else{syn=23;p--;}break;case'+':token[m++]=ch;ch=prog[p++];if(ch=='+'){syn=17;token[m++]=ch;}else{syn=13;p--;}break;case'-':token[m++]=ch;ch=prog[p++];if(ch=='-'){syn=29;token[m++]=ch;}else{syn=14;p--;}break;case'!':ch=prog[p++];if(ch=='='){syn=21;token[m++]=ch;}else{syn=31;p--;}break;case'=':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=25;token[m++]=ch;}else{syn=18;p--;}break;case'*':syn=15;token[m++]=ch;break;case'/':syn=16;token[m++]=ch;break;case'(':syn=27;token[m++]=ch;break;case')':syn=28;token[m++]=ch;break;case'{':syn=5;token[m++]=ch;break;case'}':syn=6;token[m++]=ch;break;case';':syn=26;token[m++]=ch;break;case'\"':syn=30;token[m++]=ch;break;case'#':syn=0;token[m++]=ch;break;case':':syn=17;token[m++]=ch;break;default:syn=-1;break;}token[m++]='\0';}intdoanaly(){ intlen,i=0,j=0,leftk=0,rightk=0,endofk=0,result=0;while(ana[i]=='') i++; len=strlen(ana)-i-1;equal: //judgethe"if" if(len>2&&(strncmp(ana+i,"if",2)==0)) { if_flag=1; i+=2;//jumpoverthe"if" while(ana[i]=='') i++; if(ana[i]!='(') { printf("Lose'('afterif\n"); result=-1; } i++;//jumpthe'(' leftk++; j=i; while(ana[i]!='#') { if(ana[i]=='(') leftk++; elseif(ana[i]==')') { rightk++; endofk=i; } elseif(ana[i]==';'&&leftk!=rightk) { printf("Lose')'before';'\n"); result=-1; } elseif(ana[i]=='+'||ana[i]=='-'||ana[i]!='&'||ana[i]=='|') { charch=ana[i]; intcount=0; while(ana[i]==ch)//lianxusuanfudegeshubuda2 { count++; i++; } if(count>2) { printf("Theerrornearthe%c\n",ch); result=-1; } i--; } i++; } if(leftk!=rightk)//judgewhetherthenumberof'('equalstothatof')' { if(leftk>rightk) printf("Lose')'intheif\n"); else printf("Lose'('intheif\n"); result=-1; } i=endofk; if(ana[i]==')') i++;//jumptheright')' while(ana[i]=='')//deletethe'' i++; if(ana[i]!=';')//ifnotlikethis"if(....);" gotoequal; } //judgethe"while" elseif(len>5&&(strncmp(ana+i,"while",5)==0)) { W_flag=1; intflag1=0,flag2=0,t=0,s=0; chararg[2][10]; i+=5;//jumpthe"while"fivechars memset(arg,0,20); while(ana[i]=='') i++;if(ana[i]!='(')//judge"while"followedby'(' result=-1;i++; while(ana[i]!='#'&&ana[i]!=')') { if(ana[i]=='<') {flag1++;t++;s=0;} elseif(ana[i]=='>') {flag2++;t++;s=0;}else arg[t][s++]=ana[j];i++; } if(s==0)//judgetheparaminthe"while(param)" { printf("theerrorinthe(),noparam\n"); result=-1; } if(t!=0&&(arg[0][0]==0||arg[1][0]==0)) {//judgethetwosideof">" if(flag1!=0) printf("Theerrornearthe'<'\n"); elseif(flag2!=0) printf("Theerrornearthe'>'\n"); result=-1; } if(ana[i]!=')') { printf("Thewhilelose')'\n"); result=-1; } i++; while(ana[i]=='') i++; if(ana[i]!=';')//goto"="whensuchstring:"a=b"inthewhile gotoequal; } else//finishthe"="analysis { //gettheleftsidestringof"="intre=0,right_para=0;// printf("entryequal\n"); re=yuyi(); if(re!=2) returnre; while((ana[i]>='A'&&ana[i]<='Z')||(ana[i]>='a'&&ana[i]<='z')) i++; while(ana[i]=='') i++; //judgetherightlocaltionof"=" if((ana[i]=='+'&&ana[i+1]!='=')|| (ana[i]=='-'&&ana[i+1]!='=')||(ana[i]=='='&&ana[i+1]=='#')) { printf("Theerrornear'='\n"); result=-1; } i++; while(ana[i]=='')//jumpthe'' i++; //gettherightsidestringof"=" while((ana[i]>='A'&&ana[i]<='Z')||(ana[i]>='a'&&ana[i]<='z')|| (ana[i]>='0'&&ana[i]<='9')) { i++; right_para++; } if(right_para==0) { printf("Loserightparanearthe'='\n"); result=-1; } if(ana[i]=='')//checkthe";" { while(ana[i]=='') i++; if(ana[i]!=';') { printf("Lose';'\n"); result=-1; } } elseif(ana[i]!=';'&&ana[i]!='')//endupwithno";"wrong { printf("Lose';'\n"); result=-1; } }returnresult;}intyuyi(){ intrep=0,i=0,j=0,nu=0; charbA[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ",para[8][10],*stoken=NULL; intt=0,eq_begin=0,r=0,c=0,len,s=0,result=0,equ_flag=0;charplu_all[8]; while(prog[i]!='#') { if(prog[i]=='=')//findthe'=' { eq_begin=i; break; } i++; }if(eq_begin==0)//no'='inthestring return-1; i=0;j=t=0; while(prog[j]!='#') { //recordtheflag if(prog[j]=='+'||prog[j]=='-'||prog[j]=='*'||prog[j]=='/') plu_all[t++]=prog[j]; if(prog[j]==';')//findthe';'inthestring equ_flag=1; j++; } if(t==0)//t=0meansthatthisstringisaequal return2; printf("**開始語義分析:**\n"); prog[j]='\0'; len=strlen(prog); j=eq_begin-1; while(prog[j]=='')j--;while(j>=0)//returntothebeginningofequaldialogue { if((prog[j]>='A'&&prog[j]<='Z')||(prog[j]>='a'&&prog[j]<='z')) j--; else break; } for(r=0;r<(len-1-j);r++)//deletethe"if(a>0)"in"if(a>0)a=g+g+h;" prog[r]=prog[r+j+1]; prog[r]='\0'; stoken=strtok(prog,"=");//gettheleftparaof'=' r=c=0; len=strlen(stoken); while(c<len) para[r][c++]=*stoken++; para[r][c]='\0';//savetheparainthearrayandmakesurethatitendsupwith'\0' while((stoken=strtok(NULL,"+-*/;"))!=NULL)//getalltheparas { r++; c=0; len=strlen(stoken); while(c<len) para[r][c++]=*stoken++; para[r][c]='\0'; }if(r!=(t+1))//judgewhetherthenumberofparaequalstothenumberofflag { printf("lessparanearrightsideof'='\n"); result=-1; } if(t>1)//morethantwoflags{ s=0; nu=t; intflag=0,be=0; while(s<t&&nu>1)//managethe'*'and'/'first { //first'*'||'/' if((plu_all[s]=='*'||plu_all[s]=='/')&&flag==0) { printf("%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); liter++; flag++; nu--; plu_all[s]=0; be=s;//recordthestartingofserver"*"||"/" para[s+1][0]=bA[rep]; //savethechange para[s+1][1]='\0'; rep++; } //secondlianxu'*'||'/' elseif((plu_all[s]=='*'||plu_all[s]=='/')&&flag!=0&& (plu_all[s-1]==0||plu_all[s-1]==0)) { printf("%c=%c%c%s\n",bA[rep],bA[rep-1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%c%c%s\n",bA[rep],bA[rep-1],plu_all[s],para[s+2]); liter++; plu_all[s]=0; intgg=be;//usethenewbArepresenttheoldbA[] while(gg<=s) { para[gg+1][0]=bA[rep]; //savethechange para[gg+1][1]='\0'; gg++; } nu--; rep++; } //notlianxu'*'||'/' elseif((plu_all[s]=='*'||plu_all[s]=='/')&&flag!=0&& (plu_all[s-1]!=0&&plu_all[s-1]!=0)) { printf("%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); liter++; plu_all[s]=0; nu--; para[s+1][0]=bA[rep]; para[s+1][1]='\0'; rep++; // printf("ffff\n"); } s++; } // printf("dddddfffffffffffffffd\n"); intg=0; nu=s=0; while(s<t)//computerthenumberofflag { if(plu_all[s]!=0) { nu++; g=s; } s++; } if(nu==1) {//onlyoneflaglast // printf("dddd\n"); if(g==0)//ifleavethefirstflag { printf("%s=%c%c%s\n",para[0],bA[rep-1],plu_all[g],para[1]); sprintf(array[liter],"%s=%c%c%s\n",para[0],bA[rep-1],plu_all[g],para[1]); liter++; } else//notthefirstflag { printf("%s=%c%c%s\n",para[0],bA[rep-1],plu_all[g],para[g+2]); sprintf(array[liter],"%s=%c%c%s\n",para[0],bA[rep-1],plu_all[g],para[g+2]); liter++; } } else//morethantwoflags { s=-1; while(nu>1)//continuewhenmorethanoneflag { s++; if(plu_all[s]!=0&&rep>0)//ifrepbiggerthanzero { //meansthathaving'*'||'/'intheahead if(s!=0)//judgewhetheristhefirstflag { printf("%c=%c%c%s\n",bA[rep],bA[rep-1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%c%c%s\n",bA[rep],bA[rep-1],plu_all[s],para[s+2]); liter++; } elseif(s==0) { printf("%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); liter++; } nu--;plu_all[s]=0; rep++; } elseif(plu_all[s]!=0&&rep==0) { printf("%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); sprintf(array[liter],"%c=%s%c%s\n",bA[rep],para[s+1],plu_all[s],para[s+2]); liter++; nu--;plu_all[s]=0;rep++; } } s=0; while(plu_all[s]==0)//findlastflag s++; printf("%s=%c%c%s\n",para[0],bA[rep-1],plu_all[s],para[s+2]); sprintf(array[liter],"%s=%c%c%s\n",para[0],bA[rep-1],plu_all[s],para[s+2]); liter++; } } elseif(t==1)//onlyoneflag { printf("%s=%s%c%s\n\n",para[0],para[1],plu_all[0],para[2]); sprintf(array[liter],"%s=%s%c%s\n\n",para[0],para[1],plu_all[0],para[2]); liter++; } if(equ_flag==0) { printf("Lose';'intheend\n"); result=-1; }

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論