編寫語法分析程序(共12頁)_第1頁
編寫語法分析程序(共12頁)_第2頁
編寫語法分析程序(共12頁)_第3頁
編寫語法分析程序(共12頁)_第4頁
編寫語法分析程序(共12頁)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗報告課程名稱:編譯(biny)原理 項目名稱:編寫(binxi)語法分析程序姓名(xngmng): 專業(yè):計算機科學(xué)與技術(shù) 班級:2011級 學(xué)號:2同組成員一、實驗預(yù)習(xí)部分 注:1、實驗預(yù)習(xí)部分包括實驗環(huán)境準(zhǔn)備和實驗所需知識點準(zhǔn)備。2、若是單人單組實驗,同組成員填無。:1、實驗環(huán)境準(zhǔn)備: 軟件環(huán)境:visual C+ 6.0 硬件環(huán)境:計算機一臺實驗所需知識點準(zhǔn)備: HYPERLINK /view/135635.htm t /_blank 語法 HYPERLINK /view/239473.htm t /_blank 分析是編譯過程的一個 HYPERLINK /view/1838.htm

2、 t /_blank 邏輯階段。 HYPERLINK /view/135635.htm t /_blank 語法 HYPERLINK /view/239473.htm t /_blank 分析的 HYPERLINK /view/135914.htm t /_blank 任務(wù)是在 HYPERLINK /view/487040.htm t /_blank 詞法分析的基礎(chǔ)上將 HYPERLINK /view/419292.htm t /_blank 單詞序列組合成各類語法短語,如“ HYPERLINK /view/17674.htm t /_blank 程序”,“語句”,“ HYPERLINK /v

3、iew/420676.htm t /_blank 表達式”等等.語法 HYPERLINK /view/239473.htm t /_blank 分析程序判斷源 HYPERLINK /view/17674.htm t /_blank 程序在結(jié)構(gòu)上是否正確.源程序的結(jié)構(gòu)由上下文無關(guān)文法描述.語法分析程序可以用YACC,等工具自動生成。程序的結(jié)構(gòu)通常是由遞歸規(guī)則表示的,我們可以用下面的規(guī)則來定義表達式:任何標(biāo)識符是表達式;任何常數(shù)是表達式若表達式1和表達式2都是表達式,那么 表達式1+表達式2 表達式1*表達式2 (表達式1) 都是表達式 類似,語句也可以遞歸地定義,如; (1)標(biāo)識符:=表達式 是

4、語句; (2)while(表達式)do 語句和 If (表達式) then 語句 else 語句都是語句。二、 實驗過程記錄 注:實驗過程記錄要包含實驗?zāi)康?、實驗原理、實驗步驟,頁碼不夠可自行添加。: 1、實驗?zāi)康模?(1)語法分析和語義分析合在一起實現(xiàn)。 (2)把語法分析器設(shè)計成一個獨立的過程。 (3)給出PL/0文法規(guī)范,要求編寫PL/0語言的語法分析程序。實驗原理: 通過語法分析來實現(xiàn)對程序的編譯。 對PL/0語言作如下功能擴充:(1)擴充條件語句的功能使其為:if then else (2)增加repeat語句,格式為:repeat ; until實驗步驟: 已給PL/0語言文法,利用

5、遞歸子程序法,編制語法分析程序,要求將錯誤信息輸出到語法錯誤文件中,輸出語法樹。PL/0語法如下:. CONST,; = VAR , | ; PROCEDURE ; | | := BEGIN ; END |ODD +|- 還有10條規(guī)則構(gòu)成了PL/0語言,為此文法寫一個語法分析器。CONST A=10; VAR B,C; PROCEDURE Q; VAR X; BEGIN READ(X); B:=X; WHILE X#0 X:=X-1; END; BEGIN WRITE(A); CALL Q; END.(1)PL/0編譯程序結(jié)構(gòu)PL/0源程序詞法分析程序語法分析程序代碼生成程序表格管理程序出錯

6、處理程序目標(biāo)程序語法圖1: 擴充條件的語法圖為:if條件Thenn語句alse語句2 :擴充repeat 語句的語法圖為:unitn條件語句reqeat遞歸子程序法: 對于每個非終結(jié)符,編寫一個子程序,由該子程序負責(zé)識別該語法單位是否正確。表達式的文法表達式=+|-項(+|-)項項=因子(*|/)因子因子=標(biāo)識符|無符號整數(shù)|(表達式)表達式的遞歸子程序?qū)崿F(xiàn)procedure expr;begin if sym in plus, minus then begin getsym; term; end else term; while sym in plus, minus do begin get

