版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)報(bào)告(2012 - 2013 年度第1學(xué)期)名稱(chēng):編譯技術(shù)課程設(shè)計(jì) B題目:詞法分析器設(shè)計(jì)算符優(yōu)先分析程序設(shè)計(jì)基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì)院系:計(jì)算機(jī)系班級(jí):學(xué)號(hào): 學(xué)生姓名:指導(dǎo)教師:閻蕾,岳燕設(shè)計(jì)周數(shù):1周成 績(jī):日期:年月日編譯技術(shù)課程設(shè)計(jì)B任務(wù)書(shū)一、目的與要求1 詞法分析器設(shè)計(jì)的目的與要求1.1詞法分析器設(shè)計(jì)的實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)是為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)、網(wǎng)絡(luò)工程專(zhuān)業(yè)、信息安全專(zhuān)業(yè)的學(xué)生在學(xué)習(xí)編譯技術(shù)課程后,為加深對(duì)課堂教學(xué)內(nèi)容的理解,培養(yǎng)解決實(shí)際問(wèn)題能力而設(shè)置的實(shí)踐環(huán)節(jié)。通過(guò)這個(gè)實(shí)驗(yàn),使學(xué)生應(yīng)用編譯程序設(shè)計(jì)的原理和技術(shù)設(shè)計(jì)出詞法分析器,了解掃描器的組成結(jié)構(gòu),不同種類(lèi)單
2、詞的識(shí)別方法。能使得學(xué)生在設(shè)計(jì)和調(diào)試編譯程序的能力方面有所提高。為將來(lái)設(shè)計(jì)、分析編譯 程序打下良好的基礎(chǔ)。1.2詞法分析器設(shè)計(jì)的實(shí)驗(yàn)要求設(shè)計(jì)一個(gè)掃描器,該掃描器是一個(gè)子程序,其輸入是源程序字符串,每調(diào)用一次識(shí)別并輸出一個(gè) 單詞符號(hào)。為了避免超前搜索,提高運(yùn)行效率,簡(jiǎn)化掃描器的設(shè)計(jì),假設(shè)該程序設(shè)計(jì)語(yǔ)言中,基 本字(也稱(chēng)關(guān)鍵詞)不能做一般標(biāo)識(shí)符用,如果基本字、標(biāo)識(shí)符和常數(shù)之間沒(méi)有確定的運(yùn)算符或 界符作間隔,則用空白作間隔。單詞符號(hào)及其內(nèi)部表示如表1-1所示,單詞符號(hào)中標(biāo)識(shí)符由一個(gè)字母后跟多個(gè)字母、數(shù)字組成,常數(shù)由多個(gè)十進(jìn)制數(shù)字組成。單詞符號(hào)的內(nèi)部表示,即單詞的輸出形式為二元式:(種別編碼,單詞的屬
3、性值)。表1-1單詞符號(hào)及其內(nèi)部表示單詞符號(hào)種別編碼單詞的屬性值BEGIN1IF2THEN3ELSE4END5標(biāo)識(shí)符6在名字表中的地址整型常數(shù)7十進(jìn)制整數(shù)+8*9*10(11)122 算符優(yōu)先分析程序設(shè)計(jì)的目的和要求2.1算符優(yōu)先分析程序設(shè)計(jì)的實(shí)驗(yàn)?zāi)康臑閷?lái),本題本實(shí)驗(yàn)是為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的學(xué)生在學(xué)習(xí)編譯技術(shù)課程后,為加深對(duì)課堂教學(xué)內(nèi)容的 理解,培養(yǎng)解決實(shí)際問(wèn)題能力而設(shè)置的實(shí)踐環(huán)節(jié)。通過(guò)這個(gè)實(shí)驗(yàn),使學(xué)生應(yīng)用編譯程序設(shè)計(jì)的原 理和技術(shù),設(shè)計(jì)、編寫(xiě)和調(diào)試算符優(yōu)先分析程序,了解算符優(yōu)先分析程序的組成結(jié)構(gòu),掌握實(shí)現(xiàn) 通用算符優(yōu)先分析算法的方法。能使得學(xué)生在設(shè)計(jì)和調(diào)試編譯程序的能力方面有所提高。設(shè)計(jì)
4、、分析編譯程序打下良好的基礎(chǔ)。2.2算符優(yōu)先分析程序設(shè)計(jì)的實(shí)驗(yàn)要求算符優(yōu)先分析屬于自下而上的分析方法,該語(yǔ)法分析程序的輸入是終結(jié)符號(hào)串(即單詞符號(hào)串, 以一個(gè)“ # ”結(jié)尾),如果輸入串是句子則輸出“ YES ”,否則輸出“ NO ”和錯(cuò)誤信息。算符優(yōu)先分析過(guò)程與非終結(jié)符號(hào)無(wú)關(guān),當(dāng)由文法產(chǎn)生了優(yōu)先關(guān)系之后文法也就失去了作用目給出文法的目的是為了便于對(duì)語(yǔ)法分析結(jié)果進(jìn)行驗(yàn)證。(1) 文法 設(shè)算符優(yōu)先文法 G為:EET |TTTF | FFPF | PP (E)|i說(shuō)明:i為整型常數(shù)或者為標(biāo)識(shí)符表示整型變量;使用中T用 *表示。(2) 優(yōu)先關(guān)系表設(shè)優(yōu)先關(guān)系表如表1-2所示。表1-2 優(yōu)先關(guān)系表+*t
5、i()#+A哎1<£|*1>1哎KItp>l<1<'>il>>>(1<£|1<1<£|)1>'>#3基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì)的目的和要求3.1基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì)的實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)是為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的學(xué)生在學(xué)習(xí)編譯技術(shù)課程后,為加深對(duì)課堂教學(xué)內(nèi)容的 理解,培養(yǎng)解決實(shí)際問(wèn)題能力而設(shè)置的實(shí)踐環(huán)節(jié)。通過(guò)這個(gè)實(shí)驗(yàn),使學(xué)生應(yīng)用編譯程序設(shè)計(jì)的原 理和技術(shù),通過(guò)設(shè)計(jì)、編寫(xiě)和調(diào)試語(yǔ)法制導(dǎo)翻譯程序,掌握從一種語(yǔ)句的語(yǔ)法和語(yǔ)義出發(fā),構(gòu)造 相應(yīng)
6、的語(yǔ)義子程序,實(shí)現(xiàn)基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯的方法。能使得學(xué)生在設(shè)計(jì)和調(diào)試編譯程序的能力方面有所提高。為將來(lái)設(shè)計(jì)、分析編譯程序打下良好的基礎(chǔ)。3.2基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì)的實(shí)驗(yàn)要求算符優(yōu)先分析方法是通過(guò)反復(fù)把輸入符號(hào)移進(jìn)分析棧,使用優(yōu)先關(guān)系表在分析棧頂尋找最左素短語(yǔ),將其歸約為一個(gè)非終結(jié)符號(hào)而實(shí)現(xiàn)的。這個(gè)分析過(guò)程與非終結(jié)符號(hào)無(wú)關(guān),當(dāng)由文法產(chǎn)生了優(yōu)先關(guān)系之后文法也就失去了作用(所以本題目無(wú)需給出文法)?;谒惴麅?yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯是在算符優(yōu)先語(yǔ)法分析的基礎(chǔ)上進(jìn)行翻譯工作(即語(yǔ)義分析),每當(dāng)將一個(gè)最左素短語(yǔ)歸約為一個(gè)非終結(jié)符號(hào)時(shí),就調(diào)用對(duì)應(yīng)產(chǎn)生式的語(yǔ)義子程序,去完
7、成相應(yīng)的語(yǔ)義翻譯工作, 這步歸約使用的產(chǎn)生式對(duì)非終結(jié)符號(hào)不加區(qū)分(即將所有的非終結(jié)符號(hào)用一個(gè)通用的非終結(jié)符號(hào)表示)。語(yǔ)法制導(dǎo)翻譯程序的輸入是終結(jié)符號(hào)串(即單詞符號(hào)串,以一個(gè)“#”結(jié)尾),如果輸入符號(hào)串是句子,則按照其語(yǔ)義進(jìn)行翻譯,輸出等價(jià)的四元式序列(作為練習(xí)應(yīng)顯示輸出)。4. 上機(jī)前的準(zhǔn)備為了充分利用上機(jī)時(shí)間,在進(jìn)行編譯技術(shù)上機(jī)實(shí)驗(yàn)前應(yīng)做好各種準(zhǔn)備工作,具體應(yīng)包括:(1)復(fù)習(xí)與上機(jī)題目有關(guān)的知識(shí),熟悉有關(guān)定義、概念和實(shí)現(xiàn)算法。(2)設(shè)計(jì)出程序流程框圖和數(shù)據(jù)結(jié)構(gòu),編寫(xiě)出完整的源程序,進(jìn)行靜態(tài)檢查。(3)為所編寫(xiě)的程序構(gòu)思一個(gè)運(yùn)行、調(diào)試環(huán)境,例如,以什么方式提供輸入數(shù)據(jù)、顯示輸出數(shù)據(jù),如何調(diào)用(
8、或啟動(dòng))編寫(xiě)的程序。制定出程序調(diào)試計(jì)劃和典型輸入代碼數(shù)據(jù)。5. 課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)完成后,按學(xué)校給定的格式和要求寫(xiě)出課程設(shè)計(jì)報(bào)告。主要內(nèi)容完成以下課程設(shè)計(jì)內(nèi)容:1完成詞法分析器設(shè)計(jì),實(shí)現(xiàn)輸入源程序字符串,每調(diào)用一次掃描器,就輸出一個(gè)以?xún)?nèi)部形式 表示的單詞符號(hào),輸出形式為二元式:(種別編碼,單詞屬性)2 完成算符優(yōu)先分析程序設(shè)計(jì),掌握實(shí)現(xiàn)通用算符優(yōu)先分析算法的方法,實(shí)現(xiàn)輸入終結(jié)符號(hào)串(即單詞符號(hào)串,以一個(gè)“ #”結(jié)尾),如果輸入串是句子則輸出“ YES,否則輸出“ NC”和錯(cuò) 誤信息。3完成基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì),實(shí)現(xiàn)輸入是終結(jié)符號(hào)串(即單詞符號(hào)串,以一個(gè)“ #”結(jié)尾),如
9、果輸入符號(hào)串是句子,則按照其語(yǔ)義進(jìn)行翻譯,輸出等價(jià)的四元式序列。三、進(jìn)度計(jì)劃序號(hào)設(shè)計(jì)內(nèi)容完成時(shí)間備注1查閱資料,編譯器各部分概要設(shè)計(jì)一天2詞法分析器設(shè)計(jì)一天3算符優(yōu)先分析程序設(shè)計(jì)一天4基于算符優(yōu)先分析方法的語(yǔ)法制導(dǎo)翻譯程序設(shè)計(jì)一天半5驗(yàn)收交實(shí)驗(yàn)報(bào)告半天已完成的學(xué)生驗(yàn)收交實(shí)驗(yàn)報(bào)告四、設(shè)計(jì)成果要求1按進(jìn)度計(jì)劃和自己的能力完成課程設(shè)計(jì)內(nèi)容要求,包括程序框圖、源程序、調(diào)試步驟、調(diào)試方法、對(duì)運(yùn)行結(jié)果的分析等。2 總結(jié)整個(gè)課程設(shè)計(jì),撰寫(xiě)出課程設(shè)計(jì)報(bào)告。五、考核方式1程序調(diào)試完成后,由指導(dǎo)教師在計(jì)算機(jī)上檢查,驗(yàn)收課程設(shè)計(jì)成果,并現(xiàn)場(chǎng)答辯。2 評(píng)閱課程設(shè)計(jì)報(bào)告。(簽字)學(xué)生姓名:指導(dǎo)教師:年 月 日實(shí)驗(yàn)一詞法
10、分析器的設(shè)計(jì)與實(shí)現(xiàn)一、課程設(shè)計(jì)(綜合實(shí)驗(yàn))的目的與要求1.1詞法分析器設(shè)計(jì)的實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)是為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的學(xué)生在學(xué)習(xí)編譯技術(shù)課程后,為加深對(duì)課堂教學(xué)內(nèi)容的 理解,培養(yǎng)解決實(shí)際問(wèn)題能力而設(shè)置的實(shí)踐環(huán)節(jié)。通過(guò)這個(gè)實(shí)驗(yàn),使學(xué)生應(yīng)用編譯程序設(shè)計(jì)的原理和 技術(shù)設(shè)計(jì)出詞法分析器,了解掃描器的組成結(jié)構(gòu),不同種類(lèi)單詞的識(shí)別方法。能使得學(xué)生在設(shè)計(jì)和調(diào) 試編譯程序的能力方面有所提高。為將來(lái)設(shè)計(jì)、分析編譯程序打下良好的基礎(chǔ)。1.2詞法分析器設(shè)計(jì)的實(shí)驗(yàn)要求設(shè)計(jì)一個(gè)掃描器,該掃描器是一個(gè)子程序,其輸入是源程序字符串,每調(diào)用一次識(shí)別并輸出一個(gè)單詞符號(hào)。為了避免超前搜索,提高運(yùn)行效率,簡(jiǎn)化掃描器的設(shè)計(jì),假設(shè)該程序
11、設(shè)計(jì)語(yǔ)言中,基本字(也稱(chēng)關(guān)鍵詞)不能做一般標(biāo)識(shí)符用,如果基本字、標(biāo)識(shí)符和常數(shù)之間沒(méi)有確定的運(yùn)算符或界符作間 隔,則用空白作間隔。單詞符號(hào)及其內(nèi)部表示如表 1-1所示,單詞符號(hào)中標(biāo)識(shí)符由一個(gè)字母后跟多個(gè)字母、數(shù)字組成,常數(shù)由多個(gè)十進(jìn)制數(shù)字組成。單詞符號(hào)的內(nèi)部表示,即單詞的輸出形式為二元式:(種別編碼,單詞的屬性值)。表1-1單詞符號(hào)及其內(nèi)部表示單詞符號(hào)種別編碼單詞的屬性值BEGIN1一IF2一THEN3一ELSE4一END5一標(biāo)識(shí)符6在名字表中的地整型常數(shù)7址+8十進(jìn)制整數(shù)*9*10(11)12一、設(shè)計(jì)(實(shí)驗(yàn))正文1詞法分析器流程圖2詞法分析器設(shè)計(jì)程序代碼/ first.cpp :定義控制臺(tái)應(yīng)用
12、程序的入口點(diǎn)。/#in elude"stdafx.h"#in elude <iostream>#in elude<stri ng>using namespace std ; int what (char a)if ( int (a)>=48)&&( int (a)<=57)return 0; / 0 - 9 數(shù)字elseif ( int (a)>=97)&&( int (a)<=122)return 1; a-z 的字母else return 2; /其他的標(biāo)點(diǎn)符號(hào)void scan(char
13、a, int & m, char zc100100, int &n) char zh100;int b=0, weizhi , r =0;int zbbmj/ 檢測(cè)整形常數(shù)while (a m='')cout <<"遇到空格"<<endl ;n+;if (what( a m)=0)while (what( a m)=0)b=b*10+int (an)-48;m+;zbbm=7;cout <<"(" <<zbbm<<"," <<b&l
14、t;<")" <<endl ;else/ 檢測(cè)字符型if (what( a m)=1)if (am='b' )&&(a m+1= 'e' )&&(a m+2='g' )&&( a m+3='i' )&&(am+4='n' )&&(what (a m+ 5)=2)m=m+5;zbbm=1;cout <<"(" <<zbbm<<",-)&
15、quot;<<endl ;/=檢測(cè) beginelseif ( a m='i')&&( a m+1= f )&&( what( a m+ 2)=2)m=n+2;zbbm=2;cout <<"(" <<zbbnK<",-)" <<endl ;/檢測(cè)ifelseif ( a m='t' )&&(a m+1='h' )&&(a m+2='e' )&&( a葉3=
16、39;n' )&&(what( a m+4)=2)n=n+4;zbbm=3;cout <<"(" <<zbbm<<",-)"<<endl ;/ 檢測(cè) thenelseif(am='e' )&&(a m+ 1=T )&&(am+2= 's' )&&( a m+ 3= 'e' )&&(what( am+4)=2)m=m+4;zbbm=4;cout <<"(
17、" <<zbbm«",-)"<<endl ;/ 檢測(cè) elseelseif (am='e' )&&(a m+1='n' )&&(a m+2='d' )&&(what(a葉3)=2)m=m+3;zbbm=5;cout <<"(" <<zbbm<<",-)"<<endl ; /檢測(cè)end/ 對(duì)未知字符的檢測(cè)elseint j =0;while (what
18、( a m)!=2)zhj =a m;m+;j +;zhj=# ;if (n=0)j =0;while (zhj != # )zc0 j=zhj;j +;zc0 j = '#'n=1;weizhi =1;elseif (n>0)int k=0, y=1;while ( k<n)&&(y=1)r=0;while (zc k r!= '#') r+;if (r!=j)k+; y=1;elseif (r=j )r =0;while ( int (zc k r )= int (zhr)&&( r<j )r+;if (r=
19、j) weizhi =k+1; y=0;elsek+; y=1;if (y=1)j=0;while (zh j != # )zc n j =zhj ;j+;zc nj=# ;n=n+1; weizhi =n;zbbm=6; /怎么輸出地址cout <<"(" <<zbbm<<"," <<weizhi <<")" <<endl ;elseif (what( a m)=2)if (am='+')zbbm=8;m+;cout <<"
20、(" <<zbbm<<",-)"<<endl ;/檢測(cè)+elseif (a m='(')zbbm=11;m+;cout <<"(" <<zbbm<<",-)"<<endl ;/檢測(cè)(elseif ( a m=')')zbbm=12;m+;cout <<"(" <<zbbm«",-)"<<endl ;檢測(cè))elseif (am=
21、 '*')if (am+1='*')zbbm=10;m+=2;elsezbbm=9;m+;cout <<"(" <<zbbm<<",-)"<<endl ;int main()char zc100100; int n=0;cout <<"begin1"<<endl ;cout <<"if -2"<<endl ;cout <<"then3"<<end
22、l ;cout <<"else-_4"<<endl ;cout <<"end 5"<<endl ;cout <<"標(biāo)志符-6"<<endl ;cout <<"整型常數(shù)-7"<<e ndlcout <<"+-8"<<endl ;cout <<"*9"<<endl ;cout <<"*-10"<<
23、;endl ;cout <<"(-11"<<endl ;cout <<")-12"<<endl ;=<endl ;cout <<"=: cout <<endl ;int m=0;char a100;cout <<"請(qǐng)輸入測(cè)試語(yǔ)句:"cin . getline ( a,100, 'n');cout <<"輸出格式為:(種別編碼,單詞的屬性值 )"<<endl ; while (a
24、m!= '#')sean( a, m, zc, n); return 0;3.詞法分析器運(yùn)行結(jié)果zhir實(shí)驗(yàn)二算符優(yōu)先分析的設(shè)計(jì)與實(shí)現(xiàn)一、課程設(shè)計(jì)(綜合實(shí)驗(yàn))的目的與要求2.1算符優(yōu)先分析程序設(shè)計(jì)的實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)是為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的學(xué)生在學(xué)習(xí)編譯技術(shù)課程后,為加深對(duì)課堂教學(xué)內(nèi)容的理解,培養(yǎng)解決實(shí)際問(wèn)題能力而設(shè)置的實(shí)踐環(huán)節(jié)。通過(guò)這個(gè)實(shí)驗(yàn),使學(xué)生應(yīng)用編譯程序設(shè)計(jì)的原理和技術(shù),設(shè)計(jì)、編寫(xiě)和調(diào)試算符優(yōu)先分析程序,了解算符優(yōu)先分析程序的組 成結(jié)構(gòu),掌握實(shí)現(xiàn)通用算符優(yōu)先分析算法的方法。能使得學(xué)生在設(shè)計(jì)和調(diào)試編譯程序的能力方面有所提高。為將來(lái)設(shè)計(jì)、分析編譯程序打下良好的基礎(chǔ)。2.2算符
25、優(yōu)先分析程序設(shè)計(jì)的實(shí)驗(yàn)要求算符優(yōu)先分析屬于自下而上的分析方法, 該語(yǔ)法分析程序的輸入是終結(jié)符號(hào)串 (即單詞 符號(hào)串,以一個(gè)“ # ”結(jié)尾),如果輸入串是句子則輸出“ YES ”,否則輸出“ NO ”和錯(cuò)誤 信息。算符優(yōu)先分析過(guò)程與非終結(jié)符號(hào)無(wú)關(guān),當(dāng)由文法產(chǎn)生了優(yōu)先關(guān)系之后文法也就失去了作用,本題目給出文法的目的是為了便于對(duì)語(yǔ)法分析結(jié)果進(jìn)行驗(yàn)證。(1) 文法 設(shè)算符優(yōu)先文法 G為:EET |TTTF | FFPF |PP (E)|i說(shuō)明:i為整型常數(shù)或者為標(biāo)識(shí)符表示整型變量;使用中T用*表示。(2) 優(yōu)先關(guān)系表 設(shè)優(yōu)先關(guān)系表如表1-2所示。表1-2優(yōu)先關(guān)系表+*ti()#+l>'*
26、I>'t<1I>'i*1>'I>'()*1>'I>'#<1工、設(shè)計(jì)(實(shí)驗(yàn))正文1 .算符優(yōu)先分析流程圖2.程序代碼II third.cpp :定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#in clude"stdafx.h"#in clude<iostream>#in clude"malloc.h"using namespace stdstructLcharchar char_ch ;struct Lchar * next ;LLchar ,* p,* h,*
27、temp,* top ,* base;int table 77=1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,1,1,001,1,-1,-1,-1,-1,-1,-1,0,1,1,1,0,0,1,1,-1,其它為表示出-1,-1,-1,-1,-1,0,-1;/存儲(chǔ)算符優(yōu)先關(guān)系表,大于為,小于或等于為 char curchar ;char curcmp;int i , j ;int k;int push( char pchar)/* 入棧函數(shù) */temp=(Lchar *) malloc (sizeof (LLchar); /*分配動(dòng)
28、態(tài)內(nèi)存,返回一個(gè)指向內(nèi)存首地址的指針temp-> char_ch =pchar;temp-> next =top ;top =temp;return 0;int pop() /*出棧函數(shù)*/if (top -> char_ch != '#')top =top -> next;return 0;int change(char ch) /*將字符轉(zhuǎn)為數(shù)字,以得到算符優(yōu)先值*/int t;switch (ch)case '+' : t =0; break ;case '*' : t =1; break ;case T : t =
29、2; break ;case 'i': t =3; break ;case '(' : t =4; break ;case ')' : t =5; break ;case '#' : t =6;return t ;int fenxi ()int right =0;k=1;for (;) /*無(wú)條件的循環(huán)curchar =h->char_ch ;temp=top ;for (;)if (temp-> char_ch ='N')temp=temp->next ;k+;elsecurcmp=temp-&
30、gt; char_ch ; break;cout <<endl <<table i j <<"" <<"" temp=top ;for (;)/* 打印棧 */cout <<temp-> char_ch ;if (temp-> char_ch ='#')break;elsetemp=temp->next ;cout <<""temp=h;for (;)/*打印待比較的字符*/cout <<temp-> char_
31、ch ;if (temp-> char_ch ='#')break;elsetemp=temp-> next ;i =cha nge (curcmp);j =change(curchar );if (table i j =0)/* 算符優(yōu)先值為空 */cout <<endl <<"錯(cuò)誤"<<""<<table i j <<" " <<" " <<curcmp<<""<
32、<curchar ;right =0; break ;else/*算符優(yōu)先值不為空*/if (table i j <0)/*算符優(yōu)先值為-1,移進(jìn)*/if (curchar ='#' )/*待比較字符為空*/if ( k=2)/*當(dāng)前比較字符在棧的位置為兩個(gè)元素*/break ;elsecout <<endl <<"錯(cuò)誤"<<""<<table i j <<"” <<" "<<curcmp<<"
33、; " <<curchar ;right =0;break ;push( curchar );k=1;curcmp=curchar ;h=h-> next ;else/*算符優(yōu)先值為,歸約*/if (curcmp ='i')pop(); else pop();pop(); pop();push('N');/*當(dāng)前比較為i,出棧一次*/*當(dāng)前比較不為i,出棧三次*/*歸約到N*/k=1;return 0;int main(void )char ch;int right =1;base=(Lchar *) malloc (sizeof (
34、LLchar);base-next =NULLbase->char_ch ='#'top =base;h=( Lchar *) malloc (sizeof (LLchar);h-> next =NULLp=h;cout<<"輸入待比較字符串,以'#'結(jié)束"<<endl ;do/*輸入待比較字符串,以 #結(jié)束*/cin >>ch;if (ch='i'| ch='+' | ch='*' | ch='|'| ch='('
35、 | ch=')' | ch=# ) /* 用temp保存運(yùn)算符,并使h指向temp,即保存運(yùn)算符的位置temp=( Lchar *) malloc (sizeof ( LLchar);temp- >n ext =NULLtemp-> char_ch =ch;h-> next =temp;h=h-> next;elsecout <<"輸入錯(cuò)誤,請(qǐng)重新輸入,以#結(jié)束"<<e ndl;while (ch!= # );/*輸入待比較字符串,以 '#'結(jié)束*/p=p-> next; /*P指向待比較的字符串h=p;fenxi ();/*開(kāi)始識(shí)別*/if (right )cout <<endl <<"YES"<<endl ;elsecout <<endl
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版暖氣片購(gòu)銷(xiāo)合同正規(guī)范本
- 2025年度金融產(chǎn)品創(chuàng)新設(shè)計(jì)與推廣服務(wù)合同2篇
- 2025年度綠色環(huán)保項(xiàng)目合伙人投資合作協(xié)議2篇
- 2025年度科技創(chuàng)新產(chǎn)品采購(gòu)項(xiàng)目委托代理服務(wù)合同3篇
- 2025年度科技園區(qū)不動(dòng)產(chǎn)使用權(quán)出讓合同3篇
- 2025年訴訟保全擔(dān)保流程執(zhí)行與賠償責(zé)任合同3篇
- 二零二五年度酒店行業(yè)員工派遣合同3篇
- 養(yǎng)殖場(chǎng)2025年度保險(xiǎn)服務(wù)合同3篇
- 二零二五版財(cái)產(chǎn)保全擔(dān)保與訴訟保全合同3篇
- 2025年度龍門(mén)吊租賃及項(xiàng)目管理咨詢(xún)服務(wù)合同4篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- 2025年度生物醫(yī)藥技術(shù)研發(fā)與許可協(xié)議3篇
- 電廠檢修安全培訓(xùn)課件
- 殯葬改革課件
- 2024企業(yè)答謝晚宴會(huì)務(wù)合同3篇
- 雙方個(gè)人協(xié)議書(shū)模板
- 車(chē)站安全管理研究報(bào)告
- 瑪米亞RB67中文說(shuō)明書(shū)
- 植物和五行關(guān)系解說(shuō)
- 滬教牛津版初中英語(yǔ)七年級(jí)下冊(cè)全套單元測(cè)試題
- 因式分解法提公因式法公式法
評(píng)論
0/150
提交評(píng)論