清理Ruby代码

时间:2012-03-22 23:42:44

标签: ruby

我正在编写一个解析器,并且在我的代码中使用各种方法,我的代码与此类似:

    if @sym.type == TokenType::IDENT_TOKEN
      next_token()
      if @sym.type == TokenType::EQUALS_TOKEN
        next_token()
        if @sym.type == TokenType::NUMERAL_TOKEN
          next_token()
          const_a(keys | ConstList.follow)
        else
          error(keys | ConstA.first)
        end
      else
        error(keys | ConstA.first)
      end
    else
      error(keys | ConstA.first)
    end 

这在我看来很难阅读,看起来非常混乱,根本不是惯用的Ruby代码。是否有某种方法可以将其压缩并减少混乱?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果应用状态机模式,您可能会极大地清理它。它不仅更容易阅读,而且您可以使用正确的工具生成通过解析器的流程图。

这就像Ragel这样的工具构建解析器的方式。

答案 1 :(得分:2)

好吧,您可以通过在成功解析后执行errornext然后陷入单个错误,将所有return方法调用合并为一个调用。

我认为在编写递归下降解析器时你应该接受一定数量的代码爆炸。这只是他们的样子。

您可以include一些常量定义模块来摆脱范围限定符。