1

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は正しく機能し、ノードを返します。ただし、解析2または22戻りますnil

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

4

1 に答える 1

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
于 2010-05-18T16:08:13.050 に答える