开发者

Treetop: parsing single node returns nil

I'm trying to get the basic of Treetop parsing. Here's a开发者_如何学编程 very simple bit of grammar so that I can say 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

Parsing 2+2 works correctly, returning a node. However, parsing 2 or 22 returns nil.

What did I miss?


Got it! Though I'd normally delete the question, I wouldn't be surprised if someone else also fundamentally misunderstands Treetop, so I'll leave this here for reference.

Treetop doesn't just go through the rules, looking for which one applies. Instead, it starts at the first rule, and, if the first rule does not match, it must be forced to consider alternatives. Therefore, / number must appear at the end of the additive rule.

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