📄 npro.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class Npro extends JFrame implements ActionListener
{
JButton bu1;
JTextArea ta1;
JTextArea ta2;
String Keyword[]={"char","short","int","unsigned","long",
"float","double","struct","union","void ",
"enum","signed","const","volatile","typedef",
"auto","register","static","extem","break",
"extem ","break","case ","continue","default",
"do","while","else","for","goto","if",
"return","switch","while","sizeof"};
String D[]={"E","e","T","t","F"};
String O[]={"i","+","*","(",")","$"} ;
String DO[][]= {{"Te","Q","Q","Te","Q","Q"},
{"Q","+Te","Q","Q","&","&"},
{"Ft","Q","Q","Ft","Q","Q"},
{"Q","&","*Ft","Q","&","&"},
{"i","Q","Q","(E)","Q","Q"}};
/*
String D[]={"S","Z","W","Y","V","U","E","A","T","B","F","X","C","M"};
String O[]=
{"+","-","*","/","%","=","a","n";"i","e","w","d","f",";","(",")","{","}","r","$"};
String DO[][]= {
{"Q", "Q", "Q", "Q", "Q", "Q", "Z;", "Q", "W", "Q", "Y", "V;", "U", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "a=E", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "i(M)XC", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "w(M)X", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "dXw", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "f(Z;M;Z)X", "Q", "Q", "Q", "Q", "Q", "Q", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "TA", "TA", "Q", "Q", "Q", "Q", "Q", "Q", "TA", "Q", "Q", "Q", "Q ","Q"},
{"+TA","-TA","Q", "Q", "Q", "Q ", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "&", "Q", "&", "Q", "Q", "&", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "FB", "FB", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "FB","Q", "Q", "Q", "Q"},
{"&", "&","*FB","/FB","%FB","Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "&", "Q", "&", "Q", "Q", "&", "Q"},
{"Q", "Q", "Q", "Q", "Q", "Q", "a", "n", "Q", "Q", "Q", "Q", "Q", "Q", "(E)", "Q", "Q", "Q", "Q", "Q"},
{Q ","Q ","Q ","Q ","Q"," Q ","Q "," Q "," Q "," & "," & "," Q ","Q ","Q ","Q ","Q ","{S}"," & ","Q ","&},
{Q"," Q ","Q"," Q ","Q ","Q ","Q "," Q ","Q "," eX ","Q "," Q"," Q"," Q ","Q"," Q"," Q ","& ","Q ","&},
{Q ","Q"," Q"," Q ","Q ","Q"," ErE"," ErE "," Q "," Q "," Q "," Q"," Q ","&"," ErE"," &"," Q"," Q ","Q"," Q}
}
*/
/* + - * / % = a n i e w d f ; ( ) { } r #
S Z; W Y V; U
Z a=E
W i(M)XC
Y w(M)X
V dXw
U f(Z;M;Z)X
E TA TA TA
A +TA -TA @ @ @
T FB FB FB
B @ @ *FB /FB %FB @ @ @
F a n (E)
X @ @ {S} @ @
C eX @ @
M ErE ErE @ ErE @
*/
int yugaochao(String s) // 保留字
{
int key;
int i;
for(i=0;i<35;i++)
{
if(s.equals(Keyword[i]))
{ key=1;
return key;
}
}
key=0;
return key;
}
void analyze(String s1)
{
int i;
int n;
char[] ch1; //ch1 是用来存储s1的数组的形式
int STATE=0;
int key=0;
String s2=new String("");
ch1=new char[10000];
ch1=s1.toCharArray();
STATE=0;
n=0;
while(n<s1.length())
{
//System.out.println(s1.length()+"|"+n+"|"+ch1[n]+"|"+STATE);
//System.out.println(n+ ""+ch1[n]);
//System.out.println(STATE);
switch(STATE)
{
case 0://System.out.println(n);
if((ch1[n]==' ')||(ch1[n]=='\t')||(ch1[1]=='\n'||ch1[n]=='\r'))
{
STATE=0;
n++;break;
}
else if (Character.isDigit(ch1[n]))
{
if(Character.isDigit(ch1[n+1])||ch1[n+1]=='E'||ch1[n+1]=='e'||ch1[n+1]=='.')
{STATE=2;
n++;break;}
else
{
write('i');
STATE=0;
n++;break;
}
}
else if (Character.isLetter(ch1[n]))
{
if(Character.isLetter(ch1[n+1])||Character.isDigit(ch1[n+1]))
{ STATE=8;
//System.out.println(STATE);
key=n;
n++;break;}
else
{
write('i');
STATE=0;
n++;break;
}
}
else if (ch1[n]=='+')
{
write(ch1[n]);
STATE=0;
n++;break;
}
else if (ch1[n]=='-')
{
write(ch1[n]);
STATE=0;
n++;break;
}
else if (ch1[n]=='*')
{
write(ch1[n]);
STATE=0;
n++;break;
}
else if (ch1[n]=='/')
{
write(ch1[n]);
STATE=0;
n++;
break;
}
else if (ch1[n]==';')
{
write('\n');
STATE=0;
n++;break;
}
else if (ch1[n]=='#')
{
System.out.println("jfdslkajf");
}
else
{System.out.println("错误1");break;}
case 1://System.out.println(n);
if(Character.isDigit(ch1[n]))
{
STATE=2;
n++;break;
}
else
{STATE=151;break;}
case 2://System.out.println(n);
if(Character.isDigit(ch1[n]))
{ if(Character.isDigit(ch1[n+1]))
{n++;
STATE=2;break;
}
else if (ch1[n]=='E'||ch1[n]=='e')
{
if(ch1[n+1]=='+'||ch1[n+1]=='-'||Character.isDigit(ch1[n+1]))
{STATE=5;
n++;break;
}
else
{System.out.println("错误2");
break;}
}
else if(ch1[n]=='.')
{
if (Character.isDigit(ch1[n+1]))
{
STATE=3;
n++;break;}
else
{
System.out.println("错误3");
break;}
}
else
{
write('i');
n++;
STATE=0;break;}
}
case 3:
//System.out.println(n);
if(Character.isDigit(ch1[n]))
{
STATE=4;
n++;break;}
else
{System.out.println("错误4");
break;}
case 4:
//System.out.println(n);
if(Character.isDigit(ch1[n+1]))
{
STATE=4;
n++;
break;
}
else if (ch1[n]=='E'||ch1[n]=='e')
{
STATE=5;
n++;
break;
}
else
{
write('i');
n++;
STATE=0;break;
}
case 5://System.out.println(n);
if (ch1[n]=='+'||ch1[n]=='-')
{STATE=6;
n++;break;
}
else if(Character.isDigit(ch1[n]))
{ if(Character.isDigit(ch1[n+1]))
{STATE=7;
n++;break;
}
else
{
write('i');
STATE=0;
n++;break;
}
}
else
{System.out.println("错误5");
break;}
case 6://System.out.println(n);
if(Character.isDigit(ch1[n]))
{
if(Character.isDigit(ch1[n+1]))
{STATE=7;
n++;break;}
else
{
write('i');
STATE=0;
n++;break;
}
}
else
{System.out.println("错误6");
break;}
case 7://System.out.println(n);
if(Character.isDigit(ch1[n]))
{if(Character.isDigit(ch1[n+1]))
{STATE=7;
n++;break;
}
else
{
write('i');
STATE=0;
n++;break;
}
}
else
{System.out.println("错误7");
break;}
case 8://System.out.println(n);
if(Character.isLetter(ch1[n])||Character.isDigit(ch1[n]))
{
if(Character.isLetter(ch1[n+1]))
{STATE=8;
n++;break;
}
else
{
//判断是不是关键字
s2=new String(ch1,key,n+1-key);
//System.out.println(s2+"|"+key+"|"+n);
if(yugaochao(s2)==0)
write('i');
else
write('c');
STATE=0;
n++;break;
}
}
else
{System.out.println("错误8");
break;}
default:
{System.out.println("错误9");
n++;
break;
}
}
}
}
void syntax(String yugaochao)
{
int i=0;
int j=yugaochao.length();
String X;
int keydo,keyto,key;
String a;
Stack Xo=new Stack();
Stack To=new Stack();
Xo.push("$");
Xo.push("$");
Xo.push("E");
To.push("$");
To.push("$");
keydo=0;
keyto=0;
for(i=j-1;i>=0;i--)
{ String go=yugaochao.substring(i,i+1);
To.push(go);
}
ta1.setText(ta1.getText()+"\n"+" "+Xo+" "+To+" ");
ta2.setText(ta2.getText()+"\n\n"+"化简的结果"+"\n"+yugaochao);
do{
X=(String)Xo.peek();
a=(String)To.peek();
if(X.equals("i")||X.equals("+")||X.equals("*")||X.equals("(")||X.equals(")")||X.equals("$"))
{
if(X.equals(a))
{Xo.pop();
To.pop();
a=(String)To.peek();
ta1.setText(ta1.getText()+"\n"+" "+Xo+" "+To+" ");
}
else {
System.out.println("error");
break;
}
}
else {
for(i=0;i<5;i++)
{
if(X.equals(D[i]))
{ keydo=i;
}
}
for(i=0;i<6;i++)
{if(a.equals(O[i]))
{keyto=i;
}
}
if(!DO[keydo][keyto].equals("Q"))
{
Xo.pop();
key=DO[keydo][keyto].length();
if(!X.equals("&"))
{for(i=key;i>0;--i)
{ Xo.push(DO[keydo][keyto].substring(i-1,i));
}
ta1.setText(ta1.getText()+"\n"+" "+Xo+" "+To+" "+X+"------>"+DO[keydo][keyto]);
}
}
else
{
ta1.setText(ta1.getText()+"\n"+"匹配错误");
System.out.println("匹配错误");
break;
}
}
}while(!X.equals("$"));
}
public Npro(){
super("新建的文件集");
Container C = getContentPane();
C.setLayout(new BorderLayout());
bu1= new JButton("确定");
bu1.setLocation(150,50);
bu1.addActionListener(this);
C.add("North",bu1);
ta1=new JTextArea();
JScrollPane scrollPane2 = new JScrollPane(ta1);
C.add("Center",scrollPane2 );
JPanel pan1 = new JPanel();
pan1.setLayout(new BorderLayout());
C.add("East",pan1);
ta2=new JTextArea(5,20);
JScrollPane scrollPane = new JScrollPane(ta2);
pan1.add("Center",scrollPane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,500);
setVisible(true);
}
public static void main(String[] args) {
Npro frame=new Npro();
}
public void actionPerformed(ActionEvent e) {
char buffer[]= new char[2048];
char buffer1[]= new char[2048];
FileReader rd1;
FileReader rd2;
String str1="";
String str2="";
String str3="";
ta1.setText("");
try{
rd1 = new FileReader("432.txt");
int len1 = rd1.read(buffer);
rd1.close();
str1=new String(buffer,0,len1);
analyze(str1);
rd2 = new FileReader("234.txt");
BufferedReader br1=new BufferedReader(rd2);
while((str3=br1.readLine())!=null)
/*int len2 = rd2.read(buffer1);
rd2.close();
str3=new String(buffer1,0,len2);*/
syntax(str3);
}catch(IOException e1)
{return
;
}
}
void write(char ch2)
{
try{
//FileWriter rd1=new FileWriter("234.txt");
RandomAccessFile in= new RandomAccessFile("234.txt","rw");
in.seek(in.length());
in.write(ch2);
in.close();
//rd1.write(ch2);
//rd1.close();
}catch(IOException e1)
{return
;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -