gpt4 book ai didi

c - 如何从tree-sitter中的节点获取值?

转载 作者:行者123 更新时间:2023-12-03 11:37:01 24 4
gpt4 key购买 nike

如果我在tree-sitter中有一个简单的语法:

rules: {
expr: $ => choice(
/[0-9]+/,
prec.right(seq($.expr, /[+-]/, $.expr)),
)
}

还有一个输入:

3+4

我得到以下 CST:

(start [0, 0] - [0, 3]
(expr [0, 0] - [0, 3]
(expr [0, 0] - [0, 1])
(expr [0, 2] - [0, 3])))

所以我的问题是,如何从这些节点/叶子中获取值,即解析的内容。我必须以某种方式评估这棵树。我当然确信有办法,因为我还可以使用树保姆进行语法突出显示,以满足我需要的值(我猜)。但我阅读了文档并没有找到任何注释,如何操作。

最佳答案

Tree-sitter 的语法树不存储输入文本的副本。因此,要获取特定标记的文本,您必须使用 Tree-sitter 为您提供的范围来计算原始源代码的切片

python binding ,看起来像这样:

source_code_bytes = b'3 + 4'
tree = parser.parse(source_code_bytes)
node1 = tree.root_node.children[0].children[0]

node1_text = source_code_bytes[node1.start_byte:node1.end_byte].decode('utf8')
assert node1_text == '3'

在某些语言绑定(bind)中,例如 the wasm binding ,有一个 .text 帮助器可以让这变得更容易。

an open issue用于将这种辅助函数添加到 python 绑定(bind)中。

关于c - 如何从tree-sitter中的节点获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63635500/

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