0

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

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

そして、私のスコーピングクラッジを再考する時が来たと思います.

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

人々がよく知っているこのようなツールは何ですか?また、API で何が正しく行われ、何が間違っていたのでしょうか?

4

1 に答える 1

2

私は大量のコード生成を行ってきましたが、スコープの問題がめったに出てこないので、この質問には少し驚いています (一意の名前を生成したい場合を除いて)。

あなたの例の質問に答えるには、スコープをはるかに超えた深刻なプログラム分析が必要です。エスケープ分析自体は自明ではありません。Use-before-initialization は、ターゲット言語に応じて、自明または自明ではない場合があります。

私の経験では、プログラム分析用の API は設計が難しく、多くの場合言語固有です。低レベル言語をターゲットにしている場合は、Machine SUIF API から何か役立つことを学ぶことができます。

あなたの代わりに、誰かのプログラム分析用のフレームワークを盗みたいと思うでしょう。 George Neculaと彼の学生たちは、C コードを分析するための現在の標準と思われる CILを作成しました。Laurie Hendrenのグループは、Java を分析するための優れたツールをいくつか作成しました。

自分で作成する必要がある場合は、API について心配するよりも、抽象構文ツリーの本当に適切な表現について心配する方がよいでしょう。

João Dias と私は、データフロー分析 (初期化されていない変数の質問を含む) の非常に限られた領域で、Sorin Lerner、David Grove、および Craig Chambers による優れた作業を採用しました。暫定的な結果のみが公開されています。

最後に、複数の言語でコードを生成したい場合、これはワームの完全な缶です。私は何度かそれをひどくしました。気に入ったものを作成したら、公開してください。

于 2008-12-20T04:11:50.157 に答える