版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上學(xué)生學(xué)號實驗課成績武漢理工大學(xué)學(xué) 生 實 驗 報 告 書實驗課程名稱 編譯原理 開 課 學(xué) 院 計算機科學(xué)與技術(shù)學(xué)院 指導(dǎo)老師姓名 饒文碧 學(xué) 生 姓 名 學(xué)生專業(yè)班級 學(xué)年 第學(xué)期實驗課程名稱: 編譯原理 實驗項目名稱單詞的詞法分析實驗成績實驗者專業(yè)班級 組別同組者實驗日期第一部分:實驗分析與設(shè)計(可加頁)一、 實驗內(nèi)容描述(問題域描述)完成對某一種常用高級語言(如Pascal、C語言、PL/0語言)的各類單詞進(jìn)行詞法分析,即對源程序從左到右進(jìn)行掃描,對組成源程序的字符串拼接成為單詞;并把其轉(zhuǎn)換成屬性字輸出。實驗要求:(1)選擇常用高級程序設(shè)計語言(如 Pascal
2、、C語言、PL/0語言)的源程序作為詞法分析對象。(2)根據(jù)教學(xué)要求和學(xué)生具體情況,從上列語言之一中選取它的一個適當(dāng)大小的子集,可以選取一類典型單詞,也可以盡可能使各種類型的單詞都能兼顧到。其基本要求是:對源程序從左到右進(jìn)行掃描,對組成源程序的字符串拼接成為單詞,并把其轉(zhuǎn)換成屬性字輸出。二、實驗基本原理與設(shè)計(包括實驗方案設(shè)計,實驗手段的確定,試驗步驟等,用硬件邏輯或者算法描述)#include<string.h> #include<stdio.h> #include<stdlib.h> #include<ctype.h> char *table
3、7=" ","main","int","if","then","else","return",TOKEN20,ch; /定義關(guān)鍵字 int lookup(char *TOKEN) /關(guān)鍵字匹配函數(shù) int m,i; for(i=1;i<6;i+) if(m=strcmp(TOKEN,tablei)=0) return(i); return(0); void out(int c,char *TOKEN) /輸出函數(shù) printf("(%d,%
4、s)n",c,TOKEN); void scanner(FILE *fp) /掃描函數(shù) char TOKEN20='0' char ch; int i,c; ch=fgetc(fp); /獲取字符指針fp并自動指向下一個字符 if(isalpha(ch) /判斷該字符是否是字母 TOKEN0=ch; ch=fgetc(fp); i=1; while(isalnum(ch) /判斷該字符是否是字母或數(shù)字 TOKENi=ch; i+; ch=fgetc(fp); TOKENi='0' fseek(fp,-1,1); /回退一個字符 c=lookup(TOK
5、EN); if(c=0) out(6,TOKEN); /輸出標(biāo)識符 else out(c,TOKEN); /輸出關(guān)鍵字 else if(isdigit(ch) /判斷是否是數(shù)字 TOKEN0=ch; ch=fgetc(fp); i=1; while(isdigit(ch) TOKENi=ch; i+; ch=fgetc(fp); TOKENi='0' fseek(fp,-1,1); out(7,TOKEN); else TOKEN0=ch; switch(ch) case'':out(17,TOKEN); break; case'':out(18
6、,TOKEN); break; case',':out(14,TOKEN); break; case'':out(15,TOKEN); break; case'<':ch=fgetc(fp); TOKEN1=ch; if(ch='=') out(9,TOKEN); else if(ch='>') out(11,TOKEN); else fseek(fp,-1,1); out(8,TOKEN); break; case'=':out(10,TOKEN); break; case'&
7、gt;':ch=fgetc(fp); TOKEN1=ch; if(ch='=') out(13,TOKEN); else fseek(fp,-1,1); out(12,TOKEN); break; default:printf("error!n"); break; void main() FILE *fp; if(fp=fopen("D:ZHT.txt","r")=NULL) /讀取文件內(nèi)容,并返回文件指針,該指針指向文件的第一個字符 fprintf(stderr,"error opening.n&q
8、uot;); exit(1); do ch=fgetc(fp); if(ch='#') /文件以#結(jié)尾作為掃描結(jié)束條件 break; if(ch=' ') /如果是空格,自動跳到下個字符 scanner(fp); else fseek(fp,-1,1); /如果不是空格,則回退一個字符并掃描 scanner(fp); while(ch!='#'); return(0); 三、主要儀器設(shè)備及耗材VC6.0第二部分:實驗調(diào)試與結(jié)果分析(可加頁)一、調(diào)試過程(包括調(diào)試方法描述、實驗數(shù)據(jù)記錄,實驗現(xiàn)象記錄,實驗過程發(fā)現(xiàn)的問題等)在掃描源程序字符串時一旦識
9、別出關(guān)鍵字、分隔符、標(biāo)識符、無符號常數(shù)中之一即以單詞形式各類單詞均采用相同的結(jié)構(gòu),即二元式編碼形式輸出。每次調(diào)用詞法分析程序它均能自動繼續(xù)掃描下去形成下一個單詞,直至整個源程序全部掃描完畢,并形成相應(yīng)的單詞串形式的源程序。 二、實驗結(jié)果及分析(包括結(jié)果描述、實驗現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)三、實驗小結(jié)、建議及體會1、通過本次實驗對詞法分析的過程有了進(jìn)一步的了解,并把理論知識應(yīng)用于試驗。 2、在編寫程序過程中也遇到了很多困難,不過最終通過老師同學(xué)的幫助得到了解決。為以后編程積累了一些小知識。3、程序?qū)崿F(xiàn)功能很有限,以后會繼續(xù)改進(jìn)。實驗課程名稱: 編譯原理 實驗項目名稱賦值語句的翻譯
10、程序設(shè)計實驗成績實驗者 專業(yè)班級組別同組者實驗日期第一部分:實驗分析與設(shè)計(可加頁)一、 實驗內(nèi)容描述(問題域描述)對于常用高級語言(如Pascal、C語言)的源程序從左到右進(jìn)行掃描,把其中賦值語句用所學(xué)過的語法分析方法進(jìn)行語法分析,采用最有代表性的語義分析方法將其轉(zhuǎn)換為中間代碼形式表示輸出。實驗要求(1)選擇最有代表性的語法分析方法,如算符優(yōu)先法(或簡單優(yōu)先法)、遞歸下降分析法、LL分析法和LR分析法之一進(jìn)行語法分析。(2)選擇對各種常見程序語言都通用的語法結(jié)構(gòu),如賦值語句(尤指表達(dá)式)作為分析對象,并且與所選語法分析方法要比較貼切。(3)選擇最有代表性的語義分析方法,如語法制導(dǎo)翻譯方法進(jìn)行
11、語義翻譯工作。(4)實習(xí)時間為46小時。二、 實驗基本原理與設(shè)計(包括實驗方案設(shè)計,實驗手段的確定,試驗步驟等,用硬件邏輯或者算法描述)void main()int g,h,i,j,l,p,y,z,count;int a10; /狀態(tài)棧int ni10; /存放輸出逆波蘭式的參數(shù)char b10; /符號棧char str10; /放輸入的表達(dá)式char c1;int top1,top2,top3,top,topn,m,n;char x;char copy10; /放Si,ri,看移進(jìn)還是歸約char copy110;char vt6='+','*','
12、i','(',')','#' /存放非終結(jié)符char vn='E'/存放終結(jié)符char *LR4="E->E+E", "E->E*E", "E->(E)", "E->i" ; /存放產(chǎn)生式 ; top1=0;top2=0;top3=0;top=0;topn=0; a0=0;y=a0;b0='#' count=0;z=0; cout<<"文法GE:"<<endl;
13、 cout<<'t'<<"(1) E:=E+E"<<endl; cout<<'t'<<"(2) E:=E*E"<<endl; cout<<'t'<<"(3) E:=(E)|i"<<endl; cout<<"文法GE合法句子舉例: i+i*i"<<endl; cout<<"*"<<endl; co
14、ut<<"請輸入符號串:"<<endl; cin>>str; l = strlen(str); str l = '#' for(i=l+1;i<10;i+) stri=NULL; cout<<endl<<'t'<<'t'<<"符號串"<<str<<" 分析過程如下:"<<endl; cout<<"-"<<endl; co
15、ut<< "步驟" << 't' << "狀態(tài)棧" << 't' << 't' << "符號棧" << 't' << 't' << "輸入串" << 't' <<'t'<< "ACTION "<<'t'<<
16、;"GOTO"<<endl; do y=z;m=0;n=0; /y,z指向狀態(tài)棧棧頂 g=top;j=0; x=strtop; count+; cout<<count <<'t' while(m<=top1) /輸出狀態(tài)棧 cout<<am; m=m+1; cout<<'t'<<'t' while(n<=top2) /輸出符號棧 cout<<bn; n=n+1; cout<<'t'<<'
17、;t' strtop-1 = ' ' cout<<str; /輸出輸入串 cout<<'t'<<'t' while(x!=vtj&&j<=6) j+; /vt6='+','*','i','(',')','#'存放終結(jié)符 if(j=6&&x!=vtj) cout<<endl<<"-"<<endl; cout<&l
18、t;endl<<"輸入字符串不是該文法的一個句子!"<<endl; cout<<endl<<"按任意數(shù)字或字母鍵,回車退出!"<<endl; cin>>i; return; if(actionyj=NULL)cout<<endl<<"-"<<endl; cout<<endl<<"輸入字符串不是該文法的一個句子!"<<endl; cout<<endl<<
19、;"按任意數(shù)字或字母鍵,回車退出!"<<endl; cin>>i; return; else /cout<<"y="<<y<<"j="<<j<<" "<<actionyj; strcpy(copy,actionyj); if(copy0='S') /處理移進(jìn) z=copy1-'0' top1=top1+1; top2=top2+1; atop1=z; /a10狀態(tài)棧 btop2=x; /b
20、10符號棧 x=strtop top=top+1; i=0; while(copyi!='#') cout<<copyi; i+; cout<<endl; /cout<<"y="<<y<<"j="<<j<<" "<<actionyj; if(copy0='r') /處理歸約 i=0; while(copyi!='#') cout<<copyi; i+; h=copy1-'0
21、' nitopn=h; topn=topn+1; h=h-1; strcpy(copy1,LRh);/*LR4="E->E+E#","E->E*E#","E->(E)#","E->i#"存放產(chǎn)生式 /while(copy10!=vn0) k+; /vn1='E'存放非終結(jié)符 l=strlen(LRh); top1=top1-l+3; y=atop1; /cout<<"top1="<<top1; /y=h-1; p=goto1
22、y; top2=top2-l+4; top1=top1+1; atop1=p; btop2=copy10; z=p; cout<<'t' cout<<p<<endl; while(actionyj!="acc"); cout<<"acc"<<endl;cout<<endl<<"-"<<endl; cout<<endl<<"輸入字符串是該文法的一個句子!"<<endl; cout<<"中間代碼的逆波蘭式如下:"<<endl; for(i=0;i<10;i+) if(nii=1) cout<<"EEE+="<<endl; if(nii=2) cout<<
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌2024-2025學(xué)年八年級上學(xué)期期末考試英語試卷(含解析無聽力原文及音頻)
- 2024年高端裝備制造居間合同
- 2024新車購車簡單的協(xié)議書范本
- 2024收養(yǎng)孤殘兒童協(xié)議書范本參考3篇
- 中國青年政治學(xué)院《審計學(xué)原理及實務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江中醫(yī)藥大學(xué)濱江學(xué)院《酒店規(guī)劃與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 昭通衛(wèi)生職業(yè)學(xué)院《三筆字訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 《畜禽中毒病防制》課件
- 旅游行業(yè)人力資源總結(jié)
- 2024連鎖店保密合同
- 小龍蝦高密度養(yǎng)殖試驗基地建設(shè)項目可行性研究報告
- 《橋梁工程計算書》word版
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
- 下肢皮牽引護(hù)理PPT課件(19頁PPT)
- 舒爾特方格55格200張?zhí)岣邔W⒘4紙直接打印版
- 施工單位現(xiàn)場收方記錄表
- 參會嘉賓簽到表
- 人力資源管理之績效考核 一、什么是績效 所謂績效簡單的講就是對
- 山東省醫(yī)院目錄
- 流動資金測算公式
- 機械設(shè)計制造及其自動化專業(yè)實習(xí)總結(jié)報告
評論
0/150
提交評論