Treetop:解析单节点返回零
题
我正在尝试获取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
.
我错过了什么?
解决方案
知道了!尽管我通常会删除这个问题,但如果其他人也从根本上误解了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
end
不隶属于 StackOverflow