📄 disp.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 + -