詞法分析器設(shè)計(jì)_第1頁(yè)
詞法分析器設(shè)計(jì)_第2頁(yè)
詞法分析器設(shè)計(jì)_第3頁(yè)
詞法分析器設(shè)計(jì)_第4頁(yè)
詞法分析器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

詞法分析器設(shè)計(jì)詞法分析器設(shè)計(jì)詞法分析器設(shè)計(jì)V:1.0精細(xì)整理,僅供參考詞法分析器設(shè)計(jì)日期:20xx年X月學(xué)號(hào)《編譯原理》實(shí)驗(yàn)1:詞法分析器設(shè)計(jì)學(xué)生姓名專業(yè)、班級(jí)指導(dǎo)教師成績(jī)計(jì)算機(jī)與信息工程學(xué)院2018年11月20日一、實(shí)驗(yàn)?zāi)康睦斫庠~法分析程序的功能。熟悉詞法分析程序的設(shè)計(jì)原理和構(gòu)造方法。理解詞法分析程序輸出單詞的形式。設(shè)計(jì)實(shí)現(xiàn)針對(duì)簡(jiǎn)單語(yǔ)言的一個(gè)詞法分析程序。二、實(shí)驗(yàn)要求根據(jù)書P199給出的簡(jiǎn)單語(yǔ)言的詞法和各單詞符號(hào)種別碼表,編寫C或C++語(yǔ)言源程序,實(shí)現(xiàn)針對(duì)該簡(jiǎn)單語(yǔ)言的詞法分析器;獨(dú)立做實(shí)驗(yàn),輸入、調(diào)試所編程序;實(shí)驗(yàn)結(jié)束后,根據(jù)實(shí)驗(yàn)報(bào)告模板編寫實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)內(nèi)容和步驟用VisualC++作為實(shí)驗(yàn)開發(fā)環(huán)境,創(chuàng)建一個(gè)Win32ConsoleApplication工程,工程名為你的學(xué)號(hào),添加三個(gè)文件:(1)存儲(chǔ)結(jié)構(gòu)定義:以為文件名;(2)基本操作和算法:以為文件名;(3)調(diào)用基本操作的主程序:以為文件名。編寫程序:(1)文件定義單詞符號(hào)的二元組結(jié)構(gòu)、全局變量、關(guān)鍵字表的結(jié)束標(biāo)志等。(2)文件實(shí)現(xiàn)詞法掃描算法scanner及其所需的各種基本操作算法。(3)文件調(diào)用scanner算法,實(shí)現(xiàn)詞法分析器的功能。源程序代碼:==============================================================#define_KEY_WORD_END"waitingforyourexpanding"typedefstruct{ inttypenum; char*word;}WORD;=============================================================#include""charinput[50]="";chartoken[255]="";intp_input;intp_token;charch;char*rwtab[]={"begin","if","then","while","do","end",_KEY_WORD_END};程序示意圖eq\o\ac(○,)關(guān)鍵字表的初值。關(guān)鍵字作為特殊標(biāo)識(shí)符處理,把它們預(yù)先安排在一張表格中(稱為關(guān)鍵字表),當(dāng)掃描程序識(shí)別出標(biāo)識(shí)符時(shí),查關(guān)鍵字表。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標(biāo)識(shí)符。關(guān)鍵字表為一個(gè)字符串?dāng)?shù)組,其描述如下:Char*rwtab[6]={“begin”,“if”,“then”,“while”,“do”,“end”};置初值置初值調(diào)用掃描子程序調(diào)用掃描子程序輸出單詞二元組輸出單詞二元組輸入串結(jié)束否輸入串結(jié)束 是結(jié)束結(jié)束eq\o\ac(○,)程序需要用到的主要變量為syn,token和sum。2.掃描子程序的算法思想首先設(shè)置3個(gè)變量:(1)token用來存放構(gòu)成單詞符號(hào)的字符串;(2)sum用來存放整型單詞(3)syn用來存放單詞符號(hào)的種別碼。(2)畫出詞法掃描算法scanner識(shí)別簡(jiǎn)單語(yǔ)言的狀態(tài)轉(zhuǎn)換圖DFA(可手畫再插入圖片)(3)解釋子程序reverse的每句代碼含義reserve函數(shù)的作用是遍歷關(guān)鍵字表格,判斷當(dāng)前存入token的字符串是否是關(guān)鍵字eq\o\ac(○,)首先先設(shè)定一個(gè)初值為0的變量i(存在于while外部,會(huì)因?yàn)檠h(huán)內(nèi)部的操作而進(jìn)行改變)eq\o\ac(○,)while條件內(nèi)部完整代碼應(yīng)為:while(strcmp(rwtab[i],_KEY_WORD_END)!=0),strcmp函數(shù)的作用是判斷兩個(gè)字符串是否相等:設(shè)兩個(gè)字符串str1,str2,若str1==str2,則返回零;若str1<str2,則返回負(fù)數(shù);若str1>str2,則返回正數(shù)。已知關(guān)鍵字表格中最后一個(gè)元素為_KEY_WORD_END,所以這行代碼的意思就是,從關(guān)鍵字表格中第一個(gè)字符串開始遍歷(循環(huán)一次后i++),遍歷到最后一個(gè)通過strcmp函數(shù)運(yùn)算等于零不滿足循環(huán)條件所以跳出循環(huán)。eq\o\ac(○,)循環(huán)體內(nèi)部if當(dāng)前字符串和遍歷到的關(guān)鍵字進(jìn)行比較,兩者相等時(shí)滿足條件(!0!=0),相等時(shí)返還i+1。eq\o\ac(○,)最后返還10(關(guān)鍵字的種別碼)(4)針對(duì)文件中main函數(shù)的while(over<1000&&over!=-1)語(yǔ)句,解釋over的含義及何時(shí)over==-1while(over<1000&&over!=-1)當(dāng)while中的語(yǔ)句滿足條件時(shí)繼續(xù)循環(huán),循環(huán)體內(nèi)內(nèi)容為:讀取一個(gè)新單詞,并輸出他的(種別碼,單詞自身的值)的二元組,并把當(dāng)前單詞的種別碼的值賦值給over;當(dāng)出現(xiàn)了字符串的終結(jié)位置位1000,錯(cuò)誤操作(輸入了不可識(shí)別的單詞符號(hào))置為-1,輸入‘#’與之對(duì)應(yīng)的當(dāng)scanner函數(shù)中出現(xiàn)這種情況時(shí)跳出循環(huán),程序結(jié)束。五、實(shí)驗(yàn)結(jié)果針對(duì)輸入的源程序,經(jīng)詞法分析后,給出實(shí)驗(yàn)結(jié)果截圖。(1)源程序beginx:=9;ifx>0thenx:=2*x+1/3;end#實(shí)驗(yàn)結(jié)果截圖:(2)輸入一段此簡(jiǎn)單語(yǔ)言的源程序,要求每人不同,且包含單詞符號(hào)while<>-源程序:beginx:=31;whilex>13thenx<-;end#實(shí)驗(yàn)結(jié)果截圖:六、實(shí)驗(yàn)中遇到的問題及解決方法本次實(shí)驗(yàn)的任務(wù)是用C++編寫一個(gè)詞法分析器,詞法分析的基本任務(wù)是從字符串表示的源

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論