編譯原理課程設(shè)計(jì)報(bào)告16400字_第1頁(yè)
編譯原理課程設(shè)計(jì)報(bào)告16400字_第2頁(yè)
編譯原理課程設(shè)計(jì)報(bào)告16400字_第3頁(yè)
編譯原理課程設(shè)計(jì)報(bào)告16400字_第4頁(yè)
編譯原理課程設(shè)計(jì)報(bào)告16400字_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

編譯原理課程設(shè)計(jì)報(bào)告16400字

《編譯原理》課程設(shè)計(jì)報(bào)告姓姓名:劉暢(1208060221)姓名:袁青偉(1208060222)姓名:張文(1208060223)班級(jí):軟件121班專(zhuān)業(yè):軟件工程指導(dǎo)教師:陳曉明時(shí)間:2015/6/14項(xiàng)目名稱(chēng):算術(shù)表達(dá)式的語(yǔ)法及語(yǔ)義分析貴州大學(xué)計(jì)算機(jī)科學(xué)與信息學(xué)院目錄一、課程設(shè)計(jì)目的..............................................................................3二、課程設(shè)計(jì)題目描述和要求..........................................................31、算術(shù)表達(dá)式的文法的描述:..................................................32、課程設(shè)計(jì)的要求描述:..........................................................33、實(shí)現(xiàn)的功能描述:..................................................................44、分析器的使用描述..................................................................4三、課程設(shè)計(jì)實(shí)現(xiàn)描述......................................................................41、實(shí)現(xiàn)平臺(tái)..................................................................................42、課程設(shè)計(jì)的基本思路描述......................................................53、自頂向下與遞歸下降分析方法的基本原理描述..................54、程序運(yùn)行的最后界面............................................................65、演示分析..................................................................................8四、課程設(shè)計(jì)總結(jié)............................................................................8五、參考文獻(xiàn)及小組分工..................................................................9六、核心代碼....................................................................................10一、課程設(shè)計(jì)目的通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)算術(shù)表達(dá)式的語(yǔ)法及語(yǔ)義分析程序,加深對(duì)語(yǔ)法及語(yǔ)義分析原理的理解,并實(shí)現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。加深對(duì)文法分析器的知識(shí)的掌握,掌握計(jì)算機(jī)語(yǔ)言的語(yǔ)法分析的過(guò)程。以及掌握計(jì)算機(jī)語(yǔ)言的語(yǔ)法分析程序設(shè)計(jì)與文法應(yīng)用的實(shí)現(xiàn)方法。能夠熟練運(yùn)用一種分析方法,自上而下或自下而上的方法分析一個(gè)給定的文法,我使用的是自上而下的分析方法。以及通過(guò)思考以及動(dòng)手制作分析器的過(guò)程來(lái)鍛煉自己的編程能力和邏輯思維能力,體會(huì)計(jì)算機(jī)編譯器的奧妙之處。二、課程設(shè)計(jì)題目描述和要求1、算術(shù)表達(dá)式的文法的描述:〈無(wú)符號(hào)整數(shù)〉∷=〈數(shù)字〉{〈數(shù)字〉}〈標(biāo)識(shí)符〉∷=〈字母〉{〈字母〉|〈數(shù)字〉}〈表達(dá)式〉∷=〈項(xiàng)〉{〈加法運(yùn)算符〉〈項(xiàng)〉}〈項(xiàng)〉∷=〈因子〉{〈乘法運(yùn)算符〉〈因子〉}〈因子〉∷=〈標(biāo)志符〉|〈無(wú)符號(hào)整數(shù)〉〈加法運(yùn)算符〉∷=+|-〈乘法運(yùn)算符〉∷=*|/〈字母〉∷=a|b|?|z〈數(shù)字〉∷=0|1|?|92、課程設(shè)計(jì)的要求描述:1)在遞歸下降法、LL(1)、算符優(yōu)先分析法或者LR法中選擇其中一種方法完成以上任務(wù),中間代碼選用四元式。2)編制分析程序,設(shè)計(jì)若干用例,并上機(jī)測(cè)試。3)書(shū)寫(xiě)課程設(shè)計(jì)報(bào)告。4)要求提供單步運(yùn)行,讓用戶跟蹤分析器工作的每一個(gè)步驟。3、實(shí)現(xiàn)的功能描述:1)選定一種分析方法,本分析器采用遞歸下降分析方法進(jìn)行語(yǔ)法分析2)允許用戶手動(dòng)輸入算術(shù)表達(dá)式(每個(gè)項(xiàng)的長(zhǎng)度不大于10)3)對(duì)輸入的算術(shù)表達(dá)式進(jìn)行詞法、語(yǔ)法、語(yǔ)義分析4)分別對(duì)詞法、語(yǔ)法、語(yǔ)義分析輸出相應(yīng)的執(zhí)行結(jié)果5)對(duì)語(yǔ)法分析可輸出遞歸下降分析的步驟,以及相應(yīng)步驟所使用的產(chǎn)生式,對(duì)語(yǔ)義分析采用自頂向下分析方法,可輸出四元式表示的中間代碼。4、分析器的使用描述對(duì)于一個(gè)給定的算術(shù)表達(dá)式,在此分析器中可直接點(diǎn)擊詞法分析按鈕,得到結(jié)果如左下角的第一個(gè)顯示框所示。在運(yùn)行分析器的過(guò)程中,輸入的是相對(duì)應(yīng)于文法所能夠產(chǎn)生的算術(shù)表達(dá)式進(jìn)行分析,如果是不符合文法的輸入串,那么就會(huì)提示錯(cuò)誤信息。首先在輸入表達(dá)式所對(duì)應(yīng)的編輯框中輸入所要分析的表達(dá)式,單擊詞法分析,在詞法分析輸出結(jié)果中可以查看算術(shù)表達(dá)式中使用的符號(hào)是否正確。之后單擊語(yǔ)法分析按鈕,在語(yǔ)法分析框中會(huì)出現(xiàn)相應(yīng)的遞歸下降分析步驟(包括分析過(guò)程中所使用的產(chǎn)生式)。單擊語(yǔ)義分析按鈕,在分析結(jié)果欄中,顯示以四元式表示的中間代碼。分析結(jié)束時(shí),如果所輸入的算術(shù)表達(dá)式是屬于該文法的,那么語(yǔ)法分析輸出結(jié)果框中顯示:“輸入串是該文法的一個(gè)句子!語(yǔ)法分析結(jié)束”若不屬于該文法,那么語(yǔ)法分析輸出結(jié)果框中顯示:“輸入串不是該文法的一個(gè)句子!語(yǔ)法分析結(jié)束”。如果所輸入的算術(shù)表達(dá)式中接有錯(cuò)誤的字符,那么詞法分析輸出結(jié)果框中顯示:“接錯(cuò)誤后綴,出錯(cuò)”。三、課程設(shè)計(jì)實(shí)現(xiàn)描述1、實(shí)現(xiàn)平臺(tái)MicrosoftWindows7/MicrosoftVisualC++6.02、課程設(shè)計(jì)的基本思路描述首先應(yīng)該把用文字表示的文法改寫(xiě)為數(shù)學(xué)符號(hào)。(其中關(guān)于無(wú)符號(hào)整數(shù)和標(biāo)識(shí)符,由于可以在詞法分析的過(guò)程中給以確定,所以就不必抽象其表達(dá)式。)設(shè):indentifer:標(biāo)識(shí)符digit:無(wú)符號(hào)整數(shù)E:表達(dá)式T:項(xiàng)F:因子則一個(gè)簡(jiǎn)單的術(shù)表達(dá)式的文法G1中包含以下產(chǎn)生式:E->E+E|E-E|E*E|E/E|(E)|indentifer|digit為了明確運(yùn)算符的優(yōu)先權(quán)(括號(hào)的優(yōu)先權(quán)高于乘除法,乘除法的優(yōu)先權(quán)高于加減法),可改寫(xiě)文法G1如下:改寫(xiě)后的文法G2:E->E+T|E-T|TT->T*F|T/F|FF->(E)|indentifer|digit為了避免左遞歸的發(fā)生,可進(jìn)一步將文法改成:文法G[E]:(1)E->[+|-]TG(2)G->+TG|—TG(3)G->ε(4)T->FS(5)S->*FS|/FS(6)S->ε(7)F->(E)(8)F->indentifer|digit3、自頂向下與遞歸下降分析方法的基本原理描述自頂向下分析原理:自頂向下分析就是從文法的開(kāi)始符號(hào)出發(fā),向下推導(dǎo),推出句子。分為:帶“回溯”的分析方法、不帶回溯的遞歸子程序(遞歸下降)分析方法。自頂向下分析的主旨:對(duì)任何輸入串,試圖用一切可能的辦法,從文法開(kāi)始符號(hào)(根結(jié)點(diǎn))出發(fā),自上而下、從左到右地為輸入串建立一棵分析樹(shù)。或者說(shuō),為輸入串尋找一個(gè)最左推導(dǎo)。其分析是一種試探的過(guò)程,是反復(fù)使用不同產(chǎn)生式謀求與輸入序列匹配的過(guò)程。遞歸下降分析原理:遞歸的預(yù)測(cè)分析是為每一個(gè)非終結(jié)符寫(xiě)一個(gè)分析過(guò)程,這些過(guò)程可能是遞歸的在處理輸入串時(shí),首先執(zhí)行的是對(duì)應(yīng)開(kāi)始符號(hào)的過(guò)程,然后根據(jù)產(chǎn)生式右部出現(xiàn)的非終結(jié)符,依次調(diào)用相應(yīng)的過(guò)程,這種逐步下降的過(guò)程調(diào)用序列隱含地定義了輸入串的分析樹(shù)。4、測(cè)試1.當(dāng)測(cè)試用例的算術(shù)表達(dá)式為1+4*(3+4*2+9/3)+7時(shí),測(cè)試結(jié)果截圖如下:當(dāng)測(cè)試用例的算術(shù)表達(dá)式為6+!時(shí),測(cè)試結(jié)果截圖如下:當(dāng)測(cè)試用例的算術(shù)表達(dá)式為2+(3+*)^時(shí),測(cè)試結(jié)果截圖如下:5、對(duì)句子的分析例如:對(duì)句子a+a+a*a的分析:設(shè)計(jì)該分析器的基本思路:輸入算術(shù)表達(dá)式→給出詞法分析結(jié)果→給出語(yǔ)法分析結(jié)果→給出語(yǔ)義分析結(jié)果由于程序在執(zhí)行的過(guò)程中分為詞法、語(yǔ)法、語(yǔ)義,故在程序設(shè)計(jì)的時(shí)候也按照這種方式,把整個(gè)程序分成三個(gè)大的部分,即詞法分析部分,語(yǔ)法分析部分和語(yǔ)義分析部分。而且在各個(gè)部分的內(nèi)部采用模塊化設(shè)計(jì),再分成各個(gè)小塊,各自完成其相對(duì)應(yīng)的功能。四、課程設(shè)計(jì)總結(jié)每一次課程設(shè)計(jì),都有不一樣的感受,通過(guò)課程設(shè)計(jì),對(duì)我而言,得到的不僅僅是知識(shí),更是獲得知識(shí)的方法,這顯得更加的重要。通過(guò)本次對(duì)算術(shù)表達(dá)式的語(yǔ)法分析及語(yǔ)義分析器的設(shè)計(jì),使我加深了對(duì)文法分析器的知識(shí)的掌握,掌握了計(jì)算機(jī)語(yǔ)言的語(yǔ)法分析的過(guò)程。以及掌握了計(jì)算機(jī)語(yǔ)言的語(yǔ)法分析程序設(shè)計(jì)與文法應(yīng)用的實(shí)現(xiàn)方法。能夠熟練運(yùn)用遞歸下降分析方法,我使用的是自上而下的分析方法。以及通過(guò)思考以及動(dòng)手制作分析器的過(guò)程鍛煉了自己的編程能力和邏輯思維能力。并通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)算術(shù)表達(dá)式的語(yǔ)法及語(yǔ)義分析程序,使我加深了對(duì)語(yǔ)法及語(yǔ)義分析原理的理解,并實(shí)現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。我認(rèn)為做好一個(gè)可視化的程序首先要做的工作是設(shè)計(jì)它界面,應(yīng)為一個(gè)好的界面設(shè)計(jì)好了,那么在設(shè)計(jì)界面的過(guò)程中可能會(huì)激發(fā)起編程的思路。做好一個(gè)項(xiàng)目的最主要的是要有恒心,雖然在做分析器的過(guò)程中遇到了很多的問(wèn)題,剛開(kāi)始做的時(shí)候沒(méi)有什么頭緒,經(jīng)過(guò)和同學(xué)討論和在網(wǎng)上搜集相關(guān)問(wèn)題的答案,終于基本的問(wèn)題都能夠解決。在課程設(shè)計(jì)的過(guò)程中,曾遇到過(guò)很多的問(wèn)題,如對(duì)表達(dá)式的處理,單詞的識(shí)別,還有很多細(xì)節(jié)的問(wèn)題。在遇到問(wèn)題時(shí),首先想到的是自己思考,分析過(guò)程,查找資料,上網(wǎng)百度,通過(guò)自己的努力還沒(méi)有解決時(shí),這是首先需要問(wèn)的是自己旁邊的同學(xué),和同學(xué)討論,有時(shí)還爭(zhēng)得面紅耳赤,如果最后將此不下,就再百度。這課程設(shè)計(jì)的過(guò)程中,我?guī)缀跛械膯?wèn)題處理流程就是這個(gè)樣子的。我感覺(jué)這就是一種學(xué)習(xí)的方法,在學(xué)習(xí)中遇到難題時(shí)的學(xué)習(xí)方法,要把這種學(xué)習(xí)的方法變成一種習(xí)慣,這才是每次課程設(shè)計(jì)應(yīng)達(dá)到的一種效果。課程設(shè)計(jì)提供了這樣一種學(xué)習(xí)的機(jī)會(huì),可以隨時(shí)隨地向同學(xué)請(qǐng)教,和老師交流的一個(gè)機(jī)會(huì),和同學(xué)互相討論的機(jī)會(huì)。課程設(shè)計(jì)教會(huì)了我,如何用計(jì)算機(jī)程序來(lái)處理現(xiàn)實(shí)中的實(shí)際問(wèn)題。將現(xiàn)實(shí)中的實(shí)際問(wèn)題先轉(zhuǎn)化為數(shù)學(xué)模型,然后將數(shù)學(xué)模型用程序解決的一種能力。經(jīng)過(guò)這次課程設(shè)計(jì),對(duì)語(yǔ)法分析有了更深入的了解,鞏固了上課期間所學(xué)的知識(shí)。對(duì)編譯原理的基本原理也有了一定的了解。五、參考文獻(xiàn)及小組分工【1】編譯原理??????????Alfred.Aho(哥倫比亞大學(xué))、MonicaS.Lam(斯坦福大學(xué))、RaviSethi(Avaya實(shí)驗(yàn)室)JeffreyD.Ullman?????機(jī)械工業(yè)出版社組長(zhǎng):熊齊超(1208060220)主要負(fù)責(zé)程序的組織、調(diào)試和語(yǔ)法分析和部分詞法分析。組員:劉暢(1208060221)主要負(fù)責(zé)詞法分析部分組員:袁青偉(1208060222)主要負(fù)責(zé)收集資料和撰寫(xiě)實(shí)驗(yàn)報(bào)告組員:張文(1208060223)主要負(fù)責(zé)語(yǔ)義分析六、核心代碼a.詞法分析代碼:intBds::cifa_main()//詞法分析主函數(shù){intf;cifa_head=newcifa;cifa_head->type=-1;cifa_head->next=NULL;cifa_end=cifa_head;((CMATHDlg*)m_pWnd)->InfoAdd4("單詞種類(lèi)定義如下:");((CMATHDlg*)m_pWnd)->InfoAdd4("");((CMATHDlg*)m_pWnd)->InfoAdd4("標(biāo)識(shí)符的種類(lèi)編碼1:");((CMATHDlg*)m_pWnd)->InfoAdd4("");((CMATHDlg*)m_pWnd)->InfoAdd4("常數(shù)的種類(lèi)編碼2:");((CMATHDlg*)m_pWnd)->InfoAdd4("");((CMATHDlg*)m_pWnd)->InfoAdd4("運(yùn)算的種類(lèi)編碼3:+,-,*,/");((CMATHDlg*)m_pWnd)->InfoAdd4("");((CMATHDlg*)m_pWnd)->InfoAdd4("界限符的種類(lèi)編碼4:(,),;");GetChar();notock();//空格跳過(guò)((CMATHDlg*)m_pWnd)->InfoAdd1("詞法分析結(jié)果如下:");while(nn<100&&ch!='^'){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);((CMATHDlg*)m_pWnd)->InfoAdd1("詞法分析結(jié)束.");return(1);}intBds::test()//識(shí)別相關(guān)符號(hào){chartemp[3];inti=0;inttype;switch(ch){case';'://識(shí)別';'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=4;break;}case'+'://識(shí)別'+'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=3;break;}case'-'://識(shí)別'-'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=3;break;}case'*'://識(shí)別'*'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=3;break;}case'/'://識(shí)別'/'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=3;break;}case'('://識(shí)別'('{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=4;break;}case')'://識(shí)別')'{temp[i++]=ch;GetChar();if(ch=='')temp[i++]='';temp[i]='\0';type=4;break;}default:{CStringreport;report.Format("%c",ch);((CMATHDlg*)m_pWnd)->InfoAdd1(report);((CMATHDlg*)m_pWnd)->InfoAdd1("無(wú)法識(shí)別,出錯(cuò)!");GetChar();if(ch=='')notock();return(0);}}if(ch=='')notock();//空格跳過(guò)cifa*p;p=newcifa;p->next=NULL;p->type=type;strcpy(p->word,temp);cifa_add(p);return(1);}intBds::number()//識(shí)別數(shù)字{inttype=2;inti=0;chartemp[10];while('0'<=ch&&ch<='9'){temp[i]=ch;i++;GetChar();}temp[i]='\0';if(ch=='')notock();//空格跳過(guò)elseif(ch!='^'&&ch!='+'&&ch!='-'&&ch!=';'&&ch!='*'&&ch!='/'&&ch!='('&&ch!=')'){((CMATHDlg*)m_pWnd)->InfoAdd1("接錯(cuò)誤后綴,出錯(cuò)");return(0);}if(ch=='')notock();cifa*p;p=newcifa;p->next=NULL;p->type=type;strcpy(p->word,temp);cifa_add(p);return(1);}intBds::alph()//識(shí)別標(biāo)識(shí)符{inti=0;chartemp[10];inttype=1;temp[i]=ch;i++;GetChar();while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')){temp[i]=ch;i++;GetChar();}temp[i]='\0';if(ch=='')notock();elseif(ch!='^'&&ch!='+'&&ch!='-'&&ch!=';'&&ch!='*'&&ch!='/'&&ch!='('&&ch!=')'){((CMATHDlg*)m_pWnd)->InfoAdd1("接錯(cuò)誤后綴,出錯(cuò)");return0;}cifa*p;p=newcifa;p->next=NULL;p->type=type;strcpy(p->word,temp);cifa_add(p);return(1);}cifa*Bds::cifa_add(cifa*p)//在分析結(jié)果列表尾添加一個(gè)新接點(diǎn){cifa_end->next=p;cifa_end=cifa_end->next;returncifa_head;}voidBds::cifa_disp(cifa*cifa_head)//輸出詞法分析結(jié)果{cifa*p;p=cifa_head->next;while(p!=NULL){CStringreport;report.Format("(%2d,%s)",p->type,p->word);((CMATHDlg*)m_pWnd)->InfoAdd1(report);p=p->next;}}voidBds::GetChar()//取字符{ch=str[nn];nn++;}voidBds::notock()//去掉空格{if(ch=='')while(ch=='')GetChar();}voidBds::SetWnd(CDialog*pWnd){//設(shè)置窗口指針m_pWnd=pWnd;}b.語(yǔ)法分析代碼:intBds::yufa_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;((CMATHDlg*)m_pWnd)->InfoAdd2("算術(shù)表達(dá)式的遞歸分析過(guò)程如下:");((CMATHDlg*)m_pWnd)->InfoAdd2("步驟產(chǎn)生式");advance();n=E();if(n==0){CStringreport;report.Format("%2d輸入串不是該文法的一個(gè)句子!",f);((CMATHDlg*)m_pWnd)->InfoAdd2(report);((CMATHDlg*)m_pWnd)->InfoAdd2("語(yǔ)法分析結(jié)束.");return(0);}elseif(n==1){CStringreport;report.Format("%2d輸入串是該文法的一個(gè)句子!",f);((CMATHDlg*)m_pWnd)->InfoAdd2(report);((CMATHDlg*)m_pWnd)->InfoAdd2("語(yǔ)法分析結(jié)束.");return(1);}}voidBds::advance()//取詞法分析產(chǎn)生列表中的結(jié)點(diǎn)作語(yǔ)法分析{cifa_p=cifa_p->next;}intBds::E()//E->[+|-]TG子函數(shù){intt,g;if((strcmp(cifa_p->word,"+")==0)||(strcmp(cifa_p->word,"-")==0))advance();CStringreport;report.Format("%2dE->[+|-]TG",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);t=T();if(t==0)return(0);g=G();if(g==0)return(0);elsereturn(1);}intBds::F()//F->(E)|標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)子函數(shù){intm;if((strcmp(cifa_p->word,"(")==0)){CStringreport;report.Format("%2dF->(E)",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);advance();m=E();if(m==0)return(0);if((strcmp(cifa_p->word,")")==0)){advance();return(1);}else{((CMATHDlg*)m_pWnd)->InfoAdd2("ERROR.");return(0);}}elseif(cifa_p->type==1||cifa_p->type==2)//數(shù)字或是標(biāo)識(shí)符{CStringreport;report.Format("%2dF->標(biāo)識(shí)符|無(wú)符號(hào)整數(shù)",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);advance();return(1);}elsereturn0;}intBds::S()//S->*FS|/FS|ε子函數(shù){intt,g;if(strcmp(cifa_p->word,"*")==0){CStringreport;report.Format("%2dS->*FS",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);advance();t=F();if(t==0)return0;g=S();if(g==0)return0;return(1);}elseif(strcmp(cifa_p->word,"/")==0){CStringreport;report.Format("%2dS->/FS",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);advance();t=F();if(t==0)return0;g=S();if(g==0)return0;return(1);}elseif(strcmp(cifa_p->word,"+")==0||(strcmp(cifa_p->word,"-")==0)||(strcmp(cifa_p->word,"#")==0)||(strcmp(cifa_p->word,")")==0)){CStringreport;report.Format("%2dS->ε",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);return(1);}return(0);}intBds::T()//T->FS子函數(shù){intt,g;CStringreport;report.Format("%2dT->FS",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);t=F();if(t==0)return0;g=S();if(g==0)return0;return(1);}intBds::G()//G-〉+TG|-TG|ε子函數(shù){intt,g;if(strcmp(cifa_p->word,"+")==0){CStringreport;report.Format("%2dG->+TG",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);advance();t=T();if(t==0)return(0);g=G();if(g==0)return(0);return(1);}elseif(strcmp(cifa_p->word,"-")==0){CStringreport;report.Format("%2dG->-TG",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);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){CStringreport;report.Format("%2dG->ε",f++);((CMATHDlg*)m_pWnd)->InfoAdd2(report);return(1);}return(0);}c.語(yǔ)義分析代碼:voidBds::yuyi_main(){cifa_p=cifa_head;yuyi_head=newyuyi;yuyi_head->next=NULL;yuyi_end=yuyi_head;((CMATHDlg*)m_pWnd)->InfoAdd3("語(yǔ)義分析產(chǎn)生的四元式如下:");advance();E1();yuyi_sys_disp();((CMATHDlg*)m_pWnd)->InfoAdd3("語(yǔ)義分析結(jié)束.");}yuyi*Bds::yuyi_add(yuyi*p)//在四元式鏈表末添加一個(gè)結(jié)點(diǎn){yuyi_end->next=p;yuyi_end=p;returnyuyi_head;}voidBds::yuyi_sys_disp()//輸出四元式鏈表{yuyi*p;p=yuyi_head->next;while(p!=NULL){CStringreport;report.Format("(%c,%s,%s,%s)",p->op,p->op1,p->op2,p->result);((CMATHDlg*)m_pWnd)->InfoAdd3(report);p=p->next;}//cout<<endl;}intBds::E1()//E->T+E|T-E|T{yuyi*p=newyuyi;T1();strcpy(p->op1,T_name);if(strcmp(cifa_p->word,"+")==0){advance();E1();p->next=NULL;p->op='+';

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論