中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Python語法規則中的DFA的內容是什么

發布時間:2021-10-26 16:25:12 來源:億速云 閱讀:197 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關Python語法規則中的DFA的內容是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Grammar.h
Graminit.c中定義了包括Python語法規則的DFA(Deterministic Finite Automaton),關于DFA請參考Alfred V. Aho等人所著的Compilers: Principles, Techniques, and Tools一書。為了定義DFA,graminit.c引用了位于grammar.h中的一些類型:arc, state, dfa, grammar。

Label定義了從狀態轉移到另外一個狀態所經過的邊所對應的符號,可以是非終結符(Non-Terminal),也可以是終結符(Terminal)。Label一定依附于一條或者多條邊。Lb_type代表符號的類型,如終結符NAME,代表一個標示符,或者非終結符stmt,代表一個語句,等等。

Lb_str代表具體符號的內容。比如,label (NAME, “if”)表示當parser處于某個狀態,如果遇到了’if’這個標示符,則移動另外一個狀態。如果label是一個非終結符的話,情況則要復雜一些,需要跳轉到該非終結符對應的另外一個DFA,請參看編譯器相關書籍。

/* A label of an arc */  typedef struct {  int lb_type;  char *lb_str;  } label;

在Graminit.c中定義了包括Python語法規則的DFA中arc代表DFA中一個狀態到另一個狀態的弧/邊。A_lbl代表arc所對應的Label,而a_arrow記錄了arc的目標狀態。因為arc是屬于某個狀態的,因此不用紀錄arc的起始狀態。

/* An arc from one state to another */  typedef struct {  short a_lbl; /* Label of this arc */  short a_arrow; /* State where this arc goes to */  } arc;

State代表著DFA中的狀態節點。每個state記錄了從該state出發的邊的集合,存放在s_arc中。其他的一些成員s_lower, s_upper, s_accel, s_accept記錄了state所對應的Accelerator,其作用會在后面講述。注意Accelerator信息并沒有定義在graminit.c中,而是在運行時計算出來的。

/* A state in a DFA */  typedef struct {  int s_narcs;  arc *s_arc; /* Array of arcs */  /* Optional accelerators */  int s_lower; /* Lowest label index */  int s_upper; /* Highest label index */  int *s_accel; /* Accelerator */  int s_accept; /* Nonzero for accepting state */  } state;

DFA結構中記錄了起始狀態d_initial和所有狀態的集合d_state。d_first記錄了該DFA所對應的非終結符的firstset,也就是說,當遇到firstset中的終結符的時候,便需要跳轉到此DFA中。d_first在后面計算Accelerators的時候會被用到。

/* A DFA */  typedef struct {  int d_type; /* Non-terminal this represents */  char *d_name; /* For printing */  http://new.51cto.com/wuyou/int d_initial; /* Initial state */  int d_nstates;  state *d_state; /* Array of states */  bitset d_first;  } dfa;

Grammar代表了Python的整個語法,記錄了所有的DFA和所有的label。G_start則是Python語法的起始symbol,一般是single_input。不過實際的起始symbol可以在創建Parser的時候指定,可以是single_input, file_input, eval_input中的一個。

關于Python語法規則中的DFA的內容是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

东至县| 淮南市| 新宾| 兰考县| 巴林右旗| 江都市| 托克逊县| 凤台县| 北碚区| 陵川县| 连南| 明水县| 慈利县| 景宁| 娱乐| 龙南县| 资兴市| 志丹县| 墨江| 霸州市| 永春县| 平江县| 鄄城县| 白玉县| 聂荣县| 天门市| 日照市| 集安市| 恭城| 南澳县| 磐石市| 佛教| 宽城| 武义县| 大关县| 铜鼓县| 宁夏| 凭祥市| 静乐县| 谢通门县| 海门市|