7、sym; term; endend; 項=因子(*|/)因子 項的遞歸子程序?qū)崿F(xiàn)procedure term;begin factor; while sym in times, slash do begin getsym; factor; endend;因子=標(biāo)識符|無符號整數(shù)|(表達式)因子的遞歸子程序?qū)崿F(xiàn)procedure factor;begin if sym ident then if sym number then if sym = ( then begin getsym; expr; if sym = ) then getsym else error end else error

8、else getsym else getsym end; 程序核心代碼和注釋:public void analyzer()/ 讀入文件,進行語法分析string strReadFile;strReadFile=input.txt;myTextRead.myStreamReader=new StreamReader(strReadFile);string strBufferText;int wid =0;Console.WriteLine(分析讀入程序(記號ID):n);dostrBufferText =myTextRead.myStreamReader.ReadLine();if(strBuf

9、ferText=null)break;foreach (String subString in strBufferText.Split()if(subString!=)int ll;if(subString!=null)ll= subString.Length; /每一個長度elsebreak;int a=ll+1;char b = new chara;StringReader sr = new StringReader(subString);sr.Read(b, 0, ll); /把substring 讀到char數(shù)組里int sort=(int)b0;/ wordi 和 wordNumi對

10、應(yīng)/先識別出一整個串,再根據(jù)開頭識別是數(shù)字還是字母Wordwid=subString;if(subString.Equals(void)wordNumwid=0;else if(subString.Equals(main)wordNumwid=1;else if(subString.Equals()wordNumwid=2;else if(subString.Equals()wordNumwid=3;else if(subString.Equals(int)wordNumwid=4;else if(subString.Equals(=)wordNumwid=6;else if(subStrin

11、g.Equals()wordNumwid=22;else if(subString.Equals(;)wordNumwid=23;else /識別變量和數(shù)字if(sort47&sort58)wordNumwid=7;else wordNumwid=5;Console.Write(subString+(+wordNumwid+)+ );wid+;Console.WriteLine(n);while (strBufferText!=null);wordNumwid=24;myTextRead.myStreamReader.Close();/*/讀入LR分析表/* /*此處代碼略*/int stat

12、e = new int100;string symbol =new string100;state0=0;symbol0=#;int p1=0;int p2=0;Console.WriteLine(n按文法規(guī)則歸約順序如下:n);/*/ 歸約算法如下所顯示/*while(true)int j,k;j=statep2;k=wordNump1;t=LRj,k; /當(dāng)出現(xiàn)t為0的時候if(t=0)/錯誤類型string error;if(k=0)error=void;elseif(k=1)error=main;elseif(k=2)error=();elseif(k=3)error=;elseif(

13、k=4)error=int;elseif(k=6)error=;elseif(k=22)error=;elseif(k=23)error=;elseerror=其他錯誤符號;Console.WriteLine(n檢測結(jié)果:);Console.WriteLine(代碼中存在語法錯誤);Console.WriteLine(錯誤狀況:錯誤狀態(tài)編號為 +j+ 讀頭下符號為 +error);break;elseif(t=-100) /-100為達到接受狀態(tài)Console.WriteLine(n);Console.WriteLine(n檢測結(jié)果:);Console.WriteLine(代碼通過語法檢測);

14、break;if(t0)p2=p2+1;statep2=t;symbolp2=Convert.ToString(wordNump1);p1=p1+1;myTextRead.myStreamReader.Close();Console.Read();實驗結(jié)果: 實驗結(jié)果與討論: 注:1、實驗小結(jié)應(yīng)包含實驗所需知識點和實驗方法的總結(jié),實驗心得體會等。2、分組實驗需包含同組討論內(nèi)容。任務(wù)分配 成員 任務(wù)分配 運行和調(diào)試源程序,編寫實驗報告 代碼的編寫,編寫實驗報告 修改詞法的語言,編寫實驗報告 修改中間代碼、語法的語言2、實驗小結(jié): 通過對語法分析的操作實驗,從中學(xué)習(xí)到了許多的PL/0編譯程序的的方法。它采用的是自頂向下的遞歸子程序法來編譯的就是說對應(yīng)每個非終結(jié)符語法單元,編一個獨立的處理過程。在運行程序的過程中也有遇到了一些問題,如在編譯環(huán)境時,由于頭文件和源文件沒有分開,導(dǎo)致程序出現(xiàn)了錯誤;分開后運行程序也有問題,原來是因為要設(shè)置適應(yīng)頭文件的;其中也有一些小的問題就是在代碼中出現(xiàn)的新的變量沒有定義。經(jīng)過同學(xué)們的討論和老師的指導(dǎo),一一解決了這些問題。3、實驗心得體會: 對本次的實驗學(xué)習(xí)了語法分析,再經(jīng)過實驗,我對語法分析有了更深刻的認識和了解。遞歸下降分析法,是一種確定的自頂向下分析技術(shù),實現(xiàn)思想是對文法中分別代表一種

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論