在編譯原理中,正規式、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 ...