ツリートップでパーセンテージを解析しようとしています。私は次の文法を書きました:
grammar Numerals
rule percentage
(decimal "%") {
def to_f
decimal.to_f / 100
end
}
end
rule decimal
sign [0-9]+ '.' [0-9]* {
def to_f
text_value.to_f
end
}
end
rule sign
('+'/'-')?
end
end
これは正しく一致しますが、何らかの理由でto_f
ルート ノードのメソッドが結果に含まれていません。
tt によって生成されたコードを確認したところ、パーセンテージ ノード用に 2 つのモジュールが作成されており、そのうちの 1 つだけが残りのコードで使用されていました。
module Percentage0
def decimal
elements[0]
end
end
module Percentage1
def to_f
decimal.to_f / 100
end
end
Percentage1 はコード内の他の場所には表示されませんが、Percentage0 は正しいノードで使用されます。
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(Percentage0)
一方、to_f
メソッド onは正常にdecimal
動作します (これも 2 つのモジュールですが、両方ともノードを拡張するために使用されます)。その定義の違いがわかりません。それが原因です。