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

📄 复件 compile.java.bak

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 BAK
📖 第 1 页 / 共 3 页
字号:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

public class compile extends Applet implements ActionListener {
       window3 drawarea;
       List drawstep,drawstack,ulist,elist;
       Label lab1,lab2,lab3,lab4,lab5,lab6,lab7;
       Button addin,start,next,reset,my_description;
       TextArea incoming;       
       TextField input;
       //window1 rule1;
       //window2 rule2;
       String s1,s2,s3;
       //String[] store=new String[20];
       char[] uc=new char[20];
       char[] ec=new char[20];
       //char[] inputing=new char[40];
       int[][] first=new int[20][10];
       int[][] follow=new int[20][10];
       int[][] table=new int[20][20]; 
       int[][] head=new int[20][10];
       int ucn,ecn,exn;
       int[][] express=new int[20][10];
       int[] stack=new int[40];
       
       boolean[] hollow=new boolean[20];
       char ch;       
       Graphics g,offg;
       int x,y,i,j,n,star=0;
       static Image offscreen;
       static Font f=new Font("Helvetica",Font.PLAIN,16);
       public void init() {
              setLayout(null);
              lab1=new Label("文 法");
              add(lab1);
              lab1.setBounds(10,10,50,20);
              lab2=new Label("符号串");
              add(lab2);
              lab2.setBounds(480,60,50,20);
              lab3=new Label("分析表");
              add(lab3);
              lab3.setBounds(10,200,50,20);
              lab4=new Label("栈");
              add(lab4);
              lab4.setBounds(480,95,50,20);
              lab5=new Label("动 作");
              add(lab5);
              lab5.setBounds(605,95,50,20);
              lab6=new Label("非终结符");
              add(lab6);
              lab6.setBounds(240,10,50,20);
              lab7=new Label("终结符");
              add(lab7);
              lab7.setBounds(355,10,50,20);
              incoming=new TextArea("E->TS\nS->+TS|e\nT->FR\nR->*FR|e\nF->(E)|i");
              add(incoming);
              incoming.setBounds(10,35,200,150);
              ulist=new List();
							ulist.setBackground(Color.lightGray);
              add(ulist);
              ulist.setBounds(240,35,100,150);
              elist=new List();
							elist.setBackground(Color.lightGray);
              add(elist);
              elist.setBounds(355,35,100,150);
              /*rule1=new window1();
              add(rule1);
              rule1.setBounds(20,100,101,301);
              rule2=new window2();
              add(rule2);
              rule2.setBounds(140,100,191,301);*/
              
              ScrollPane scroller=new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);
              scroller.setBounds(10,225,450,300);
              add(scroller);
              Adjustable vadjust=scroller.getVAdjustable();
              Adjustable hadjust=scroller.getHAdjustable();
              hadjust.setUnitIncrement(20);
              vadjust.setUnitIncrement(20);              
              drawarea=new window3();
              scroller.add(drawarea);              
              drawarea.setSize(2000,800);
              scroller.validate();
              
              drawstep=new List();
              add(drawstep);
							drawstep.setBackground(Color.lightGray);
              drawstep.setBounds(605,120,165,400);
              
              drawstack=new List();
              add(drawstack);
							drawstack.setBackground(Color.lightGray);
              drawstack.setBounds(480,120,110,400);
              
              input=new TextField();
              add(input);
              input.setBounds(530,60,250,25);
              
							int star_x=480;
              addin=new Button("输入文法");
              add(addin);
              addin.addActionListener(this);
              addin.setBounds(star_x,20,50,25);
              start=new Button("开始分析");
              add(start);
              start.addActionListener(this);
              start.setBounds(star_x+65,20,50,25);
              next=new Button("继续分析");
              add(next);
              next.addActionListener(this);
              next.setBounds(star_x+130,20,50,25);              
              reset=new Button("重新开始");
              add(reset);
              reset.addActionListener(this);
              reset.setBounds(star_x+195,20,50,25);
							my_description=new Button("使用说明");
							add(my_description);
							my_description.setBounds(star_x+260,20,50,25);
							my_description.addActionListener(this);
							
              addin.setEnabled(true);
              start.setEnabled(false);
              next.setEnabled(false);
							my_description.addActionListener(this);
              

