A. DFA ,NFA,狀態轉換圖 和詞法分析究竟有什麼關系
既然你都知道它們是怎麼回事兒了,怎麼會不明白它們和詞法分析程序的關系呢?
簡單點兒說,詞法分析就是進行正則表達式匹配。詞法分析程序就是根據要匹配的正則表達式生成它的NFA或者DFA,再將待匹配的字元串放到這些NFA或者DFA中進行處理,從而分析出輸入字元串是否匹配給定的正則表達式。
B. 編譯原理習題求幫忙
C. 求大神指導編譯原理的狀態轉換圖怎麼畫
這里你要弄清子集法中,每一行,指的是變遷。比如第一行,代表狀態0,畫一根線到狀態1,因此第1個0是指這個變遷的起點狀態0,第3個1是指變遷的終點狀態1。
同理,第2行是指從狀態1出發,有2個變遷,即第一個是狀態1指向狀態1(自己),第2個變遷是從狀態1到狀態1和2。
這樣第3行就表示如果從狀態{1,2}開始,輸入是0和1時的變遷分別是什麼,依此類推。
你紅的圈出來的就是NFA所有可能的狀態和狀態組合。
D. 編譯原理中正規式(ba|a)*如何轉換成NFA
E. !!編譯原理DFA和NFA
DFA或NFA是對計算機程序的行為的抽象模型。你編寫的程序其實就對應了一個自動機。簡單舉例來說,如果a,b可以取值0或1; 程序: if(a==1) b=1; 這個程序對應了一個自動機。
對應的自動機就有狀態 (0,0), (0,1), (1,1), (1, 0)
比如你自動機的初始狀態是 (1,0)即a=1,b=0時,運行程序的下一個狀態就是(1,1)。
畫圖出來就是 這4個狀態作為頂點,並且有下面幾條邊
(0,0) --> (0,0)(自環), (1,0)-->(1,1), (1,1)-->(1,1)(自環), (0,1)-->(0,1)自環
存在的意義就是一種理論模型,也可以認為是一種編程思想。 詞法分析系也離不開 if else, 這一系列的if else和條件也就組成自動機。。。
最經典體現自動機思想的演算法就是KMP演算法,你肯定學過,字元串子串匹配的演算法。 回憶這個演算法的過程:演算法第一步構造的next表(數據結構教材的說法)其實就是根據子串的內容構造了一個自動機! 演算法第二步將原串作為自動機輸入,自動機的輸出就是匹配到的子串位置或者無匹配。
F. 對給定的正規式b(a|b)*aa,構造其NFA M,並將其確定化。
表示方法:五元組(S,Z,f,S0,z)
S:狀態集
Z:字母表
f:映射關系
s0:初態
z:終態
(2)確定有限自動機DFA:f為單值映射
(3)非確定有限自動機NFA:f為多值映射
(4)狀態轉換圖和狀態轉換矩陣
(6)編譯原理字元常量的狀態轉換圖擴展閱讀
假定DFAMd=({s0,s1,s2},{a,b},f,s0,{s2}):
f:
f(s0,a)=s1f(s0,b)=s2
f(s1,a)=s1f(s1,b)=s2
f(s2,a)=s2f(s2,b)=s1
試著給出Md的狀態轉換圖和狀態轉換矩陣。
狀態轉換矩陣如下
ab
s0s1s2
s1s1s2
s2s2s1