版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)專業(yè)軟件類課程實(shí)驗(yàn)報(bào)告課程名稱:編譯原理實(shí)驗(yàn)題目:中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式實(shí)驗(yàn)小組成員:實(shí)驗(yàn)小組組長(zhǎng):任課教師:專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)名稱:計(jì)科1班實(shí)驗(yàn)起止時(shí)間:2014-6-22014-6-3一、實(shí)驗(yàn)?zāi)康?、要求設(shè)計(jì)交互界面,能輸入能轉(zhuǎn)換能輸出,形式和風(fēng)格自定。2、掌握?!昂筮M(jìn)先出”的特點(diǎn)。3、掌握棧的典型應(yīng)用中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,并利用后綴表達(dá)式求值。2、 實(shí)驗(yàn)內(nèi)容1、 設(shè)計(jì)一個(gè)計(jì)算器,能夠進(jìn)行界面交互2、 能夠?qū)⑤斎氲闹芯Y表達(dá)式轉(zhuǎn)換為正確的后綴表達(dá)式,3、 根據(jù)得到的后綴表達(dá)式,求出表達(dá)式的值三、實(shí)驗(yàn)需求1、界面部分:可以在界面上單擊任何一個(gè)按鈕,將在中綴表達(dá)式文本框中時(shí)
2、刻顯示輸入的表達(dá)式,后綴表達(dá)式文本框顯示后綴表達(dá)式,結(jié)果文本框顯示計(jì)算結(jié)果2、 算法部分:將中綴表達(dá)式文本框中的字符串讀出,并轉(zhuǎn)換成后綴表達(dá)式,轉(zhuǎn)換后,可根據(jù)后綴表達(dá)式求出表達(dá)式的值4、 主要數(shù)據(jù)結(jié)構(gòu)介紹1、 程序中創(chuàng)建兩個(gè)隊(duì)列Queue,一個(gè)隊(duì)列用來(lái)存放中綴表達(dá)式,另一個(gè)隊(duì)列用來(lái)存放后綴表達(dá)式;2、同時(shí),程序中需要?jiǎng)?chuàng)建兩個(gè)棧Stack,一個(gè)在表達(dá)式轉(zhuǎn)換時(shí),用來(lái)存放運(yùn)算符,一個(gè)在后綴表達(dá)式求值時(shí),用來(lái)存放操作數(shù)5、 主要模塊算法介紹1、中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式(1)若取出的字符是數(shù)字,則分析出完整的運(yùn)算數(shù),該運(yùn)算數(shù)直接送入S2棧 (2)若取出的字符是運(yùn)算符,則將該運(yùn)算符與S1棧棧頂元素比較,如
3、果該運(yùn)算符優(yōu)先級(jí)大于S1棧棧頂運(yùn)算符優(yōu)先級(jí),則將該運(yùn)算符進(jìn)S1棧,否者,將S1棧的棧頂運(yùn)算符彈出,送入S2棧中,直至S1棧棧頂運(yùn)算符低于(不包括等于)該運(yùn)算符優(yōu)先級(jí),則將該運(yùn)算符送入S1棧。 (3)若取出的字符是“(”,則直接送入S1棧棧頂。 (4)若取出的字符是“)”,則將距離S1棧棧頂最近的“(”之間的運(yùn)算符,逐個(gè)出棧,依次送入S2棧,此時(shí)拋棄“(”。 (5) 重復(fù)上面的14步,直至處理完所有的輸入字符 (6)若所有的字符都以取出,則將S1棧內(nèi)所有運(yùn)算符,逐個(gè)出棧,依次送入S2棧。 完成以上步驟,S2棧便為后綴表達(dá)式輸出結(jié)果。2、 后綴表達(dá)式求值(1)定義一個(gè)double型的運(yùn)算數(shù)棧,將中
4、綴表達(dá)式轉(zhuǎn)換得到的后綴表達(dá)式字符串自左向右依次讀入。(2)如果讀入的是操作數(shù),將該操作數(shù)(將自動(dòng)類型轉(zhuǎn)換為double型)直接進(jìn)入運(yùn)算數(shù)棧。(3)如果讀入的是運(yùn)算符,則立即從運(yùn)算數(shù)棧中彈出兩個(gè)運(yùn)算數(shù),計(jì)算兩個(gè)運(yùn)算數(shù)運(yùn)算后的值(運(yùn)算時(shí)先出棧的元素放在運(yùn)算符后面,后出棧的元素放在運(yùn)算符前面),并將計(jì)算結(jié)果存回運(yùn)算數(shù)棧。(4)重復(fù)、步,直到后綴表達(dá)式結(jié)束,最后棧中保存的那個(gè)數(shù)即為該后綴表達(dá)式的計(jì)算結(jié)果。6、 程序?qū)崿F(xiàn)環(huán)境及使用說(shuō)明本次實(shí)驗(yàn)采用Eclipse進(jìn)行代碼的編寫、編譯及運(yùn)行;編寫語(yǔ)言為java語(yǔ)言;程序的運(yùn)行環(huán)境為jdk1.8;系統(tǒng)為windows8.17、 實(shí)驗(yàn)測(cè)試用例設(shè)計(jì)說(shuō)明1、 簡(jiǎn)單的
5、測(cè)試,沒有括號(hào),負(fù)數(shù),小數(shù)輸入1+2*3輸出123*+計(jì)算結(jié)果7.02、 錯(cuò)誤的測(cè)試,除數(shù)為0輸入10/0輸出100/計(jì)算結(jié)果Infinity3、復(fù)雜的測(cè)試,含有括號(hào),負(fù)數(shù),小數(shù)輸入-9.5+(-3-1)*3+10/2輸出-9.5-31-3*+102/+計(jì)算結(jié)果-16.5八、實(shí)驗(yàn)結(jié)果測(cè)試情況 9、 小組對(duì)實(shí)驗(yàn)結(jié)果的自我評(píng)價(jià)通過(guò)這次實(shí)驗(yàn),我對(duì)中綴表達(dá)式和后綴表達(dá)式有了一定的了解,進(jìn)一步的鞏固了這部分的知識(shí)。懂得了中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式的工作原理。在編程過(guò)程中,多多少少遇到了一些小問(wèn)題,比如,負(fù)號(hào)的處理,到底是將負(fù)號(hào)與操作數(shù)作為一個(gè)整體進(jìn)行處理,還是將負(fù)號(hào)與運(yùn)算符做一樣的處理。本人經(jīng)過(guò)多次測(cè)試,
6、還是將負(fù)號(hào)與操作數(shù)作為一個(gè)整體進(jìn)行處理,這樣比較方便一些。在程序上雖然實(shí)現(xiàn)了要求的功能,但是對(duì)輸入非法的處理可能有一些欠缺。由于編程能力和時(shí)間的不足,這個(gè)計(jì)算器還有待完善,功能相對(duì)較少。望老師多多指教。十、任課教師對(duì)實(shí)驗(yàn)結(jié)果的評(píng)分源碼MyFrame.javapackage view;import java.awt.BorderLayout;import java.awt.EventQueue;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;impo
7、rt javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.EmptyBorder;import operation.Conversion;public class MyFrame extends JFrame private JPanel contentPane;private JTextField textField;private JTe
8、xtField textField_1;private JTextField textField_2;String expression=;/* * Launch the application. */public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try MyFrame frame = new MyFrame();frame.setTitle(中后綴表達(dá)式轉(zhuǎn)換);frame.setVisible(true); catch (Exception e) e.p
9、rintStackTrace(););/* * Create the frame. */public MyFrame() setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 259, 364);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5);setContentPane(contentPane);contentPane.setLayout(new GridLayout(8, 1, 0, 0);JPanel p
10、anel = new JPanel();contentPane.add(panel);panel.setLayout(new BorderLayout(0, 0);JLabel lblNewLabel = new JLabel(中綴表達(dá)式:);panel.add(lblNewLabel, BorderLayout.WEST);textField = new JTextField();textField.setEditable(false);panel.add(textField, BorderLayout.CENTER);textField.setColumns(10);JPanel pane
11、l_1 = new JPanel();contentPane.add(panel_1);panel_1.setLayout(new BorderLayout(0, 0);JLabel label = new JLabel(后綴表達(dá)式:);panel_1.add(label, BorderLayout.WEST);textField_1 = new JTextField();textField_1.setEditable(false);panel_1.add(textField_1, BorderLayout.CENTER);textField_1.setColumns(10);JPanel p
12、anel_2 = new JPanel();contentPane.add(panel_2);panel_2.setLayout(new BorderLayout(0, 0);JLabel label_1 = new JLabel(計(jì)算結(jié)果是:);panel_2.add(label_1, BorderLayout.WEST);textField_2 = new JTextField();textField_2.setEditable(false);panel_2.add(textField_2, BorderLayout.CENTER);textField_2.setColumns(10);J
13、Panel panel_3 = new JPanel();contentPane.add(panel_3);panel_3.setLayout(new GridLayout(0, 4, 0, 0);JButton button = new JButton(1);button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button.getText();textField.setText(expression););panel_3.add(bu
14、tton);JButton button_1 = new JButton(2);button_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_1.getText();textField.setText(expression););panel_3.add(button_1);JButton button_2 = new JButton(3);button_2.addActionListener(new ActionListener
15、() public void actionPerformed(ActionEvent arg0) expression += button_2.getText();textField.setText(expression););panel_3.add(button_2);JButton button_3 = new JButton(+);button_3.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_3.getText();tex
16、tField.setText(expression););panel_3.add(button_3);JPanel panel_4 = new JPanel();contentPane.add(panel_4);panel_4.setLayout(new GridLayout(1, 0, 0, 0);JButton button_4 = new JButton(4);button_4.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_
17、4.getText();textField.setText(expression););panel_4.add(button_4);JButton button_5 = new JButton(5);button_5.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_5.getText();textField.setText(expression););panel_4.add(button_5);JButton button_6 =
18、new JButton(6);button_6.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_6.getText();textField.setText(expression););panel_4.add(button_6);JButton button_7 = new JButton(-);button_7.addActionListener(new ActionListener() public void actionPerf
19、ormed(ActionEvent arg0) expression += button_7.getText();textField.setText(expression););panel_4.add(button_7);JPanel panel_5 = new JPanel();contentPane.add(panel_5);panel_5.setLayout(new GridLayout(1, 0, 0, 0);JButton button_8 = new JButton(7);button_8.addActionListener(new ActionListener() public
20、void actionPerformed(ActionEvent arg0) expression += button_8.getText();textField.setText(expression););panel_5.add(button_8);JButton button_9 = new JButton(8);button_9.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_9.getText();textField.set
21、Text(expression););panel_5.add(button_9);JButton button_10 = new JButton(9);button_10.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_10.getText();textField.setText(expression););panel_5.add(button_10);JButton button_11 = new JButton(*);butto
22、n_11.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_11.getText();textField.setText(expression););panel_5.add(button_11);JPanel panel_6 = new JPanel();contentPane.add(panel_6);panel_6.setLayout(new GridLayout(1, 0, 0, 0);JButton button_12 = n
23、ew JButton(0);button_12.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_12.getText();textField.setText(expression););panel_6.add(button_12);JButton button_13 = new JButton();button_13.addActionListener(new ActionListener() public void actionP
24、erformed(ActionEvent arg0) expression += button_13.getText();textField.setText(expression););panel_6.add(button_13);JButton button_14 = new JButton();button_14.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_14.getText();textField.setText(exp
25、ression););panel_6.add(button_14);JButton button_15 = new JButton(/);button_15.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_15.getText();textField.setText(expression););panel_6.add(button_15);JPanel panel_7 = new JPanel();contentPane.add(p
26、anel_7);panel_7.setLayout(new GridLayout(1, 0, 0, 0);JButton button_16 = new JButton(.);button_16.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression += button_16.getText();textField.setText(expression););panel_7.add(button_16);JButton btnNewButton = new J
27、Button(=);btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) /System.out.println(expression);Conversion cv = new Conversion(expression);cv.calculate();textField.setText(expression);textField_1.setText(cv.houzhui);textField_2.setText(cv.resultstr););pane
28、l_7.add(btnNewButton);JButton btnC = new JButton(C);btnC.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) expression = ;textField.setText(expression);textField_1.setText();textField_2.setText(););panel_7.add(btnC);Conversion.javapackage operation;import java.util.
29、Iterator;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class Conversion char ch;public Conversion(String infix)ch=infix.toCharArray();Queue readin=new LinkedList();Queue writeout=new LinkedList();Stack fuhao=new Stack();public String houzhui=;public String resultst
30、r=;public void init() /String infix=-9.5+(-3-1)*3+10/2;/中綴表達(dá)式/String suffix=-9.5 -3 1-3*+10 2/+;/后綴表達(dá)式/char ch=infix.toCharArray();String temp=;int t=0;/對(duì)第一字符是-進(jìn)行特殊處理if(ch0=-&ch1=0&ch1=0&cht=9|cht=.)temp=temp+String.valueOf(cht);t+;readin.add(temp);temp=;for (int i = t; i =0&chi=9|chi=.)temp=temp+St
31、ring.valueOf(chi);i+;if(!temp.equals()readin.add(temp);temp=;/負(fù)數(shù)后的符號(hào)進(jìn)行處理if(chi=+|chi=-|chi=*|chi=/|chi=(|chi=)i-;elseif(chi=+|chi=-|chi=*|chi=/|chi=(|chi=)if(!temp.equals()readin.add(temp);temp=;readin.add(String.valueOf(chi);elsetemp=temp+String.valueOf(chi);/最后一個(gè)字符串進(jìn)行處理if(!temp.equals()readin.add(
32、temp);temp=;/Iterator it=readin.iterator();/while(it.hasNext()/System.out.println(it.next();/public void convert() init();Iterator it=readin.iterator();while(it.hasNext()/System.out.println(it.next();String temp=it.next();/數(shù)字直接進(jìn)棧if(!(temp.equals(+)|temp.equals(-)|temp.equals(*)|temp.equals(/)|temp.e
33、quals()|temp.equals()writeout.add(temp);else/棧為空時(shí)if(fuhao.isEmpty()fuhao.push(temp);else if(temp.equals()fuhao.push(temp);else if(temp.equals()while(!fuhao.isEmpty()&(!fuhao.peek().equals()writeout.add(fuhao.pop();if(!fuhao.isEmpty()fuhao.pop();else/第一個(gè)參數(shù)是隊(duì)列里的符號(hào),第二個(gè)參數(shù)是棧里的符號(hào)/if(priority(temp, fuhao.p
34、eek()/fuhao.push(temp);/else/writeout.add(fuhao.pop();/while(!fuhao.isEmpty()&(!priority(temp, fuhao.peek()writeout.add(fuhao.pop();fuhao.push(temp);while(!fuhao.isEmpty()writeout.add(fuhao.pop();Iterator ou=writeout.iterator();while(ou.hasNext()houzhui+=ou.next();public void calculate()convert();String temp=;double shu1=0;double shu2=0;double result=0;char
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人抵押借款簡(jiǎn)單合同(2024版)
- 二零二五版電子數(shù)碼產(chǎn)品門店承包經(jīng)營(yíng)合同4篇
- 2025年度紡織行業(yè)原材料電商直采服務(wù)合同3篇
- 馬鈴薯購(gòu)銷2025版:年度種植收購(gòu)合同2篇
- 二零二五版苗圃場(chǎng)技術(shù)員園藝栽培技術(shù)聘用合同4篇
- 情感溝通解決客戶投訴的關(guān)鍵技巧
- 長(zhǎng)春科技學(xué)院《健“聲”》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)春工程學(xué)院《大學(xué)基礎(chǔ)讀寫4》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版車輛抵押反擔(dān)保車輛租賃擔(dān)保協(xié)議2篇
- 二零二五版房地產(chǎn)開發(fā)與文化藝術(shù)合作協(xié)議3篇
- 2023年版《安寧療護(hù)實(shí)踐指南(試行)》解讀課件
- AQ6111-2023個(gè)體防護(hù)裝備安全管理規(guī)范
- 2024年高考語(yǔ)文備考之??甲骷易髌罚ㄏ拢褐袊?guó)現(xiàn)當(dāng)代、外國(guó)
- T-CSTM 01124-2024 油氣管道工程用工廠預(yù)制袖管三通
- 2019版新人教版高中英語(yǔ)必修+選擇性必修共7冊(cè)詞匯表匯總(帶音標(biāo))
- 新譯林版高中英語(yǔ)必修二全冊(cè)短語(yǔ)匯總
- 基于自適應(yīng)神經(jīng)網(wǎng)絡(luò)模糊推理系統(tǒng)的游客規(guī)模預(yù)測(cè)研究
- 河道保潔服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 品管圈(QCC)案例-縮短接臺(tái)手術(shù)送手術(shù)時(shí)間
- 精神科病程記錄
- 閱讀理解特訓(xùn)卷-英語(yǔ)四年級(jí)上冊(cè)譯林版三起含答案
評(píng)論
0/150
提交評(píng)論