当前位置:  开发笔记 > 编程语言 > 正文

有限状态机程序

如何解决《有限状态机程序》经验,为你挑选了1个好方法。

我的任务是创建一个小程序,它可以从输入中读取FSM的定义,从输入中读取一些字符串,并根据定义确定FSM是否接受这些字符串.我需要用C,C++或Java来编写它.我已经在网上搜索了如何开始的想法,但我能找到的最好的是维基百科关于基于Automata的编程的文章.提供的C示例似乎使用枚举列表来定义状态,如果状态是事先进行硬编码则没问题.同样,我需要能够实际读取状态的数量和每个状态应该做的定义.任何建议表示赞赏.

更新:我可以使字母变小(例如{ab})并采用其他约定,例如开始状态始终为状态0.我可以对状态数施加合理的限制,例如不超过10.

问题摘要:

我如何实施FSA?

Mike Dunlave.. 7

首先,获取所有状态(N个)的列表,以及所有符号(M个)的列表.然后有两种方法,解释或代码生成:

    解释.创建一个NxM矩阵,其中矩阵的每个元素都填入相应的目标状态编号,如果没有则填充-1.然后只需要一个初始状态变量并开始处理输入.如果你达到-1状态,你就失败了.如果输入符号用完而没有进入成功状态,则会失败.否则你就成功了.

    代码生成.用C或您最喜欢的编译器语言打印出一个程序.它应该有一个初始化为start状态的整数状态变量.它应该在输入字符上有一个for循环,包含状态变量的开关.每个状态应该有一个案例,并且在每种情况下,在当前字符上都有一个switch语句,用于更改状态变量.

如果你想要比2更快的东西,这肯定会让你不及格(!),摆脱状态变量,而是使用goto :-)如果你不知所措,你可以安慰自己知道这是编译器做的.

PS你可以得到你的˚F变为一个,如果你认识到循环等.在状态图并打印出相应的,而是否语句,而不是使用goto语句.



1> Mike Dunlave..:

首先,获取所有状态(N个)的列表,以及所有符号(M个)的列表.然后有两种方法,解释或代码生成:

    解释.创建一个NxM矩阵,其中矩阵的每个元素都填入相应的目标状态编号,如果没有则填充-1.然后只需要一个初始状态变量并开始处理输入.如果你达到-1状态,你就失败了.如果输入符号用完而没有进入成功状态,则会失败.否则你就成功了.

    代码生成.用C或您最喜欢的编译器语言打印出一个程序.它应该有一个初始化为start状态的整数状态变量.它应该在输入字符上有一个for循环,包含状态变量的开关.每个状态应该有一个案例,并且在每种情况下,在当前字符上都有一个switch语句,用于更改状态变量.

如果你想要比2更快的东西,这肯定会让你不及格(!),摆脱状态变量,而是使用goto :-)如果你不知所措,你可以安慰自己知道这是编译器做的.

PS你可以得到你的˚F变为一个,如果你认识到循环等.在状态图并打印出相应的,而是否语句,而不是使用goto语句.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有