




版權(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)三 語(yǔ)法分析器的設(shè)計(jì)一、 實(shí)驗(yàn)內(nèi)容設(shè)計(jì)、編寫(xiě)和調(diào)試構(gòu)造LR(0)項(xiàng)目集規(guī)范簇或?qū)崿F(xiàn)基于LR分析表對(duì)給定的符號(hào)串進(jìn)行LR分析的程序。以下兩個(gè)內(nèi)容任選其中一項(xiàng):(1) 對(duì)于給定的文法,實(shí)現(xiàn)構(gòu)造識(shí)別該文法全部活前綴DFA的程序。(2) 對(duì)于給定的LR分析表和符號(hào)串,設(shè)計(jì)程序以實(shí)現(xiàn)所輸入符號(hào)串是否為合法符號(hào)串。要求用JAVA語(yǔ)言編程。(可參考實(shí)驗(yàn)指導(dǎo)書(shū)P149至P156)二、 程序代碼AnalysisOfGrammer.javapackage analysis;import javax.swing.*;import javax.swing.table.DefaultTableModel;impo
2、rt java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class AnalysisOfGrammer extends JAppletprivate JFileChooser jfc = new JFileChooser(new File(".");private JButton jbt1 = new JButton("打開(kāi)文法文件");private JButton jbt2 = new JButton("構(gòu)造LR規(guī)范簇
3、");private JButton jbt3 = new JButton("構(gòu)造LR分析表");private JButton jbt4 = new JButton("清空");private JButton jbt5 = new JButton("退出");private JLabel jl1 = new JLabel("LR(0)項(xiàng)目集規(guī)范簇");private JLabel jl2 = new JLabel("LR(0)分析表");private JPanel p3 = new
4、 JPanel();private JTextArea jta1 = new JTextArea();private String grammer = new String50;private int count = 0;private LinkedList<ViablePrefixe> list = new LinkedList<ViablePrefixe>();private Object content = new Object1004;int num1 = 0;String cache = new String50100;int location = new i
5、nt50;int back = 0;public void clear1()grammer = null;public void clear2()num1 = 0;list = null;content = null;cache = null;location = null;back = 0;public AnalysisOfGrammer()JPanel p1 = new JPanel();p1.setLayout(new GridLayout(1,5);p1.add(jbt1);p1.add(jbt2);p1.add(jbt3);p1.add(jbt4);p1.add(jbt5);add(
6、p1,BorderLayout.NORTH);JPanel p4 = new JPanel();p4.setLayout(new GridLayout(1,2);JPanel p2 = new JPanel();p2.setLayout(new BorderLayout();p2.add(new JLabel("文法為:"),BorderLayout.NORTH);p2.add(new JScrollPane(jta1),BorderLayout.CENTER);p4.add(p2);p4.add(p3);add(p4,BorderLayout.CENTER);jbt1.a
7、ddActionListener(new ActionListener()public void actionPerformed(ActionEvent e)jta1.setText("");open(););jbt2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)if(jta1.getText().equals("")JOptionPane.showMessageDialog(null, "請(qǐng)打開(kāi)文法文件!");else
8、DNF();list.get(1).setNextState("接受態(tài)");for(int k = 0 ; k < list.size() ; k+)contentk0 = list.get(k).getState();contentk1 = list.get(k).getProjectSet();contentk2 = list.get(k).getNextSign();contentk3 = list.get(k).getNextState();String columnName = "狀態(tài)","項(xiàng)目集","后繼符
9、號(hào)","后繼狀態(tài)"JTable table = new JTable(content,columnName);p3.setLayout(new BorderLayout();p3.add(jl1,BorderLayout.NORTH);p3.add(new JScrollPane(table),BorderLayout.CENTER);clear2(););public int getleng(String s)/獲得一個(gè)字符串?dāng)?shù)組的真實(shí)長(zhǎng)度int len = 0;while(slen!=null)len+;return len;public void DNF()
10、/自動(dòng)機(jī)的構(gòu)成int c = 0;int flag = new int100;String start = "S'-.>"+grammer0.substring(0, 1);flagnum1 = createI(start);/初態(tài)集建立locationnum1 = getleng(cachenum1);while(back <= num1)if(c < locationback && flagback = 0)num1+;list.get(back).setNextState(list.get(back).getNextState
11、()+"S"+num1+" ");flagnum1 = createI(cachebackc);locationnum1 = getleng(cachenum1);c+;elseback+;c = 0;public int createI(String t)/生成狀態(tài)集int end = 0;String s = addPoint(t);String head = findNext(s);String state = "S"+num1;String nextsign=""String nextstate="
12、;"boolean gra = new booleancount;int c = 1;int loop = 0;for(int k = 0 ; cachek0 != null; k+)if(cachek0.equals(s)loop = k;end = 2;break;if(end = 2)/更改后繼狀態(tài)String old = list.get(back).getNextState();String sta = "S"+num1;String renew = ""int staleng = sta.length(); for(int k =
13、0 ; k < old.length()-staleng+1; k+ )if(old.substring(k,k+staleng).matches(sta)|old.equals("歸約")num1-;renew = old.substring(0,k-1)+"S"+loop+old.substring(k+staleng+1, old.length()+" "list.get(back).setNextState(renew);break;else if(old.equals("歸約")num1-;rene
14、w = old.substring(0,k-1)+"S"+loop+old.substring(k+staleng+1, old.length()+" "list.get(back).setNextState(renew);break;return end;cachenum10 = s;String set = cachenum10 + " "if(num1 < list.size()nextsign=list.get(num1).getNextSign();nextstate=list.get(num1).getNextSta
15、te();set = list.get(num1).getProjectSet()+cachenum10 + " "if(findNext(s).equals("#")set = s;nextsign = "#"nextstate = "歸約"ViablePrefixe o = new ViablePrefixe(state,set,nextsign,nextstate);list.add(o);return 1;elsewhile(true)int i = 0;for(; i < count; i+)if(
16、grammeri.substring(0, 1).equals(head)&&grai!=true)set = set + addPoint(grammeri) +" "cachenum1c+ = addPoint(grammeri);if(findNext(addPoint(grammeri).matches("A-Z")&&grai!=true)grai = true;head = findNext(addPoint(grammeri);break;/for循環(huán)結(jié)束if(i >= count &&
17、 head.equals(findNext(s).substring(0,1) break;else if(i >= count)head = grammer0.substring(0,1);/while循環(huán)結(jié)束int cc = 0; /設(shè)置下一狀態(tài)的值String nextS = new String50;for(int i = 0 ; cachenum1i!=null; i+)int j = 0;boolean f = false;for(; nextSj!=null;j+)if(findNext(cachenum1i).equals(nextSj)f = true; break;/
18、for j 的循環(huán)結(jié)束,查找有無(wú)相同的后繼符號(hào),f作為標(biāo)記,相同的符號(hào)跳過(guò),不同的記錄下來(lái),放在nestS里if(f != true)nextScc+ = findNext(cachenum1j);nextsign = nextsign+findNext(cachenum1j)+" "/for i 循環(huán)結(jié)束ViablePrefixe o = new ViablePrefixe(state,set,nextsign,nextstate);list.add(o);return end;public int show(String s, String grammer)/文法的拆分
19、函數(shù),顯示在界面上,返回值是文法的條數(shù)boolean lastSign = false;/上一符號(hào)為nint flag1 = 0;/上一符號(hào)位置int count = 0;String str = s.substring(flag1, flag1+3);for(int i = 0 ; i < s.length() ; i+)if(s.substring(i, i+1).equals("|")if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(fl
20、ag1, i);flag1 = i + 1;lastSign = true;else if(s.substring(i, i+1).equals("n")if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(flag1, i);flag1 = i+1;if(flag1+3 < s.length()str = s.substring(flag1, flag1+3);lastSign = false;else if(s.substring(i, i+1
21、).equals("r")if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(flag1, i);i+;flag1 = i+1;if(flag1+3 < s.length()str = s.substring(flag1, flag1+3);lastSign = false;return count;private void open()/打開(kāi)文件String s =""if(jfc.showOpenDialog(this)
22、= JFileChooser.APPROVE_OPTION)s = open(jfc.getSelectedFile();count = show(s,grammer);for(int i = 0 ; grammeri!=null ; i+)jta1.append(grammeri);jta1.append("n");private String open(File file)/打開(kāi)文件String content1 = ""tryBufferedInputStream in = new BufferedInputStream(new FileInput
23、Stream(file);byte b = new bytein.available();in.read(b,0,b.length);content1 = new String(b,0,b.length);in.close();catch(IOException ex)jta1.setText("Error opening " + file.getName();return content1;private static String addPoint(String m)/在文法中添加.String t=""int i;for(i = 0 ; i <
24、; m.length() ; i+)if(m.substring(i,i+1).equals(".")if(i = m.length()-1)return m;t = m.substring(0,i)+m.substring(i+1,i+2)+"."+m.substring(i+2,m.length();break;if(i > m.length()-1)t = m.substring(0,3)+"."+m.substring(3,m.length();return t;private static String findNex
25、t(String m)/返回.后的字母String c = "#"for(int i = 0 ; i < m.length()-1 ; i+)if(m.substring(i,i+1).equals(".")c = m.substring(i+1,i+2);return c;ViablePrefixe.javapackage analysis;public class ViablePrefixe /活前綴類(lèi)private String state = ""/狀態(tài)private String projectSet = ""/項(xiàng)目private String nextSign = ""/后繼符號(hào)private String nextState = ""/后繼狀態(tài)public ViablePrefixe(String state,String projectSet,String nextSign,String nextState)this.state = state;jectSet = projectSet;this.nextSign = nextSign;this.n
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司酒水供酒合同范例
- 個(gè)人租賃摩托合同范例
- pvc泳池合同范例
- 入網(wǎng)合同屬于合同范例
- 供應(yīng)金融鏈合同范例
- 介紹合同范例
- 安全生產(chǎn)事故反思及改進(jìn)措施總結(jié)試題及答案
- 健身團(tuán)體活動(dòng)方案策劃與實(shí)施
- 疫苗接種不良反應(yīng)處置指南
- 焊接技能考核的新標(biāo)準(zhǔn)試題及答案
- 多尺度圖像分析
- 中醫(yī)文化主題班會(huì)
- 4.4.7.3 跟蹤出站調(diào)車(chē)作業(yè)課件講解
- 河南省開(kāi)封市鐵路中學(xué)2023-2024學(xué)年八年級(jí)下學(xué)期6月期末歷史試題
- 第三單元 文明與家園 大單元教學(xué)設(shè)計(jì)-2023-2024學(xué)年部編版道德與法治九年級(jí)上冊(cè)
- 泰康集團(tuán)線(xiàn)上測(cè)評(píng)真題
- 超氧化物歧化酶課件
- 第四章-國(guó)防動(dòng)員
- 設(shè)備管理培訓(xùn)課件-設(shè)備管理的戰(zhàn)略規(guī)劃
- 學(xué)術(shù)報(bào)告計(jì)算機(jī)
- 人教版小學(xué)三年級(jí)下冊(cè)道德與法治全冊(cè)教案
評(píng)論
0/150
提交評(píng)論