⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accidence.java

📁 用java编写的词法分析程序
💻 JAVA
字号:
import java.lang.Character;

public class Accidence {

	public static void main(String[] args) 
	{
		String string="public   class; {} <= != \"  \' Accidence;int i; a<=b  *&n k&  _ff   7jj";
		analyse ana=new analyse(string);
		ana.checkChars();
		ana.sort();
		ana.getNewString();
	}

}

class analyse
{
	public analyse(String string)
	{	
		int length=string.length();
		chars =new char[length];	
		for(int i=0;i<length;i++)
		{
		chars[i]=string.charAt(i);
		}
		newString=new String[length];
		info=new String[length];
	}
	
	public void checkChars()
	{
		int flag=0;
		int k=-1;
			for(int i=0;i<chars.length;i++)
			{
				if(chars[i]!=' ') 
				{
					if(flag==0) {flag=1; k++;}
				
					if(IsSingleTokens(chars[i])&&!IsDoubleTokens(chars[i-1],chars[i]))  
					{
						if(newString[k]!=null) {k++; newString[k]=""+chars[i];}
						else{newString[k]=""+chars[i];}
					}
					else if(IsSingleTokens(chars[i])&&IsDoubleTokens(chars[i-1],chars[i]))
					{
						newString[k]+=chars[i];
					}
					else 
						{
						if(i>1){if(IsSingleTokens(chars[i-1])) k++;}
						
						if(newString[k]==null)newString[k]=""+chars[i];
						else 
							{
							newString[k]+=chars[i];
						
							}
						}
				}
				else
				{
					flag=0;					
				}
			}
		
	}
	public boolean IsSingleTokens(char c)
	{
		for(int i=0;i<SINGLETOKENS.length;i++)
		{
			if(c==SINGLETOKENS[i]) return true;
		}
		return false;
	}
	
	public boolean IsDoubleTokens(char c1,char c2)
	{
		String doubleTokens=""+c1+c2;
		for(String s:DOUBLETOKENS)
		{
			if(s.compareTo(doubleTokens)==0) return true;
		}
		return false;
	}
	
	

	public void getNewString()
	{
		for(int i=0;i<newString.length;i++)
		{	
			if(newString[i]!=null)	System.out.print("i:"+i+":"+newString[i]);
			if(info[i]!=null)	System.out.println("   "+info[i]);
		}
	}

	public String checkKinds(String string)
	{
		
		for(String k:KEYWORDS)
		{
			if(k.compareTo(string)==0) 	return "关键字"; 
		}
		
		for(char s:SINGLETOKENS)
		{
			String singleTokens=""+s;
			if(singleTokens.compareTo(string)==0) 
			{
				if(string.compareTo(",")==0)  return "逗号";
				if(string.compareTo(":")==0)  return "冒号";
				if(string.compareTo(".")==0)  return "界符";
				if(string.compareTo(";")==0)  return "分界符";
				if(string.compareTo("'")==0)  return "单引号";
				if(string.compareTo("\"")==0)  return "双引号";
				if(string.compareTo("!")==0)  return "感叹号";
				if(string.compareTo("{")==0)  return "花括号";
				if(string.compareTo("}")==0)  return "花括号";
				if(string.compareTo("(")==0)  return "括号";
				if(string.compareTo(")")==0)  return "括号";
				if(string.compareTo("[")==0)  return "中括号";
				if(string.compareTo("]")==0)  return "中括号";
				if(string.compareTo("=")==0)  return "赋值号";
			}
		}
		for(String d:DOUBLETOKENS)
		{
			if(d.compareTo(string)==0)
			{
				if(string.compareTo("==")==0) return "恒等于";
				if(string.compareTo("<=")==0) return "小于等于";
				if(string.compareTo(">=")==0) return "大于等于";
				if(string.compareTo("!=")==0) return "不等于";
			}
		}
		
			if(Character.isLetter(string.charAt(0)) || string.charAt(0)=='_')
			{
				for(int i=1;i<string.length();i++)
				{
					if(!Character.isLetter(string.charAt(i)) && !(string.charAt(i)=='_' )) 
					return "非法标识符";
				}
				return "标识符";
			}
			else {return "非法标识符";}
		
	}
	
	public void sort()
	{
		for(int i=0;i<newString.length;i++)
		{
			if(newString[i]!=null)  info[i]=checkKinds(newString[i]);
		}
	}
	
	private char[] chars;
	private String[] newString;
	private String[] info;
	public static final char[] SINGLETOKENS={'{','}',';','<','=','!','\"','[',']','(',')','\'','='};
	public static final String[] DOUBLETOKENS={"!=","==","<=",">="};
	
	public static final String[] KEYWORDS={"int","import","class","public","abstract","default",
											"if","private","this","boolean","do","implements","protected",
											"throw","break","double","public","throws","byte","else",
											"instanceof","case","extends","short","try","catch","final",
											"interface","static","void","char","finally","long","strictfp",
											"volatile","float","native","super","while","const","for","new",
											"switch","continue","goto","package","synchronized"};
	
}



//D:/My Documents/文档/My QQ Files/CustomFace/CustomFace/1290A3E6152CCACF7ABFD0E2ECF53FA8.gif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -