編譯原理自上而下語法分析_第1頁
編譯原理自上而下語法分析_第2頁
編譯原理自上而下語法分析_第3頁
編譯原理自上而下語法分析_第4頁
編譯原理自上而下語法分析_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

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

文檔簡介

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

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

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

4、分析結(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 + i)& i + i)也 i + i)& i + i)& + i)ft + i)& + i)ft 慨i)& )&)& &ftE-TC TFD FiD*FDF (E)ETC TFDFi

5、D e C+TCTFDFiDeC一一 eD e C E#region 相關(guān)初始量( 都是全局的)public string mystring = TC, FALSE, FALSE, TC, FALSE, FALSE, FALSE, +TC , FALSE, FALSE,屋,e, FD, FALSE, FALSE, FD, FALSE, FALSE, FALSE, e, *FD, FALSE, , , i , FALSE, FALSE, (E) , FALSE, FALSE ; 分析表數(shù)組bool con = true ; / 控制顯示的布爾量private Stack MyStack = ne

6、w Stack (); / 申請一個分析棧private Stack MyInputstack = new Stack (); / 申請一個輸入棧public string Term = i , + , * , ( , ) , & ;/ 終結(jié)符數(shù)組public string unTerm = E , C, T , D , F ; / 非終結(jié)符數(shù)組private int line, row; / 定義行,列的全局變量string MyNowString;#endregion “開始”按鈕實(shí)現(xiàn)的函數(shù)private void 開始 _Click( object sender, EventArgs e

7、)if (Input_richTextBox1.Text = )MessageBox.Show( 請輸入要分析的字符串! );elsethis .MyOutput_listBox3.Items.Add( );MyStack.Push(&);MyStack.Push(E);MyStack_listBox1.Items.Add( &E);MyInput_listBox2.Items.Add(Input_richTextBox1.Text +& );MyInputstack.Push(& );for ( int i = Input_richTextBox1.Text.Length - 1; i =

8、0; i-)MyInputstack.Push(Input_richTextBox1.Texti);begin.Enabled =false ;#region “下一步”按鈕實(shí)現(xiàn)的函數(shù)private void 下一步 _Click( object sender, EventArgs e)int loc;string MyStackTop, MyStackInputTop;MyStackTop = MyStack.Peek().ToString();MyStackInputTop = MyInputstack.Peek().ToString();MyStackTopOne(MyStackTop)

9、;if (MyStackTopOne(MyStackTop)MyStackTopTwo(MyStackTop, MyStackInputTop);else if (MyStackTopThree(MyStackTop) &MyInputStackTopOne(MyStackInputTop)loc = line * 6 + row;MyNowString = mystringloc;this .MyOutput_listBox3.Items.Add(MyStack.Peek().ToString() +- +mystringloc);Analyse();elseRezult_richTextB

10、ox2.Text = 分析出錯! ;nextStep.Enabled =false ;con =false ;if (con)ShowMyStack();ShowMyInpuStack();#endregion#region 顯示分析棧里的字符private void ShowMyStack()string ch = ;int len = MyStack.Count;string display = ;for ( int i = 0; i = 0; i-)ch = ch + displayi;MyStack.Push(displayi);this .MyStack_listBox1.Items

11、.Add(ch);#endregion#region 顯示輸入棧里的字符private void ShowMyInpuStack() int len = MyInputstack.Count;string display = ;for ( int i = 0; i = 0; i-)MyInputstack.Push(displayi);this .MyInput_listBox2.Items.Add(display);#endregion#region 判斷狀態(tài)棧棧頂元素是否為終結(jié)符public bool MyStackTopOne( string stack) bool symbol = f

12、alse ;for ( int i = 0; i Term.Length; i+)if (stack = Termi)symbol =true ;break ; return symbol;#endregion#region 狀態(tài)棧棧頂元素是終結(jié)符的處理方法input)private void MyStackTopTwo( string stack, stringif (stack = input)if (stack =& )Rezult_richTextBox2.Text = 分析成功!nextStep.Enabled =false ;con =false ;elseMyStack.Pop(

13、);MyInputstack.Pop();this .MyOutput_listBox3.Items.Add( );#endregion#region 返回狀態(tài)棧棧頂元素在非終結(jié)符數(shù)組里的下標(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)pri

14、vate bool MyInputStackTopOne( string myinput)bool symbol = false ;for ( int i = 0; i = 0; i-)MyStack.Push(MyNowStringi);#endregion#region “退出”按鈕實(shí)現(xiàn)的函數(shù)private void exit_button2_Click( object sender, EventArgs e) DialogResult ret;ret =MessageBox.Show( 確定要退出嗎? , 退出 ,MessageBoxButtons .OKCancel,MessageBo

15、xIcon .Question,MessageBoxDefaultButton .Button2);if (ret = DialogResult .OK)this .Close();#endregion#region “重置”按鈕實(shí)現(xiàn)的功能private void clear_Button_Click( object sender, EventArgs e) Input_richTextBox1.Clear();Rezult_richTextBox2.Clear();this .MyStack_listBox1.Items.Clear();this .MyInput_listBox2.Items.Clear();this .MyOutput_listBox3.Items.Clear();MyStack.Clear();MyInputstack.Clear();begin.Enabled =true ;nextStep.Ena

溫馨提示

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

最新文檔

評論

0/150

提交評論