我已经实现了一种扫描以特定格式编写的NFA的方法。它使用HashMap>在第一个State是当前状态的情况下,map中的字符串是导致转换的符号,第二个映射中的状态是它转到的状态。我可以加载NFA就好了。
我的问题是找到与之匹配的字符串。程序的下一部分扫描一系列符号,例如“a”“b”“c”,并需要判断当前加载的NFA是否接受它们。目前我有这个:
public static boolean search(State state, int track){
String s = inputS[track];
state.visited = true;
System.out.println("state: " + state.label);
System.out.println("input" + s);
HashMap<String, ArrayList<State>> p = FSA.get(state);
if(p.containsKey(s)){
track++;
if(track == inputS.length-1 && state == finalState){
return true;
}
for(State st : p.get(s)){
if(st.visited == false){
return search(st, track);
}
}
}
return false;
}
inputS数组是我正在判断的字符串中的符号数组。我无法解释线路读入NFA但未以接受状态结束的情况,我知道我需要以某种方式回溯以继续搜索...提前感谢您的帮助。