[英]Treetop ignores methods defined in grammar
我正在尝试使用树梢解析百分比。 我写了以下语法:
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
方法也可以正常工作(也有两个模块,但是都用于扩展节点)。 我找不到它的定义有什么不同,这导致了这一点。
我认为您只需要从根规则中删除括号即可。
另外,对于十进制规则,您应该在小数点后使用+
而不是*
; 您至少要有一个电话号码。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.