我正在尝试了解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。
我错过了什么?
发布于 2010-05-19 00:08:13
明白了!虽然我通常会删除这个问题,但如果其他人也从根本上误解了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
endhttps://stackoverflow.com/questions/2858936
复制相似问题