📄 main.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package languageclear;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;/** * * @author Dell */class MyWindow extends JFrame implements ActionListener{ JTextArea input; JButton confirm,bParse1,bParse2; JButton fileButton; JTextField outVn1,outVt1,outP1,outS1; JTextField outVn2,outVt2,outP2,outS2; JPanel inPanel,outPanel1,outPanel2; Box basebox; Generation g; JFileChooser fchooser; String currentDirectory=null; //////////////Men Strat\\\\\\\\\\\\\\\\\\\ JMenuBar menubar; JMenu menuStart; JMenuItem itemOpen,itemExit; JMenu menuAlgos; JMenuItem itemAlg2_1,itemAlg2_2,itemAlg2_3,itemAlg2_4,itemAlg2_5,itemAlg2_6; JMenu menuHelp; JMenuItem itemHelp; //////////////Men End\\\\\\\\\\\\\\\\\\\ MyWindow(){ this.setTitle("文法化简小程序"); Font f=new Font("宋体",Font.BOLD,16); Color c1=new Color(240,243,248),c2=new Color(78,145,248); menubar=new JMenuBar(); menuStart=new JMenu("文件"); menuAlgos=new JMenu("算法"); menuHelp=new JMenu("帮助"); itemOpen=new JMenuItem("打开"); itemExit=new JMenuItem("退出"); itemHelp=new JMenuItem("关于"); itemAlg2_1=new JMenuItem("算法2.1"); itemAlg2_2=new JMenuItem("算法2.2"); itemAlg2_3=new JMenuItem("算法2.3"); itemAlg2_4=new JMenuItem("算法2.4"); itemAlg2_5=new JMenuItem("算法2.5"); itemAlg2_6=new JMenuItem("算法2.6"); menuStart.add(menuStart); menuStart.add(itemOpen); menuStart.addSeparator(); menuStart.add(itemExit); menuAlgos.add(itemAlg2_1); menuAlgos.addSeparator(); menuAlgos.add(itemAlg2_2); menuAlgos.addSeparator(); menuAlgos.add(itemAlg2_3); menuAlgos.addSeparator(); menuAlgos.add(itemAlg2_4); menuAlgos.addSeparator(); menuAlgos.add(itemAlg2_5); menuAlgos.addSeparator(); menuAlgos.add(itemAlg2_6); menuHelp.add(itemHelp); menubar.add(menuStart); menubar.add(menuAlgos); menubar.add(menuHelp); itemOpen.addActionListener(this); itemExit.addActionListener(this); itemHelp.addActionListener(this); itemAlg2_1.addActionListener(this); /*itemAlg2_2.addActionListener(this);*/ itemAlg2_3.addActionListener(this); /* itemAlg2_4.addActionListener(this); itemAlg2_5.addActionListener(this);*/ itemAlg2_6.addActionListener(this); setJMenuBar(menubar); fchooser=new JFileChooser(currentDirectory); input=new JTextArea(8,70); input.setText("请在此区域内输入格式如下:\n" + "开始符号:{S}(默认为S)\n"+"非终结符:{S,U,V,W}\n" + "终结符:{a,b,c}\n" + "产生式:{S->aS,S->W,S->U,U->a,V->bV,V->ac,W->aW}\n"+ "(空串用^表示)"); input.selectAll(); input.setBackground(c1); input.setFont(f); input.setForeground(c2); confirm=new JButton("确定"); confirm.addActionListener(this); fileButton=new JButton("打开"); fileButton.addActionListener(this); inPanel=new JPanel(); inPanel.setBorder(BorderFactory.createTitledBorder("输入区和输出区")); inPanel.add(new JScrollPane(input)); inPanel.add(confirm); inPanel.add(fileButton); ///////////////////////////////////////////////////// basebox=Box.createVerticalBox(); basebox.add(Box.createVerticalStrut(15)); basebox.add(inPanel); basebox.add(Box.createVerticalStrut(15)); ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// this.add(basebox,BorderLayout.CENTER); validate(); this.setResizable(false); this.setVisible(true); this.setBounds(200,250,700,380); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public String print(Generation ge){ String output=new String(); output=output+"开始符号:{"+ge.Start; output=output+"}\n非终结符号:{"; for(int i=0;i<ge.intVn;i++) output=output+ge.Vn[i]+','; output=output+"}\n终结符号:{"; for(int i=0;i<ge.intVt;i++) output=output+ge.Vt[i]+','; output=output+"}\n产生式集:{"; for(int i=0;i<ge.intPar;i++) output=output+ge.Par[i].getX()+"->"+ge.Par[i].getY()+','; output=output+'}'; return output; } public void actionPerformed(ActionEvent e){ if(e.getSource()==confirm) { char Start='1'; char []Vn; char []Vt; Production []Par; char ch=','; String []p=new String[25]; String Str=new String(); String in=new String(); in=input.getText(); if(in.isEmpty()) JOptionPane.showMessageDialog(this,"请按照格式输入内容"); Str=in.substring(in.indexOf('{')+1,in.indexOf('}')); if(Str.length()==1) {Start=Str.charAt(0);in=in.substring(in.indexOf('}')+1);} Str=in.substring(in.indexOf('{')+1,in.indexOf('}')); in=in.substring(in.indexOf('}')+1); Vn=InputG.charTokens(Str, ch).clone(); Str=in.substring(in.indexOf('{')+1,in.indexOf('}')); in=in.substring(in.indexOf('}')+1); Vt=InputG.charTokens(Str, ch).clone(); Str=in.substring(in.indexOf('{')+1,in.indexOf('}')); in=in.substring(in.indexOf('}')+1); for(int i=0;i<p.length;i++) { p[i]=new String(); } p=InputG.stringTokens(Str, ch).clone(); Par=new Production[p.length]; for(int i=0;i<p.length;i++) { Par[i]=new Production(); Par[i].x=p[i].charAt(0); Par[i].y=p[i].substring(3); } g=new Generation(Vn.length,Vt.length,Par.length); if(Start!='1') g.setStart(Start); g.addVn(Vn); g.addVt(Vt); g.addProduction(Par); g.replaceEmp(); } else if(e.getSource()==itemExit) { System.exit(0); } else if(e.getSource()==itemAlg2_1) { g.algorithm2_1(); itemAlg2_2.addActionListener(this); input.setText(" 算法2.1化简后:\n"+print(g)); } else if(e.getSource()==itemAlg2_2) { g.algorithm2_2(); input.setText(" 算法2.2化简后:\n"+print(g)); } else if(e.getSource()==itemAlg2_3) { String w; g.algorithm2_3(); w=new String(g.W); input.setText(" 算法2.3化简后:\n"+print(g)+"\nW:{"+w+"}\n"); itemAlg2_4.addActionListener(this); } else if(e.getSource()==itemAlg2_4) { g.algorithm2_4(); input.setText(" 算法2.4化简后:\n"+print(g)); // itemAlg2_5.addActionListener(this); } else if(e.getSource()==itemAlg2_5) { g.algorithm2_5(); input.setText(" 算法2.5化简后:\n"+print(g)); } else if(e.getSource()==itemAlg2_6) { g.algorithm2_6(); input.setText(" 算法2.6化简后:\n"+print(g)); } else if(e.getSource()==fileButton||e.getSource()==itemOpen) { int n=fchooser.showOpenDialog(null); if(n==JFileChooser.APPROVE_OPTION){ File file=fchooser.getSelectedFile(); try{ input.setText(""); RandomAccessFile in=new RandomAccessFile(file,"rw"); String s=null; while((s=in.readLine())!=null) { byte b[]=s.getBytes("iso-8859-1"); s=new String(b); input.append(s+"\n"); } input.append("\n------------------------------------------\n" + "您的输入是以上的内容吗?如果是请按确定,\n如果不是请重新打开文件或者修改以上部分内容。"); } catch(IOException ee){} } } else if(e.getSource()==itemHelp) { JOptionPane.showMessageDialog(null, "本程序由刘飞制作,版权所有,翻版必究Θ2009 "); } }}public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here MyWindow win=new MyWindow(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -