質問

私はいくつかのコード生成ツールに取り組んでいますが、スコープ分析を行うと非常に複雑になります。などのことを知りたくなることがよくあります。

  1. 関数またはブロックの自由変数とは何ですか?
  2. このシンボルはどこで宣言されていますか?
  3. この宣言は何を隠しているのでしょうか?
  4. このシンボルの使用は初期化前に発生する可能性がありますか?
  5. この変数はエスケープする可能性がありますか?

そして、私のスコープ設定の怠惰を再考する時期が来たと思います。

私はこれらすべての分析を行うことができますが、使いやすく、理想的にはこの作業を十分に遅延させて実行できるように API を構造化する方法を見つけようとしています。

このようなツールはどのようなツールに慣れ親しんでいるのでしょうか?また、API でどのようなことが正しく行われ、何が間違っていたのでしょうか?

役に立ちましたか?

解決

私はこの質問には少し驚きました。なぜなら、私は大量のコード生成を行ってきましたが、スコープの問題はほとんど出てこないからです(たまにそうしたいという欲求を除いて)。 一意の名前を生成する).

質問例に答えるには 範囲をはるかに超えた本格的なプログラム分析が必要です. 。脱出分析それ自体は自明ではありません。初期化前の使用は、ターゲット言語に応じて簡単な場合もあれば、簡単ではない場合もあります。

私の経験では、プログラム分析用の API は次のとおりです。 設計が難しく、言語に依存することが多い. 。低レベル言語をターゲットにしている場合は、次のことから役立つことを学べるかもしれません。 マシンSUIF API。

あなたの代わりに、私はそうしたいと思うでしょう プログラム分析のための他人のフレームワークを盗む. ジョージ・ネキュラ そして彼の生徒たちが建てた CIL, 、これが C コードを分析するための現在の標準のようです。 ローリー・ヘンドレンのグループは、Java を分析するための優れたツールをいくつか構築しました。

自分で巻かなければならないとしたら 私は API についてはあまり心配せず、抽象構文ツリーの本当に適切な表現について心配します。

データフロー分析の非常に限られた領域 (初期化されていない変数の質問を含む) において、ジョアン ディアスと私はいくつかの改良を加えました。 ソリン・ラーナー、デヴィッド・グローブ、クレイグ・チェンバースによる素晴らしい作品. 。私たちのだけ 暫定結果 が公開されています。

最後に、もしよかったら 複数の言語でコードを生成する これは 完全な虫の缶詰. 。私も何度かひどいことをしてしまいました。気に入ったものが出来たら公開してみましょう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top