南昌大學(xué)《編譯原理》實(shí)驗(yàn)報(bào)告(用Java編寫(xiě))_第1頁(yè)
南昌大學(xué)《編譯原理》實(shí)驗(yàn)報(bào)告(用Java編寫(xiě))_第2頁(yè)
南昌大學(xué)《編譯原理》實(shí)驗(yàn)報(bào)告(用Java編寫(xiě))_第3頁(yè)
南昌大學(xué)《編譯原理》實(shí)驗(yàn)報(bào)告(用Java編寫(xiě))_第4頁(yè)
南昌大學(xué)《編譯原理》實(shí)驗(yàn)報(bào)告(用Java編寫(xiě))_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí) 驗(yàn) 報(bào) 告學(xué) 院: 信息工程學(xué)院 系 計(jì)算機(jī)系 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名: 學(xué)號(hào): 任課教師: 目錄 南昌大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): 實(shí)驗(yàn)類型:驗(yàn)證 綜合 設(shè)計(jì) 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 實(shí)驗(yàn)1 詞法分析程序的設(shè)計(jì)一、實(shí)驗(yàn)項(xiàng)目名稱詞法分析程序的設(shè)計(jì)二、實(shí)驗(yàn)?zāi)康恼莆沼?jì)算機(jī)語(yǔ)言的詞法分析程序的開(kāi)發(fā)方法。 三、實(shí)驗(yàn)基本原理編制一個(gè)能夠分析三種整數(shù)、標(biāo)識(shí)符、主要運(yùn)算符和主要關(guān)鍵字的詞法分析程序。1、根據(jù)以下的正規(guī)式,編制正規(guī)文法,畫(huà)出狀態(tài)圖;標(biāo)識(shí)符<字母>(<字母>|<數(shù)字字符>)*十進(jìn)制整

2、數(shù)0 | ((1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*)八進(jìn)制整數(shù) 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六進(jìn)制整數(shù)0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*運(yùn)算符和界符+ - * / > < = ( ) ;關(guān)鍵字if then else while do 2、根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析函數(shù)int scan( ),完成以下功能:1) 從文本文件中讀入測(cè)試源代碼,根據(jù)狀態(tài)轉(zhuǎn)換圖,分析出一個(gè)單詞,2) 以二元式形式輸出單詞

3、<單詞種類,單詞屬性>其中單詞種類用整數(shù)表示:0:標(biāo)識(shí)符1:十進(jìn)制整數(shù)2:八進(jìn)制整數(shù)3:十六進(jìn)制整數(shù)運(yùn)算符和界符,關(guān)鍵字采用一字一符,不編碼其中單詞屬性表示如下:標(biāo)識(shí)符,整數(shù)由于采用一類一符,屬性用單詞表示運(yùn)算符和界符,關(guān)鍵字采用一字一符,屬性為空3、編寫(xiě)測(cè)試程序,反復(fù)調(diào)用函數(shù)scan( ),輸出單詞種別和屬性。四、主要儀器設(shè)備及耗材PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)Turbo C 程序集成環(huán)境或 Visual C+ 程序集成環(huán)境或Java五、實(shí)驗(yàn)步驟1、根據(jù)正規(guī)式,畫(huà)出狀態(tài)轉(zhuǎn)換圖;2、根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析算法;3、 采用C或C+語(yǔ)言,設(shè)計(jì)函數(shù)scan( ),實(shí)

4、現(xiàn)該算法;4、 編制測(cè)試程序(主函數(shù)main);5、調(diào)試程序:讀入文本文件,檢查輸出結(jié)果。六、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果 輸入數(shù)據(jù):編輯一個(gè)文本文件program.txt,在文件中輸入如下內(nèi)容:if data+92>0x3f thendata=data+01;elsedata=data-01; 正確結(jié)果:<if , -><0 , data><+ , -><1 , 92><> , -><3 , 3f><then , -><0 , data><= , ><0 , data>&

5、lt;+ , -><2 , 1>< ,-><else , -><0 , data><= , -><0 , data><- , -><2 , ->< , ->Java源程序代碼如下:package ex_1;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class Identity public static void main(String args

6、) String record=new String100; int i=0,n=0; try BufferedReader br=new BufferedReader(new FileReader("C:UsersAdministratorDesktopprogram.txt"); while(recordi=br.readLine()!=null) n+; i+; Perhang p=new Perhangn; for(int j=0;j<n;j+) pj=new Perhang(); pj.readData(recordj); catch(IOException

7、 e) System.out.print("Error:"+e); System.exit(1); class Perhang String keys="if","then","else","while","do" public int isletter(char char2) if(char2>='a'&&char2<='z')|(char2>='A'&&char2<=&

8、#39;Z') return 1; else return 0; public int isdigit(char char2) if(char2>='0'&&char2<='9') return 1; else return 0; public int reverse(StringBuffer st) String str=st.toString(); int num=0;for(int j=0;j<keys.length;j+)if(pareTo(str)=0)num+;if(num=0)return

9、 0;else return 1; public int digitsort(String s) if(s.charAt(0)='0') if(s.charAt(1)='x') return 2;/十六進(jìn)制 else if(s.charAt(1)>='0'&&s.charAt(1)<='9') return 1;/八進(jìn)制 else return 0;/十進(jìn)制return 0; public void readData(String s) char char1=s.toCharArray(); Strin

10、gBuffer st=new StringBuffer20; int num=0; for(int i=0;i<char1.length;i+) stnum=new StringBuffer(); if(this.isletter(char1i)=1) while(i<char1.length&&(this.isletter(char1i)=1|this.isdigit(char1i)=1) stnum.append(char1i); i+; i=i-1; if(this.reverse(stnum)=1) System.out.println("<

11、"+stnum+",->") ;/關(guān)鍵字 else System.out.println("<0,"+stnum+">") ;/變量 num+; else if(this.isdigit(char1i)=1)while(i<char1.length&&(this.isdigit(char1i)=1|this.isletter(char1i)=1) stnum.append(char1i); i+; i=i-1; if(this.digitsort(stnum.toString()=0)

12、 System.out.println("<1,"+stnum+">") ;/十進(jìn)制 else if(this.digitsort(stnum.toString()=1) stnum.deleteCharAt(0); System.out.println("<2,"+stnum+">") ;/八進(jìn)制 else stnum.delete(0, 2); System.out.println("<3,"+stnum+">") ;/十六進(jìn)制 num

13、+; else if(char1i='+') System.out.println("<"+char1i+",->") ; else if(char1i='-') System.out.println("<"+char1i+",->") ; else if(char1i='*') System.out.println("<"+char1i+",->") ; else if(char1i=

14、9;/') System.out.println("<"+char1i+",->") ; else if(char1i='>') System.out.println("<"+char1i+",->") ; else if(char1i='<')System.out.println("<"+char1i+",->") ; else if(char1i='(')System.

15、out.println("<"+char1i+",->") ; else if(char1i=')')System.out.println("<"+char1i+",->") ; else if(char1i='=')System.out.println("<"+char1i+",->") ; else if(char1i='')System.out.println("<&qu

16、ot;+char1i+",->") ; 將program.txt文件放在指定路徑下,并運(yùn)行上面的Java源程序,可以得到如下所示的結(jié)果截圖。七、思考討論題或體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議思考題:1、詞法分析能否采用空格來(lái)區(qū)分單詞?答:不能,在詞法分析中,處理不光有標(biāo)識(shí)符還有連接符,而連接符和其他的標(biāo)識(shí)符是可以連在一起出現(xiàn)的。如果用空格來(lái)區(qū)分單詞的話,就會(huì)使連接符和標(biāo)識(shí)符無(wú)法區(qū)分。2、程序設(shè)計(jì)中哪些環(huán)節(jié)影響詞法分析的效率?如何提高效率?答:整個(gè)程序都由狀態(tài)轉(zhuǎn)換圖而來(lái)。由遞歸方法實(shí)現(xiàn)的狀態(tài)轉(zhuǎn)換圖,影響了整個(gè)詞法分析器的分析效率,可以考慮使用棧來(lái)非遞歸的實(shí)現(xiàn)詞法分析。心得體會(huì):1、

17、先利用FileReader讀文件,再利用BufferedReader把數(shù)據(jù)放入緩沖區(qū)中2、判斷第一個(gè)字符,若是關(guān)鍵字或標(biāo)識(shí)符,若是數(shù)字,則可能是十進(jìn)制數(shù)或八進(jìn)制數(shù)或十六進(jìn)制數(shù)3、StringBuffer變量可以將檢測(cè)的字符連接起來(lái),從何判斷是關(guān)鍵字還是標(biāo)識(shí)符4、根據(jù)十進(jìn)制,八進(jìn)制和十六進(jìn)制之間的差別判斷該數(shù)屬于何種類型八、參考資料高等學(xué)校電子信息類規(guī)劃教材程序設(shè)計(jì)語(yǔ)言 編譯原理(第3版);陳火旺、劉春林等編著;國(guó)防工業(yè)出版社 南昌大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): 實(shí)驗(yàn)類型:驗(yàn)證 綜合 設(shè)計(jì) 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 實(shí)驗(yàn)2 語(yǔ)法分析程序的設(shè)計(jì)一、實(shí)驗(yàn)項(xiàng)目名稱語(yǔ)法分析程序的設(shè)計(jì)二

18、、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)典型的語(yǔ)法分析程序,實(shí)現(xiàn)對(duì)詞法分析程序所提供的單詞序列進(jìn)行語(yǔ)法檢查和結(jié)構(gòu)分析,進(jìn)一步掌握常用的語(yǔ)法分析中算法優(yōu)先分析方法。 三、實(shí)驗(yàn)基本原理1、給出文法如下: GE E->T|E+T; T->F|T*F; F->i(E);可以構(gòu)造算符優(yōu)先表如下:+*()i+*()i 2、計(jì)算機(jī)中表示上述優(yōu)先關(guān)系,優(yōu)先關(guān)系的機(jī)內(nèi)存放方式有兩種1)直接存放,2)為優(yōu)先關(guān)系建立優(yōu)先函數(shù),這里由學(xué)生自己選擇一種方式;1、 給出算符優(yōu)先分析算法如下:k:=1; Sk:=#;REPEAT 把下一個(gè)輸入符號(hào)讀進(jìn)a中; IF SkVT THEN j:=k ELSE

19、 j:=k-1; WHILE Sj a DO BEGIN REPEAT Q:=Sj; IF Sj-1VT THEN j:=j-1 ELSE j:=j-2 UNTIL Sj Q 把Sj+1Sk歸約為某個(gè)N; k:=j+1; Sk:=N; END OF WHILE; IF Sj a OR Sj a THEN BEGIN k:=k+1;Sk:=a END ELSE ERROR UNTIL a=# 1、 根據(jù)給出算法,利用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)算符優(yōu)先分析程序;2、 利用算符優(yōu)先分析程序完成下列功能:1) 手工將測(cè)試的表達(dá)式寫(xiě)入文本文件,每個(gè)表達(dá)式寫(xiě)一行,用“;”表示結(jié)束;2) 讀入文本文件中的表達(dá)式;3

20、) 調(diào)用實(shí)驗(yàn)2中的詞法分析程序搜索單詞;4) 把單詞送入算法優(yōu)先分析程序,判斷表達(dá)式是否正確(是否是給出文法的語(yǔ)言),若錯(cuò)誤,應(yīng)給出錯(cuò)誤信息;5) 完成上述功能,有余力的同學(xué)可以對(duì)正確的表達(dá)式計(jì)算出結(jié)果。四、主要儀器設(shè)備及耗材PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)Turbo C 程序集成環(huán)境或 Visual C+ 程序集成環(huán)境或Java五、實(shí)驗(yàn)步驟設(shè)計(jì)一個(gè)文法的算法優(yōu)先分析程序,判斷特定表達(dá)式的正確性。1、分析文法中終結(jié)符號(hào)的優(yōu)先關(guān)系;2、存放優(yōu)先關(guān)系或構(gòu)造優(yōu)先函數(shù);3、利用算符優(yōu)先分析的算法編寫(xiě)分析程序;4、寫(xiě)測(cè)試程序,包括表達(dá)式的讀入和結(jié)果的輸出;5、程序運(yùn)行效果,測(cè)試數(shù)據(jù)可以

