问题标签 [treesitter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
278 浏览

java - 使treesitter匹配类名

我正在使用Treesitter来解析 Clojure 代码。具体来说,我想区分符号、类名和Java Interop

这是我的语法:

我希望

被解析为

但是 Treesitter 一直在看(new_class (classname)) (classname)而不是(classname)for Java.lang.String。我想我需要某种贪婪的匹配,并且 prec.right()在不同的地方尝试过但无济于事。我错过了什么?

0 投票
2 回答
833 浏览

gcc - 如何编译 tree-sitter 解析器?

我正在尝试编译用于​​ neovim 的 typescript 、tsx和 python 解析器,但是当我按照tree-sitter tracking issuegcc -o parser.so -shared src/parser.c -Os -I./src的指示运行时,我得到:

我已经运行了 npm 构建步骤,并在构建中尝试了 make 文件,但我无法获得最终.so文件。

0 投票
1 回答
57 浏览

javascript - 有没有办法将treesitter语法拆分为多个文件?

我正在解析一种相当简单的语言,但我的语法在单个文件中已经变得笨拙。有什么办法可以把它分成多个文件吗?

0 投票
1 回答
56 浏览

treesitter - 是否有用于解析任意长度列表的标准treesitter 构造?

编程语言中一种非常常见的解析场景是带有分隔符的任意长度的非空元素列表,例如:

我一直在treesitter中解析这个如下:

这很有效,但它很常见,我想知道treesitter是否有一个内置的构造。可以?

0 投票
1 回答
99 浏览

node-modules - 你如何打包一个 tree-sitter 语法以供消费?

假设您想使用node-tree-sitter包编写一个使用您编写的 tree-sitter 语法的程序。您如何打包您编写的语法以供使用?节点模块中必须包含的最小文件集是什么?在javascript 模块的 package.json 文件中有一个特定于 tree-sitter 的部分,填写它是否重要?

0 投票
1 回答
260 浏览

typescript - 如何使用 typescript 中的 node-tree-sitter 模块?

通过查看拉取请求和问题,我看到node-tree-sitter模块中有打字稿定义(可能当前已过时) ;如何从 typescript 访问这些定义,以及 typescript 中以下 node-tree-sitter 示例 javascript 代码的等价物是什么?

0 投票
1 回答
895 浏览

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

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

和一个输入:

我得到以下 CST:

所以我的问题是,我如何从这些节点/叶子中获取值,即解析的内容。我必须以某种方式评估这棵树。我肯定有办法,因为我也可以使用 tree-sitter 进行语法突出显示,因为我需要这些值(我猜)。但是我阅读了文档并找不到任何说明,如何做到这一点。

0 投票
1 回答
218 浏览

node.js - 针对不同的 NODE_MODULE_VERSION 编译 - Tree-sitter 解析器,ATOM 包

我创建了一个 tree-sitter 解析器,它解析我们使用的一些遗留 SAP 语言,以使包与 ATOM 兼容。我会非常了解我所采取的行动,因为我对自己搞砸的地方不太自信。

根据我阅读的许多指南的树保姆文档 - 我已经完成了以下操作:

将 D:\path-to-project\node_modules.bin 添加到 PATH

创建一个新目录并 cd 到它:

现在我们可以创建我们的 tree-sitter grammar.js 文件并生成 tree-sitter 解析器,所以我做了:

创建了grammar.js并记下了必要的语法打开CMD,cd到项目文件夹,然后:

因此,现在我可以将解析器集成到 ATOM 包中。因此,我通过 - 'npm publish' 将我创建的 tree-sitter 解析器发布到 npm,然后:

我从 ATOM 生成包函数创建了一个包,在包中创建了一个“语法”目录和一个具有以下值的 .cson 文件:

这就是有趣的地方。在我的 ATOM 包目录中的“npm install my-npm-package-name”之后,我在 ATOM 中收到一个错误:

根据我所做的网络调查,这是因为 ATOM 使用的 NodeJs 版本与我使用的不同(NodeJs v 12.4.0)。这就是我坚持的地方,在多次尝试使用“电子重建”重新编译之后,我放弃了但没有成功,并决定我需要更有经验的帮助者。

我正在 Windows 上开发和安装。NodeJS 与 nvm 一起安装,我正在使用 v12.4.0 进行开发。

0 投票
1 回答
57 浏览

grammar - 无法在树保姆中编码块规则优先于语句规则的优先级

我正在尝试对简单的语法进行编码,该语法既涵盖了普通语句,也涵盖了用块括起来的语句。块有它的特殊关键字。我已将块规则优先级指定为零,但 tree-sitter 仍然不匹配它。即使它报告错误,即其他规则不匹配。但尽管如此,它不想匹配块!为什么以及如何解决?

编码:

tree-sitter将整个序列block { r=12;作为语句匹配,尽管在语句中不允许使用大括号。所以它报错,但不想匹配块规则,虽然它是适用的。

语法:

输出:

0 投票
1 回答
138 浏览

javascript - Atom 编辑器 - 没有从树保姆解析器接收到正确的范围

我开发了一种名为PTL. 我想在 Atom 中为它突出显示语法,所以我按照相应的指南为它创建了一个工作的 tree-sitter 解析器。通过大量的调试,我设法将解析器安装为 Atom 可以读取的包。

语言包

解析器包

我使用以下文件测试了解析器 input.ptl

测试是成功的,所以我相信 tree-sitter 正在捕获完整的语法树。但是,在安装之后,当我在 atom 中打开我的确切文件时(只有内容,没有像标题和预期语法树这样的树保姆额外内容),没有任何东西是正确的,并且整个文件都有ptl范围。我有以下范围:

所以至少,应该拿起最后的评论。它不是。我已经看到这个线程描述了完全相同的问题,但修复涉及更新 Atom 的语法获取功能以识别树保姆语法。我正在运行更新版本的 Atom,所以这不是原因。我该如何调试呢?

编辑:我在控制台中发现了一个错误:

基于,看起来我需要使用不同版本的 tree-sitter 重建我的包,尽管我不知道 tree-sitter Atom 使用哪个版本。这是否意味着我需要更新 Atom 的 tree-sitter 版本(似乎更可取),还是需要降级我在包中使用的 tree-sitter 版本?