廣東海洋大學(xué)編譯原理_第1頁(yè)
廣東海洋大學(xué)編譯原理_第2頁(yè)
廣東海洋大學(xué)編譯原理_第3頁(yè)
廣東海洋大學(xué)編譯原理_第4頁(yè)
廣東海洋大學(xué)編譯原理_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、GDOU-B-11-112廣東海洋大學(xué)學(xué)生實(shí)驗(yàn)報(bào)告書(學(xué)生用表)實(shí)驗(yàn)名稱實(shí)驗(yàn)1:消除程序中的注釋 課程名稱編譯原理 課程號(hào)學(xué)院(系)數(shù)計(jì)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)科1141學(xué)生姓名 學(xué)號(hào) 實(shí)驗(yàn)地點(diǎn)科425 實(shí)驗(yàn)日期2017.2.28一、實(shí)驗(yàn)?zāi)康膶?duì)使用高級(jí)程序設(shè)計(jì)語言編寫的源程序進(jìn)行處理,為詞法分析做準(zhǔn)備二、實(shí)驗(yàn)內(nèi)容及步驟對(duì)C或C+等高級(jí)程序設(shè)計(jì)語言編寫的源程序中的/注釋和/*/注釋進(jìn)行刪除, 保留刪除后的源程序。要求以文件形式進(jìn)行保存。三、程序分析程序主要功能就是消除已經(jīng)編寫好的源程序中的注釋。在源程序中注釋有兩種形 式,一種是單行注釋,用“/”表示,另一種是多行注釋,用“/*/”表示。針

2、對(duì) 這兩種形式,程序中用了 if.else.語句加以判斷,并做出相應(yīng)的處理。在這里還有 可能出現(xiàn)另一種情況,上述兩種注釋符號(hào)可能出現(xiàn)在引號(hào)中,出現(xiàn)在引號(hào)中的注釋符 號(hào)并沒有注釋功能,因此在引號(hào)中出現(xiàn)的注釋符號(hào)不應(yīng)該被消除。所以,本實(shí)驗(yàn)所要 編寫的程序?qū)⒁秩N情況分析。在這里,我們先對(duì)引號(hào)情況進(jìn)行處理。程序在對(duì)源程序進(jìn)行一個(gè)一個(gè)字符讀取,若 是遇到第一個(gè)雙引號(hào),則用變量temp保存起來,然后在對(duì)接下來讀取到的字符,與它 將temp進(jìn)行比較,不等,則輸出到目標(biāo)文件,相等,則把第二個(gè)雙引號(hào)輸出到目標(biāo)文 件后,重新循環(huán)接下來的字符,看它屬性第幾種情況。第二種情況是對(duì)單行注釋進(jìn)行處理。若在讀取源文件時(shí)

3、,遇到了第一個(gè)斜杠,則保 存在變量temp2,此時(shí)的斜杠不可能在雙引號(hào)中,因?yàn)樗呀?jīng)經(jīng)過了第一種情況的判 斷。接下來對(duì)斜杠下一個(gè)字符進(jìn)行讀取,若為斜杠,則是單行注釋,若為*則是多行 注釋。單行注釋后的字符不輸出到目標(biāo)文件,直到遇到換行符。多行注釋則尋找*/。 若兩種情況都不是,則輸出之前保存的值,即temp2的值到目標(biāo)文件,這種情況針對(duì) 字符/,即單引號(hào)中的/。四、源代碼#include#include#include#includeusing namespace std;int main() (cout /;ifstream ifile; 建立文件流對(duì)象ofstream ofile;i(f:

