Tree-sitter 简介(Introduction)

Tree-sitter 是一个 解析器生成工具(parser generator)增量解析库(incremental parsing library)

它能够:

  • 为源代码文件构建 具体语法树(Concrete Syntax Tree,CST)
  • 并在源代码被编辑时,高效地更新语法树

Tree-sitter 的设计目标包括:

  • ✅ 足够通用 —— 可以解析任意编程语言
  • ✅ 足够快速 —— 能够在文本编辑器的每一次按键输入时执行解析
  • ✅ 足够健壮 —— 即使存在语法错误,也能产生有用的解析结果
  • ✅ 无运行时依赖 —— 运行时库使用 纯 C11 编写,可嵌入任意应用程序

语言绑定(Language Bindings)

Tree-sitter 提供多种语言绑定,使其可以在不同编程语言中使用。

官方支持(Official)

  • C#
  • Go
  • Haskell
  • Java(JDK 22+)
  • JavaScript(Node.js)
  • JavaScript(Wasm)
  • Kotlin
  • Python
  • Rust
  • Swift
  • Zig

第三方绑定(Third-party)

  • C# (.NET)
  • C++
  • Crystal
  • D
  • Delphi
  • ELisp
  • Go
  • Guile
  • Janet
  • Java(JDK 8+)
  • Java(JDK 11+)
  • Julia
  • Lua
  • OCaml
  • Odin
  • Perl
  • Pharo
  • PHP
  • R
  • Ruby

注意:部分绑定可能不完整或已过时。


解析器(Parsers)

在官方组织中可以找到以下语言的解析器:

  • Agda
  • Bash
  • C
  • C++
  • C#
  • CSS
  • ERB / EJS
  • Go
  • Haskell
  • HTML
  • Java
  • JavaScript
  • JSDoc
  • JSON
  • Julia
  • OCaml
  • PHP
  • Python
  • Regex
  • Ruby
  • Rust
  • Scala
  • TypeScript
  • Verilog

完整解析器列表可在 Wiki 中查看。


Tree-sitter 相关演讲(Talks)

  • Strange Loop 2018
  • FOSDEM 2018
  • GitHub Universe 2017

底层研究基础(Underlying Research)

Tree-sitter 的设计深受以下研究论文影响:

  • Practical Algorithms for Incremental Software Development Environments
  • Context Aware Scanning for Parsing Extensible Languages
  • Efficient and Flexible Incremental Parsing
  • Incremental Analysis of Real Programming Languages
  • Error Detection and Recovery in LR Parsers
  • Error Recovery for LR Parsers

参考资料

https://tree-sitter.github.io/tree-sitter/index.html