ere*_*eOn 9 python parsing abstract-syntax-tree python-2.7 python-3.x
我最近编写了一个Sublime Text 3插件,它解析Python代码并从中发出一些统计信息.
没有什么太复杂,除了我注意到Sublime Text 3使用Python 3.x,显然该ast
模块也希望看到Python 3.x代码.我查看了该ast
模块的文档,但找不到允许我指定版本的任何内容.
显然,这在解析完全有效的Python 2.7代码时会导致问题.
有没有办法指定或以某种方式检测/猜测Python版本?或者让解析器更灵活?
不,该ast
模块只能处理随附的Python版本的Python代码.那是因为在幕后,完全相同的解析器用于将Python代码编译为字节代码; 所有ast
模块都给你中间AST树.此解析器没有"向后兼容"模式.
如果要从Python版本中解析不同的源代码,则需要实现自己的解析器.这肯定是Jedi(Python自动完成库)所采用的路径.
看看CodeIntel2的SublimeCodeIntel打包,我看到该软件包将其Python和Python 3解析器基于SilverCity,后者具有Python绑定.也许这个项目对你自己来说是一个合适的起点.