什麼是推導?


推導是指用產生式規則的右側替換給定字串的非終結符。從開始符號生成完整終結符字串的規則應用序列稱為推導。

它可以從開始符號開始推匯出終結符字串,透過重複地用某個產生式替換變數。CFG 的語言是我們能夠推匯出的終結符集合。這種語言稱為上下文無關語言。

推導用 ⇒ 表示。

例如,考慮一個語法。

G=({S},{a,b},P,S),其中,P 包含以下產生式 -

P={S→aSa |bSb | ∈}

在上面,S 可以被替換為 aSa 或 bSb 或 ∈。

推導型別

推導有兩種型別,如下所示 -

  • 最左推導

如果我們在每一步都只對最左邊的變數使用產生式,則推導 A⇒*w 被稱為最左推導。這裡,* 表示 0、1、2、……n 個推導。

  • 最右推導

如果我們在每一步都只對最右邊的變數使用產生式,則推導 A⇒*w 是最右推導。它也稱為**規範推導**。

**示例 1** - 令 G 為一個具有產生式的 CFG。

S → AA
A → αB
B → b
B → ε

找到 (1) 最左

  • 字串**abab**的最右推導。

解決方案

  • 最左推導 -

S ⇒lm A $\underline{A}$

lm a $\underline{B}$ A

lm a b $\underline{A}$

lm a b a $\underline{B}$

lm a b a b

  • 最右推導

S ⇒rm A $\underline{A}$

rm A a $\underline{B}$

rm $\underline{A}$ a b

rm a $\underline{B}$ a b

rm a b a b

**示例 2** - 為迴文語言編寫上下文無關語法。

L={w c wR| w ∈ {a,b}*} 具有中間符號 c。這裡 R 表示字串的反轉。

解決方案

語言表示一個具有中間符號“c”的迴文。

∴ **語法 G**=(V,∑,P,S) 將具有產生式。

S → a S a
S → b S b
S → c

例如,要生成迴文 a b c b a,推導為

S ⇒ a $\underline{S}$ a

⇒ a b $\underline{S}$ b a

⇒ a b c b a

**示例 3** - 為生成二進位制數字迴文的語言編寫 CFG。

解決方案

S → 0 S 0 | 1 S 1
S → 0 | 1 | ε

例如,要生成字串 0 1 1 0,推導為

S ⇒ 0 S 0
⇒ 0 1 S 1 0
⇒ 0 1 ε 1 0
⇒ 0 1 1 0

**示例 4** - 考慮下面給出的語法 -

E → E+E|E * E|id

查詢

  • 最左
  • 字串的最右推導。

解決方案

  • 最左推導

E ⇒ $\underline{E}$+E

⇒ $\underline{E}$+E+E

⇒ id+E+E

⇒ id+id+E

⇒ id+id+id

  • 最右推導

E ⇒ E+$\underline{E}$

⇒ E+E+$\underline{E}$

⇒ E+E+id

⇒ E+id+id

⇒ id+id+id

更新於: 2021-10-26

3K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告