自動機理論

形式語言與計算模型

什麼是自動機理論?

自動機理論研究抽象計算機器的數學模型,是形式語言、編譯器設計和計算複雜度的理論基礎。自動機從簡單的有限狀態機到複雜的圖靈機,構成了理解計算本質的層次結構。自動機理論的核心問題是:什麼樣的語言可以被機器識別?這個問題與「什麼可以被計算」密切相關。

自動機與語言對應

┌─────────────────────────────────────────────────────────────┐
│              自動機與語言的對應                              │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  有限狀態機 ──▶  正則語言    ──▶  正則表達式               │
│       ↓                                                      │
│  下推自動機 ──▶  上下文無關語言 ──▶  BNF                    │
│       ↓                                                      │
│  線性有界自動機 ──▶  上下文敏感語言                         │
│       ↓                                                      │
│  圖靈機 ──▶  遞迴可枚舉語言                                 │
└─────────────────────────────────────────────────────────────┘

有限狀態自動機

確定性有限自動機 (DFA) 的特點是每個狀態對每個輸入符號只有唯一確定的下一個狀態。形式定義:DFA = (Q, Σ, δ, q₀, F)。

範例:設計一個 DFA 識別包含子字串 "ab" 的所有字串:

轉移函數:
- δ(q₀, 'a') = q₁, δ(q₀, 'b') = q₀
- δ(q₁, 'a') = q₁, δ(q₁, 'b') = q₂
- δ(q₂, 'a') = q₂, δ(q₂, 'b') = q₂

正則表達式

正則表達式是描述正則語言的另一種方式,與有限狀態機等價。語法包括:基本符號、空字串 ε、並聯 r|s、串聯 rs、克萊尼星 r*。正則表達式可以轉換為 NFA(使用 Thompson 構造),NFA 可以轉換為 DFA(使用子集構造),這個流程是編譯器詞法分析器的理論基礎。

"ab"      — 匹配字串 "ab"
"a|b"     — 匹配 "a" 或 "b"
"a*"      — 匹配零或多個 "a"
"(a|b)*"  — 匹配任意數量的 a 和 b 的組合
"a*b*"    — 匹配任意數量的 a 後跟任意數量的 b

下推自動機

下推自動機(PDA)比有限狀態機多了一個堆疊,這使其能夠識別上下文無關語言。下推自動機與上下文無關文法是等價的:一個語言是上下文無關的,當且僅當有一個下推自動機能夠識別它。

┌─────────────────────────────────────────────────────────────┐
│                    下推自動機結構                           │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌─────────┐      ┌─────────┐      ┌─────────────────────┐ │
│  │ 狀態控制 │─────▶│ 轉移函數 │─────▶│  無限堆疊           │ │
│  └─────────┘      └─────────┘      │ ┌───┬───┬───┐      │ │
│                                     │ │ Z │ X │ Y │ ... │ │ │
│                                     │ └───┴───┴───┴──────│ │
│                                     └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

範例語言:{aⁿbⁿ | n ≥ 1}(n 個 a 後跟 n 個 b)、匹配的括號等,這些需要「計數」或「配對」的能力。

相關連結