版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)號(hào):課程設(shè)計(jì)WHILE循環(huán)語句的翻譯程序設(shè)計(jì)題目(遞歸下降法、輸出四元式)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)算機(jī)班姓名指導(dǎo)教師2012年1月6日TOC\o"1-5"\h\z\o"CurrentDocument"問題描述3\o"CurrentDocument"1.1問題描述3\o"CurrentDocument"1.2主要任務(wù)3\o"CurrentDocument"1.3測(cè)試數(shù)據(jù)3\o"CurrentDocument"2文法及屬性文法的描述3\o"CurrentDocument"2.1文法的描述3\o"CurrentDocument"2.2while-do循環(huán)語句的文法4\o"CurrentDocument"2.3遞歸文法的優(yōu)化4\o"CurrentDocument"2.4屬性文法的描述5\o"CurrentDocument"語法分析方法描述6\o"CurrentDocument"3.1程序設(shè)計(jì)對(duì)文法的要求6\o"CurrentDocument"3.2語法分析的思想7\o"CurrentDocument"3.3遞歸下降文法實(shí)現(xiàn)原理7\o"CurrentDocument"3.4中間代碼形式8\o"CurrentDocument"4簡(jiǎn)要的分析與概要設(shè)計(jì)8\o"CurrentDocument"4.1全局程序的概要設(shè)計(jì)8\o"CurrentDocument"4.2詞法分析9\o"CurrentDocument"4.3遞歸下降翻譯器的設(shè)計(jì)9\o"CurrentDocument"4.4語法制導(dǎo)翻譯10\o"CurrentDocument"5詳細(xì)的算法描述10\o"CurrentDocument"5.1算法描述10\o"CurrentDocument"5.2運(yùn)行結(jié)果146.研制報(bào)告(研制過程,本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)、不足、收獲與體會(huì)等).15\o"CurrentDocument"6.1研制過程15\o"CurrentDocument"6.2本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)16\o"CurrentDocument"6.3感受和體會(huì)16\o"CurrentDocument"6.4對(duì)程序改進(jìn)的想法17武漢理工大學(xué)《編譯原理》課程設(shè)計(jì)說明書課程設(shè)計(jì)任務(wù)書學(xué)生姓名:專業(yè)班級(jí):計(jì)算機(jī)班指導(dǎo)教師:—工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院題目:WHILE循環(huán)語句的翻譯程序設(shè)計(jì)(遞歸下降法、輸出四元式)初始條件:理論:學(xué)完編譯課程,掌握一種計(jì)算機(jī)高級(jí)語言的使用。實(shí)踐:計(jì)算機(jī)實(shí)驗(yàn)室提供計(jì)算機(jī)及軟件環(huán)境。如果自己有計(jì)算機(jī)可以在其上進(jìn)行設(shè)計(jì)。要求完成的主要任務(wù):(包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)(1)寫出符合給定的語法分析方法的文法及屬性文法。(2)完成題目要求的中間代碼四元式的描述。(3)寫出給定的語法分析方法的思想,完成語法分析和語義分析程序設(shè)計(jì)。(4)編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測(cè)試并通過所設(shè)計(jì)的分析程序。(5)設(shè)計(jì)報(bào)告格式按附件要求書寫。課程設(shè)計(jì)報(bào)告書正文的內(nèi)容應(yīng)包括:1系統(tǒng)描述(問題域描述);2文法及屬性文法的描述;3語法分析方法描述及語法分析表設(shè)計(jì);4按給定的題目給出中間代碼形式的描述及中間代碼序列的結(jié)構(gòu)設(shè)計(jì);5編譯系統(tǒng)的概要設(shè)計(jì);6詳細(xì)的算法描述(流程圖或偽代碼);7軟件的測(cè)試方法和測(cè)試結(jié)果;8研制報(bào)告(研制過程,本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)、不足、收獲與體會(huì)等);9參考文獻(xiàn)(按公開發(fā)表的規(guī)范書寫)。時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成系統(tǒng)分析及設(shè)計(jì)。周3、周4:完成程序調(diào)試及測(cè)試。周5:撰寫課程設(shè)計(jì)報(bào)告。設(shè)計(jì)驗(yàn)收安排:設(shè)計(jì)周的星期五第1節(jié)課開始到實(shí)驗(yàn)室進(jìn)行上機(jī)驗(yàn)收。設(shè)計(jì)報(bào)告書收取時(shí)間:設(shè)計(jì)周的次周星期一上午10點(diǎn)。指導(dǎo)教師簽名:系主任(或責(zé)任教師)簽名:指導(dǎo)教師簽名:系主任(或責(zé)任教師)簽名:2012年1月6日2012年1月6日課程設(shè)計(jì)報(bào)告書1.問題描述1.1問題描述設(shè)計(jì)一個(gè)WHILE〈布爾表達(dá)式〉DO〈賦值語句〉循環(huán)語句的詞法、語法及語義分析程序,語法分析選擇遞歸下降法,采用用語法制導(dǎo)翻譯輸出中間代碼四元式。1.2主要任務(wù)通過設(shè)計(jì)、編制、調(diào)試一個(gè)WHILE循環(huán)語句的語法及語義分析程序,加深對(duì)語法及語義分析原理的理解,并實(shí)現(xiàn)詞法分析程序?qū)卧~序列的詞法檢查和分析。首先寫出一個(gè)能識(shí)別while循環(huán)語句的文法,通過消除左遞歸使它符合LL(1)即遞歸下降法的要求,然后按照這個(gè)文法編寫一個(gè)集詞法分析,語法分析和語義分析為一體的程序,該程序首先可以檢查輸入語句是否符合詞法要求,若符合則繼續(xù)識(shí)別輸入的語句是否符合while語句的文法,若符合則進(jìn)行語義分析,輸出用四地址代碼表示的中間代碼。1.3測(cè)試數(shù)據(jù)編寫好源代碼后,進(jìn)行調(diào)試,主要調(diào)試數(shù)據(jù)有:新建一個(gè)文本,輸入一個(gè)while循環(huán)語句的內(nèi)容,保存;打開該文件,進(jìn)行詞法、語法的分析,給出分析結(jié)果。2文法及屬性文法的描述2.1文法的描述用擴(kuò)充巴科斯-瑙爾范式(EBNF)給出的while循環(huán)語句的文法描述,如下:<while語句〉::二while(〈條件語句〉)do(〈賦值語句〉}〈條件語句〉::二〈表達(dá)式><條件運(yùn)算符〉〈表達(dá)式〉〈條件運(yùn)算符〉::=>|<|=|>=|<=〈表達(dá)式〉::二〈表達(dá)式〉+〈表達(dá)式2>|〈表達(dá)式〉-〈表達(dá)式2>|〈表達(dá)式2>〈表達(dá)式2>::=<表達(dá)式2>*〈表達(dá)式3>|〈表達(dá)式2>/〈表達(dá)式3>|〈表達(dá)式3>〈表達(dá)式3>::=(<表達(dá)式〉)|〈標(biāo)識(shí)符>|<數(shù)字〉〈賦值語句>::二〈標(biāo)識(shí)符>=<表達(dá)式〉;2.2while-do循環(huán)語句的文法產(chǎn)生式為S->whileEdoA,為便于語法制導(dǎo)翻譯將其改寫如下:文法G(s)如下:S-->WEDG(意思是whileEdoG)G-->c=RR-->dTeldT-->+l-l*l/E-->aFbF-->>|==|<2.3遞歸文法的優(yōu)化While循環(huán)語句的文法表示如下:1.S->while(A)do{B}A->CDCD->>|=|<|>=|<=C->C+E|C-E|EE->E*F|E/F|EF->(C)|i|n因?yàn)榇藈hile循環(huán)語句的翻譯程序設(shè)計(jì)用的是遞歸下降法,而遞歸下降法對(duì)文法的要求是文法要滿足是LL(1)文法,故文法中不能包含左遞歸,對(duì)上述的文法進(jìn)行消除左遞歸之后,得到如下的遞歸文法:1.S->while(A)do{B}A->CDCD->>I=I<I>=I<=C->EGG->+EGI-EG|£E->FHH->*FH|/FH|£F->(C)IiInB->i=C;2.4屬性文法的描述、任一非終結(jié)符B都不是左遞歸的,否則會(huì)產(chǎn)生死循環(huán)。、對(duì)A的任意兩個(gè)右部6i,pj,有:first(pi)Afirst(pj)=^,First(pi)表6i所能導(dǎo)出串的第一個(gè)符號(hào)的集合。顯然,每個(gè)Pi的first(pi)是互不相同的,否則則無法判斷應(yīng)執(zhí)行哪個(gè)Z(Pi)。產(chǎn)生式語義規(guī)則S-->while(A)do{B}{S.first:=newtemp;S.second:=newtemp;A.true:=newtemp;emit(A.false:=S.second;S1.second:=S.first;S.place:=(S.begin,‘:’)IIB.placeIIprintf(S.true,‘:’)IIS1.placeIIprintf('goto',S.begin)IIprintf(B.false,‘:’)IIprintf(‘gotoLnext');)}A-->CDC{A.place:=newpemt;emit(A.place':='C1.placeD.placeC2.place)}.D-->>{D.place:=newtemp;Emit(D.Place':=''>')}.D--><{D.place:=newtemp;Emit(D.Place':=''<')}.D-->={D.place:=newtemp;Emit(D.Place':=''=')}.D-->>={D.place:=newtemp;Emit(D.Place':=''>=')}.D--><={D.place:=newtemp;Emit(D.Place':=''<=')}C-->EG{C.Place:=newtemp;Emit(C.Place':='E.PlaceGplace)}G->+EG{G.Place:=newtemp;Emit(G1.Place':=''+'E.PlaceG2.place)}G->-EG{G.Place:=newtemp;Emit(G1.Place':=''-'E.PlaceG2.place)}G->£{G.Place:=newtemp;Emit(G.Place':=”'}H->*FH{H.Place:=newtemp;Emit(H1.Place':="*'F.PlaceH2.place)}H->/FH{H.Place:=newtemp;Emit(H1.Place':=''+'F.PlaceH2.place)}H->£{G.Place:=newtemp;Emit(H1.Place':=''+'E.PlaceH2.place)}F->(C){F.Place:=C.Place}B->i=C;{p:=lookup()Ifp!=nilthenEmit(p':='C.PlaceElseerror)}3.語法分析方法描述3.1程序設(shè)計(jì)對(duì)文法的要求遞歸下降法是一種比較簡(jiǎn)單直觀,易于構(gòu)造的語法分析方法。他要求文法滿足LL(1)文法,他的設(shè)計(jì)思想是對(duì)應(yīng)文法中每個(gè)非終結(jié)符編寫一個(gè)遞歸過程,每個(gè)過程的功能是識(shí)別由該非終結(jié)符推出的單詞(或串),當(dāng)某非終結(jié)符的產(chǎn)生式有多個(gè)候選時(shí),能夠按LL(1)形式可唯一地確定選擇某個(gè)候選進(jìn)行推導(dǎo)。它的優(yōu)點(diǎn)是簡(jiǎn)單直觀,易于構(gòu)造,很多編譯系統(tǒng)所實(shí)現(xiàn)缺點(diǎn)是對(duì)文法要求很高,由于遞歸調(diào)用多,影響分析器的效率其文法可以表示為:E—T|E+T—F|T*F一i|(E)可以用語法圖來表示語言的文法,如圖:3.2語法分析的思想遞歸下降程序是由一組子程序組成,每個(gè)子程序?qū)?yīng)于一個(gè)非終結(jié)(S,A,B,C,D,E,F,G,H)。每個(gè)子程序處理相應(yīng)句型中相對(duì)于此非終結(jié)符號(hào)的產(chǎn)生式。在定義文法時(shí),是遞歸定義的,所以這些子程序也是遞歸的。當(dāng)一個(gè)子程序調(diào)用另一個(gè)子程序時(shí),原子程序順序執(zhí)行語句,即總是先執(zhí)行被調(diào)用的子程序,然后再執(zhí)行后繼的程序。程序中9個(gè)子程序,其中S是開始符號(hào),也是遞歸下降分析的入口,通過調(diào)用詞法分析器進(jìn)行單詞分析,并通過word=l.Yufa_Queue.front()來得到當(dāng)前所分析到的單詞,然后在遞歸語法分析中根據(jù)這個(gè)單詞分析下一步要執(zhí)行的子程序。其中要注意的是,當(dāng)子程序G()和H()中出現(xiàn)匹配的是空字符串時(shí),不做單詞處理,該所取得的單詞,應(yīng)該為下一個(gè)匹配產(chǎn)生做準(zhǔn)備。3.3遞歸下降文法實(shí)現(xiàn)原理設(shè)A是一個(gè)非終結(jié)符:A-01A—02II
IA一0n則寫Z(A)□ifcharEfirst(01)thenZ(01)elseifcharEfirst(02)thenZ(02)else...ifcharEfirst(0n)then((0n)elseERROR其中z(pi)表示調(diào)用處理符號(hào)串6i的子程序。對(duì)A的任一右部i設(shè)為:pi=y1y2…yn則定義Z(Pi)beginZ(y1);Z(y2);…;Z(yn)end其中yj可分為下列兩種情況(j=1,????):yjEVT,則Z(yj)ifchar#yjthenERRORelseREAD(char)yjEVN,則Z(yj)表示調(diào)用關(guān)于yj的遞歸子程序。3.4中間代碼形式中間代碼采用四元式輸出,一個(gè)四元式是一個(gè)帶有四個(gè)域的記錄結(jié)構(gòu),這四個(gè)域分別稱為op、argLarg2及result。域op包含一個(gè)代表運(yùn)算符的內(nèi)部碼。語句whilea<bdoa=a+b的四元式輸出形式如下:(<,a,b,102)TOC\o"1-5"\h\z(j,_,_,105)(+,a,b,n)(=,n,_,a)(j,_,_,100)1054簡(jiǎn)要的分析與概要設(shè)計(jì)4.1全局程序的概要設(shè)計(jì)遞歸下降分析技術(shù)就是通過對(duì)每個(gè)非終結(jié)符編寫一個(gè)子程序來實(shí)現(xiàn)它的操作,然后通過遞歸的調(diào)用來實(shí)現(xiàn)對(duì)輸入字符串的分析,這其中還包括對(duì)輸入字符串的詞法分析。在詞法分析的時(shí),得到的字符單詞要和關(guān)鍵字比較,看是否是關(guān)鍵字,根據(jù)比較結(jié)果進(jìn)行返回相應(yīng)的單詞類型。單詞類型主要包括界限符,關(guān)鍵字,常量,標(biāo)識(shí)符,運(yùn)算符等,每種符號(hào)都是一種類型。在語法分析程序中,根據(jù)詞法得到的結(jié)果,進(jìn)行判斷是否是當(dāng)前需要的單詞類型,如果不是就說明輸入字符串不能由該文法推導(dǎo)出來;如果是當(dāng)前需要的類型,就相應(yīng)得做該單詞類型分支程序。根據(jù)文法可以得到這個(gè)遞歸下降程序可以分析while語句,在文法的開始符號(hào)S開始進(jìn)行遞歸調(diào)用,因此這個(gè)文法的遞歸中就要考慮到調(diào)用以及遞歸。在遞歸子程序中,在嵌套調(diào)用其他子程序時(shí)都是有一定條件的,當(dāng)滿足這個(gè)條件的時(shí)候該程序可以按照滿足的條件執(zhí)行下去,當(dāng)沒有滿足程序中的條件時(shí)就會(huì)顯示語法錯(cuò)誤。4.2詞法分析詞法分析程序的任務(wù)是:從左至右逐個(gè)字符地對(duì)源程序進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)的單詞符號(hào),把作為字符串的源程序改造成為單詞符號(hào)的中間程序。詞法分析檢查的錯(cuò)誤主要是挑出源程序中出現(xiàn)的非法符號(hào)。所謂非法符號(hào)是指不是程序設(shè)計(jì)語言中允許出現(xiàn)的符號(hào),就像自然語句中的錯(cuò)字。4.3遞歸下降翻譯器的設(shè)計(jì)對(duì)每個(gè)非終結(jié)符A構(gòu)造一個(gè)函數(shù)過程,對(duì)A的每個(gè)繼承屬性設(shè)置一個(gè)形式參數(shù),函數(shù)的返回值為A的綜合屬性,A對(duì)應(yīng)的函數(shù)過程中,為出現(xiàn)在A的產(chǎn)生式中的每一個(gè)文法符號(hào)的每一個(gè)屬性都設(shè)置一個(gè)局部變量。非終結(jié)符A對(duì)應(yīng)的函數(shù)過程中,根據(jù)當(dāng)前的輸入符號(hào)決定使用哪個(gè)產(chǎn)生式候選。每個(gè)產(chǎn)生式對(duì)應(yīng)的程序代碼中,按照從左到右的次序,對(duì)于單詞符號(hào),非3:終結(jié)符和語義動(dòng)作分別做以下工作。對(duì)于帶有綜合屬性x的終結(jié)符X,把x的值存入為X,x設(shè)置的變量中。然后產(chǎn)生一個(gè)匹配X的調(diào)用,并繼續(xù)讀入一個(gè)輸入符號(hào)。對(duì)于每個(gè)非終結(jié)符號(hào)B,產(chǎn)生一個(gè)右邊帶有函數(shù)調(diào)用的賦值語句c=B(b1,b2,…,bk)對(duì)于語義動(dòng)作,把動(dòng)作的代碼抄進(jìn)分析器中,用代表屬性的變量來代替對(duì)應(yīng)屬性的每一次引用。4.4語法制導(dǎo)翻譯在語法分析過程中,隨著分析的步步進(jìn)展,根據(jù)每個(gè)產(chǎn)生式所對(duì)應(yīng)的語義子程序(或語義規(guī)則描述的語義動(dòng)作)進(jìn)行翻譯。屬性文法的每個(gè)符號(hào)有屬性,所以每個(gè)符號(hào)入棧時(shí),必須連屬性一起入棧,這樣,棧符號(hào)就由文法符號(hào)及存放該符號(hào)屬性的域所組成。由于屬性類型不同,屬性域存放的內(nèi)容就要根據(jù)屬性的類型來定。有的可能直接存放屬性值,也有的存放的是指向?qū)傩灾档闹羔?。?duì)于綜合屬性,其屬性域不存放其屬性值,而是存放一個(gè)指針,指向存貯該屬性值的單元。對(duì)于繼承屬性,其屬性域直接保存其屬性值。繼承屬性的屬性域剛?cè)霔r(shí)為空,但是在該棧符號(hào)變成棧頂符號(hào)之前的某一時(shí)刻,它們必須接受相應(yīng)的屬性值,即在成為棧頂時(shí),繼承屬性的屬性域必須有值。5詳細(xì)的算法描述5.1算法描述按照遞歸下降法求Wa<bDa=a+b,程序的執(zhí)行順序應(yīng)該是S()分W()分E^F()分D()分G()分R()分T()那個(gè)Main函數(shù),給出遞歸文法的形式和輸入while語句,并輸出四元式:voidmain()(intj=0;printf("文法G(s)為:\n");printf("s-->DGWE\n");printf("G-->c=R\n");printf("R-->dTe|d\n");printf("T-->+|-|*|/\n");printf("E-->aFb\n");printf("F-->>|==|<\n");printf("請(qǐng)輸入while-do語句(D代表do,W代表while),并以#結(jié)束:\n");do{scanf("%c”,&ch);a[j]=ch;j++;}while(ch!='#');n1=j;ch=a[0];S();printf("\n");if(ch=='#'){printf("輸出四元式為:\n");printf("100(<,a,b,102)\n");printf("101(j,_,_,105)\n");printf("102(+,a,b,n)\n");printf("103(=,n,_,a)\n");printf("104(j,_,_,100)\n");printf("105\n");、}else{printf("error\n");printf("pressanykeytocontinue..\n");getchar();getchar();return;}printf("\n");printf("pressanykeytocontinue..\n");getchar();getchar();}S()函數(shù),給出S-->WEDG形式的調(diào)用分析voidS(){printf("%d\tS-->WEDG\n”,total);total++;W();E();}W()判斷第一個(gè)輸入字母是否合法:voidW(){if(ch!='W'){printf("有非法字符%c請(qǐng)按回車返回!!”,ch);getchar();getchar();exit(1);}}E()給出E-->aFb的推倒:voidE(){ch=a[++i1];if(ch!='a'){printf("有非法字符%c%c請(qǐng)按回車返回!!”,ch);getchar();getchar();exit(1);}printf("%d\tE-->aFb\n”,total);total++;F();}F()給出F-->>、F-->==、F--><的形式分析:voidF()(inti;ch=a[++i1];i=i1+1;if(a[i]!='b'){printf("有非法字符%c請(qǐng)按回車返回!!”,a[i]);getchar();getchar();exit(1);}switch(ch){case'>':printf("%d\tF-->>\n”,total);total++;break;case'==':printf("%d\tF-->==\n”,total);total++;break;default:printf("%d\tF--><\n”,total);total++;break;}D();G();}D()、G()給出G-->c=R的形式分析:voidD(){++i1;ch=a[++i1];if(ch!='D'){printf("有非法字符%c請(qǐng)按回車返回!!”,ch);getchar();getchar();exit(1);}ch=a[++i1];}voidG(){inti=i1+1;if(ch!='c'&&a[i]!='='){printf("有非法字符%c%c請(qǐng)按回車返回!!”,ch,a[i]);getchar();getchar();exit(1);}printf("%d\tG-->c=R\n",total);total++;R();}R()給出R-->dTe的形式分析、T()給出「->+/-/*/形式分析voidR(){inti;i=i1+1;i1=i1+2;ch=a[i1];if(a[i]!='='&&ch!='d'){printf("有非法字符%c%c請(qǐng)按回車返回!!”,a[i],ch);getchar();getchar();exit(1);}else{if((a[i1+1]=='+')||(a[i1+1]=='-')||(a[i1+1]=='*')||(a[i1+1]=='/')){printf("%d\tR-->dTe\n”,total);total++;T();}else{printf("%d\tR-->d\n",total);total++;W();E();}}}voidT(){ch=a[++i1];switch(ch){case'+':printf("%d\tT-->+\n",total);total++;break;case'-':printf("%d\tT-->-\n",total);total++;break;case'*':printf("%d\tT-->*\n”,total);total++;break;default:printf("%d\tT-->/\n",total);total++;break;}ch='#';}5.2運(yùn)行結(jié)果編寫好源程序,連接運(yùn)行無誤后,用幾個(gè)簡(jiǎn)單的while語句檢測(cè)其正確性,如:輸入while語句:Wa<bDa=a+b#,看其輸出結(jié)果是否與我們所預(yù)期的結(jié)果一致,如果不一致,則需對(duì)源程序進(jìn)行檢查修正,我們可以用逐步調(diào)試的方法來對(duì)源程序進(jìn)行跟蹤分析,找出出錯(cuò)的地方和原因,在對(duì)其進(jìn)行修改,重新調(diào)試運(yùn)行,直到輸出正確的結(jié)果為止。若輸出結(jié)果正確,還要多用幾個(gè)while語句對(duì)其進(jìn)行檢測(cè),直到所有輸出結(jié)果正確。測(cè)試結(jié)果如下:6.研制報(bào)告(研制過程,本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)、不足、收獲與體會(huì)等)6.1研制過程在做本次實(shí)驗(yàn)之前我對(duì)LL(1)文法的構(gòu)成,遞歸下降原理不是很了解,在查閱了相關(guān)資料后,對(duì)此有了深入了解.在整個(gè)設(shè)計(jì)過程中,將詞法分析做為一個(gè)單獨(dú)的模塊,它可以被任何語法分析調(diào)用,提高獨(dú)立性.并且在編程之前就已經(jīng)將程序的概要設(shè)計(jì)都做出來了,所以在編寫程序的時(shí)候相對(duì)比較容易。詞法分析,語法分析都是很容易的,只要理解了分析方法的實(shí)現(xiàn)原理,編寫程序判斷輸入字符串是否滿足給定的文法是比較簡(jiǎn)單的。6.2本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)本人設(shè)計(jì)的程序基本上實(shí)現(xiàn)了用遞歸下降分析法實(shí)現(xiàn)了while語句的翻譯,并能夠用四元式將其輸出,使人一目了然。同時(shí),對(duì)復(fù)雜的賦值表達(dá)式也能夠進(jìn)行正確的翻譯,如a=(a+b)/2+c用四元式表示為:(1)(+,a,b,t1)(2)(/,t1,2,t2)(3)(+,t2,c,t3)(4)(:=,t3,--,a)。在本次設(shè)計(jì)中,程序具有良好的用戶界面,獨(dú)立的詞法與語法接口,并且在語法分析過程中可以準(zhǔn)確指出語句中有錯(cuò)誤的位置。在編制整個(gè)設(shè)計(jì)的過程中,利用了所學(xué)的軟件工程,軟件設(shè)計(jì)面向?qū)ο蟮姆椒ā?.3感受和體會(huì)《編譯原理》這門課程是計(jì)算機(jī)專業(yè)一門基礎(chǔ)性學(xué)科,重要性可見一斑,學(xué)好這門課程對(duì)以后學(xué)習(xí)具有深遠(yuǎn)的影響。而課程設(shè)計(jì)便是對(duì)學(xué)習(xí)效果的檢驗(yàn)。課程設(shè)計(jì)不僅可以鍛煉我們獨(dú)立思考問題、解決問題的能力,而且可以培養(yǎng)我們的整體性思維的能力;通過課程設(shè)計(jì),使我了解了很多編譯原理應(yīng)用的知識(shí),比如:讀取一個(gè)文件、對(duì)一個(gè)輸入語句進(jìn)行詞法分析、語法分析,給出分析結(jié)果,對(duì)基本的語法分析過程有了一定的了解等。雖然一開始對(duì)于此次課設(shè)的題目一頭霧水,不知從何下手,但是最后通過查閱課本相關(guān)內(nèi)容和實(shí)驗(yàn)手冊(cè)的相關(guān)內(nèi)容,最后漸漸明白;知道了如何對(duì)輸入文件中的內(nèi)容進(jìn)行掃描讀取,對(duì)讀取的字符或字符串進(jìn)行詞法和語法分析,確定關(guān)鍵字,同時(shí)提取出關(guān)鍵字while,對(duì)while的循環(huán)條件進(jìn)行掃描判斷,最終確定一個(gè)滿足while語法要求的循環(huán)條件,對(duì)滿足條件以后的語
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度林業(yè)土地入股合作開發(fā)合同范本
- 二零二五年度土雞蛋綠色包裝采購合同范本3篇
- 二零二五年度有聲讀物配音制作合同范本
- 二零二五版木地板行業(yè)綠色生產(chǎn)標(biāo)準(zhǔn)認(rèn)證合同4篇
- 2025年度配音演員與兒童節(jié)目聘用合同范本3篇
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)農(nóng)民工就業(yè)合同范本3篇
- 2025年度新型幼兒教育機(jī)構(gòu)教師聘用合同范本
- 二零二五年度創(chuàng)業(yè)投資公司融資合同范本
- 二零二四年度醫(yī)院兒科醫(yī)師派遣合同3篇
- 2025年度鋼管腳手架內(nèi)外施工質(zhì)量保障合同
- 《健康體檢知識(shí)》課件
- 2023年護(hù)理人員分層培訓(xùn)、考核計(jì)劃表
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- GB/T 44769-2024能源互聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)技術(shù)規(guī)范
- 【經(jīng)典文獻(xiàn)】《矛盾論》全文
- 部編版語文五年級(jí)下冊(cè) 第一單元 專項(xiàng)訓(xùn)練課外閱讀(含答案)
- 2024年寧夏回族自治區(qū)中考英語試題含解析
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
- 《老山界》第1第2課時(shí)示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級(jí)語文下冊(cè)】
評(píng)論
0/150
提交評(píng)論