




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、裝訂線 編譯原理實(shí)驗(yàn)報(bào)告 題目: C_minus語(yǔ)言詞法分析器 學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù) 專 業(yè) xxxxxxxxxxxxxxxx 學(xué) 號(hào) xxxxxxxxxxxx 姓 名 xxxx 指導(dǎo)教師 xxxx 20xx年xx月xx日C_minus語(yǔ)言詞法分析器一、實(shí)驗(yàn)?zāi)康?1.理解詞法分析器的設(shè)計(jì)方法:利用DFA編寫相應(yīng)的程序。2.掌握手工編寫詞法分析程序的方法。3.復(fù)習(xí)熟悉以前學(xué)過(guò)的編程語(yǔ)言 4.通過(guò)實(shí)驗(yàn)了解編譯器詞法分析的工作原理二、實(shí)驗(yàn)原理 1.文法的概念,DFA的表示方法。 2.詞法分析程序的輸出和輸入:詞法分析程序的功能是讀入源程序,輸出單詞符號(hào)。單詞符號(hào)是程序設(shè)計(jì)語(yǔ)言的比本語(yǔ)法符號(hào),程序
2、設(shè)計(jì)語(yǔ)言的單詞符號(hào)一般分為如下幾種:關(guān)鍵字,標(biāo)示符,常數(shù),運(yùn)算符,界符,單詞的輸出是二元式的形式,需要知道二元式的表示方法,把得到的二元式寫入輸出文件。轉(zhuǎn)化圖如下:源程序詞法分析程序記號(hào)文件 3.熟悉單詞的描述工具,如正規(guī)文法,正規(guī)式,以及知道正規(guī)文法和正規(guī)式的等價(jià)性以及他們之間的互相轉(zhuǎn)化。熟悉把正規(guī)文法轉(zhuǎn)化為正規(guī)式,把正規(guī)式轉(zhuǎn)化為NFA以及把NFA轉(zhuǎn)為相應(yīng)的DFA,最后再把DFA簡(jiǎn)化,DFA的狀態(tài)轉(zhuǎn)化為相應(yīng)的子程序,最后得到詞法分析器4.C語(yǔ)言的基本語(yǔ)法。三、實(shí)驗(yàn)要求1、該個(gè)詞法分析器要求至少能夠識(shí)別以下幾類單詞:關(guān)鍵字:elseifintreturnvoidwhile共6個(gè),所有的關(guān)鍵字都
3、是保留字,并且必須是小寫;標(biāo)識(shí)符:識(shí)別與C語(yǔ)言詞法規(guī)定相一致的標(biāo)識(shí)符,通過(guò)下列正則表達(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é)計(jì)數(shù)法表示的常數(shù),如1.23e3,2.3e-9等;專用符號(hào):+-*/=!=,()/*/;2、分析器的輸入為由上述幾類單詞構(gòu)成的程序,輸出為該段程序的機(jī)內(nèi)表示形式,即關(guān)鍵字、運(yùn)算符、界限符變?yōu)槠鋵?duì)應(yīng)的機(jī)內(nèi)符,常數(shù)使用二進(jìn)制形式,標(biāo)識(shí)符
4、使用相應(yīng)的標(biāo)識(shí)符表指針表示。3、詞法分析器應(yīng)當(dāng)能夠指出源程序中的詞法錯(cuò)誤,如不可識(shí)別的符號(hào)、錯(cuò)誤的詞法等。四、實(shí)驗(yàn)結(jié)果(程序)及分析#include#include#include#defineN100typedefstruct charname30; intcode; intaddr;token;/存儲(chǔ)剛從文件中讀取的字符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)識(shí)符輸出文件FILE*othertxt;/其他單詞輸出文件FILE*number;interror_count;/錯(cuò)誤的個(gè)數(shù)intaddr_count;/標(biāo)識(shí)符表的指針intlineof;/行號(hào)tokencurrent;/暫時(shí)存放讀入的字符tokenzancun;symbolcurrentsymbol;symbolsymboltableN;/標(biāo)識(shí)符表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)識(shí)符輸出文件voidoutput_others();/其他單詞輸出文件voidIszhushi();voidisnumber();if(source=fopen(Source.txt,r)=NULL)/打開(kāi)源文件printf(fileopenerror/n);exit(0);if(keytxt=fopen(key.txt
7、,w)=NULL)/打開(kāi)關(guān)鍵字文件printf(fileopenerror/n);exit(0);if(badgetxt=fopen(badge.txt,w)=NULL)/打開(kāi)標(biāo)識(shí)符文件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)識(shí)符地址:,,addr_count); putchar(10);fprintf(badgetxt,,addr_count);voidoutput_others()printf(其它單詞:,,current.code);putchar(10);fprintf(othertxt,current.na
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年需求開(kāi)發(fā)面試題及答案
- 6年級(jí)上冊(cè)數(shù)學(xué)位置與方向知識(shí)點(diǎn)
- 5年數(shù)學(xué)公式口袋書
- 低密度脂肪蛋白0.6
- c++ 繼承 構(gòu)造析構(gòu)順序
- 重點(diǎn)營(yíng)業(yè)線施工方案
- 2025年上海工程技術(shù)大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)1套
- 2025年包頭職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及參考答案
- 2025年甘肅警察職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)新版
- 2025年蘇州托普信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完美版
- (已壓縮)礦產(chǎn)資源儲(chǔ)量技術(shù)標(biāo)準(zhǔn)解讀300問(wèn)-1-90
- 電工(高級(jí)技師)理論知識(shí)試題庫(kù)+參考答案
- 滬教版小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)教案 全冊(cè)
- 《新時(shí)代大學(xué)生勞動(dòng)教育與實(shí)踐》全套教學(xué)課件
- 《鐵路軌道維護(hù)》課件-道岔起道作業(yè)
- 煤礦班隊(duì)長(zhǎng)培訓(xùn)
- 精神病物理治療
- 北京化工大學(xué)《電路與模擬電子技術(shù)》2021-2022學(xué)年第一學(xué)期期末試卷
- 如何發(fā)現(xiàn)腎臟病
- GB/T 44537-2024精細(xì)陶瓷室溫?cái)嗔秧g性試驗(yàn)方法表面裂紋彎曲梁(SCF)法
- 證券分析(第6版)下部
評(píng)論
0/150
提交評(píng)論