




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、裝訂線 編譯原理實驗報告 題目: C_minus語言詞法分析器 學(xué) 院 計算機(jī)科學(xué)與技術(shù) 專 業(yè) xxxxxxxxxxxxxxxx 學(xué) 號 xxxxxxxxxxxx 姓 名 xxxx 指導(dǎo)教師 xxxx 20xx年xx月xx日C_minus語言詞法分析器一、實驗?zāi)康?1.理解詞法分析器的設(shè)計方法:利用DFA編寫相應(yīng)的程序。2.掌握手工編寫詞法分析程序的方法。3.復(fù)習(xí)熟悉以前學(xué)過的編程語言 4.通過實驗了解編譯器詞法分析的工作原理二、實驗原理 1.文法的概念,DFA的表示方法。 2.詞法分析程序的輸出和輸入:詞法分析程序的功能是讀入源程序,輸出單詞符號。單詞符號是程序設(shè)計語言的比本語法符號,程序
2、設(shè)計語言的單詞符號一般分為如下幾種:關(guān)鍵字,標(biāo)示符,常數(shù),運算符,界符,單詞的輸出是二元式的形式,需要知道二元式的表示方法,把得到的二元式寫入輸出文件。轉(zhuǎn)化圖如下:源程序詞法分析程序記號文件 3.熟悉單詞的描述工具,如正規(guī)文法,正規(guī)式,以及知道正規(guī)文法和正規(guī)式的等價性以及他們之間的互相轉(zhuǎn)化。熟悉把正規(guī)文法轉(zhuǎn)化為正規(guī)式,把正規(guī)式轉(zhuǎn)化為NFA以及把NFA轉(zhuǎn)為相應(yīng)的DFA,最后再把DFA簡化,DFA的狀態(tài)轉(zhuǎn)化為相應(yīng)的子程序,最后得到詞法分析器4.C語言的基本語法。三、實驗要求1、該個詞法分析器要求至少能夠識別以下幾類單詞:關(guān)鍵字:elseifintreturnvoidwhile共6個,所有的關(guān)鍵字都
3、是保留字,并且必須是小寫;標(biāo)識符:識別與C語言詞法規(guī)定相一致的標(biāo)識符,通過下列正則表達(dá)式定義:ID=letter(letter|digit)*;常數(shù):NUM=digitdigit*(.digitdigit*|)(e(+|-|)digitdigit*|),letter=a|.|z|A|.|Z|,digit=0|.|9,包括整數(shù),如123等;小數(shù),如123.45等;科學(xué)計數(shù)法表示的常數(shù),如1.23e3,2.3e-9等;專用符號:+-*/=!=,()/*/;2、分析器的輸入為由上述幾類單詞構(gòu)成的程序,輸出為該段程序的機(jī)內(nèi)表示形式,即關(guān)鍵字、運算符、界限符變?yōu)槠鋵?yīng)的機(jī)內(nèi)符,常數(shù)使用二進(jìn)制形式,標(biāo)識符
4、使用相應(yīng)的標(biāo)識符表指針表示。3、詞法分析器應(yīng)當(dāng)能夠指出源程序中的詞法錯誤,如不可識別的符號、錯誤的詞法等。四、實驗結(jié)果(程序)及分析#include#include#include#defineN100typedefstruct charname30; intcode; intaddr;token;/存儲剛從文件中讀取的字符typedefstructcharname30;intcode;Keyword;typedefstruct charname30;intcode;intaddr;symbol;Keywordkey6=else,1,if,2,int,3,return,4,void,5,whe
5、re,6;charch;/接受字符FILE*source;/源文件FILE*keytxt;/關(guān)鍵字輸出文件FILE*badgetxt;/標(biāo)識符輸出文件FILE*othertxt;/其他單詞輸出文件FILE*number;interror_count;/錯誤的個數(shù)intaddr_count;/標(biāo)識符表的指針intlineof;/行號tokencurrent;/暫時存放讀入的字符tokenzancun;symbolcurrentsymbol;symbolsymboltableN;/標(biāo)識符表voiderror(inti);voidmain()voidscan();error_count=0;addr
6、_count=0;error_count=0;lineof=0;scan();voidscan()inti=0;voidiskeyword();/判斷關(guān)鍵字voidisOthers()/判斷其他單詞voidoutput_1();/關(guān)鍵字輸出文件voidoutput_2();/標(biāo)識符輸出文件voidoutput_others();/其他單詞輸出文件voidIszhushi();voidisnumber();if(source=fopen(Source.txt,r)=NULL)/打開源文件printf(fileopenerror/n);exit(0);if(keytxt=fopen(key.txt
7、,w)=NULL)/打開關(guān)鍵字文件printf(fileopenerror/n);exit(0);if(badgetxt=fopen(badge.txt,w)=NULL)/打開標(biāo)識符文件printf(fileopenerror/n);exit(0);if(othertxt=fopen(others.txt,w)=NULL)printf(fileopenerrorn);exit(0); if(number=fopen(number.txt,w)=NULL)printf(fileopenerrorn);exit(0); ch=fgetc(source); while(ch!=EOF) for(i=
8、0;i=a&ch=A&ch=0&ch=a)&(ch=A)&(ch0&ch9)i=ch;i+;ch=fgetc(source);zancun=current;for(i=0;i6;i+)for(j=0;j30;j+)if(j=j)h=0;elseh=1;break; if(h=0)break;if(h=0) current.code=keyi.code;output_1();elsestrcpy(symboltableaddr_,);symboltableaddr_count.code=
9、10;symboltableaddr_count.addr=addr_count; addr_count+;output_2();voidisOthers()charch1;inti; for(i=0;i30;i+) i=0; switch(ch) case+: 0=+; current.code=13; current.addr=-1; output_others(); break; case-: 0=-; current.code=14; current.addr=-1; output_others(); break;
10、 case*: 0=*; current.code=15; current.addr=-1; output_others(); break; case/: 0=/; current.code=16; current.addr=-1; output_others(); break; case: ch1=fgetc(source); if(ch1=) 0=; 1=;current.code=17; output_others(); break; else fseek(source,-1,1); curr
11、0=: ch1=fgetc(source); if(ch1=) 0=; 1=; current.code=19; output_others(); break; else fseek(source,-1,1); 0=; current.code=20;output_others(); break; case=:ch1=fgetc(source);if(ch1=)0=;1=;current.code=21;current.addr=-1;output_other
12、s();break;0=;current.code=22;current.addr=-1;output_others();fseek(source,-1,1);break;case!:ch1=fgetc(source);if(ch1=)0=!;1=;current.code=23;current.addr=-1;output_others();break;elsefseek(source,-1,1);0=!;current.code=24;current.addr=-1;output_oth
13、ers();break;case;:0=;current.code=25;current.addr=-1;output_others();break;case,:0=,;current.code=26;current.addr=-1;output_others();case(:inti=ftell(source);charch1=ch; charch2;while(ch!=)ch=fgetc(source);if(ch=)0=ch1;1=ch;current.code=27;current.addr
14、=-1;output_others();fseek(source,i,0);ch2=fgetc(source);ch2=fgetc(source);break;elseerror_count+;error(1);fseek(source,i,0);ch2=fgetc(source);ch2=fgetc(source);break;case:0=;current.code=28;current.addr=-1;output_others();break;case:0=;current.code=28;current.addr=-1;output_o
15、thers();break;case: 0=; current.code=29;current.addr=-1;output_others();break;case: 0=;current.code=29;current.addr=-1;output_others();break;case10: lineof+; break;voidIszhushi()charch1;ch1=ch;ch=fgetc(source);if(ch=*)for(;)ch=fgetc(source);if(ch=EOF) error(2);break;if(ch=*)c
16、h1=ch;ch=fgetc(source);if(ch=)ch=fgetc(source);break;elseerror_count+;error(2);voidisnumber()intk=0;voidoutput_number();while(ch=0&ch=9)k+=ch;ch=fgetc(source);current.code=11;output_number();voidoutput_1()printf(關(guān)鍵字:,,current.code);putchar(10);fprintf(keytxt,,current.code);voidoutput_2() printf(標(biāo)識符地址:,,addr_count); putchar(10);fprintf(badgetxt,,addr_count);voidoutput_others()printf(其它單詞:,,current.code);putchar(10);fprintf(othertxt,current.na
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)競聘面試題及答案
- 浙江社工考試試題及答案
- 教材法考試試題及答案
- 小學(xué)等級測試題及答案
- 新能源汽車技術(shù)評審與投資考試題及答案
- 護(hù)理三基兒科試題及答案
- 英語試卷及答案七年級下
- 音樂七年級試卷及答案
- 時間計算測試題及答案
- 家具設(shè)計中的歸屬感與舒適體驗研究試題及答案
- 江蘇省新高考基地學(xué)校2024-2025學(xué)年高三下學(xué)期第二次大聯(lián)考化學(xué)試卷(含答案)
- 試崗期協(xié)議書模板
- 檔案法律法規(guī)知識試題及答案
- 第四單元《比例尺》(單元設(shè)計教案)-2024-2025學(xué)年六年級下冊數(shù)學(xué)青島版
- 2025人教版七年級下冊生物期末學(xué)業(yè)質(zhì)量檢測試卷(含答案)
- 2024年同等學(xué)力申碩《英語》試題真題及答案
- 七年級道德與法治學(xué)情分析
- 清洗清潔功能無人機(jī)
- 富士數(shù)碼相機(jī)finepix-S205EXR使用說明書簡體中文版
- 【MOOC】《學(xué)術(shù)交流英語》(東南大學(xué))章節(jié)中國大學(xué)慕課答案
- 環(huán)保公司簡介范文6篇范文
評論
0/150
提交評論