


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、編譯技術(shù)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:詞法分析學(xué)院:信息學(xué)院專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 號:姓 名:、實(shí)驗(yàn)?zāi)康?1) 理解詞法分析的功能;(2) 理解詞法分析的實(shí)現(xiàn)方法;】、實(shí)驗(yàn)容PLO的文法如下為非終結(jié)符。:=該符號的左部由右部定義,可讀作“定義為”。T 表示或,為左部可由多個(gè)右部定義。 表示花括號的語法成分可以重復(fù)。在不加上下界時(shí)可重復(fù)o到任意次數(shù),有上下界時(shí)可重復(fù)次數(shù)的限制。表示方括號的成分為任選項(xiàng)。()表示圓括號的成分優(yōu)先。上述符號為“元符號”, 文法用上述符號作為文法符號時(shí)需要用引號 括起。程序工=分程序.分程序工=變量說明部分 過程說明部分語句變量說明部分工=VAR標(biāo)識符,標(biāo)識符 : INTE
2、GER ;無符號整數(shù)工=數(shù)字?jǐn)?shù)字標(biāo)識符工=字母字母|數(shù)字過程說明部分工=過程首部分程序;過程說明部分;過程首部工=PROCEDURE標(biāo)識符;語句工=賦值語句|條件語句|過程調(diào)用語句|讀語句|寫語 句|復(fù)合語句|空賦值語句工=標(biāo)識符:=表達(dá)式復(fù)合語句工=BEGIN語句;語句END條件二=表達(dá)式關(guān)系運(yùn)算符表達(dá)式表達(dá)式工=項(xiàng)加法運(yùn)算符項(xiàng)項(xiàng)工=因子乘法運(yùn)算符因子因子工=標(biāo)識符|無符號整數(shù)|(表達(dá)式)加法運(yùn)算符二=+|-乘法運(yùn)算符工=*關(guān)系運(yùn)算符二=|=|=條件語句工=IF條件THEN語句字母工=a|b |X|Y|Z數(shù)字工=0|1|2|8|9實(shí)現(xiàn)PLO的詞法分析三、實(shí)驗(yàn)分析與設(shè)計(jì)PL0詞法分析程序是一個(gè)
3、獨(dú)立的過程,其功能是為語法語義分析提供單詞, 把輸入的字符串形式的源程序分割成一個(gè)個(gè)單詞符號傳遞給語法語義分析。其主要方法步驟為從源程序掃描下一個(gè)字符,忽略空格、換行、TAB和注釋并識別單詞,再將不同類別的單詞歸類輸出。四、實(shí)驗(yàn)的實(shí)現(xiàn)#i nclude #i nclude#i nclude#in clude#in clude#defi ne norw 11/norw-1 個(gè)關(guān)鍵字#defi ne al 20/最長的關(guān)鍵字的長度#defi ne ID norw#defi ne INT norw+1#defi ne COMMA norw+2#defi ne ENDF norw+3#defi ne
4、COLON norw+4#defi ne SEMIC norw+5#defi ne ADD norw+6#defi ne MINUS norw+7#defi ne MULTI norw+8#defi ne EVALU norw+9#defi ne LE norw+10#defi ne NE norw+11#defi ne LT norw+12#defi ne EQ norw+13#defi ne GE norw+14#defi ne GT norw+15#defi ne FLOAT norw+16char TOKEN20;字符數(shù)組用來依次存放單詞詞文的各個(gè)字符extern in t looku
5、p(char *);/ 以 TOKEN 字符串查保留字表exter n void report_error(char);/ 報(bào)告程序中的詞法錯(cuò)誤bool isalpha(char);判斷接收字符是否為字母bool isal nu m(char);/判斷接收字符是否為字母或者數(shù)字bool isdigit(char);/判斷接收字符是否為數(shù)字bool isa nno tatio n( char); 判斷接收字符是否為注釋extern char letter(char c); /用來將大寫字母轉(zhuǎn)化成小寫字母FILE* fin;FILE* fout;void sca nner()/詞法分析的主體程序,
6、對輸入的文本文件進(jìn)行詞法分析char ch;int i,c;int error=0;記錄文件中詞法錯(cuò)誤的個(gè)數(shù)ch=fgetc(fi n);/從輸入文件中讀取一個(gè)字符while(ch!=EOF)/當(dāng)從輸入文件接收的字符不是文件結(jié)束符時(shí),執(zhí)行循環(huán)if(isalpha(ch)/如果從輸入文件接收的第一個(gè)字符是字母ch=letter(ch);TOKENO=ch;ch=fgetc(fi n);i=1;while(isa Inu m(ch) ch=letter(ch);TOKENi=ch;i+;ch=fgetc(fi n);TOKENi=0;c=lookup(TOKEN);/ 查保留字表if(c=0) f
7、prin tf(fout,(%d,%s)n, ID,TOKEN); / 輸出標(biāo)識符 else fpri ntf(fout,(%d,%s)n, c,TOKEN);輸出接收單詞為保留字if(isdigit(ch)/如果從輸入文件接收的第一個(gè)字符是數(shù)字int cdot=0;統(tǒng)計(jì)小數(shù)點(diǎn)個(gè)數(shù)TOKEN0=ch;ch=fgetc(fi n);i=1;while(isdigit(ch)|ch=.)/從第二個(gè)接收字符開始,當(dāng)是數(shù)字或者是小數(shù)點(diǎn)時(shí),執(zhí)行循環(huán)if(ch=.)cdot+;TOKENi=ch;i+;ch=fgetc(fi n);重復(fù)接收字符,直到接收到非數(shù)字if(cdot=2)error+;TOKEN
8、i=0;prin tf(%s is errorn, TOKEN); break;if(isalpha(ch) /如果第二個(gè)字符是字母while(isalpha(ch) /接收完所有的字母,跳出循環(huán) TOKENi=ch;i+;ch=fgetc(fi n);TOKENi=0;erro 葉+;prin tf(%s is errorn, TOKEN);else if(cdot=0)/當(dāng)接收的字符為整型單詞時(shí)fseek(fi n,-1,1);TOKENi=0;int a,temp=0,c;for(c=0;ci;c+)a=TOKENc - 0;if(c!=0)temp=temp*10;temp=temp+
9、a;elsetemp=a;/輸出接fprin tf(fout,(%d,%d)n, INT, temp);收單詞為整數(shù)else if(cdot=1)fseek(fi n,-1,1);TOKENi=0;int a,part1=0,jc,b=0;b用來確定小數(shù)點(diǎn)所在的位置float c=0.1,part2=0.0;while(TOKENb!=.)b=b+1;for(jc=0;jcb;jc+)a=TOKENjc - 0;if(jc!=0)part1=part1*10; part1=part1+a;elsepart仁a;for(jc=b+1;jci;jc+)a=TOKENjc-0;part2=a*c+p
10、art2;c=c*0.1;fprintf(fout,(%d,%f)n, FLOAT, part1+part2);輸出接收單詞為小數(shù)else if(cdot=2)fseek(fi n,-1,1);else/如果從輸入文件接收的第一個(gè)字符既不是字母又不是數(shù)字switch(ch)/將所接收到的符號字符進(jìn)行分類,采取一符一類case:ch=fgetc(fi n);if(ch=) fprintf(fout,(%d,:=)n, EV ALU);輸出接收符號為賦值號elsech=fgetc(fi n);fseek(fi n,-1,1);/文件接收字符回推一個(gè)字符fprintf(fout,(%d,:)n, C
11、OLON);號 break;case,:fpri ntf(fout,(%d,)n, COMMA); break; 出逗號case.:fpri ntf(fout,(%d,.)n, ENDF);break; 句號case;:fpri ntf(fout,(%d,.)n, SEMIC);break;分號case+:fpri ntf(fout,(%d,+)n, ADD);break;加號case-:fpri ntf(fout,(%d,-)n, MINUS);break;減號case*:fpri ntf(fout,(%d,*)n, MULTI);break;乘號casev:ch=fgetc(fi n);i
12、f(ch=)fpri ntf(fout,(%d,)fpri ntf(fout,(%d,)n, NE);號elsefseek(fi n,-1,1);fprin tf(fout,(%d,:ch=fgetc(fi n); if(ch=)fpri ntf(fout,(%d,=)n, GE);等于號elsefseek(fi n,-1,1);fprin tf(fout,(%d,)n, GT);號break;case :break;casen:break;/輸出冒輸/輸出輸出輸出/輸出輸出/輸出小于或/輸出不等于輸出小于/輸出/輸出大于或/輸出大于caset:break;case/:ch=fgetc(fi
13、n);檢查是否為單行注釋 if(ch=/)while(ch!=n) ch=fgetc(fi n);else fseek(fi n,-1,1);prin tf(/ is errorn); error+;break;case:while(1)ch=fgetc(fi n);if(ch=) break;if(ch=EOF) fseek(fi n,-1,1); prin tf( is error n); error+;break; break;/接收非上述字符程序報(bào)/繼續(xù)從文件中讀取default:printf(%c is errorn, ch);告詞法錯(cuò)誤error+;break;ch=fgetc(f
14、i n);下一個(gè)單詞,直到文件結(jié)束/while循環(huán)結(jié)束printf(共發(fā)現(xiàn)%d個(gè)詞法錯(cuò)誤!,error); return; int lookup(char *toke n)int j;char word no rwal;strcpy(&(word10), begi n);strcpy(&(word20), e nd);strcpy(&(word30), var); strcpy(&(word40), in teger); strcpy(&(word 5 0), while);strcpy(&(word 6 0), do);strcpy(&(word70), if);strcpy(&(word8
15、0), the n); strcpy(&(word90), procedure); strcpy(&(word100), else);for(j=1;j=a&c=A&c=a&c=A&c=0&c=0&c=A &c=Z)c=c+32;return c;int main()char file name20;printf(請輸入文件名:);sea nf(%s,file name);if(fin=fopen(filename,r)=NULL) / 打開要讀取的文本文件 printf(不能打開文件.n);exit(0);printf(請輸入保存分析結(jié)果的文件名:);sca nf(%s,file name);if(fout=fope n(file name,w)=NULL)printf(不能打開文件.n);exit(0);scann er();調(diào)用詞法分析程序getchar();getchar();fclose(fi n);fclose(fout);return 0;五、運(yùn)行的結(jié)果LJ 需謹(jǐn)原理實(shí)超奚淞 1 詞Fifeslexrexel同輛人又忤名請籀入保存界析結(jié)果的文件名心如3abc is error豈 is erroTV is error is error5 is error)is e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強(qiáng)倉庫節(jié)能減排措施的行動(dòng)方案計(jì)劃
- 交通樞紐安全管理辦法計(jì)劃
- 班級親子活動(dòng)的組織與方案設(shè)計(jì)計(jì)劃
- 化工行業(yè)品牌宣傳方案計(jì)劃
- 高中信息技術(shù) 信息價(jià)值的判斷教學(xué)實(shí)錄2 滬教版必修1
- 《托里縣上海梅蘭日蘭礦業(yè)有限公司新疆托里縣科克火熱金礦Ⅱ號礦段礦產(chǎn)資源開發(fā)利用與生態(tài)保護(hù)修復(fù)方案》專家意見的認(rèn)定
- 七年級地理下冊 9.3 撒哈拉以南的非洲-黑種人的故鄉(xiāng)教學(xué)實(shí)錄 晉教版
- 化妝師職業(yè)知識培訓(xùn)課件
- 統(tǒng)編版小學(xué)語文二年級下冊《語文園地八》精美課件
- 2025年江蘇貨運(yùn)資格證答題竅門
- 2025年鐘山職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫往年題考
- 2025版七年級下冊歷史必背知識點(diǎn)
- TSG21-2025固定式壓力容器安全技術(shù)(送審稿)
- DBJ50-052-2020公共建筑節(jié)能(綠色建筑)設(shè)計(jì)標(biāo)準(zhǔn)
- 《苗圃生產(chǎn)與管理》教案-第一章 園林苗圃的建立
- 2025年眼藥水項(xiàng)目投資分析及可行性報(bào)告
- 2025年內(nèi)蒙古自治區(qū)政府工作報(bào)告測試題及參考答案
- 2024年全國中學(xué)生生物學(xué)聯(lián)賽試題及答案詳解
- 《中藥注射劑大全》課件
- 2024年全國職業(yè)院校技能大賽高職組(社區(qū)服務(wù)實(shí)務(wù)賽項(xiàng))考試題庫(含答案)
- 中醫(yī)治療男科疾病的方法
評論
0/150
提交評論