📄 复件 compile.java.bak
字号:
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 + -