實(shí)驗(yàn)二 語(yǔ)法分析(算符優(yōu)先) (2)

實(shí)驗(yàn)二 語(yǔ)法分析(算符優(yōu)先) (2)

ID:15237084

大小:148.50 KB

頁(yè)數(shù):11頁(yè)

時(shí)間:2018-08-02

實(shí)驗(yàn)二  語(yǔ)法分析(算符優(yōu)先) (2)_第1頁(yè)
實(shí)驗(yàn)二  語(yǔ)法分析(算符優(yōu)先) (2)_第2頁(yè)
實(shí)驗(yàn)二  語(yǔ)法分析(算符優(yōu)先) (2)_第3頁(yè)
實(shí)驗(yàn)二  語(yǔ)法分析(算符優(yōu)先) (2)_第4頁(yè)
實(shí)驗(yàn)二  語(yǔ)法分析(算符優(yōu)先) (2)_第5頁(yè)
資源描述:

《實(shí)驗(yàn)二 語(yǔ)法分析(算符優(yōu)先) (2)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱(chēng):語(yǔ)法分析器設(shè)計(jì)專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)姓名:田莉莉?qū)W號(hào):201117906語(yǔ)法分析—算符優(yōu)先分析程序一.實(shí)驗(yàn)要求⑴選擇最有代表性的語(yǔ)法分析方法,如算符優(yōu)先法、遞歸子程序法或LR分析法⑵選擇對(duì)各種常見(jiàn)程序語(yǔ)言都用的語(yǔ)法結(jié)構(gòu),如賦值語(yǔ)句(尤指表達(dá)式)作為分析對(duì)象,并且與所選語(yǔ)法分析方法要比較貼切。⑶實(shí)習(xí)時(shí)間為6學(xué)時(shí)。二.實(shí)驗(yàn)內(nèi)容及要求(1)根據(jù)給定文法,先求出FirstVt和LastVt集合,構(gòu)造算符優(yōu)先關(guān)系表(要求算符優(yōu)先關(guān)系表輸出到屏幕或者輸出到文件);(2)根據(jù)算法和優(yōu)先關(guān)系表分析給定表達(dá)式是否是該文法識(shí)別的正確的算術(shù)表達(dá)式(要求輸出

2、歸約過(guò)程)(3)給定表達(dá)式文法為:G(E’):E’→#E#E→E+T

3、TT→T*F

4、FF→(E)

5、i(4)分析的句子為:(i+i)*i和i+i)*i三.程序設(shè)計(jì)思想及實(shí)現(xiàn)步驟程序的設(shè)計(jì)思想:按照編譯原理教材提供的算法,本程序的設(shè)計(jì)主要實(shí)現(xiàn)三個(gè)主要的過(guò)程:(1)求解FristVT集和LastVT集:利用CString數(shù)組存放VT集,利用數(shù)組下標(biāo)對(duì)應(yīng)非終結(jié)符關(guān)系;(2)輸出算符優(yōu)先分析表:利用MFC中的ClistCtrl控件輸出顯示算符表,比利用二維數(shù)組對(duì)應(yīng)其在內(nèi)存中的關(guān)系。(3)利用算符優(yōu)先分析表進(jìn)行歸約:根據(jù)教材所給算法,并對(duì)其進(jìn)行實(shí)現(xiàn)在屏幕上輸出歸約過(guò)程。實(shí)

6、現(xiàn)步驟:1、為程序各變量設(shè)計(jì)存儲(chǔ)形式,具體設(shè)計(jì)如下所示:CStringm_strTElem[T_LEN];//終結(jié)符CStringm_strNTElem[NT_LEN];//非終結(jié)符CMapStringToPtrm_mapProdu;//存放產(chǎn)生式CMapStringToPtrm_mapProduEX;//存放擴(kuò)展產(chǎn)生式CStringm_strFristVT[NT_LEN];//fristVT集CStringm_strLastVT[NT_LEN];//lastVT集intm_nPriSheet[T_LEN+1][T_LEN+1];//優(yōu)先表;無(wú)窮大表示空白,-

7、1表示小于,0表示相等,1表示大于Findm_F[STACK_LEN];//bool數(shù)組CStrackm_stack;//堆棧2、為程序設(shè)計(jì)各個(gè)過(guò)程,具體設(shè)計(jì)如下所示:voidCreateFristVT(Find*F);//為每一個(gè)非終結(jié)符創(chuàng)建FristVT集voidCreateLastVT(Find*F);//為每一個(gè)非終結(jié)符/創(chuàng)建LastVT集voidSearchPForFirtVT(Find&f);//搜索形如P->a….或P->Qa….的產(chǎn)生式voidSearchQForFristVT(void);//搜索形如P->....Q的產(chǎn)生式voidSearc

8、hPForLastVT(Find&f);//搜索形如P->...aQ或P->...a的產(chǎn)生式voidSearchQForLastVT(void);//搜索形如P->....Q的產(chǎn)生式OnBnClickedBtnAnasysic();//點(diǎn)擊按鈕啟動(dòng)分析3、對(duì)各個(gè)過(guò)程進(jìn)行實(shí)現(xiàn);4、調(diào)試運(yùn)行并檢驗(yàn)實(shí)驗(yàn)結(jié)果,結(jié)果如圖2.1和2.2所示:圖2.1分析成功圖圖2.2分析失敗圖四.程序源碼產(chǎn)生式初始化://產(chǎn)生式CString*str=newCString;*str=_T("

9、E+T

10、T

11、");m_mapProdu.SetAt(_T("E"),(void*)str);CS

12、tring*str1=newCString;*str1=_T("

13、T*F

14、F

15、");m_mapProdu.SetAt(_T("T"),(void*)str1);CString*str2=newCString;*str2=_T("

16、(E)

17、i

18、");m_mapProdu.SetAt(_T("F"),(void*)str2);CString*str3=newCString;*str3=_T("

19、E+T

20、F+F

21、F*F

22、E+F

23、T

24、F

25、");m_mapProduEX.SetAt(_T("E"),(void*)str3);CString*str4=newCString

26、;*str4=_T("

27、T*F

28、F

29、");m_mapProduEX.SetAt(_T("T"),(void*)str4);CString*str5=newCString;*str5=_T("

30、(E)

31、i

32、(F)

33、");m_mapProduEX.SetAt(_T("F"),(void*)str5);程序主要代碼:voidCGrammarAnalysisDlg::InitFind(void){inti,j;intk=0;while(k

34、NTerm=m_strNTElem[i

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。