【发布时间】:2013-10-22 15:57:40
【问题描述】:
我正在尝试使用树顶解析百分比。我写了以下语法:
grammar Numerals
rule percentage
(decimal "%") {
def to_f
decimal.to_f / 100
end
}
end
rule decimal
sign [0-9]+ '.' [0-9]* {
def to_f
text_value.to_f
end
}
end
rule sign
('+'/'-')?
end
end
这匹配正确,但由于某种原因,结果中缺少根节点上的 to_f 方法。
当我检查 tt 生成的代码时,它为百分比节点创建了两个模块,其余代码中只使用了一个模块:
module Percentage0
def decimal
elements[0]
end
end
module Percentage1
def to_f
decimal.to_f / 100
end
end
Percentage1 永远不会出现在代码的其他任何地方,而 Percentage0 用于正确的节点
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(Percentage0)
另一方面,decimal 上的 to_f 方法工作正常(也是两个模块,但都用于扩展节点)。我找不到它的定义有什么不同,导致了这种情况。
【问题讨论】: