ε-轉移(an epsilon-transition)
/ epsilon = EP-si-lon (the symbol ε) /
有時你會希望機器「被允許」從一個狀態溜到另一個狀態,而完全不消耗任何輸入——一個免費的移動,就像桌遊裡的祕密通道,你可以穿過去而不必花掉一個回合。那個免費移動就是 ε-轉移:一條標記著空字串 ε(epsilon)、而非真實符號的轉移。機器可以自發地走它,而且不花費任何輸入。
形式上,帶 ε-移動的自動機(即 ε-NFA)除了一般針對符號 a 的 δ(q, a) 之外,還有 δ(q, ε),給出在空字串上可達的狀態集合。在執行過程中,機器可以把「讀符號」的移動與任意多次的 ε-移動交錯進行。處理它們的自然方法是 ε-封閉:在讀每個真實符號之前與之後,把目前的「可能狀態集合」擴張,加入所有經由一連串 ε-移動可達的狀態。
ε-轉移純粹是便利——它讓機器很容易拼接起來。要為兩個語言的聯集建一台自動機,只要加一個新的起始狀態,用 ε-移動連到兩台子機器的起始狀態即可;要把一台機器接在另一台之後,就從第一台的接受狀態拉一條 ε-移動到第二台的起始狀態。這正是 Thompson 構造法把正規表示式轉成自動機的方式。而且和這裡所有的非確定性一樣,ε-移動不增加任何能力:每個 ε-NFA 都能轉成普通 NFA,再轉成 DFA。
要接受「a 的語言」或「b 的語言」,建一個新的起始狀態 s,使 δ(s, ε) = {a 起始, b 起始}。在讀任何東西之前,{s} 的 ε-封閉是 {s, a 起始, b 起始}——機器在讀了零個輸入的情況下,實際上同時就緒於兩台子機器的起點。
ε-移動在不讀任何東西的情況下換狀態——是組合機器時的完美黏著劑。
讀空字串 ε 與讀一個空白或空格符號不同;ε 意思是「完全沒有消耗任何符號」,所以 ε-移動即使在輸入結尾處也能觸發。