tree-sitter
https://tree-sitter.github.io/tree-sitter/
パーサジェネレータ
CSTを生成
JavaScriptの内部DSLとして文法定義をする
生成されるパーサはC言語実装
いろんな言語のバインディングがある
パーサはCだが、それを各言語から扱う感じになる
付随して便利機能がいくつか
S式ライクなクエリ言語
シンタックスハイライト
nvimの設定とかしてると見る
エディタにどこまでの情報をどう伝えてるのか知らないのでどういう意味かはあんまりわかってない
https://tree-sitter.github.io/tree-sitter/syntax-highlighting
https://www.thestrangeloop.com/2018/tree-sitter---a-new-parsing-system-for-programming-tools.html
テキストエディタの体験をこれで変えます的なことを言ってる
GitHubとAtom Editorでやってますよと
エラー回復が賢い?のと、コードの一部が変更されたときにすぐ木も作れるところが良いってこと?
シンタックスハイライトはtreeベース以外だと正規表現しかない
ドキュメントの気になったところを読んでいく
https://tree-sitter.github.io/tree-sitter/creating-parsers#writing-the-grammar
Nodeと文法定義のシンボル(終端・非終端記号)が対応していると解析しやすいぜって言ってる
当たり前に思えるかもしれないけど、Yaccはじめ他の文脈自由文法の定義の仕方とは違うんだよ とのこと
GLR Parsing っていうアルゴリズムを使っているからどんな文脈自由文法も定義できるけど、 LR(1)文法だと最も効率的に動作する
wip
tree-sitter error recovery - Google 検索
Error-recovery strategy · Issue #224 · tree-sitter/tree-sitter
Tree-sitter を用いた Scala 3 の高速パース · eed3si9n
Tree-sitter|Introduction
Useful external resources · tree-sitter/tree-sitter Wiki