成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python詞法分析Parser中tokenizer.h的實際應用

開發 后端
這里閑談在Python詞法分析的實現在Parser目錄下的tokenizer.h和tokenizer.cpp。也包括介紹Python是用C語言實現的,其實現方式借鑒了很多面對對象的思想。

如果你在對Python詞法分析的實際操作中,你對其有不解之處時,你就可以點擊以下的文章對其進行了解,希望你對相關Python詞法分析的實現在Parser目錄下的tokenizer.h和tokenizer.cpp的內容有所了解。

在Python詞法分析的實現在Parser目錄下的tokenizer.h和tokenizer.cpp。Python的其他部分會直接調用tokenizer.h中定義的函數,如下:

 

  1. extern struct tok_state *PyTokenizer_FromString
    (const char *);   
  2. extern struct tok_state *PyTokenizer_FromFile
    (FILE *, char *, char *);   
  3. extern void PyTokenizer_Free(struct tok_state *);   
  4. 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。

Python詞法分析中這兩個函數均需要傳入tok_state的指針,和C++中需要隱含傳入this指針給成員函數的道理是一致的。可以看到,OO的思想其實是和語言無關的,即使是C這樣的結構化的語言,也可以寫出面對對象的程序。

  1. tok_state  

tok_state等價于PyTokenizer這個class本身的狀態,也就是內部的私有成員的集合。部分定義如下:

  1. /* Tokenizer state */   
  2. struct tok_state {   
  3. /* Input state; buf <= cur <= inp <= end */   
  4. /* NB an entire line is held in the buffer */   
  5. char *buf; /* Input buffer, or NULL; malloc'ed if 
    fp != NULL */   
  6. char *cur; /* Next character in buffer */   
  7. char *inp; /* End of data in buffer */   
  8. char *end; /* End of input buffer if buf != NULL */   
  9. char *start; /* Start of current token if not NULL */   
  10. int done; /* E_OK normally, E_EOF at EOF, otherwise 
    error code   
  11. /* NB If done != E_OK, cur must be == inp!!! */   
  12. FILE *fp; /* Rest of input; NULL if tokenizing a 
    string */   
  13. int tabsize; /* Tab spacing */   
  14. int indent; /* Current indentation index */   
  15. int indstack[MAXINDENT]; /* Stack of indents */   
  16. int atbol; /* Nonzero if at begin of new line */   
  17. int pendin; /* Pending indents (if > 0) or dedents 
    (if 
    < 0) */   
  18. char *prompt, *nextprompt; /* For interactive 
    prompting */   
  19. int lineno; /* Current line number */   
  20. int level; /* () [] {} Parentheses nesting level */   
  21. /* Used to allow free continuations inside them */   
  22. }; 

最重要的是buf, cur, inp, end, start。這些field直接決定了緩沖區的內容:

buf是緩沖區的開始。假如PyTokenizer處于字符串模式,那么buf指向字符串本身,否則,指向文件讀入的緩沖區。cur指向緩沖區中下一個字符。inp指向緩沖區中有效數據的結束位置。PyTokenizer是以行為單位進行處理的,每一行的內容存入從buf到inp之間,包括\n。一般情況下 ,PyTokenizer會直接從緩沖區中取下一個字符,一旦到達inp所指向的位置,就會準備取下一行。

當PyTokenizer處于不同模式下面,具體的行為會稍有不同。end是緩沖區的結束,在字符串模式下沒有用到。start指向當前token的開始位置,如果現在還沒有開始分析token,start為NULL。以上就是對在Python詞法分析的實現在Parser目錄下的tokenizer.h和tokenizer.cpp相關的內容的介紹,忘你會有所收獲。

【編輯推薦】

  1. Python中文轉換url編碼的實際操作步驟介紹
  2. Python學習入門中的先搭環境的具體應用的方法介紹
  3. Python源碼分析的實際相關操作步驟解析
  4. Python安裝的步驟操作其實是件很容易的事
  5. 對Python源代碼組織的相關實際操作步驟解析

 

責任編輯:佚名 來源: 博客園
相關推薦

2010-03-16 18:19:41

Python函數

2010-02-23 10:25:29

2010-03-01 10:45:59

WCF集合類

2010-03-19 15:16:11

Python代碼

2009-12-10 14:56:10

動態路由技術

2010-03-17 10:01:12

Python安裝

2010-03-24 18:39:21

Python unic

2010-04-01 09:22:31

Oracle9i分析函

2009-11-23 17:56:45

業務路由器

2010-03-16 09:20:25

Python時間

2010-03-09 19:07:01

Python語法

2010-03-03 17:52:31

Python線程同步

2010-03-19 17:15:43

2021-11-30 22:51:36

機器學習大數據技術

2009-11-03 11:03:00

CDN接入技術

2024-02-27 16:27:42

物聯網IOT智能連接

2010-01-06 15:21:00

軟交換技術

2010-03-22 19:11:55

Python連接

2021-08-28 10:06:29

VueJavascript應用

2010-03-16 16:47:25

Python數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产伦精品一区二区 | 国产精品入口久久 | 秋霞影院一区二区 | 毛片大全 | jlzzjlzz国产精品久久 | 国户精品久久久久久久久久久不卡 | 精品久久一区 | 久久国内 | 99热99| 久草免费在线视频 | 国产精品免费一区二区三区四区 | 天天操伊人 | 精品久久久久一区二区国产 | 国产一区h | 黄色av网站在线观看 | 亚洲国产精品福利 | 色网站入口| 亚洲乱码一区二区三区在线观看 | 免费视频一区二区 | 精品久久电影 | 欧美精品一区二区三区四区 在线 | 亚洲精品大片 | 久久婷婷国产麻豆91 | 蜜桃综合在线 | 男人天堂免费在线 | 美国a级毛片免费视频 | 中文天堂在线一区 | 亚洲网站免费看 | 国产精品久久久久久久午夜片 | 久久激情视频 | 日韩欧美成人一区二区三区 | 在线观看中文字幕视频 | 成人在线中文字幕 | 欧美日韩精品免费 | 久产久精国产品 | 韩日一区| 中文字幕第十页 | 凹凸日日摸日日碰夜夜 | 免费能直接在线观看黄的视频 | 香蕉大人久久国产成人av | 免费成人在线网站 |