
最簡單的電腦
|
93
或
在這種情況,合併後的機器的成分如下:
• 新的起始狀態
• 兩個 NFA 的所有接受狀態
• 兩個 NFA 的所有規則
• 兩個額外的自由移動,將新的起始狀態連接到每個 NFA 的舊起始狀態
同樣的,這如同
Choose#to_nfa_design
容易實作:
class Choose
def to_nfa_design
first_nfa_design = first.to_nfa_design
second_nfa_design = second.to_nfa_design
start_state = Object.new
accept_states = first_nfa_design.accept_states + second_nfa_design.accept_states
rules = first_nfa_design.rulebook.rules + second_nfa_design.rulebook.rules
extra_rules = [first_nfa_design, second_nfa_design].map { |nfa_design|
FARule.new(start_state, nil, nfa_design.start_state)
}
rulebook = NFARulebook.new(rules + extra_rules)
NFADesign.new(start_state, accept_states, ...