【发布时间】:2016-04-23 08:40:53
【问题描述】:
经过一些研究和几个问题,我最终探索了libclang 库,以便在 Python 中解析 C++ 源文件。
给定一个 C++ 源代码
int fac(int n) {
return (n>1) ? n∗fac(n−1) : 1;
}
for (int i = 0; i < linecount; i++) {
sum += array[i];
}
double mean = sum/linecount;
我正在尝试识别标记 fac 作为函数名,n 作为变量名,i 作为变量名,mean 作为变量名,以及每个的位置。我有兴趣最终标记化它们。
我已经阅读了一些非常有用的文章(eli's、Gaetan's)以及一些堆栈溢出问题35113197、13236500。
但是,鉴于我是 Python 新手并且努力理解 libclang 的基础知识,我非常感谢一些实现上述内容的示例代码块,以便我从中学习和理解。
【问题讨论】:
-
如果你有 Clang 或其他工具,你不会自己标记语言元素;解析器内置了这种能力。问题在于你如何得到结果。您可以在stackoverflow.com/a/36681568/120163 看到 C 词法分析器的输出问题是,API Clang 提供了什么来提供对此类令牌的访问?
-
如果 libclang 提供一个标记化工具,那就更好了。但是,我正在努力首先获得与您提到的输出类似的输出,其次,使用该输出来处理我的需求,如我描述中示例中所述。有什么指导方针吗?
-
我的观点更多的是关于谁在进行标记化。如果 you 打算这样做,则尚不清楚 clang 将如何提供帮助或您为什么想要它。 (个人怀疑如果您拥有的只是令牌,无论您如何获得它们,您是否会用 C++ 代码做很多有趣的事情)。我对 Clang API 了解不多。也许这个答案会对你有所帮助:stackoverflow.com/a/25371656/120163
-
您至少应该尝试写一些东西,在您提供的链接中有足够的提示,然后如果您遇到问题,请发布您的脚本。
标签: python c++ parsing libclang