




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、編譯原理實驗報告本科實驗報告課程名稱: 編譯原理D 實驗地點: 實驗室 專業(yè)班級: 學 號: _學生姓名: java編譯 指導教師: 成 績: 2015年 月 日實驗一、 無符號數(shù)的詞法分析程序(4學時)內(nèi)容:掌握詞法分析的基本思想,并用高級語言編寫無符號數(shù)的詞法分析程序。要求:從鍵盤上輸入一串字符(包括字母、數(shù)字等),最后以“;”結(jié)束,編寫程序識別出其中的無符號數(shù)。無符號數(shù)文法規(guī)則可定義如下: .E比例因子E +- 0 1 2 3. 9 讀無符號數(shù)的程序流程圖見下圖實驗代碼: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(請輸入一串字符串(以;結(jié)束):);Scanner m = new Scanner(System.in);str = m.nextLine();char ch1 = str.toCharArray(); /字符串轉(zhuǎn)化為字符數(shù)組/* * 檢測字符數(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ù)為:+w2+*10+ +(e*(p-j+1);/科學計數(shù)法輸出實型j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯誤!);if (ch1i = 0 & ch1i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實型數(shù)為:+w2+
4、*10+ +(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯誤!);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ù)為: + w2 + *10 + + (e * (p - j + 1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯誤!);if (ch1i = 0 & ch1
5、i = 0 & ch1i 1) w2 = w / (Math.pow(10.0, j - 1);System.out.println(實型數(shù)為:+w2+*10 + +(e*(p-j+1);j = 0;w2 = 0;w = 0;p = 0; elseSystem.out.println(輸入錯誤!);else if (ch1i != E) /輸出小數(shù)System.out.println(小數(shù)為: + w + . + w1);w = 0;w1 = 0;j = 0;運行結(jié)果:實驗二、 逆波蘭式生成程序內(nèi)容:掌握語法分析的基本思想,并用高級語言編寫逆波蘭式生成程序(4學時)要求:利用逆波蘭式生成算法編
6、寫程序,將從鍵盤上輸入的算術(shù)表達式(中綴表達式)轉(zhuǎn)化成逆波蘭式。逆波蘭表達式的生成過程涉及到運算符的優(yōu)先級,下表中列出幾個常用運算符的優(yōu)先關(guān)系。右關(guān)系左常用運算符優(yōu)先關(guān)系矩陣+-*/()+-*/()如上表所示的優(yōu)先關(guān)系矩陣表示了+,-,*,/,(,)等七種運算符之間的相互優(yōu)先關(guān)系?!啊ⅰ比N符號分別代表“大于”、“小于”、“相等”三種優(yōu)先關(guān)系。左邊的“”與右邊的“(”之間沒有優(yōu)先關(guān)系存在,所以表中為空白。逆波蘭表達式生成算法的關(guān)鍵在于比較當前運算符與棧頂運算符的優(yōu)先關(guān)系,若當前運算符的優(yōu)先級高于棧頂運算符,則當前運算符入棧,若當前運算符的優(yōu)先級低于棧頂運算符,則棧頂運算符退棧。下面給出了逆波蘭
7、表達式生成算法的流程圖。(為了便于比較相鄰運算符的優(yōu)先級,需要設(shè)立一個工作棧,用來存放暫時不能處理的運算符,所以又稱運算符棧。實驗代碼:package text_2import java.util.*;public class Text2 private char Operator_Precedence_Relation_Matrix = , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ;private char Infix_Expression; / 字符串infix用于表示要
8、處理的中綴表達式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;/ 中綴表達式的長度,初始值為0private int match_Parentheses = 1;/ 用來查看左右括號是否配對正確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) / 檢測輸入串為空while (Analysis_Stack.length() != 0) / 檢測分析棧if (Analysis_Stack.charAt(Analysis_Stack.length() - 1) = () Syst
11、em.out.println(n您輸入的中綴表達式中有無法配對的(括號,請仔細核實!);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) / 檢測分析棧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您輸入的中綴表達式中有無法配對的)括號,請仔細核實!);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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 暖通畢業(yè)設(shè)計報告
- 鋼琴啟蒙教學課件
- 課件教學設(shè)計課件
- 地理組件教學課件圖片
- 特色課教學課件
- DB61∕T 1145-2018 城市軌道交通運營安全標志及使用規(guī)范
- 【佳木斯】2025年黑龍江撫遠市事業(yè)單位公開招聘工作人員15人筆試歷年典型考題及考點剖析附帶答案詳解
- 新手烘焙活動方案
- 05《人應當堅持正義》同步訓練【大單元教學】高二語文同步備課系列(統(tǒng)編版選擇性必修中冊)
- 春游公司策劃方案
- 2024年重慶開州區(qū)中醫(yī)院招聘筆試真題
- 海外倉一件代發(fā)服務(wù)合同范本下載
- 2025年山西省華艦體育控股集團有限公司所屬企業(yè)校園招聘19人筆試參考題庫附帶答案詳解
- 2025臺州市椒江區(qū)輔警考試試卷真題
- 國開本科《管理英語4》機考總題庫及答案
- 軟裝行業(yè)競品分析報告
- 腎占位超聲診斷
- T∕CACM 024-2017 中醫(yī)臨床實踐指南 穴位埋線減肥
- 化工企業(yè)交接班制度(附表格)-樣本模板
- 鎂合金半固態(tài)注射成型技術(shù)的研究與發(fā)展
- 企業(yè)管理咨詢重點總結(jié)
評論
0/150
提交評論