编写一段程序,接受字符串的输入,判断该字符串是否为该DFA能识别的字符串。
识别字符串的DFA参考编译原理课本P48的DFA,且用二维数组来存储。
import java.util.Scanner;
public class DFA {
char [][]dfa;//转换关系矩阵
char firststate; //初态
char []letter;//字符集
char []endstate; //终态
public DFA() {
dfa = new char[][]{{'3','2','0','0'},
{'4','2','0','0'},
{'0','6','3','5'},
{'0','7','3','5'},
{'4','0','0','0'},
{'0','6','0','0'},
{'0','6','0','0'}};
firststate = '1';
endstate= new char[] {'6','7'};
letter = new char[] {'a','b','c','d'};
}
public char judge(char begin,String inputStr) {
//char[]a =str.toCharArray();//将字符串转换为字符数组
String str= inputStr.trim();//去除空格
char nowstates = '1';
for(int i=0;i<str.length();i++) {
switch(str.charAt(i)) {
case 'a': nowstates = dfa[Integer.parseInt(String.valueOf(nowstates))-1][0]; break;
case 'b': nowstates = dfa[Integer.parseInt(String.valueOf(nowstates))-1][1]; break;
case 'c': nowstates = dfa[Integer.parseInt(String.valueOf(nowstates))-1][2]; break;
case 'd': nowstates = dfa[Integer.parseInt(String.valueOf(nowstates))-1][3]; break;
default: nowstates='!'; break;
}
}
return nowstates;
}
public static void main(String[] args) {
DFA dfa =new DFA();
char beginstate = dfa.firststate;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串");
String inputStr = scanner.nextLine();
char res=dfa.judge(beginstate,inputStr);
if("6".equals(String.valueOf(res))||"7".equals(String.valueOf(res))) {
System.out.println("可识别!");
}else {
System.out.println("不可识别!");
}
}
}