91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中CST 和AST類有哪些相同的地方

發布時間:2021-07-10 15:50:55 來源:億速云 閱讀:482 作者:Leah 欄目:編程語言

這篇文章給大家介紹Python中CST 和AST類有哪些相同的地方,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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則是:

(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中:

typedef struct _node {  short n_type;  char *n_str;  int n_lineno;  int n_col_offset;  int n_nchildren;  struct _node *n_child;  } node;  Field  Description  n_type

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

n_str

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

n_lineno

對應的行號

n_col_offset

列號

n_nchildren

子結點的個數

n_child

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

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

PyAPI_FUNC(node *) PyNode_New(int type);  PyAPI_FUNC(int) PyNode_AddChild(node *n, int type,  char *str, int lineno, int col_offset);  PyAPI_FUNC(void) PyNode_Free(node *n);  /* Node access functions */  #define NCH(n) ((n)->n_nchildren)  #define CHILD(n, i) (&(n)->n_child[i])  #define RCHILD(n, i) (CHILD(n, NCH(n) + i))  #define TYPE(n) ((n)->n_type)  #define STR(n) ((n)->n_str)  /* Assert that the type of a node is what we expect */  #define REQ(n, type) assert(TYPE(n) == (type))  PyAPI_FUNC(void) PyNode_ListTree(node *);

關于Python中CST 和AST類有哪些相同的地方就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万安县| 宜宾市| 太仆寺旗| 封丘县| 涟源市| 佛冈县| 石城县| 新巴尔虎左旗| 崇礼县| 都兰县| 婺源县| 阳高县| 久治县| 平邑县| 曲水县| 昌江| 文登市| 会宁县| 西华县| 县级市| 根河市| 泰来县| 东阳市| 淮南市| 肥城市| 上饶市| 开封市| 龙江县| 保亭| 林西县| 库车县| 探索| 广安市| 犍为县| 江陵县| 吉安县| 成安县| 建湖县| 汨罗市| 定襄县| 阿荣旗|