2

我正在阅读一个用十六进制数字填充的文件。我必须确定一个特定的模式,从它说“aaad”(不带引号)。每次看到该模式时,我都会为其他文件生成一些数据。

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

我将其设计为有限状态机,并在 C 中对其进行结构化switch-case以更改状态。这是我想到的第一个实现。

  • 设计:有没有更好的设计?
  • 实施:您是否看到我提到的使用开关盒的一些问题?
4

2 回答 2

1

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

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

于 2010-05-05T20:14:19.457 回答
1

对于令人尴尬的简单情况,几个if's 或switch'es 就足够了。要在 POSIX 系统上解析字符串,请使用man regex (3)。对于整个文件(例如复杂配置)的全功能解析,请使用Lex / FlexYacc / Bison

使用 C++ 编写时,请查看Boost Regex以获得更简单的情况,而使用Boost Spirit了解更复杂的情况。Flex & Bison 也可以使用 C++。

于 2010-05-05T21:18:40.393 回答