21、參考下列給出的數(shù)據(jù)。六、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果 輸入數(shù)據(jù):編輯一個(gè)文本文文件expression.txt,在文件中輸入如下內(nèi)容:10;1+2;(1+2)*3+(5+6*7);(1+2)*3+4;1+2+3+(*4+5);(a+b)*(c+d);(ab3+de4)*5)+1;正確結(jié)果:(1)10;輸出:正確(2)1+2;輸出:正確(3)(1+2)*3+(5+6*7);輸出:正確(4)(1+2)*3+4輸出:錯(cuò)誤(5)1+2+3+(*4+5)輸出:錯(cuò)誤(6)(a+b)*(c+d)輸出:正確(7)(ab3+de4)*5)+1輸出:錯(cuò)誤Java源程序代碼如下:package ex_2;import jav

22、a.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.*;import javax.swing.JOptionPane;public class Te int isOpMemter(char ch)if(ch='0'|ch='1'|ch='2'|ch='3'|ch='4'|ch='5'|ch='6'|ch='7'|ch='8'|

23、ch='9')return 0;else if(ch='+'|ch='-'|ch='*'|ch='/'|ch='('|ch=')'|ch='#')return 1;else return -1;static int order(char m)switch(m)case '+':return 0;case '-':return 1;case '*':return 2;case '/':return 3;ca

