版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
..編譯原理課程實驗報告實驗名稱:基于LEX的詞法分析器學(xué)生:寧學(xué)生學(xué)號:2013020109指導(dǎo)教師毛靜一、實驗?zāi)繕?biāo)自動構(gòu)造C-語言的的詞法分析器,要求能夠掌握編譯原理的根本理論,,理解編譯程序的根本構(gòu)造,掌握編譯各階段的根本理論和技術(shù),掌握編譯程序設(shè)計的根本理論和步驟.,增強編寫和調(diào)試高級語言源程序的能力,掌握詞法分析的根本概念和實現(xiàn)方法,熟悉C-語言的各種Token。二、實驗原理及方法Lex輸入文件由3個局部組成:定義集〔definition〕,規(guī)那么集〔rule〕和輔助程序集〔auxiliaryroutine〕或用戶程序集〔userroutine〕。這三個局部由位于新一行第一列的雙百分號分開,因此,Lex輸入文件的格式如下{definitions}%%{rules}%%{auxiliaryroutines}而且第一局部用"%{〞和"%}〞括起來。第一和第三個局部為C語言的代碼和函數(shù)定義,第二個局部為一些規(guī)那么。定義正那么表達式如下ID=letterletter*NUM=digitdigit*Letter=a|…|z|A|…|ZDigit=0|…|9Keyword=else|if|int|return|void|whileSpecialsymbol=+|-|*|/|<|<=|>|>=|==|!=|=|;|,|〔|〕|[|]|{|}|/*|*/Whitespace="〞Enter=\n在lex中的構(gòu)造letter[A-Za-z]digit[0-9]id({letter}|[_])({letter}|{digit}|[_])*error_id({digit})+({letter})+num{digit}+whitespace[\t]+enter[\n]+構(gòu)造DFA圖三、實驗容Win7下lex與yacc的安裝配置;利用ParserGenarator的詞法分析器構(gòu)造四、實驗步驟Win7下lex與yacc的安裝配置1、lex的安裝首先,下載下載flex和bison.其次,安裝完畢后,將c:\gnuwin32\lib里面的libfl.a和liby.a復(fù)制到C:\MinGW\lib里面。再者,設(shè)置環(huán)境變量。最后,測試安裝是否成功。2、使用lex生成此法分析器:新建文本文件,更改名稱為a.lex,敲入下面代碼-------詞法分析器的源代碼%{intwordCount=0;intnumcount=0;%}chars[A-Za-z\_\'\.\"]numbers([0-9])+delim[""\n\t]whitespace{delim}+words{chars}+%%while{ECHO;printf("%s\n",yytext);}{words}{wordCount++;/*increasethewordcountbyone*/}{whitespace}{/*donothing*/}([0-9])+{numcount++;/*onemaywanttoaddsomeprocessinghere*/}%%voidmain(){printf("ok1\n");yylex();/*starttheanalysis*/printf("ok2\n");printf("Noofwords:%d\nnumber:%d\n",wordCount,numcount);return0;}intyywrap(){return1;}2、新建文本文件,更名為b.c,敲入下面代碼--------此為輸入源代碼asdasdf23qa1b2!#while3、翻開菜單,運行,輸入cmd。輸入:cd文件夾路徑輸入:flexa.lex回車后生成一個文件輸入:gcc-oalex.yy.c-lfl回車后生成一個a.exe文件,現(xiàn)在我們已得到了一個簡易的詞法分析器,下面就是運用次詞法分析器,分析下b.c文件輸入:a.exe<b.c>a.txt回車后生成一個a.txt文件利用ParserGenarator的詞法分析器構(gòu)造在Lex中的規(guī)那么定義構(gòu)造定義識別保存字規(guī)那么"int"|"else"|"return"|"void"|"if"|"while"{Upper(yytext,yyleng);printf("%d行",lineno);printf("%sreservedword\n",yytext);}//保存字定義識別數(shù)字規(guī)那么{num}{printf("%d行",lineno);printf("%sNUM\n",yytext);}//數(shù)字定義識別專用符號規(guī)那么","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"{printf("%d行",lineno);printf("%sspecialsymbol\n",yytext);}//特殊符號定義識別標(biāo)識符規(guī)那么{id}{printf("%d行",lineno);printf("%sID\n",yytext);}//標(biāo)識符定義識別錯誤的字符串規(guī)那么當(dāng)開頭為數(shù)字的后面為字母的字符串時,是錯誤的標(biāo)識符。{error_id}{printf("error:%s\n",yytext);}//以數(shù)字開頭的字符自動報錯定義忽略空格規(guī)那么{whitespace}{/*skipwhitespace*/}//忽略空格定義忽略回車規(guī)那么{enter}{lineno++;}//遇到回車自動加行號忽略輔助程序集中包括主函數(shù)main〔〕和輔助函數(shù)toupper〔〕。程序代碼實現(xiàn)Lex代碼//定義集,包括頭文件和變量定義%{#include<ctype.h>#include<stdio.h>#include<string.h>#include<stdlib.h>intlineno=1;//定義行號%}//定義正那么表達式letter[A-Za-z]//字母digit[0-9]//數(shù)字id({letter}|[_])({letter}|{digit}|[_])*//開頭為字母的標(biāo)識符error_id({digit})+({letter})+//開頭為數(shù)字的錯誤標(biāo)識符num{digit}+//數(shù)字集合whitespace[\t]+//空格enter[\n]+//回車//定義識別規(guī)那么%%//識別保存字"int"|"else"|"return"|"void"|"if"|"while"{Upper(yytext,yyleng);printf("%d行",lineno);//打印行號printf("%sreservedword\n",yytext);}//輸出保存字//識別數(shù)字{num}{printf("%d行",lineno);//打印行號printf("%sNUM\n",yytext);}//輸出數(shù)字//識別專用符號","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"{printf("%d行",lineno);//打印行號printf("%sspecialsymbol\n",yytext);}//輸出特殊符號//識別標(biāo)識符{id}{printf("%d行",lineno);//打印行號printf("%sID\n",yytext);}//打印標(biāo)識符//識別錯誤的標(biāo)識符{error_id}{printf("%d行",lineno);printf("error:%s\n",yytext);}//以數(shù)字開頭的字符自動報錯//識別空格{whitespace}{/*skipwhitespace*/}//忽略空格//識別回車{enter}{lineno++;}//遇到回車自動加行號忽略%%//轉(zhuǎn)換大小寫Upper(char*s,intl){inti;for(i=0;i<l;i++){s[i]=toupper(s[i]);}}//將保存字變?yōu)榇髮?/主函數(shù)main(void){//定義輸入文件名變量charinfilename[400];printf("輸入文件名:");scanf("%s",&infilename);yyin=fopen(infilename,"r");//讀取文件printf("開場詞法分析:\n");returnyylex();}測試過程及結(jié)果Win7下lex與yacc的安裝配置測試安裝是否成功,測試結(jié)果如下圖,當(dāng)前文件夾多了兩個文件,安裝成功:(2)利用ParserGenarator的詞法分析器構(gòu)造實驗總結(jié):通過本實驗,我了解了Lex的用法,并構(gòu)造了ParserGenarator編譯器。成功將實例程
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東理工學(xué)院《街舞》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東科技學(xué)院《薪酬管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東江門幼兒師范高等??茖W(xué)?!毒坝^設(shè)計基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東機電職業(yè)技術(shù)學(xué)院《精確農(nóng)業(yè)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東行政職業(yè)學(xué)院《移動通信技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工業(yè)大學(xué)《特種材料連接》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工程職業(yè)技術(shù)學(xué)院《互聯(lián)網(wǎng)金融產(chǎn)品規(guī)劃與設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東第二師范學(xué)院《公司理財雙語》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東財貿(mào)職業(yè)學(xué)院《傳統(tǒng)造像(圓雕)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小班安全找媽媽課件
- 中石油職稱英語
- 2023年副主任醫(yī)師(副高)-神經(jīng)內(nèi)科學(xué)(副高)考試歷年真題薈萃帶答案
- 國家義務(wù)教育質(zhì)量監(jiān)測科學(xué)四年級創(chuàng)新作業(yè)測試卷【附答案】
- 硫磺安全技術(shù)說明書MSDS
- 工程施工現(xiàn)場存在的環(huán)保問題及解決建議
- 鍋爐過熱蒸汽溫度控制系統(tǒng)課程設(shè)計
- 四川省成都市2021-2022學(xué)年高一(上)期末調(diào)研考試物理試題 Word版
- 2023-2024江蘇小高考思想政治試卷及答案
- OFM軟件的一些使用技巧
- 2023-2024學(xué)年四川省樂山市小學(xué)數(shù)學(xué)四年級上冊期末模考考試題
- 工程進度管理制度
評論
0/150
提交評論