pythonソースコードの解析木を生成したいと考えています。このコードはコンパイル可能である必要はありません。Pythonコードの解析木を取得する
if x == 5:
は、ある種のツリー表現にする必要があります。 Pythonコンパイラパッケージを使用してツリーを作成することはできますが、これはコンパイル可能なコードに対してのみ機能します。
if x == 5: print True
pythonソースコードの解析木を生成したいと考えています。このコードはコンパイル可能である必要はありません。Pythonコードの解析木を取得する
if x == 5:
は、ある種のツリー表現にする必要があります。 Pythonコンパイラパッケージを使用してツリーを作成することはできますが、これはコンパイル可能なコードに対してのみ機能します。
if x == 5: print True
リンク先の紙には、Python標準ライブラリのast
モジュールが使用されています。また、if
ステートメントの本体にダミーボディーを使用しているとも言われています。 pass
やdummy()
のような関数呼び出しのように、ダミーボディーとして認識しやすいステートメントを使用してください。
DMS Software Reengineering ToolkitのPython front endを使用できます。
DMSは、言語定義(例えばPython文法など)によってパラメータ化され、自動的にASTを構築するためのインフラストラクチャと、それらのASTを検査/ナビゲート/変更する機能と、木。
そのASTの解析機械は特殊な例さまざまな処理することができます。 ストリーム内の構文エラーが報告され、単一トークンの挿入または削除によって修復可能な場合は修復されます。
、OPは彼の例を処理するために、次のパターンを書き込むことができます:
pattern if_x_is_5(s: statement):statement
= " if x==5: \s ";
DMSは、そのパターンを読み取って、対応するパターンツリーを構築します。
OPが実際に参照する論文は、演算子とキーワードがASTの明示的なアーティファクトとして残ることを望んでいます。これを解釈する1つの方法は、実際には具体的な構文ツリーが必要なことです。 DMSは実際に"AST"s which are concrete syntax trees with the constant terminals removedを生成します。これは完全なASTとは非常に近いという効果がありますが、固定端末が挿入されるべき葉ノード(または非圧縮CSTを単に生成するようにDMSを構成することができる)を容易に決定することができます。
個人的には、OPの興味のある論文の目標が、(その主張にもかかわらず)有用な擬似コードを提供するのに本当に成功するかどうかわかりません。アルゴリズムを理解するには、対応するデータ構造と、それらのデータ構造に適用される抽象的な具体的なアルゴリズムの理解が必要です。この論文では、のみをに焦点を当てています。より抽象的なアイデアを理解するヒントはありません。
その部分コードの構文ツリーはどのように見えますか?あなたはそれに穴がある木をどのように表現しますか? – Kevin
他に何も動かなければ、['pyparsing'](https://pypi.python.org/pypi/pyparsing/2.1.1)を使って独自のパーサを書くことができます。 –
機械翻訳にツリーベースの構造を使用するこのNLP研究論文を複製しようとしています。 http://www.phontron.com/paper/oda15ase.pdf – user1879926