              offscreen=createImage(2000,800);
              offg=offscreen.getGraphics();

       }
       public void actionPerformed(ActionEvent e) {
              s2=e.getActionCommand();
out1:         if (s2.equals("输入文法")){
								if(oninputclick())
									break out1;
							}
							else if (s2.equals("开始分析")){
								if(onstartclick())
									break out1;
							}
							else if(s2.equals("my_description"))
									my_desc();
              else if (s2.equals("继续分析")){
									 if(onnextclick())
										 break out1;
								}
              else if (s2.equals("重新开始"))
									onresetclick();
							
       }
			void show_desc()
			{
       	    int k,m;
       	    String s;
       	    g=drawarea.getGraphics();
       	    offg.setFont(f);
       	    offg.setColor(Color.blue);
       	    
       	    y=50;
       	    if (inside('e',ec,ecn))
       	    	m=40+ecn*120;
       	    else
       	        m=160+ecn*120;       	        
       	    for (i=0;i<ucn;i++)
       	    {
       	         offg.drawLine(10,y-20,m,y-20);
       	         offg.drawString(""+uc[i],20,y);
       	         
       	         y+=30;
       	    }
       	    x=80;
            m=30+ucn*30;
       	    for (i=0;i<=ecn;i++)
                if (ec[i]!='e')
                {
                	offg.drawLine(x-30,10,x-30,m);
                	offg.drawString(""+ec[i],x,20);
                	x+=120;
                }             
            y=50;
            for (i=0;i<ucn;i++)
            {
               //System.out.println("hello");	
               x=60;
               for (j=0;j<=ecn;j++)
               {
                    //System.out.println("shit");
                    if (ec[j]!='e')
                    {                    	
                    	s=""+uc[i]+'-'+'>';                    	
                    	m=table[i][j];
                    	if (m>=0)
                    	{
                    		for (k=2;k<=express[m][0];k++)                    	                    	     
                    		     if (express[m][k]>=0)
                    	     		s=s+uc[express[m][k]];
                    	     	else
                    	        	s=s+ec[-1-express[m][k]];                    	                            	
                    	
                    		offg.drawString(s,x,y);
                    	}
                    	else
                    	  if (m==-5000)
                    	  offg.drawString("冲突",x,y);
                    	x+=120;
                    } 
               }
               y+=30;
            }
       	    offg.drawString("sdfas",10,100);//
       	    
       	    g.drawImage(offscreen,0,0,drawarea);
			}
			 void my_desc()
			 {
			 }
			 boolean onstartclick()
        {
           //System.out.println(star);
           if (star!=2)
           {
           	showerror();                   	
           	star=5;
           	return true;
           }                   
           star=3;
           stack[0]=0;
           s1=input.getText();
           if (s1.length()==0)
           {
           	showerror();                   	
           	star=5;
           	return true;
           }
           s1=s1+'$';
           input.setText(s1);
           n=0;
                   
           stack[0]++;
           stack[stack[0]]=-1-ecn;
           stack[0]++;
           stack[stack[0]]=0;
                   
           //for (i=0;i<=ecn;i++)
           //System.out.println(ec[i]);
           showstack();
           //drawstack.add("$"+uc[0]);
           drawstep.add("");
                   
           start.setEnabled(false);
           next.setEnabled(true);
           //g=drawarea.getGraphics();
           //g.drawImage(offscreen,0,0,drawarea);
					 return false;
        }
				 
			 boolean oninputclick()
        {
           if (star!=0)
           {
               showerror();
               return true;
           }
           star=2;
           s1=incoming.getText();
           if (s1.length()==0)
           {
               showerror();
               star=5;
               return true;
           }
           for (i=0;i<20;i++)
           {
           	uc[i]=' ';
           	ec[i]=' ';
           }
           ucn=ecn=0;
           for (i=0;i<10;i++)
           for (j=0;j<10;j++)
           	express[i][j]=0;
           exn=0;
           i=s1.length();
           for (j=0;j<i;j++)
           	if ((s1.charAt(j)=='-')&&(s1.charAt(j+1)=='>'))
           	{
           		uc[ucn]=s1.charAt(j-1);
           		ucn++;
           	}
           j=0;
           x=-1;
           //System.out.println(star);
           //System.out.println("hello");
           while (j<i)
           {
           	ch=s1.charAt(j);
           	if ((s1.charAt(j)=='-')&&(s1.charAt(j+1)=='>'))
           	{
           		x=atwhere(s1.charAt(j-1),uc,ucn);
           		express[exn][1]=x;
           		express[exn][0]=1;
           		exn++;
           	}
           	else
           	if (ch=='|')
           	{
           		express[exn][1]=x;
           		express[exn][0]=1;
           		exn++;
           	}
           	else 
           	if (inside(ch,uc,ucn)&&(x>=0))
           	{
           		express[exn-1][0]+=1;
           		express[exn-1][express[exn-1][0]]=atwhere(ch,uc,ucn);
           	}
           	else
           	if (inside(ch,ec,ecn))
           	{
           		express[exn-1][0]+=1;
           		express[exn-1][express[exn-1][0]]=-1-atwhere(ch,ec,ecn);
           	}
           	else
           	if ((!(inside(ch,uc,ucn)))&&(ch!='>')&&(ch!='-')&&(ch!=' ')&&(ch!='\n'))
           	{
           		ec[ecn]=ch;
           		express[exn-1][0]+=1;
           		express[exn-1][express[exn-1][0]]=-1-ecn;
           		ecn++;
           	}
           	else
           	if (ch=='\n')
           		x=-1;
           	j++;
           }
           ec[ecn]='$';
                 
           empty();
           first1();
           first2();
           //System.out.println(star);
           //System.out.println("hello2");                 
           follow();
           //System.out.println(star);
           //System.out.println("hello3");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -