Cima: analisi singola rendimenti nodo nullo
Domanda
Sto cercando di ottenere la base di Treetop analisi. Ecco un semplice po 'di grammatica in modo che posso dire 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
Analisi 2+2
funziona correttamente, la restituzione di un nodo. Tuttavia, l'analisi 2
o ritorna 22
nil
.
Cosa mi sono perso?
Soluzione
Ci sono! Anche se mi piacerebbe normalmente cancellare la domanda, non sarei sorpreso se qualcun altro anche fraintende fondamentalmente Cima di albero, quindi lascio questo qui come riferimento.
Cima non basta andare attraverso le regole, alla ricerca di cui uno si applica. Invece, inizia la prima regola, e, se la prima regola non corrisponde, deve essere costretto a prendere in considerazione delle alternative. Pertanto, / number
deve apparire alla fine della regola 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