树顶:解析单个节点返回nil

时间:2010-05-18 15:59:16

标签: ruby parsing grammar treetop

我正在尝试获取Treetop解析的基础知识。这是一个非常简单的语法,所以我可以说ArithmeticParser.parse('2+2').value == 4

grammar Arithmetic
  rule additive
    first:number '+' second:number {
      def value
        first.value + second.value
      end
    }
  end

  rule number
    [1-9] [0-9]* {
      def value
        text_value.to_i
      end
    }
  end
end

解析2+2正常工作,返回一个节点。但是,解析222会返回nil

我错过了什么?

1 个答案:

答案 0 :(得分:1)

知道了!虽然我通常会删除这个问题,但如果其他人也从根本上误解了Treetop,我也不会感到惊讶,所以我会留在这里作为参考。

Treetop不只是遵守规则,寻找适用的规则。相反,它从第一个规则开始,如果第一个规则不匹配,则必须强制来考虑替代规则。因此,/ number必须出现在additive规则的末尾。

grammar Arithmetic
  rule additive
    first:number '+' second:number {
      def value
        first.value + second.value
      end
    }
    / number
  end

  rule number
    [1-9] [0-9]* {
      def value
        text_value.to_i
      end
    }
  end
end