編譯技術 正規式 NFA DFA 最簡DFA的轉換

2021-10-06 11:51:42 字數 1194 閱讀 6981

在編譯原理中,正規式、nfa(非確定有窮自動機)、dfa、最簡dfa的轉換在詞法分析中是十分重要的乙個環節。

(正規式r到nfa的轉化)

(2)狀態集的a弧轉換: 狀態集i中的任何狀態s經過一條a弧而能到達的所有狀態的集合,定義為狀態集i的a弧轉換,表示為move(l,a)。

(3)狀態集的a弧轉換的閉包: la= ε-closure(move(l,a))。

對於輸入字元集合∑=,我們構造一張k+1列的**(行數未做限制)。一般來來講,步驟如下:

(1)**的第一行第一列的位置寫的是從nfa的起始節點經過任意個ε所能到達的結點集合s0的ε-closure(s0)。

(2)接著填寫該行剩餘位置的資訊,做法是在對應的位置上填寫la= ε-closure(move(l,a))。ia表示從該集合開始經過乙個a所能到達的集合,經過乙個a的意思是可以略過前後的ε。

(3)檢查該行上的所有狀態子集,如果未在第一列出現,則將該狀態子集寫到第一列。

(4)重複(2)(3)的步驟,直到所有狀態子集均在第一列上出現即可。

(5)然後給狀態子集重新編號,需要注意的是,包含原來終態的狀態子集為新的終態,按照對應的轉換函式f,構造對應的dfa即可。

(1)首先將dfa的狀態集進行初始劃分,分成π=(s-z,z)。【其中z為終態集合,s-z為非終態,終態對於非終態是可以區分的】

(2)用下面的過程對π構造新的劃分π new, 對π中每個組g,滿足以下條件:

① 任意兩個狀態si和sj在同一組中

② move(si, a) 和move(sj, a) 是到不同的組中

則說明si和sj是可區別的,可進行劃分,在π new中用剛完成的對g的劃分代替原來的g, 否則不可以進行劃分。

(3)重複執行(2)的操作,直到π中每個狀態集都不能再進一步劃分為止。

(4)合併等價狀態,在每個g中,取任意狀態作為代表,刪去其它狀態。將刪去的狀態關係全部轉到代表狀態。

(5)刪去無關狀態,包括從其它狀態到無關狀態的轉換弧都都刪掉。

正規文法和正規式

乙個正規語言可以由正規文法定義,也可以由正規式定義,對任意乙個正規文法,存在乙個定義同乙個正規語言的正規式 反之,對每個正規式,存在乙個生成同一語言的正規文法,有些正規語言很容易用文法定義,有些語言更容易用正規式定義,現在介紹兩者間的轉換,從結構上建立它們的等價性。1 將 上的乙個正規式轉換成正規文...

正規文法與正規式

3型文法也叫作正規文法,它對應於有限狀態自動機,它是在2型文法的基礎上滿足 a a ab 右線性 或a a ba 左線性 如果有a a,a ab,b a,b cb則符合3型文法的要求。但是a ab,a ab,b a,b cb或a a,a ba,b a,b cb則不符合3型文法的要求。也就是說,不能夠...

10 16 正規文法與正規式

1.分別寫出描述以下語言的正規文法和正規式 1 l1 2 l2 3 l3 答 1 正規文法 s aa a ba a 正規式 s a b a 2 正規文法 s as s bs b 正規式 s a a b b 3 正規文法 s ab s ab 正規式 s ab ab 2.將以下正規文法轉換到正規式 1 ...