算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告_第1頁(yè)
算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告_第2頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院本科課程設(shè)計(jì)任務(wù)書(shū)設(shè)計(jì)名稱(chēng):算術(shù)表達(dá)式語(yǔ)法檢查指導(dǎo)教師:下達(dá)時(shí)間:2015-5-8學(xué)生姓名:學(xué)號(hào):專(zhuān)業(yè):一、課程設(shè)計(jì)的基本要求根據(jù)所學(xué)知識(shí),編寫(xiě)指定題目的C+語(yǔ)言程序,并規(guī)范地完成課程設(shè)計(jì)報(bào)告。通過(guò)課程設(shè)計(jì),加深對(duì)C+面向?qū)ο蟪绦蛟O(shè)計(jì)課程所學(xué)知識(shí)的理解,熟練掌握和鞏固C+語(yǔ)言的基本知識(shí)和語(yǔ)法規(guī)范,掌握C+語(yǔ)言的基礎(chǔ)知識(shí),理解面向?qū)ο笙到y(tǒng)的封裝性、繼承性和多態(tài)性;熟練使用C語(yǔ)言中的函數(shù)、數(shù)組、指針、鏈表和字符串等基本知識(shí);掌握類(lèi)的定義、標(biāo)準(zhǔn)String類(lèi)和向量;理解掌握友元函數(shù)和重載操作符,動(dòng)態(tài)數(shù)組;理解掌握繼承和多態(tài)性;掌握模版的使用;能夠進(jìn)行程序調(diào)試過(guò)程中的異常處理

2、;進(jìn)一步掌握利用C+進(jìn)行類(lèi)的定義和操作方法;進(jìn)一步掌握類(lèi)的繼承和派生方法;進(jìn)一步理解虛函數(shù)和多態(tài);綜合利用上述知識(shí),學(xué)習(xí)設(shè)計(jì)并編寫(xiě)面向?qū)ο蟮腃+簡(jiǎn)單應(yīng)用程序;培養(yǎng)解決復(fù)雜任務(wù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計(jì)、信息隱藏等)。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃+語(yǔ)言程序,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問(wèn)題的初步能力。具體要求如下:1、采取模塊化方式進(jìn)行程序設(shè)計(jì),要求程序的功能設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及整體結(jié)構(gòu)設(shè)計(jì)合理。學(xué)生也可根據(jù)自己對(duì)題目的理解增加新的功能模塊(視情況可另外加分)。2、系統(tǒng)以菜單界面方式(至少采用文本菜單界面,如能采用圖形菜單界面更好)工作,運(yùn)行界面友好,

3、演示程序以用戶(hù)和計(jì)算機(jī)的對(duì)話方式進(jìn)行。3、程序算法說(shuō)明清晰,理論分析與計(jì)算正確,運(yùn)行情況良好,實(shí)驗(yàn)測(cè)試數(shù)據(jù)無(wú)誤,容錯(cuò)性強(qiáng)(能對(duì)錯(cuò)誤輸入進(jìn)行判斷控制)。4、編程風(fēng)格良好(包括縮進(jìn)、空行、適當(dāng)注釋、變量名和函數(shù)名見(jiàn)名知意,程序容易閱讀等);5、寫(xiě)出規(guī)范的課程設(shè)計(jì)報(bào)告,具體要求見(jiàn)相關(guān)說(shuō)明文檔。、課程設(shè)計(jì)的主要內(nèi)容問(wèn)題描述】算術(shù)表達(dá)式語(yǔ)法檢查。功能要求】1)鍵盤(pán)讀入一個(gè)四則運(yùn)算算術(shù)表達(dá)式,對(duì)其進(jìn)行語(yǔ)法檢查;2)算術(shù)表達(dá)式允許嵌套,如果出錯(cuò),指出出錯(cuò)位置;3)不需要計(jì)算結(jié)果;4)盡量不使用棧。程序:(其余的你們自己寫(xiě))voidmain()/主函數(shù)intlen;intf=1;cout<<end

