Baumwipfel: Parsen einzelnen Knoten NIL zurück
Frage
Ich versuche, die grundlegendste Treetop Parsing zu erhalten. Hier ist ein sehr einfach bisschen Grammatik, so dass ich ArithmeticParser.parse('2+2').value == 4
sagen kann.
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
korrekt funktioniert, einen Knoten zurückkehrt. Allerdings Parsen 2
oder 22
kehrt nil
.
Was habe ich verpasst?
Lösung
Verstanden! Obwohl ich normalerweise die Frage löschen würde, würde ich nicht überrascht sein, wenn jemand anderes auch Treetop grundsätzlich verkennt, so dass ich diese Referenz hier verlassen werden.
Treetop einfach nicht durch die Regeln gehen, auf der Suche, für die man trifft. Stattdessen beginnt er bei der ersten Regel, und wenn die erste Regel nicht, paßt es sein muss, gezwungen zu Alternativen in Betracht ziehen. Daher wird am Ende der / number
Regel erscheint additive
müssen.
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