スコープ アナライザーに適した API
-
23-08-2019 - |
質問
私はいくつかのコード生成ツールに取り組んでいますが、スコープ分析を行うと非常に複雑になります。などのことを知りたくなることがよくあります。
- 関数またはブロックの自由変数とは何ですか?
- このシンボルはどこで宣言されていますか?
- この宣言は何を隠しているのでしょうか?
- このシンボルの使用は初期化前に発生する可能性がありますか?
- この変数はエスケープする可能性がありますか?
そして、私のスコープ設定の怠惰を再考する時期が来たと思います。
私はこれらすべての分析を行うことができますが、使いやすく、理想的にはこの作業を十分に遅延させて実行できるように API を構造化する方法を見つけようとしています。
このようなツールはどのようなツールに慣れ親しんでいるのでしょうか?また、API でどのようなことが正しく行われ、何が間違っていたのでしょうか?
解決
私はこの質問には少し驚きました。なぜなら、私は大量のコード生成を行ってきましたが、スコープの問題はほとんど出てこないからです(たまにそうしたいという欲求を除いて)。 一意の名前を生成する).
質問例に答えるには 範囲をはるかに超えた本格的なプログラム分析が必要です. 。脱出分析それ自体は自明ではありません。初期化前の使用は、ターゲット言語に応じて簡単な場合もあれば、簡単ではない場合もあります。
私の経験では、プログラム分析用の API は次のとおりです。 設計が難しく、言語に依存することが多い. 。低レベル言語をターゲットにしている場合は、次のことから役立つことを学べるかもしれません。 マシンSUIF API。
あなたの代わりに、私はそうしたいと思うでしょう プログラム分析のための他人のフレームワークを盗む. ジョージ・ネキュラ そして彼の生徒たちが建てた CIL, 、これが C コードを分析するための現在の標準のようです。 ローリー・ヘンドレンのグループは、Java を分析するための優れたツールをいくつか構築しました。
自分で巻かなければならないとしたら 私は API についてはあまり心配せず、抽象構文ツリーの本当に適切な表現について心配します。
データフロー分析の非常に限られた領域 (初期化されていない変数の質問を含む) において、ジョアン ディアスと私はいくつかの改良を加えました。 ソリン・ラーナー、デヴィッド・グローブ、クレイグ・チェンバースによる素晴らしい作品. 。私たちのだけ 暫定結果 が公開されています。
最後に、もしよかったら 複数の言語でコードを生成する これは 完全な虫の缶詰. 。私も何度かひどいことをしてしまいました。気に入ったものが出来たら公開してみましょう!