
70
|
第 3 章
決定論
重要的是,這種自動機屬於
決定論
(
deterministic
):無論它目前的狀態為何,也不論它
讀取的字元為何,一定會確定它將在哪個狀態結束。只要我們遵守兩項限制,就能保證
這種確定:
• 無矛盾:因為規則衝突,因此無狀態機器的下一步並不明確(這意謂著沒有狀態可
能對同一個輸入字元有多個規則)。
• 不遺漏:因為缺少規則,因此無狀態機器的下一步是未知的(這意謂著每個可能輸
入字元的每個狀態必須擁有至少一條規則)。
總而言之,這些限制意謂著該機器的每一項狀態和輸入的組合都必須要有一條規則,
而遵從決定論限制的機器,它的技術名稱就是
決定論有限自動機
(
deterministic finite
automaton
,DFA)。
模擬物
決定論有限自動機的目的是作為抽象的計算模型。我們已經繪製了一些機器範例示意
圖,並且思索它們的行為,但這些機器實際上不可能存在,因此我們無法實際將資料輸
入給它們,並且觀察它們的行為。所幸 DFA 非常簡單,我們很容易以 Ruby 建置
模擬
物
(
simulation
),並直接與它互動。
讓我們藉由實作我們稱為
規則手冊
(
rulebook
)的一組規則,來開始建置模擬:
class FARule < Struct.new(:state, :character, :next_state)
def applies_to?(state, character)
self.state == state && self.character == character
end ...