-
Tree-sitter 文档-18-编写测试(Writing Tests)
编写测试(Writing Tests)
对于你在 grammar 中添加的每一条规则,都应首先创建一个测试,用于描述在解析该规则时语法树应当呈现的结构。
这些测试使用特定格式的文本文件编写,并存放在解析器根目录下的:
test/corpus/
目录中。
例如,你可以创建一个名为:
test/corpus/statements.txt
的文件,其内容包含如下测试条目:
==...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-17-外部扫描器(External Scanners)
外部扫描器(External Scanners)
许多编程语言中存在一些 token,其结构无法或不方便使用正则表达式描述。
例如:
Python 中的缩进(indent)与反缩进(dedent)token
Bash 与 Ruby 中的 heredoc
Ruby 中的 percent string
Tree-sitter 允许你使用 外部扫描器(external sc...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-16-parser 编写语法(Writing the Grammar)
编写语法(Writing the Grammar)
编写 Tree-sitter 语法需要一定的设计取舍。
对于任意一种语言,都存在无限多种上下文无关文法(CFG)可以描述它。
但要生成一个高质量的 Tree-sitter 解析器,语法必须满足两个关键特性:
结构直观
尽量符合 LR(1) 文法特性
Tree-sitter 生成的是具体语法树(Concrete Sy...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-15-parser 语法 DSL(The Grammar DSL)
语法 DSL(The Grammar DSL)
以下内容列出了可在 grammar.js 中用于定义语法规则的内置函数完整集合。这些函数用于描述语言的语法结构。(Tree-sitter)
符号(Symbols)
每一条语法规则都是一个 JavaScript 函数,该函数接收一个通常命名为 $ 的参数。
$.identifier
这种写法用于在规则中引用其他语法符号。
名...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-14-parser 开始使用(Getting Started)
开始使用(Getting Started)
依赖项(Dependencies)
要开发一个 Tree-sitter 解析器,需要安装以下两个依赖:
JavaScript 运行时
Tree-sitter 的语法(grammar)使用 JavaScript 编写,并通过 JavaScript 运行时(默认是 Node.js)进行解释。因此需要保证运行时命令(默认 nod...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-13-ABI 版本(ABI Versions)
ABI 版本(ABI Versions)
Tree-sitter 使用 ABI(Application Binary Interface,应用二进制接口)版本号 来确保:
语言解析器(parser)与 Tree-sitter 库本身在二进制层面兼容。
当 ABI 不兼容时,即使代码可以编译,程序在运行时也可能崩溃或无法加载解析器。 (GitHub)
什么是 ABI 版本
...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-12-静态节点类型(Static Node Types)
静态节点类型(Static Node Types)
在具有静态类型的编程语言中,让语法树提供关于各个语法节点的具体类型信息通常是非常有用的。
Tree-sitter 通过一个自动生成的文件 node-types.json 提供这些信息。
该文件包含语法中所有可能的语法节点类型的结构化数据。
你可以利用这些数据在静态类型语言中生成类型声明。 (tree-sitter.github.io...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-11-查询 API(Query API)
查询 API(Query API)
可以通过指定一个包含一个或多个模式的字符串来创建查询:
TSQuery *ts_query_new(
const TSLanguage *language,
const char *source,
uint32_t source_len,
uint32_t *error_offset,
TSQueryError *error_t...
2026-01-05 13:01:55 |
AST