public class compiler {
public String computerComp(String str)
{
String output="";
int index=0;
while(index<str.length())
{
//判断界符
if(isJieFu(str.charAt(index)))
{ output+=("(界符,"+str.charAt(index)+")");
index++;
}
//判断运算符
else if(isCompu(str.charAt(index)))
{
if(!isCompu(str.charAt(index+1))){
output+=("(运算符,");
}else if((!isCompu(str.charAt(index+2))) && isCompu(str.charAt(index+1))){
if(str.charAt(index)=='!'){
if(str.charAt(index+1)=='='){
output+=("(运算符,");
}else{
output+=("(非法字符,");
}
}else if((str.charAt(index)=='>'||str.charAt(index)=='<') || ((str.charAt(index)=='*'||str.charAt(index)=='/') || (str.charAt(index)=='%'||str.charAt(index)=='='))){
if(str.charAt(index+1)=='='){
output+=("(运算符,");
}else{
output+=("(非法字符,");
}
}else if(str.charAt(index)=='+'||str.charAt(index)=='-'){
if(str.charAt(index)==str.charAt(index+1) || str.charAt(index+1)=='='){
output+=("(运算符,");
}else{
output+=("(非法字符,");
}
}else{
output+=("(非法字符,");
}
}else{
output+=("(非法字符,");
}
while(isCompu(str.charAt(index)))
{ output+=(str.charAt(index));
index++;
if(index>=str.length())
return output;
}
output+=(")");
}
//数字
else if(isMath(str.charAt(index)))
{
int index1=index;
output+=("(");
while(isMath(str.charAt(index)))
{
output+=(str.charAt(index));
index++;
if(index>=str.length())
return output;
}
if(isLetter(str.charAt(index))){
while((!isMath(str.charAt(index))) && (isLetter(str.charAt(index))))
{
output+=(str.charAt(index));
index++;
if(index>=str.length())
return output;
}
output+=(",非法字符)");
}else{
if(str.charAt(index1)=='0'){
if(isMath(str.charAt(index1+1))){
output+=(",非法字符)");
}else{
output+=(",数字,)");
}
}else
output+=(",数字,)");
}
}
//字母判断
else if(isLetter(str.charAt(index)))
{
int i=index;
while(isLetter(str.charAt(index))||isMath(str.charAt(index)))
{
if(index>=str.length())
return output;
index++;
}
String sub =str.substring(i, index);
//判断是是不是关键字
if(isKeyword(sub))
output+=("(关键字,"+sub+")");
else output+=("(标识符,"+sub+")");
}
//空格或者回车处理
else
{
index++;
}
}
return output;
}
//判断是不是关键字
public boolean isKeyword(String str)
{
boolean flag=true;
String []arr={"public","static","void","main","String","int","boolean","private","if","else","while"} ;
for(int i=0;i<arr.length;i++)
{
if(str.equals(arr[i]))
{
flag=true;
break;
}
else flag=false;
}
return flag;
}
//判断是不是字母
public boolean isLetter(char charr)
{
if(((charr>='a'&&charr<='z')||(charr>='A'&&charr<='Z')) || charr=='_')
return true;
else return false;
}
public boolean isMath(char charr)
{ if((charr>='0')&&(charr<='9'))
return true;
else return false;
}
//判断是不是界符得方法
public boolean isJieFu(char charr)
{
char arr[]={'[',']',';','{','}','"'};
for(int i=0;i<arr.length;i++)
{
if (charr==arr[i])
{
return true;
}
}
return false;
}
//判断是不是运算符得方法
public boolean isCompu(char charr)
{
boolean flag=false;
char arr[]={'=','+','-','*','!','/','<','>','%'};
for(int i=0;i<arr.length;i++)
{
if (charr==arr[i])
{
flag=true;
break;
}
else flag=false;
}
return flag;
}
}