Python程序執行的第一個步驟的詳細介紹
我們大家都知道的是Python程序執行可分為5個步驟,那么本文將介紹Python程序執行的第一個步驟,也就是我們所說的詞法分析,如果你對Python程序執行的第一個步驟感興趣的話,你就可以點擊以下的文章。
Python源碼分析3 – 詞法分析器PyTokenizer 收藏
Introduction
上次我們分析了Python程序執行可分為5個步驟:
Tokenizer進行詞法分析,把源程序分解為Token
Parser根據Token創建CST
CST被轉換為AST
AST被編譯為字節碼
執行字節碼
本文將介紹Python程序執行的第一步,也就是詞法分析。
詞法分析簡單來說就是把源程序的字符分解組合成Token。
比如sum=0可以分解成3個token,'sum', '=', '0'。程序中的whitespace通常只作為分隔符用,最終會被忽略掉,因此沒有出現在token的列表中。不過在Python之中,由于語法規則的關系,Tab/Space需要用來分析程序的縮進,因此Python中對于Whitespace的處理比一般C/C++編譯器的處理會要稍微復雜一些。
在Python中詞法分析的實現在Parser目錄下的tokenizer.h和tokenizer.cpp。Python的其他部分會直接調用tokenizer.h中定義的函數,如下:
- extern struct tok_state
*PyTokenizer_FromString
(const char *);- extern struct tok_state
*PyTokenizer_FromFile
(FILE *, char *, char *);- extern void PyTokenizer_Free
(struct tok_state *);- extern int PyTokenizer_Get
(struct tok_state *, char **, char **);
這些函數均以PyTokenizer開頭。這是Python源代碼中的一個約定。雖然Python是用C語言實現的,其實現方式借鑒了很多面對對象的思想。拿詞法分析來說,這四個函數均可以看作PyTokenizer的成員函數。
頭兩個函數PyTokenizer_FromXXXX可以看作是構造函數,返回PyTokenizer的instance。PyTokenizer對象內部狀態,也就是成員變量,儲存在tok_state之中。PyTokenizer_Free可以看作是析構函數,負責釋放PyTokenizer,也就是tok_state所占用的內存。
PyTokenizer_Get則是PyTokenizer的一個成員函數,負責取得在字符流中下一個Token。這兩個函數均需要傳入tok_state的指針,和C++中需要隱含傳入this指針給成員函數的道理是一致的??梢钥吹剑琌O的思想其實是和語言無關的,即使是C這樣的結構化的語言,也可以寫出面對對象的程序。
以上就是Python程序執行的第一步,也就是詞法分析相關的內容的介紹,忘你會有所收獲。
【編輯推薦】