4、l<<"請(qǐng)輸入一個(gè)算術(shù)表達(dá)式(請(qǐng)?jiān)谝恍袃?nèi)完成輸入且每個(gè)項(xiàng)的長(zhǎng)度不大于10):"<<endl;gets(str);len=strlen(str);strlen='A'cout<<endl;system("pause");cout<<endl;cout<<"*詞法分析開(kāi)始*"<<endl;f=cifa_main();if(f=0)return;cout<<endl;system("pause");cout<<

5、endl;cout<<"*語(yǔ)法分析開(kāi)始*"<<endl;f=yufa_main();if(f=0)return;cout<<endl;system("pause");cout<<endl;intF1()/F->(E)|標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)if(strcmp(cifa_p->word,"(")=0)advance();strcpy(F_name,cifa_p->word);strcpy(E_name,F_name);E1();if(strcmp(cifa_p->wor

6、d,")")=0)advance();strcpy(F_name,E_name);return(1);elsecout<<"ERROR"<<endl;return(0);elseif(cifa_p->type=1|cifa_p->type=2)strcpy(F_name,cifa_p->word);advance();return(1);elsereturn0;intT1()/T->F*T|F/T|Fyuyi*p=newyuyi;F1();strcpy(p->op1,F_name);if(strcmp

7、(cifa_p->word,"*")=0)advance();T1();p->next=NULL;p->op='*'strcpy(p->op2,T_name);T_name0='t'T_name1=+count;T_name2='0'strcpy(p->result,T_name);yuyi_add(p);return(1);elseif(strcmp(cifa_p->word,"/")=0)advance();T1();p->next=NULL;p->op=

8、'/'strcpy(p->op2,T_name);T_name0='t'T_name1=+count;T_name2='0'strcpy(p->result,T_name);yuyi_add(p);return(1);elsestrcpy(T_name,F_name);return(1);intE1()/E->T+E|T-E|Tyuyi*p=newyuyi;T1();strcpy(p->op1,T_name);if(strcmp(cifa_p->word,"+")=0)advance();E1()

9、;p->next=NULL;p->op='+'strcpy(p->op2,E_name);E_name0='t'E_name1=+count;E_name2='0'strcpy(p->result,E_name);yuyi_add(p);return(1);elseif(strcmp(cifa_p->word,"-")=0)advance();E1();p->next=NULL;p->op='-'strcpy(p->op2,E_name);E_name0='

10、;t'E_name1=+count;E_name2='0'strcpy(p->result,E_name);yuyi_add(p);return(1);elsestrcpy(E_name,T_name);return(1);intyufa_main()/語(yǔ)法分析主程序intn;cifa*p=newcifa;strcpy(p->word,"#");/對(duì)詞法分析產(chǎn)生的結(jié)果鏈表進(jìn)行處理p->type=-1;p->next=NULL;cifa_add(p);cifa_p=cifa_head;cout<<endl;yufa_

11、zfc_disp(cifa_head->next);cout<<"的遞歸分析過(guò)程如下:"<<endl;cout<<endl<<""<<endl;cout<<'t'<<"步驟t"<<'t'<<"產(chǎn)生式"<<endl;advance();n=E();if(n=0)cout<<'t'<<f<<'t'

12、<<'t'<<"輸入串不是該文法的一個(gè)句子!"<<endl;cout<<endl<<"語(yǔ)法分析結(jié)束"<<endl;return(0);elseif(n=1)cout<<'t'<<f<<'t'<<'t'<<"輸入串是該文法的一個(gè)句子!"<<endl;cout<<endl<<"語(yǔ)法分析結(jié)束"