24、se '(':return 4;case ')':return 5;case '#':return 6;default:return 7;int precede(char op1,char op2)int inCmpout=1,1,-1,-1,-1,1,1, 1,1,-1,-1,-1,1,1, 1,1,1,1,-1,1,1, 1,1,1,1,-1,1,1, -1,-1,-1,-1,-1,0,2, 1,1,1,1,2,1,1, -1,-1,-1,-1,-1,2,0;int i,j;i=order(op1);j=order(op2);return i

25、nCmpoutij;int calculate(int a,char ch,int b)switch(ch)case '+':return a+b;case '-':return a-b;case '*':return a*b;case '/':return a/b;default: return -1;public static int isletter(char char2) if(char2>='a'&&char2<='z')|(char2>='A&#

26、39;&&char2<='Z') return 1; else return 0;public static int isdigit(char char2) if(char2>='0'&&char2<='9') return 1; else return 0;public static int panduan(char char1) if(char10='+'|char10='-'|char10='*'|char10='/'|char

27、10='%') System.out.println("輸出:錯(cuò)誤"); return 0; for(int i=1;i<char1.length-1;i+) switch(char1i) case '+': case '-': case '*': case '/': case '%': if(Te.isletter(char1i-1)=1|Te.isdigit(char1i-1)=1)&&(Te.isletter(char1i+1)=1|Te.isdigi

28、t(char1i+1)=1)|(Te.isletter(char1i-1)=1|Te.isdigit(char1i-1)=1)&&(char1i+1='(')|(char1i-1=')')&&(Te.isletter(char1i+1)=1|Te.isdigit(char1i+1)=1) |(char1i-1=')')&&(char1i+1='(') break; else System.out.println("輸出:錯(cuò)誤"); return 0; defaul

