计算理论导引实验一:NFA对字符串的识别


课程结束了,但是在对这门课的理解上,可能还有不足之处。现在有时间便将当时的实验内容及使用的解决方法记录下来。

实验描述

实验中要求理解NFA工作原理设计数据结构或类,编写代码实现下图中的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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值