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

Python CST 和AST 類似之處的詳細介介紹

開發 后端
提起Python CST你對其是否算是頭一次見面?是否對 Python CST 的實際相關應用與相關代碼不算太熟悉?如果你想了解相關的內容就點擊以下的文章即可。

你在計算機相關操作中是否遇到過語法分析所獲得的中間結果例如CST,你想知道CST的實際相關應用嗎?下面的文章是針對 Python CST 的實際相關應用與相關代碼的詳細介紹,忘你會從中得到自己想要的東西。

 Python CST 和AST 類似,都是語法分析所獲得的中間結果。他們的不同之處在于,CST直接對應語法分析的匹配的過程,是直接生成的,含有大量冗余信息。而AST省略了中間的冗余信息,直接對應實際的語義,也就是分析的結果。用例子說明要清楚一些:

假設有這樣一個表達式a,

Python CST是這樣的:(->表示從父結點到子結點)

 

  1. file_input -> stmt -> simple_stmt -> small_stmt -> 
    expr_stmt -
    > testlist -> test ->or_test ->and_test 
    -
    >not_test -> comparison -> expr -> xor_expr ->
     and_expr -> shift_expr -> arith_expr -> term -> 
  2. factor -> power -> atom -> (NAME, “a”) 

 

而AST則是:

 

  1. (stmt_ty, expr_kind) -> (expr_ty, name_kind) ->(“a”) 

可以看到CST表述了整個分析a的過程,從file_input一直推導到***的NAME,每一步推導都成了樹的結點,而大部分信息都可以說是無用的。AST的結構要簡單和直接的多,直接表明a是一個表達式語句(假定a是一個單獨的語句),內容是一個標示符,值為”a”。Python的語法分析生成的是 Python CST而非AST,之后Python會調用PyAst_FromNode將CST轉換為AST。

CST的結點稱為Node,其結構定義在node.h中:

 

  1. typedef struct _node {  
  2. short n_type;  
  3. char *n_str;  
  4. int n_lineno;  
  5. int n_col_offset;  
  6. int n_nchildren;  
  7. struct _node *n_child;  
  8. } node;  
  9. Field  
  10. Description  
  11. n_type   

結點類型,終結符定義在token.h中,而非終結符定義在graminit.h中

n_str

結點所對應的字符串的內容

n_lineno

對應的行號

n_col_offset

列號

n_nchildren

子結點的個數

n_child

子結點數組,動態分配內存

Python提供了下面的函數/宏來操作CST,同樣定義在node.h中:

 

  1. PyAPI_FUNC(node *) PyNode_New(int type);  
  2. PyAPI_FUNC(int) PyNode_AddChild(node *n, int type,  
  3. char *str, int lineno, int col_offset);  
  4. PyAPI_FUNC(void) PyNode_Free(node *n);  
  5. /* Node access functions */  
  6. #define NCH(n) ((n)->n_nchildren)  
  7. #define CHILD(n, i) (&(n)->n_child[i])  
  8. #define RCHILD(n, i) (CHILD(n, NCH(n) + i))  
  9. #define TYPE(n) ((n)->n_type)  
  10. #define STR(n) ((n)->n_str)  
  11. /* Assert that the type of a node is what we expect */  
  12. #define REQ(n, type) assert(TYPE(n) == (type))  
  13. PyAPI_FUNC(void) PyNode_ListTree(node *);   

 

以上就是對 Python CST 和AST 類似,都是語法分析所獲得的中間結果。他們的不同之處在于,CST直接對應語法分析的匹配的過程,是直接生成的,含有大量冗余信息。而AST省略了中間的冗余信息,直接對應實際的語義,也就是分析的結果。用例子說明相關的內容的介紹,忘你會有所收獲。

【編輯推薦】

  1. Python編程語言在Zope軟件開發中具體應用
  2. Python語言中常用的四種工具的介紹
  3. Python語言功能中的宏編程語言的實際操作方案介紹
  4. mod_python在性能上要優于傳統CGI的緣由
  5. Python中文轉換url編碼的實際操作步驟介紹
責任編輯:佚名 來源: 互聯網
相關推薦

2010-03-25 13:19:57

Python_ast.

2009-12-28 09:51:17

Fedora GNOM

2024-06-13 10:05:36

2010-03-26 17:17:37

Python特色

2009-06-24 13:50:29

JSF和MVC

2011-06-30 10:20:38

JSFMVC

2011-07-08 16:24:53

VOPO

2010-02-22 16:16:14

Python語法

2009-09-02 09:44:01

JSP和JavaBea

2009-08-03 18:49:17

C#和Java

2011-07-22 16:50:05

JAVA

2009-07-03 11:21:43

Servlet和JSPJSP路徑

2021-11-14 22:06:48

JavaPython方式

2010-03-10 19:25:04

python多線程

2010-03-09 15:15:02

Python字符串類型

2011-07-21 17:02:48

JAVA模式框架

2010-02-23 10:32:20

Python 腳本

2020-06-29 14:10:28

JVM參數配置

2010-02-22 17:54:07

Python工具

2010-03-25 16:51:12

Python程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美中文字幕在线观看 | 久久久免费毛片 | 污书屋 | 日日摸夜夜添夜夜添特色大片 | 久热久热 | 一区二区三区视频在线观看 | 久久日韩精品一区二区三区 | 欧美成人精品一区二区男人看 | 国产精产国品一二三产区视频 | 欧美日韩亚洲国产 | 操操日 | 亚洲精品国产a久久久久久 午夜影院网站 | 欧美三级三级三级爽爽爽 | 成人网在线观看 | 男人的天堂一级片 | 日本午夜在线视频 | 精品中文字幕一区二区三区 | 欧美激情a∨在线视频播放 成人免费共享视频 | 永久看片| 99热精品在线 | 亚洲一区二区av | 992人人草 | 亚洲高清成人 | 99久久久久久| 日韩在线观看网站 | 国产a视频 | 精品日韩一区 | 亚洲精品久久久蜜桃 | 成人二区| 毛片大全 | 欧美日韩福利视频 | 在线色| 国产成人99 | jizz视频| 国产精品久久久久久久免费大片 | 国产精品久久久久久久免费大片 | 91在线视频在线观看 | 夜夜骑天天干 | 成人久久久久久久久 | 久久免费精品视频 | 日韩成人中文字幕 |