ツリートップ:単一ノードの解析はnilを返します
質問
ツリートップの解析の基本を取得しようとしています。これが私が言うことができる非常に単純な文法です 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
所属していません StackOverflow