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

📄 disp.java

📁 本程序使用JAVA实现文法类型判断功能
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Disp implements ActionListener
			{
				String x[]=new String[20];
				String y[]=new String[20];
		
		JLabel lb0=new JLabel("<HTML><h3 style=color:black>"+" 您输入的是 0 型文法"+"</h3></HTML>");
		JLabel lb1=new JLabel("<HTML><h3 style=color:black>"+" 您输入的是 1 型文法"+"</h3></HTML>");
	    JLabel lb2=new JLabel("<HTML><h3 style=color:black>"+" 您输入的是 2 型文法"+"</h3></HTML>");
	    JLabel lb3=new JLabel("<HTML><h3 style=color:black>"+" 您输入的是 3 型文法"+"</h3></HTML>");
	    JLabel lb4=new JLabel("<HTML><h3 style=color:black>"+" 您输入的文法有错误!"+"</h3></HTML>");
			
			
	public void actionPerformed(ActionEvent e)
	
		{
		int p0,q0,p1,p2,p3,q1,q2,q3,p,q;	     //标记控制循环次数,循环检测每条产生式
				Panel pp=new Panel();            //添加新的面板显示判断文法的类型
				pp.setSize(200,30);
		
				lb0.setSize(150,20);
				lb1.setSize(150,20);
				lb2.setSize(150,20);
				lb3.setSize(150,20);
				lb4.setSize(150,20);
				
                for(int i=0;i<Judg.num;i++)   	 //根据输入的产生式数生成相应的文本域放产生式
				{
					x[i]=Judg.tfa[i].getText();  //左边的字符
					y[i]=Judg.tfb[i].getText();  //右边的字符
					
				}
				int t=0;                         //控制将判断的文法类型加到面板中
			    int k=-1;                        //K的用于判别文法类型的入口标记
			    if(k==-1)                        //进入判别
			    {
			    for(p=0;p<Judg.num;p++)          //从第一条开始循环检测每条产生式左部
				{
					k=0;                         //K 置 0
					for(q=0;q<x[p].length();q++) //检测本条产生式左部每个字符
					{
		  //如果检测到左部中有A-Z的非终结符,则t++,使t不为0,文法正确,继续判断
		  //如果检测到左右部为空则文法就是错误的输入,也提示错误     
                    if(x[p].charAt(q)>='A'&&x[p].charAt(q)<='Z'&&x[p].length()>0&&y[p].length()>0)
						{
							t++;                
						}
						
					}	
					if(t==0)                    //当t=0时说明文法是错误文法
					    {
						pp.add(lb4);
						k=-1;                   //使K=0不再判断文法的类型
						break;                  //跳出
					    }
					t=0;                        //置t=0继续判断下一条产生式是否是正确的文法
					
			    }
			   }
			   
			   
				if(k==0)                       //文法正确后判断是否是0型文法
				{
					k=1;		               //K=1提供下一次判断文法类型的入口
				for(p0=0;p0<Judg.num;p0++)     //循环每条产生式
				{
					 //左部长度大于右部,是0型文法
					if(x[p0].length()>y[p0].length())
						{
							pp.add(lb0);
							k=0;
							break;
							
						}
					
					
					}	
				
				}
				
				if(k==1)                      //是0型的基础上判断是否是1型
				{
				for(p1=0;p1<Judg.num;p1++)    //循环每条产生式
				{
					//左部长度为1,则才有可能属于2型文法
					if(x[p1].length()==1)
				     {
				     
						k=2;                 //置K=2提供下次判断的入口
					
					 }
					 
					 if(x[p1].length()>1)    //左部字符长度大于1则是1型文法
					 {
					 	k=1;
					     break;
					 }
					 
					
				}	
				}
				
				
				if(k==1)
				{
					pp.add(lb1);             //显示为1型文法
				}
			
	if(k==2)                                 //在1型的基础上判断是否是2型
				
	{
	
		for(p2=0;p2<Judg.num;p2++)
		{
		  k=3;                               //同理下一步判断的入口		
       if(y[p2].length()>2)                  //右部长度大于2则不是3型
         {
          	k=2;
           	break;
          
         } 
         //右部第一个字符为非终结符也是2型,右部第二个是终结符也是2型                                
         if(y[p2].charAt(0)<='Z'&&y[p2].charAt(0)>='A')
         {
         	
         	k=2;
         	break;
         	
         }
         //右部长度等于2时,判断第2个字符是否为终结符,是即为2型文法
         if(y[p2].length()==2&&y[p2].charAt(1)<='z'&&y[p2].charAt(1)>='a')
         	{
         	k=2;
         	break;	
         	}
         
        
         }               
	}
	
	if(k==2)
	{
		pp.add(lb2);
	}
	
	 
	 if(k==3)                              //在是2型后不用判断就一定是3型文法
	 {
	 	pp.add(lb3);
	 }
				
				Judg.p.add(pp);
				pp.setBackground(Color.yellow);
				pp.setLocation(new Point(320,350));
		}
	}

⌨️ 快捷键说明

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