上下文無關文法與推導

產生式(production rule)

把產生式想成替換字典裡的一條條目:「凡是看到這個佔位符,你都可以把它換成這串序列。」它是文法的基本動作,是你反覆執行以建造字串的那唯一一個操作。文法不過是一堆這樣的規則加上一個起點。

上下文無關文法中的產生式具有 A → α 的形式,讀作「A 可重寫為 α」或「A 產生 α」。左側 A 是單一變數(非終端符號)。右側 α 是任意由變數與終端符號組成的字串——也可以是空的,寫成 ε(epsilon),此時 A 可以直接消失。當數條規則共用相同左側時,例如 A → α 與 A → β,我們通常用一條豎線縮寫成 A → α | β,這仍是兩條規則,而非一條。要套用一條規則,你在當前字串中找到某個 A,把那一個出現處替換成該規則的右側。

遞迴就住在產生式裡。像 E → E + E 這樣的規則兩側都提到 E,所以你可以一再套用它來建造愈來愈深的表達式;像 A → a A b 這樣的規則則讓你成對地同步生成 a 與 b。規則的數量與形狀完全決定了所生成的語言。一個微妙之處:「同一」組字串通常可由許多不同的規則集生成,所以兩個外觀大不相同的文法可能是等價的——而判定任兩個 CFG 是否等價,結果是不可判定的。

規則 A → 0 A 1 的左側是 A(一個變數),右側是 0 A 1(終端、變數、終端)。套用到字串「x A y」上會得到「x 0 A 1 y」。再搭配 A → ε,它生成語言 { 0^n 1^n : n ≥ 0 }。

A → α:把變數 A 的一個出現處替換成右側 α。

豎線 A → α | β 是「兩條」共用左側的獨立規則的縮寫,並非單一規則。而空右側 ε 是允許的:規則 A → ε 讓變數 A 消失。

又称
productionrewrite rule生成規則重寫規則