gpt4 book ai didi

ruby - 树顶忽略语法中定义的方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:54 24 4
gpt4 key购买 nike

我正在尝试用树顶解析一个百分比。我写了以下语法:

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

关于ruby - 树顶忽略语法中定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com