13、<<endl;return(1);語(yǔ)義分析*/在四元式鏈表末添加一個(gè)結(jié)點(diǎn)/*yuyi*yuyi_add(yuyi*p)yuyi_end->next=p;yuyi_end=p;returnyuyi_head;/輸出四元式鏈表voidyuyi_sys_disp()yuyi*p;p=yuyi_head->next;while(p!=NULL)cout<<'('<<'t'<<p->op<<','<<'t'<<p->op1<&l

14、t;','<<'t'<<p->op2<<','<<'t'<<p->result<<'t'<<')'<<endl;p=p->next;cout<<endl;intF()/F->(E)|標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)子函數(shù)intm;if(strcmp(cifa_p->word,"(")=0)cout<<'t'<<f+&l

15、t;<'t'<<'t'<<"F->(E)"<<endl;advance();m=E();if(m=0)return(0);if(strcmp(cifa_p->word,")")=0)advance();return(1);elsecout<<"ERROR"<<endl;return(0);elseif(cifa_p->type=1|cifa_p->type=2)/數(shù)字或是標(biāo)識(shí)符cout<<'t&

16、#39;<<f+<<'t'<<'t'<<"F->標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)"<<endl;advance();return(1);elsereturn0;intS()/S->*FS|/FS|&子函數(shù)intt,g;if(strcmp(cifa_p->word,"*")=0)cout<<'t'<<f+<<'t'<<'t'<<"S-&g

17、t;*FS"<<endl;advance();t=F();if(t=0)return0;g=S();if(g=0)return0;return(1);elseif(strcmp(cifa_p->word,"/")=0)cout<<'t'<<f+<<'t'<<'t'<<"S->/FS"<<endl;advance();t=F();if(t=0)return0;g=S();if(g=0)return0;re

18、turn(1);elseif(strcmp(cifa_p->word,"+")=0|(strcmp(cifa_p->word,"-")0)|(strcmp(cifa_p->word,"#")=0)|(strcmp(cifa_p->word,")")=0)cout<<'t'<<f+<<'t'<<'t'<<"S->e"<<endl;return(1);

19、return(0);intT()/T->FS子函數(shù)intt,g;cout<<'t'<<f+<<'t'<<'t'<<"T->FS"<<endl;t=F();if(t=0)return0;g=S();if(g=0)return0;return(1);intG()/G->+TG|-TG|&子函數(shù)intt,g;if(strcmp(cifa_p->word,"+")=0)cout<<'t'

20、;<<f+<<'t'<<'t'<<"G->+TG"<<endl;advance();t=T();if(t=0)return(0);g=G();if(g=0)return(0);return(1);elseif(strcmp(cifa_p->word,"-")=0)cout<<'t'<<f+<<'t'<<'t'<<"G->-TG&q

21、uot;<<endl;advance();t=T();if(t=0)return(0);g=G();if(g=0)return(0);return(1);elseif(strcmp(cifa_p->word,")")=0|strcmp(cifa_p->word,"#")=0)cout<<'t'<<f+<<'t'<<'t'<<"G->'"<<endl;return(1);retur

22、n(0);intE()/E->+|-TG子函數(shù)intt,g;if(strcmp(cifa_p->word,"+")=0)|(strcmp(cifa_p->word,"-")=0)advance();cout<<'t'<<f+<<'t'<<'t'<<"E->+|-TG"<<endl;t=T();if(t=0)return(0);g=G();if(g=0)return(0);elsereturn(

23、1);voidyufa_zfc_disp(cifa*p)while(p!=NULL)cout<<p->word;p=p->next;/cout<<endl;*/輸出字符串語(yǔ)法分析部*voidadvance()/取詞法分析產(chǎn)生列表中的結(jié)點(diǎn)作語(yǔ)法分析cifa_p=cifa_p->next;inttest(void)/識(shí)別相關(guān)符號(hào)chartemp3;inti=0;inttype;switch(ch)case'':/識(shí)別''tempi+=ch;GetChar();if(ch='')tempi+=''

24、;tempi='0'type=4;break;case'+':/識(shí)別'+'tempi+=ch;GetChar();if(ch='')tempi+=''tempi='0'type=3;break;case'-':/識(shí)別'-'tempi+=ch;GetChar();if(ch='')tempi+=''tempi='0'type=3;break;case'*':/識(shí)別'*'tempi+=ch;G

25、etChar();if(ch='')tempi+=''tempi='0'type=3;break;case'/':/識(shí)別'/'tempi+=ch;GetChar();if(ch='')tempi+=''tempi='0'type=3;break;case'(':/識(shí)別'('tempi+=ch;算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告GetChar();if(ch='')tempi+=''tempi='0'

26、;type=4;break;case')':/識(shí)別')'tempi+=ch;GetChar();if(ch='')tempi+=''tempi='0'type=4;break;default:cout<<ch;cout<<"無(wú)法識(shí)別,出錯(cuò)!"<<endl;GetChar();if(ch='')notock();return(0);if(ch='')notock();/空格跳過(guò)cifa*p;p=newcifa;p->next

27、=NULL;p->type=type;strcpy(p->word,temp);算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告cifa_add(p);return(1);intcifa_main()/詞法分析主函數(shù)intf;cifa_head=newcifa;cifa_head->type=-1;cifa_head->next=NULL;cifa_end=cifa_head;cout<<"單詞種類(lèi)定義如下:"<<endl<<endl;cout<<"標(biāo)識(shí)符的種類(lèi)編碼1:"<<endl<&

28、lt;endl;cout<<"常數(shù)的種類(lèi)編碼2:"<<endl<<endl;cout<<"運(yùn)算的種類(lèi)編碼3:+,-,*,/"<<endl<<endl;cout<<"界限符的種類(lèi)編碼4:(,),;"<<endl;GetChar();詞法分析結(jié)果如下:notock();cout<<""<<endl<<""<<endl;while(nn<100&

29、&ch!='A')if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')f=alph();/字母串elseif(ch>='0'&&ch<='9')f=number();/數(shù)字串elsef=test();/其他符號(hào)if(f=0)return(0);cifa_disp(cifa_head);cout<<endl<<"詞法分析結(jié)束"

30、<<endl;return(1);intnumber(void)/識(shí)別數(shù)字inttype=2;inti=0;chartemp10;while('0'<=ch&&ch<='9')tempi=ch;i+;GetChar();tempi='0'if(ch='')notock();elseif(ch!='A'&&ch!='+'&&ch!='-'&&ch!=''&&ch!=&

31、#39;*'&&ch!='/'&&ch!='('&&ch!=')')cout<<temp<<"接錯(cuò)誤后綴,出錯(cuò)"<<endl;return(0);if(ch='')notock();cifa*p;p=newcifa;p->next=NULL;p->type=type;strcpy(p->word,temp);cifa_add(p);return(1);intalph(void)/識(shí)別標(biāo)識(shí)符inti=0;

32、chartemp10;inttype=1;tempi=ch;i+;GetChar();while(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')|(ch>='0'&&ch<='9')tempi=ch;i+;GetChar();tempi='0'if(ch='')notock();elseif(ch!='A'&&ch!='

33、+'&&ch!='-'&&ch!=''&&ch!='*'&&ch!='/'&&ch!='('&&ch!=')')cout<<temp<<"接錯(cuò)誤后綴,出錯(cuò)"<<endl;return0;cifa*p;p=newcifa;p->next=NULL;p->type=type;strcpy(p->word,temp);cifa_a

34、dd(p);return(1);cifa*cifa_add(cifa*p)/在分析結(jié)果列表尾添加一個(gè)新接點(diǎn)cifa_end->next=p;cifa_end=cifa_end->next;returncifa_head;voidcifa_disp(cifa*cifa_head)/輸出詞法分析結(jié)果cifa*p;p=cifa_head->next;while(p!=NULL)cout<<'('<<'t'<<p->type<<'t'<<','<&l

35、t;'t'<<p->word<<'t'<<')'<<endl;p=p->next;voidGetChar()/取字符ch=strnn;nn+;voidnotock()/去掉空格if(ch='')while(ch='')GetChar();信息yuyi*yuyi_add(yuyi*p);/在四元式鏈表末添加一個(gè)結(jié)點(diǎn)voidyuyi_sys_disp();/輸出四元式鏈表intE1();/E->T+E|T-E|TintT1();/T->F*T|F/T|FcharE_name10,T_name10,F_name10,temp_name10;/在求四元式的時(shí)候用來(lái)傳遞算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告算術(shù)表達(dá)式語(yǔ)法檢查實(shí)驗(yàn)報(bào)告intF1();/F->(E)|標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)voidyuyi_main();/語(yǔ)義分析主函數(shù)/*詞法分析部分*/*語(yǔ)義分析部分?jǐn)?shù)據(jù)結(jié)構(gòu)及函數(shù)定義*structyuyi

溫馨提示

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

評(píng)論

0/150

提交評(píng)論