(オリジナル)clangのpythonインタフェース(一)


  • オリジナルclangのpythonインタフェース1
  • バックグラウンド
  • libclangのpythonインタフェース構成
  • 小結
  • 参考文献

  • (オリジナル)clangのpythonインタフェース(一)
    背景
    周知のようにllvmは非常に強力なコンパイラの前段であり、それによって派生したclangコンパイラはすでに成熟しており、将来gccに取って代わる傾向が大きい.同時に、clangは強力な開発インタフェースlibclangを提供し、文法と文法分析の仕事を非常に効果的に行うことができます.
    libclangのpythonインタフェース構成
    次はpython bindingsのgithubミラーpython bindings for libclangです.次にlibclang+python bindingsの構成方法を紹介します.(ubuntu 16.04)(1)まずclangコンパイラをインストールするにはaptを使用してインストールできます.
    sudo apt-get install clang

    新しいバージョン、例えば4.0.1(libfuzzerサポートを含む)をインストールする場合は、公式サイトでダウンロードした後、ローカルコンパイルと構成を行うことをお勧めします.具体的な方法は後述しません.(2)python bindingsを構成するには同様に2つの方法がある1)pipを用いてインストールする
    sudo pip install clang==    

    2)または行くhttps://pypi.python.org/pypiこのサイトでは、対応するパッケージclang(バージョン番号)を探しています.解凍後採用
    python setup.py install

    インストールを行います.ここで注意すべきことは、1)最初の方法でインストールすることをお勧めします.2)いずれの方法を採用しても、clangのバージョン番号とpython bindingsのバージョン番号が一致しているかどうかに注意しなければならない.そうしないと問題が発生しやすい.
    (3)最後に配置運転を行い、参考内容[1]では、次のような一節がある:Setting up Settings up usage of the Python bindings is very easy:Your script needs to be able to find the clang.cindex module. So either copy it appropriately or set up PYTHONPATH to point to it [4]. clang.cindex needs to be able to find the libclang.so shared library. Depending on how you build/install Clang, you will need to copy it appropriately or set up LD_LIBRARY_PATH to point to its location. On Windows, this is libclang.dll and it should be on PATH. That arranged, you’re ready to import clang.cindex and start rolling.
    この方法は筆者が試みたが、効果が悪いため、ここではモジュール内の方法とクラスを呼び出すときにlibclangを最初に宣言する別の方法を推奨する.soの位置:
    import sys
    import clang.cindex
    
    from clang.cindex import Config
    from clang.cindex import Cursor
    from clang.cindex import CursorKind
    
    
    Config.set_library_file("/usr/lib/llvm-4.0/lib/libclang-4.0.so.1")
    #       libclang   。
    index = clang.cindex.Index.create()
    tu = index.parse(sys.argv[1])
    print tu.get_extent('li.cpp', (4, 10)).begin_int_data
    
    

    これによりpythonでlibclangの関連クラスとメソッドを呼び出すことができます.
    小結
    clangはctypesベースのpythonのバインドを与えるが、ドキュメントは提供されていないので、開発者自身でcindexを読む必要がある.pyのコードを開発することについては、後日詳しくお話しします.
    参考文献:
    http://blog.csdn.net/snsn1984/article/details/25963601