Tree-sitter是一个解析器生成器工具和一个增量解析库。它可以为源文件构建具体的语法树,并在编辑源文件时有效地更新语法树

repo:tree-sitter/tree-sitter: An incremental parsing system for programming tools

Tree-sitter是一个解析器生成器工具和一个增量解析库。它可以为源文件构建具体的语法树,并在编辑源文件时有效地更新语法树

Tree-sitter介绍

Tree-sitter ‌是一款面向编程工具的‌解析器生成工具和增量解析库‌,核心作用是为源代码构建语法树并高效更新,广泛用于代码编辑器和代码分析工具中。

核心定位与设计目标

Tree-sitter最初由GitHub开发,核心设计目标是满足现代编程工具的性能需求,遵循四大核心原则:

  1. ‌通用性‌:支持为任意编程语言生成解析器,已覆盖绝大多数主流开发语言。
  2. ‌高性能‌:速度足够快,可支持文本编辑器中每一次按键输入后的实时解析,修改代码后仅需重新解析变动部分(增量解析),无需全量重新解析。
  3. ‌健壮性‌:即使代码存在语法错误,依然能生成可用的语法树,提供有价值的结果。
  4. ‌无依赖‌:运行时库由纯C编写,无外部依赖,可以嵌入到任何应用程序中。

核心工作原理

  1. 定义语法:开发者使用基于JavaScript的领域特定语言(DSL)编写语法规则文件grammar.js,定义目标语言的语法结构。
  2. 生成解析器:Tree-sitter工具读取语法定义,自动生成C语言实现的解析器源码,编译后即可使用。
  3. 增量解析:解析源代码生成结构化的语法树后,当代码编辑修改时,仅重新解析发生变化的部分,高效更新语法树。

主要应用场景

Tree-sitter的特性使其成为现代开发工具的基础组件,常见应用包括:

  1. 代码编辑器增强 ‌:在Neovim(通过nvim-treesitter插件)等现代编辑器中实现精准的实时语法高亮、代码折叠、代码导航。
  2. ‌代码格式化工具‌:通过内置的查询匹配系统,可快速为任意语言定义格式化规则,生成轻量高效的代码格式化工具。
  3. ‌静态代码分析‌:基于结构化的语法树,可以快速提取函数、类、变量等代码元素,构建自定义的代码质量检查、代码检索工具。
  4. ‌编程语言开发‌:开发新编程语言时,可借助Tree-sitter快速生成解析器,同时免费获得高亮、格式化等工具能力。

实践

下载

到这里下载:github.com

复制代码
wget https://github.com/tree-sitter/tree-sitter/releases/download/v0.26.9/tree-sitter-windows-x64.gz

wget https://kkgithub.com/tree-sitter/tree-sitter/releases/download/v0.26.9/tree-sitter-windows-x64.gz

最后下载的是这个

复制代码
https://kkgithub.com/tree-sitter/tree-sitter/releases/download/v0.26.9/tree-sitter-windows-x64.gz

解包之后是一个文件

tree-sitter.exe

使用说明

E:\tools>tree-sitter.exe

tree-sitter 0.26.9

Max Brunsfeld <maxbrunsfeld@gmail.com>

Amaan Qureshi <amaanq12@gmail.com>

Generates and tests parsers

Usage: tree-sitter.exe <COMMAND>

Commands:

init-config Generate a default config file

init Initialize a grammar repository

generate Generate a parser

build Compile a parser

parse Parse files

test Run a parser's tests

version Display or increment the version of a grammar

fuzz Fuzz a parser

query Search files using a syntax tree query

highlight Highlight a file

tags Generate a list of tags

playground Start local playground for a parser in the browser

dump-languages Print info about all known language parsers

complete Generate shell completions

具体使用是让Opencode来做的。

相关推荐
学逆向的5 小时前
C 堆区内存管理
c语言·开发语言·网络安全
huoyueyi5 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
OpenAnolis小助手7 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
阿尼卡~7 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
hhhjhl9 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指11109 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu1149 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm
slongzhang_9 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
云和数据.ChenGuang10 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu11 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python