正规式、NFA、DFA、MFA的转换_第1页
正规式、NFA、DFA、MFA的转换_第2页
正规式、NFA、DFA、MFA的转换_第3页
正规式、NFA、DFA、MFA的转换_第4页
正规式、NFA、DFA、MFA的转换_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机专业软件类课程实验报告课程名称:编译原理实验题目:正规式、NFA、DFA、MFA的转换实验小组成员:实验小组组长:任课教师:专业名称:计算机科学与技术班级名称:计科1班实验起止时间:2014-5-19~2014-5-29一、实验目的1、理解什么是正规式2、理解NFA、DFA、MFA的概念;3、掌握正规式和NFA之间的等价变换;4、掌握NFA和DFA之间的等价变换;5、掌握DFA和MFA之间的等价变换;6、了解程序设计语言Java的语言机制。实验内容程序的流程图如下所示:根据用户输入的表达式,验证是否为合法的正规式2、根据正规式,将其转换为NFA3、根据NFA,将其转换为DFA4、根据DFA,将其转换为MFA实验需求正规式验证对输入的表达式能够做出正确的判断,如果是合法的正规式,那么激活正规式转为NFA的功能;如果不是合法的正规式,那么会弹出消息框进行提示正规式转为NFA对经过验证的正规式,根据算法,将其转换为NFA,得出开始符号集、终结符号集以及符号集,并激活NFA转为DFA的功能;也可以点击翻开按钮,选择一个格式符合标准的NFA文件,同时激活NFA转为DFA的功能;也可以对得到的NFA进行保存NFA转为DFA对第一个文本框中的NFA,根据算法,将其转换为DFA,得出开始符号集、终结符号集以及符号集,并激活DFA转为MFA的功能;也可以点击翻开按钮,选择一个格式符合标准的DFA文件,同时激活DFA转为MFA的功能;也可以对得到的DFA进行保存DFA转为MFA对第二个文本框中的DFA,根据算法,将其转换为MFA,得出开始符号集、终结符号集以及符号集;也可以点击翻开按钮,选择一个格式符合标准MFA文件;也可以对得到的MFA进行保存主要数据结构介绍自定义一个JavaBean,这个类里只有三个属性,节点的开始符号,接受符号,终结符号,并有他们的get()、set()方法,将类名定义为Node整个程序涉及到的NFA、DFA、MFA都存放在ArrayList<Node>中,每次通过迭代器Iterator<Node>进行迭代在正规式转为NFA时,将创立一个开始符号栈和一个终结符号栈,分别用来存储开始符号和终结符号在NFA转换为DFA时,创立一个对象数组Object[][2],每个数组单元第一列为ArrayList<String>,存放的是节点号,第二列是一个Boolean,标记该状态T是否被访问过在DFA转换为MFA时,创立一个对象数组Object[],每个数组单元为ArrayList<String>,存放的是每次划分的节点信息主要模块算法介绍正规式验证将输入的正规式使用toCharArray()转换成一个一个字符,然后对字符进行处理,主要是验证左右括号是否匹配正确,以及”|”,”.”,”*”等符号位置是否合法,输入的表达式中是否含有非法字符2、正规式转为NFA对经过验证的正规式进行一个字符一个字符的判断,其中”*”的优先级最高,其次是”.”,最后是”|”。在转换过程中,构造两个栈,一个栈是开始符号栈,用来存放创立的开始符号,一个是终结符号栈,用来存放创立的终结符号。通过对”|”,”.”,”*”优先级的的不同,对两个栈进行不同的处理,将产生的结点存入ArrayList<Node>中3、NFA转为DFA将从第一个文本框中读出的NFA节点信息存入ArrayList<Node>,由迭代器进行迭代,算法的流程如下列图所示:开始开始求开始状态闭包标记F令它为集合C中的唯一成员集合C中存在尚未被标记子集标记T对子集T中的每个输入字母求U=Ia子集将U参加C中结束语是否DFA转为MFA化简DFA的根本思想是指导它的状态分成一些互不相交的子集,每一个子集中的状态都不是等价的,不同子集中的状态可以由某个输入串来区别,最后将不能区别的每个子集用一个状态来做代表,这种方法称为“分割法”。具体过程是:〔1〕将M的所有状态分成两个子集——终态集和非终态集;〔2〕考察每一个子集,假设发现某子集中的状态不等价,将其划分为两个集合;〔3〕重复第〔2〕步,继续考察已得到的每一个子集,直到没有任何一个子集需要继续划分为止。这时DFA的状态被分成假设干个互不相交的子集。〔4〕从每个子集中选出一个状态做代表即可得到最简的DFA。程序实现环境及使用说明本次实验采用Eclipse进行代码的编写、编译及运行;编写语言为java语言;程序的运行环境为jdk1.8;系统为windows8.1实验测试用例设计说明正规式验证输入”\”,这是一个错误的输入输入”ab|b”,这是一个正确的输入正规式转为NFA输入”ab|b”,这是一个不含闭包的例子输入”(a*|b)*”,这是一个含有闭包的例子NFA转为DFA〔1〕输入”ab|b”,这是一个不含闭包的例子〔2〕输入”(a*|b)*”,这是一个含有闭包的例子DFA转为MFA〔1〕输入”ab|b”,这是一个不含闭包的例子〔2〕输入”(a*|b)*”,这是一个含有闭包的例子八、实验结果测试情况小组对实验结果的自我评价通过这次实验,我对正规式、NFA、DFA、MFA有了一定的了解,进一步的稳固了这局部的知识。懂得了他们之间转化的原理。在编程过程中,遇到了不少的问题,在同学的帮助下,问题一步一步的得到了解决。同时,实验期间,老师也对程序进行了测试评价,发现了一些错误,比方,在将正规式转为NFA时,连接运算符与或运算符之间的处理出现了一些问题;还有,在最后将DFA转为MFA时,在MFA中出现了没有对相同的两项进行冗余处理。这些问题也在实验后期进行了一一解决。由于编程能力和时间的缺乏,这个转换器还有待完善,可能还有没有测试出来的错误。对于出错处理也考虑得不够周到。望老师多多指教。十、任课教师对实验结果的评分源码FrameView.javapackageview;importjava.awt.BorderLayout;importjava.awt.Event;importjava.awt.FileDialog;import;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.ScrollPane;importjava.awt.datatransfer.Clipboard;importjava.awt.datatransfer.DataFlavor;importjava.awt.datatransfer.StringSelection;importjava.awt.datatransfer.Transferable;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JPopupMenu;importjavax.swing.JTextArea;importjavax.swing.KeyStroke;importjavax.swing.event.DocumentEvent;importjavax.swing.event.DocumentListener;importjavax.swing.event.UndoableEditEvent;importjavax.swing.event.UndoableEditListener;importjavax.swing.undo.UndoManager;publicclassFrameViewextendsJFrameimplementsActionListener, DocumentListener,UndoableEditListener{ JFramef=newJFrame("词法分析器"); ScrollPanejspa=newScrollPane(); ScrollPanejspb=newScrollPane(); ScrollPanejspc=newScrollPane(); JPopupMenupop=newJPopupMenu(); JTextAreata=newJTextArea(); JTextAreatb=newJTextArea(); JTextAreatc=newJTextArea(); JPanelpa=newJPanel(); JPanelpb=newJPanel(); JOptionPanejop=newJOptionPane(); UndoManagerum=newUndoManager(); JMenuBarbar=newJMenuBar(); JMenufile=newJMenu("文件"); JMenuedit=newJMenu("编辑"); JMenuanalysis=newJMenu("词法分析"); JMenuhelp=newJMenu("帮助"); JMenuItemopen=newJMenuItem("翻开"); JMenuItemsave=newJMenuItem("保存"); JMenuItemsaveNew=newJMenuItem("另存为"); JMenuItemexit=newJMenuItem("退出"); JMenuItemback=newJMenuItem("撤销"); JMenuItemcut=newJMenuItem("剪切"); JMenuItemcopy=newJMenuItem("复制"); JMenuItempaste=newJMenuItem("粘贴"); JMenuItemdel=newJMenuItem("删除"); JMenuItemall=newJMenuItem("全选"); JMenuItemlexical=newJMenuItem("词法分析器"); JMenuItemnfadfamfa=newJMenuItem("NFA_DFA_MFA"); JMenuItemsHelp=newJMenuItem("查看帮助"); JMenuItemabout=newJMenuItem("关于"); JMenuItemback1=newJMenuItem("撤销"); JMenuItemcut1=newJMenuItem("剪切"); JMenuItemcopy1=newJMenuItem("复制"); JMenuItempaste1=newJMenuItem("粘贴"); JMenuItemdel1=newJMenuItem("删除"); JMenuItemall1=newJMenuItem("全选"); FileDialogopenDia=newFileDialog(f,"翻开",FileDialog.LOAD); FileDialogsaveDia=newFileDialog(f,"保存",FileDialog.SAVE); AboutFileprompta; Filefe; Clipboardclipboard=null;booleanisSave,change,isLine; Stringselect;publicFrameView(){isSave=false;change=false;isLine=true; setup();f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){if((isSave==false)&&(change==true)){ Promptdg=newPrompt(f,"词法分析器",true); }else System.exit(0); } });ta.setFont(newFont("宋体",0,20));ta.setLineWrap(true);tb.setEditable(false);tc.setEditable(false); pack();f.setBounds(300,100,750,550);f.setVisible(true); }publicvoidsetup(){ setLayout(newBorderLayout());f.setJMenuBar(bar);jspa.add(ta);jspb.add(tb);jspc.add(tc);pb.setLayout(newGridLayout(2,1));pb.add(jspb);pb.add(jspc);pa.setLayout(newGridLayout(1,2));pa.add(jspa);pa.add(pb);f.add(pa);bar.add(file);bar.add(edit);bar.add(analysis);bar.add(help);file.add(open);file.add(save);file.add(saveNew);file.addSeparator();file.add(exit);edit.add(back);edit.addSeparator();edit.add(cut);edit.add(copy);edit.add(paste);edit.add(del);edit.addSeparator();edit.addSeparator();edit.add(all);edit.addSeparator();analysis.add(lexical);analysis.add(nfadfamfa);help.add(sHelp);help.add(about);pop.add(back1);pop.addSeparator();pop.add(cut1);pop.add(copy1);pop.add(paste1);pop.add(del1);pop.addSeparator();pop.add(all1);open.setMnemonic('O');open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));save.setMnemonic('S');save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK));saveNew.setMnemonic('A');saveNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.SHIFT_MASK));exit.setMnemonic('X');exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.SHIFT_MASK));back.setMnemonic('Z');back.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));cut.setMnemonic('X');cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));copy.setMnemonic('C');copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));paste.setMnemonic('V');paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK));del.setMnemonic('L');del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));all.setMnemonic('A');all.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK));lexical.setMnemonic('L');lexical.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, Event.CTRL_MASK));nfadfamfa.setMnemonic('N');nfadfamfa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK));sHelp.setMnemonic('H');sHelp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.SHIFT_MASK));about.setMnemonic('B');about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, Event.SHIFT_MASK));back1.setMnemonic('Z');back1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));cut1.setMnemonic('X');cut1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));copy1.setMnemonic('C');copy1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));paste1.setMnemonic('V');paste1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK));del1.setMnemonic('L');del1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));all1.setMnemonic('A');all1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK));open.addActionListener(this);save.addActionListener(this);saveNew.addActionListener(this);exit.addActionListener(this);back.addActionListener(this);cut.addActionListener(this);copy.addActionListener(this);paste.addActionListener(this);del.addActionListener(this);all.addActionListener(this);lexical.addActionListener(this);nfadfamfa.addActionListener(this);about.addActionListener(this);sHelp.addActionListener(this);back1.addActionListener(this);cut1.addActionListener(this);copy1.addActionListener(this);paste1.addActionListener(this);del1.addActionListener(this);all1.addActionListener(this);ta.getDocument().addDocumentListener(this);ta.getDocument().addUndoableEditListener(this);ta.addMouseListener(newMouseAdapter(){publicvoidmousePressed(MouseEventme){if(me.getButton()==me.BUTTON3){pop.show(ta,me.getX(),me.getY()); } } }); }publicvoidopenFile(){openDia.setVisible(true); StringdirPath=openDia.getDirectory(); StringfileName=openDia.getFile();if(dirPath==null||fileName==null)return;ta.setText("");fe=newFile(dirPath,fileName);try{ BufferedReaderin=newBufferedReader(newFileReader(fe)); Stringline=null;while((line=in.readLine())!=null)ta.append(line+"\r\n");in.close();ta.setCaretPosition(0); }catch(IOExceptionioe){ System.err.println(ioe); } }publicvoidsaveFile(){if(fe==null){saveDia.setVisible(true); StringdirPath=openDia.getDirectory(); StringfileName=openDia.getFile();if(dirPath==null||fileName==null)return;ta.setText(""); Filefe=newFile(dirPath,fileName); }isSave=true;change=false;try{ BufferedWriterout=newBufferedWriter(newFileWriter(fe)); Stringtext=ta.getText();out.write(text);out.flush();out.close(); }catch(IOExceptionioe){ System.err.println(ioe); } }publicvoidundoableEditHappened(UndoableEditEventue){um.addEdit(ue.getEdit()); }publicvoidchangedUpdate(DocumentEvente){change=true; }publicvoidinsertUpdate(DocumentEvente){change=true; }publicvoidremoveUpdate(DocumentEvente){change=true; }publicvoidactionPerformed(ActionEventae){if(ta.getText().equals(""))change=false;if(ae.getSource()==open){ openFile();change=false; }if(ae.getSource()==save){if(isSave==false) saveFile(); }if(ae.getSource()==saveNew){ saveFile(); }if(ae.getSource()==exit){if((isSave==false)&&(change==true)){ Promptdg=newPrompt(f,"词法分析器",true); }else System.exit(0); }if(ae.getSource()==back||ae.getSource()==back1){if(um.canUndo()){um.undo(); } }if(ae.getSource()==cut||ae.getSource()==cut1){try{clipboard=getToolkit().getSystemClipboard();select=ta.getSelectedText();if(select.length()!=0){ StringSelectiontext=newStringSelection(select);clipboard.setContents(text,null);ta.replaceRange("",ta.getSelectionStart(),ta.getSelectionEnd()); } }catch(Exceptione){ System.err.println(e); } }if(ae.getSource()==copy||ae.getSource()==copy1){try{clipboard=getToolkit().getSystemClipboard();select=ta.getSelectedText();if(select.length()!=0){ StringSelectiontext=newStringSelection(select);clipboard.setContents(text,null); } }catch(Exceptione){ System.err.println(e); } }if(ae.getSource()==paste||ae.getSource()==paste1){ Transferablecontents=clipboard.getContents(this); DataFlavorflavor=DataFlavor.stringFlavor;if(contents.isDataFlavorSupported(flavor))try{ Stringstr;str=(String)contents.getTransferData(flavor);ta.insert(str,ta.getCaretPosition()); }catch(Exceptione){ System.err.println(e); } }if(ae.getSource()==del||ae.getSource()==del1){ta.replaceSelection(null); }if(ae.getSource()==all||ae.getSource()==all1){ta.selectAll(); }if(ae.getSource()==lexical){lexical.setEnabled(false); }if(ae.getSource()==nfadfamfa){try{ NDMdialogdialog=newNDMdialog("NFA_DFA_MFA");dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);dialog.setVisible(true); }catch(Exceptione){e.printStackTrace(); } }if(ae.getSource()==sHelp){jop.setBounds(300,300,250,150);jop.showMessageDialog(null,"无法启动“Windows帮助和支持”","查看",jop.ERROR_MESSAGE); }if(ae.getSource()==about){ AboutFileaf=newAboutFile(f,"词法分析器",true); } }publicstaticvoidmain(String[]args){ FrameViewfv=newFrameView(); }}Prompt.javapackageview;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.Frame;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassPromptextendsJDialogimplementsActionListener{ JButtonok=newJButton("保存"); JButtonno=newJButton("不保存"); JButtoncancel=newJButton("取消");publicPrompt(Frameparent,Stringtitle,Booleand){super(parent,title,true); addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){ dispose(); } }); JLabellb=newJLabel("是否需要将更改保存?",JLabel.CENTER); setLayout(newBorderLayout()); setBackground(Color.WHITE); JPanelpl=newJPanel(); add("South",pl); add("Center",lb);pl.setLayout(newFlowLayout());pl.setBackground(Color.LIGHT_GRAY);pl.add(ok);pl.add(no);pl.add(cancel);ok.setBackground(Color.WHITE);no.setBackground(Color.WHITE);cancel.setBackground(Color.WHITE); setBounds(450,300,250,150);ok.addActionListener(this);no.addActionListener(this);cancel.addActionListener(this); setVisible(true); }publicvoidactionPerformed(ActionEvente){if(e.getSource()==ok){ FrameViewmy=newFrameView();my.saveFile(); }if(e.getSource()==no) System.exit(0);if(e.getSource()==cancel)this.dispose(); }}AboutFile.javapackageview;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Frame;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextArea;publicclassAboutFileextendsJDialogimplementsActionListener{publicAboutFile(Frameparent,Stringtitle,Booleank){super(parent,title,true); addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){ dispose(); } }); JPanelpla=newJPanel(); JPanelplb=newJPanel(); JLabellba=newJLabel("感谢老师和各位队友的帮助",JLabel.CENTER); JLabellbb=newJLabel("版权人:崔立志",JLabel.CENTER); JLabellbc=newJLabel("出版日期:2014年",JLabel.CENTER);lba.setOpaque(true); setLayout(newBorderLayout()); setBackground(Color.WHITE);plb.setLayout(newGridLayout(3,1));plb.add(lba);plb.add(lbb);plb.add(lbc); add("South",pla); add("Center",plb); JButtonconfirm=newJButton("确定");pla.add(confirm); JTextAreat=newJTextArea();t.setEditable(false); setBounds(490,300,250,150);confirm.addActionListener(this); setVisible(true); }publicvoidactionPerformed(ActionEvente){ dispose(); }}NDMdialog.javapackageview;importjava.awt.BorderLayout;importjava.awt.FileDialog;importjava.awt.FlowLayout;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JFileChooser;import;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.border.EmptyBorder;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjavax.swing.JLabel;importjavax.swing.JTextField;importjava.awt.GridLayout;importjavax.swing.JTextArea;import;import;importjava.awt.ScrollPane;import;importjavax.swing.SwingConstants;import;importjava.awt.Color;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjavax.swing.border.TitledBorder;importoperation.DFAtoMFA;importoperation.ExpressiontoNFA;importoperation.NFAtoDFA;importoperation.Verify;publicclassNDMdialogextendsJDialog{privatefinalJPanelcontentPanel=newJPanel();privateJTextFieldexpression;privateStringsignString; JDialogdialog=newJDialog(); Filefe; FileDialogopenDia=newFileDialog(this,"翻开",FileDialog.LOAD); FileDialogsaveDia=newFileDialog(this,"保存",FileDialog.SAVE); JTextAreanfata=newJTextArea(); JTextAreadfata=newJTextArea(); JTextAreamfata=newJTextArea(); JLabelnfastart=newJLabel("开始状态集:"); JLabelnfaend=newJLabel("终结状态集:"); JLabeldfastart=newJLabel("开始状态集:"); JLabeldfaend=newJLabel("终结状态集:"); JLabelmfastart=newJLabel("开始状态集:"); JLabelmfaend=newJLabel("终结状态集:"); JButtonnfa=newJButton("生成NFA"); JButtondfa=newJButton("生成DFA"); JButtonmfa=newJButton("生成MFA");privateJFileChooserfilechooser=newJFileChooser("D:\\Users\\clz0730\\Desktop");privateintresult;/** *Launchtheapplication. */// publicstaticvoidmain(String[]args){// try{// NDMdialogdialog=newNDMdialog("NFA_DFA_MFA");// dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);// dialog.setVisible(true);// }catch(Exceptione){// e.printStackTrace();// }// }publicvoidopenFile(JTextAreata,JLabelstartlabel,JLabelendlabel, Stringstr){result=filechooser.showOpenDialog(dialog);ta.setText("");if(result==JFileChooser.APPROVE_OPTION){fe=filechooser.getSelectedFile(); }if(fe!=null){try{ BufferedReaderin=newBufferedReader(newFileReader(fe)); Stringline=null;if((line=in.readLine())!=null){startlabel.setText(line); }if((line=in.readLine())!=null){endlabel.setText(line); }if((line=in.readLine())!=null){signString=line; }while((line=in.readLine())!=null){ta.append(line+"\r\n"); }in.close();ta.setCaretPosition(0); }catch(IOExceptionioe){ System.err.println(ioe); } } }publicvoidsaveFile(JTextAreata,JLabelstartlabel,JLabelendlabel, Stringstr){ Stringtemp=startlabel.getText()+"\r\n"+endlabel.getText() +"\r\n"+str+"\r\n";result=filechooser.showSaveDialog(dialog);if(result==JFileChooser.APPROVE_OPTION){fe=filechooser.getSelectedFile(); }try{if(fe!=null){ BufferedWriterout=newBufferedWriter(newFileWriter(fe)); Stringtext=ta.getText();out.write(temp);out.write(text);out.flush();out.close(); } }catch(IOExceptionioe){ System.err.println(ioe); } }/** *Createthedialog. */publicNDMdialog(Stringtitle){ setBounds(100,100,772,496); getContentPane().setLayout(newBorderLayout());contentPanel.setBorder(newEmptyBorder(5,5,5,5)); getContentPane().add(contentPanel,BorderLayout.CENTER);contentPanel.setLayout(newBorderLayout(0,0)); { JPanelpanel=newJPanel();panel.setBorder(newTitledBorder(null,"表达式",TitledBorder.LEADING, TitledBorder.TOP,null,Color.BLACK));contentPanel.add(panel,BorderLayout.NORTH); FlowLayoutfl_panel=newFlowLayout(FlowLayout.CENTER,20,5);panel.setLayout(fl_panel); { JLabellblNewLabel=newJLabel("输入一个正规式:");panel.add(lblNewLabel); } {expression=newJTextField();panel.add(expression);expression.setColumns(15); } { JLabellblab=newJLabel("例如:(a*|b)*");panel.add(lblab); } { JButtonverify=newJButton("验证正规式");verify.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ Verifyvf=newVerify(expression.getText().toString());//System.out.println(vf.validation());if(vf.validation()){nfa.setEnabled(true); }else{ JOptionPanejop=newJOptionPane();jop.setBounds(250,300,250,150);jop.showMessageDialog(null,"您输入的正规式错误!!!","Compiler",jop.WARNING_MESSAGE); } } });panel.add(verify); } { JButtonexit=newJButton("退出");exit.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ System.exit(0); } });panel.add(exit); } } { JPanelpanel=newJPanel();contentPanel.add(panel,BorderLayout.CENTER);panel.setLayout(newGridLayout(1,3)); { JPanelpanel_1=newJPanel();panel.add(panel_1);panel_1.setLayout(newBorderLayout(0,0)); { JPanelpanel_2=newJPanel();panel_2.setLayout(newGridLayout(2,1)); JLabellblNewLabel_1=newJLabel("正规式->NFA"); JLabellblNewLabel_3=newJLabel("起始状态"); JLabellblNewLabel_4=newJLabel("接受符号"); JLabellblNewLabel_5=newJLabel("到达状态"); JPanelpanel_3=newJPanel();panel_3.setLayout(newGridLayout(1,3));panel_3.add(lblNewLabel_3);panel_3.add(lblNewLabel_4);panel_3.add(lblNewLabel_5);panel_2.add(lblNewLabel_1);panel_2.add(panel_3);lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);panel_1.add(panel_2,BorderLayout.NORTH); } { ScrollPanescrollPane=newScrollPane();panel_1.add(scrollPane,BorderLayout.CENTER); {nfata.setRows(10);scrollPane.add(nfata,BorderLayout.CENTER); } } { JPanelpanel_2=newJPanel();panel_1.add(panel_2,BorderLayout.SOUTH);panel_2.setLayout(newGridLayout(3,1,0,0)); {panel_2.add(nfastart); } {panel_2.add(nfaend); } { JPanelpanel_3=newJPanel();panel_2.add(panel_3);panel_3.setLayout(newFlowLayout(FlowLayout.CENTER,5, 5)); { JButtonnfaopen=newJButton("NFA文件");nfaopen.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ openFile(nfata,nfastart,nfaend,signString);dfa.setEnabled(true); } });panel_3.add(nfaopen); } {nfa.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ ExpressiontoNFAen=newExpressiontoNFA(expression.getText().trim() .toString());en.display();nfata.setText(en.tastring);nfastart.setText(en.nfastartstr);nfaend.setText(en.nfaendstr);signString=en.signstring;dfa.setEnabled(true); } });nfa.setEnabled(false);panel_3.add(nfa); } { JButtonnfasave=newJButton("保存");nfasave.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ saveFile(nfata,nfastart,nfaend,signString); } });panel_3.add(nfasave); } } } } { JPanelpanel_1=newJPanel();panel.add(panel_1);panel_1.setLayout(newBorderLayout(0,0)); { JPanelpanel_2=newJPanel();panel_2.setLayout(newGridLayout(2,1)); JLabellblNewLabel_2=newJLabel("NFA->DFA"); JLabellblNewLabel_3=newJLabel("起始状态"); JLabellblNewLabel_4=newJLabel("接受符号"); JLabellblNewLabel_5=newJLabel("到达状态"); JPanelpanel_3=newJPanel();panel_3.setLayout(newGridLayout(1,3));panel_3.add(lblNewLabel_3);panel_3.add(lblNewLabel_4);panel_3.add(lblNewLabel_5);panel_2.add(lblNewLabel_2);panel_2.add(panel_3);lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);panel_1.add(panel_2,BorderLayout.NORTH); } { ScrollPanescrollPane=newScrollPane();panel_1.add(scrollPane,BorderLayout.CENTER); {dfata.setRows(10);scrollPane.add(dfata,BorderLayout.CENTER); } } { JPanelpanel_2=newJPanel();panel_1.add(panel_2,BorderLayout.SOUTH);panel_2.setLayout(newGridLayout(3,1,0,0)); {panel_2.add(dfastart); } {panel_2.add(dfaend); } { JPanelpanel_3=newJPanel();panel_2.add(panel_3);panel_3.setLayout(newFlowLayout(FlowLayout.CENTER,5, 5)); { JButtondfaopen=newJButton("DFA文件");dfaopen.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ openFile(dfata,dfastart,dfaend,signString);mfa.setEnabled(true); } });panel_3.add(dfaopen); } {dfa.setEnabled(false);dfa.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ Stringstr=nfata.getText().toString(); Stringss1=nfastart.getText().toString(); Stringss2=nfaend.getText().toString(); NFAtoDFAnd=newNFAtoDFA(str,ss1,ss2,signString);nd.display();dfata.setText(nd.tbstring);dfastart.setText(nd.startstring);dfaend.setText(nd.endstring);signString=nd.signstring;mfa.setEnabled(true); } });panel_3.add(dfa); } { JButtondfasave=newJButton("保存");dfasave.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ saveFile(dfata,dfastart,dfaend,signString); } });panel_3.add(dfasave); } } } } { JPanelpanel_1=newJPanel();panel.add(panel_1);panel_1.setLayout(newBorderLayout(0,0)); { JPanelpanel_2=newJPanel();panel_2.setLayout(newGridLayout(2,1)); JLabellblNewLabel_3=newJLabel("DFA->MFA"); JLabellblNewLabel_2=newJLabel("起始状态"); JLabellblNewLabel_4=newJLabel("接受符号"); JLabellblNewLabel_5=newJLabel("到达状态"); JPanelpanel_3=newJPanel();panel_3.setLayout(newGridLayout(1,3));panel_3.add(lblNewLabel_2);panel_3.add(lblNewLabel_4);panel_3.add(lblNewLabel_5);panel_2.add(lblNewLabel_3);panel_2.add(panel_3);lblNewLabel_3.setHorizontalAlignment(SwingConstants.CENTER);panel_1.add(panel_2,BorderLayout.NORTH); } { ScrollPanescrollPane=newScrollPane();panel_1.add(scrollPane,BorderLayout.CENTER); {mfata.setRows(10);scrollPane.add(mfata,BorderLayout.CENTER); } } { JPanelpanel_2=newJPanel();panel_1.add(panel_2,BorderLayout.SOUTH);panel_2.setLayout(newGridLayout(3,1,0,0)); {panel_2.add(mfastart); } {panel_2.add(mfaend); } { JPanelpanel_3=newJPanel();panel_2.add(panel_3);panel_3.setLayout(newFlowLayout(FlowLayout.CENTER,5, 5)); { JButtonmfaopen=newJButton("MFA文件");mfaopen.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ openFile(mfata,mfastart,mfaend,signString); } });panel_3.add(mfaopen); } {mfa.setEnabled(false);mfa.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){ Stringss=dfata.getText().toString(); Stringss1=dfastart.getText().toString(); Stringss2=dfaend.getText().toString(); DFAtoMFAdm=newDFAtoMFA(ss,ss1,ss2,signString);dm.display();mfata.setText(dm.tcstring);mfastart.setText(dm.mfastartstr);mfaend.setText(dm.mfaendstr);signString=dm.signstring; } });panel_3.add(mfa); } { JButtonmfasave=newJButton("保存");mfasave.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论