29、t: break; Stack<Character> stack=new Stack<Character>(); int k=0; while(char1k!='#') if(char1k='(') stack.push(char1k); else if(char1k=')') if(stack.isEmpty() System.out.println("輸出:錯(cuò)誤"); return 0; else stack.pop(); k+; if(!stack.isEmpty() System.out.pri

30、ntln("輸出:錯(cuò)誤"); return 0; else System.out.println("輸出:正確"); return 1; public int iscontainletter(char ch) for(int k=0;k<ch.length-1;k+) if(chk>='a'&&chk<='z')|(chk>='A'&&chk<='Z') return 1; return 0; public static void

31、 main(String args) tryint n=0,i=0,j=0,k=0,counter=0;BufferedReader br=new BufferedReader(new FileReader("expression.txt");String record=new String100;while(recordi=br.readLine()!=null) n+;i+; Te Game=new Te(); for(int kt=0;kt<n;kt+) System.out.println("("+(kt+1)+") "

32、+recordkt); char charAry = recordkt.toCharArray(); charArycharAry.length-1='#'if(Game.panduan(charAry)=1&&Game.iscontainletter(charAry)=0)Stack<Character> OPTR=new Stack<Character>();Stack<Integer> OPND=new Stack<Integer>();OPTR.push('#'); i=0;while(ch

33、arAryi!='#'|OPTR.peek()!='#')if(Game.isOpMemter(charAryi)=0)int x=0;while(Game.isOpMemter(charAryi)=0)x=10*x+(charAryi-'0');i+;OPND.push(x);else if(Game.isOpMemter(charAryi)=1)switch(Game.precede(OPTR.peek(),charAryi)case -1:OPTR.push(charAryi);i+;break;case 0:OPTR.pop();i+;b

34、reak;case 1:char theta=OPTR.pop(); int b=(int)OPND.pop(); int a=(int)OPND.pop(); OPND.push(Game.calculate(a,theta,b); break;int c=(Integer) OPND.peek();System.out.println("計(jì)算結(jié)果是:"+c);System.out.println(); catch(IOException e)System.out.println("Error="+e);System.exit(1);將expressi

35、on.txt文件放在指定路徑下,并運(yùn)行上面的Java源程序,可以得到如下所示的結(jié)果截圖。七、思考討論題或體會(huì)或?qū)Ω倪M(jìn)實(shí)驗(yàn)的建議心得體會(huì):1、該程序涵蓋的模塊比較多,所以先將整體分成下列每個(gè)模塊 讀文本文件的每行 判斷表達(dá)式語(yǔ)法規(guī)則是否正確 如果表達(dá)式正確,求出表達(dá)式的值2、改程序需要對(duì)讀入的數(shù)據(jù)拋出異常3、在對(duì)表達(dá)式進(jìn)行判斷是如果是+ - * / %等時(shí)只有下列4種情況是正確的 符號(hào)左右兩邊都是數(shù)字 符號(hào)左邊是右括號(hào),右邊是數(shù)字 符號(hào)左邊是數(shù)字,右邊是左括號(hào) 符號(hào)左邊是右括號(hào),左邊是左括號(hào)4、在表達(dá)式正確的前提下,計(jì)算表達(dá)式的值可以采用兩個(gè)棧,OPTR是符號(hào)棧,存放符號(hào),OPND是數(shù)據(jù)棧,存放

36、數(shù)據(jù)。根據(jù)符號(hào)規(guī)則一次出入棧,從而計(jì)算出表達(dá)式的值。八、參考資料高等學(xué)校電子信息類規(guī)劃教材程序設(shè)計(jì)語(yǔ)言 編譯原理(第3版);陳火旺、劉春林等編著;國(guó)防工業(yè)出版社 南昌大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): 實(shí)驗(yàn)類型:驗(yàn)證 綜合 設(shè)計(jì) 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 實(shí)驗(yàn)3 逆波蘭式的翻譯和計(jì)算一、實(shí)驗(yàn)項(xiàng)目名稱逆波蘭式的翻譯和計(jì)算二、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)實(shí)驗(yàn)加深對(duì)語(yǔ)法指導(dǎo)翻譯原理的理解,掌握算符優(yōu)先分析的方法,將語(yǔ)法分析所識(shí)別的表達(dá)式變換成中間代碼的翻譯方法。三、實(shí)驗(yàn)基本原理1、給出文法如下: GE E->T|E+T; T->F|T*F; F->i(E); 對(duì)應(yīng)的轉(zhuǎn)化為逆波蘭式的語(yǔ)

37、義動(dòng)作如下:E-> E(1)op E(2) E.CODE:= E(1).CODE|E(2).CODE|opE->(E(1) E.CODE := E(1).CODE E->id E.CODE := id2、利用實(shí)驗(yàn)5中的算符優(yōu)先分析算法,結(jié)合上面給出的語(yǔ)義動(dòng)作實(shí)現(xiàn)逆波蘭式的構(gòu)造;3、利用棧,計(jì)算生成的逆波蘭式,步驟如下:1) 中綴表達(dá)式,從文本文件讀入,每一行存放一個(gè)表達(dá)式,為了降低難度,表達(dá)式采用常數(shù)表達(dá)式;2) 利用結(jié)合語(yǔ)法制導(dǎo)翻譯的算符優(yōu)先分析,構(gòu)造逆波蘭式;3) 利用棧計(jì)算出后綴式的結(jié)果,并輸出;四、主要儀器設(shè)備及耗材PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)T

