3

私は最近、Python ソース コードの静的解析に取り組んでいます。私たちのグループには、すでに CIL(C Intermediate Language) 用の Ocaml で書かれた静的アナライザーがあります。このアナライザーを再利用したいので、理想的なアプローチは Python を CIL に変換することです。

現在、Python 組み込みの ast モジュールを使用して、Python を Python AST に解析しています。次に、ast.dump が出力した Python AST を C AST に変換します。C AST から CIL API および静的アナライザーはすべて Ocaml で記述されていることを考慮してください。Ocamllex&Ocamlyacc を選択して、Python AST を C AST に解析します。ただし、いくつかの大きな問題があります。

ast.dump が出力した AST 表現を特定するのは困難です。そのため、パーサーの実装が容易ではありません。一方、Ocaml を使用して Python の ast 内部構造にアクセスすることはできません。とはいえ、Ocamlとはデータ構造が違う。

Python コードから C AST への変換で最初に間違ったアプローチを選択したのではないでしょうか? 私の要件を満たす可能性のある他の既存のツールまたはアプローチはありますか?

私が見逃しているものがあれば、私にとって多くの助けになることを指摘してください. ありがとう。

4

1 に答える 1

3

これがうまくいくとは思えません。CIL は本質的に単なる C 言語です。あなたのトリックが機能するためには、Pythonを完全に C に翻訳する必要があります...しかし、これらの言語には非常に異なる概念があります。Python オブジェクトをどのようにモデル化しますか? 継続?動的負荷?ランタイムタイピング?無限精度演算? あなたの問題はASTではないと思います。むしろ概念的なものです。

CIL に変換できれば、新たな問題が発生することになります。アナライザーは、見つける必要のある構造が簡単に検出されると、構築が容易になります。継続を C に翻訳すると、継続との相互作用を理解するのが難しくなります。

Python の概念を簡単に検出できる Python 静的アナライザーを構築することにエネルギーを費やすと思います。

于 2011-04-24T03:44:55.040 に答える