版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理實(shí)驗(yàn)報(bào)告本科實(shí)驗(yàn)報(bào)告課程名稱: 編譯原理D 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)室 專業(yè)班級(jí): 學(xué) 號(hào): _學(xué)生姓名: java編譯 指導(dǎo)教師: 成 績(jī): 2015年 月 日實(shí)驗(yàn)一、 無(wú)符號(hào)數(shù)的詞法分析程序(4學(xué)時(shí))內(nèi)容:掌握詞法分析的基本思想,并用高級(jí)語(yǔ)言編寫無(wú)符號(hào)數(shù)的詞法分析程序。要求:從鍵盤上輸入一串字符(包括字母、數(shù)字等),最后以“;”結(jié)束,編寫程序識(shí)別出其中的無(wú)符號(hào)數(shù)。無(wú)符號(hào)數(shù)文法規(guī)則可定義如下: .E比例因子E +- 0 1 2 3. 9 讀無(wú)符號(hào)數(shù)的程序流程圖見下圖實(shí)驗(yàn)代碼:package text_1;import java.util.*;public class Text1 public
2、 static void main(String args) int p = 0, w = 0, w1 = 0, j = 0, i = 0, d = 0, e = 1;/定義初值double w2 = 0;String str;System.out.println(請(qǐng)輸入一串字符串(以;結(jié)束):);Scanner m = new Scanner(System.in);str = m.nextLine();char ch1 = str.toCharArray(); /字符串轉(zhuǎn)化為字符數(shù)組/* * 檢測(cè)字符數(shù)組 for(i=0;ich1.length;i+) System.out.print(ch
3、1i+ ); */while (i 9 | ch1i = 0 & ch1i = 0 & ch1i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實(shí)型數(shù)為:+w2+*10+ +(e*(p-j+1);/科學(xué)計(jì)數(shù)法輸出實(shí)型j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯(cuò)誤!);if (ch1i = 0 & ch1i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實(shí)型數(shù)為:+w2+
4、*10+ +(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯(cuò)誤!);else i+;if (ch1i = 0 & ch1i = 0 & ch1i = 0 & ch1i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實(shí)型數(shù)為: + w2 + *10 + + (e * (p - j + 1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯(cuò)誤!);if (ch1i = 0 & ch1
5、i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實(shí)型數(shù)為:+w2+*10 + +(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯(cuò)誤!);else if (ch1i != E) /輸出小數(shù)System.out.println(小數(shù)為: + w + . + w1);w = 0;w1 = 0;j = 0;運(yùn)行結(jié)果:實(shí)驗(yàn)二、 逆波蘭式生成程序內(nèi)容:掌握語(yǔ)法分析的基本思想,并用高級(jí)語(yǔ)言編寫逆波蘭式生成程序(4學(xué)時(shí))要求:利用逆波蘭式生成算法編
6、寫程序,將從鍵盤上輸入的算術(shù)表達(dá)式(中綴表達(dá)式)轉(zhuǎn)化成逆波蘭式。逆波蘭表達(dá)式的生成過程涉及到運(yùn)算符的優(yōu)先級(jí),下表中列出幾個(gè)常用運(yùn)算符的優(yōu)先關(guān)系。右關(guān)系左常用運(yùn)算符優(yōu)先關(guān)系矩陣+-*/()+-*/()如上表所示的優(yōu)先關(guān)系矩陣表示了+,-,*,/,(,)等七種運(yùn)算符之間的相互優(yōu)先關(guān)系。“、”三種符號(hào)分別代表“大于”、“小于”、“相等”三種優(yōu)先關(guān)系。左邊的“”與右邊的“(”之間沒有優(yōu)先關(guān)系存在,所以表中為空白。逆波蘭表達(dá)式生成算法的關(guān)鍵在于比較當(dāng)前運(yùn)算符與棧頂運(yùn)算符的優(yōu)先關(guān)系,若當(dāng)前運(yùn)算符的優(yōu)先級(jí)高于棧頂運(yùn)算符,則當(dāng)前運(yùn)算符入棧,若當(dāng)前運(yùn)算符的優(yōu)先級(jí)低于棧頂運(yùn)算符,則棧頂運(yùn)算符退棧。下面給出了逆波蘭
7、表達(dá)式生成算法的流程圖。(為了便于比較相鄰運(yùn)算符的優(yōu)先級(jí),需要設(shè)立一個(gè)工作棧,用來(lái)存放暫時(shí)不能處理的運(yùn)算符,所以又稱運(yùn)算符棧。實(shí)驗(yàn)代碼:package text_2import java.util.*;public class Text2 private char Operator_Precedence_Relation_Matrix = , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ;private char Infix_Expression; / 字符串infix用于表示要
8、處理的中綴表達(dá)式private String Reverse_Polish_Expression = new String();/ 字符串reversePlishExpression用于表示處理結(jié)果逆波蘭式private String Analysis_Stack = new String();/字符串a(chǎn)nalysisStack用于表示分析棧private int Length_Infix_Expression = 0;/ 中綴表達(dá)式的長(zhǎng)度,初始值為0private int match_Parentheses = 1;/ 用來(lái)查看左右括號(hào)是否配對(duì)正確private int count = 0;
9、private void init(String str) Infix_Expression = str.toCharArray();Length_Infix_Expression = Infix_Expression.length;private int Operator_Judgement(char currentOperator) int flag = -1;switch (currentOperator) case +:flag = 0;break;case -:flag = 1;break;case *:flag = 2;break;case /:flag = 3;case :fla
10、g = 4;break;case (:flag = 5;break;case ):flag = 6;break;return flag;void convert_Process(String str) init(str);while (true) match_Parentheses = 0;if (count = Length_Infix_Expression) / 檢測(cè)輸入串為空while (Analysis_Stack.length() != 0) / 檢測(cè)分析棧if (Analysis_Stack.charAt(Analysis_Stack.length() - 1) = () Syst
11、em.out.println(n您輸入的中綴表達(dá)式中有無(wú)法配對(duì)的(括號(hào),請(qǐng)仔細(xì)核實(shí)!);System.exit(0); else Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);/ 退棧輸出System.out.println(逆波蘭式為:+ Reverse_Polish_Expression);System.exit(0); else i
12、f (Operator_Judgement(Infix_Expressioncount) = -1) Reverse_Polish_Expression += Infix_Expressioncount; else while (Analysis_Stack.length() != 0) / 檢測(cè)分析棧if (Operator_Precedence_Relation_MatrixOperator_Judgement(Analysis_Stack.charAt(Analysis_Stack.length() - 1)Operator_Judgement(Infix_Expressioncount
13、) = ) Analysis_Stack += Infix_Expressioncount;break; else if (Infix_Expressioncount != ) Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1); else while (Analysis_Stack.length() = 0| Analysis_Stack.c
14、harAt(Analysis_Stack.length() - 1) != () if (Analysis_Stack.length() = 0) System.out.println(n您輸入的中綴表達(dá)式中有無(wú)法配對(duì)的)括號(hào),請(qǐng)仔細(xì)核實(shí)!);System.exit(0); else Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);if (
15、Analysis_Stack.charAt(Analysis_Stack.length() - 1) = () Analysis_Stack = Analysis_Stack.substring(0, Analysis_Stack.length() - 1);match_Parentheses = 1;break;if (Analysis_Stack.length() = 0)if (Infix_Expressioncount != )Analysis_Stack += Infix_Expressioncount;else if (match_Parentheses != 1) System.out.println(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版藥品研發(fā)委托加工保密合同范本3篇
- 二零二五年度木材裝卸運(yùn)輸與木材運(yùn)輸車輛維護(hù)合同4篇
- 2025年銀杏樹種植基地水資源管理與保護(hù)合同4篇
- 個(gè)人典當(dāng)借款合同2024年定制2篇
- 二零二五年度汽車維修與保險(xiǎn)理賠咨詢合作協(xié)議4篇
- 2025年度重型卡車轉(zhuǎn)讓協(xié)議書4篇
- 2025年度智能車庫(kù)門遠(yuǎn)程監(jiān)控服務(wù)合同4篇
- 2025年度影視制作公司臨時(shí)演員勞動(dòng)合同范本4篇
- 2024續(xù)簽合同范本:航空航天技術(shù)合作續(xù)簽協(xié)議3篇
- 二零二五年度商業(yè)樓宇合同能源管理節(jié)能改造服務(wù)協(xié)議3篇
- 海外資管機(jī)構(gòu)赴上海投資指南(2024版)
- 山東省青島市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 墓地銷售計(jì)劃及方案設(shè)計(jì)書
- 從偏差行為到卓越一生3.0版
- 優(yōu)佳學(xué)案七年級(jí)上冊(cè)歷史
- 鋁箔行業(yè)海外分析
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 【公司利潤(rùn)質(zhì)量研究國(guó)內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國(guó)地區(qū)碼
評(píng)論
0/150
提交評(píng)論