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

下載本文檔

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

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論