个人简介

Echo Blog


江湖无名 安心练剑
  • 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