问题标签 [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 回答
27 浏览

treesitter - 即使其他匹配似乎可能,Treesitter 也会产生错误节点

我正在尝试使用标识符和文字解析语言。

b是一个标识符,并且b""是一个文字(也可能是例如,b"foo")。

我有以下简化语法:

这会产生以下匹配状态:

即,我能够解析类似的结构b"",但匹配器ident进入错误分支并且无法恢复。

我试过token没有成功。这里缺少什么?

0 投票
0 回答
40 浏览

treesitter - tree-sitter 测试文件语法与编程语言语法冲突

tree-sitter 测试文件的语法如下:

但是,TLA+ 中的模块定义如下:

这与 tree-sitter 测试文件格式冲突。如果我尝试运行此测试:

我收到此错误:

由于tree-sitter test---- MODULE Test2 ----视为测试的名称,因为它位于两行====. 我该如何解决这个问题?

0 投票
3 回答
2045 浏览

windows - 在 Windows 上安装 nvim_treesitter

英语不好(对不起)。我正在尝试让 nvim_treesitter 在我的 Windows 机器上工作,在我的 Linux 机器上它工作得很好,但是现在当我在 Windows 上尝试时 :checkhealth nvim_treesitter 给出:

健康#nvim_treesitter#check

安装

  • 错误:tree-sitter找不到可执行文件
  • 好的:git找到可执行文件。
  • 错误:cc找不到可执行文件。
    • 建议:
      • 检查 gcc 或 clang 是否在您的 $PATH 中

解析器/功能 HLFI

图例:H[ighlight], L[ocals], F[olds], I[ndents] *) 找到多个解析器,只会使用一个 x) 查询中发现错误,尝试运行 :TSUpdate {lang}

我对这件事完全陌生,任何建议都会有所帮助:)

0 投票
1 回答
354 浏览

parsing - 在 tree-sitter 语法中,除了标识符中的保留关键字,我如何匹配字符串?

这可能与我不了解关键字提取功能有关,从文档看来,这似乎是为了避免关键字和以下表达式之间不存在空格的问题。但是假设我有一个用于变量名、函数名等的相当标准的标识符正则表达式:

/\w*[A-Za-z]\w*/

如何防止它匹配保留关键字,如IForELSE或类似的东西?所以这个表达式会产生一个错误:

int IF = 5;

虽然这不会:

int x = 5;

0 投票
1 回答
231 浏览

parsing - 在 tree-sitter 语法中,如何以非关联方式匹配未分隔的值列表?

例如,考虑以下语法:

因此,如果我有输入字符串a \X b \X c \X d,我希望它匹配为:

但是,我实际上可以获得此行为的唯一方法是执行以下操作:

所以我必须硬编码所有的表达式长度,随着长度的增加优先级增加,并且无法弄清楚如何编写一个包罗万象的_operator_n规则。我该如何做到这一点?指定冲突然后分配动态优先级的某种组合?

0 投票
1 回答
147 浏览

parsing - 在 tree-sitter 语法中,运算符优先级/关联性冲突是否可能导致运行时解析失败?

考虑像子集(⊂)这样的中缀运算符。子集运算符不是关联的,因为它的结果(布尔值)本身不是一个集合,因此不能馈送到子集运算符的一侧或另一侧。考虑:

理想情况下,这将是解析失败,但 tree-sitter 似乎不允许基于运算符冲突的解析失败;相反,它要求您在解析器生成时通过指定关联性或优先级来明确解决冲突。有没有办法向树保姆表明这应该是解析冲突?不仅适用于同类的非关联运算符,还适用于具有相同优先级但不具有关联性的不同运算符之间,例如:

或者是唯一指定明确解析,然后在语义级别处理的解决方案?

0 投票
1 回答
65 浏览

parsing - 向 Treesitter LR1 语法添加规则更改优先级

我试图在 Treesitter 语法中使运算符优先级正确。Treesitter 是一个 LR1 解析器生成器。

我有一个简单的算术语法,部分看起来像这样:

这可以正常工作。multiply_expression确实比addition_expression.

但是,当我添加中间规则时,优先级会发生变化:

我转向$.expression, '*'了它自己的规则。对我来说,这似乎是一个等效的语法,我预计不会有任何变化。但是,随着这种变化,优先级不再正确。addition_expression,保持不变,似乎比 具有更高的优先级multiply_expression

为什么引入额外的步骤会改变优先级?是否有此问题的名称,或者我在哪里可以找到有关它的更多信息?在编写语法或修复优先级问题时,是否有要遵循的规则或思考方式?

0 投票
0 回答
24 浏览

s-expression - 查询以选择没有给定属性的 html 标记

给定以下树:

这是通过解析此代码产生的:

当样式标签缺少属性lang时,我想将其突出显示为 css。以上包含一些需要考虑的情况。只有最后三个应该突出显示为 css

到目前为止,我想出了这个查询:

但不幸的是,这也突出显示<style lang="scss" scoped>,因为它包含一个与 lang 不匹配的属性。此标记包含 lang 属性,因此不应匹配。

如何修改上述查询,使其仅匹配没有 lang 属性的样式标签?

0 投票
1 回答
196 浏览

case-insensitive - 如何在tree-sitter中进行不区分大小写的查询

我正在努力尝试在我正在实现的语言服务器中创建和使用 tree-sitter 语法,以支持查找变量的所有引用等功能。给定语法,我将能够编写一个查询来查找对具有特定名称(例如myVar)的变量的所有引用。但是,我正在为使用不区分大小写的变量编写语言服务器的语言(例如,myVar可以引用为MYVARMyVaRmyvar等)。

我如何能够编写一个树保姆查询来匹配令牌必须不区分大小写地匹配特定字符串的模式?

我可以编写查询以不按变量名称过滤并实现我自己的结果过滤,但我想知道是否有一种方法可以在查询本身内处理这个问题,而不是实现自定义过滤代码。

例子

这是一个简化的示例案例来说明我的意思。

给定以下语法,我想查询为set_statements变量设置新值的所有内容myVar

通常我可以通过如下查询来做到这一点。

但是,正如我们在以下运行查询的示例中看到的那样,这仅适用于myVar使用与查询相同的大小写的引用。

我想创建一个查询,而不是找到:

0 投票
0 回答
113 浏览

visual-studio - 如何将 C++ 和 Tree_sitter 安装到 Windows 10?- 需要 Microsoft Visual C++ 14.0 或更高版本

我不知何故缺少 Windows 10 中的 C/C++ 并且想知道如何安装。

我的最终目标是将 dbt 工具安装到 Window 10。安装了 Python 3.9 和 VS2019。想知道为什么 VS2019 没有提供所需的功能。

命令:

错误: