編譯原理 學習記錄6

2021-10-24 23:30:38 字數 2169 閱讀 2748

正規集:字母表σ

\sigma

σ上的正規表示式e,所描述的語言集合l(e)

從e到l(e)的變換有如下規則:

el(e)

ϵ

\epsilon

ϵ∅\empty

∅a(e

1e_1

e1​)

l(e

1e_1

e1​)

e 1e

2e_1e_2

e1​e2​

l(e

1e_1

e1​)l(e

2e_2

e2​)

e

1e_1

e1​ | e

2e_2

e2​l(e

1e_1

e1​) ∪

\cup

∪ l(e

2e_2

e2​)

e 1∗

e_1^*

e1∗​

(l(e

1e_1

e1​))∗

^*∗從正規表示式e構造fa m的步驟:

1、構造乙個廣義nfa,即只有乙個開始狀態和乙個結束狀態,弧上的標記為e

2、根據分解規則分解e,直到最後得到與e對應的nfa,其分解規則如圖1所示:

圖1 弧e的分解規則

舉例:構造正規表示式((a|b)*|(bb))*對應的nfa

首先,構造初始狀態:

隨後,將最外層的*展開,根據分解規則,狀態圖變為:

再進一步將(a|b)∗

^*∗|(bb)分解為(a|b)∗

^*∗和bb:

最後分解bb和(a|b)∗

^*∗:

此後,可以將nfa轉換為dfa

而使用機器進行分解時,會為了保險而採用thompson法:兩端額外引入空弧

使用此方法作出的狀態轉換圖中,會有大量的空弧

thompson方法的意義:工作最後要用程式進行,方法應該適合所有表示式的分解。同時,此方法可以避免造成不必要的問題使得變化不等價

從re到fa,可以看做是「拆分」的過程

與re到fa相反,從fa到re,可以看做是「合併」的過程

大致思路為:逐個刪除fa的狀態,同時保證有窮自動機所識別的符號串不會減少

舉例將圖2中的fa轉換為re:

圖2 待轉換為re的fa

首先,在兩端加上空弧及對應的開始和終止狀態:

隨後,刪去狀態2和狀態3,注意保持fa的功能:

繼續刪除狀態4:

最後,刪除狀態1,從而得到最終影象:

右線性的轉換規則:

1、u →α

v,v→

βu\rightarrow \alpha v,\ v\rightarrow \beta

u→αv,v

→β轉換為u=α

βu=\alpha\beta

u=αβ

2、u →α

u∣

βu\rightarrow \alpha u|\beta

u→αu∣β

轉換為u=α

∗β

u=\alpha^*\beta

u=α∗

β3、u→α

∣β

u\rightarrow \alpha|\beta

u→α∣

β轉換為u=α

∣β

u=\alpha|\beta

u=α∣β

左線性同理

dfa實際上相當於程式流程圖,可以視準備工作為開始狀態,識別過程為中間狀態,結束工作為終止狀態

整個過程可以用下述偽碼表示:

if ch in letter

then while ch in letter or digit do

begin

name = name + ch; /* 拼成單詞*/

read(ch)

end;

retract; /* 回退指標*/

i = lookup(name) ; /* 查符號表*/

if i != 0 then return (1, name) /* 返回單詞*/

else return (2, name) ;

編譯原理 學習記錄4

直接遞迴 呈現出u x uy u rightarrow xuy u xu y形式的文法產生式 間接遞迴 具有u xu yu mathop rightarrow limits xuy u xuy 形式的推導 產生式呈u u yu rightarrow uy u uy 形式如果是經過多步推導得到,則稱之...

編譯原理 學習記錄11

上回,為了解決移進 規約時的幾個問題,引入了幾個定義 短語 設有文法g z w xuy是它的乙個句型,如果有 z xu yz mathop rightarrow limits xuy z xuy 並且u uu mathop rightarrow limits u u u 則稱句型xuy中子串u為句型...

編譯原理 學習記錄1 程式編譯過程

前端 該階段的編譯工作主要依賴源程式,與目標機無關。語法分析 在詞法分析基礎上,將單詞序列分解成各類語法短語 也稱語法單位,如 程式 語句 表示式 可表示成語法樹 推導樹 通過語法分析,確定乙個輸入串是否構成乙個語法上正確的程式。即 經語法分析可以得到乙個分析樹。問 如何根據單詞序列構造語法分析樹?...