編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求_第1頁
編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求_第2頁
編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求_第3頁
編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求_第4頁
編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、編譯原理的第一次實(shí)驗(yàn)內(nèi)容及要求實(shí)驗(yàn)一 詞法分析器的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康暮鸵蠹由顚顟B(tài)轉(zhuǎn)換圖的實(shí)現(xiàn)及詞法分析器的理解。熟悉詞法分析器的主要算法及實(shí)現(xiàn)過程。要求學(xué)生掌握詞法分析器的設(shè)計(jì)過程,并實(shí)現(xiàn)詞法分析。二、實(shí)驗(yàn)基本內(nèi)容給出一個簡單語言的詞法規(guī)則,畫出狀態(tài)轉(zhuǎn)換圖,并依據(jù)狀態(tài)轉(zhuǎn)換圖編制出詞法分析程序,能從輸入的源程序中,識別出各個具有獨(dú)立意義的單詞,即基本保留字、標(biāo)識符、常數(shù)、運(yùn)算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。(遇到錯誤時(shí)可顯示“error”,然后跳過錯誤部分繼續(xù)顯示)詞法規(guī)則如下:單詞符號種別碼內(nèi)碼單詞符號種別碼內(nèi)碼auto101long121break102ne

2、w122case103operator123char104private124class105protected125const106public126continue107register127default108return128delete109short129do110sizeof130double111static131else112struct132enum113switch133extern114template134float115this135for116typedef136friend117union137if118virtual138inline119void139int

3、120while140單詞符號種別碼內(nèi)碼單詞符號種別碼內(nèi)碼201,234202235*203·236/204237%205238206(239207)240208:241209242210243211#244212;245!213標(biāo)識符300&&214常數(shù)400二進(jìn)制形式|215!216217218219|220221&222223224225*226227%228229230&231232|233三、實(shí)驗(yàn)時(shí)間:上機(jī)三次。第一次按照自己的思路設(shè)計(jì)一個程序。第二、三次在理論課學(xué)習(xí)后修改程序,使得程序結(jié)構(gòu)更加合理。四、實(shí)驗(yàn)過程和指導(dǎo):(一)準(zhǔn)備:1.閱讀課

4、本有關(guān)章節(jié)(c/c+,數(shù)據(jù)結(jié)構(gòu)),花一周時(shí)間明確語言的語法,寫出基本算法以及采用的數(shù)據(jù)結(jié)構(gòu)和要測試的程序例。2.初步編制好程序。3.準(zhǔn)備好多組測試數(shù)據(jù)。(二)上課上機(jī):將源代碼拷貝到機(jī)上調(diào)試,發(fā)現(xiàn)錯誤,再修改完善。(300,”main”)(239,”(“)(240,”)“)(242,”“(120,”int”)(300,”a”)(234,”,”)(300,”b”)(245,”;”)(300,”a”)(223,”=”)(400,”1010”)(245,”;”)(300,”b”)(223,”=”)(300,”a”)(201,”+”)(400,”10100”)(245,”;”)(243,”“)(三)程

5、序要求:程序輸入/輸出示例:輸入如下一段:main()/* 一個簡單的c+程序*/int a,b; /定義變量a = 10; b = a + 20;要求輸出如右圖。要求:(1) 剔除注解符(2) 常數(shù)為無符號整數(shù)(可增加實(shí)型數(shù),字符型數(shù)等)(四)練習(xí)該實(shí)驗(yàn)的目的和思路:程序開始變得復(fù)雜起來,可能是大家以前編過的程序中最復(fù)雜的,但相對于以后的程序來說還是簡單的。因此要認(rèn)真把握這個過渡期的練習(xí)。程序規(guī)模大概為200行及以上。通過練習(xí),掌握對字符進(jìn)行靈活處理的方法。(五)為了能設(shè)計(jì)好程序,注意以下事情:1.模塊設(shè)計(jì):將程序分成合理的多個模塊(函數(shù)/類),每個模塊(類)做具體的同一事情。2.寫出(畫出

6、)設(shè)計(jì)方案:模塊關(guān)系簡圖、流程圖、全局變量、函數(shù)接口等。3.編程時(shí)注意編程風(fēng)格:空行的使用、注釋的使用、縮進(jìn)的使用等。4程序設(shè)計(jì)語言不限,建議使用面向?qū)ο蠹夹g(shù)及可視化編程語言,如c+,vc,java,vj+等。四、上交:1.程序源代碼及可執(zhí)行文件(當(dāng)堂檢查/通過網(wǎng)絡(luò)提交);2.已經(jīng)測試通過的測試數(shù)據(jù)3組(全部存在一個文本文件中,以“第一組輸入/輸出/第二組輸入/輸出/第三組輸入/輸出”的順序存放);3.實(shí)驗(yàn)報(bào)告按照提供的模板填寫:(1) 功能描述:該程序具有什么功能?(2) 算法描述:所采用的數(shù)據(jù)結(jié)構(gòu),基本實(shí)現(xiàn)算法及某些特殊過程的實(shí)現(xiàn)算法(如在處理某個問題時(shí),你所采取的好的處理方法等)注意此處

7、不要簡單的將源程序抄上來。(源程序?qū)⒋蛴〕鰜碜鳛楦戒洠?) 程序結(jié)構(gòu)描述:函數(shù)調(diào)用格式、參數(shù)含義、返回值描述、函數(shù)功能;另外可以附加函數(shù)之間的調(diào)用關(guān)系圖、程序總體執(zhí)行流程圖及類的層次圖。(4) 實(shí)驗(yàn)總結(jié):你在編程過程中花時(shí)多少?多少時(shí)間在紙上設(shè)計(jì)?多少時(shí)間上機(jī)輸入和調(diào)試?多少時(shí)間在思考問題?遇到了哪些難題?你是怎么克服的?你對你的程序的評價(jià)?你的收獲有哪些?(5) 寫出上機(jī)調(diào)試時(shí)發(fā)現(xiàn)的問題,以及解決的過程;(6) 附上源程序(打印的)五、問題描述及基本算法提示1 狀態(tài)轉(zhuǎn)換圖的實(shí)現(xiàn)讓每個結(jié)點(diǎn)對應(yīng)一小段程序。 需引進(jìn)一組全局變量和過程 (1)ch 字符變量,存放最新讀進(jìn)的源程序字符。(2)str

8、token 字符數(shù)組,存放構(gòu)成單詞符號的字符串。 (3)getchar 子程序過程,將下一輸入字符讀到ch中,搜索指示器前移一字符位置。 (4)getbc 子程序過程,檢查ch中字符是否為空白。若是,則調(diào)用getchar直至ch中進(jìn)入一個非空白字符。(5)concat 子程序過程,將ch中的字符連接到strtoken之后。例如, 假定strtoken 原來的值為“ab”,而ch中存放著c,經(jīng)調(diào)用concat后,strtoken的值就變?yōu)椤盿bc”。(6)isletter和isdigit 布爾函數(shù)過程,它們分別判斷ch中的字符是否為字母和數(shù)字。(7)reserve 整型函數(shù)過程,對strtoke

9、n中的字符找保留字表,若它是一個保留字,則返回它的編碼,否則返回0值。(8)retract 子程序過程,將搜索指示器回調(diào)一個字符位置,將ch置為空白字符。(9)insertid 整型函數(shù)過程,將strtoken中的標(biāo)識符插入符號表,返回符號表指針。(10)insertconst 整型函數(shù)過程,將strtoken中的常數(shù)插入常數(shù)表,返回常數(shù)表指針。2詞法分析器構(gòu)造基本算法int code,value;strtoken:=“”; 置strtoken為空串getchar();getbc();if (isletter()begin while (isletter() or isdigit() begi

10、n concat();getchar(); end retract(); code : = reserve(); if(code = 0) begin value : = insertid(strtoken); return($id,value); end else return(code,-);endelse if (isdigit()begin while(isdigit() begin concat();getchar(); end retract(); value : = insertconst(strtoken); returnr($int,value);endelse if (ch = = ) retutn($assign,-);else if (ch = +) return ($plus,-);else if (ch =*)begin getchar(); if (ch = *) return ($power,-); retract() ; return ($star,-);endelse if (ch = ;) return ($semico

溫馨提示

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

評論

0/150

提交評論