📄 characters.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 + -