我正在实现自己的 fsm 来解析文件。我是 fsm 模式的新手,所以想了解它。
我的 fsm 类采用正在解析的文件流以及当前状态和所有接受状态的集合。
现在我对一些事情感到困惑。
fsm 如何在状态之间移动并跟踪到目前为止已解析的内容?
状态对象应该存储什么信息?现在他们有一个在线匹配的模式,看看 fsm 是否可以移动到这个状态。
示例:
要解析的文件:
Person: bob smith
Age: 33
Location: new York
End person
Person: Jane smith
Age: 66
Location: Chicago
End person
所以我有一个人的开始、年龄、位置和结束人的状态。每个状态对象都有一个模式。 (正则表达式)检查给定的行是否被他们接受。
但是我不知道如何在使用 fsm 解析此文件时构造 Person 对象?
最佳答案
有一个人员列表(最初为空)。有一个 currentPerson 变量。
- 当状态为“person start”时,将
currentPerson
变量初始化为新的 Person。 - 当状态为“age”时,将年龄设置到
currentPerson
中。 - “位置”状态也是如此。
- 当状态为“人员结束”时,将当前人员添加到人员列表中。
当您到达文件末尾时,人员列表将包含您的所有人员。
关于java - 使用有限状态机解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286779/