(オリジナル)clangのpythonインタフェース(一)
2919 ワード
(オリジナル)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