努力寻找一个Python脚本库来标记(找到特定的标记,如函数定义名称、变量名称、关键字等)。
我已经设法使用类似的方法找到关键字、空格等this https://docs.python.org/3/library/re.html#writing-a-tokenizer但我发现这对我来说是一个很大的挑战函数/类定义名称等。我希望使用预先存在的脚本;我探索过Pygments http://pygments.org/docs/lexers/#lexers-for-c-c-languages没有成功。它是对于我想要的东西来说似乎很神奇,但不知道如何在 Python 中使用它并获得职位对于每个找到的令牌。
例如,我正在考虑做类似的事情:
int fac(int n)
{
return (n>1) ? n∗fac(n−1) : 1;
}
从上面的源代码我想得到:
function_name: 位置 (x, y) 处的 'fac'
变量名:位置 (x, y+8) 处的“n”
编辑:
任何建议将不胜感激,因为我对 C++ 中的标记化和解析一无所知?
Eli Bendersky 是个聪明人,有时还活跃在 SO 上。他有一篇关于这个问题的博客文章,我将直接推荐您参考:使用 Clang 在 Python 中解析 C++ http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/.
因为东西会消失,所以要点如下:
Eli Bendersky 编写了 C 语言(notC++)Python 中的解析器,称为pycparser
。人们一直问他是否会增加对 C++ 的支持。他不是。相反,他建议人们使用 libclang 的 Python 绑定来访问“Clang 团队誓言保持相对稳定的 C API,允许用户在抽象语法树 (AST) 级别检查已解析的代码”。
您可以在 PyPI 上单独找到绑定here. https://pypi.python.org/pypi/clang/3.5请注意,您必须安装 clang,因此您可能只想将 PYTHON_PATH 直接指向安装位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)