跳转到主要内容

libclang的扩展Python绑定集

项目描述

https://travis-ci.org/pybee/sealang.svg?branch=master

Sealang是libclang的改进版Python绑定集。

libclang的上游维护者对解决诸如Python 3兼容性等问题以及API中的重大遗漏(如提取字面量和运算符)的补丁反应并不积极。

此软件包是libclang官方Python绑定的分支,修补以纠正这些问题。

安装

要编译Sealang,您需要

  1. 安装LLVM(带有clang)

  2. 设置一些环境变量

  3. 安装Sealang

所需的命令在不同平台上会有所不同。

OS X

尽管OS X提供了Clang,但它没有提供所有开发头文件,因此您需要安装。使用Homebrew 是最简单的方法。按照Homebrew主页上的安装说明进行操作;一旦安装了Homebrew,您就可以运行

$ brew install llvm --with-clang --with-asan

以获取带有clang的工作安装的llvm。

然后,您需要设置以下环境变量

$ export LLVM_HOME=/usr/local/opt/llvm
$ export DYLD_LIBRARY_PATH=$LLVM_HOME/lib

最后,您可以安装Sealang

$ pip install sealang

Ubuntu 14.04 (Trusty)

要在Ubuntu 14.04(Trusty)下编译,您需要获取LLVM的更新版本。

$ sudo apt-get install libclang-3.6 clang-3.6 -y

然后,您需要设置以下环境变量

$ export LLVM_HOME=/usr/lib/llvm-3.6
$ export LD_LIBRARY_PATH=$LLVM_HOME/lib

最后,您可以安装Sealang

$ pip install sealang

其他平台

在其他平台上的安装说明应该类似。如果您为某个平台开发了构建说明,请提交一个pull请求

使用方法

Sealang提供了libclang提供功能的一个超集。这些功能包括:

  • Cursor对象有4个额外的属性

    • literal - 文字表达式的值。在IntegerLiteral、FloatingLiteral、StringLiteral、CharacterLiteral和CXXBooleanLiteral节点上可用。

    • operator - 运算符的可打印版本。仅在BinaryOperator、UnaryOperator和CompoundAssignOperator游标节点上可用。

    • binary_operator - 描述BinaryOperator或CompoundAssignOperator节点的一个枚举值。

    • unary_operator - 描述UnaryOperator节点的一个枚举值。

  • BinaryOperator - 二元运算符类型的枚举

    • BinaryOperator.INVALID

    • BinaryOperator.PTRMEMD

    • BinaryOperator.PTRMEMI

    • BinaryOperator.MUL

    • BinaryOperator.DIV

    • BinaryOperator.REM

    • BinaryOperator.ADD

    • BinaryOperator.SUB

    • BinaryOperator.SHL

    • BinaryOperator.SHR

    • BinaryOperator.LT

    • BinaryOperator.GT

    • BinaryOperator.LE

    • BinaryOperator.GE

    • BinaryOperator.EQ

    • BinaryOperator.NE

    • BinaryOperator.AND

    • BinaryOperator.XOR

    • BinaryOperator.OR

    • BinaryOperator.LAND

    • BinaryOperator.LOR

    • BinaryOperator.ASSIGN

    • BinaryOperator.MULASSIGN

    • BinaryOperator.DIVASSIGN

    • BinaryOperator.REMASSIGN

    • BinaryOperator.ADDASSIGN

    • BinaryOperator.SUBASSIGN

    • BinaryOperator.SHLASSIGN

    • BinaryOperator.SHRASSIGN

    • BinaryOperator.ANDASSIGN

    • BinaryOperator.XORASSIGN

    • BinaryOperator.ORASSIGN

    • BinaryOperator.COMMA

    • BinaryOperator.UNKNOWN

  • UnaryOperator - 描述一元运算符类型的枚举

    • UnaryOperator.INVALID

    • UnaryOperator.POSTINC

    • UnaryOperator.POSTDEC

    • UnaryOperator.PREINC

    • UnaryOperator.PREDEC

    • UnaryOperator.ADDROF

    • UnaryOperator.DEREF

    • UnaryOperator.PLUS

    • UnaryOperator.MINUS

    • UnaryOperator.NOT

    • UnaryOperator.LNOT

    • UnaryOperator.REAL

    • UnaryOperator.IMAG

    • UnaryOperator.EXTENSION

    • UnaryOperator.UNKNOWN

工作原理

Sealang有点儿“邪恶”。libclang是一组C语言绑定到C++ API的C语言库;然后使用Python的ctypes来包装C API。然而,尽管C++ API非常丰富,但libclang相对较少。

Sealang通过提供围绕提供有用功能的C++调用周围的C包装器来弥合这个差距。这个C函数库被包装成一个Python C模块进行分发 - 这个C模块不包含暴露的Python对象或方法,但由于它是一个模块,因此底层的编译好的sealang.so文件很容易找到。ctypes被用来暴露sealang包装器函数;

内部,Sealang重现了libclang API的一些小部分;这些是(如字符串创建和操作方法)未作为符号暴露给第三方使用的功能。

所有这些功能都可能是传递给libclang的上游候选。

与Clang的关系

该项目旨在反映目前Python绑定到libclang中可用的内容。此项目的版本号来自官方clang存储库的版本和SVN修订版本。

libclang所做的任何更改都将在此处反映;在此处所做的任何更改,如果可能,将推送到libclang

社区

Sealang 是 BeeWare 套件的一部分。[BeeWare 套件] 您可以通过以下方式与社区交流:

贡献

如果您在使用 Sealang 时遇到问题,请在 GitHub 上记录它们。如果您想贡献代码,请Fork 代码提交拉取请求

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

sealang-3.9.dev259750.tar.gz (49.2 kB 查看哈希值)

上传时间:

构建分发

sealang-3.9.dev259750-cp34-cp34m-macosx_10_9_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.4m macOS 10.9+ x86-64

sealang-3.9.dev259750-cp27-none-macosx_10_9_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 2.7 macOS 10.9+ x86-64

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面