😺

tree-sitterをRustで使ってjuliaをparseしようとしたけど失敗したときのメモ

2024/09/10に公開

最初に

julia言語のプログラムをparseして失敗した時のメモ、そのうちリベンジしたい
parseした後の処理まではしていません。

流れ

プロジェクト作成

cargo new treejulia
cd treejulia

juliaのtree-sitterリポジトリを利用する

git submodule add https://github.com/tree-sitter/tree-sitter-julia

https://github.com/tree-sitter/tree-sitter-julia

parserの生成

cd tree-sitter-julia
npm install
tree-sitter generate

ビルドスクリプトの作成

fn main() {
    let language = "julia";
    let package = format!("tree-sitter-{}", language);
    let source_directory = format!("{}/src", package);
    let source_file = format!("{}/parser.c", source_directory);

    println!("cargo:rerun-if-changed={}", source_file); // <1>

    cc::Build::new()
        .file(source_file)
        .include(source_directory)
        .compile(&package); // <2>
}

cargo runでエラー。
おそらくscanner.cのビルドをしないといけないっぽいが一旦挫折する。

cargo.tomlの依存関係定義

[dependencies]
tree-sitter = "0.22"
tree-sitter-rust = "0.21"

参考

https://rfdonnelly.github.io/posts/using-tree-sitter-parsers-in-rust/

Discussion