代码:
package analyzer;
import java.util.Scanner;
public class Analyze {
static Scanner in = new Scanner(System.in);
static String endChar,misendChar;
static String[] grammer;
static String[] addgrammer;
static String[][] dfa;
public static void main(String[] args) {
int num;
int addnum = 2;
System.out.println("请输入终结符:");
endChar = in.next();
System.out.println("请输入非终结符(请使用S外的其它字符):");
misendChar = in.next();
System.out.println("请输入文法个数:");
num = in.nextInt();
num +=1;
grammer = new String[num];
System.out.println("请输入文法:");
for(int i=1; i<num; i++) {
System.out.print("第"+i+"个:");
grammer[i] = in.next();
addnum += grammer[i].length()-2;
}
grammer[0] = "S->"+String.valueOf(grammer[1].charAt(0));
addgrammer = new String[addnum];
for(int j=0,r=0;j<num;j++) {
for(int k=0,t=3;k<grammer[j].length()-2;k++) {
StringBuffer sbf = new StringBuffer(grammer[j]);
addgrammer[r] = new String(sbf.insert(t, "."));
t+=1;
r++;
}
}
dfa =new String[addnum][addnum];
for(int j=0,r=0;j<addnum;j++) {
if(addgrammer[j].equals("out")==false) {
findChild(addgrammer[j],r,0);
r++;
}
}
for(int j=0;j<dfa.length;j++) {
if(dfa[j][0]!=null) {
System.out.println("******I["+j+"]******");
for(int i=0;i<dfa[j].length;i++) {
if(dfa[j][i]!=null)
System.out.println(dfa[j][i]);
}
}
}
}
private static void findChild(String s, int t, int k) {
if(k==0) {
dfa[t][k] = s;
}
int index = s.indexOf(".");
if(index<s.length()-1) {
String st = String.valueOf(s.charAt(index+1));
if(misendChar.contains(st)) {
String str = st+"->.";
for(int i=0;i<addgrammer.length;i++) {
if (addgrammer[i].contains(str)) {
k++;
dfa[t][k] = addgrammer[i];
addgrammer[i] = "out";
findChild(dfa[t][k],t,k);
}
}
}
}
}
}
图片: