课程结束了,但是在对这门课的理解上,可能还有不足之处。现在有时间便将当时的实验内容及使用的解决方法记录下来。
实验描述
实验中要求理解NFA工作原理设计数据结构或类,编写代码实现下图中的NFA,通过某些字符串作为输入,通过代码运行判断NFA能否正确接受或拒绝这些字符串,并将得到的结果进行输出。
状态转移函数关系如下表所示,在接下来的分析编程过程中,使用#表示ε字符,用NO表示状态转移为空集的状态。
0 | 1 | 空【用#号表示】 | |
---|---|---|---|
q1 | q1 | q1,q2 | NO |
q2 | q3 | NO | q3 |
q3 | NO | q4 | NO |
q4 | q4 | q4 | NO |
起始项:q1
终止接受状态:q4
程序中对每个状态都进行转移,最后判断结束时,最后状态为q4则接受,状态为其他则拒绝
问题解决
在针对上面的NFA及实验要求进行分析之后,可将整个过程抽象成三个类,分别为状态类,状态转移类,键盘输入及逻辑处理类。
状态类
该类中主要用于表示NFA状态机的初始状态及接受状态,该类的代码如下:
public class State {
private String beginState;//状态机的初始状态
private String endState;//状态机的接收终止状态
public String getBeginState() {
return beginState;
}
public void setBeginState(String beginState) {
this.beginState = beginState;
}
public String getEndState() {
return endState;
}
public void setEndState(String endState) {
this.endState = endState;
}
public State(String beginState, String endState) {
super();
this.beginState = beginState;
this.endState = endState;
}
public State() {
super();
}
}
状态转移关系类
该类主要用于表示状态的转移关系,代码如下:
public class Old2New {
private String oldState;
private char trans;
private String newState;
public String getOldState() {
return oldState;
}
public void setOldState(String oldState) {
this.oldState =