golang.tokyoが公開しているCodeLabをやってみました。
普段からあまりコードの静的解析をやっているわけではありませんが、Goで静的解析をする場合にはどうするのか、というのを学ぶにはとてもいい教材でした。
特に「構文解析」の章が勉強になって、以下の部分
// ファイルごとのトークンの位置を記録するFileSetを作成する fset := token.NewFileSet() // ファイル単位で構文解析を行う f, err := parser.ParseFile(fset, "_gopher.go", nil, 0) if err != nil { log.Fatal("Error:", err) }
これだけで構文解析が完了して、あとはトークンの位置情報を記録した fset
変数を ast.Inspect メソッドに渡してガリガリ構文チェックする。
Goだと結構簡単にファイルの構文解析ができるんですね。
普段web開発にしか触れてないですけど、たまにこういったことに触れておきたいなと思いました。