java - 使用有限状态机解析文件

标签 java finite-automata fsm state-machine

我正在实现自己的 fsm 来解析文件。我是 fsm 模式的新手,所以想了解它。

我的 fsm 类采用正在解析的文件流以及当前状态和所有接受状态的集合。

现在我对一些事情感到困惑。

  1. fsm 如何在状态之间移动并跟踪到目前为止已解析的内容?

  2. 状态对象应该存储什么信息?现在他们有一个在线匹配的模式,看看 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/

相关文章:

regex - 正则表达式转换为状态机的简短示例?

java - 在 Android Java 中传递上下文并不好,但是如何访问服务中的 Activity 呢?

java - java中不同数组声明的区别

JAVA - 更改成员枚举函数中的非静态类字段

output - build 摩尔机器

open-source - 自动机设计软件

sql - SQL 有有限状态机定义吗?

java - 字符串中的字符减法

java - ApiProxy$ApplicationException : ApplicationError: 8 after created the API Access in google Cloud Storage

regular-language - 无限的语言不可能是正则的吗?什么是有限语言?