編譯原理預習筆記(一)

2021-09-12 23:43:48 字數 1144 閱讀 5644

有窮狀態自動機根據確定性可以分為「確定有窮狀態自動機」(dfa - deterministic finite automaton)和「非確定有窮自動機」(nfa - non-deterministic finite automaton)

dfa的確定性表現在轉換函式f:sx2- >s是-乙個單值函式,也就是說對任何狀態k∈s,和輸入符號a∈2,f(k,a)唯一 地確定了 下乙個狀態。

dfa對於文字串裡的每乙個字元只需掃瞄一次,比較快,但特性較少;匹配速度與,確定

nfa要翻來覆去吃字元、吐字元,速度慢,但是特性豐富;匹配結果,不確定

區別:dfa比較快,但不提供backtrack(回溯)功能,nfa比較慢,但提供了backtrack功能。

nfa是基於表示式的(regex-directed),而dfa是基於文字的(text-directed)。

dfa引擎在任意時刻必定處於某個確定的狀態,而nfa引擎可能處於一組狀態之中的任何乙個,所以,nfa引擎必須記錄所有的可能路徑(trace multiple possible routes through the nfa),nfa之所以能夠提供backtrack的功能,原因就在這裡。

將nfa的乙個狀態子集在dfa中用乙個狀態表示出來。

從nfa的矩陣表示中可以看出,表項通常是一乙個狀態的集合,而在dfa的矩陣表示中,表項是乙個狀態。

nfa到相應的dfa的構造的基本想法是讓dfa的每個狀態代表nfa的乙個狀態集合。

即在轉換後的dfa中,使用它的狀態去記錄在nfa中讀入乙個輸入符號後可能到達的所有狀態。

換句話說,在得到的dfa中若輸入符號串aa2-a後,到達某個狀態,那麼該狀態表示對應的nfa的狀態集的乙個子集,這個子集是nfa在輸入符號串a1a2–a後可以到達的那些狀態組成的集合。

狀態集e -閉包

狀態集a弧轉換

狀態集a弧轉換的必報ia

構造的dfa的狀態轉換矩陣有幾列,每列的含義

矩陣的第一行,第一列元素是什麼?其餘各行列如何填?

轉換後dfa的初態,終態分別是什麼?

演算法是否收斂?為什麼?

參考鏈結

dfa和nfa的區別

dfa極簡化和nfa確定化

編譯技術預習筆記

不確定自己的認真能堅持多久,那麼就為了消除不確定性而多走幾步吧 以完成作業為目標,能夠對照答案,似乎回到了高中開學時最忙碌的時光 控制代碼 2.29 關於什麼是控制代碼,參照如下 採用最左規約,控制代碼是句型的第乙個規約 編譯原理中 短語,直接短語,控制代碼 自底向上語法分析 2.29 3.1 最有...

編譯原理筆記 一

編譯原理 1.1編譯器就是個程式,讀入某種語言編寫的程式,翻譯成另一種語言的程式。並能告知源程式的錯誤。1.11 編譯的分析綜合模型 編譯由兩部分組成,分析和綜合。分析部分將源程式切分成一些基本塊並形成源程式的中間表示,綜合部分把源程式的中間表示轉換成目標程式。分析期間 源程式的操作將被確定下來並表...

編譯原理 筆記

第一講 編譯過過程概述 主要介紹了 1 什麼是編譯是編譯程式?2 編譯程式的作用 3 編譯過程 4 編譯程式的組成及各部分的作用。第二講 上下文無關文法和語言 主要介紹了 1 語法 語義等概念,2 回顧了關於程式語言定義,初等資料型別,資料結構,高階高階語言的一般特性,程式結構,語句與控制結構等內容...