Algorithm 使用有限状态机对于一般文本解析来说是一个好的设计吗?

Algorithm 使用有限状态机对于一般文本解析来说是一个好的设计吗?,algorithm,language-agnostic,implementation,fsm,Algorithm,Language Agnostic,Implementation,Fsm,我正在读一份填好的文件 用十六进制数。我必须确定一个 特定模式,如“aaad”(不带引号) 信息技术每次我看到这个图案,我 生成一些数据到其他文件 这是设计程序时非常常见的情况-解析和查找特定模式 我将它设计为一个,并用C语言构建它,使用开关盒来更改状态。这是我想到的第一个实现 设计:是否有更好的设计 实现:您是否看到我提到的使用交换机外壳时出现的一些问题 手摇FSM可以很好地用于简单的情况,但随着状态和输入数量的增加,它们往往会变得笨拙 可能没有理由改变您已经设计/实现的内容,但是如果您对通

我正在读一份填好的文件 用十六进制数。我必须确定一个 特定模式,如“aaad”(不带引号) 信息技术每次我看到这个图案,我 生成一些数据到其他文件

这是设计程序时非常常见的情况-解析和查找特定模式

我将它设计为一个,并用C语言构建它,使用
开关盒
来更改状态。这是我想到的第一个实现

  • 设计:是否有更好的设计
  • 实现:您是否看到我提到的使用交换机外壳时出现的一些问题

手摇FSM可以很好地用于简单的情况,但随着状态和输入数量的增加,它们往往会变得笨拙


可能没有理由改变您已经设计/实现的内容,但是如果您对通用文本解析技术感兴趣,您可能应该看看正则表达式、Flex、Bison和ANTLR之类的东西。

对于令人尴尬的简单情况,如果或开关就足够了。 用于在POSIX系统上解析字符串。对于整个文件(如复杂配置)的全功能解析,请使用/和/


在C++中编写时,请看更简单的情况和更复杂的情况。Flex和BySun也用C++工作。

@ PielReTun:在C代码之前从未使用正则表达式。是否有一些用于C+1的正则表达式库:正则表达式是一种FSM。因此,对于这个问题,解析器是由Flex、Bison和ANTLR等工具生成的。我喜欢这样:是的,使用FSM;不,不要自己滚。