⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 实现2型文法的化简包括:无符号和无用产生式的删除、ε-产生式的消除、单产生式的消除算法实现
💻 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 + -