資源描述:
《編譯器實(shí)驗(yàn)報(bào)告.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、篇一:編譯器實(shí)驗(yàn)報(bào)告甘肅政法學(xué)院本科學(xué)生實(shí)驗(yàn)報(bào)告姓名學(xué)院專業(yè)班級試驗(yàn)時間2012年12月20日指導(dǎo)教師及職稱實(shí)驗(yàn)成績開課時間2012-2013學(xué)年1學(xué)期實(shí)驗(yàn)課程名稱編譯原理甘肅政法學(xué)院實(shí)驗(yàn)管理中心印制篇二:編譯器測試實(shí)驗(yàn)報(bào)告深圳大學(xué)實(shí)驗(yàn)報(bào)告課程名稱:實(shí)驗(yàn)項(xiàng)目名稱:學(xué)院:計(jì)算機(jī)與軟件學(xué)院班級:實(shí)驗(yàn)時間:實(shí)驗(yàn)報(bào)告提交時間:教務(wù)處制2342、教師批改學(xué)生實(shí)驗(yàn)報(bào)告時間應(yīng)在學(xué)生提交實(shí)驗(yàn)報(bào)告時間后10日內(nèi)。5篇三:哈弗曼編譯器實(shí)驗(yàn)報(bào)告實(shí)習(xí)報(bào)告題目:哈弗曼編譯碼器班級:電信系通信工程0902班完成日期:2010.11一、需求分析1、編寫哈弗曼編譯碼器,其主要功能有(1)i:初始化(initializati
2、on)。從終端讀入字符集大小n,以及n個字符和n個權(quán)值,建立哈夫曼樹。(2)e:編碼(encoding)。利用已建好的哈夫曼樹),對從終端輸入的正文進(jìn)行編碼,然后從終端輸出。(3)d:譯碼(decoding)。利用已建好的哈夫曼樹將從終端輸入的代碼進(jìn)行譯碼,結(jié)果從終端輸出。(4)p:印哈夫曼樹(print)。將已編碼的的哈夫曼樹顯示在終端上,同時將此字符形式的哈夫曼樹。2、測試數(shù)據(jù):輸入的字符={a,b,c,d,e}其對應(yīng)的權(quán)值={5,29,7,8,14}二、概要設(shè)計(jì)1、二哈弗曼樹的抽象數(shù)據(jù)類型定義為:adthuffmantree{數(shù)據(jù)對象d:d是具有相同性質(zhì)的數(shù)據(jù)元素的集合數(shù)據(jù)關(guān)系r:若d
3、=φ,則r=φ,哈弗曼樹為空若d≠φ,則r={h},h是如下二元關(guān)系:(1)在d中存在唯一的稱為根的數(shù)據(jù)元素root,它在關(guān)系h下無前驅(qū)(2)若d-{root}≠φ,則存在d-{root}={dl,dr}。且dl∩dr=φ(3)若dl≠φ,則dl中存在唯一的數(shù)據(jù)元素xl,<root,xl>屬于h,且存在dl上的關(guān)系h1屬于h。若dr≠φ,則dr中存在唯一的數(shù)據(jù)元素xr,<root,x>屬于h,且存在dr上的關(guān)系hr屬于hh={<root,xl>,<root,x>,hl,hr};(4)(dl,{hl})是一棵符合本定義的哈弗曼樹,稱為根的左子樹。
4、(dr,{hr})是一棵符合本定義的哈弗曼樹,稱為根的右子樹。基本操作:huffmancoding(&ht,&hc,&sum)操作結(jié)果:建立哈弗曼樹并進(jìn)行編碼將編碼存放在hc中,并返回字符的個數(shù)。encoding(ht,hc,sum)操作結(jié)果:利用已建立的哈弗曼樹對字符進(jìn)行編碼decoding(huffmantreeht,huffmancodehc,intsum)操作結(jié)果:對輸入的密碼進(jìn)行翻譯print(ht,hc,sum)操作結(jié)果:打印建立好的哈弗曼樹}adthuffmantree三、詳細(xì)設(shè)計(jì)(1)哈弗曼樹每個節(jié)點(diǎn)的定義:typedefstruct{unsigned
5、intweight;unsignedintparent,lchild,rchild;charelemt[20];}htnode,*huffmantree;(2)定義指向哈弗曼樹的指針,用于動態(tài)分配空間typedefchar**huffmancode;(3)哈弗曼樹的基本操作voidhuffmancoding(huffmantree&ht,huffmancode&hc,int*w,intn){//建立哈弗曼樹,求出哈弗曼編碼if(n<=1)return;m=2*n-1;//n個葉子的huffmantree共有2n-1個結(jié)點(diǎn)ht=(huffmantree)malloc((m
6、+1)*sizeof(htnode));for(p=ht+1,i=0;i<n;++i,++p,++w)*p={*w,0,0,0};//給前n個單元初始化for(;i<=m;++i,++p)*p={0,0,0,0};//從葉子之后的存儲單元清零for(i=n+1;i<=m;++i){//建huffman樹(從n個葉子后開始存內(nèi)結(jié)點(diǎn))select(ht,i-1,s1,s2);//選擇parent為0且weight最小的兩個結(jié)點(diǎn),ht[s1].parent=i;ht[s2].parent=i;//給雙親分量賦值ht[i].lchild=s1;ht[i].rchild=s2;//給
7、合并后的內(nèi)結(jié)點(diǎn)賦孩子值ht[i].weight=ht[s1].weight+ht[s2].weight;}//以上建立了哈弗曼樹,以下求哈弗曼編碼hc=(huffmancode)malloc((n+1)*sizeof(char*));//分配n個字符編碼的頭指針向量(一維數(shù)組)cd=(char*)malloc(n*sizeof(char));//分配求編碼的臨時最長空間cd[n-1]=“