




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理實驗報告班級:學號:姓名:實驗一詞法掃描器設計一 實驗目的通過設計調試詞法分析程序,實現從源程序中分出各種單詞的方法;加深對課堂教學的理解;提高詞法分析方法的實踐能力。二 實驗內容設計一個簡單的類C 語言的詞法掃描器。三 實驗要求(一)程序設計要求( 1) 根據附錄給定的文法, 從輸入的類 C 語言源程序中, 識別出各個具有獨立意義的單詞,即關鍵字、標識符、常數、運算符、分隔符五大類;文法見最后附錄。( 2) 提供源程序輸入界面;( 3) 詞法分析后可查看符號表和 TOKEN 串表;( 4) 保存符號表和 TOKEN 串表(如:文本文件);( 5) 遇到錯誤時可顯示提示信息,然后跳過錯
2、誤部分繼續(xù)進行分析。(二)實驗報告撰寫要求( 1) 系統(tǒng)功能(包括各個子功能模塊的功能說明) ;( 2) 開發(fā)平臺(操作系統(tǒng)、設計語言) ;( 3) 設計方案;1) 主數據流圖;2) 主要子程序的流程框圖(若有必要) ;3) 模塊結構圖;4) 主要數據結構:符號表、TOKEN串表等。( 4) 具體設計過程(包括主控程序、各個功能模塊的具體實現) 。1. 系統(tǒng)功能:根據附錄給定的文法,從輸入的類 C 語言源程序中,識別出各個具有獨立意義的單詞,即關鍵字、標識符、常數、運算符、分隔符五大類。然后輸出本源程序的符號表顯示在 dos 界面和存放在文本文件中。本程序以如下源程序(語法分析的例子 )示范:
3、源程序 ;int a;int b;int c;a=2;b=1;if ( a>b)c=a+b;elsec=a-b;子功能模塊有:關鍵字處理過程; 字母的處理過程; 數字的處理過程; 整個詞法分析處理過程 ;運算符處理過程以及主程序。2. 開發(fā)平臺(操作系統(tǒng)、設計語言) ;Windows 7,Microsoft Visual C+ 6.03.設計方案:(1)主流程圖:開始讀入文件CiFaFenXi ()函數進行詞法分析關閉文件流結束(2)主要子程序的流程框圖:判斷 是否注釋子模塊:開始輸入文件,讀完文件N是否為注釋?繼續(xù)判斷不處理模塊判斷是否是字符子模塊:開始N是否為字符?繼續(xù)別的判斷字符臨
4、時賦值給字符串變量讀取下一字符是否為字符或者數字?N字符串變量是否是關鍵字?將變量 類型 1 輸出到 DOS將變量 類型 2 輸出到 DOS界面并寫入文件界面并寫入文件結束模塊判斷是否為數字或者運算符子模塊:開始N是否為數字?是否為運算符?將數字賦給變量對每一個運算符做相應的處理讀取下一變量輸入小數|指數 |小數點N將變量類型3寫入結果模塊實驗結果:Test.txt 內容:Token.txt 文件內容:四 實驗總結:通過詞法分析實驗,首先我認識到詞法分析就是將字符序列轉換為單詞(Token )序列的過程。詞法分析器一般以函數的形式存在,供語法分析器調用。詞法分析階段是編譯過程的第一個階段,這個
5、階段的任務是從左到右一個字符一個字符地讀入源程序,即對構成源程序的字符流進行掃描然后根據構詞規(guī)則識別單詞(也稱單詞符號或符號 ) 。并且對符號表有了一定的理解,符號表是:1、編譯過程中編譯程序不斷匯集和反復查證出現在源程序中各種名字的屬性和特征信息等有關信息。這些信息通常記錄在一張或幾張符號表中。2、符號表的每一項有兩部分:一部分是名字(標識符) ;一部分是名字屬性(標識符的有關信息)。3、編譯過程中,每當掃描器(詞法分析器)識別出一個名字后,編譯程序就查閱符號表,看其是否在符號表中。如果它是一個新名字就將它填進表里。它的有關信息將在詞法分析和語法語義分析過程中陸續(xù)填入表中。4、符號表是邊填邊
6、用。附錄:類 C 語言的詞法文法idLetter <temp>int10Num int10 | NumOP+|-|*|/|>|<|=|(|)|;|=|>=|<=|!=Keywordif | then | else | while | doLettera|b|c|d|e|f|g|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|ZNum0|1|2|3|4|5|6|7|8|9|<temp>Letter <temp> |
7、 Num <temp> |實驗二 LR語法分析器設計一 實驗目的通過設計調試 LR 語法分析程序, 實現根據詞法分析的輸入 TOKEN 字,進行文法的語法分析;加深對課堂教學的理解;提高語法分析方法的實踐能力。二 實驗內容使用附錄中的文法,可以對類似下面的程序語句進行語法分析:int a;int b;int c;a=2;b=1;if(a>b)c=a+b;elsec=a-b;三 實驗要求(一)程序設計要求( 1)給出主要數據結構:分析棧、符號表;( 2)將掃描器作為一個子程序,每次調用返回一個TOKEN;( 3)程序界面:表達式輸入、語法分析的表示結果(文件或者圖形方式);(二
8、)實驗報告撰寫要求( 1)系統(tǒng)功能分析與設計(包括各個子功能模塊的功能說明) ;( 2)開發(fā)平臺(操作系統(tǒng)、設計語言) ;( 3)設計方案 : 包括功能模塊結構圖、主要函數的流程圖;( 4)主要數據結構:分析棧、分析表、符號表;( 5)具體設計實現過程(包括主控程序、各個功能模塊的具體實現) 。四 實驗總結一:系統(tǒng)功能分析與設計:可對一段包含加減乘除括號的賦值語句進行語法分析,其必須以 $為終結符,語句間以;隔離,判斷其是否符合語法規(guī)則,依次輸出判斷過程中所用到的產生式,并輸出最終結論。二:開發(fā)平臺(操作系統(tǒng),設計語言)Windows 7, Microsoft Visual C+ 6.0 (D
9、os), C+三:設計方案:(包括第四步的數據結構)首先構造數據結構,分析棧,分析表,符號表等如下:分析棧struct FenXiZhanchar name50;char *type;int value;FenXiZhan1000;分析表()Table3120108,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,113,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0
10、,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,0,203,0,0,0,0,0,0,0,0,203,0,0,7,0,4,0,0,0,0,0,202,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,1
11、1,25,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,0,205,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,15,28,25,0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0
12、,0,0,0,0,0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,0,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,123,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,22,0,208,0,0,0,0,208,208,208,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,24,0,209,0,0,0,0,209,20
13、9,209,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0,0,0,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,211,211,211,0,0,0,0,0,0,0,0,0,0,0,0,212,0,0,0,0,212,212,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,30,25,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,
14、0符號表:struct TokenTablechar *type;int attr;TokenTable1000;具體思路:首先對源文件進行詞法分析, 然后產生符號表FenXiTable(),然后對詞法分析產生的Token 進行語法分析,用分析棧和分析表進行GOTO 和 ACTION 函數進行語法分析。五:具體實現過程:Main 函數:開始輸入源文件詞法分析建立符號表語法分析LR() 進行語法分析輸出結果結束詞法分析流程:開始讀入文件CiFaFenXi ()函數進行詞法分析關閉文件流結束實驗結果:總結: 通過這次語法分析LR(0 )實驗,我加深了對語法分析的理解,并且能熟練利用分析表進行GOT
15、O 函數和 ACTION函數的應用,以前在書本上學到的東西,沒有實驗之前都很抽象,但是自己通過實驗,利用數組產生了分析表,對LR(0)自動機也有了很深的理解!附錄:簡單類 c 語言文法產生式語義規(guī)則注: P為文法的開始符號說明語句部分文法:PDSD L id ; D |L int | float程序語句部分文法:S id = E;S.code = E.code | gen(id.place := E.place)S if (C)S1C.true = newlabel; C.false = S.next;S1.next = S.next;S.code = C.code | gen(C.true
16、: ) | S1.codeS if (C)S1elseS2S while ( C)S1 doS2C.true = newlabel; C.false = newlabel;S1.next = S2.next =S.next;S.code = C.code | gen(C.true : ) | S1.code| gen( goto S.next)| gen(C.false : )| S2.code;SS;SCE1>E2C.code = E1.code | E2.code |gen( if E1.place > E2.place goto C.true) |gen( goto C.fa
17、lse)CE1<E2C.code = E1.code | E2.code |gen( if E1.place < E2.place goto C.true) |gen( goto C.false)C E1= E2C.code = E1.code | E2.code |gen( if E1.place = E2.place goto C.true) |gen( goto false)C.E E1+TE.place = newtemp;E.code = E1.code|T.code|gen(E.place := E1.place + T.place)EE1 TE.place = new
18、temp; E.code = E1.code | T.code |gen(E.place := E1-.placeT.place)E TE.place = T.place; E.code = T.codeT FT.place = F.place; T.code = F.codeT T1*FT.place = newtemp;T.code = T1.code | F.code |gen(T.place := T1.place * F.place)T T1/FT.place = newtemp; T.code = T1.code | F.code |gen(T.place := T1.place
19、/ F.place)F(E)F.place = E.place; F.code = E.codeF idF.place = ; F.code = F int10F.place = int10.value; F.code = 實驗三語義分析及中間代碼生成一 實驗目的通過上機實習,加深對語法制導翻譯原理的理解,掌握將語法分析所識別的語法范疇變換為某種中間代碼的語義翻譯方法。二 實驗內容實現簡單的高級語言源程序的語義處理過程。三 實驗要求(一)程序設計要求( 1) 目 標 機: 8086 及其兼容處理器( 2) 中間代碼:三地址碼( 3) 設計結果:語法分析樹(節(jié)點具有屬性) 、三地址
20、碼表、符號表、 TOKEN 串表( 4) 語義分析內容要求:1) 變量說明語句2) 賦值語句3) 控制語句 ( 任選一種 )( 5) 其它要求:1) 將詞法分析(掃描器)作為子程序,供語法語義程序調用;2) 使用語法制導的語義翻譯方法;3) 編程語言自定;4) 最好提供源程序輸入界面;5) 目標代碼生成暫不做;6) 編譯后,可查看 TOKEN串、符號表、三地址碼表;7) 主要數據結構:產生式表、符號表、三地址碼表。所用文法使用實驗2 中的文法。附錄:語義分析源程序范例int a;int b;int c;a=2;b=1;if(a>b)c=a+b;elsec=a-b;(二)實驗報告撰寫要求(
21、1)系統(tǒng)功能分析與設計(包括各個子功能模塊的功能說明);(2)開發(fā)平臺(開發(fā)軟硬件環(huán)境) ;(3)語義翻譯中使用的數據結構;一:系統(tǒng)功能分析與設計:在詞法分析和語法分析的基礎上進一步分析含義,主要的工作是靜態(tài)語義檢查和三地址代碼的翻譯。二:開發(fā)平臺 ;Windows 7, Microsoft Visual C+ 6.0 (Dos), C+ 三:數據結構:struct token/詞法token結構體int code;/int num;/token *next;編碼遞增編號;token *token_head,*token_tail;/tokenstruct str/詞法 string結構體隊列int num;/編號string word;/str *next;字符串內容;str *string_head,*string_tail;/stringstruct ivan/語法產生式結構體隊列char left;/string
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學原料的環(huán)保合成方法優(yōu)化研究進展分析預測考核試卷
- 機器人服務創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運營與管理考核試卷
- 制作氣球培訓課件
- 家電公司轉讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設策劃合同范本
- 酒店餐飲服務流程優(yōu)化與提升制度
- 一崗雙責評價細則范本
- 古典文獻的校勘(下)
- 醫(yī)院培訓課件:《手術安全核查制度》
- 南陽醫(yī)專緩交學費申請表
- 衛(wèi)生部病歷質量評價標準
- 第2章 Windows 10操作系統(tǒng)
- 納稅人進項稅額分攤方式備案報告表(樣本)
- GPS公交車報站器使用說明書V
- 乘坐地鐵安全指南(課件)-小學生主題班會通用版
- 建筑智能化系統(tǒng)介紹08685課件
- 中建(輪扣架)模板工程施工方案
評論
0/150
提交評論