正規式與正規集,DFA與NFA


詞法分析器的設計

詞法分析器的功能:輸入源程序、輸出單詞符號

詞法分析器的設計:給出程序設計語言的單詞規范——單詞表, 對照單詞表設計識別該語言所有單詞的狀態轉換圖, 根據狀態轉換圖編寫詞法分析程序

字母表:一個有窮字符集,記為∑

字母表中每個元素稱為字符

∑上的字(也叫字符串) 是指由∑中的字符所構成的一個有窮序列

不包含任何字符的序列稱為空字,記為ε

用∑*表示∑上的所有字的全體,包含空字ε

例如: 設 ∑={a, b},則,∑*={ε,a,b,aa,ab,ba,bb,aaa,...}

∑ * 的子集U和V的連接(積)定義為UV={ αβ | α∈U & β∈V }

V自身的 n次積記為V n =V V…V

正規式和正規集

程序設計語言的單詞符號都是一些特殊的字符串,用正規集和正規表達式(簡稱正規式)來描述

正規集可以用正規式表示,正規式是表示正規集一種方法, 一個字集合是正規集當且僅當它能用正規式表示

正規式和正規集的遞歸定義

對給定的字母表Σ,ε 和∅都是Σ上的正規式,它們所表示的正規集為{ε}和∅;

任何a∈Σ ,a是Σ上的正規式,它所表示的正規集為{a} ;

ε是什么?字,正規式

∅是什么?集合,正規式

a (a ∈Σ)是什么?字符,字,正規式

假定e 1 和e 2 都是Σ上的正規式,它們所表示的正規集為L(e 1 )和L(e 2 ),則(e 1 |e 2 )為正規式,它所表示的正規集為L(e 1 )∪L(e 2 ),(e 1 .e 2 )為正規式,它所表示的正規集為L(e 1 )L(e 2 ),(e 1 ) * 為正規式,它所表示的正規集為(L(e 1 )) *,僅由有限次使用上述三步驟而定義的表達式才是Σ上的正規式,僅由這些正規式表示的字集才是Σ上的正規集。

正規式的等價性

若兩個正規式所表示的正規集相同,則稱這兩個正規式等價。如

正規式的性質

確定有限自動機

對狀態圖進行形式化定義

DFA表示為狀態轉換圖,假定DFA M含有m個狀態和n個輸入字符,對應的狀態轉換圖含有m個狀態結點,每個結點頂多含有n條箭弧射出,且每條箭弧用Σ上的不同的輸入字符來作標記

對於Σ*中的任何字α,若存在一條從初態到某一終態的道路,且這條路上所有弧上的標記符連接成的字等於α,則稱α為DFA M所識別(接收),DFA M所識別的字的全體記為L(M)

L(M)={含aa或bb的字}

非確定有限自動機

從狀態圖看NFA 和DFA的區別,NFA可以有多個初態,弧上的標記可以是Σ * 中的一個字(甚至可以是一個正規式),而不一定是單個字符,同一個字可能出現在同狀態射出的多條弧上

DFA是NFA的特例

對於Σ*中的任何字α,若存在一條從初態到某一終態的道路,且這條路上所有弧上的標記字連接成的字等於α(忽略那些標記為ε的弧),則稱α為NFA M所識別(接收),NFA M所識別的字的全體記為L(M)

L(M 1 )={含aa或bb的字}

L(M 2 )={a m b n | m,n≥1}

DFA和NFA

定義:對於任何兩個有限自動機M和M’,如果L(M)=L(M’),則稱M與M’等價,自動機理論中一個重要的結論:判定兩個自動機等價性的算法是存在的,對於每個NFA M存在一個DFA M’,使得L(M)=L(M’),DFA與NFA識別能力相同!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM