📄 fenxi.java
字号:
import java.io.*;
import java.util.*;
public class fenxi {
String keys[]={"byte","short","int","long","float","double","char","boolean",
"if","else","swich","case","default","do","while","for","break",
"continue","private","public","protected","final","static",
"abstract","synchronized","volatile","try","catch","finally",
"throw","throws","new","extends","implements","class","instanceof",
"this","super","false","true","null","return","void","package",
"import"};
String basetypes[]={"byte","short","int","long","float","double","char","boolean"};
String operators[]={"=","+=","*=","/=","%=","?","&","|","~","^","<<",">>",">>>",
"==","!=","<",">","<=",">=","&&","||","!","(",")","()",",",
";","+","-","*","/","%","{","}","[","]","[]"};
String temporary;
int flag=0,fla=0;
String line;
private ArrayList<String> findedOperator=new ArrayList<String>();
private ArrayList<String> findedKey=new ArrayList<String>();
private ArrayList<String> findedVar=new ArrayList<String>();
private ArrayList<String> findedMethod=new ArrayList<String>();
private BufferedReader readline;
Reader f;
public fenxi(String s)throws IOException,FileNotFoundException
{
f=new FileReader(s);
}
public boolean search(String s[],String t)
{
for(int i=0;i<s.length;i++)
if(s[i].equals(t))
return true;
return false;
}
public boolean isOperator(String t)
{
return search(operators,t);
}
public boolean isKey(String t)
{
return search(keys,t);
}
public boolean isVar(String t,String next)
{
if(next.equals("="))//辨别已被初始化的变量
return true;
else if(flag==1&&fla==1&&!next.equals("("))
return true;
else
return false;
}
public boolean isMethod(String t,String next)
{
if(flag==1&&next.equals("("))
return true;
else
return false;
}
public void addOperator(String next)
{ if(next.equals("(")||next.equals(")"))
next="()";
if(next.equals("{")||next.equals("}"))
next="{}";
if(next.equals("[")||next.equals("]"))
next="[]";
if(findedOperator.indexOf(next)==-1)
findedOperator.add(next);
flag=0;fla=0;
}
public void addMethod(String temporary)
{
if(findedKey.indexOf( temporary)==-1)
findedMethod.add( temporary);
flag=0;fla=0;
}
public void addKey(String next)
{
if(findedKey.indexOf( next)==-1)
findedKey.add( next);
flag=0;
if(search(basetypes,next))//根据基本类型名辨别已被申明但并未初始化的变量,fla=1说明下个词可能是变量
fla=1;
}
public void addVar(String temporary)
{
if(findedVar.indexOf( temporary)==-1)
findedVar.add(temporary);
flag=0;fla=0;
}
public void run()throws IOException,FileNotFoundException
{
readline=new BufferedReader(f);
while((line=readline.readLine())!=null&&line.length()>0)
{
if(line.startsWith("/*")) //测试注释,注释部分不给予分析
{ do
{
line=readline.readLine();
}while(!line.endsWith( "*/"));
}
StringTokenizer st=new StringTokenizer(line," ,;.");
while(st.hasMoreTokens())
{ String next=st.nextToken();
if(flag==1) // flag==1表明temporary中的内容可能是变量也可能是方法.
{
if(isMethod(temporary,next))
addMethod(temporary);
else if(isVar(temporary,next))
addVar(temporary);
}
if(isOperator(next))
addOperator(next);
else if(isKey(next))
addKey(next);
else if(next.equals("//"))
break;
else
{flag=1;temporary=new String(next);}
}
}
}
public void print(ArrayList<String> s)
{
Iterator itr=s.iterator();
while(itr.hasNext())
{
String t=(String)itr.next();
System.out.print(t+" ");
}
System.out.println(" ");
}
public void show()
{
System.out.println(" 关键字:");
print(findedKey);
System.out.println(" 操作符:");
print(findedOperator);
System.out.println(" 变量:");
print(findedVar);
System.out.println(" 方法:");
print(findedMethod);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -