I . 上下文無關語法 ( CFG ) 轉爲 下推自動機 ( PDA )
上下文無關語法 ( CFG ) :
S→aTb∣b
T→Ta∣ε
將上述 上下文無關語法 ( CFG ) 轉爲 下推自動機 ;
II . 下推自動機 ( PDA ) 三個狀態
該 自動機 共包含 3 個狀態 , qstart , qloop , qaccept , 最後一個狀態是 可接受狀態 ;
III . 下推自動機 ( PDA ) qstart 狀態
1 . 首先在 棧頂 放入 K 字符 , 用於當做棧底的標識 ;
生成指令 : ε,ε→K ;
開始狀態 qstart 狀態 , 讀取 ε,ε→K 指令 , 讀取空字符 , 使用 K 替換棧頂的空字符 , 就是將 K 放入棧中 ;
狀態跳轉 : 之後跳轉到 qloop 狀態 ;
當前的 下推自動機 ( CFG ) 設計 :
IV . 下推自動機 ( PDA ) qloop 狀態
1 . qloop 狀態下 在棧中模仿 上下文無關語法 ( CFG ) 的規則替換 ;
上下文無關語法 ( CFG ) :
S→aTb∣b
T→Ta∣ε
2 . 對照上述 上下文無關語法 ( CFG ) , 逐條生成指令 :
① S→aTb 對應的指令 : ε,S→aTb , 讀取 ε 時 , 使用 aTb 替換棧頂的 S ; 即如果棧頂是 S , 使用 aTb 替換棧頂的 S ;
② S→b 對應的指令 : ε,S→b , 讀取 ε 時 , 使用 b 替換棧頂的 S ; 即如果棧頂是 S , 使用 b 替換棧頂的 S ;
③ T→Ta 對應的指令 : ε,T→Ta , 讀取 ε 時 , 使用 Ta 替換棧頂的 T ; 即如果棧頂是 T , 使用 Ta 替換棧頂的 T ;
④ T→ε 對應的指令 : ε,T→ε , 讀取 ε 時 , 使用 ε 替換棧頂的 T ; 即如果棧頂是 T , 使用 ε 替換棧頂的 T ;
⑤ 如果棧上有終端字符 a , 要將棧裏的終端字符 a 移除 , 對應指令是 a,a→ε , 如果讀取到字符 a 時 , 從棧頂將字符 a 移除 ;
⑥ 如果棧上有終端字符 b , 要將棧裏的終端字符 b 移除 , 對應指令是 b,b→ε , 如果讀取到字符 b 時 , 從棧頂將字符 b 移除 ;
V . 下推自動機 ( PDA ) qaccept 狀態
1 . qaccept 狀態 :
在 qloop 狀態下 , 將棧內的除 K 外所有的字符都移除完畢 , 開始向 qaccept 狀態跳轉 ;
此時需要生成指令 ε,K→ε , 讀取 空字符 ε , 使用 空字符 ε 替換棧頂的 K 字符 , 此時棧清空了 ;
VI . 下推自動機 ( PDA ) 指令分解
1 . 非法指令分解
上述生成的
- ε,S→aTb
- ε,T→Ta
兩個指令是不合法的 , 在棧中 , 一個字符 ( 或空字符串 ε ) 只能由 一個字符 ( 或空字符串 ε ) 替換 ;
上述不合法的規則 , 多個字符替換棧頂的一個字符 , 需要進行分解操作 ;
2 . ε,S→aTb 指令分解流程 :
① qloop 狀態 跳轉到 新的狀態 qloop1 , 跳轉讀取的指令時 ε,S→b , 讀取空字符 , 然後使用 b 替換棧頂的 S 字符 ;
② qloop1 狀態 跳轉到 新的狀態 qloop2 , 跳轉讀取的指令時 ε,ε→T , 讀取空字符 , 然後使用 T 替換棧頂的 ε 字符 , 相當於在棧中放入了 T 字符 ;
③ qloop2 狀態 跳轉到 原來的狀態 qloop , 跳轉讀取的指令時 ε,ε→a , 讀取空字符 , 然後使用 a 替換棧頂的 ε 字符 , 相當於在棧中放入了 a 字符 ;
分解 ε,S→aTb 後的 3 個指令 :
- ε,S→b
- ε,ε→T
- ε,ε→a
上述三個指令都是合法的 , 上述 3 個指令 串聯後的效果等價於 ε,S→aTb 操作 , 等價於上下文無關語法的 S→aTb 規則效果 ;
3 . ε,T→Ta 指令分解流程 :
① qloop 狀態 跳轉到 新的狀態 qloop3 , 跳轉讀取的指令時 ε,S→a , 讀取空字符 , 然後使用 a 替換棧頂的 S 字符 ;
② qloop3 狀態 跳轉到 原來的狀態 qloop , 跳轉讀取的指令時 ε,ε→T , 讀取空字符 , 然後使用 T 替換棧頂的 ε 字符 , 相當於在棧中放入了 T 字符 ;
分解 ε,T→Ta 後的 2 個指令 :
- ε,S→a
- ε,ε→T
上述 2 個指令都是合法的 , 上述 2 個指令 串聯後的效果等價於 ε,T→Ta 指令 , 等價於上下文無關語法的 T→Ta 規則效果 ;
VII . 最終轉換成的 下推自動機 ( PDA ) 結果
最終的 上下文無關語法 ( CFG ) 轉爲的 下推自動機 ( PDA ) 樣式 :
上下文無關語法 ( CFG ) 與 下推自動機 ( PDA ) 是等價的 , 給定一個 下推自動機 ( PDA ) , 構造 上下文無關語法 ( CFG ) , 該語法生成的語言 , 就是該 下推自動機 ( PDA ) 所認識的語言 ;