以下是一个简单的自动机(Finite Automaton)的代码示例,它实现了一个确定性有限自动机(DFA)。这个 DFA 接受字符串“ab”的正则语言,表示包含“ab”子串的字符串。我们将创建一个 DFA 类,它能够接受一个输入字符串,并检查该字符串是否符合 DFA 的规则。

Python 代码实现:

class DFA:
    def __init__(self, states, alphabet, transition_function, start_state, accept_states):
        """
        初始化 DFA
        :param states: 状态集合
        :param alphabet: 字母表(输入符号集合)
        :param transition_function: 转移函数,字典形式 {state: {symbol: next_state}}
        :param start_state: 初始状态
        :param accept_states: 接受状态集合
        """
        self.states = states
        self.alphabet = alphabet
        self.transition_function = transition_function
        self.start_state = start_state
        self.accept_states = accept_states

    def process(self, input_string):
        """
        处理输入字符串,并判断是否接受
        :param input_string: 输入字符串
        :return: 如果接受该字符串则返回 True,否则返回 False
        """
        current_state = self.start_state
        for symbol in input_string:
            if symbol not in self.alphabet:
                raise ValueError(f"输入符号 {symbol} 不在字母表中")
            current_state = self.transition_function[current_state].get(symbol)
            if current_state is None:
                return False
        return current_state in self.accept_states


# 定义 DFA 的状态、字母表、转移函数等
states = {'q0', 'q1', 'q2'}  # 三个状态
alphabet = {'a', 'b'}  # 字母表
start_state = 'q0'  # 初始状态
accept_states = {'q2'}  # 接受状态

# 定义转移函数
transition_function = {
    'q0': {'a': 'q1', 'b': 'q0'},
    'q1': {'a': 'q1', 'b': 'q2'},
    'q2': {'a': 'q2', 'b': 'q2'}
}

# 创建 DFA 实例
dfa = DFA(states, alphabet, transition_function, start_state, accept_states)

# 测试输入
input_string = "aab"
print(f"输入字符串 '{input_string}' 是否被接受: {dfa.process(input_string)}")

input_string = "baba"
print(f"输入字符串 '{input_string}' 是否被接受: {dfa.process(input_string)}")

代码说明:

  1. 状态(States): DFA 有三个状态:q0, q1, q2

    • q0 是初始状态。
    • q2 是接受状态。
  2. 字母表(Alphabet): DFA 只接受 ab 两个符号。

  3. 转移函数(Transition Function):

    • q0 读取 a 会转移到 q1,读取 b 会留在 q0
    • q1 读取 a 会留在 q1,读取 b 会转移到 q2
    • q2 读取 ab 都会留在 q2
  4. 接受状态(Accept States): 只有当 DFA 结束时位于 q2 状态时,它才会接受输入字符串。

  5. 处理输入: process 方法根据转移函数和输入字符串检查是否接受该字符串。

示例输出:

输入字符串 'aab' 是否被接受: True
输入字符串 'baba' 是否被接受: True

总结:

这个自动机实现了一个简单的 DFA,检查输入字符串是否包含 ab 子串。这个例子可以扩展为更复杂的自动机,例如非确定性有限自动机(NFA),或者更复杂的正则语言识别。