2016-05-04 11 views
3

pythonソースコードの解析木を生成したいと考えています。このコードはコンパイル可能である必要はありません。Pythonコードの解析木を取得する

if x == 5: 

は、ある種のツリー表現にする必要があります。 Pythonコンパイラパッケージを使用してツリーを作成することはできますが、これはコンパイル可能なコードに対してのみ機能します。

if x == 5: print True 
+5

その部分コードの構文ツリーはどのように見えますか?あなたはそれに穴がある木をどのように表現しますか? – Kevin

+1

他に何も動かなければ、['pyparsing'](https://pypi.python.org/pypi/pyparsing/2.1.1)を使って独自のパーサを書くことができます。 –

+0

機械翻訳にツリーベースの構造を使用するこのNLP研究論文を複製しようとしています。 http://www.phontron.com/paper/oda15ase.pdf – user1879926

答えて

0

リンク先の紙には、Python標準ライブラリのastモジュールが使用されています。また、ifステートメントの本体にダミーボディーを使用しているとも言われています。 passdummy()のような関数呼び出しのように、ダミーボディーとして認識しやすいステートメントを使用してください。

0

DMS Software Reengineering ToolkitPython front endを使用できます。

DMSは、言語定義(例えばPython文法など)によってパラメータ化され、自動的にASTを構築するためのインフラストラクチャと、それらのASTを検査/ナビゲート/変更する機能と、木。

  • (パイソン)完全なプログラムとして、ファイルまたは文字列(「ストリーム」)の解析:

    そのASTの解析機械は特殊な例さまざまな処理することができます。 ストリーム内の構文エラーが報告され、単一トークンの挿入または削除によって修復可能な場合は修復されます。

  • 任意の言語の非終端記号によるストリームの解析。
  • 欠落したサブツリーの名前付きプレースホルダを持つ名前付き文法非終端記号に対応するpatternを解析します。パターン一致結果を使用して、具体的な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の興​​味のある論文の目標が、(その主張にもかかわらず)有用な擬似コードを提供するのに本当に成功するかどうかわかりません。アルゴリズムを理解するには、対応するデータ構造と、それらのデータ構造に適用される抽象的な具体的なアルゴリズムの理解が必要です。この論文では、のみをに焦点を当てています。より抽象的なアイデアを理解するヒントはありません。

関連する問題