




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理實(shí)驗(yàn)報(bào)告 計(jì)算機(jī)與信息學(xué)院實(shí)驗(yàn)一 詞法分析器的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 理解詞法分析器的任務(wù)和輸出形式2. 理解掃描器的工作原理3. 掌握狀態(tài)轉(zhuǎn)換圖的繪制以及單詞的識(shí)別技術(shù)4. 掌握詞法分析器的設(shè)計(jì)過(guò)程,能夠使用某種高級(jí)語(yǔ)言實(shí)現(xiàn)一個(gè)詞法分析器二、實(shí)驗(yàn)環(huán)境Myeclipse三、實(shí)驗(yàn)要求給出一個(gè)簡(jiǎn)單的詞法語(yǔ)言規(guī)則描述,其中:1開(kāi)頭的種別碼為關(guān)鍵詞,2開(kāi)頭的為算符,3開(kāi)頭的為界符,4開(kāi)頭的為標(biāo)識(shí)符,5開(kāi)頭的為常數(shù),標(biāo)識(shí)符為字母開(kāi)頭,以字母和數(shù)字組成的任意符號(hào)串,常數(shù)為整數(shù),即以數(shù)字組成的符號(hào)串。四、實(shí)驗(yàn)難點(diǎn) 1. 對(duì)整數(shù)的二進(jìn)制轉(zhuǎn)換,以及對(duì)指針的操作2. 標(biāo)識(shí)符的設(shè)置五、實(shí)驗(yàn)代碼1. ciFa.
2、Javapackage com.yaoer.test1;import javax.swing.*;import javax.swing.border.TitledBorder;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;SuppressWarnings("serial")public class ciFa extends JFrameprivate JButton jbtShow = new JButton("進(jìn)行詞法分析"
3、;);/按鈕private JTextArea jta = new JTextArea();/輸入文本框private JTextArea jtaOut = new JTextArea();/輸出文本框private JPanel jpl=new JPanel();private String intput =""private String output =""private compiler comp = new compiler();/* * param args */public static void main(String args)ciFa
4、 frame = new ciFa();frame.setTitle("詞法分析器");/frame.setLocationRelativeTo(frame);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(500, 400);frame.setVisible(true);public ciFa()jta.setWrapStyleWord(true);jta.setLineWrap(true);jtaOut.setWrapStyleWord(true);jtaOut.setLineWrap
5、(true);jtaOut.setEditable(false);JScrollPane scrollPane = new JScrollPane(jta);JScrollPane scrollPane2 = new JScrollPane(jtaOut);scrollPane.setPreferredSize(new Dimension(300,300);scrollPane2.setPreferredSize(new Dimension(300,300);jtaOut.setBorder(new TitledBorder("詞法分析結(jié)果");jta.setBorder(
6、new TitledBorder("請(qǐng)?jiān)谶@輸入");jpl.setLayout(new GridLayout(2,2);jpl.add(jta);jpl.add(jtaOut);add(jbtShow,BorderLayout.SOUTH);add(jpl);jbtShow.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)intput = jta.getText();output=puterComp(intput);jtaOut.append(output););
7、2. compiler.Javapackage com.yaoer.test1;public class compiler public String computerComp(String str)String output=""int index=0;int k = 0;while(index<str.length()if(isJieFu(str.charAt(index)!=-1) /判斷界符output+=("( 30"+isJieFu(str.charAt(index)+" "+str.charAt(index)+&q
8、uot; 界符)"); index+;else if(isMath(str.charAt(index) /判斷常數(shù)int index1=index;output+=("( ");String sub;String result;while(isMath(str.charAt(index)output+=(str.charAt(index);index+;if(index>=str.length()if(str.charAt(index1)='0') if(index1+1>=str.length()sub =str.substring(
9、index1, index); result = Zhuan(sub);output+=(" "+result+" 數(shù)字)");elseif(isMath(str.charAt(index1+1) output+=(" 非法字符)"); else sub =str.substring(index1, index); result = Zhuan(sub);output+=(" "+result+" 數(shù)字)");else sub =str.substring(index1, index); res
10、ult = Zhuan(sub);output+=(" "+result+" 數(shù)字)"); return output;if(isLetter(str.charAt(index)if(str.charAt(index)=' '|str.charAt(index)='n')/空格或者回車(chē)處理 index+;while(!isMath(str.charAt(index)|(isLetter(str.charAt(index)output+=(str.charAt(index);index+; if(index>=str.
11、length() output+=(" 非標(biāo)識(shí)符)");return output; output+=(" 非法字符)");else if(str.charAt(index1)='0') if(isMath(str.charAt(index1+1) output+=(" 非法字符)"); else sub =str.substring(index1, index); result = Zhuan(sub);output+=(" "+result+" 數(shù)字)");else sub
12、=str.substring(index1, index); result = Zhuan(sub);output+=(" "+result+" 數(shù)字)"); else if(isLetter(str.charAt(index) /標(biāo)識(shí)符判斷int i=index; String sub;while(isLetter(str.charAt(index)|isMath(str.charAt(index)index+;if(index>=str.length()/System.out.println(index);sub =str.substring(
13、i, index); if(isKeyword(sub)!=0) if(isKeyword(sub)>=10)output+=("( "+" 1"+isKeyword(sub)+" "+sub+" 關(guān)鍵字)");else output+=("( "+" 10"+isKeyword(sub)+" "+sub+" 關(guān)鍵字)");elseoutput+=("( "+sub+" 標(biāo)識(shí)符)"); re
14、turn output; sub = str.substring(i, index); /判斷是不是關(guān)鍵字 if(isKeyword(sub)!=0) if(isKeyword(sub)>=10)output+=("( "+" 1"+isKeyword(sub)+" "+sub+" 關(guān)鍵字)");elseoutput+=("( "+" 10"+isKeyword(sub)+" "+sub+" 關(guān)鍵字)");elseoutput+=
15、("("+sub+" 標(biāo)識(shí)符)"); else if(isCompu(str.charAt(index)!=0)if(index+1>=str.length()if(str.charAt(index)='&'|str.charAt(index)='|')output+=("("+str.charAt(index)+" 非法字符)"); index+;elseif(isCompu(str.charAt(index)<=8)output+=("("
16、+" 20"+isCompu(str.charAt(index)+" "+str.charAt(index)+" 運(yùn)算符)"); else if(str.charAt(index)='!')output+=("( 218 "+str.charAt(index)+" 運(yùn)算符)"); index+;elseif(isCompu(str.charAt(index+1)=0)if(str.charAt(index)='&'|str.charAt(index)=
17、39;|')output+=("("+str.charAt(index)+" 非法字符)"); index+;elseif(isCompu(str.charAt(index)<=8)output+=("("+" 20"+isCompu(str.charAt(index)+" "+str.charAt(index)+" 運(yùn)算符)"); else if(str.charAt(index)='!')output+=("("+&quo
18、t; 218"+str.charAt(index)+" 運(yùn)算符)"); index+;elseif(index+2>=str.length()if( isCompu(str.charAt(index+1)!=0)if(str.charAt(index)='=')if(str.charAt(index+1)='=')output+=("("+" 210 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;in
19、dex+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='<' )switch (str.charAt(index+1) case '=':output+=("("+" 209 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;ind
20、ex+;break;case '<':output+=("( 215 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;break;case '>':output+=("( 211 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;break;default:output+=("("+str.cha
21、rAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;break;else if(str.charAt(index)='>' )if(str.charAt(index+1)='=')output+=("( 207 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;else if(str.charAt(index+1)='>')output+=(
22、"( 214 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='&')if(str.charAt(index+1)='&')output+=("( 216 "+s
23、tr.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='|')if(str.charAt(index+1)='|')output+=("( 217 "+str.charAt(index)+str.charAt(
24、index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='+')if(str.charAt(index+1)='+')output+=("( 212 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)");
25、 index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='-')if(str.charAt(index+1)='-')output+=("( 213 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=(
26、"("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)"); index+;index+;return output;elseif( isCompu(str.charAt(index+1)!=0)if(str.charAt(index)='=')if(str.charAt(index+1)='
27、=')output+=("("+" 210 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='<' )switch (str.charAt(index+1) case '=
28、':output+=("("+" 209 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;break;case '<':output+=("("+" 215 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;break;case '>':output+=("(
29、 211 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;break;default:output+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;break;else if(str.charAt(index)='>' )if(str.charAt(index+1)='=')output+=("( 207 &qu
30、ot;+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;else if(str.charAt(index+1)='>')output+=("( 214 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)&quo
31、t;);index+;index+;else if(str.charAt(index)='&')if(str.charAt(index+1)='&')output+=("( 216 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;el
32、se if(str.charAt(index)='|')if(str.charAt(index+1)='|')output+=("( 217 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='
33、;+')if(str.charAt(index+1)='+')output+=("( 212"+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;else if(str.charAt(index)='-')if(str.charAt(index+1
34、)='-')output+=("( 213 "+str.charAt(index)+str.charAt(index+1)+" 運(yùn)算符)"); index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)");index+;index+;elseoutput+=("("+str.charAt(index)+str.charAt(index+1)+" 非法字符)"); i
35、ndex+;index+;else if(str.charAt(index)=' '|str.charAt(index)='n')/空格或者回車(chē)處理 index+;else /其他字符output+=("("+str.charAt(index)+" 非法字符)");index+; k+;if(k%10=0)output+=("n");return output;/* * 1.判斷是不是關(guān)鍵字 * param str * return */public int isKeyword(String str)i
36、nt result = 0;String arr="void","main","int","char","if","else","for","while","return","cout","cin" ;for(int i=0;i<arr.length;i+)if(str.equals(arri)result = i+1;break;else result = 0;retu
37、rn result;/* * 2.判斷是不是運(yùn)算符 * param charr * return */public int isCompu(char charr) char arr='+','-','*','/','=','>','&','<','!','|' for(int i=0;i<arr.length;i+) if (charr=arri)return i+1;return 0;/* * 3.判斷是不是界符 * param charr * return */public int isJieFu(char charr)char arr='(',')','','','','',',','&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 車(chē)輛股權(quán)轉(zhuǎn)讓與改裝升級(jí)服務(wù)合同
- 出租車(chē)司機(jī)聘用及服務(wù)質(zhì)量保障合同
- 項(xiàng)目中止后采購(gòu)合同數(shù)量變更及取消協(xié)議
- 老妖精咨詢(xún)工程師課件
- 美術(shù)紅色文化課件設(shè)計(jì)
- 安全生產(chǎn)方針五要素
- 物業(yè)消防工作計(jì)劃
- 安全生產(chǎn)管理制度及處罰條例
- 水電安全操作規(guī)程
- 安全生產(chǎn)提升活動(dòng)總結(jié)
- 2025年金融科技企業(yè)估值方法與投資策略在金融科技企業(yè)并購(gòu)中的應(yīng)用案例報(bào)告
- 福建省廈門(mén)市雙十中學(xué)2025屆七年級(jí)生物第二學(xué)期期末聯(lián)考模擬試題含解析
- 【小學(xué)】新蘇教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)暑假每日一練(02):計(jì)算題-應(yīng)用題(含答案)
- 2025豬藍(lán)耳病防控及凈化指南(第三版)
- TCUWA20059-2022城鎮(zhèn)供水管網(wǎng)模型構(gòu)建與應(yīng)用技術(shù)規(guī)程
- 2025至2030中國(guó)壓縮空氣儲(chǔ)能產(chǎn)業(yè)現(xiàn)狀調(diào)查及項(xiàng)目投資策略建議報(bào)告
- 三臺(tái)縣2024-2025學(xué)年小學(xué)六年級(jí)數(shù)學(xué)畢業(yè)檢測(cè)指導(dǎo)卷含解析
- 2025-2030中國(guó)硼酸行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及競(jìng)爭(zhēng)格局與投資研究報(bào)告
- 學(xué)校中層干部選拔聘用實(shí)施方案中層干部選聘實(shí)施方案2
- 生物必修1教師用書(shū)
- 宅基地互換合同協(xié)議書(shū)范本
評(píng)論
0/150
提交評(píng)論