




免費預(yù)覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗一 詞法分析一 實驗?zāi)康暮鸵?通過設(shè)計編制調(diào)試一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設(shè)計語言源程序進行掃描過程中將其分解為各類單詞的詞法分析方法。 編制一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即基本保留字、標(biāo)識符、常數(shù)、運算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。(遇到錯誤時可顯示“Error”,然后跳過錯誤部分繼續(xù)顯示)二 實驗內(nèi)容(1,main)(5,()(5,)(5,)(1,int)(2,a)(5,,)(2,b)(2,c)(4,=)(3, 2)(5,;)(2,a)(4,=)(3,10)(5,;)(2,b)(4,=)(2,a)(4,+)(3,20)(5,;)(2,c)(4,=)(2,a)(4,+)(2,b)(4,/)(2,c)(5, ;)(5,)1 功能描述1.1 詞法分析器的功能和輸出格式詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析器的單詞符號常常表示成以下的二元式(單詞種別碼,單詞符號的屬性值)。本實驗中,采用的是一類符號一種別碼的方式。如源程序為C語言。輸入如下一段:main()int a,b,c=2;a = 10; b = a + 20; c = a + b/c;#要求輸出如右圖。1.2 單詞的BNF表示 - -| | - - | - + - - - - =由此可知,需將單詞分為五種:關(guān)鍵字1標(biāo)識符2常數(shù)3運算符4分隔符5printfa0+,mainb1_;intc2*(ifstudent3/)thensum4=elsek5returnm6=8+”,當(dāng)前字符為,此時,分析器倒底是將其分析為大于關(guān)系運算符還是大于等于關(guān)系運算符呢?顯然,只有知道下一個字符是什么才能下結(jié)論。于是分析器讀入下一個字符+,這時可知應(yīng)將解釋為大于運算符。但此時,超前讀了一個字符+,所以要回退一個字符,詞法分析器才能正常運行。在分析標(biāo)識符,無符號整數(shù)等時也有類似情況。2 程序思路這里以開始定義的C語言子集的源程序作為詞法分析程序的輸入數(shù)據(jù)。在詞法分析中,自文件頭開始掃描源程序字符,一旦發(fā)現(xiàn)符合“單詞”定義的源程序字符串時,將它翻譯成固定長度的單詞內(nèi)部表示,并查填適當(dāng)?shù)男畔⒈?。?jīng)過詞法分析后,源程序字符串(源程序的外部表示)被翻譯成具有等長信息的單詞串(源程序的內(nèi)部表示),并產(chǎn)生兩個表格:常數(shù)表和標(biāo)識符表,它們分別包含了源程序中的所有常數(shù)和所有標(biāo)識符。0.定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。1.初始化:從文件將源程序全部輸入到字符緩沖區(qū)中。2.取單詞前:去掉多余空白。3.取單詞后:去掉多余空白(可選,看著辦)。4.取單詞:利用實驗一的成果讀出單詞的每一個字符,組成單詞,分析類型。(關(guān)鍵是如何判斷取單詞結(jié)束?取到的單詞是什么類型的單詞?)5.顯示結(jié)果。3 部分函數(shù)說明1. int lookup(char *TOKEN) 關(guān)鍵字匹配函數(shù),查詢所述程序中的關(guān)鍵字2. void out(int c,char *TOKEN) 輸出函數(shù)3. void scanner(FILE *fp) 掃描函數(shù),掃描程序中的字符串并調(diào)用lookup函數(shù)檢查是否是關(guān)鍵字,再調(diào)用out函數(shù)輸出二元組4.fseek(fp,-1,1) 回退一個字符5.zimu(ch) 字母判斷函數(shù),若ch指的是字母,返回非0,否則返回06.shuzi(ch) 數(shù)字判斷函數(shù),若ch指的是數(shù)字,返回非0,否則返回07.fgetc(fp) 從數(shù)據(jù)流中區(qū)下一個字符8.fopen 文件打開函數(shù),返回指向文件第一個字符的指針三 實驗過程記錄及實驗結(jié)果1 程序開始定義zimu(ch)和shuzi(ch)函數(shù)時,需要直接返回ch類型的值,不需要再定義變量,而我又重復(fù)定義了變量,所以程序出現(xiàn)錯誤。2 判斷單詞是關(guān)鍵字、標(biāo)識符、整型常量、分隔符還是運算符時,關(guān)系到“回退”的概念,如果沒有這個函數(shù)則運算結(jié)果會出現(xiàn)錯誤,即沒有完全顯示內(nèi)容。如下圖(a): 圖(a) 圖(b)3 實驗結(jié)果如圖(b)四 實驗總結(jié)通過此次實驗,使我意識到在做實驗之前一定要認(rèn)真復(fù)習(xí)課本內(nèi)容和老師的要求以此來確定該實驗要我們實現(xiàn)的是什么,怎么實現(xiàn),每一步的步驟都要按照流程圖認(rèn)真的去完成,做實驗不能有半點馬虎。此外,讓我了解到如何設(shè)計、編制并調(diào)試詞法分析程序,加深對詞法分析原理的理解;實驗核心的部分在于如何識別初各個單詞的所屬類別,實驗前可先規(guī)劃一下試驗流程,這樣編寫起來比較方便容易。這次的實驗使我熟悉了構(gòu)造詞法分析程序的手工方式的相關(guān)原理,也鍛煉了自己編寫算法以及C語言的能力,雖然在試驗過程中存在著很多的不足,但經(jīng)過老師以及同學(xué)的指點再加上自己的努力都一一克服了,今后我也會經(jīng)常通過自己編寫此類的代碼來提高自己的能力。附錄:源代碼#include#include#include#include/定義關(guān)鍵字char *table7=continue,main,int,if,then,else,return,TOKEN20,ch; bool zimu(char ch)/判斷是否為字母if(ch=a&ch=A&ch=0&ch=9)return true;elsereturn false;int lookup(char *TOKEN) /關(guān)鍵字匹配函數(shù),查詢所述程序中的關(guān)鍵字 int m,i;for(i=0;i) TOKEN0=ch; out(4,TOKEN); else if(ch=) TOKEN0=ch; out(4,TOKEN); else if(ch=) TOKEN0=ch; out(4,TOKEN); else if(ch=!=) TOKEN0=ch; out(4,TOKEN); /判斷分隔符并輸出else if(ch=,) TOKEN0=ch; out(5,TOKEN); else if(ch=;) TOKEN0=ch; out(5,TOKEN); else if(ch=) TOKEN0=ch; out(5,TOKEN); else if(ch=) TOKEN0=ch; out(5,TOKEN); else if(ch=() TOKEN0=ch; out(5,TOKEN); else if(ch=) TOKEN0=ch; out(5,TOKEN); main()FILE *fp;/讀取文件內(nèi)容,并返回文件指針,該指針指向文件的第一個字符if(fp=fopen(E:222.txt,r)=NULL) fprintf(stderr,error opening.n);exit(1);doch=fgetc(fp
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術(shù)課件兒童牙膏
- 美術(shù)大象介紹課件
- 家政行業(yè)知識培訓(xùn)課件
- 露天停車場消防安全知識
- 生產(chǎn)安全培訓(xùn)課程
- 安全生產(chǎn)中的三違
- 2025年模糊控制變頻空調(diào)器項目申請報告模板
- 網(wǎng)頁課件比賽獎品小學(xué)生
- 2025至2030中國導(dǎo)電碳紙市場風(fēng)險評估與未來前景展望報告
- 杭州市高級中學(xué)2022年高一新生素質(zhì)測試(分班考)模擬試卷
- IPC-A-610國際標(biāo)準(zhǔn)中英文對照(doc 17)
- JJF(建材)110-2019水泥雷氏夾膨脹測定儀校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 《納尼亞傳奇》閱讀交流(課堂PPT)
- 某航空公司教學(xué)材料之十八案例
- 縣級課題研究過程記錄
- 預(yù)制場(梁場)建設(shè)方案
- 專業(yè)課程融入思政工作的教學(xué)設(shè)計理念與方法(課堂PPT)
- 安川CDBR系列 制動單元 用戶手冊_圖文
- 長沙不動產(chǎn)登記申請書
- 鍋爐拆除施工方案(最新)
評論
0/150
提交評論