編譯原理自上而下語法分析_第1頁
編譯原理自上而下語法分析_第2頁
編譯原理自上而下語法分析_第3頁
編譯原理自上而下語法分析_第4頁
編譯原理自上而下語法分析_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1. 課程設(shè)計目的:1.1 設(shè)計目的:通過編程實現(xiàn)語法分析(自上而下,自下而上)的可視化過程,加深對兩法分析原理思想的理解。 目的要求通過設(shè)計編制調(diào)試一個具體的語法分析程序,加深對語法分析原理的理解。并掌握在對程序設(shè)計語言源程序進行掃描過程中將其進行語法分析的方法。 題目分析遞歸下降分析方法是一種確定的自上而下分析方法。它的基本思想是給文法的每一個非終結(jié)符均設(shè)計一個相應(yīng)的子程序。由于文法的產(chǎn)生式往往是遞歸的,因為這些子程序往往也是遞歸的。1.2 開發(fā)環(huán)境:操作系統(tǒng):Windows XP輔助工具:Visual Studio 2008編程語言:C#2. 課程設(shè)計要求( 1 ) 選定 一文 法 ,選

2、 定一 種分 析方 法 (自 上而 下、 自下 而 上)(2 )允許用戶輸入語句并對該語句進行相應(yīng)的語法分析( 3 )要求顯示語法樹的建立過程以及跟蹤分析表和分析棧的 狀態(tài)( 4 ) 要 提供 單步 運 行, 讓用 戶跟 蹤分 析 器工 作的 每一 個步 驟 。3. 總體設(shè)計3.1 設(shè)計框架 :初始化“分析棧”:“&”、“E”分別入棧初始化“輸入棧”:把用戶輸入的字 符申,按倒序每一個分別壓入棧3.2程序流程圖:開始輸入將要分析的字符申取分析棧棧頂元素4.設(shè)計功能描述:(1)該課程設(shè)計對語法分析指定了固定的文法,運行界面為:.芯摘譯原龍語法分析察自上而下了現(xiàn)有文法如下:E->TC

3、C->+TC| eT->FDD->*FD| £F->(E)|i請輸入分析的字符串:分析結(jié)果;我:輸入:給出:“開始”,會出現(xiàn)提示:(3)用戶輸入字符串,可以點擊軟件根據(jù)該輸入字符串做下一步好初始化工作,再點擊“ J”,開始分析,每一次點擊“下一次”,就做分析的一個步驟,并且此時分析棧和 輸入棧做相應(yīng)的出棧、入棧的的動作,同時在“分析?!?,“輸入?!?,“輸出?!?會顯示出相應(yīng)的狀態(tài)。分析結(jié)果;(4)分析結(jié)果顯示在中(5)如果在分析完后,還需要繼續(xù)輸入字符串分析的畫,點擊重置可以再次作上述的操作(6)如果想退出程序,點擊,此時會彈出提示窗口:,點擊“確定”,便退出

4、程序。分析實例:輸入分析的字符串為i* (i+i)結(jié)果如下:分析結(jié)果:I分析成功!卷ftE ACT &CDF ftCDi &CD &CDF* &CDF &CD) E ( ftCD)E ftCD)CT &CD)CDF 也CD)CDi &CD)CD acd)c ACD)CT+ &CD)CT ftCD)CDF ACD) CDi &CD)CD &CD)C &CD) ftCD也C &5.源程序代碼:輸入;輸出二i*(i + i)&*(i + i)& (i+i)也 (i+i)& i +

5、i)& i + i)也 i + i)& i + i)& + i)ft + i)& + i)ft 慨i)& )&)& &ftE-TC TFD FiD>*FDF> (E)ETC TFDFiD> e C>+TCT>FDF>iDeC一一> eD> e C> E#region 相關(guān)初始量( 都是全局的)public string mystring = "TC", "FALSE", "FALSE", "TC",

6、 "FALSE", "FALSE", "FALSE", "+TC" , "FALSE", "FALSE",屋","e", "FD", "FALSE", "FALSE", "FD", "FALSE", "FALSE", "FALSE", "e", "*FD", "

7、;FALSE", " £ ", " £ ", "i" , "FALSE", "FALSE", "(E)" , "FALSE", "FALSE" ; 分析表數(shù)組bool con = true ; / 控制顯示的布爾量private Stack MyStack = new Stack (); / 申請一個分析棧private Stack MyInputstack = new Stack (); / 申請一個輸入

8、棧public string Term = "i" , "+" , "*" , "(" , ")" , "&" ;/ 終結(jié)符數(shù)組public string unTerm = "E" , "C", "T" , "D" , "F" ; / 非終結(jié)符數(shù)組private int line, row; / 定義行,列的全局變量string MyNowString;#endregi

9、on “開始”按鈕實現(xiàn)的函數(shù)private void 開始 _Click( object sender, EventArgs e)if (Input_richTextBox1.Text ="" )MessageBox.Show( "請輸入要分析的字符串!" );elsethis .MyOutput_listBox3.Items.Add( "" );MyStack.Push("&");MyStack.Push("E");MyStack_listBox1.Items.Add( "&

10、amp;E");MyInput_listBox2.Items.Add(Input_richTextBox1.Text +"&" );MyInputstack.Push("&" );for ( int i = Input_richTextBox1.Text.Length - 1; i >= 0; i-)MyInputstack.Push(Input_richTextBox1.Texti);begin.Enabled =false ;#region “下一步”按鈕實現(xiàn)的函數(shù)private void 下一步 _Click( ob

11、ject sender, EventArgs e)int loc;string MyStackTop, MyStackInputTop;MyStackTop = MyStack.Peek().ToString();MyStackInputTop = MyInputstack.Peek().ToString();MyStackTopOne(MyStackTop);if (MyStackTopOne(MyStackTop)MyStackTopTwo(MyStackTop, MyStackInputTop);else if (MyStackTopThree(MyStackTop) &&

12、;MyInputStackTopOne(MyStackInputTop)loc = line * 6 + row;MyNowString = mystringloc;this .MyOutput_listBox3.Items.Add(MyStack.Peek().ToString() +"->" +mystringloc);Analyse();elseRezult_richTextBox2.Text =" 分析出錯!" ;nextStep.Enabled =false ;con =false ;if (con)ShowMyStack();ShowM

13、yInpuStack();#endregion#region 顯示分析棧里的字符private void ShowMyStack()string ch = "" ;int len = MyStack.Count;string display ="" ;for ( int i = 0; i < len; i+) string t;t = MyStack.Pop().ToString();display = display + t;for ( int i = len - 1; i >= 0; i-)ch = ch + displayi;MySta

14、ck.Push(displayi);this .MyStack_listBox1.Items.Add(ch);#endregion#region 顯示輸入棧里的字符private void ShowMyInpuStack() int len = MyInputstack.Count;string display ="" ;for ( int i = 0; i < len; i+) string t;t = MyInputstack.Pop().ToString();display = display + t;for ( int i = len - 1; i >=

15、 0; i-)MyInputstack.Push(displayi);this .MyInput_listBox2.Items.Add(display);#endregion#region 判斷狀態(tài)棧棧頂元素是否為終結(jié)符public bool MyStackTopOne( string stack) bool symbol = false ;for ( int i = 0; i < Term.Length; i+)if (stack = Termi)symbol =true ;break ; return symbol;#endregion#region 狀態(tài)棧棧頂元素是終結(jié)符的處理方法

16、input)private void MyStackTopTwo( string stack, stringif (stack = input)if (stack ="&" )Rezult_richTextBox2.Text =" 分析成功!nextStep.Enabled =false ;con =false ;elseMyStack.Pop();MyInputstack.Pop();this .MyOutput_listBox3.Items.Add( "" );#endregion#region 返回狀態(tài)棧棧頂元素在非終結(jié)符數(shù)組里的

17、下標(biāo)public bool MyStackTopThree( string stack)bool symbol = false ;for ( int i = 0; i < unTerm.Length; i+)if (unTermi = stack)line = i;symbol =true ;break ;return symbol;#endregion#region 返回輸入棧棧頂元素在終結(jié)符數(shù)組里的下標(biāo)private bool MyInputStackTopOne( string myinput)bool symbol = false ;for ( int i = 0; i <

18、 Term.Length; i+)if (Termi = myinput)row = i;symbol =true ;break ;return symbol;#endregion#region 分析表字符入棧private void Analyse()if (MyNowString = "FALSE")Rezult_richTextBox2.Text =" 分析出錯!" ;nextStep.Enabled =false ;con =false ;else if (MyNowString =" e ")MyStack.Pop();el

19、seMyStack.Pop();for ( int i = MyNowString.Length - 1; i >= 0; i-)MyStack.Push(MyNowStringi);#endregion#region “退出”按鈕實現(xiàn)的函數(shù)private void exit_button2_Click( object sender, EventArgs e) DialogResult ret;ret =MessageBox.Show( " 確定要退出嗎?" ," 退出 " ,MessageBoxButtons .OKCancel,MessageBoxIcon .Question,MessageBo

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論