質問

ツリートップの解析の基本を取得しようとしています。これが私が言うことができる非常に単純な文法です 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 ノードを返すと、正しく動作します。ただし、解析 2 また 22 戻り値 nil.

私は何を取りこぼしたか?

役に立ちましたか?

解決

とった!私は通常、質問を削除しますが、他の誰かも根本的に誤解を告げても驚かないので、これを参照のためにここに残します。

ツリートップは、単にルールを調べるだけでなく、適用されるルールを探します。代わりに、それは最初のルールから始まり、最初のルールが一致しない場合、それは 強制 代替案を考慮する。したがって、 / 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top