Ruby:如何在没有太多if语句/标志的情况下编写不同的“状态”?

时间:2014-03-26 18:31:05

标签: ruby parsing architecture text-parsing

为了帮助提供一些背景知识,我正在尝试编写一个逐行接收长文件的解析器。

程序将根据收到的信息设置不同的状态。将其视为在文件中达到某个“检查点”并设置标志 - >是真的基于它。我正在努力追踪这些“检查站”,但我知道使用旗帜和if语句会使我的生活从长远来看变得困难。

示例情况:

**State 1 (requires the following variables to be set to true):**

foo -> true, bar -> true, red -> false

**State 2:**

requires state 1 to be fulfilled, as well as, blue -> true, green-> false, yellow -> true

**State 3:**

requires states 1/2 to be fulfilled, along with added variables, so on and so forth.

正如您所看到的,这些标志/状态将由于彼此之间的依赖性而不断累积。

希望这一切都有道理。我可以使用哪些提示/策略来干净地编程所有这些?

1 个答案:

答案 0 :(得分:0)

我的猜测是你没有context-free grammar

如果你有一个无上下文的语法,你可以使用一个无上下文的解析器生成器;有很多工具可以为无上下文语法创建解析器。搜索的关键词:解析器生成器。

通常,解析上下文敏感语法的最简单方法是使用解析器生成器构建解析器,该解析器生成器可以解析实际语法的无上下文超集,然后执行第二个解析阶段以执行上下文敏感检查。