38、urbo C 程序集成環(huán)境或 Visual C+ 程序集成環(huán)境或Java五、實(shí)驗(yàn)步驟設(shè)計(jì)一個(gè)表示能把普通表達(dá)式(中綴式)翻譯成后綴式,并計(jì)算出結(jié)果的程序。 1、了解語(yǔ)法制導(dǎo)翻譯的方法,學(xué)習(xí)后綴式構(gòu)造的語(yǔ)義動(dòng)作; 2、結(jié)合實(shí)驗(yàn)5的算符優(yōu)先程序,設(shè)計(jì)程序構(gòu)造后綴式;3、利用棧,編程實(shí)現(xiàn)后綴式的計(jì)算;4、測(cè)試程序運(yùn)行效果:從文本文件中讀表達(dá)式,在屏幕上輸出,檢查輸出結(jié)果。六、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果 輸入數(shù)據(jù):編輯一個(gè)文本文文件expression.txt,在文件中輸入如下內(nèi)容:1+2;(1+2)*3;(10+20)*30+(50+60*70);正確結(jié)果:(1)1+2;輸出:1,2,+ 3(2)(1+2)

39、*3;輸出:1,2,+,3,* 9(3)(10+20)*30+(50+60*70)輸出:10,20,+30,*50,60,70,*,+,+ 5150Java源程序代碼如下:package ex_3;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.*;public class ni public static void main(String args)tryBufferedReader in=new BufferedReader(new Fil

40、eReader("t.txt");String record=new String100;/String hz=new String100;/StringBuffer str=new StringBuffer100;EachExpression ee=new EachExpression100;int i=0,n=0;while(recordi=in.readLine()!=null)i+;n+;/charchar1=new char100100;for(i=0;i<n;i+)System.out.println("("+(i+1)+")

41、 "+recordi);/stri=new StringBuffer();/char1i=stri.toString().toCharArray();eei=new EachExpression();eei.dataReader(recordi);catch(IOException e) System.out.print("Error:"+e); System.exit(1); class EachExpressionstatic int order(char m)switch(m)case '+':return 0;case '-'

42、;:return 1;case '*':return 2;case '/':return 3;case '(':return 4;case ')':return 5;case '#':return 6;default:return 7;int precede(char op1,char op2)int inCmpout=1,1,-1,-1,-1,1,1, 1,1,-1,-1,-1,1,1, 1,1,1,1,-1,1,1, 1,1,1,1,-1,1,1, -1,-1,-1,-1,-1,0,2, 1,1,1,1,2,1

43、,1, -1,-1,-1,-1,-1,2,0;int i,j;i=order(op1);j=order(op2);return inCmpoutij;int calculate(int a,char ch,int b)switch(ch)case '+':return a+b;case '-':return a-b;case '*':return a*b;case '/':return a/b;default: return -1;public static int isletter(char char2) if(char2=&#

44、39;+'|char2='-'|char2='*'|char2='/'|char2='%'|char2='(') return 1; else return 0;public static int isdigit(char char2) if(char2>='0'&&char2<='9') return 1; else return 0;public void dataReader(String s) Stack<Character>

45、stack=new Stack<Character>(); stack.push('#');StringBuffer str=new StringBuffer();str.append("輸出:");StringBuffer s2=new StringBuffer(s);int j;if(s2.charAt(0)='-')s2.insert(0, 0);for(j=1;j<s2.length()-1;j+)if(s2.charAt(j)='-'&&s2.charAt(j-1)='(')s2.insert(j, 0);char char1=s2.toString().toCharArray();for(j=0;j<char1.length-1;j+) if(EachExpression.isdigit(char1j)=1)while(EachExpression.isdi

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論