4、上 機(jī)實(shí)驗(yàn)題C+ConsoleApplication2ConsoleApplication2源.cpp); /打開F盤根目錄下的文件o(f:上 機(jī)實(shí)驗(yàn)題C+ConsoleApplication2ConsoleApplication2 源.obj);if (i() | o() ( 測(cè)試打開操作是否成功cerr open n;return EXIT_FAILURE;/*返回值EXIT_FAILURE (在cstdlib庫(kù)中定義),用于向操作系統(tǒng)報(bào)* 告打開文件失敗*/char ch;ch = i();/進(jìn)行讀寫操作while(!i() (if (ch = 34) /雙引號(hào)中若出現(xiàn)“/”,雙引號(hào)中的

5、字符不消除 char temp = ch; /第一個(gè)雙引號(hào) o(ch);ch = i();while (!i() (if (ch != temp) (/尋找下一個(gè)雙引號(hào)o(ch);ch = i();else (o(ch);break;ch = i();continue; /雙引號(hào)情況結(jié)束,重新新一輪判斷if (ch = 47) ( /出現(xiàn)第一個(gè)斜杠 char temp2 = ch;ch = i();if (ch = 47) ( /單行注釋情況ch = i();while (!(ch = n)ch = i();else if (ch =*) ( /多行注釋情況while (1) (ch = i(

6、);while (!(ch = *)ch = i();ch = i();if (ch = 47)break;ch = i();else (o(temp2); /temp2保存第一個(gè)斜杠,當(dāng)上述兩種情況都沒有時(shí),將此斜 杠輸出/ch = i();/cout ch endl;o(ch);將字符寫入文件流對(duì)象中ch = i();從輸入文件對(duì)象流中讀取一個(gè)字符i();關(guān)閉文件o();cout Tq.十rbtf十一十y-r -.H1HH3H年HAhO-h/-一一 T一一一君一一一一 +-一芋一-一一+iniclude#inidudleJ ttirtcludecionianlpj4 #inc lude s

7、ing niamespce std;&7 int maln() coot if (iiile.-FailO | oi iie,-Fail() terr op&n file f3iln,j return EXIT_FMLURE;1617)char rh;ch = i-Fiio.g&tO;while(!ifileLeaf(J) j f (ch 34) char temp = ch;ofilput(ch);ch = ifilerget();Mwhile (!ifi Le.&DfO) (it fth 1= t&mor (六、實(shí)驗(yàn)小結(jié)此次實(shí)驗(yàn)實(shí)現(xiàn)了對(duì)C或C+高級(jí)語言的注釋消除。在剛開始調(diào)試這個(gè)程序時(shí),沒

8、有 考慮到一些特殊情況,如引號(hào)里面的等情況,以致出現(xiàn)了與預(yù)期不一樣的結(jié)果。后來在 程序中添加了對(duì)引號(hào)的處理,再進(jìn)行一步一步的調(diào)試。此程序直接對(duì)源程序進(jìn)行注釋消除 處理,生成目標(biāo)文件。這里用到了文件流對(duì)象,再次加深了對(duì)文件操作的印象。完成這個(gè) 實(shí)驗(yàn)后,對(duì)編譯原理也有了初步的認(rèn)識(shí)和了解。成績(jī) 指導(dǎo)教師注:請(qǐng)用A4紙書寫,不夠另附紙。日期第 頁(yè),共頁(yè)ffiric lude2 #in elude #inlude4 #ir clude% using namespace std6int main() cout 1 2 * 4 * 6/ ;j+st ream i+i le;投建H文件流對(duì)原ofstream

9、cfile;Ifile.openCf i 機(jī)實(shí)驗(yàn)趣C+ WConsoleApplic at ion 2 WCons o 1 e Ap p 1 it at ion 2 源 * cpp) j 打于 of ile.open(if: 上機(jī)t?&C+Con5oleApplication2(on5DleApplicatLon2.obj);i-F (ifileaiio 11 ofilefail) 測(cè)試打開操作是否成功 cerr . open file failnh;return EXH_FAILURE; /廠返回tlEXIT FAILURE (在cstdlib庫(kù)中定乂),用于向操作系統(tǒng)報(bào)*告扣亓文件失敗*F1& char chj th = if ile.get/進(jìn)行讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論