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

📄 characters.java

📁 自己写的一个用java实现的一个语法分析器
💻 JAVA
字号:
package Syntax;
//字符集类
public class Characters {//字符表按终结符在前,非终结符在后排序
	public static int current;//字符表内当前字符个数
	private int max=20;//一个文法的产生式最多包含的不同字符个数
	private int increment=5;
	private Character[] characters;//字符集表
    public int partition=0;//最后一个终结符位置,用于区分终结符与非终结符
	public Characters()
	{
		current=0;
		characters=new Character[max];
	}
	private void increase()
	{
		int temp=max;
		max+=increment;
		Character[] c=new Character[max];
		for(int i=0;i<temp;i++)
		{
			c[i]=characters[i];
		}
		characters=c;
	}
	public int add(Character c)//在字符集表中插入一个字符
	{
		if(current==max)increase();
		characters[current++]=c;
		return current-1;
	}
	public int find(Character c)//返回字符在字符集中的索引值
	{
		int i;
		for(i=0;i<current;i++)
		{
			if(c.value.equals(characters[i].value))break;
		}
		if(i==current)return -1;
		return i;
	}
	public String getCharacter(int index)
	{
		return characters[index].value;
	}
	public void clear()
	{
		current=0;
		characters=new Character[max];
	}
	public int getCurrent()
	{
		return this.current-1;
	}
	public String initialize_end_symbols(String str)
	{
		String error="";
		for(int i=0;i<str.length();i++)
		{
			if(str.charAt(i)=='#')
			{
				error="输入终结符中请勿含'#'!";
				clear();
				return error;
			}
			if(str.charAt(i)!=' ')
			{
				Character c=new Character();
				c.value=str.charAt(i)+"";
				c.isEnd=true;
				if(find(c)!=-1 )
				{
					error="输入终结符中请勿重复!";
					clear();
					return error;
				}
				add(c);
			}	
		}
		Character c=new Character();
		c.value='#'+"";
		c.isEnd=true;
		partition=add(c);
		return error;
	}
	public String initialize_start_symbol(String str)
	{
		Character c=new Character();
		String error="";
		int i=0;
		//while(i<str.length()&& str.charAt(i)==' ')i++;
		c.value=str;
		
		if(find(c)!=-1)
		{
			error="开始符号不能为终结符!";
			clear();
			return error;
		}
		add(c);
		return error;
	}
	public String initialize_not_end_symbols(String str)
	{
		String error="";
		for(int i=0;i<str.length();i++)
		{
			if(str.charAt(i)!=' ')
			{
				if(str.charAt(i)=='#')
				{
					error="输入非终结符中请勿含'#'!";
					clear();
					return error;
				}
				Character c=new Character();
				c.value=str.charAt(i)+"";
				if(find(c)== partition+1 )c.value=str.charAt(++i)+"";
				if(find(c)!=-1 && find(c)!= partition+1)
				{
					error="输入非终结符中请勿重复!"+c.value;
					clear();
					return error;
				}
				add(c);
			}	
		}
		return error;
	}
	public String check_test_string(String str)
	{
		String error="";
		Character c=new Character();
		for(int i=0;i<str.length();i++)
		{
			if(str.charAt(i)!=' ')
			{
				c.value=str.charAt(i)+"";
				if(find(c)==-1)
				{
					error="输入非法字符,该文法不存在字符'"+c.value+"'!";
					return error;
				}
			}	
		}
		return error;
	}
}

⌨️ 快捷键说明

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