java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
西安郵電大學(xué)編譯原理LL文法分析器實(shí)驗(yàn)(java)
《編譯原理》實(shí)驗(yàn)報(bào)告
題目: 語(yǔ)法分析器的制作
學(xué)生姓名:
班 級(jí): 軟件1202
學(xué) 號(hào):
指導(dǎo)教師:
成 績(jī):
西安郵電大學(xué)計(jì)算機(jī)學(xué)院
2015 年 6 月 7 日
一:實(shí)驗(yàn)?zāi)康?/p>
熟悉語(yǔ)法分析的過程;
理解相關(guān)文法的步驟;
熟悉First集和Follow集生成
二:實(shí)驗(yàn)要求
對(duì)于給定的文法,試編寫調(diào)試一個(gè)語(yǔ)法分析程序:
要求和提示:
可選擇一種你感興趣的語(yǔ)法分析方法(LL(1) 、算符優(yōu)先、遞歸下降、SLR(1)等)作為編制語(yǔ)法分析程序的依據(jù)。
對(duì)于所選定的分析方法,如有需要,應(yīng)選擇一種合適的數(shù)據(jù)結(jié)構(gòu),以構(gòu)造所給文法的機(jī)內(nèi)表示。
能進(jìn)行分析過程模擬。如輸入一個(gè)句子,能輸出與句子對(duì)應(yīng)的語(yǔ)法樹,能對(duì)語(yǔ)法樹生成過程進(jìn)行模擬;能夠輸出分析過程每一步符號(hào)棧的變化情況。
設(shè)計(jì)一個(gè)由給定文法生成First集和Follow集并進(jìn)行簡(jiǎn)化的算法動(dòng)態(tài)模擬。
三:實(shí)驗(yàn)過程
1:文法:
E->TE’
E’->+TE’|ε
T->FT’
T’->*FT’|ε
F->(E)|i:
2程序描述(LL(1)文法)
本程序是基于已構(gòu)建好的某一個(gè)語(yǔ)法的預(yù)測(cè)分析表來對(duì)用戶的輸入字符串進(jìn)行分析,判斷輸入的字符串是否屬于該文法的句子。
基本實(shí)現(xiàn)思想:接收用戶輸入的字符串(字符串以“#”表示結(jié)束)后,對(duì)用做分析棧的一維數(shù)組和存放分析表的二維數(shù)組進(jìn)行初始化。然后取出分析棧的棧頂字符,判斷是否為終結(jié)符,若為終結(jié)符則判斷是否為“#”且與當(dāng)前輸入符號(hào)一樣,若是則語(yǔ)法分析結(jié)束,輸入的字符串為文法的一個(gè)句子,否則出錯(cuò)若不為“#”且與當(dāng)前輸入符號(hào)一樣則將棧頂符號(hào)出棧,當(dāng)前輸入符號(hào)從輸入字符串中除去,進(jìn)入下一個(gè)字符的分析。若不為“#”且不與當(dāng)前輸入符號(hào)一樣,則出錯(cuò)。
3:流程圖
4:該文法的預(yù)測(cè)分析表為:
四:實(shí)驗(yàn)結(jié)果
1、顯示預(yù)測(cè)分析表,提示用戶輸入字符串
2、輸入的字符串為正確的句子:
3、輸入的字符串中包含了不屬于終結(jié)符集的字符
4、輸入的字符串不是該文法能推導(dǎo)出來的句子
五:實(shí)驗(yàn)心得
通過本次實(shí)驗(yàn)基本掌握了語(yǔ)法分析的原理和LL(1)語(yǔ)法分析方法,以及預(yù)測(cè)分析表的構(gòu)造;進(jìn)一步熟悉了語(yǔ)法分析的詳細(xì)過程。通過編寫程序進(jìn)一步復(fù)習(xí)鞏固了java語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),尤其是加深了對(duì)棧相關(guān)知識(shí)的印象;在編程過程中遇到了很多基礎(chǔ)性問題,通過不斷的查閱課本,最終解決了問題,但程序仍然存在很多值得改進(jìn)和完善的地方,這就提醒我們?cè)谝院蟮膶W(xué)習(xí)過程當(dāng)中應(yīng)該及時(shí)復(fù)習(xí)鞏固以前學(xué)過的相關(guān)知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql双表查询java代码_原生sql
- 下一篇: 网页 php pdf文件怎么打开是乱码,