2014-10-30 88 views
6

我最近編寫了一個Sublime Text 3插件,用於解析Python代碼並從中發佈一些統計信息。如何使用Python 3.x ast模塊解析Python 2.x?

沒什麼太複雜的,除非我注意到Sublime Text 3使用Python 3.x,並且顯然ast module預計也會看到Python 3.x代碼。我查看了ast module的文檔,但找不到任何可以指定版本的文檔。

顯然這在解析完全有效的Python 2.7代碼時會引發問題。

有沒有指定或以某種方式檢測/猜Python版本的方法嗎?或者讓解析器更靈活?

回答

6

沒有,ast模塊只能處理Python代碼爲Python的版本,它附帶。這是因爲在底層,完全相同的解析器用於將您的Python代碼編譯爲字節碼;所有ast模塊所做的就是給你中介AST樹。此解析器沒有「向後兼容」模式。

,如果你想從Python版本解析不同的源代碼,您需要實現自己的解析器。這肯定會出現Jedi(Python自動完成庫)所採用的路徑。

看看SublimeCodeIntel packaging of CodeIntel2,我發現該軟件包的Python和Python 3解析器基於SilverCity,它具有Python綁定。也許這個項目將是你自己的一個合適的起點。